По чему Kafka недостаточно: гарантированная доставка сообщений в распределённых системах

Kafka часто воспринимается как система, гарантирующая доставку сообщений и Exactly Once Semantics. Однако в реальных распределённых системах эти гарантии заканчиваются на границе брокера. Сообщение может потеряться между записью в базу данных и публикацией события, а может быть обработано повторно при сбое сервиса. В этой статье разберём:

https://habr.com/ru/articles/1012512/

#гарантированная_доставка_сообщений #outbox #ibox #kafka #микросервисы #согласованность

Почему Kafka недостаточно: гарантированная доставка сообщений в распределённых системах

1. Введение Kafka часто воспринимается как система, гарантирующая доставку сообщений и Exactly Once Semantics. Однако в реальных распределённых системах эти гарантии заканчиваются на границе брокера....

Хабр

Паттерн Transactional Outbox на примере двух микросервисов на java

Всем привет! В данной статье будет описан один из возможных вариантов реализации паттерна outbox transactional. План данной статьи такой. Вначале немного теории, а потом на примере двух микросервисов будет показала реализация данного паттерна с помощью debezium и kafka. Данная статья будет полезна для новичков, которые не встречались с данным паттерном. Весь код микросервисов будет доступен по ссылкам. Но вначале немного теории. Самый главный вопрос зачем нужен данный паттерн и какую он решает задачу. Паттерн Outbox – используется в распределенных транзакциях, то есть в транзакциях, которые проходят и затрагивают несколько микровервисов, для обеспечения гарантированной доставки сообщения от одного микросервиса до другого. Данный паттерн используется там, где очень критично чтобы сообщение не потерялось, даже при сбоях в системе. Outbox паттерн получил распространение именно в микросервисной архитектуре, где нет возможности с помощью одной аннотации обеспечить транзакционность какого-то метода и возможный откат всей транзакции в рамках нескольких микросервисов. Теперь перейдем к практике. Допустим у нас имеется два микросервиса: order-servic, в котором клиент заказывает какой-то товар и bank-service, в котором происходит оплата за этот товар. Весь код микросервисов будет доступен по ссылкам. Задача в том, чтобы при заказе товара обязательно произошло списание денег за него или если денег недостаточно или возникла ошибка на стороне банка микросервис по заказам узнал об этом. Для реализации этого паттерна я буду использовать debezium и kafka.

https://habr.com/ru/articles/991934/

#java #паттерны_проектирования #outbox #outboxпаттерн #transactional_outbox #kafkaconnect #debezium

Паттерн Transactional Outbox на примере двух микросервисов на java

Всем привет! В данной статье будет описан один из возможных вариантов реализации паттерна outbox transactional. План данной статьи такой: вначале немного теории, а потом на примере двух микросервисов...

Хабр

Build Real Time Data Pipelines with #PostgreSQL and Apache #Nifi: #CDC via logical replication and #Outbox via table polling.

The Outbox Pattern offers simple operations and explicit control over event schemas, making it well-suited for event-driven architectures where you control the source application.

The CDC Pattern is ideal when you need the complete change history or must capture changes from applications you can't modify. However, it requires more operational overhead (compared to outbox) to manage replication slots and WAL growth.

Choose CDC (Logical Replication) when:

You need to include all changed data, including legacy applications you can't modify
Your schema changes are database-driven
You build a data lake or audit log is required including complete change history

Choose Outbox Pattern when:

You focus simpler operations
You manage and implement the application that is the source of data changes
You need explicit control over event schema and content
You implement event-driven architecture with self- or well-defined domain events

https://www.lotharschulz.info/2026/01/05/building-real-time-data-pipelines-with-cdc-outbox-postgresql-and-apache-nifi/

Jē, #RaxtIS ir fediversēts :)

vismaz proof-of-concept at #outbox

#Fediverse + https://raxtis.com

[Перевод] Паттерн Outbox для надежного обмена сообщениями в микросервисах

Работа с микросервисами достаточно сложная, как и с любой распределенной системой. Уменьшение количества возможных точек отказа должно быть одной из целей инженера, который проектирует распределенную систему. В этой статье мы постараемся достичь именно этого, используя паттерн Outbox.

https://habr.com/ru/articles/969512/

#net #net_core #csharp #csharpnet #c# #patterns #pattern #outbox #outboxпаттерн

Паттерн Outbox для надежного обмена сообщениями в микросервисах

Оригинал: https://www.milanjovanovic.tech/blog-covers/mnw_026.png?imwidth=1920 Работа с микросервисами достаточно сложная, как и с любой распределенной системой. В распределенной системе многое может...

Хабр

Микросервисная трансформация в Купере — как это было. Часть I: Начинаем распил монолитов

