Перейти к содержанию

Apache Kafka

Apache Kafka — это распределенная платформа потоковой передачи данных, используемая для создания конвейеров данных в реальном времени и приложений для потоковой обработки.

Основные концепции

  • Брокеры (Brokers): Серверы, составляющие кластер Kafka.
  • Топики (Topics): Категории для организации сообщений.
  • Партиции (Partitions): Части топика, распределённые по брокерам.
  • Продюсеры (Producers): Приложения, которые отправляют сообщения в Kafka.
  • Консьюмеры (Consumers): Приложения, которые считывают сообщения из Kafka.
  • Группы потребителей (Consumer Groups): Группы консьюмеров, которые совместно обрабатывают сообщения.
  • Смещение (Offset): Позиция сообщения в партиции.

Команды для работы с топиками

Создание топика

Bash
kafka-topics --bootstrap-server localhost:9092 --create --topic my-topic --partitions 3 --replication-factor 1

Просмотр списка топиков

Bash
kafka-topics --bootstrap-server localhost:9092 --list

Просмотр информации о топике

Bash
kafka-topics --bootstrap-server localhost:9092 --describe --topic my-topic

Посмотреть количество сообщений в топике (последнее число)

Bash
kafka-run-class kafka.tools.GetOffsetShell --broker-list localhost:9092 --topic notification-enricher

Работа с консьюмерами

Просмотр всех сообщений с начала

Bash
kafka-console-consumer --bootstrap-server localhost:9092 --topic rule-engine-output-events --from-beginning

Просмотр лага консьюмера

Bash
kafka-consumer-groups --bootstrap-server localhost:9092 --group notification-enricher --describe

Создание консьюмера с указанием группы

Bash
kafka-console-consumer --bootstrap-server localhost:9092 --topic my-topic --group my-group

Работа с продюсерами

Отправка сообщений через консольный продюсер

Bash
kafka-console-producer --bootstrap-server localhost:9092 --topic my-topic

После запуска команды можно вводить сообщения построчно и отправлять их, нажимая Enter.

Отправка сообщений с ключом

Bash
kafka-console-producer --bootstrap-server localhost:9092 --topic my-topic --property "parse.key=true" --property "key.separator=:"

Пример ввода: key1:value1

Мониторинг и администрирование

Просмотр групп консьюмеров

Bash
kafka-consumer-groups --bootstrap-server localhost:9092 --list

Сброс смещения консьюмера

Bash
kafka-consumer-groups --bootstrap-server localhost:9092 --group my-group --topic my-topic --reset-offsets --to-earliest --execute

Изменение конфигурации топика

Bash
kafka-configs --bootstrap-server localhost:9092 --entity-type topics --entity-name my-topic --alter --add-config retention.ms=86400000

Примеры использования в продакшн

Запуск многоузлового кластера

Bash
1
2
3
4
5
# Запуск ZooKeeper (для Kafka < 3.0)
zookeeper-server-start /path/to/zookeeper.properties

# Запуск брокера Kafka
kafka-server-start /path/to/server-1.properties

Типичная конфигурация высокодоступного кластера

  • Минимум 3 брокера для высокой доступности
  • Фактор репликации 3 для важных топиков
  • Включение автоматического создания топиков: auto.create.topics.enable=true
  • Настройка удержания данных: log.retention.hours=168 (1 неделя)

Решение распространенных проблем

Лаги консьюмеров

Если наблюдаются большие лаги консьюмеров: 1. Увеличьте количество партиций топика 2. Увеличьте количество консьюмеров в группе 3. Оптимизируйте обработку сообщений в консьюмере

Проблемы с производительностью

Для повышения производительности: 1. Увеличьте batch.size у продюсера 2. Настройте linger.ms для группировки сообщений 3. Увеличьте buffer.memory для накопления сообщений

Проблемы с дисковым пространством

Если заканчивается дисковое пространство: 1. Уменьшите время хранения сообщений: log.retention.hours 2. Ограничьте размер хранимых данных: log.retention.bytes 3. Добавьте больше дискового пространства к брокерам