Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Данил Арендарский — Реализация паттерна Outbox ...
Search
Ozon Tech
March 28, 2023
Technology
2.1k
0
Share
Данил Арендарский — Реализация паттерна Outbox для Apache Kafka
Ozon Tech
March 28, 2023
More Decks by Ozon Tech
See All by Ozon Tech
Анастасия Писнова, «Текст как проект»
ozontech
0
59
Светлана Каюшина, Автоматизируем документирование и внедряем ИИ
ozontech
0
72
Павел Костромитин, «Что случилось у UXW T-Банка в 2024 »
ozontech
0
130
Сергей Горшенин, «Конвертация данных Ozon»
ozontech
0
72
Юрий Гуреев, «Интеграция 1С с внешними системами. Проблемы и их решения»
ozontech
0
100
Артём Нургалиев, «Кэш на кэш: как ускоряли автобиддеры»
ozontech
0
65
Анна Мария Попова (Х5 Tech) – Фантастический техпис: может ли опыт создания художественных книг помочь в написании документации
ozontech
0
240
Александр Мачулин (Gramax) – Справочник фантастических тварей из Docs as Code
ozontech
0
270
Мария Смирнова – Дзен и искусство работы с документацией: как использовать принципы буддизма в работе техписа
ozontech
0
200
Other Decks in Technology
See All in Technology
React Compiler導入の効果と運用の工夫
kakehashi
PRO
3
260
パーソルキャリア IT/テクノロジー職向け 会社紹介資料|Company Introduction Deck
techtekt
PRO
0
220
おいらのAWSアップデートの追い方〜Slack×AgentCore〜
yakumo
1
110
なぜ、私がCommunity Builderに?〜活動期間1か月半でも選出されたワケ〜
yama3133
0
140
JTCでRedmine利用者2700人を実現した手法 第二部
nobuonakamura
0
130
20260516_SecJAWS_Days
takuyay0ne
2
460
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
6
1.7k
クラウドからエッジまで ~ 1,700台を支える監視設計~
optfit
0
110
JaSSTに関わることで変わった人生観 #jasstnano
makky_tyuyan
0
130
AIAgentと取り組むKaggle
508shuto
2
280
AWS運用におけるAI Agent活用術 / JAWS-UG 神戸 #11 LT大会
genda
1
300
オライリーイベント登壇資料「鉄リサイクル・産廃業界におけるAI技術実応用のカタチ」
takarasawa_
0
410
Featured
See All Featured
ラッコキーワード サービス紹介資料
rakko
1
3.3M
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
540
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.4k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
230
Site-Speed That Sticks
csswizardry
13
1.2k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.6k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.9k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.6k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.2k
Evolving SEO for Evolving Search Engines
ryanjones
0
190
New Earth Scene 8
popppiees
3
2.2k
Transcript
Ozon Tech 2023 Данил Арендарский, старший разработчик в отделе центральных
логистических систем
2
3
4 Проверили ключ идемпотентност и
5 Распределили нагрузку по подам
6
Pod 1 Pod 3 Pod 2 Пачка данных 1 Пачка
данных 2 Пачка данных 3 ? 7 Partition 0 Partition 1 Partition 2 Kafka Pod leader Produce
8
9
Failed Превышено количество попыток Дата следующей попытки Pending Handled Processing
10
11 статус = Pending дата следующей попытки текущей Ретрай статус
= Pending
12 На примере проекта по выдаче заказов курьерам
13
14 Кладовщик запустил завершение выдачи Создали перевозку Сформировали документы по
выдаче … Завершили выдачу
Топик выдач на завершение inbox_message ( , topic, key, payload)
outbox_request (id, , type , status, attempt, next_attempt_date) * : Создать документы Создать перевозку … 15
16
17
18
19
20
21
Hosted Service PostgreSQL 22 BEGIN; SELECT FOR UPDATE FROM outbox_request
WHERE status = Pending, next_attempt_date < now(); Kafka { "OutboxRequestId": 1 } Produce outbox_request.id UPDATE status = Processing; END;
23
24
25
26
27
28
29
Kafka outbox_request.id PostgreSQL Pod SELECT FOR UPDATE FROM outbox_request WHERE
status = Processing, id = :id Consume 30
Kafka PostgreSQL Pod Handle SELECT FOR UPDATE FROM outbox_request WHERE
status = Processing, id = :id outbox_request.id Consume UPDATE status = Handled/Failed/Pending, attempt_date = now() + interval 31
32
33
34
35
36
37
38
39
40
41
42
43
Shard 1 Shard 2 44 Entity bucket_id Алгоритм шардирования Service
Bucket 1 Bucket 2 Bucket 3 Bucket 4
Pod 1 Pod 3 Pod 2 45 Partition 0 Partition
1 Partition 2 Kafka Pod leader Produce
Pod 1 Pod 3 Pod 2 46 Shard 1 Bucket
1 Bucket 2 Shard 2 Bucket 3 Bucket 4 Partition 0 Partition 1 Partition 2 Kafka Pod leader Produce
47 Shard 1 Bucket 1 Bucket 2 Shard 2 Bucket
3 Bucket 4 Pod 3 Pod 2 etcd/Zookeper/Redis Pod 1
Telegram: @arendarskydd Спасибо за внимание Данил Арендарский, старший разработчик в
отделе центральных логистических систем