Изменения документа Гарантии доставки
Редактировал(а) Alexandr Fokin 2026/07/27 03:09
От версии 1.3
отредактировано Alexandr Fokin
на 2026/07/19 13:00
на 2026/07/19 13:00
Изменить комментарий:
К данной версии нет комментариев
К версии 1.14
отредактировано Alexandr Fokin
на 2026/07/27 03:09
на 2026/07/27 03:09
Изменить комментарий:
К данной версии нет комментариев
Сводка
-
Свойства страницы (2 изменено, 0 добавлено, 0 удалено)
Подробности
- Свойства страницы
-
- Родительский документ
-
... ... @@ -1,1 +1,1 @@ 1 -Разработка.Брокеры сообщений.Apache Kafka. Сценарии.WebHome1 +Разработка.Брокеры сообщений.Apache Kafka.Kafka\. Механизмы.WebHome - Содержимое
-
... ... @@ -10,32 +10,99 @@ 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. 57 +{{/code}} 58 + 59 +Возможные проблемы: 60 + 61 +((( 62 +1. Дублирование на отправке. 63 +1. Не закомиченное смещение (падение consumer). 64 +1. Отвал consumer по timeout (долгая обработка, сообщение передано к другому consumer). 65 + 66 +2) TransactionalInbox. 67 +))) 68 +))) 34 34 |(% style="width:128px" %)((( 35 35 Exactly‑Once 36 36 )))|(% style="width:1164px" %)Гарантия доставки строго один раз. 37 37 Гарантия отсутствия потерь и дублей.|(% style="width:1164px" %)Kafka transactions|(% style="width:1164px" %) 38 38 ))) 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 +))) 39 39 |(% style="width:108px" %) |(% style="width:1326px" %)Более строгие гарантии могут давать большие накладные расходы (пропускная способность и задержка доставки). 40 40 41 - 86 +---- 87 + 88 +==== Внутренние ссылки: ==== 89 + 90 +====== Дочерние страницы: ====== 91 + 92 +{{children/}} 93 + 94 +====== Обратные ссылки: ====== 95 + 96 +{{velocity}} 97 +#set ($links = $doc.getBacklinks()) 98 +#if ($links.size() > 0) 99 + #foreach ($docname in $links) 100 + #set ($rdoc = $xwiki.getDocument($docname).getTranslatedDocument()) 101 + * [[$escapetool.xml($rdoc.fullName)]] 102 + #end 103 +#else 104 + No back links for this page! 105 +#end 106 +{{/velocity}} 107 + 108 +----