Kafka поддерживает транзакции, чтобы гарантировать выполнение операций по принципу «всё или ничего»
Такая гарантия доставки называется exactly-once
Подробнее о других типах гарантии доставки тут
Когда применяется
🔘если требуется согласованность между несколькими топиками
🔘в операциях, где частичное изменение данных недопустимо (в финансовых приложениях, логистике, управлении запасами и заказами
Как работают транзакции в Kafka
⭕продюсер начинает транзакцию, присваивает уникальный
transactional.id. Это идентификатор, который отличает записи транзакций⭕продюсер отправляет сообщения в одну / несколько очередей с пометкой "транзакционные"
⭕продюсер подтверждает данные (коммит) или отменяет (откат)
Коммит фиксирует сообщения, и они становятся видимы потребителям, в противном случае -- откатываются
ACID в Kafka
◾️атомарность (Atomicity): вся группа сообщений фиксируется сразу
◾️согласованность (Consistency): контроль за статусами сообщений в метаданных
◾️изолированность (Isolation): с помощью настройки
read_committed (на стороне консьюмера) потребители могут видеть только зафиксированные данные, пока транзакция не завершена◾️долговечность (Durability): достигается за счёт репликации и журналов с зафиксированными сообщениями
Плюсы и минусы
💚гарантия целостности операций с использованием ACID
💚защита от дублирования и конфликтов через изоляцию транзакций
💚требуют больше ресурсов, что может снизить производительность
💚поддерживаются с 0.11.0 версии Kafka
Пример транзакции в Kafka
Система обработки заказов. Нужно записать информацию сразу в несколько топиков для сгласованности данных
Есть два топика в Kafka:
— orders: хранит общую информацию о заказе
— inventory: содержит информацию об изменении запасов после заказа
Шаги для транзакции:
🟡создать продюсера с transactional.id
🟡отправить сообщения в транзакции: записать детали нового заказа в оба топика orders и inventory
⏩ если успешно, фиксируется (коммит) транзакция: сообщения видны для потребителей обоих топиков
⏩ если ошибка, транзакция откатывается: ни одно сообщение не попадёт в топики
Результат: транзакция гарантирует, что потребители прочтут согласованные данные
📎 Материалы
1. Изоляция транзакций в Apache Kafka при потреблении сообщений
2. Семантика exactly-once в Apache Kafka
3. Транзакции в Apache Kafka: атомарность публикации сообщений
4. Что такое гарантия доставки сообщений или как избавиться от дублей и потерь в Apache Kafka и других Big Data брокерах
📚 Книги
1. Kafka в действии -- Дилан Скотт, Виктор Гамов и Дейв Клейн
2. Apache Kafka. Потоковая обработка и анализ данных -- Гвен Шапира, Тодд Палино, Раджини Сиварам, Крит Петти
3. Effective Kafka: A Hands-On Guide to Building Robust and Scalable Event-Driven Applications with Code Examples in Java -- Emil Koutanov (англ)
#интеграции
➿➿➿➿➿➿➿➿➿➿
🧑🎓 Больше полезного в базе знаний по системному анализу