Параллельная обработка Kafka сообщений с гарантией at-least-once в условиях медленного внешнего сервиса

В данной статье я хочу рассказать об подходе к организации параллельной обработки сообщений из Kafka, когда Kafka Topic используется как транспорт бизнес-событий, например транзакций или ордеров, которые необходимо отправить во внешнюю систему. При это важно обеспечить стабильную скорость обработки трафика и надёжность (отсутствие потерь) в условиях, когда downstream-система не на все запросы отвечает стабильно и быстро. Покажу почему стандартные подходы, такие как обработка batch'ами, в определённых сценариях перестают работать и приводят к деградации производительности или рисками потери сообщений. Для иллюстрации подходов далее будет использоваться код из демонстрационного проекта на Kotlin с использованием spring boot, webFlux, spring reactor и reactor-kafka. Код проекта не является production-ready: в нём, например, отсутствует обработка rebalance, а также ряд других моментов, обязательных для промышленной системы. Используется reactor-kafka, однако описываемые решения не зависят от конкретного фреймворка работы с Kafka и могут быть реализованы с использованием других. В статье намеренно опущены детали реализации бизнес-протокола и механизма идемпотентности. В реальной системе они реализованы с использованием внутреннего хранилища и машины состояний обработки ордеров, но это за рамками данной статьи.

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

#kafka #kafkaconnect #reactor_kafka

Параллельная обработка Kafka сообщений с гарантией at-least-once в условиях медленного внешнего сервиса

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

Хабр

Паттерн 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. План данной статьи такой: вначале немного теории, а потом на примере двух микросервисов...

Хабр

9 Best Open Source Tools for Apache Kafka

What is Apache Kafka? Apache Kafka has become the backbone of many modern data pipelines, offering distributed event streaming for building real-time data applications. As Kafka's adoption continues to grow, the ecosystem around it has flourished with open-source tools that enhance its usability, performance, and management. These tools are indispensable for ensuring that Kafka clusters operate efficiently, securely, and reliably. What are the best open-source tools for your […]

https://www.simplyblock.io/blog/best-open-source-tools-apache-kafka/

GitHub - debezium/debezium: Change data capture for a variety of databases. Please log issues at https://issues.redhat.com/browse/DBZ.

Change data capture for a variety of databases. Please log issues at https://issues.redhat.com/browse/DBZ. - debezium/debezium

GitHub

Битва, где все проигрывают, или Как Kafka Compact Topics остановил войну данных

В статье рассказывается о типичной проблеме синхронизации данных между микросервисами через связку «снапшот + инкременты» и предлагается решение на основе Kafka Compact Topics . Это своего рода «волшебная тетрадь», которая автоматически оставляет только последние версии записей, избавляя от головной боли с рассинхронизацией. Разбираются практические кейсы применения, подводные камни, тонкости настройки и интеграция с Debezium для автоматической выгрузки из PostgreSQL. Что получите: понимание, когда компактные топики решают проблему, а когда лучше использовать классические подходы, плюс готовые конфиги для быстрого старта

https://habr.com/ru/companies/sberbank/articles/934438/

#kafka #kafkaconnect

Битва, где все проигрывают, или Как Kafka Compact Topics остановил войну данных

Выгрузить снапшот или отправить инкремент? Классическая дилемма, когда оба варианта чреваты головной болью. Два часа ночи. Выгружаете гигабайтный снапшот пользователей. Внезапно — алерт: ...

Хабр

Пишем свой Config Provider для Kafka Connect с поддержкой значений по умолчанию

Для инжекции значений из различных источников в конфигурации тасок Kafka Connect используются различные реализации интерфейса org.apache.kafka.common.config.provider.ConfigProvider. Это специализированный интерфейс, реализации которого отвечают за то, чтобы подставить значения используя различные источники.

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

#kafkaconnect #kafka #java #kotlin

Пишем свой Config Provider для Kafka Connect с поддержкой значений по умолчанию

Для инжекции значений из различных источников в конфигурации тасок Kafka Connect используются различные реализации интерфейса org.apache.kafka.common.config.provider.ConfigProvider. Это...

Хабр

Как в Sidec благодаря exactly-once сократили потребление ресурсов без потери производительности

Меня зовут Сергей Гребенюк, я лидер разработки Sidec ( Росреестр ). Расскажу, как решили задачу объединения двух топиков с соотношением один ко многим и почему не устроило решение на Kafka-streams ( kafka docs ) и RocksDB ( github ). А также о том, как, опираясь на гарантии доставки exactly-once (EOS) ( confluent docs ), смогли снизить требования к ресурсам в несколько раз. На иллюстрации показаны два подхода к объединению топиков: с persistent cache и in-memory cache. Мы перейдём от первой схемы ко второй.

https://habr.com/ru/companies/sberbank/articles/863688/

#Sidec #потребление_ресурсов #kafkastreams #kafkaconnect

Как в Sidec благодаря exactly-once сократили потребление ресурсов без потери производительности

Меня зовут Сергей Гребенюк, я лидер разработки Sidec ( Росреестр ). Расскажу, как решили задачу объединения двух топиков с соотношением один ко многим и почему не устроило решение на Kafka-streams (...

Хабр

Kafka. Лучшие практики применения. Настройки Prudcer & Consumer

Привет, Хабр! Меня зовут Михаил, я являюсь ФинТех системным аналитиком, исполняющим роль архитектора на проектах. И сегодня я хочу поделиться материалами по Kafka, которые подготовил для обучения сотрудников из своей команды. В материале постарался отразить самые важные технические моменты по Kafka, которые будут подкреплены наглядными кейсами и примерами использования. Материал будет полезным как для начинающих, так и для продвинутых пользователей. Желаю приятного прочтения. Kafka. Лучшие практики применения.

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

#kafka #кафка #kafka_consumer #producer/consumer #producer #consumer #kafkaconnect #kafka_listener #kafka_apache #kafka_connect

Kafka. Лучшие практики применения. Настройки Prudcer & Consumer

Привет, Хабр! Меня зовут Михаил, я являюсь ФинТех системным аналитиком, исполняющим роль архитектора на проектах. И сегодня я хочу поделиться материалами по Kafka, которые подготовил...

Хабр

Kafka как хранилище справочников

Хочу поделиться тем, как мы используем kafka для организации оперативного хранилища справочной информации.

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

#kafka #kafka_streams #kafkaconnect #kafka_listener #kotlin

Kafka как хранилище справочников

О чем статья Хочу поделиться тем, как мы используем kafka для организации оперативного хранилища справочной информации. Архитектура системы и требования Сейчас я работаю на достаточно...

Хабр

Пишем свой Http Kafka Sink Connector

В данной статье приведу реализацию своего kafka http sink connector. Он не претендует на универсальность, но возможно поможет разобраться как разработать свой connector.

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

#kotlin #kafkaconnect

Пишем свой Http Kafka Sink Connector

В данной статье приведу реализацию своего kafka http sink connector. Он не претендует на универсальность, но возможно поможет разобраться как разработать свой connector. Confluent Http Sink Connector...

Хабр