n8n-nodes-kafka-batch-consumer 1.0.23 → 1.0.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -38,6 +38,37 @@ npm run build
|
|
|
38
38
|
- **Read Timeout**: Maximum time to wait for messages in milliseconds (default: `60000`)
|
|
39
39
|
- **Parse JSON**: Whether to parse message values as JSON (default: `true`)
|
|
40
40
|
|
|
41
|
+
## Understanding Timeouts
|
|
42
|
+
|
|
43
|
+
The node uses two different timeout configurations that serve distinct purposes:
|
|
44
|
+
|
|
45
|
+
### Session Timeout (Kafka/Broker-side)
|
|
46
|
+
|
|
47
|
+
- **Purpose**: Manages the connection between the consumer and the Kafka broker
|
|
48
|
+
- **Function**: The broker uses this to determine if the consumer is still "alive" and part of the consumer group
|
|
49
|
+
- **Behavior**:
|
|
50
|
+
- The consumer must send heartbeats to the broker within this time
|
|
51
|
+
- If the broker doesn't receive heartbeats for `sessionTimeout` milliseconds, it considers the consumer "dead" and triggers a rebalancing (reassigning partitions to other consumers in the group)
|
|
52
|
+
- **Typical values**: 6000-300000 ms (6-300 seconds). Minimum 6000ms enforced by the broker
|
|
53
|
+
- **Managed by**: Kafka broker and KafkaJS consumer (automatic background heartbeats)
|
|
54
|
+
|
|
55
|
+
### Read Timeout (Application-side)
|
|
56
|
+
|
|
57
|
+
- **Purpose**: Controls how long the n8n node waits to collect batch messages
|
|
58
|
+
- **Function**: Prevents the workflow from blocking indefinitely if insufficient messages arrive to complete the batch
|
|
59
|
+
- **Behavior**:
|
|
60
|
+
- If `batchSize` messages arrive before the timeout → returns immediately
|
|
61
|
+
- If the timeout expires first → returns collected messages (partial batch)
|
|
62
|
+
- **Typical values**: 60000 ms (60 seconds) by default, user-configurable
|
|
63
|
+
- **Managed by**: Application code (setTimeout in the execute method)
|
|
64
|
+
|
|
65
|
+
### Why Both Are Needed
|
|
66
|
+
|
|
67
|
+
- **Session Timeout alone**: The consumer would stay connected to the broker, but the n8n workflow would block forever if messages don't arrive
|
|
68
|
+
- **Read Timeout alone**: The workflow would complete correctly, but the broker might disconnect the consumer during long waits if heartbeats aren't maintained
|
|
69
|
+
|
|
70
|
+
**Best Practice**: Keep Session Timeout ≥ Read Timeout to avoid broker disconnections while waiting for messages. However, KafkaJS sends heartbeats automatically in the background, so the consumer stays alive even during longer Read Timeouts.
|
|
71
|
+
|
|
41
72
|
## Credentials
|
|
42
73
|
|
|
43
74
|
The node supports optional Kafka credentials with the following features:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KafkaBatchConsumer.node.d.ts","sourceRoot":"","sources":["../../../src/nodes/KafkaBatchConsumer/KafkaBatchConsumer.node.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,oBAAoB,EAErB,MAAM,cAAc,CAAC;AAItB;;;;;GAKG;AACH,qBAAa,kBAAmB,YAAW,SAAS;IAClD,WAAW,EAAE,oBAAoB,CAmF/B;IAEF;;;OAGG;IACG,OAAO,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"KafkaBatchConsumer.node.d.ts","sourceRoot":"","sources":["../../../src/nodes/KafkaBatchConsumer/KafkaBatchConsumer.node.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,oBAAoB,EAErB,MAAM,cAAc,CAAC;AAItB;;;;;GAKG;AACH,qBAAa,kBAAmB,YAAW,SAAS;IAClD,WAAW,EAAE,oBAAoB,CAmF/B;IAEF;;;OAGG;IACG,OAAO,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;CAsPxE"}
|
|
@@ -108,7 +108,7 @@ class KafkaBatchConsumer {
|
|
|
108
108
|
const topic = this.getNodeParameter('topic', 0);
|
|
109
109
|
const batchSize = this.getNodeParameter('batchSize', 0);
|
|
110
110
|
const fromBeginning = this.getNodeParameter('fromBeginning', 0);
|
|
111
|
-
|
|
111
|
+
const sessionTimeout = this.getNodeParameter('sessionTimeout', 0);
|
|
112
112
|
// Validate session timeout (Kafka brokers typically require min 6000ms)
|
|
113
113
|
if (sessionTimeout < 6000) {
|
|
114
114
|
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Session timeout must be at least 6000ms (6 seconds). Current value: ${sessionTimeout}ms. Kafka brokers require a minimum as configured by group.min.session.timeout.ms.`);
|
|
@@ -197,14 +197,6 @@ class KafkaBatchConsumer {
|
|
|
197
197
|
const collectionPromise = new Promise((resolve) => {
|
|
198
198
|
resolvePromise = resolve;
|
|
199
199
|
});
|
|
200
|
-
// Set maximum wait time for message collection
|
|
201
|
-
// When timeout is reached, stop the consumer and resolve with partial batch
|
|
202
|
-
timeoutHandle = setTimeout(() => {
|
|
203
|
-
// Don't wait for consumer.stop() - just resolve immediately
|
|
204
|
-
if (resolvePromise) {
|
|
205
|
-
resolvePromise(); // Resolve with partial batch on timeout
|
|
206
|
-
}
|
|
207
|
-
}, readTimeout);
|
|
208
200
|
/**
|
|
209
201
|
* Start message consumption
|
|
210
202
|
* eachMessage callback processes messages one by one
|
|
@@ -213,6 +205,7 @@ class KafkaBatchConsumer {
|
|
|
213
205
|
*/
|
|
214
206
|
consumer.run({
|
|
215
207
|
eachMessage: async ({ topic, partition, message }) => {
|
|
208
|
+
console.log(`[eachMessage] Ricevuto messaggio: topic=${topic}, partition=${partition}, offset=${message.offset}`);
|
|
216
209
|
/**
|
|
217
210
|
* Step 6: Output Format
|
|
218
211
|
* Process each message and format for N8N output
|
|
@@ -242,8 +235,10 @@ class KafkaBatchConsumer {
|
|
|
242
235
|
},
|
|
243
236
|
};
|
|
244
237
|
messages.push(messageData);
|
|
238
|
+
console.log(`[eachMessage] Messaggi raccolti finora: ${messages.length}/${batchSize}`);
|
|
245
239
|
// Check if batch size reached
|
|
246
240
|
if (messages.length >= batchSize) {
|
|
241
|
+
console.log(`[eachMessage] Batch size raggiunto, risolvo Promise`);
|
|
247
242
|
if (timeoutHandle) {
|
|
248
243
|
clearTimeout(timeoutHandle); // Cancel timeout
|
|
249
244
|
}
|
|
@@ -253,6 +248,32 @@ class KafkaBatchConsumer {
|
|
|
253
248
|
}
|
|
254
249
|
},
|
|
255
250
|
});
|
|
251
|
+
// Wait a moment for consumer to start fetching, then set timeout
|
|
252
|
+
// This prevents timeout from firing before messages are fetched
|
|
253
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
254
|
+
console.log(`Avvio timeout di ${readTimeout}ms per raccolta messaggi`);
|
|
255
|
+
// Set maximum wait time for message collection
|
|
256
|
+
// When timeout is reached, stop the consumer and resolve with partial batch
|
|
257
|
+
timeoutHandle = setTimeout(() => {
|
|
258
|
+
console.log(`[Timeout] Scaduto dopo ${readTimeout}ms, messaggi raccolti: ${messages.length}`);
|
|
259
|
+
// Don't wait for consumer.stop() - just resolve immediately
|
|
260
|
+
if (resolvePromise) {
|
|
261
|
+
resolvePromise(); // Resolve with partial batch on timeout
|
|
262
|
+
}
|
|
263
|
+
}, readTimeout);
|
|
264
|
+
// Wait a moment for consumer to start fetching, then set timeout
|
|
265
|
+
// This prevents timeout from firing before messages are fetched
|
|
266
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
267
|
+
console.log(`Avvio timeout di ${readTimeout}ms per raccolta messaggi`);
|
|
268
|
+
// Set maximum wait time for message collection
|
|
269
|
+
// When timeout is reached, stop the consumer and resolve with partial batch
|
|
270
|
+
timeoutHandle = setTimeout(() => {
|
|
271
|
+
console.log(`[Timeout] Scaduto dopo ${readTimeout}ms, messaggi raccolti: ${messages.length}`);
|
|
272
|
+
// Don't wait for consumer.stop() - just resolve immediately
|
|
273
|
+
if (resolvePromise) {
|
|
274
|
+
resolvePromise(); // Resolve with partial batch on timeout
|
|
275
|
+
}
|
|
276
|
+
}, readTimeout);
|
|
256
277
|
/**
|
|
257
278
|
* Wait for collection to complete
|
|
258
279
|
* Completes when: batch size reached OR timeout occurs
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KafkaBatchConsumer.node.js","sourceRoot":"","sources":["../../../src/nodes/KafkaBatchConsumer/KafkaBatchConsumer.node.ts"],"names":[],"mappings":";AAAA,8BAA8B;;;AAE9B,+CAMsB;AAEtB,qCAA8D;AAE9D;;;;;GAKG;AACH,MAAa,kBAAkB;IAA/B;QACE,gBAAW,GAAyB;YAClC,WAAW,EAAE,sBAAsB;YACnC,IAAI,EAAE,oBAAoB;YAC1B,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,CAAC,WAAW,CAAC;YACpB,OAAO,EAAE,CAAC;YACV,WAAW,EAAE,wCAAwC;YACrD,QAAQ,EAAE;gBACR,IAAI,EAAE,sBAAsB;aAC7B;YACD,MAAM,EAAE,CAAC,MAAM,CAAC;YAChB,OAAO,EAAE,CAAC,MAAM,CAAC;YACjB,0EAA0E;YAC1E,WAAW,EAAE;gBACX;oBACE,IAAI,EAAE,OAAO;oBACb,QAAQ,EAAE,IAAI;iBACf;aACF;YACD,4CAA4C;YAC5C,UAAU,EAAE;gBACV;oBACE,WAAW,EAAE,UAAU;oBACvB,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,oBAAoB;oBAC7B,QAAQ,EAAE,IAAI;oBACd,WAAW,EAAE,2BAA2B;iBACzC;gBACD;oBACE,WAAW,EAAE,OAAO;oBACpB,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,QAAQ,EAAE,IAAI;oBACd,WAAW,EAAE,6BAA6B;iBAC3C;gBACD;oBACE,WAAW,EAAE,YAAY;oBACzB,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,QAAQ,EAAE,IAAI;oBACd,WAAW,EAAE,0CAA0C;iBACxD;gBACD;oBACE,WAAW,EAAE,gBAAgB;oBAC7B,IAAI,EAAE,eAAe;oBACrB,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,KAAK;oBACd,WAAW,EAAE,iDAAiD;iBAC/D;gBACD;oBACE,WAAW,EAAE,iBAAiB;oBAC9B,IAAI,EAAE,gBAAgB;oBACtB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,KAAK;oBACd,WAAW,EAAE,+EAA+E;iBAC7F;gBACD;oBACE,WAAW,EAAE,SAAS;oBACtB,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,YAAY;oBAClB,WAAW,EAAE,YAAY;oBACzB,OAAO,EAAE,EAAE;oBACX,OAAO,EAAE;wBACP;4BACE,WAAW,EAAE,cAAc;4BAC3B,IAAI,EAAE,aAAa;4BACnB,IAAI,EAAE,QAAQ;4BACd,OAAO,EAAE,KAAK;4BACd,WAAW,EAAE,mDAAmD;yBACjE;wBACD;4BACE,WAAW,EAAE,YAAY;4BACzB,IAAI,EAAE,WAAW;4BACjB,IAAI,EAAE,SAAS;4BACf,OAAO,EAAE,IAAI;4BACb,WAAW,EAAE,yCAAyC;yBACvD;qBACF;iBACF;aACF;SACF,CAAC;
|
|
1
|
+
{"version":3,"file":"KafkaBatchConsumer.node.js","sourceRoot":"","sources":["../../../src/nodes/KafkaBatchConsumer/KafkaBatchConsumer.node.ts"],"names":[],"mappings":"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"}
|