Расскажите про Kafka и зачем она используется.

Apache Kafka — это распределённая платформа потоковой передачи сообщений (event streaming platform), разработанная для обработки больших объёмов данных в реальном времени. Изначально создана в LinkedIn, позже передана в Apache Software Foundation. Kafka позволяет собирать, передавать, хранить и обрабатывать потоки событий (stream of records) с минимальной задержкой.

Основные понятия и архитектура Kafka

1. Producer

Производитель — это компонент или приложение, отправляющее данные (сообщения) в Kafka. Примеры: веб-приложение, система логирования, датчик IoT, микросервис.

2. Consumer

Потребитель — это компонент, читающий данные из Kafka. Он подписывается на один или несколько топиков и получает сообщения в реальном времени.

3. Topic

Топик — логическая категория или поток, в который публикуются сообщения. Kafka топики делятся на партиции (разделы), которые масштабируются горизонтально.

4. Partition

Каждый топик может быть разбит на несколько партиций, которые обрабатываются параллельно и хранятся на разных брокерах. Это позволяет достичь высокой производительности и масштабируемости.

5. Offset

Offset — это уникальный идентификатор каждого сообщения в пределах партиции. Он указывает на позицию, с которой потребитель продолжит чтение данных.

6. Broker

Брокер — отдельный сервер Kafka, который обрабатывает запись и чтение сообщений. Kafka-кластер состоит из нескольких брокеров.

7. ZooKeeper / KRaft

Kafka долгое время использовала Apache ZooKeeper для управления метаданными, но в новых версиях заменяется на KRaft (Kafka Raft Metadata mode) — собственный встроенный способ управления кластером без Zookeeper.

8. Consumer Group

Группа потребителей позволяет нескольким экземплярам потребителей совместно читать данные из одного топика. Каждая партиция доставляется только одному потребителю из группы.

Основные характеристики Kafka

  • Высокая пропускная способность: Kafka может обрабатывать миллионы сообщений в секунду.

  • Низкая задержка: от миллисекунд до нескольких секунд.

  • Надёжность: данные могут храниться в реплицированных партициях и быть доступны даже при сбоях узлов.

  • Масштабируемость: добавление новых брокеров увеличивает производительность.

  • Устойчивость к сбоям: благодаря репликации, failover и ack-механизмам.

  • Долговременное хранение данных: Kafka может хранить данные в течение часов, дней или месяцев (в отличие от очередей, где данные удаляются после чтения).

  • Поддержка stream processing: Kafka поддерживает интеграцию с Kafka Streams, ksqlDB, Flink, Spark Streaming и другими.

Сценарии использования Kafka

1. Логирование и мониторинг

Kafka может агрегировать логи с разных серверов, контейнеров или сервисов и передавать их в системы анализа, такие как ELK (Elasticsearch, Logstash, Kibana) или Splunk.

2. ETL и Data Pipeline

Kafka используется как транспортный слой между источниками данных (базы, API, сенсоры) и целевыми системами (Data Lake, Hadoop, DWH). Можно строить real-time ETL.

3. Микросервисная архитектура

Kafka обеспечивает надёжную и масштабируемую коммуникацию между микросервисами. В отличие от REST API, взаимодействие асинхронное и без привязки ко времени ответа.

4. Потоковая аналитика (streaming analytics)

Kafka работает в связке с Flink, Apache Beam или Kafka Streams для анализа данных "на лету" — например, выявление аномалий, мониторинг пользователей, рекомендации.

5. IoT

Kafka агрегирует данные с тысяч или миллионов IoT-устройств и доставляет их в системы обработки, контроля или хранения.

6. Репликация и интеграция данных

С помощью Kafka Connect можно подключать различные базы данных, файловые системы, облачные хранилища и другие системы, синхронизируя данные в реальном времени.

Kafka vs традиционные очереди сообщений (RabbitMQ, ActiveMQ)

Характеристика Apache Kafka RabbitMQ / ActiveMQ
Хранение сообщений Долговременное, логовое До обработки или подтверждения
--- --- ---
Масштабируемость Горизонтальная через партиции Ограничена
--- --- ---
Чтение сообщений Несколько независимых потребителей с собственными offset Сообщение удаляется после ack
--- --- ---
Поддержка stream processing Да (Kafka Streams, ksqlDB) Нет (ограничено, требуется внешняя интеграция)
--- --- ---
Через сколько удаляется сообщение По времени хранения (retention policy) Сразу после подтверждения
--- --- ---

Kafka Connect

Kafka Connect — это фреймворк для интеграции Kafka с внешними источниками и приёмниками данных. Он предоставляет готовые коннекторы (плагины) для PostgreSQL, MySQL, Elasticsearch, Cassandra, AWS S3, Google BigQuery и др.

Преимущества:

  • Простая настройка (JSON/YAML).

  • Высокая надёжность и отказоустойчивость.

  • Горизонтальное масштабирование.

  • Поддержка изменений схем (schema evolution через Schema Registry).

Kafka Streams и ksqlDB

Kafka Streams

Библиотека для Java/Scala, предназначенная для обработки потоков данных из Kafka. Поддерживает трансформации, агрегаты, оконные функции, joins и т. д.

ksqlDB

SQL-подобный язык для обработки потоков Kafka. Позволяет писать запросы без написания кода — например:

SELECT user_id, COUNT(\*) FROM logins WINDOW TUMBLING (SIZE 1 MINUTE)
GROUP BY user_id;

Обработка ошибок и гарантии доставки

Kafka поддерживает разные уровни доставки:

  • At most once — может потерять сообщение.

  • At least once — возможна повторная доставка.

  • Exactly once — с использованием transactional API (дороже по производительности, но надёжнее).

Интеграция с экосистемой Big Data

Kafka — центральный компонент во многих архитектурах Big Data:

  • Источник данных для Hadoop, Spark, Flink.

  • Интеграция с BI-инструментами через DWH.

  • Инфраструктура событийной передачи для microservices и event-driven архитектуры.

Kafka — это высокопроизводительная, отказоустойчивая, масштабируемая система для обработки потоков данных. Её основное предназначение — быть центральной шиной данных (data backbone) в современной архитектуре данных.