apache kafka
Apache Kafka — это распределённая платформа потоковой передачи событий с открытым исходным кодом, изначально разработанная в LinkedIn и переданная в Apache Software Foundation в 2011 году. Apache Kafka предназначена для высокопроизводительной, отказоустойчивой передачи данных между системами в реальном времени и используется в архитектурах event-driven систем по всему миру.
Ключевые концепции Kafka
Topic — именованный канал, в который записываются и из которого читаются события. Аналог темы в pub/sub системах, но с хранением.
Partition — топик делится на секции-партиции, каждая из которых является упорядоченной последовательностью записей. Партиции обеспечивают параллелизм и горизонтальное масштабирование.
Offset — уникальный порядковый номер каждого сообщения внутри партиции. Консьюмеры отслеживают свой offset, позволяя перечитывать сообщения и восстанавливаться после сбоев.
Producer — компонент, записывающий события в топики.
Consumer — компонент, читающий события из топиков. Consumer Group позволяет нескольким инстансам параллельно обрабатывать партиции одного топика.
Broker — сервер Kafka, хранящий и обслуживающий данные. Кластер состоит из нескольких брокеров.
Почему Kafka такая быстрая
Производительность Kafka обеспечивается несколькими архитектурными решениями. Во-первых, последовательная запись на диск: Kafka пишет сообщения последовательно, что на SSD даёт пропускную способность, близкую к сетевой. Во-вторых, zero-copy: данные передаются из файловой системы напрямую в сеть через системный вызов sendfile(), минуя копирование в user space. В-третьих, батчинг и сжатие: сообщения группируются в батчи и сжимаются (gzip, snappy, lz4, zstd), что снижает нагрузку на сеть и диск.
Типичные Kafka-кластеры обрабатывают миллионы сообщений в секунду с задержками в единицы миллисекунд.
Гарантии доставки
- At most once — сообщение доставляется не более одного раза (может потеряться)
- At least once — сообщение доставляется хотя бы один раз (возможны дубликаты)
- Exactly once — гарантия ровно одной доставки, достигается через idempotent producers и транзакции Kafka
Kafka Streams и ksqlDB
Kafka Streams — библиотека для обработки потоков данных прямо в Kafka-экосистеме, без внешних процессинговых фреймворков. Поддерживает операции join, aggregation, windowing прямо на JVM-приложении.
ksqlDB — SQL-интерфейс для потоковой обработки: позволяет описывать трансформации данных в топиках через знакомый SQL-синтаксис без написания Java/Scala-кода.
Типичные сценарии использования
- Сбор и централизация логов и метрик от микросервисов
- Event sourcing — хранение полной истории изменений состояния
- Change Data Capture (CDC) — захват изменений из БД и трансляция в другие системы
- Real-time аналитика и ETL в потоковом режиме
- Взаимодействие микросервисов через события (event-driven architecture)
- Репликация данных между дата-центрами через Kafka MirrorMaker
Kafka Connect и экосистема
Kafka Connect — фреймворк для интеграции Kafka с внешними системами без написания кода. Connector-реестр Confluent Hub содержит сотни готовых коннекторов для СУБД, объектных хранилищ (S3, GCS), поисковых систем (Elasticsearch), облачных сервисов. Source connectors читают из внешних систем в Kafka, Sink connectors записывают из Kafka во внешние системы.
Kafka vs альтернативы
RabbitMQ — традиционный message broker с push-моделью доставки, удаляет сообщения после потребления. Подходит для task queues, но не для event log. Apache Pulsar — конкурент Kafka с более гибкой моделью хранения и встроенной поддержкой multi-tenancy. AWS Kinesis — managed аналог от Amazon. Kafka выигрывает по throughput, экосистеме и гибкости, но требует экспертизы для эксплуатации.
Kafka в облаке: управляемые сервисы
Самостоятельная эксплуатация Kafka-кластера требует глубокой экспертизы: настройка репликации, мониторинг consumer lag, управление retention, балансировка лидеров партиций. Для большинства команд управляемые сервисы предпочтительнее. Confluent Cloud — managed Kafka с дополнительными возможностями: Schema Registry, ksqlDB, Connectors в облаке. AWS MSK (Managed Streaming for Kafka) — нативная интеграция с IAM, VPC, CloudWatch. Aiven for Kafka — мультиоблачный managed-сервис. Upstash Kafka — serverless Kafka с оплатой за сообщение, идеален для малых нагрузок. Выбор managed-сервиса освобождает команду для работы над продуктом, а не инфраструктурой.
Частые вопросы
Чем Kafka отличается от RabbitMQ?
Kafka — лог событий с хранением на диске. Сообщения не удаляются после потребления, несколько consumer groups читают независимо. RabbitMQ — traditional message broker с push-доставкой и удалением сообщений после подтверждения. Kafka лучше для high-throughput и event sourcing, RabbitMQ — для task queues.
Как долго Kafka хранит сообщения?
По настраиваемому retention policy: по времени (например, 7 дней) или по размеру (например, 100 ГБ). После истечения retention сообщения удаляются. При log compaction хранится только последнее значение для каждого ключа — бессрочно.
Нужен ли ZooKeeper для Kafka?
Исторически Kafka использовал ZooKeeper для хранения метаданных. С Kafka 2.8+ введён режим KRaft (Kafka Raft), заменяющий ZooKeeper внутренним консенсус-протоколом. Kafka 4.0 полностью отказался от ZooKeeper.
Другие термины в теме «Инженерия данных»
Не хватает деталей?
Напишите, что уточнить по теме «apache kafka» — это помогает улучшать материал и подсказывает, какие термины добавить дальше. Email необязателен: укажите, если хотите ответ только для вас (мы не шлём рассылки).