IT заметки по программированию
IT заметки по программированию
IT заметки по программированию
IT заметки по программированию

Golang Sarama Kafka: количество подтверждений от Kafka-брокеров

Параметр config.Producer.RequiredAcks в Sarama управляет количеством подтверждений от Kafka-брокеров, которые требуется продюсеру для успешного завершения отправки сообщения. Этот параметр определяет баланс между надежностью доставки сообщений и производительностью.


Значения Producer.RequiredAcks

  1. sarama.NoResponse (0):
    • Продюсер не ждет никаких подтверждений от брокеров.
    • Самая высокая производительность, но есть риск потери сообщений.
    • Используется редко, только в случаях, когда потеря сообщений не критична.
  2. sarama.WaitForLocal (1):
    • Продюсер ждет подтверждения от только лидера партиции.
    • Средний уровень надежности: сообщение будет подтверждено, если лидер записал его в свою локальную запись (без репликации).
    • Быстрее, чем подтверждения от всех реплик, но менее надежно.
  3. sarama.WaitForAll (-1):
    • Продюсер ждет подтверждений от всех реплик, указанных в конфигурации min.insync.replicas топика.
    • Самый надежный вариант, но с увеличенной задержкой.
    • Подходит для случаев, где требуется высокая надежность доставки сообщений.

Значение sarama.WaitForLocal

Установка sarama.WaitForLocal означает, что продюсер будет считать отправку сообщения успешной, как только лидер партиции подтвердит запись в свою локальную запись. Это обеспечивает:

  • Средний уровень надежности: Лидер гарантирует, что сообщение принято, но репликация на другие брокеры еще не произошла.
  • Хорошую производительность: Уменьшает задержки по сравнению с WaitForAll, поскольку не нужно ждать подтверждений от реплик.

Когда использовать sarama.WaitForLocal

  1. Когда баланс между производительностью и надежностью важен:
    • Например, в системах с высокой нагрузкой, где допустимо редкое потерянное сообщение (например, при падении лидера партиции до репликации).
  2. Для быстрых и критичных потоков данных:
    • Например, в логировании, аналитике, телеметрии, где скорость важнее абсолютной надежности.
  3. Когда репликация топика настроена с высокой надежностью:
    • Если вы уверены, что конфигурация min.insync.replicas и отказоустойчивость топика в Kafka настроены правильно, WaitForLocal может быть достаточно надежным.

Альтернативы и их использование

  • Используйте sarama.NoResponse, если:
    • Потеря сообщений допустима.
    • Высокая производительность является приоритетом (например, временные данные, которые легко пересоздать).
  • Используйте sarama.WaitForAll, если:
    • Надежность критически важна, и потеря сообщений недопустима.
    • Например, в системах финансовых транзакций, обработке заказов и т.д.

Пример настройки:

Риски при использовании sarama.WaitForLocal

  1. Потеря данных при сбое лидера:
    • Если лидер партиции падает до репликации сообщения, данные могут быть потеряны.
    • Убедитесь, что у вас есть мониторинг и резервные системы.
  2. Отсутствие подтверждений от реплик:
    • Другие реплики могут быть недоступны, что может привести к снижению надежности.

Вывод:

  • sarama.WaitForLocal — хороший компромисс между производительностью и надежностью. Используйте его, если вам не требуется абсолютная гарантия доставки.
  • Если надежность данных критична, выберите sarama.WaitForAll и убедитесь, что ваш Kafka-кластер настроен на репликацию с учетом отказов.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *