Небольшая подсказка
- - at most once - максимум один раз. по факту предприняли одну попытку доставить в шину и забыли. по скорости самое быстрое, но не всегда приемлимо по той причине, что может вся система отказать) Настройки продюсера: ack=0, retries=0 (delivery.timeout.ms - вообще не имеет значения),enable.idempotence=false
- - at least once - минимум один раз. отправляем до победного. Кофиги продюсера:
# Требуем подтверждения от лидера и всех синхронных реплик (ISR)
acks=all
# Включаем бесконечные повторные попытки (значение по умолчанию в новых версиях)
retries=2147483647
# Суммарное время, в течение которого продюсер будет пытаться отправить сообщение (2 минуты)
delivery.timeout.ms=120000
# Время ожидания ответа на один конкретный сетевой запрос (30 секунд)
request.timeout.ms=30000
# Пауза между повторными попытками отправки (100 миллисекунд)
retry.backoff.ms=100
# Отключаем встроенную идемпотентность Kafka, чтобы получить «классический» At-Least-Once.
# При true Kafka сама фильтровала бы дубликаты на брокере, превращая схему в Exactly-Once.
enable.idempotence=false
- Конфигурация консьюмера тогда:
# Отключаем автоматический коммит смещений по таймеру
enable.auto.commit=false
# Настройка сброса смещения, если текущее смещение больше не существует на брокере.
# read с самого начала доступных логов (чтобы не потерять старые данные)
auto.offset.reset=earliest
- - exactly once - по идее вообще недостижимая история вот прям чтобы с гарантией, чтобы наверняка, но есть вроде как idempotent producer, но это еще предстоит изучить.