Встречается на 33% собеседований по DevOps

Что такое kafka

Apache Kafka — это распределённая платформа для потоковой обработки данных, которая обеспечивает высокую пропускную способность, надёжное хранение событий и масштабируемость. Она была разработана в LinkedIn и передана в Apache Software Foundation, став стандартом де-факто для сбора, хранения и обработки больших потоков данных в реальном времени.

Как это работает

Kafka работает по модели «публикация-подписка»: продюсеры отправляют сообщения в топики, а консьюмеры читают их оттуда. Ключевые компоненты:

  • Продюсеры (Producers) — приложения, которые публикуют данные в топики.
  • Топики (Topics) — категории или каналы, куда записываются данные. Топик может быть разбит на партиции.
  • Партиции (Partitions) — сегменты топика, которые позволяют распределять данные между узлами кластера и обрабатывать их параллельно. Каждая партиция может иметь несколько реплик для отказоустойчивости.
  • Консьюмеры (Consumers) — приложения, которые подписываются на топики и читают данные. Консьюмеры объединяются в группы для распределённой обработки.
  • Брокеры (Brokers) — серверы, которые хранят данные и обслуживают запросы продюсеров и консьюмеров. Кластер Kafka состоит из нескольких брокеров, управляемых контроллером.

Данные в Kafka хранятся в журнале (log) и упорядочены в пределах партиции. Каждое сообщение получает уникальный offset — позицию в партиции. Консьюмеры сами управляют своим offset, что позволяет им перечитывать сообщения при необходимости.

Пример использования

Типичный сценарий — сбор логов с нескольких серверов и передача их в систему аналитики. Продюсеры на серверах отправляют логи в топик app-logs. Консьюмеры, например, приложение для мониторинга, читают этот топик и обрабатывают события в реальном времени.

yaml
# Пример конфигурации продюсера (producer.properties)
bootstrap.servers=localhost:9092
key.serializer=org.apache.kafka.common.serialization.StringSerializer
value.serializer=org.apache.kafka.common.serialization.StringSerializer
bash
# Отправка сообщения через консольный продюсер
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 — распределённая платформа для потоковой обработки данных с высокой производительностью и отказоустойчивостью.
  • Основные компоненты: продюсеры, топики, партиции, консьюмеры, брокеры.
  • Данные хранятся в журнале, порядок гарантируется в пределах партиции.
  • Используется для логирования, мониторинга, интеграции данных и потоковой обработки в реальном времени.
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы