kafka-consumerlisted
Install: claude install-skill taipt1504/claudehut
# Kafka Consumer
## Quick start
```java
@Component
@RequiredArgsConstructor
@Slf4j
public class OrderEventListener {
private final ShippingJobService shippingService;
private final EventDedupStore dedupStore;
@KafkaListener(topics = "order.created", groupId = "shipping-svc",
containerFactory = "kafkaListenerContainerFactory")
public void onOrderCreated(@Payload OrderCreatedEvent event,
@Header(KafkaHeaders.RECEIVED_KEY) String key,
Acknowledgment ack) {
try {
if (dedupStore.alreadyProcessed(event.id())) {
log.info("event {} already processed, skipping", event.id());
ack.acknowledge();
return;
}
shippingService.createJob(event);
dedupStore.markProcessed(event.id());
ack.acknowledge();
} catch (TransientFailureException ex) {
// don't ack; let listener retry
throw ex;
} catch (Exception ex) {
log.error("non-recoverable error processing {}", event.id(), ex);
ack.acknowledge(); // ack to prevent loop; goes to DLT via error handler
throw ex;
}
}
}
```
Detailed: `references/ack-modes.md`, `references/dlt-retry-topic.md`, `references/idempotency.md`, `references/anti-patterns.md`.
## Assets
- `assets/templates/KafkaListener.java.tmpl`
## Hard rules
- ALWAYS manual ack mode (`