Sobes.tech
Back to questions
Middle
5

Как реализовать Dead Letter Queue (DLQ) в Kafka?

Companies where asked
Small

Answer from AI

sobes.tech AI

Dead Letter Queue (DLQ) в Kafka реализуется как отдельная тема (topic), куда отправляются сообщения, которые не удалось обработать после нескольких попыток.

Основные шаги реализации DLQ:

  1. Создайте отдельный Kafka topic, например, my_topic_dlq.
  2. В вашем потребителе при обработке сообщения реализуйте логику повторных попыток (retry).
  3. Если после заданного количества попыток сообщение не обработано, отправьте его в DLQ topic.

Пример на Go с использованием Sarama:

const maxRetries = 3

func consumeAndProcess(consumer sarama.Consumer, producer sarama.SyncProducer, topic, dlqTopic string) {
    partitionConsumer, _ := consumer.ConsumePartition(topic, 0, sarama.OffsetNewest)
    for msg := range partitionConsumer.Messages() {
        success := false
        for i := 0; i < maxRetries; i++ {
            if processMessage(msg.Value) {
                success = true
                break
            }
        }
        if !success {
            // Отправляем в DLQ
            producer.SendMessage(&sarama.ProducerMessage{
                Topic: dlqTopic,
                Value: sarama.ByteEncoder(msg.Value),
            })
        }
    }
}

Такой подход позволяет изолировать проблемные сообщения и анализировать их отдельно, не блокируя основной поток обработки.