@venizia/ignis-docs 0.2.0 → 0.2.1-1

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.
Files changed (174) hide show
  1. package/README.md +14 -14
  2. package/content/best-practices/api-usage-examples.md +39 -19
  3. package/content/best-practices/architectural-patterns.md +24 -13
  4. package/content/best-practices/architecture-decisions.md +29 -16
  5. package/content/best-practices/code-style-standards/advanced-patterns.md +43 -31
  6. package/content/best-practices/code-style-standards/constants-configuration.md +19 -4
  7. package/content/best-practices/code-style-standards/control-flow.md +33 -1
  8. package/content/best-practices/code-style-standards/documentation.md +28 -8
  9. package/content/best-practices/code-style-standards/function-patterns.md +15 -4
  10. package/content/best-practices/code-style-standards/index.md +7 -2
  11. package/content/best-practices/code-style-standards/naming-conventions.md +27 -3
  12. package/content/best-practices/code-style-standards/route-definitions.md +9 -5
  13. package/content/best-practices/code-style-standards/tooling.md +14 -1
  14. package/content/best-practices/code-style-standards/type-safety.md +39 -6
  15. package/content/best-practices/common-pitfalls.md +59 -35
  16. package/content/best-practices/contribution-workflow.md +8 -4
  17. package/content/best-practices/data-modeling.md +78 -62
  18. package/content/best-practices/deployment-strategies.md +56 -19
  19. package/content/best-practices/error-handling.md +247 -153
  20. package/content/best-practices/index.md +6 -0
  21. package/content/best-practices/performance-optimization.md +26 -13
  22. package/content/best-practices/security-guidelines.md +35 -9
  23. package/content/best-practices/testing-strategies.md +7 -2
  24. package/content/best-practices/troubleshooting-tips.md +27 -17
  25. package/content/extensions/components/api-reference.md +109 -323
  26. package/content/extensions/components/authentication/api.md +489 -602
  27. package/content/extensions/components/authentication/errors.md +135 -498
  28. package/content/extensions/components/authentication/index.md +89 -801
  29. package/content/extensions/components/authentication/usage.md +231 -955
  30. package/content/extensions/components/authorization/api.md +991 -644
  31. package/content/extensions/components/authorization/errors.md +204 -208
  32. package/content/extensions/components/authorization/getting-started.md +227 -0
  33. package/content/extensions/components/authorization/index.md +88 -795
  34. package/content/extensions/components/authorization/usage.md +219 -528
  35. package/content/extensions/components/health-check.md +77 -243
  36. package/content/extensions/components/index.md +24 -90
  37. package/content/extensions/components/mail/api.md +553 -285
  38. package/content/extensions/components/mail/errors.md +76 -62
  39. package/content/extensions/components/mail/index.md +111 -463
  40. package/content/extensions/components/mail/usage.md +139 -173
  41. package/content/extensions/components/request-tracker.md +70 -173
  42. package/content/extensions/components/socket-io/api.md +462 -785
  43. package/content/extensions/components/socket-io/errors.md +49 -51
  44. package/content/extensions/components/socket-io/index.md +69 -372
  45. package/content/extensions/components/socket-io/usage.md +212 -105
  46. package/content/extensions/components/static-asset/api.md +461 -141
  47. package/content/extensions/components/static-asset/errors.md +121 -53
  48. package/content/extensions/components/static-asset/index.md +84 -606
  49. package/content/extensions/components/static-asset/usage.md +184 -299
  50. package/content/extensions/components/template/index.md +3 -3
  51. package/content/extensions/components/websocket/api.md +311 -404
  52. package/content/extensions/components/websocket/errors.md +47 -56
  53. package/content/extensions/components/websocket/index.md +75 -407
  54. package/content/extensions/components/websocket/usage.md +120 -338
  55. package/content/extensions/helpers/cron/index.md +52 -160
  56. package/content/extensions/helpers/crypto/index.md +67 -480
  57. package/content/extensions/helpers/crypto/reference.md +528 -0
  58. package/content/extensions/helpers/env/index.md +64 -178
  59. package/content/extensions/helpers/error/index.md +286 -196
  60. package/content/extensions/helpers/index.md +61 -47
  61. package/content/extensions/helpers/inversion/index.md +76 -550
  62. package/content/extensions/helpers/inversion/reference.md +530 -0
  63. package/content/extensions/helpers/kafka/admin.md +23 -3
  64. package/content/extensions/helpers/kafka/compile-binary.md +83 -52
  65. package/content/extensions/helpers/kafka/consumer.md +65 -28
  66. package/content/extensions/helpers/kafka/examples.md +46 -253
  67. package/content/extensions/helpers/kafka/index.md +55 -617
  68. package/content/extensions/helpers/kafka/producer.md +156 -22
  69. package/content/extensions/helpers/kafka/schema-registry.md +59 -79
  70. package/content/extensions/helpers/logger/hf-logger.md +220 -0
  71. package/content/extensions/helpers/logger/index.md +78 -552
  72. package/content/extensions/helpers/logger/pino.md +105 -0
  73. package/content/extensions/helpers/logger/reference.md +937 -0
  74. package/content/extensions/helpers/network/api.md +276 -195
  75. package/content/extensions/helpers/network/index.md +87 -524
  76. package/content/extensions/helpers/queue/index.md +80 -897
  77. package/content/extensions/helpers/queue/reference.md +494 -0
  78. package/content/extensions/helpers/redis/index.md +86 -640
  79. package/content/extensions/helpers/redis/reference.md +784 -0
  80. package/content/extensions/helpers/secrets/index.md +136 -0
  81. package/content/extensions/helpers/socket-io/api.md +325 -204
  82. package/content/extensions/helpers/socket-io/index.md +79 -429
  83. package/content/extensions/helpers/storage/api.md +584 -464
  84. package/content/extensions/helpers/storage/index.md +80 -573
  85. package/content/extensions/helpers/types/index.md +75 -495
  86. package/content/extensions/helpers/types/reference.md +689 -0
  87. package/content/extensions/helpers/uid/index.md +176 -189
  88. package/content/extensions/helpers/websocket/api.md +366 -214
  89. package/content/extensions/helpers/websocket/index.md +68 -503
  90. package/content/extensions/helpers/worker-thread/index.md +62 -396
  91. package/content/extensions/helpers/worker-thread/reference.md +428 -0
  92. package/content/extensions/index.md +38 -39
  93. package/content/extensions/src-details/mcp-server.md +96 -548
  94. package/content/guides/core-concepts/persistent/datasources.md +2 -2
  95. package/content/guides/core-concepts/persistent/index.md +5 -1
  96. package/content/guides/core-concepts/persistent/models.md +1 -1
  97. package/content/guides/core-concepts/persistent/pglite.md +218 -0
  98. package/content/guides/core-concepts/persistent/postgres-drivers.md +21 -15
  99. package/content/guides/core-concepts/persistent/search-meilisearch.md +22 -12
  100. package/content/guides/core-concepts/persistent/search-typesense.md +28 -16
  101. package/content/guides/core-concepts/persistent/sqlite.md +296 -0
  102. package/content/guides/core-concepts/persistent/transactions.md +12 -11
  103. package/content/guides/core-concepts/secrets-vault.md +177 -0
  104. package/content/guides/core-concepts/services.md +1 -1
  105. package/content/guides/get-started/5-minute-quickstart.md +59 -206
  106. package/content/guides/get-started/philosophy.md +135 -670
  107. package/content/guides/get-started/setup.md +53 -74
  108. package/content/guides/migrations/redis-helpers-migration.md +5 -4
  109. package/content/guides/migrations/scoped-rbac-migration.md +5 -5
  110. package/content/guides/migrations/unified-connectors-migration.md +8 -7
  111. package/content/guides/tutorials/ecommerce-api.md +3 -8
  112. package/content/guides/tutorials/realtime-chat.md +1 -1
  113. package/content/references/base/application.md +64 -22
  114. package/content/references/base/components.md +3 -3
  115. package/content/references/base/connectors.md +79 -136
  116. package/content/references/base/controllers.md +12 -12
  117. package/content/references/base/datasources-reference.md +600 -0
  118. package/content/references/base/datasources.md +84 -444
  119. package/content/references/base/dependency-injection.md +25 -46
  120. package/content/references/base/filter-system/application-usage.md +95 -123
  121. package/content/references/base/filter-system/array-operators.md +33 -43
  122. package/content/references/base/filter-system/comparison-operators.md +55 -63
  123. package/content/references/base/filter-system/default-filter.md +144 -350
  124. package/content/references/base/filter-system/fields-order-pagination.md +116 -148
  125. package/content/references/base/filter-system/index.md +114 -253
  126. package/content/references/base/filter-system/json-filtering.md +52 -181
  127. package/content/references/base/filter-system/list-operators.md +28 -44
  128. package/content/references/base/filter-system/logical-operators.md +69 -114
  129. package/content/references/base/filter-system/null-operators.md +41 -98
  130. package/content/references/base/filter-system/pattern-matching.md +48 -51
  131. package/content/references/base/filter-system/quick-reference.md +93 -196
  132. package/content/references/base/filter-system/range-operators.md +22 -38
  133. package/content/references/base/filter-system/tips.md +70 -133
  134. package/content/references/base/filter-system/use-cases.md +173 -232
  135. package/content/references/base/grpc-controllers.md +53 -17
  136. package/content/references/base/index.md +5 -3
  137. package/content/references/base/middlewares.md +43 -28
  138. package/content/references/base/models-reference.md +886 -0
  139. package/content/references/base/models.md +81 -1452
  140. package/content/references/base/providers.md +8 -8
  141. package/content/references/base/repositories/advanced.md +281 -419
  142. package/content/references/base/repositories/index.md +84 -644
  143. package/content/references/base/repositories/mixins.md +25 -21
  144. package/content/references/base/repositories/relations.md +194 -375
  145. package/content/references/base/repositories/soft-deletable.md +67 -55
  146. package/content/references/base/secrets.md +267 -0
  147. package/content/references/base/services.md +8 -6
  148. package/content/references/configuration/environment-variables.md +73 -21
  149. package/content/references/configuration/index.md +51 -31
  150. package/content/references/index.md +1 -1
  151. package/content/references/quick-reference.md +3 -16
  152. package/content/references/utilities/crypto.md +35 -76
  153. package/content/references/utilities/date.md +33 -73
  154. package/content/references/utilities/duration.md +85 -0
  155. package/content/references/utilities/index.md +6 -2
  156. package/content/references/utilities/jsx-reference.md +298 -0
  157. package/content/references/utilities/jsx.md +82 -525
  158. package/content/references/utilities/module.md +81 -61
  159. package/content/references/utilities/parse.md +34 -64
  160. package/content/references/utilities/performance.md +33 -58
  161. package/content/references/utilities/promise.md +28 -62
  162. package/content/references/utilities/request.md +58 -218
  163. package/content/references/utilities/retry.md +139 -0
  164. package/content/references/utilities/schema.md +43 -137
  165. package/content/references/utilities/statuses-reference.md +361 -0
  166. package/content/references/utilities/statuses.md +63 -667
  167. package/dist/mcp-server/index.js +0 -0
  168. package/dist/mcp-server/tools/github/list-project-files.tool.d.ts +1 -1
  169. package/dist/mcp-server/tools/github/list-project-files.tool.d.ts.map +1 -1
  170. package/dist/mcp-server/tools/github/list-project-files.tool.js +3 -3
  171. package/dist/mcp-server/tools/github/search-code.tool.js +1 -1
  172. package/dist/mcp-server/tools/github/verify-dependencies.tool.js +1 -1
  173. package/dist/mcp-server/tools/github/view-source-file.tool.js +1 -1
  174. package/package.json +24 -23
