Sobes.tech
Back to questions
Junior — Middle
58

Какими способами можно реализовать выбранный тип доставки сообщений в Kafka?

Answer from AI

sobes.tech AI

В Apache Kafka выбор типа доставки сообщений зависит от настроек продюсера и потребителя, а также от архитектуры приложения. Основные способы реализации типов доставки:

  1. At most once (не более одного раза)

    • Продюсер отправляет сообщения без ожидания подтверждения (fire-and-forget).
    • Возможна потеря сообщений при сбоях.
    • Настройки: acks=0.
  2. At least once (минимум один раз)

    • Продюсер ждёт подтверждения от брокера (acks=1 или acks=all).
    • Возможна повторная доставка сообщений (дубликаты).
    • Потребитель должен быть готов к обработке дубликатов.
  3. Exactly once (ровно один раз)

    • Используется транзакционная отправка сообщений.
    • Включает enable.idempotence=true и транзакции (initTransactions(), beginTransaction(), commitTransaction()).
    • Позволяет гарантировать, что сообщение будет обработано ровно один раз.

Пример настройки продюсера для Exactly once:

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("acks", "all");
props.put("enable.idempotence", "true");
props.put("transactional.id", "my-transactional-id");

KafkaProducer<String, String> producer = new KafkaProducer<>(props);
producer.initTransactions();

try {
    producer.beginTransaction();
    producer.send(new ProducerRecord<>("topic", "key", "value"));
    producer.commitTransaction();
} catch (Exception e) {
    producer.abortTransaction();
}

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