Lesson 15 · Senior Kafka practice
Retries, retry topics, and DLQ design
How to reason about transient failure, poison messages, retry escalation, and what a sane DLQ design would look like in this repo.
Your win: explain when inline retries are enough, when retry topics help, and how to describe a DLQ design that preserves liveness without silently losing the original event.
Why this page matters
The course already taught the repo’s retryable handler bool, strict vs loose commit behavior, and the fact that there is no true DLQ today. The senior step is not learning one more definition. It is learning how to turn that knowledge into design judgment.
When should a message retry in place? When should it move to a retry topic with delay semantics? When should it stop blocking the main lane and be parked for later inspection? Those are system-design questions wearing Kafka clothes.
What a DLQ is really buying you
A DLQ is not just a bin for bad messages. Its real job is to preserve evidence and restore liveness at the same time. That means the bad message is parked with enough context to investigate, and the original partition is allowed to keep moving.
That second sentence matters. If the design does not explain how healthy work behind the bad message continues to flow, then the design has not fully solved the problem.
Error-handling patterns
Use the Confluent error-handling material as the conceptual backdrop, then compare it to the repo’s current stricter and looser behaviors.
→ Confluent — Error Handling Patterns
→ Confluent — Kafka DLQ
Check yourself (from memory)
Q1. What is the most senior purpose of a Kafka DLQ?
Sources. Confluent DLQ/error-handling material; repo failure-mode lesson.