Привет! Меня зовут Фёдор Засечкин. С 2023 года я руковожу группой разработки операционной платформы в Купере. Наша команда отвечает за стабильность и развитие сервисов, которые обеспечивают сборку и доставку заказов, а также найм и выход партнёров в смены. Последние два года наша ключевая задача — микросервисная трансформация . Мы постепенно распиливаем монолит, перераспределяя нагрузку по сервисам. На сегодня более 1 000 RPS HTTP-трафика уже ушло с монолита; до полного завершения осталось около 30 RPS и часть межсервисных интеграций. Я решил написать серию статей о том, как мы проходили этот путь: что сработало, какие ошибки допустили и какие решения реально помогли. Этот текст — первый из серии.

https://habr.com/ru/companies/kuper/articles/961630/

#микросервисы #монолит #архитектура #kafka #outbox #проектирование_систем

Микросервисная трансформация в Купере — как это было. Часть I: Начинаем распил монолитов

Привет! Меня зовут Фёдор Засечкин. С 2023 года я руковожу группой разработки операционной платформы в Купере. Наша команда отвечает за стабильность и развитие сервисов, которые обеспечивают сборку и...

Хабр

Spring-boot-starter для паттерна Transaction outbox Kafka

В микросервисной архитектуре мы постоянно сталкиваемся с задачей: сохранить изменения в базе и гарантированно отправить событие в Kafka. На первый взгляд звучит просто — сделал транзакцию, отправил сообщение, закоммитил. Но в реальности между базой данных и брокером сообщений никакой общей транзакции нет. В этой статье я покажу, как я вынес всю логику Transaction Outbox в отдельный Spring Boot Starter , который можно подключить одной зависимостью. Он создаёт таблицу Outbox, конфигурирует шедулер, отвечает за отправку в Kafka и очистку, позволяя микросервисам сосредоточиться только на бизнес-логике.

https://habr.com/ru/articles/966802/

#kotlin #java #spring #springboot #starter #spring_boot_starter #kafka #outbox #jooq #spring_data_jpa

Spring-boot-starter для паттерна Transaction outbox Kafka

В микросервисной архитектуре мы постоянно сталкиваемся с задачей: сохранить изменения в базе и гарантированно отправить событие в Kafka. На первый взгляд звучит просто — сделал транзакцию, отправил...

Хабр

Po bliższym zapoznaniu się można dostrzec, że omawiany tutaj wzorzec #Outbox jest dość oczywisty i wielu z nas wpada na niego samoistnie. Ale to dobrze, bo to oznacza, że rzeczywiście jest to rozwiązanie warte rozważenia. Tutaj przykład implementacji w #PostgreSQL i #Go.

#programowanie

https://packagemain.tech/p/how-to-implement-the-outbox-pattern-in-golang

How to implement the Outbox pattern in Go and Postgres

How and why to use the Outbox pattern to build a robust event-driven system.

packagemain.tech

Автоматизированное машинное обучение с помощью нашего Open Source фреймворка: задача о Титанике

Привет! Меня зовут Владимир Суворов, я Senior Data Scientist в Страховом Доме ВСК и core-разработчик нашей библиотеки машинного обучения OutBoxML. В статье сегодня мы поговорим не о выборе алгоритмов, а о том, как автоматизировать весь процесс ML — от данных до деплоя и мониторинга, сократив время на подготовку с дней до часов. Мы разберем это на примере классической задачи с Titanic, реализованной на нашем фреймворке. Приятного прочтения! Читать и обсуждать

https://habr.com/ru/companies/vsk_insurance/articles/948584/

#ml #opensource #python #fastapi #outbox #data_science #bigdata #machinelearning #framework #titanik

Автоматизированное машинное обучение с помощью нашего Open Source фреймворка: задача о Титанике

Привет! Меня зовут Владимир Суворов, я Senior Data Scientist в Страховом Доме ВСК и core-разработчик нашей библиотеки машинного обучения OutBoxML. В эпоху ChatGPT, LLM и Reinforcement Learning...

Хабр

RabbitMQ как инструмент «деградации с честью»

Как построить микросервисы на RabbitMQ так, чтобы система не падала каскадом, а деградировала предсказуемо: outbox, mandatory, AE, идемпотентность, DLQ, приоритеты и реальные грабли из продакшена

https://habr.com/ru/articles/943022/

#rabbitmq #микросервисы #очереди_сообщений #outbox #отказоустойчивость #архитектурные_паттерны #highload #python #postgresql #идемпотентность

RabbitMQ как инструмент «деградации с честью»

Практика outbox, гарантии доставки, DLX и схемы, которые реально спасают прод Ситуация. REST-вызовы между сервисами начали валить друг друга: цепочки запросов, таймауты, каскадные фейлы. Мы перевели...

Хабр