Sobes.tech
Назад к вопросам
Senior
5

Как обеспечить гарантию доставки сообщения в Kafka продюсером, даже если отвалит лидер?

Компании, где спрашивали
МВидеоМВидео

Ответ от нейросети

sobes.tech AI

Чтобы гарантировать доставку сообщения в Kafka продюсером даже при отказе лидера партиции, нужно использовать следующие подходы:

  • Настроить acks=all — продюсер будет ждать подтверждения от всех реплик, что гарантирует, что сообщение записано на всех ISR (in-sync replicas).
  • Использовать ретраи и обработку ошибок — при ошибках отправки (например, из-за смены лидера) продюсер должен повторять попытки отправки.
  • Включить идемпотентность (enable.idempotence=true) — это позволит избежать дублирования сообщений при повторных попытках.

Пример настройки продюсера на Go с использованием библиотеки sarama:

config := sarama.NewConfig()
config.Producer.RequiredAcks = sarama.WaitForAll
config.Producer.Retry.Max = 5
config.Producer.Idempotent = true

producer, err := sarama.NewSyncProducer(brokers, config)
if err != nil {
    // обработка ошибки
}

msg := &sarama.ProducerMessage{
    Topic: "topic",
    Value: sarama.StringEncoder("message"),
}

partition, offset, err := producer.SendMessage(msg)
if err != nil {
    // обработка ошибки
}

fmt.Printf("Message is stored in partition %d, offset %d\n", partition, offset)

Таким образом, даже при смене лидера Kafka гарантирует, что сообщение не потеряется и будет доставлено.