← Назад ко всем вопросам

Уровни гарантии доставки в Kafka

1️⃣ Как кратко ответить

Kafka предлагает три уровня гарантии доставки сообщений: "at most once" (не более одного раза), "at least once" (по крайней мере один раз) и "exactly once" (ровно один раз). Эти уровни определяют, как сообщения обрабатываются и доставляются между продюсерами и консюмерами, обеспечивая баланс между надежностью и производительностью.

2️⃣ Подробное объяснение темы

Apache Kafka — это распределенная платформа потоковой передачи данных, которая широко используется для построения систем реального времени. Одной из ключевых характеристик Kafka является возможность настройки уровней гарантии доставки сообщений. Эти уровни определяют, как сообщения передаются от продюсера к брокеру и далее к консюмеру, и как обрабатываются ошибки и сбои.

Уровни гарантии доставки

  1. At Most Once (Не более одного раза)

    • Описание: Сообщение может быть доставлено либо один раз, либо не доставлено вовсе.
    • Применение: Используется, когда важнее скорость и производительность, чем надежность доставки. Например, в системах, где потеря небольшого количества сообщений не критична.
    • Как работает: Продюсер отправляет сообщение и не ждет подтверждения от брокера. Если произойдет сбой, сообщение может быть потеряно.
  2. At Least Once (По крайней мере один раз)

    • Описание: Сообщение будет доставлено как минимум один раз, но возможно дублирование.
    • Применение: Подходит для систем, где важна надежность доставки, и дублирование сообщений может быть обработано на уровне приложения. Например, в системах мониторинга или логирования.
    • Как работает: Продюсер отправляет сообщение и ждет подтверждения от брокера. Если подтверждение не получено, продюсер может повторно отправить сообщение, что может привести к дублированию.
  3. Exactly Once (Ровно один раз)

    • Описание: Сообщение будет доставлено ровно один раз, без дублирования.
    • Применение: Используется в критически важных системах, где дублирование недопустимо, например, в финансовых транзакциях.
    • Как работает: Kafka использует транзакции и специальные механизмы для обеспечения того, чтобы каждое сообщение было обработано ровно один раз. Это достигается за счет координации между продюсерами, брокерами и консюмерами.

Пример кода

Рассмотрим пример настройки продюсера для различных уровней гарантии доставки:

from kafka import KafkaProducer
​
# Создание продюсера с настройкой для "at most once"
producer_at_most_once = KafkaProducer(
    bootstrap_servers='localhost:9092',
    acks=0  # Продюсер не ждет подтверждения от брокера
)
​
# Создание продюсера с настройкой для "at least once"
producer_at_least_once = KafkaProducer(
    bootstrap_servers='localhost:9092',
    acks=1  # Продюсер ждет подтверждения от лидера партиции
)
​
# Создание продюсера с настройкой для "exactly once"
producer_exactly_once = KafkaProducer(
    bootstrap_servers='localhost:9092',
    acks='all',  # Продюсер ждет подтверждения от всех реплик
    enable_idempotence=True  # Включение идемпотентности для предотвращения дублирования
)
​
# Отправка сообщения
producer_at_most_once.send('my_topic', b'Message for at most once')
producer_at_least_once.send('my_topic', b'Message for at least once')
producer_exactly_once.send('my_topic', b'Message for exactly once')
  • acks=0: Продюсер не ждет подтверждения от брокера, что соответствует уровню "at most once".
  • acks=1: Продюсер ждет подтверждения от лидера партиции, что соответствует уровню "at least once".
  • acks='all' и enable_idempotence=True: Продюсер ждет подтверждения от всех реплик и использует идемпотентность, что обеспечивает уровень "exactly once".

Тема: Tools / DevOps / Linux
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки