Help us improve
Share bugs, ideas, or general feedback.
From kafka-skills
Reviews Kafka dead letter queue implementations for completeness using Lenses MCP. Inspects DLQ topics, configuration, monitoring, metadata, retry logic, and connector alignment.
npx claudepluginhub lensesio/agentic-engineering-for-apache-kafka --plugin kafka-skillsHow this skill is triggered — by the user, by Claude, or both
Slash command
/kafka-skills:kafka-dlq-review [required: environment name][required: environment name]This skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Reviews dead letter queue implementations for completeness and best practices. DLQs are a cross-cutting concern that every Kafka consumer eventually needs. Most teams implement them as an afterthought and forget to monitor them.
Audits Kafka topic configurations against production best practices using the Lenses MCP server. Checks replication factor, retention, partitions, compaction, naming conventions, orphaned topics, and missing metadata.
Guides Kafka topic design (partitions, replication), KafkaJS idempotent producers/consumers, consumer lag monitoring, exactly-once semantics, schema registry, compacted topics, and DLQ patterns. Use for reliable streaming implementations.
Provides message queue knowledge base with broker comparisons (RabbitMQ, Kafka, SQS, Redis Streams), delivery guarantees, consumer groups, and advanced RabbitMQ/Kafka patterns for audits and generation.
Share bugs, ideas, or general feedback.
Reviews dead letter queue implementations for completeness and best practices. DLQs are a cross-cutting concern that every Kafka consumer eventually needs. Most teams implement them as an afterthought and forget to monitor them.
Target environment: $ARGUMENTS
Copy this checklist and track your progress:
DLQ Review Progress:
- [ ] Step 1: Discover DLQ topics
- [ ] Step 2: Check DLQ topic configuration
- [ ] Step 3: Verify DLQ monitoring
- [ ] Step 4: Sample DLQ messages
- [ ] Step 5: Audit connector DLQ configs
- [ ] Step 6: Scan codebase for error handling
- [ ] Step 7: Generate report with maturity assessment
Use the Lenses MCP list_topics tool and filter for DLQ topics by naming convention:
*.dlq*.dead-letter*.error*.errors*.retry*-dlq*-dead-letterAlso check connector configurations for DLQ topic names using list_kafka_connectors.
Expected output: List of DLQ topics discovered by naming convention and connector config.
Validation: If no DLQ topics are found, search the codebase for error topic configuration before concluding that DLQs are not implemented.
For each discovered DLQ topic, use get_topic to verify:
Use list_consumer_groups_by_topic for each DLQ topic to check:
Check DLQ message rates using get_dataset_message_metrics:
Use the Lenses MCP execute_sql tool to sample messages from DLQ topics:
SELECT * FROM `{dlq-topic}` LIMIT 10
Check that DLQ messages include complete metadata:
Use list_kafka_connectors and get_kafka_connector_target_definition to check:
errors.tolerance=all but no errors.deadletterqueue.topic.name (silently drops messages)errors.tolerance=none and no DLQ (stops on any error, no recovery path)errors.deadletterqueue.context.headers.enable=true for richer error contexterrors.log.enable=true for error loggingSearch the codebase for error handling and DLQ patterns:
dlq, dead.letter, error.topic)retry, backoff, max_retries)poll, consume, process)Flag:
resend_message via Lenses or custom tooling)User says: "Audit all dead letter queues in production"
Actions:
User says: "Messages are ending up in the DLQ, what's going wrong?"
Actions:
execute_sqlUser says: "Do all our consumers have DLQ handling?"
Actions:
Cause: DLQ topics may use non-standard naming or DLQs may not be implemented yet. Solution: Search the codebase for error topic configuration. Also check connector configs for DLQ topic names that may not follow common patterns.
Cause: The DLQ producer does not include headers or structured error information. Solution: Report this as a critical finding. DLQ messages without metadata are very difficult to investigate and reprocess.
Cause: DLQ messages may use a different serialisation format than expected. Solution: Try specifying the format in the query. Report the serialisation format issue and recommend consistent format usage.
## DLQ Review Report
### Environment: {name}
### DLQ Topics Discovered
| DLQ Topic | Source Topic | Retention | Partitions | Has Consumers | Message Rate |
|-----------|-------------|-----------|------------|--------------|-------------|
| topic.dlq | topic | 7d | 3 | Yes | 12/hr |
### Critical (must fix)
- [topic/connector/file] Description of the issue
Impact: {what could go wrong}
Remediation: {how to fix}
### Warning (should fix)
- [topic/connector/file] Description of the issue
Remediation: {how to fix}
### Suggestion (consider improving)
- [topic/connector/file] Description of the suggestion
Recommendation: {how to improve}
### DLQ Metadata Completeness
| DLQ Topic | Original Topic | Error Message | Partition/Offset | Timestamp | Stack Trace | Retry Count |
|-----------|---------------|--------------|-----------------|-----------|-------------|-------------|
| topic.dlq | ✅ | ✅ | ⚠️ | ⚠️ | ❌ | ❌ |
### Maturity Assessment
| Consumer/Connector | DLQ Status | Maturity |
|-------------------|-----------|---------|
| consumer-name | Configured with monitoring | Complete |
| connector-name | Configured without monitoring | Basic |
| other-consumer | No DLQ | None |
### Summary
- X DLQ topics found
- Y consumers/connectors without DLQ
- Z unmonitored DLQ topics
- Overall DLQ maturity: none/basic/complete