| Тип | Описание | Producer | Consumer |
| Гарантия доставки не более одного раза. Гарантируется, то не будет дублей, но допускаются потери. | Без подтверждения доставки и повторных отправок (гарантирует отсутствие дублей), но сообщение может быть потеряно на фазе отправки (т.к. без подтверждения).
Acks = None MessageSendMaxRetries = 0 | Сообщение коммитится сразу (без подтверждения), это гарантирует что не будет дублирования, но сообщение может быть потеряно на фазе получения (падение или timeout потребителя).
AutoOffsetReset = AutoOffsetReset.Earliest ENABLE_AUTO_COMMIT = true |
| Гарантия доставки хотя бы один раз. Гарантируется, что не будет потерь, но возможны дубли. | 1) Гарантия подтверждения доставки до про брокера. В данном случае отправка может выполнится, но потеряется подтверждение отправки. В таком случае будет повторная отправка, которая приведет к дублированию на отправке.
Acks = All EnableIdempotence = false
2) Дополнение. Наличие функции дедубликации в kafka. Позволяет устранить дублирование на отправке. Kafka отслеживает повторную отправку и отбрасывает.
EnableIdempotence = true MessageSendMaxRetries <> 0
transactional.id - влияет на идентификацию экземпляра producer при переподключении. | Использование ручного коммита после завершения обработки (транзакции БД).
AutoOffsetReset = AutoOffsetReset.Earliest ENABLE_AUTO_COMMIT = false
Возможные проблемы:- Дублирование на отправке.
- Не закомиченное смещение (падение consumer).
- Отвал consumer по timeout (долгая обработка, сообщение передано к другому consumer).
TransactionalInbox. |
| Гарантия доставки строго один раз. Гарантия отсутствия потерь и дублей. | Kafka transactions | |