@@ -1,134 +1,17 @@
1
- # Examples & Troubleshooting
2
-
3
- Complete examples and common issue resolution for the Kafka helpers.
4
-
5
- ## Producer: Send Messages with Health Monitoring
6
-
7
- ```typescript
8
- import { KafkaProducerHelper, KafkaAcks } from '@venizia/ignis-helpers/kafka';
9
- import { stringSerializers } from '@platformatic/kafka';
10
-
11
- const helper = KafkaProducerHelper.newInstance({
12
- bootstrapBrokers: ['broker1:9092', 'broker2:9092'],
13
- clientId: 'interval-producer',
14
- serializers: stringSerializers,
15
- acks: KafkaAcks.ALL,
16
- onBrokerConnect: ({ broker }) => console.log(`Connected to ${broker.host}:${broker.port}`),
17
- onBrokerDisconnect: ({ broker }) => console.warn(`Disconnected from ${broker.host}`),
18
- });
19
-
20
- const producer = helper.getProducer();
21
- let count = 0;
22
-
23
- const interval = setInterval(async () => {
24
- if (!helper.isHealthy()) {
25
- console.warn('Producer not healthy, skipping...');
26
- return;
27
- }
28
-
29
- await producer.send({
30
- messages: [{
31
- topic: 'events',
32
- key: `key-${count % 3}`,
33
- value: JSON.stringify({ index: count, timestamp: new Date().toISOString() }),
34
- }],
35
- });
36
- count++;
37
- }, 100);
38
-
39
- process.on('SIGINT', async () => {
40
- clearInterval(interval);
41
- console.log(`Shutting down... (sent ${count} messages)`);
42
- await helper.close();
43
- process.exit(0);
44
- });
45
- ```
46
-
47
- ## Consumer: Callback-Based with Lag Monitoring
48
-
49
- ```typescript
50
- import { KafkaConsumerHelper } from '@venizia/ignis-helpers/kafka';
51
- import { stringDeserializers } from '@platformatic/kafka';
1
+ ---
2
+ title: Kafka Examples & Troubleshooting
3
+ description: A multi-topic admin setup script, wiring Kafka helpers into IGNIS IoC, and a common-error lookup table
4
+ difficulty: intermediate
5
+ ---
52
6
 
53
- const helper = KafkaConsumerHelper.newInstance({
54
- bootstrapBrokers: ['broker1:9092', 'broker2:9092'],
55
- clientId: 'event-consumer',
56
- groupId: 'processing-group',
57
- deserializers: stringDeserializers,
58
-
59
- onMessage: async ({ message }) => {
60
- const data = JSON.parse(message.value!);
61
- console.log(`Processing: ${message.key} -> ${JSON.stringify(data)}`);
62
- await message.commit();
63
- },
64
- onMessageDone: ({ message }) => {
65
- console.log(`Done: ${message.key}`);
66
- },
67
- onMessageError: ({ error, message }) => {
68
- console.error(`Error processing ${message?.key}:`, error.message);
69
- },
70
-
71
- onGroupJoin: ({ groupId, memberId }) => {
72
- console.log(`Joined group ${groupId} as ${memberId}`);
73
- },
74
- onGroupRebalance: ({ groupId }) => {
75
- console.log(`Rebalance in ${groupId}`);
76
- },
77
-
78
- onLag: ({ lag }) => {
79
- for (const [topic, partitionLags] of lag) {
80
- partitionLags.forEach((lagValue, partition) => {
81
- if (lagValue > 1000n) {
82
- console.warn(`High lag on ${topic}[${partition}]: ${lagValue}`);
83
- }
84
- });
85
- }
86
- },
87
- onLagError: ({ error }) => console.error('Lag error:', error),
88
- });
89
-
90
- await helper.start({ topics: ['events'] });
91
- helper.startLagMonitoring({ topics: ['events'], interval: 10_000 });
92
-
93
- process.on('SIGINT', async () => {
94
- await helper.close();
95
- process.exit(0);
96
- });
97
- ```
98
-
99
- ## Consumer: Direct Stream Access (for-await)
100
-
101
- ```typescript
102
- import { KafkaConsumerHelper } from '@venizia/ignis-helpers/kafka';
103
- import { stringDeserializers } from '@platformatic/kafka';
104
-
105
- const helper = KafkaConsumerHelper.newInstance({
106
- bootstrapBrokers: ['localhost:9092'],
107
- clientId: 'stream-consumer',
108
- groupId: 'stream-group',
109
- deserializers: stringDeserializers,
110
- onBrokerConnect: ({ broker }) => console.log(`Connected to ${broker.host}`),
111
- });
112
-
113
- // Use the consumer directly for async iterator pattern
114
- const consumer = helper.getConsumer();
115
- const stream = await consumer.consume({
116
- topics: ['orders'],
117
- mode: 'committed',
118
- fallbackMode: 'latest',
119
- });
120
-
121
- for await (const message of stream) {
122
- console.log(`${message.topic}[${message.partition}] @${message.offset}: ${message.key} -> ${message.value}`);
123
- await message.commit();
124
- }
7
+ # Examples & Troubleshooting
125
8
 
126
- await stream.close();
127
- await helper.close();
128
- ```
9
+ Two examples not covered on the reference pages, plus a lookup table for the errors you'll actually hit.
129
10
 
