Перейти к основному содержимому

Kafka. Основное

Apache Kafka – распределённая система для обработки данных в режиме реального времени. Работает как почта: одни сервисы передают туда сообщения, а другие — получают. Её называют брокером сообщений, так как она выступает в качестве посредника.

Основные определения

  • Продюсеры (producers) — приложения, публикующие данные в Kafka.
  • Консьюмеры (consumers) — приложения, считывающие данные из Kafka.
  • Топики (topics) — именованные каналы, в которые продюсеры отправляют сообщения и из которых консьюмеры их читают.
  • Партиции (partitions) — физические «части» топиков, распределённые между брокерами для параллельной обработки и масштабирования. Сообщения внутри одной партиции хранятся в строгом порядке.
  • Брокеры (brokers) — серверы, принимающие, хранящие и передающие сообщения. Объединяются в кластеры для отказоустойчивости и масштабирования.
  • Zookeeper — сервис для координации кластера (в более новых версиях Kafka возможна работа без Zookeeper, но классическая архитектура опирается именно на него).

Где и как используется Kafka

Kafka подходит для проектов, где важны:

  • Высокая нагрузка (сотни тысяч/миллионы сообщений в секунду).
  • Масштабируемость и отказоустойчивость.
  • Возможность хранить и переиспользовать историю сообщений.

Часто применяют в:

  • Банковской сфере (онлайн-транзакции, платёжные системы).
  • Телекоме (обработка больших потоков данных).
  • IoT (сбор и анализ телеметрии).
  • Социальных сетях.
  • ETL-процессах (Kafka Connect, потоковые платформы Apache Flink, Spark и др.).

Подход к обмену сообщениями

В Kafka используется модель pull: консьюмеры сами запрашивают новые сообщения у брокера через определённые интервалы времени. Это помогает группировать сообщения в пакеты и повышать пропускную способность. Однако такой подход может привести к разбалансировке нагрузки между консьюмерами и дополнительной задержке в получении сообщений.

После прочтения консьюмерами сообщения не удаляются и могут храниться в топиках неограниченно долго (в зависимости от настроек retention). Это значит, что к одному и тому же сообщению можно обращаться повторно — полезно для различных сценариев, например, повторной обработки или отладки.

Архитектура Kafka

Kafka является распределенной системой. Все серверы объединяются в кластеры. Хранение и пересылка сообщений идёт параллельно на разных серверах, это даёт большую надежность и отказоустойчивость. Такая архитектура упрощает горизонтальное масштабирование: достаточно добавить дополнительные серверы.

Топики разбиваются на партиции и реплицируются между несколькими брокерами:

  • Лидер — основная копия партиции, обрабатывает запросы на запись и чтение.
  • Фолловеры — дополнительные копии (реплики), синхронизируются с лидером.
  • При сбое лидера одна из реплик становится новым лидером.

Replication factor показывает, сколько копий у каждой партиции. Например, значение 3 означает одну основную копию и две резервные.

Хранение и чтение сообщений

Каждое сообщение в Kafka имеет:

  • Ключ (необязателен, но влияет на выбор партиции и гарантирует порядок для одинаковых ключей);
  • Значение (payload сообщения);
  • Таймстамп;
  • Опциональные заголовки (headers).

Принцип работы (обмен сообщениями)

  1. Публикация (продюсер)
    Продюсер отправляет сообщение в топик. Ключ сообщения (если указан) определяет, в какую партицию оно попадёт; если ключа нет, используется алгоритм round-robin.
  2. Хранение (брокеры)
    Сообщение записывается в соответствующую партицию на одном из брокеров и реплицируется на остальные (в соответствии с replication factor).
  3. Чтение (консьюмеры)
    Консьюмер запрашивает у Kafka данные, получает от брокера новую порцию сообщений вместе с оффсетами.
  4. Коммит офсетов
    После обработки консьюмер сообщает брокеру, до какого офсета все предыдущие сообщения успешно обработаны.
    При сбое консьюмер может начать чтение с последнего зафиксированного (закоммиченного) офсета.

Типы доставки сообщений

  • At most once — сообщение может быть доставлено максимум один раз, но возможна потеря.
  • At least once — сообщение будет доставлено как минимум один раз, возможны дубли.
  • Exactly once — ровно один раз, без потерь и дублирования (требует сложных настроек, обычно реализуется в связке с Kafka Streams).

Надёжность зависит от подтверждений (acks) продюсера:

  • acks=0 — нет подтверждений (возможны потери).
  • acks=1 — подтверждение от лидера (средняя надёжность).
  • acks=all — подтверждение от всех реплик (высокая надёжность).

Как не читать сообщение дважды

Kafka сама не отслеживает, какие сообщения были обработаны консьюмерами. За это отвечают офсеты (offsets). Каждая партиция — это упорядоченный журнал сообщений с уникальными номерами (оффсетами). Консьюмер:

  1. Считывает сообщение и его оффсет.
  2. Обрабатывает сообщение.
  3. «Коммитит» оффсет (offset-commit), уведомляя брокер о том, что сообщение обработано.

Таким образом, при перезапуске консьюмер знает, с какого места продолжить чтение.

Подборка материалов

Наши публикации

  1. Основы Kafka – что нужно знать аналитику
  2. Очереди сообщений. Основные понятия
  3. Как выбрать тип межсистемной интеграции
  4. Что нужно знать про асинхронные интеграции
  5. Подборка материалов про асинхронную интеграцию и очереди сообщений
  6. Kafka vs RabbitMQ: сравнение по пунктам

Статьи

  1. Apache Kafka: основы технологии от Слёрм
  2. Короткая статья на Яндекс.Практикум
  3. Apache Kafka для аналитика: ТОП-7 требований к интеграционной шине
  4. Kafka за 20 минут от СберМаркета (Хабр)
  5. Перевод на русский главы «Kafka» из книги «Understanding Message Brokers»
  6. Микросервисы, Apache Kafka и Domain-Driven Design
  7. Как построить систему, способную выдерживать нагрузку в 5 млн rps (Хабр)
  8. Разбираемся в технологии и собираем простое приложение на базе managed-решения (Хабр)
  9. Как мы автоматизировали работу с Kafka (Хабр)
  10. Что такое Apache Kafka: как устроен и работает брокер сообщений (Selectel)
  11. Kafka за 20 минут. Ментальная модель и как с ней работать (Хабр)
  12. Брокеры сообщений – что это, плюсы и минусы, сравнение Kafka, Redis, RabbitMQ (Mediasoft Academy)
  13. Управление оффсетами в Kafka (Хабр)
  14. Apache Kafka и Spring Boot: лёгкая интеграция (Хабр)
  15. Когда НЕ нужно использовать Apache Kafka? (Хабр)
  16. Apache Kafka: от базовых настроек до архитектуры сервисов (Хабр)
  17. Kafka UI: краткий гайд (Хабр)
  18. Работа Apache Kafka на примерах. Поднимаем Kafka Cluster с помощью docker-compose (Хабр)
  19. 5 типичных ошибок при использовании Apache Kafka (Хабр)
  20. Основы репликации в Kafka (Хабр)
  21. Сжатие сообщений в Apache Kafka (Хабр)
  22. Apache Kafka. Безопасность, мониторинг и управление кластером (Хабр)
  23. Обкафкился по полной: 3 фейла с Apache Kafka (Хабр)
  24. Почему Kafka такая быстрая (Хабр)
  25. Kafka и микросервисы: обзор (Хабр)
  26. Синхронный Запрос-Ответ с использованием Apache Kafka (Хабр)
  27. Как удаленному сервису достучаться к Apache Kafka по HTTP: REST API
  28. Используете Kafka с микросервисами? Вы неправильно обрабатываете повторные передачи (Slurm)
  29. Установка и настройка Kafka на Windows, Ubuntu и другие ОС (Timeweb)
  30. Установка, настройка и запуск Kafka на Linux (dmosk.ru)
  31. Flink для самых маленьких (Хабр)
  32. Знакомство с Apache Spark (Хабр)

Видео

  1. Apache Kafka, открытый базовый курс (плейлист, 3 урока)
  2. Что такое Apache Kafka за 5 минут
  3. Про Kafka (основы) — Владимир Богдановский
  4. Apache Kafka урок 1. Зачем нужна, что это? RabbitMQ vs Kafka vs БД
  5. Apache Kafka основы. Урок 2. Что такое broker, consumer, producer, topic, partition
  6. Надежность Apache Kafka. Урок 3
  7. Как тестировать Kafka в интеграции с другими микросервисами
  8. Интеграция Clickhouse с PostgreSQL и Apache Kafka
  9. Что сказать на собеседовании про обработку топика Kafka
  10. Брокеры сообщений: RabbitMQ и Kafka // Демо-занятие курса «Microservice Architecture»

Конференции

  1. Объектно-ориентированный подход в построении архитектуры решений (AnalystDays)
    Содержит кейсы по построению систем с использованием Kafka.
  2. Построение современных мастер-систем в корпоративном секторе (AnalystDays)
    Включает примеры использования Kafka в крупных организациях.

Книги

  1. Kafka в действии — Дилан Скотт, Виктор Гамов, Дейв Клейн.
  2. Apache Kafka. Потоковая обработка и анализ данных — Гвен Шапира, Тодд Палино, Раджини Сиварам, Крит Петти.
  3. Effective Kafka: A Hands-On Guide — Emil Koutanov (англ).
  4. Проектирование событийно-ориентированных систем. Концепции и шаблоны проектирования сервисов потоковой обработки данных с использованием Apache Kafka - Бен Стопфорд Обзор второй и третьей книг.