Исходный код вики Гарантии доставки

Версия 1.1 от Alexandr Fokin на 2026/07/19 12:55

Скрыть последних авторов
Alexandr Fokin 1.1 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