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

Версия 1.11 от Alexandr Fokin на 2026/07/19 13:29

Скрыть последних авторов
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" %)Без подтверждения доставки и повторных отправок (гарантирует отсутствие дублей), но сообщение может быть потеряно на фазе отправки (т.к. без подтверждения).
Alexandr Fokin 1.3 14 \\Acks = None
Alexandr Fokin 1.1 15 MessageSendMaxRetries = 0|(% style="width:1164px" %)Сообщение коммитится сразу (без подтверждения), это гарантирует что не будет дублирования, но сообщение может быть потеряно на фазе получения (падение или timeout потребителя).
Alexandr Fokin 1.2 16 \\AutoOffsetReset = AutoOffsetReset.Earliest
17 ENABLE_AUTO_COMMIT = true
Alexandr Fokin 1.1 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" %)Использование ручного коммита после завершения обработки (транзакции БД).
Alexandr Fokin 1.2 30 \\AutoOffsetReset = AutoOffsetReset.Earliest
31 ENABLE_AUTO_COMMIT = false
Alexandr Fokin 1.11 32 \\Возможные проблемы:(((
33 1. Дублирование на отправке.
34 1. Не закомиченное смещение (падение consumer).
35 1. Отвал consumer по timeout (долгая обработка, сообщение передано к другому consumer).
36
Alexandr Fokin 1.1 37 TransactionalInbox.
Alexandr Fokin 1.11 38 )))
Alexandr Fokin 1.1 39 |(% style="width:128px" %)(((
40 Exactly‑Once
41 )))|(% style="width:1164px" %)Гарантия доставки строго один раз.
42 Гарантия отсутствия потерь и дублей.|(% style="width:1164px" %)Kafka transactions|(% style="width:1164px" %)
43 )))
Alexandr Fokin 1.4 44 |(% style="width:108px" %) |(% style="width:1326px" %)(((
45 |(% style="width:136px" %)TransactionalInbox|(% style="width:1216px" %)(((
Alexandr Fokin 1.7 46 |(% style="width:207px" %)Полный|(% style="width:991px" %)Хранится IdempotencyId каждого входящего сообщения (уникальный индекс), для дедубликации.
47 Полная защита от дублей (даже если это несколько сообщений, с одинаковым ключом).
48 |(% style="width:207px" %)Только offset (облегченный)|(% style="width:991px" %)Специфично для kafka. Храниться только topic+partition+offset.
Alexandr Fokin 1.8 49 Защищает только от потери смещения (сообщение обработано, но offset не закомичен) и consumer timeout. Не поможет при дублировании на отправке (более 1 сообщения).
Alexandr Fokin 1.7 50 |(% style="width:207px" %) |(% style="width:991px" %)
Alexandr Fokin 1.4 51 )))
52 |(% style="width:136px" %) |(% style="width:1216px" %)
53 )))
Alexandr Fokin 1.1 54 |(% style="width:108px" %) |(% style="width:1326px" %)Более строгие гарантии могут давать большие накладные расходы (пропускная способность и задержка доставки).
55
56