Skip to content

OPS-1: DLQ для Kafka-консьюмера LowStockAlert #94

Description

@ii-reviewer

Цель: не терять и не залипать на «ядовитых» сообщениях — consumer должен ретраить временные сбои с бэкоффом, а безнадёжные сообщения парковать в Dead Letter Topic с возможностью ручной реобработки.
Зависимость: KAFKA-2.

Что сделать

  • Настроить DefaultErrorHandler с ExponentialBackOff (например, 3-5 попыток, нарастающий интервал) и DeadLetterPublishingRecoverer, публикующим в low-stock-alerts.DLT.
  • Топик low-stock-alerts.DLT создать программно (TopicBuilder), число партиций = исходному.
  • Разделить ошибки: десериализация/валидация (spring.json.trusted.packages, битый JSON) → non-retryable, сразу в DLT; временные (БД недоступна) → retryable. См. addNotRetryableExceptions / addRetryableExceptions.
  • Механизм ручной реобработки: эндпоинт POST /api/admin/dlq/low-stock/reprocess (ADMIN), который вычитывает DLT и шлёт обратно в основной топик. Стретч: не расписывать вычитку целиком — выбрать подход (отдельный KafkaConsumer / listener с ручным стартом).

Acceptance criteria

  • Сообщение, обработка которого падает с временной ошибкой, ретраится с бэкоффом, затем уходит в low-stock-alerts.DLT.
  • Битый JSON попадает в DLT без ретраев.
  • В DLT-сообщении сохранены заголовки с причиной (kafka_dlt-exception-message).
  • Ручная реобработка возвращает запись в основной поток и она сохраняется в stock_alerts.

Metadata

Metadata

Assignees

No one assigned

    Labels

    kafkaKafka события

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions