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).
Принцип работы (обмен сообщениями)
- Публикация (продюсер)
Продюсер отправляет сообщение в топик. Ключ сообщения (если указан) определяет, в какую партицию оно попадёт; если ключа нет, используется алгоритм round-robin. - Хранение (брокеры)
Сообщение записывается в соответствующую партицию на одном из брокеров и реплицируется на остальные (в соответствии с replication factor). - Чтение (консьюмеры)
Консьюмер запрашивает у Kafka данные, получает от брокера новую порцию сообщений вместе с оффсетами. - Коммит офсетов
После обработки консьюмер сообщает брокеру, до какого офсета все предыдущие сообщения успешно обработаны.
При сбое консьюмер может начать чтение с последнего зафиксированного (закоммиченного) офсета.
Типы доставки сообщений
- At most once — сообщение может быть доставлено максимум один раз, но возможна потеря.
- At least once — сообщение будет доставлено как ми нимум один раз, возможны дубли.
- Exactly once — ровно один раз, без потерь и дублирования (требует сложных настроек, обычно реализуется в связке с Kafka Streams).
Надёжность зависит от подтверждений (acks) продюсера:
acks=0— нет подтверждений (возможны потери).acks=1— подтверждение от лидера (средняя надёжность).acks=all— подтверждение от всех реплик (высокая надёжность).
Как не читать сообщение дважды
Kafka сама не отслеживает, какие сообщения были обработаны консьюмерами. За это отвечают офсеты (offsets). Каждая партиция — это упорядоченный журнал сообщений с уникальными номерами (оффсетами). Консьюмер:
- Считывает сообщение и его оффсет.
- Обрабатывает сообщение.
- «Коммитит» оффсет (offset-commit), уведомляя брокер о том, что сообщение обработано.
Таким образом, при перезапуске консьюмер знает, с какого места продолжить чтение.
Подборка материалов
Наши публикации
- Основы Kafka – что нужно знать аналитику
- Очереди сообщений. Основные понятия
- Как выбрать тип межсистемной интеграции
- Что нужно знать про асинхронные интеграции
- Подборка материалов про асинхронную интеграцию и очереди сообщений
- Kafka vs RabbitMQ: сравнение по пунктам
Статьи
- Apache Kafka: основы технологии от Слёрм
- Коротка я статья на Яндекс.Практикум
- Apache Kafka для аналитика: ТОП-7 требований к интеграционной шине
- Kafka за 20 минут от СберМаркета (Хабр)
- Перевод на русский главы «Kafka» из книги «Understanding Message Brokers»
- Микросервисы, Apache Kafka и Domain-Driven Design
- Как построить систему, способную выдерживать нагрузку в 5 млн rps (Хабр)
- Разбираемся в технологии и собираем простое приложение на базе managed-решения (Хабр)
- Как мы автоматизировали работу с Kafka (Хабр)
- Что такое Apache Kafka: как устроен и работает брокер сообщений (Selectel)
- Kafka за 20 минут. Ментальная модель и как с ней работать (Хабр)
- Брокеры сообщений – что это, плюсы и минусы, сравнение Kafka, Redis, RabbitMQ (Mediasoft Academy)
- Управление оффсетами в Kafka (Хабр)
- Apache Kafka и Spring Boot: лёгкая интеграция (Хабр)
- Когда НЕ нужно использовать Apache Kafka? (Хабр)
- Apache Kafka: от базовых настроек до архитектуры сервисов (Хабр)
- Kafka UI: краткий гайд (Хабр)
- Работа Apache Kafka на примерах. Поднимаем Kafka Cluster с помощью docker-compose (Хабр)
- 5 типичных ошибок при использовании Apache Kafka (Хабр)
- Основы репликации в Kafka (Хабр)
- Сжатие сообщений в Apache Kafka (Хабр)
- Apache Kafka. Безопасность, мониторинг и управление кластером (Хабр)
- Обкафкился по полной: 3 фейла с Apache Kafka (Хабр)
- Почему Kafka такая быстрая (Хабр)
- Kafka и микросервисы: обзор (Хабр)
- Синхронный Запрос-Ответ с использованием Apache Kafka (Хабр)
- Как удаленному сервису достучаться к Apache Kafka по HTTP: REST API
- Используете Kafka с микросервисами? Вы неправильно обрабатываете повторные передачи (Slurm)
- Установка и настройка Kafka на Windows, Ubuntu и другие ОС (Timeweb)
- Установка, настройка и запуск Kafka на Linux (dmosk.ru)
- Flink для самых маленьких (Хабр)
- Знакомство с Apache Spark (Хабр)
Видео
- Apache Kafka, открытый базовый курс (плейлист, 3 урока)
- Что такое Apache Kafka за 5 минут
- Про Kafka (основы) — Владимир Богдановский
- Apache Kafka урок 1. Зачем нужна, что это? RabbitMQ vs Kafka vs БД
- Apache Kafka основы. Урок 2. Что такое broker, consumer, producer, topic, partition
- Надежность Apache Kafka. Урок 3
- Как тестировать Kafka в интеграции с другими микросервисами
- Интеграция Clickhouse с PostgreSQL и Apache Kafka
- Что сказать на собеседовании про обработку топика Kafka
- Брокеры сообщений: RabbitMQ и Kafka // Демо-занятие курса «Microservice Architecture»
Конференции
- Объектно-ориентированный подход в построении архитектуры решений (AnalystDays)
Содержит кейсы по построению систем с использованием Kafka. - Построение современных мастер-систем в корпоративном секторе (AnalystDays)
Включает примеры использования Kafka в крупных организациях.
Книги
- Kafka в действии — Дилан Скотт, Виктор Гамов, Дейв Клейн.
- Apache Kafka. Потоковая обработка и анализ данных — Гвен Шапира, Тодд Палино, Раджини Сиварам, Крит Петти.
- Effective Kafka: A Hands-On Guide — Emil Koutanov (англ).
- Проектирование событийно-ориентированных систем. Концепции и шаблоны проектирования сервисов потоковой обработки данных с использованием Apache Kafka - Бен Стопфорд Обзор второй и третьей книг.