130
11
  ## Admin: Topic Setup Script
131
12
 
13
+ A deploy-time script that creates several topics with production configuration in one call. Run it once, from a `migrate` step or a CI job.
14
+
132
15
  ```typescript
133
16
  import { KafkaAdminHelper } from '@venizia/ignis-helpers/kafka';
134
17
 
@@ -141,7 +24,6 @@ async function setupTopics() {
141
24
 
142
25
  const admin = helper.getAdmin();
143
26
 
144
- // Create topics
145
27
  await admin.createTopics({
146
28
  topics: ['orders', 'inventory', 'notifications'],
147
29
  partitions: 6,
@@ -152,11 +34,8 @@ async function setupTopics() {
152
34
  ],
153
35
  });
154
36
 
155
- // Verify
156
37
  const topics = await admin.listTopics({ includeInternals: false });
157
38
  console.log('Topics:', topics);
158
-
159
- // Health check
160
39
  console.log('Healthy:', helper.isHealthy());
161
40
 
162
41
  await helper.close();
@@ -165,102 +44,17 @@ async function setupTopics() {
165
44
  setupTopics();
166
45
  ```
167
46
 
168
- ## Exactly-Once: Consume-Transform-Produce
169
-
170
- ```typescript
171
- import { KafkaProducerHelper, KafkaConsumerHelper } from '@venizia/ignis-helpers/kafka';
172
- import { stringSerializers, stringDeserializers } from '@platformatic/kafka';
173
-
174
- const producer = KafkaProducerHelper.newInstance({
175
- bootstrapBrokers: ['localhost:9092'],
176
- clientId: 'eos-producer',
177
- serializers: stringSerializers,
178
- transactionalId: 'eos-tx',
179
- idempotent: true,
180
- });
181
-
182
- const consumer = KafkaConsumerHelper.newInstance({
183
- bootstrapBrokers: ['localhost:9092'],
184
- clientId: 'eos-consumer',
185
- groupId: 'eos-group',
186
- deserializers: stringDeserializers,
187
- autocommit: false,
188
-
189
- onMessage: async ({ message }) => {
190
- // Consume-transform-produce within a single transaction
191
- const transformed = JSON.stringify({
192
- ...JSON.parse(message.value!),
193
- processedAt: new Date().toISOString(),
194
- });
195
-
196
- await producer.runInTransaction(async ({ send, addConsumer, addOffset }) => {
197
- await addConsumer(consumer.getConsumer());
198
- await addOffset(message);
199
- await send({
200
- messages: [{ topic: 'processed-events', key: message.key, value: transformed }],
201
- });
202
- });
203
- },
204
- onMessageError: ({ error }) => console.error('Processing error:', error),
205
- });
206
-
207
- await consumer.start({ topics: ['raw-events'] });
208
- ```
209
-
210
- ## Schema Registry: Validated Messages
211
-
212
- ```typescript
213
- import {
214
- KafkaSchemaRegistryHelper,
215
- KafkaProducerHelper,
216
- KafkaConsumerHelper,
217
- } from '@venizia/ignis-helpers/kafka';
218
-
219
- const registry = KafkaSchemaRegistryHelper.newInstance({
220
- url: 'http://localhost:8081',
221
- });
222
-
223
- const producer = KafkaProducerHelper.newInstance({
224
- bootstrapBrokers: ['localhost:9092'],
225
- clientId: 'schema-producer',
226
- registry: registry.getRegistry(),
227
- onBrokerConnect: ({ broker }) => console.log(`Producer connected to ${broker.host}`),
228
- });
229
-
230
- // Sends schema-validated objects
231
- await producer.getProducer().send({
232
- messages: [{
233
- topic: 'orders',
234
- key: 'order-1',
235
- value: { id: 1, status: 'created', total: 99.99 },
236
- }],
237
- });
238
-
239
- const consumer = KafkaConsumerHelper.newInstance({
240
- bootstrapBrokers: ['localhost:9092'],
241
- clientId: 'schema-consumer',
242
- groupId: 'schema-group',
243
- registry: registry.getRegistry(),
244
- onMessage: async ({ message }) => {
245
- // message.value is auto-deserialized to the schema type
246
- console.log(message.value.id, message.value.status);
247
- await message.commit();
248
- },
249
- });
250
-
251
- await consumer.start({ topics: ['orders'] });
252
- ```
253
-
254
47
  ## Using Helpers with IGNIS IoC
