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

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

От версии 1.8
отредактировано Alexandr Fokin
на 2026/07/19 13:17
Изменить комментарий: К данной версии нет комментариев
К версии 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,28 +10,62 @@
10 10  |(% style="width:128px" %)(((
11 11  At‑Most‑Once
12 12  )))|(% style="width:1164px" %)Гарантия доставки не более одного раза.
13 -Гарантируется, то не будет дублей, но допускаются потери.|(% style="width:1164px" %)Без подтверждения доставки и повторных отправок (гарантирует отсутствие дублей), но сообщение может быть потеряно на фазе отправки (т.к. без подтверждения).
14 -\\Acks = None
15 -MessageSendMaxRetries = 0|(% style="width:1164px" %)Сообщение коммитится сразу (без подтверждения), это гарантирует что не будет дублирования, но сообщение может быть потеряно на фазе получения (падение или timeout потребителя).
16 -\\AutoOffsetReset = AutoOffsetReset.Earliest
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
17 17  ENABLE_AUTO_COMMIT = true
26 +{{/code}}
27 +)))
18 18  |(% style="width:128px" %)(((
19 19  At‑Most‑Once
20 20  )))|(% style="width:1164px" %)Гарантия доставки хотя бы один раз.
21 -Гарантируется, что не будет потерь, но возможны дубли.|(% style="width:1164px" %)1) Гарантия подтверждения доставки до про брокера.
22 -В данном случае отправка может выполнится, но потеряется подтверждение отправки. В таком случае будет повторная отправка, которая приведет к дублированию на отправке.
23 -\\Acks = All
31 +Гарантируется, что не будет потерь, но возможны дубли.|(% style="width:1164px" %)(((
32 +1) Гарантия подтверждения доставки до брокера.
33 +
34 +{{code language="none"}}
35 +Acks = All
24 24  EnableIdempotence = false
37 +{{/code}}
38 +
39 +В данном случае отправка может выполнится, но потеряется подтверждение отправки. В таком случае будет повторная отправка, которая приведет к дублированию на отправке.
25 25  \\2) Дополнение. Наличие функции дедубликации в kafka.
26 26  Позволяет устранить дублирование на отправке. Kafka отслеживает повторную отправку и отбрасывает.
27 -\\EnableIdempotence = true
42 +
43 +{{code language="none"}}
44 +EnableIdempotence = true
28 28  MessageSendMaxRetries <> 0
29 -\\transactional.id - влияет на идентификацию экземпляра producer при переподключении. |(% style="width:1164px" %)Использование ручного коммита после завершения обработки (транзакции БД).
30 -\\AutoOffsetReset = AutoOffsetReset.Earliest
46 +
47 +// влияет на идентификацию экземпляра
48 +// producer при переподключении.
49 +transactional.id
50 +{{/code}}
51 +)))|(% style="width:1164px" %)(((
52 +1) Использование ручного коммита после завершения обработки (транзакции БД).
53 +
54 +{{code language="none"}}
55 +AutoOffsetReset = AutoOffsetReset.Earliest
31 31  ENABLE_AUTO_COMMIT = false
32 -\\Может использоваться для дедупликации.
33 -TransactionalInbox.
34 -\\Долгая обработка сообщения может привести к отключению consumer по timeout. Это может провести к тому, что сообщение поступит на другой потребитель. В таком случае только TransactionalInbox.
57 +{{/code}}
58 +
59 +Возможные проблемы:
60 +
61 +(((
62 +1. Дублирование на отправке.
63 +1. Не закомиченное смещение (падение consumer).
64 +1. Отвал consumer по timeout (долгая обработка, сообщение передано к другому consumer).
65 +
66 +2) TransactionalInbox.
67 +)))
68 +)))
35 35  |(% style="width:128px" %)(((
36 36  Exactly‑Once
37 37  )))|(% style="width:1164px" %)Гарантия доставки строго один раз.