Неблокирующие повторные попытки с темами повторных попыток
Научитесь использовать @RetryableTopic из Spring Kafka для неблокирующих повторных попыток с задержкой, сохраняя отзывчивость потребителя при повторной обработке неудачных сообщений.
«Неблокирующие повторные попытки с темами повторных попыток» — бесплатный урок Advanced Spring Boot 4: Event-Driven Architecture (Kafka) на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Advanced Spring Boot 4: Event-Driven Architecture (Kafka), и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Advanced Spring Boot 4: Event-Driven Architecture (Kafka) содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
The Problem with Blocking Retries
Blocking retries (Spring Retry) pause the consumer thread between attempts. A long backoff blocks the partition, stalling all later records.
Non-blocking retries solve this by moving failed records to dedicated retry topics.
How Retry Topics Work
When processing fails, the record is forwarded to a retry topic with a delay. A separate listener consumes the retry topic after the delay and tries again.
- The main consumer keeps moving forward.
- Each retry level can have a longer delay.
Enabling RetryableTopic
Annotate your listener with @RetryableTopic. Spring auto-creates the retry and DLT topics.
@RetryableTopic
@KafkaListener(topics = "orders")
public void handle(Order order) {
paymentService.charge(order);
}Configuring Attempts and Backoff
Customize the number of attempts and the delay strategy directly in the annotation.
@RetryableTopic(
attempts = "4",
backoff = @Backoff(delay = 1000, multiplier = 2.0))
@KafkaListener(topics = "orders")
public void handle(Order order) { /* ... */ }Generated Topic Names
By default Spring creates topics like orders-retry-0, orders-retry-1, and finally orders-dlt.
Each retry topic corresponds to one backoff level.
Exponential vs Fixed Backoff
Set multiplier for exponential growth, or omit it for fixed delays.
- Fixed: 1s, 1s, 1s.
- Exponential: 1s, 2s, 4s.
Exponential is better for transient downstream outages.
Selecting Retryable Exceptions
Only retry exceptions that are transient. Use include or exclude to control which exceptions trigger retries.
@RetryableTopic(
include = { RemoteServiceException.class },
exclude = { ValidationException.class })
@KafkaListener(topics = "orders")
public void handle(Order order) { /* ... */ }Handling the DLT
After all attempts fail, the record lands on the DLT. Add a @DltHandler method to react.
@DltHandler
public void handleDlt(Order order) {
log.error("Order permanently failed: {}", order.getId());
}Reading Retry Headers
Retry records carry headers such as the attempt count and original timestamp, letting you log how far a message progressed.
@Header(KafkaHeaders.ORIGINAL_TOPIC) String originalTopicBlocking vs Non-Blocking
Use blocking retries for very short, immediate transients; use non-blocking retry topics when delays are longer and partition throughput matters.
Putting It Together
Non-blocking retries keep consumers responsive while still giving failed messages multiple chances. Combine @RetryableTopic, exponential backoff, exception filtering, and a @DltHandler.
Quick Check
Test your understanding of retry topics.
Recap
You learned non-blocking retries.
@RetryableTopiccreates retry topics automatically.- Configure attempts, backoff, and a multiplier.
- Filter retryable exceptions with include/exclude.
- Use
@DltHandlerfor permanently failed records.
Часто задаваемые вопросы
Урок «Неблокирующие повторные попытки с темами повторных попыток» бесплатный?
Да — полный текст урока «Неблокирующие повторные попытки с темами повторных попыток» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Advanced Spring Boot 4: Event-Driven Architecture (Kafka), подпишись на CoddyKit PRO. Курс Advanced Spring Boot 4: Event-Driven Architecture (Kafka) содержит 4 уроков всего.
Чему я научусь в уроке «Неблокирующие повторные попытки с темами повторных попыток»?
Научитесь использовать @RetryableTopic из Spring Kafka для неблокирующих повторных попыток с задержкой, сохраняя отзывчивость потребителя при повторной обработке неудачных сообщений. Ты практикуешь Advanced Spring Boot 4: Event-Driven Architecture (Kafka) с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Advanced Spring Boot 4: Event-Driven Architecture (Kafka)?
Предыдущий опыт не требуется. Advanced Spring Boot 4: Event-Driven Architecture (Kafka) на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Неблокирующие повторные попытки с темами повторных попыток»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Advanced Spring Boot 4: Event-Driven Architecture (Kafka)?
Да. Каждый урок Advanced Spring Boot 4: Event-Driven Architecture (Kafka) включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Обработка исключений потребителей
- Механизмы повторных попыток с Spring Retry
- Реализация тематик недоставленных сообщений (DLT)
- Неблокирующие повторные попытки с темами повторных попыток