Исходный код вики Гарантии доставки
Версия 1.1 от Alexandr Fokin на 2026/07/19 12:55
Последние авторы
| author | version | line-number | content |
|---|---|---|---|
| 1 | |(% style="width:108px" %)Материалы|(% style="width:1326px" %)((( | ||
| 2 | | |Apache Kafka в гарантиях или как надежно доставить сообщение | ||
| 3 | [[https:~~/~~/habr.com/ru/companies/otus/articles/930372/>>https://habr.com/ru/companies/otus/articles/930372/]] | ||
| 4 | | |Kafka для начинающих: Гарантии доставки на практике и идемпотентность | ||
| 5 | [[https:~~/~~/habr.com/ru/articles/961048/>>https://habr.com/ru/articles/961048/]] | ||
| 6 | | | | ||
| 7 | ))) | ||
| 8 | |(% style="width:108px" %) |(% style="width:1326px" %)((( | ||
| 9 | |(% style="width:128px" %)Тип|(% style="width:1164px" %)Описание|(% style="width:1164px" %)Producer|(% style="width:1164px" %)Consumer | ||
| 10 | |(% style="width:128px" %)((( | ||
| 11 | At‑Most‑Once | ||
| 12 | )))|(% style="width:1164px" %)Гарантия доставки не более одного раза. | ||
| 13 | Гарантируется, то не будет дублей, но допускаются потери.|(% style="width:1164px" %)Без подтверждения доставки и повторных отправок (гарантирует отсутствие дублей), но сообщение может быть потеряно на фазе отправки (т.к. без подтверждения). | ||
| 14 | \\Acks = 0 | ||
| 15 | MessageSendMaxRetries = 0|(% style="width:1164px" %)Сообщение коммитится сразу (без подтверждения), это гарантирует что не будет дублирования, но сообщение может быть потеряно на фазе получения (падение или timeout потребителя). | ||
| 16 | \\ENABLE_AUTO_COMMIT = true | ||
| 17 | |(% style="width:128px" %)((( | ||
| 18 | At‑Most‑Once | ||
| 19 | )))|(% style="width:1164px" %)Гарантия доставки хотя бы один раз. | ||
| 20 | Гарантируется, что не будет потерь, но возможны дубли.|(% style="width:1164px" %)1) Гарантия подтверждения доставки до про брокера. | ||
| 21 | В данном случае отправка может выполнится, но потеряется подтверждение отправки. В таком случае будет повторная отправка, которая приведет к дублированию на отправке. | ||
| 22 | \\Acks = All | ||
| 23 | EnableIdempotence = false | ||
| 24 | \\2) Дополнение. Наличие функции дедубликации в kafka. | ||
| 25 | Позволяет устранить дублирование на отправке. Kafka отслеживает повторную отправку и отбрасывает. | ||
| 26 | \\EnableIdempotence = true | ||
| 27 | MessageSendMaxRetries <> 0 | ||
| 28 | \\transactional.id - влияет на идентификацию экземпляра producer при переподключении. |(% style="width:1164px" %)Использование ручного коммита после завершения обработки (транзакции БД). | ||
| 29 | \\ENABLE_AUTO_COMMIT = false | ||
| 30 | \\Может использоваться для дедупликации. | ||
| 31 | TransactionalInbox. | ||
| 32 | |(% style="width:128px" %)((( | ||
| 33 | Exactly‑Once | ||
| 34 | )))|(% style="width:1164px" %)Гарантия доставки строго один раз. | ||
| 35 | Гарантия отсутствия потерь и дублей.|(% style="width:1164px" %)Kafka transactions|(% style="width:1164px" %) | ||
| 36 | ))) | ||
| 37 | |(% style="width:108px" %) |(% style="width:1326px" %)Более строгие гарантии могут давать большие накладные расходы (пропускная способность и задержка доставки). | ||
| 38 | |||
| 39 |