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

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

Последние авторы
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 \\AutoOffsetReset = AutoOffsetReset.Earliest
17 ENABLE_AUTO_COMMIT = true
18 |(% style="width:128px" %)(((
19 At‑Most‑Once
20 )))|(% style="width:1164px" %)Гарантия доставки хотя бы один раз.
21 Гарантируется, что не будет потерь, но возможны дубли.|(% style="width:1164px" %)1) Гарантия подтверждения доставки до про брокера.
22 В данном случае отправка может выполнится, но потеряется подтверждение отправки. В таком случае будет повторная отправка, которая приведет к дублированию на отправке.
23 \\Acks = All
24 EnableIdempotence = false
25 \\2) Дополнение. Наличие функции дедубликации в kafka.
26 Позволяет устранить дублирование на отправке. Kafka отслеживает повторную отправку и отбрасывает.
27 \\EnableIdempotence = true
28 MessageSendMaxRetries <> 0
29 \\transactional.id - влияет на идентификацию экземпляра producer при переподключении. |(% style="width:1164px" %)Использование ручного коммита после завершения обработки (транзакции БД).
30 \\AutoOffsetReset = AutoOffsetReset.Earliest
31 ENABLE_AUTO_COMMIT = false
32 \\Может использоваться для дедупликации.
33 TransactionalInbox.
34 |(% style="width:128px" %)(((
35 Exactly‑Once
36 )))|(% style="width:1164px" %)Гарантия доставки строго один раз.
37 Гарантия отсутствия потерь и дублей.|(% style="width:1164px" %)Kafka transactions|(% style="width:1164px" %)
38 )))
39 |(% style="width:108px" %) |(% style="width:1326px" %)Более строгие гарантии могут давать большие накладные расходы (пропускная способность и задержка доставки).
40
41