SKILL.md
Kafka Integration Skill
You are an expert in integrating Apache Kafka with Platformatic Watt for event-driven microservices.
Prerequisites Check
Before any Kafka setup, verify:
- Node.js Version: Watt requires Node.js v22.19.0+
``bash node --version `` If below v22.19.0, inform user they must upgrade Node.js first.
- Existing Watt Config: Check if
watt.jsonalready exists
``bash ls watt.json 2>/dev/null ` If no watt.json, suggest running /watt init` first to set up Watt.
Command Router
Based on user input ($ARGUMENTS), route to the appropriate workflow:
| Input Pattern | Action |
|---|---|
hooks, webhooks, (empty) |
Run Kafka-Hooks Setup |
producer, consumer, client |
Run Kafka Client Setup |
monitoring, lag, health |
Run Consumer Lag Monitoring Setup |
tracing, opentelemetry, otel |
Run Kafka Tracing Setup |
migrate kafkajs, kafkajs, replace kafkajs |
Run KafkaJS Migration Workflow |
migrate node-rdkafka, node-rdkafka, node rdkafka, rdkafka, librdkafka, Kafka.Producer, Kafka.KafkaConsumer, ProducerStream, ConsumerStream |
Run node-rdkafka Migration Workflow |
migrate, migration |
Run Migration Detection Workflow |
Kafka-Hooks Setup
When user requests Kafka webhook/hook integration:
- Read [references/kafka.md](references/kafka.md)
- Choose integration approach:
- @platformatic/kafka-hooks: Kafka-to-HTTP webhooks (recommended for Watt) - @platformatic/kafka: Direct producer/consumer in your services
- Create kafka-hooks service with
npx wattpm@latest create - Configure topics, webhooks, and request/response patterns
Kafka-Hooks Patterns
- Webhook: Kafka messages → HTTP endpoints (with DLQ)
- Request/Response: HTTP → Kafka → HTTP (correlation IDs)
- HTTP Publishing: POST to
/topics/{topicName}
Kafka Client Setup
When user requests direct Kafka producer/consumer integration:
- Read [references/kafka.md](references/kafka.md)
- Install
@platformatic/kafka:
``bash npm install @platformatic/kafka ``
- Set up producer and/or consumer in the target service
- Configure serializers/deserializers based on message format
Consumer Lag Monitoring Setup
When user requests Kafka consumer lag monitoring:
- Read [references/kafka.md](references/kafka.md)
- Install
@platformatic/watt-plugin-kafka-health:
``bash npm install @platformatic/watt-plugin-kafka-health ``
- Add plugin to service
watt.json - Configure lag threshold and check interval
Kafka Tracing Setup
When user requests OpenTelemetry tracing for Kafka:
- Read [references/kafka.md](references/kafka.md)
- Install
@platformatic/kafka-opentelemetry:
``bash npm install @platformatic/kafka-opentelemetry ``
- Enable instrumentation in the service
KafkaJS Migration Workflow
When user wants to migrate from KafkaJS to @platformatic/kafka:
- Read [references/kafkajs-migration.md](references/kafkajs-migration.md)
- Scan the project for KafkaJS usage patterns:
- require('kafkajs') or from 'kafkajs' imports - new Kafka({...}) factory instantiation - .producer(), .consumer(), .admin() calls - connect() / disconnect() lifecycle calls - subscribe() + run({ eachMessage }) consumer pattern - sendBatch() calls - CompressionTypes usage - transaction() calls - Error handling with KafkaJS* error classes
- Apply the migration checklist from the reference, transforming each pattern
- Verify the migration covers all areas:
- Client creation (factory → direct instantiation) - Connection lifecycle (connect/disconnect → lazy/close) - Producer API (topic per-send → topic per-message, serializers) - Consumer API (callback → stream, offset modes) - Admin API (new method signatures) - Error handling (retriable → canRetry, new error classes) - Events (custom events → diagnostics_channel)
node-rdkafka Migration Workflow
When user wants to migrate from node-rdkafka to @platformatic/kafka:
- Read [references/node-rdkafka-migration.md](references/node-rdkafka-migration.md)
- Scan the project for node-rdkafka usage patterns:
- require('node-rdkafka') or from 'node-rdkafka' imports - new Kafka.Producer(...) - new Kafka.KafkaConsumer(...) - Kafka.Producer.createWriteStream(...) - Kafka.KafkaConsumer.createReadStream(...) - .produce(...), .poll(), .consume(...), .subscribe(...) - .connect(...), .disconnect(...), .on('ready'), .on('data'), .on('event.error') - .getMetadata(...) - librdkafka options such as metadata.broker.list, group.id, enable.auto.commit, security.protocol, sasl.mechanisms
- Replace
node-rdkafkawith@platformatic/kafkain dependencies using the detected package manager - Transform producers first, then consumers, then stream wrappers, then metadata/admin usage
- Update shutdown paths from callback/event disconnects to
await client.close() - Verify the migration checklist from the reference
Migration Detection Workflow
When user asks for a Kafka migration but does not specify the source client:
- Inspect
package.jsonand lockfiles forkafkajsornode-rdkafka - Search source files for imports from
kafkajsornode-rdkafka - If KafkaJS is found, run KafkaJS Migration Workflow
- If node-rdkafka is found, run node-rdkafka Migration Workflow
- If both are found, migrate one client at a time and start with the one with fewer call sites
- If neither is found, ask the user which Kafka client they are migrating from
Important Notes
- Internal service URLs:
http://{service-id}.plt.local - Environment variables in watt.json use
{VAR_NAME}(curly braces, no dollar sign) - Kafka-hooks is the recommended approach for Watt multi-service architectures
- Always configure Dead Letter Queues (DLQ) for production webhook topics