255
48
 
49
+ Bind each helper once at boot. Inject it wherever you need to publish or consume - the same pattern IGNIS uses for every other connected resource.
50
+
256
51
  ```typescript
257
52
  import {
258
53
  KafkaProducerHelper,
259
54
  KafkaConsumerHelper,
260
- KafkaAdminHelper,
261
55
  } from '@venizia/ignis-helpers/kafka';
262
56
  import { stringSerializers, stringDeserializers } from '@platformatic/kafka';
263
- import { inject, injectable } from '@venizia/ignis-inversion';
57
+ import { inject } from '@venizia/ignis-inversion';
264
58
 
265
59
  // Register helpers in the IoC container
266
60
  app.bind('kafka.producer').to(
@@ -286,7 +80,6 @@ app.bind('kafka.consumer').to(
286
80
  );
287
81
 
288
82
  // Inject into services
289
- @injectable()
290
83
  export class OrderEventService {
291
84
  constructor(
292
85
  @inject({ key: 'kafka.producer' }) private producer: KafkaProducerHelper,
@@ -307,24 +100,22 @@ export class OrderEventService {
307
100
 
308
101
  ## Troubleshooting
309
102
 
310
- ### Common Issues
311
-
312
103
  | Error | Cause | Fix |
313
104
  |-------|-------|-----|
314
- | `ECONNREFUSED localhost:9092` | Broker `advertised.listeners` set to `localhost` but connecting remotely | Set `KAFKA_ADVERTISED_LISTENERS` with the correct external host IP |
315
- | `Request timed out` | SASL handshake or broker unreachable | Add `connectTimeout: 30_000, requestTimeout: 30_000` |
316
- | `Connection closed` | Connecting without SASL to a SASL-required listener | Check `KAFKA_LISTENER_SECURITY_PROTOCOL_MAP` -- use `SASL_PLAINTEXT` |
317
- | `Cannot find a suitable SASL mechanism` | Wrong mechanism (e.g., `PLAIN` when broker only supports `SCRAM-SHA-512`) | Check error message for supported mechanisms, match `mechanism` |
318
- | `Failed to deserialize a message` | Mismatch between serializer and deserializer | Ensure matching serde. For old data, use a new consumer group or recreate topic |
319
- | `JSON.stringify cannot serialize BigInt` | `message.offset` and `message.timestamp` are `bigint` | Use custom replacer: `(_k, v) => typeof v === 'bigint' ? v.toString() : v` |
320
- | Consumer idle (no messages) | More consumers than partitions | Ensure `numPartitions >= numConsumers` |
321
- | `isHealthy()` returns `false` | All brokers disconnected (a single idle disconnect won't trigger this) | Check broker addresses, SASL config, network connectivity. Use `getConnectedBrokerCount()` for details |
322
- | `isReady()` returns `false` (consumer) | Consumer not active -- `start()` not called or stream closed | Call `await helper.start({ topics })` before checking readiness |
323
- | Graceful shutdown timeout | In-flight requests taking too long | Increase `shutdownTimeout` or use `close({ isForce: true })` |
105
+ | `ECONNREFUSED localhost:9092` | Broker `advertised.listeners` set to `localhost` but you're connecting remotely | Set `KAFKA_ADVERTISED_LISTENERS` to the correct external host IP |
106
+ | `Request timed out` | SASL handshake stalled, or the broker is unreachable | Add `connectTimeout: 30_000, requestTimeout: 30_000` |
107
+ | `Connection closed` | Connecting without SASL to a SASL-required listener | Check `KAFKA_LISTENER_SECURITY_PROTOCOL_MAP` - use `SASL_PLAINTEXT` |
108
+ | `Cannot find a suitable SASL mechanism` | Wrong mechanism, e.g. `PLAIN` when the broker only supports `SCRAM-SHA-512` | Read the error for the supported mechanisms, match `mechanism` to one |
109
+ | `Failed to deserialize a message` | Serializer and deserializer don't match | Match the serde on both sides. For old data, use a new consumer group or recreate the topic |
110
+ | `JSON.stringify cannot serialize BigInt` | `message.offset` and `message.timestamp` are `bigint` | Use a custom replacer: `(_k, v) => typeof v === 'bigint' ? v.toString() : v` |
111
+ | Consumer sits idle, no messages | More consumers than partitions | Make sure `numPartitions >= numConsumers` |
112
+ | `isHealthy()` returns `false` | Every broker disconnected - one idle disconnect alone won't trigger this | Check broker addresses, SASL config, network. `getConnectedBrokerCount()` gives the exact count |
113
+ | `isReady()` returns `false` (consumer) | Consumer isn't active - `start()` was never called, or the stream closed | Call `await helper.start({ topics })` before checking readiness |
114
+ | Graceful shutdown times out | In-flight requests are taking too long | Raise `shutdownTimeout`, or call `close({ isForce: true })` |
324
115
 
325
116
  ### Docker Kafka Configuration
326
117
 
327
- When running Kafka in Docker and connecting from outside the container:
118
+ Connecting from outside a Dockerized Kafka needs two listeners: one for containers talking to each other, one for the host.
328
119
 
329
120
  ```yaml
