| Тип | Описание | 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
Может использоваться для дедупликации. TransactionalInbox.
Долгая обработка сообщения может привести к отключению consumer по timeout. Это может провести к тому, что сообщение поступит на другой потребитель. В таком случае только TransactionalInbox. |
| Гарантия доставки строго один раз. Гарантия отсутствия потерь и дублей. | Kafka transactions | |