Что такое kafka
Apache Kafka — это распределённая платформа для потоковой обработки данных, которая обеспечивает высокую пропускную способность, надёжное хранение событий и масштабируемость. Она была разработана в LinkedIn и передана в Apache Software Foundation, став стандартом де-факто для сбора, хранения и обработки больших потоков данных в реальном времени.
Как это работает
Kafka работает по модели «публикация-подписка»: продюсеры отправляют сообщения в топики, а консьюмеры читают их оттуда. Ключевые компоненты:
- Продюсеры (Producers) — приложения, которые публикуют данные в топики.
- Топики (Topics) — категории или каналы, куда записываются данные. Топик может быть разбит на партиции.
- Партиции (Partitions) — сегменты топика, которые позволяют распределять данные между узлами кластера и обрабатывать их параллельно. Каждая партиция может иметь несколько реплик для отказоустойчивости.
- Консьюмеры (Consumers) — приложения, которые подписываются на топики и читают данные. Консьюмеры объединяются в группы для распределённой обработки.
- Брокеры (Brokers) — серверы, которые хранят данные и обслуживают запросы продюсеров и консьюмеров. Кластер Kafka состоит из нескольких брокеров, управляемых контроллером.
Данные в Kafka хранятся в журнале (log) и упорядочены в пределах партиции. Каждое сообщение получает уникальный offset — позицию в партиции. Консьюмеры сами управляют своим offset, что позволяет им перечитывать сообщения при необходимости.
Пример использования
Типичный сценарий — сбор логов с нескольких серверов и передача их в систему аналитики. Продюсеры на серверах отправляют логи в топик app-logs. Консьюмеры, например, приложение для мониторинга, читают этот топик и обрабатывают события в реальном времени.
# Пример конфигурации продюсера (producer.properties)
bootstrap.servers=localhost:9092
key.serializer=org.apache.kafka.common.serialization.StringSerializer
value.serializer=org.apache.kafka.common.serialization.StringSerializer# Отправка сообщения через консольный продюсер
kafka-console-producer.sh --broker-list localhost:9092 --topic app-logs
> error: connection timeoutПодводные камни
- Порядок сообщений гарантируется только в пределах партиции, не во всём топике. Если нужен глобальный порядок, используйте одну партицию (но это снижает параллелизм).
- Репликация требует настройки: фактор репликации должен быть больше 1, иначе при сбое брокера данные могут быть потеряны.
- Хранение данных ограничено настройками retention (например,
log.retention.hours). По умолчанию данные хранятся 7 дней, но это можно изменить. - Смещения консьюмеров хранятся в отдельном топике
__consumer_offsets. Если консьюмер не коммитит offset, после перезапуска он может прочитать сообщения заново. - Продюсеры должны настраивать
acks(подтверждения) для баланса между надёжностью и задержкой.
Когда использовать
Kafka подходит для сценариев, где требуется:
- Высокая пропускная способность (сотни тысяч сообщений в секунду).
- Надёжное хранение событий и возможность их повторного чтения.
- Горизонтальное масштабирование кластера.
- Интеграция множества источников и потребителей данных.
Типичные применения: логирование, мониторинг, потоковая обработка (совместно с Kafka Streams или Apache Flink), интеграция микросервисов, event sourcing.
Коротко
- Kafka — распределённая платформа для потоковой обработки данных с высокой производительностью и отказоустойчивостью.
- Основные компоненты: продюсеры, топики, партиции, консьюмеры, брокеры.
- Данные хранятся в журнале, порядок гарантируется в пределах партиции.
- Используется для логирования, мониторинга, интеграции данных и потоковой обработки в реальном времени.
Похожие вопросы
- Чем отличается Terraform от Ansible ELK stack33%
- Чем отличаются роли от плейбуков33%
- В чём разница между контейнеризацией и виртуализацией33%
- Что такое зомби процессы33%
- Какой у вас опыт работы с докером33%
- Насколько сложные приходилось писать пайплайны на gitlab CI с использованием инклудов якорей33%
- Что такое kubernetes33%
- Какой у вас опыт работы с TeamCity26%