Назад к вопросам
МВидео
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 гарантирует, что сообщение не потеряется и будет доставлено.