Exactly-once Kafka | Артём Кулешов | Golang Meetup 2023 | СберМаркет Tech

YOUTUBE · 30.11.2025 06:25

Ключевые темы и таймкоды

Введение в Kafka и проблемы с доставкой данных

0:00
  • Артем, разработчик из Сбермаркета, рассказывает о подводных камнях Kafka.
  • Неправильная работа Kafka может привести к потере и искажению данных.
  • Приложения работают в ненадежной среде, где могут возникать сбои в железе, сети и софте.

Гарантии доставки в Kafka

1:37
  • Kafka - это надежный распределенный брокер логов, используемый для синхронной коммуникации.
  • Выделяют три типа гарантий доставки: от мост, от лист и экзакванс.
  • От мост позволяет терять данные, от лист - дублировать данные, экзакванс - гарантирует доставку данных без потерь.

Пример разработчика и проблемы с транзакциями

4:22
  • Разработчик добавляет отправку сообщений в Kafka в транзакцию.
  • Проблема: транзакция может откатиться, что приведет к дублированию сообщений.
  • Решение: использовать паттерн от бокс для сохранения заказов и сообщений в разных таблицах.

Использование Debezium

7:07
  • Debezium - комбайн для работы с базами данных, который может отправлять данные в Kafka.
  • Debezium работает на низком уровне, что может вызвать сложности с форматом данных.
  • Важно учитывать возможные проблемы с базой данных и настройки коннектора.

Альтернативное решение - собственный пакет

10:57
  • Разработчик создает собственный пакет для отправки сообщений в Kafka.
  • Пакет включает функции для сохранения сообщений и их отправки.
  • Пакет легко конфигурируется и поддерживает сквозную трассировку и метрики.

Проблемы с идемпотентной отправкой

11:57
  • Потребители иногда получают дубликаты сообщений.
  • Проблема решается с помощью идемпотентной отправки в Kafka версии 0.11.
  • Настройка продюсера включает идемпотентность и ожидание записи со всех реплик.

Проблемы с Kafka и репликация

14:12
  • Проблемы с публикацией и чтением сообщений из Kafka.
  • Kafka должна легко переживать обновления, но это не всегда так.
  • Топики разбиты на партиции с заданным количеством реплик.

Лидерство и инсинк-реплики

15:12
  • У каждой партиции есть лидер, через которого идет запись и чтение.
  • Kafka распределяет нагрузку равномерно между брокерами.
  • Важна настройка количества инсинк-реплик, чтобы сообщения были доступны для чтения.

Конфликты и настройки

16:02
  • Консьюмеры могут читать сообщения только при записи на заданное количество реплик.
  • Продюсеры могут конфигурировать, сколько реплик ждать подтверждения.
  • Рекомендуется устанавливать количество инсинк-реплик меньше репликейшн-фактора.

Лидер-экшн и перезагрузка

18:02
  • Настройка лидер-экшн позволяет Kafka выбирать лидера из партиций в состоянии инсинк.
  • Перезагрузка брокера не должна останавливать работу системы.

Транзакции в Kafka

19:02
  • Задача: прочитать сообщения, обогатить их и записать в другой топик.
  • Консьюмер сохраняет состояние в специальном топике.
  • Проблема двойной записи решается с помощью транзакций в Kafka.

Двухфазный протокол транзакций

20:47
  • Новый топик транзакшн-стейт отвечает за состояние транзакции.
  • Транзакшн-координатор отправляет команды для завершения транзакции.
  • Важно использовать уникальные транзакшн-идентификаторы для предотвращения конфликтов.

Kafka Streams и транзакции

23:36
  • Kafka Streams — библиотека для задач чтения и записи.
  • Использует транзакции для достижения атомарности.
  • Сохраняет состояние в специальных топиках и управляет ими.

Чтение и запись в базу

24:36
  • Задача: прочитать сообщения и записать артефакты в базу.
  • Сервис должен одновременно читать из топика с заказами и писать в базу.
  • Важно коммитить изменения для предотвращения дублирования данных.

Проблемы с транзакциями в Kafka

25:36
  • Разработчик решает использовать транзакционность базы данных для обеспечения атомарности операций.
  • Сервис читает сообщения из топика, помещает метаданные в таблицу и передает их хендлеру для обработки.
  • В конце транзакции происходит коммит или аборт.

Эффект ливанс

26:36
  • Если сервис падает между шагами, сообщения обрабатываются повторно, но только один раз.
  • Это называется эффектом ливанс.
  • Интерфейс пакета включает консьюмер, который получает хендлер и обрабатывает сообщения.

Обработка битых сообщений

27:36
  • В случае битых или нарушающих модель консистентности сообщений, их количество ретраев ограничивается.
  • Это позволяет избежать остановки процессинга.
  • Неправильная работа с транзакциями может привести к потере данных.

Вопросы и ответы

28:36
  • Вопрос о хранении апсетов в Kafka: это удобно для переобработки сообщений.
  • Вопрос о выборе между Serio и Sarama: предпочтение отдается Sarama из-за стабильности.
  • Вопрос о влиянии настроек Kafka на производительность: автокоммит асетов снижает производительность.

Мониторинг и настройки Kafka

32:11
  • Основная метрика для мониторинга Kafka — это LAC.
  • Важно следить за скоростью записи и чтения, а также за ошибками записи и чтения.
  • Джентльменский набор настроек Kafka включает правильные настройки топика и реплик.

Заключение

34:11
  • Выбор самого интересного вопроса: коммиты асетов можно не коммитить.
  • Благодарность за доклад и переход к следующей теме.