330
121
  environment:
@@ -338,24 +129,26 @@ environment:
338
129
  CONTROLLER:PLAINTEXT
339
130
  ```
340
131
 
341
- - `INTERNAL` -- used for inter-broker communication
342
- - `EXTERNAL` -- used for client connections from outside Docker
343
- - `CONTROLLER` -- used for KRaft controller communication
344
-
345
- ## See Also
346
-
347
- - **Kafka Pages:**
348
- - [Overview & Fundamentals](./) -- Connection, serialization, constants, compression
349
- - [Producer](./producer) -- Producer helper, transactions, API reference
350
- - [Consumer](./consumer) -- Consumer helper, callbacks, lag monitoring, API reference
351
- - [Admin](./admin) -- Admin helper & API reference
352
- - [Schema Registry](./schema-registry) -- Schema registry helper
353
-
354
- - **Other Helpers:**
355
- - [Queue Helper](../queue/) -- BullMQ, MQTT, and in-memory queues
356
- - [Redis Helper](../redis/) -- Redis connection management
357
-
358
- - **External Resources:**
359
- - [@platformatic/kafka](https://github.com/platformatic/kafka) -- Underlying Kafka client library
360
- - [Apache Kafka Documentation](https://kafka.apache.org/documentation/) -- Official Kafka docs
361
- - [KIP-848](https://cwiki.apache.org/confluence/display/KAFKA/KIP-848) -- New consumer group protocol
132
+ | Listener | Used for |
133
+ |---|---|
134
+ | `INTERNAL` | Inter-broker communication |
135
+ | `EXTERNAL` | Client connections from outside Docker |
136
+ | `CONTROLLER` | KRaft controller communication |
137
+
138
+ ## See also
139
+
140
+ - [Kafka Overview](./) - the four helpers, shared health/close API, and the compile-binary caveat
141
+ - [Producer](./producer) - connection & SASL setup, serialization, compression, transactions
142
+ - [Consumer](./consumer) - message callbacks, automatic reconnect, lag monitoring
143
+ - [Admin](./admin) - topic, group, offset, ACL, and quota management
144
+ - [Schema Registry](./schema-registry) - schema-validated serialization
145
+ - [Compiling to a Single Binary](./compile-binary) - required if any example on this page ships inside a `bun build --compile` binary
146
+ - [Queue Helpers](../queue/) - BullMQ, MQTT, and the in-memory queue
147
+ - [Redis Helper](../redis/) - Redis connection management
148
+
149
+ **Files:**
150
+
151
+ - [`packages/helpers/src/modules/queue/kafka/producer.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/helpers/src/modules/queue/kafka/producer.ts) - `KafkaProducerHelper`
152
+ - [`packages/helpers/src/modules/queue/kafka/consumer.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/helpers/src/modules/queue/kafka/consumer.ts) - `KafkaConsumerHelper`
153
+ - [`packages/helpers/src/modules/queue/kafka/admin.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/helpers/src/modules/queue/kafka/admin.ts) - `KafkaAdminHelper`
154
+ - [`packages/helpers/src/modules/queue/kafka/index.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/helpers/src/modules/queue/kafka/index.ts) - the `/kafka` sub-path barrel