Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Данил Арендарский — Реализация паттерна Outbox ...
Search
Ozon Tech
March 28, 2023
Technology
0
2k
Данил Арендарский — Реализация паттерна Outbox для Apache Kafka
Ozon Tech
March 28, 2023
Tweet
Share
More Decks by Ozon Tech
See All by Ozon Tech
Анастасия Писнова, «Текст как проект»
ozontech
0
39
Светлана Каюшина, Автоматизируем документирование и внедряем ИИ
ozontech
0
54
Павел Костромитин, «Что случилось у UXW T-Банка в 2024 »
ozontech
0
84
Сергей Горшенин, «Конвертация данных Ozon»
ozontech
0
55
Юрий Гуреев, «Интеграция 1С с внешними системами. Проблемы и их решения»
ozontech
0
85
Артём Нургалиев, «Кэш на кэш: как ускоряли автобиддеры»
ozontech
0
49
Анна Мария Попова (Х5 Tech) – Фантастический техпис: может ли опыт создания художественных книг помочь в написании документации
ozontech
0
220
Александр Мачулин (Gramax) – Справочник фантастических тварей из Docs as Code
ozontech
0
240
Мария Смирнова – Дзен и искусство работы с документацией: как использовать принципы буддизма в работе техписа
ozontech
0
170
Other Decks in Technology
See All in Technology
ChatGPTで論⽂は読めるのか
spatial_ai_network
8
27k
エンジニアリングマネージャー はじめての目標設定と評価
halkt
0
280
LLM-Readyなデータ基盤を高速に構築するためのアジャイルデータモデリングの実例
kashira
0
240
RAG/Agent開発のアップデートまとめ
taka0709
0
170
モダンデータスタック (MDS) の話とデータ分析が起こすビジネス変革
sutotakeshi
0
470
EM歴1年10ヶ月のぼくがぶち当たった苦悩とこれからへ向けて
maaaato
0
270
30分であなたをOmniのファンにしてみせます~分析画面のクリック操作をそのままコード化できるAI-ReadyなBIツール~
sagara
0
130
[デモです] NotebookLM で作ったスライドの例
kongmingstrap
0
140
エンジニアとPMのドメイン知識の溝をなくす、 AIネイティブな開発プロセス
applism118
4
1.2k
Lambdaの常識はどう変わる?!re:Invent 2025 before after
iwatatomoya
1
470
Rubyで楽して タスクを書きたい!
ahogappa
0
110
意外とあった SQL Server 関連アップデート + Database Savings Plans
stknohg
PRO
0
310
Featured
See All Featured
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
970
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
720
What's in a price? How to price your products and services
michaelherold
246
13k
Statistics for Hackers
jakevdp
799
230k
Designing for humans not robots
tammielis
254
26k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
BBQ
matthewcrist
89
9.9k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.5k
KATA
mclloyd
PRO
32
15k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.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 Спасибо за внимание Данил Арендарский, старший разработчик в
отделе центральных логистических систем