📡 Apache Kafka
Apache Kafka — это распределённая потоковая платформа с открытым исходным кодом, которая позволяет публиковать и подписываться на потоки записей, хранить их в устойчивом виде и обрабатывать в реальном времени.
🧩 Что такое Kafka?
Apache Kafka — это высокопроизводительная система очередей сообщений с открытым исходным кодом, разработанная LinkedIn и переданная Apache Software Foundation.
Основные особенности:
- Высокая пропускная способность
- Распределённая архитектура
- Персистентное хранение логов
- Поддержка потоковой обработки
- Масштабируемость
⚙️ Основные компоненты
Компонент | Описание |
---|---|
Producer | Отправляет данные в Kafka |
Consumer | Получает данные из Kafka |
Broker | Узел Kafka, который хранит и управляет данными |
Topic | Логическая группа записей (канал) |
Partition | Раздел внутри топика для горизонтального масштабирования |
ZooKeeper | Сервис для управления метаданными и координацией кластера (в новых версиях заменяется KRaft) |
🧠 Ключевые концепции
Концепция | Описание |
---|---|
Тема (Topic) | Имя потока данных, по которому публикуются и читаются сообщения |
Раздел (Partition) | Физический сегмент темы, позволяющий масштабировать чтение/запись |
Смещение (Offset) | Позиция сообщения внутри раздела (уникальный идентификатор) |
Лог репликации | Резервная копия партиции для обеспечения отказоустойчивости |
Группа потребителей (Consumer Group) | Несколько потребителей, совместно обрабатывающие данные из топика |
Retention Policy | Политика хранения сообщений (по времени или объёму) |
💼 Применение Kafka
Kafka используется в различных сценариях:
- Потоковая обработка данных (real-time analytics)
- Журналирование логов
- Мониторинг показателей
- Обнаружение аномалий
- Интеграция систем через Event Sourcing
- Очереди сообщений с высокой пропускной способностью
🏗️ Архитектура Kafka
Простая схема работы:
Producer → Kafka Cluster (Topic:Partition) → Consumer
Более подробно:
- Producer отправляет данные в определённый топик
- Брокеры Kafka сохраняют данные в соответствующих партициях
- Consumers читают данные из партиций в порядке их записи
- Consumer Groups позволяют балансировать нагрузку между потребителями
- ZooKeeper / KRaft отвечает за координацию кластера и управление лидерами партиций
🚀 Производительность и масштабируемость
Преимущества Kafka:
✅ Высокая пропускная способность: миллионы сообщений в секунду
✅ Персистентное хранение: данные не теряются после чтения
✅ Распределённая архитектура: легко масштабируется
✅ Отказоустойчивость: благодаря репликации партиций
✅ Поддержка стрим-обработки: Kafka Streams API и KSQL
🌐 Полезные ссылки
- Официальный сайт Apache Kafka
- Kafka Documentation
- Kafka Tutorials
- Confluent Platform – коммерческая версия Kafka
- Kafka vs RabbitMQ сравнение
- KRaft mode documentation
❓ Часто задаваемые вопросы
В чём разница между Kafka и другими брокерами сообщений (например, RabbitMQ)?
Kafka ориентирована на высокую пропускную способность, хранение исторических данных и потоковую обработку. RabbitMQ лучше подходит для низколатентных транзакционных задач.
Как Kafka обеспечивает отказоустойчивость?
Через репликацию партиций между брокерами. Если один брокер выходит из строя, его реплики становятся активными.
Можно ли использовать Kafka без ZooKeeper?
Да, начиная с Kafka 2.8+, можно использовать KRaft mode (Kafka Raft Metadata mode), который заменяет ZooKeeper.