Back to questions
Junior — Middle
58
Какими способами можно реализовать выбранный тип доставки сообщений в Kafka?
Answer from AI
sobes.tech AI
В Apache Kafka выбор типа доставки сообщений зависит от настроек продюсера и потребителя, а также от архитектуры приложения. Основные способы реализации типов доставки:
-
At most once (не более одного раза)
- Продюсер отправляет сообщения без ожидания подтверждения (fire-and-forget).
- Возможна потеря сообщений при сбоях.
- Настройки:
acks=0.
-
At least once (минимум один раз)
- Продюсер ждёт подтверждения от брокера (
acks=1илиacks=all). - Возможна повторная доставка сообщений (дубликаты).
- Потребитель должен быть готов к обработке дубликатов.
- Продюсер ждёт подтверждения от брокера (
-
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.