You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/docs/asciidoc/User-Guide.adoc
+6-3Lines changed: 6 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -45,6 +45,8 @@ NOTE: Above sample code used parquet as example data source. You can configure y
45
45
46
46
NOTE: In case of databricks deployment, it is recommended to store and retrieve sensitive credentials from Databricks secrets. Please refer to <<Using Databricks Secret Management>> on how to configure secrets and use them in notebook.
47
47
48
+
NOTE: Solace Partitioned Queue's is not supported.
49
+
48
50
=== Databricks Considerations
49
51
50
52
In case if you are using Shared compute cluster, make sure your cluster has https://docs.databricks.com/en/data-governance/unity-catalog/manage-privileges/allowlist.html[appropriate permissions] to install connector from maven central and access the jars. Please contact your Databricks administrator for required permissions.
@@ -73,14 +75,15 @@ NOTE: In case of recovery, connector uses offset state from LVQ to identify last
73
75
74
76
In some cases, there might be checkpoint failures as spark may fail to write to checkpoint during instance crash or unavailability or other reasons. Though the connector will handle duplicates in most cases, we recommend to keep your downstream systems idempotent.
75
77
76
-
==== Pre-requisites for LVQ creation
77
-
The following pre-requisites are applicable for LVQ that are provisioned by Solace Administrator.
78
+
==== Prerequisites for LVQ creation
79
+
The following prerequisites are applicable for LVQ that are provisioned by Solace Administrator.
80
+
78
81
1. The Queue should be of type Exclusive
79
82
2. Spool Quota should be set to 0
80
83
3. Owner of the Queue should be the client username used by the micro integration
81
84
4. Non-Owner access should be set to No Access to prevent unauthorized access
82
85
5. Add a topic subscription
83
-
6. Ensure the ACL applied to the user has publish access to the topic subscribed by LVQ
86
+
6. Ensure the ACL applied to the user has publish and subscribe access to the topic subscribed by LVQ
84
87
85
88
The following pre-requisites are applicable if the micro integration need to create LVQ if it doesn't exist.
@@ -289,7 +289,8 @@ public void commit(Offset end) {
289
289
290
290
if(!offsetToCommit.isEmpty()) {
291
291
currentCheckpoint = offsetToCommit;
292
-
log.trace("SolaceSparkConnector - Final checkpoint publishing to LVQ {}", newGson().toJson(offsetToCommit));
292
+
log.info("SolaceSparkConnector - Final checkpoint published to LVQ on topic {}", properties.getOrDefault(SolaceSparkStreamingProperties.SOLACE_SPARK_CONNECTOR_LVQ_TOPIC, SolaceSparkStreamingProperties.SOLACE_SPARK_CONNECTOR_LVQ_DEFAULT_TOPIC));
293
+
log.trace("SolaceSparkConnector - Final checkpoint publishing to LVQ {} on topic {}", newGson().toJson(offsetToCommit), properties.getOrDefault(SolaceSparkStreamingProperties.SOLACE_SPARK_CONNECTOR_LVQ_TOPIC, SolaceSparkStreamingProperties.SOLACE_SPARK_CONNECTOR_LVQ_DEFAULT_TOPIC));
@@ -96,7 +96,7 @@ public SolaceInputPartitionReader(SolaceInputPartition inputPartition, boolean i
96
96
log.info("SolaceSparkConnector - Acknowledging any processed messages to Solace as commit is successful");
97
97
longstartTime = System.currentTimeMillis();
98
98
SolaceMessageTracker.ackMessages(uniqueId);
99
-
log.trace("SolaceSparkConnector - Total time taken to acknowledge messages {} ms", (System.currentTimeMillis() - startTime));
99
+
log.info("SolaceSparkConnector - Total time taken to acknowledge messages {} ms", (System.currentTimeMillis() - startTime));
100
100
} else {
101
101
log.info("SolaceSparkConnector - Spark Batch with id {} is requesting data again. It may be because of multiple operations on same dataframe.", currentBatchId);
102
102
isCommitTriggered = false;
@@ -185,7 +185,7 @@ public InternalRow get() {
185
185
}
186
186
// No need to add message to tracker as the call is from same dataframe operation.
187
187
if (shouldTrackMessage) {
188
-
if (solaceRecord.getPartitionKey() != null && !solaceRecord.getPartitionKey().isEmpty()) {
188
+
if (solaceRecord.getPartitionKey() != null && !solaceRecord.getPartitionKey().isEmpty() && isPartitionQueue) {
log.info("SolaceSparkConnector - File path {} to store checkpoint processed in worker node {}", path.toString(), this.solaceInputPartition.getPreferredLocation());
log.trace("SolaceSparkConnector - File path {} to store checkpoint processed in worker node {}", path.toString(), this.solaceInputPartition.getPreferredLocation());
346
346
PathparentDir = path.getParent();
347
347
if (parentDir != null) {
348
348
// Create the directory and all nonexistent parent directories
349
349
Files.createDirectories(parentDir);
350
-
log.trace("SolaceSparkConnector - Created parent directory {} for file path {}", parentDir.toString(), path.toString());
350
+
log.info("SolaceSparkConnector - Created parent directory {} for file path {}", parentDir.toString(), path.toString());
log.info("SolaceSparkConnector - No processed message id's available for input partition {} and nothing is written to checkpoint {}", this.solaceInputPartition.getId(), this.checkpointLocation);
371
373
}
372
374
373
-
374
375
log.info("SolaceSparkConnector - Total time taken by executor is {} ms for Task {}", context.taskMetrics().executorRunTime(), uniqueId);
0 commit comments