Изменения документа Гарантии доставки

Редактировал(а) Alexandr Fokin 2026/07/27 03:09

От версии 1.1
отредактировано Alexandr Fokin
на 2026/07/19 12:55
Изменить комментарий: К данной версии нет комментариев
К версии 1.13
отредактировано Alexandr Fokin
на 2026/07/19 14:10
Изменить комментарий: Update document after refactoring.

Сводка

Подробности

Свойства страницы
Родительский документ
... ... @@ -1,1 +1,1 @@
1 -Разработка.Брокеры сообщений.Apache Kafka.Сценарии.WebHome
1 +Разработка.Брокеры сообщений.Apache Kafka.Kafka\. Механизмы.WebHome
Содержимое
... ... @@ -10,30 +10,77 @@
10 10  |(% style="width:128px" %)(((
11 11  At‑Most‑Once
12 12  )))|(% style="width:1164px" %)Гарантия доставки не более одного раза.
13 -Гарантируется, то не будет дублей, но допускаются потери.|(% style="width:1164px" %)Без подтверждения доставки и повторных отправок (гарантирует отсутствие дублей), но сообщение может быть потеряно на фазе отправки (т.к. без подтверждения).
14 -\\Acks = 0
15 -MessageSendMaxRetries = 0|(% style="width:1164px" %)Сообщение коммитится сразу (без подтверждения), это гарантирует что не будет дублирования, но сообщение может быть потеряно на фазе получения (падение или timeout потребителя).
16 -\\ENABLE_AUTO_COMMIT = true
13 +Гарантируется, то не будет дублей, но допускаются потери.|(% style="width:1164px" %)(((
14 +Без подтверждения доставки и повторных отправок (гарантирует отсутствие дублей), но сообщение может быть потеряно на фазе отправки (т.к. без подтверждения).
15 +
16 +{{code language="none"}}
17 +Acks = None
18 +MessageSendMaxRetries = 0
19 +{{/code}}
20 +)))|(% style="width:1164px" %)(((
21 +Сообщение коммитится сразу (без подтверждения), это гарантирует что не будет дублирования, но сообщение может быть потеряно на фазе получения (падение или timeout потребителя).
22 +
23 +{{code language="none"}}
24 +AutoOffsetReset = AutoOffsetReset.Earliest
25 +ENABLE_AUTO_COMMIT = true
26 +{{/code}}
27 +)))
17 17  |(% style="width:128px" %)(((
18 18  At‑Most‑Once
19 19  )))|(% style="width:1164px" %)Гарантия доставки хотя бы один раз.
20 -Гарантируется, что не будет потерь, но возможны дубли.|(% style="width:1164px" %)1) Гарантия подтверждения доставки до про брокера.
21 -В данном случае отправка может выполнится, но потеряется подтверждение отправки. В таком случае будет повторная отправка, которая приведет к дублированию на отправке.
22 -\\Acks = All
31 +Гарантируется, что не будет потерь, но возможны дубли.|(% style="width:1164px" %)(((
32 +1) Гарантия подтверждения доставки до брокера.
33 +
34 +{{code language="none"}}
35 +Acks = All
23 23  EnableIdempotence = false
37 +{{/code}}
38 +
39 +В данном случае отправка может выполнится, но потеряется подтверждение отправки. В таком случае будет повторная отправка, которая приведет к дублированию на отправке.
24 24  \\2) Дополнение. Наличие функции дедубликации в kafka.
25 25  Позволяет устранить дублирование на отправке. Kafka отслеживает повторную отправку и отбрасывает.
26 -\\EnableIdempotence = true
42 +
43 +{{code language="none"}}
44 +EnableIdempotence = true
27 27  MessageSendMaxRetries <> 0
28 -\\transactional.id - влияет на идентификацию экземпляра producer при переподключении. |(% style="width:1164px" %)Использование ручного коммита после завершения обработки (транзакции БД).
29 -\\ENABLE_AUTO_COMMIT = false
30 -\\Может использоваться для дедупликации.
31 -TransactionalInbox.
46 +
47 +// влияет на идентификацию экземпляра
48 +// producer при переподключении.
49 +transactional.id
50 +{{/code}}
51 +)))|(% style="width:1164px" %)(((
52 +1) Использование ручного коммита после завершения обработки (транзакции БД).
53 +
54 +{{code language="none"}}
55 +AutoOffsetReset = AutoOffsetReset.Earliest
56 +ENABLE_AUTO_COMMIT = false
57 +{{/code}}
58 +
59 +Возможные проблемы:
60 +
61 +(((
62 +1. Дублирование на отправке.
63 +1. Не закомиченное смещение (падение consumer).
64 +1. Отвал consumer по timeout (долгая обработка, сообщение передано к другому consumer).
65 +
66 +2) TransactionalInbox.
67 +)))
68 +)))
32 32  |(% style="width:128px" %)(((
33 33  Exactly‑Once
34 34  )))|(% style="width:1164px" %)Гарантия доставки строго один раз.
35 35  Гарантия отсутствия потерь и дублей.|(% style="width:1164px" %)Kafka transactions|(% style="width:1164px" %)
36 36  )))
74 +|(% style="width:108px" %) |(% style="width:1326px" %)(((
75 +|(% style="width:136px" %)TransactionalInbox|(% style="width:1216px" %)(((
76 +|(% style="width:207px" %)Полный|(% style="width:991px" %)Хранится IdempotencyId каждого входящего сообщения (уникальный индекс), для дедубликации.
77 +Полная защита от дублей (даже если это несколько сообщений, с одинаковым ключом).
78 +|(% style="width:207px" %)Только offset (облегченный)|(% style="width:991px" %)Специфично для kafka. Храниться только topic+partition+offset.
79 +Защищает только от потери смещения (сообщение обработано, но offset не закомичен) и consumer timeout. Не поможет при дублировании на отправке (более 1 сообщения).
80 +|(% style="width:207px" %) |(% style="width:991px" %)
81 +)))
82 +|(% style="width:136px" %) |(% style="width:1216px" %)
83 +)))
37 37  |(% style="width:108px" %) |(% style="width:1326px" %)Более строгие гарантии могут давать большие накладные расходы (пропускная способность и задержка доставки).
38 38  
39 39