Установка и базовое управление Apache Kafka на Ubuntu 22.04

Apache Kafka — распределённая платформа потоковой передачи данных для обработки событий в реальном времени. Проект поддерживается Apache Software Foundation и реализован на Java и Scala. Kafka сочетает в себе возможности очередей сообщений, долговременного хранения и потоковой обработки, что делает её популярным выбором для интеграции данных, аналитики и построения real-time pipeline’ов в корпоративных системах.
Цель этой статьи — показать пошаговую ручную установку Kafka на Ubuntu 22.04 из бинарного архива, показав базовую конфигурацию, настройку systemd-сервисов для Zookeeper и Kafka, а также базовые команды для работы с топиками, продьюсерами, консюмерами и встроенным Kafka Connect.
Кому пригодится это руководство
- Системным администраторам и DevOps-инженерам, которым нужно быстро развернуть тестовый или стартовый Kafka-инстанс.
- Разработчикам, которые хотят локально тестировать продьюсеры/консюмеры и коннекторы.
- Тем, кто изучает потоковую передачу данных и хочет понять базовые команды и сервисную интеграцию.
Важно: в серьёзных продакшен-окружениях рекомендуют кластерную конфигурацию, репликацию, резервное копирование, мониторинг и шифрование данных.
Предварительные требования
- Сервер с Ubuntu 22.04, минимум 2–4 ГБ оперативной памяти (для теста 2 ГБ будет достаточно; для реальной загрузки — 8+ ГБ).
- Непривилегированный пользователь с sudo-права (Root не обязателен).
- Доступ к Интернету для скачивания пакета Kafka.
Установка Java OpenJDK
Kafka написана на Java/Scala, поэтому нужен JRE/JDK. На Ubuntu 22.04 пакет default-jdk обычно обеспечивает OpenJDK 11, который совместим с Kafka 3.2.
Обновите индексы пакетов:
sudo apt updateУстановите OpenJDK:
sudo apt install default-jdkПроверьте версию Java:
java -versionОжидаемый вывод должен содержать строку вроде “openjdk version \”11.*\””.
Загрузка и установка Apache Kafka
В этом руководстве используется Kafka 3.2.0 как пример. Вы можете выбрать другую совместимую версию, но следите за требованием Java.
- Создайте системного пользователя kafka без интерактивной оболочки и с домашней директорией /opt/kafka:
sudo useradd -r -d /opt/kafka -s /usr/sbin/nologin kafka- Скачайте бинарный архив Kafka (пример для 3.2.0):
sudo curl -fsSLo kafka.tgz https://dlcdn.apache.org/kafka/3.2.0/kafka_2.13-3.2.0.tgz- Распакуйте и переместите в /opt/kafka:
tar -xzf kafka.tgz
sudo mv kafka_2.13-3.2.0 /opt/kafka- Назначьте владельца каталога kafka:
sudo chown -R kafka:kafka /opt/kafka- Создайте директорию для логов и отредактируйте конфигурацию сервера:
sudo -u kafka mkdir -p /opt/kafka/logs
sudo -u kafka nano /opt/kafka/config/server.propertiesИзмените или добавьте строку для хранения логов Kafka:
# logs configuration for Apache Kafka
log.dirs=/opt/kafka/logsСохраните файл и закройте редактор.
Настройка Kafka и Zookeeper как systemd-сервисов
Для управления Kafka и Zookeeper удобно использовать systemd: это даёт единый интерфейс для автозапуска, рестартов и логирования.
Kafka включает в комплект Zookeeper, который используется для управления конфигурацией кластера и выбора контроллера. Для простых установок можно запускать встроенный Zookeeper, но в продакшене предпочтительнее отдельный Zookeeper-кластер.
- Создайте systemd-сервис для Zookeeper:
sudo nano /etc/systemd/system/zookeeper.serviceВставьте конфигурацию:
[Unit]
Requires=network.target remote-fs.target
After=network.target remote-fs.target
[Service]
Type=simple
User=kafka
ExecStart=/opt/kafka/bin/zookeeper-server-start.sh /opt/kafka/config/zookeeper.properties
ExecStop=/opt/kafka/bin/zookeeper-server-stop.sh
Restart=on-abnormal
[Install]
WantedBy=multi-user.targetСохраните и закройте.
- Создайте systemd-сервис для Kafka:
sudo nano /etc/systemd/system/kafka.serviceВставьте конфигурацию:
[Unit]
Requires=zookeeper.service
After=zookeeper.service
[Service]
Type=simple
User=kafka
ExecStart=/bin/sh -c '/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties > /opt/kafka/logs/start-kafka.log 2>&1'
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
Restart=on-abnormal
[Install]
WantedBy=multi-user.target- Примените новые сервисы systemd:
sudo systemctl daemon-reload
- Включите автозапуск и стартуйте сервисы:
sudo systemctl enable zookeeper
sudo systemctl start zookeeper
sudo systemctl enable kafka
sudo systemctl start kafka- Проверьте статус сервисов:
sudo systemctl status zookeeper
sudo systemctl status kafkaОжидаемый вывод показывает, что сервисы включены и находятся в состоянии running.


Важно: если сервис быстро завершается, смотрите логи в /opt/kafka/logs/start-kafka.log и в журнале systemd через journalctl -u kafka.
Базовые операции Kafka из командной строки
Инструменты командной строки находятся в /opt/kafka/bin. Ниже — наиболее часто используемые кейсы.
Создание топика:
sudo -u kafka /opt/kafka/bin/kafka-topics.sh \
--create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic TestTopicСписок доступных топиков:
sudo -u kafka /opt/kafka/bin/kafka-topics.sh --list --bootstrap-server localhost:9092Запись сообщений в топик (Console Producer):
sudo -u kafka /opt/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TestTopicЧтение сообщений с начала топика (Console Consumer):
sudo -u kafka /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic TestTopic --from-beginningОткройте два терминала: в одном запускайте producer и отправляйте строки; в другом consumer вы увидите сообщения в реальном времени.
Чтобы удалить топик:
sudo -u kafka /opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --delete --topic TestTopic
Kafka Connect: импорт и экспорт потоков из файла
Kafka Connect упрощает интеграцию с источниками и приёмниками данных (files, databases, object stores). В дистрибутиве уже есть простой file connector.
- Отредактируйте конфигурацию connect-standalone.properties:
sudo -u kafka nano /opt/kafka/config/connect-standalone.propertiesДобавьте путь к плагину (пример для версии в дистрибутиве):
plugin.path=libs/connect-file-3.2.0.jar- Создайте тестовый файл данных:
sudo -u kafka echo -e "Test message from file\nTest using Kafka connect from file" > /opt/kafka/test.txt- Запустите коннектор в standalone режиме (из директории /opt/kafka):
cd /opt/kafka
sudo -u kafka /opt/kafka/bin/connect-standalone.sh config/connect-standalone.properties config/connect-file-source.properties config/connect-file-sink.properties- В другом терминале запустите консольный consumer для топика connect-test:
sudo -u kafka /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic connect-test --from-beginningПри дописываемом содержимом в /opt/kafka/test.txt новые строки автоматически будут появляться в consumer:
sudo -u kafka echo "Another test message from file test.txt" >> test.txt
Полезные советы и отладка
- Логи: основной лог запуска Kafka — /opt/kafka/logs/start-kafka.log. Также systemd хранит логи в journalctl -u kafka.
- Ошибки при запуске часто связаны с правами доступа к /opt/kafka или с уже занятой 9092-портом.
- Если топик не создаётся, проверьте конфигурацию zookeeper.connect в server.properties.
- Для быстрой очистки после тестов удаляйте созданные топики и останавливайте сервисы systemctl stop kafka zookeeper.
Критерии приёмки
- Сервисы Zookeeper и Kafka активны и находятся в состоянии running.
- Можно создать топик и прочитать/написать сообщения с помощью консольных утилит.
- Kafka Connect корректно читает строки из test.txt и публикует их в топик connect-test.
Рекомендации по безопасности
Важно: приведённая конфигурация подходит для локального тестирования. В продакшене обязательно:
- Включить шифрование транспорта (TLS) для брокеров и клиентов.
- Настроить аутентификацию (SASL) и авторизацию (ACL) для ограничения доступа.
- Разделить права пользователей и запускать брокеры под минимальными привилегиями.
- Защищать доступ к ZooKeeper и ограничивать сетевой доступ между узлами.
Производительность и масштабирование — краткие рекомендации
- Партиционирование: увеличение числа партиций повышает параллелизм потребления, но усложняет репликацию.
- Репликация: устанавливайте replication-factor >= 3 для отказоустойчивости в продакшене.
- Параметры диска: используйте быстрые SSD и настройте log.dirs и log.segment.bytes в server.properties.
- Ретенция: log.retention.hours и log.retention.bytes помогают управлять объёмом на диске.
Мониторинг и метрики
- Kafka предоставляет JMX-метрики; их удобно экспортировать в Prometheus и визуализировать в Grafana.
- Отслеживайте следующие показатели: throughput (in/out), latency, under-replicated-partitions, consumer lag.
Резервное копирование и миграция
- Резервные копии топиков обычно строятся на уровне источников/сидов данных или через MirrorMaker для репликации между кластерами.
- При обновлении версии Kafka обязательно тестируйте на staging-кластере и читайте релиз-ноты о несовместимых изменениях.
Роли и чек-листы
Администратор:
- Установить Java и Kafka, создать пользователя kafka.
- Настроить systemd-сервисы и автозапуск.
- Настроить мониторинг и бэкапы.
Разработчик:
- Создать топики, настроить продьюсер/консюмер.
- Тестировать обработку сообщений и задержку.
SRE:
- Настроить репликацию, мониторинг, аварийные сценарии и playbook для восстановления.
Команды-справочник (cheat sheet)
- start services:
sudo systemctl start zookeeper
sudo systemctl start kafka- проверить статус:
sudo systemctl status kafka- создать топик:
sudo -u kafka /opt/kafka/bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic MyTopic- консольный продьюсер:
sudo -u kafka /opt/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic MyTopic- консольный консюмер:
sudo -u kafka /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic MyTopic --from-beginningРешение распространённых проблем
Проблема: broker не стартует, пишет BindException: Address already in use. Решение: проверьте, занят ли порт 9092 (ss -ltnp | grep 9092). Остановите процесс или измените listeners в server.properties.
Проблема: топик не создаётся автоматически. Решение: проверьте конфигурацию auto.create.topics.enable и настройки zookeeper.connect.
Проблема: consumer не получает сообщения, lag растёт. Решение: проверьте, что consumer использует правильный group.id и что партиции доступны.
Альтернативные подходы к установке
- Пакеты apt / PPA: есть сторонние пакеты, но часто они отстают по версии.
- Docker-контейнеры: удобны для изоляции и локального тестирования (официальные образы Confluent тоже доступны).
- Облачные managed-сервисы: Amazon MSK, Confluent Cloud, Aiven — для продакшена сокращают поддержку инфраструктуры.
Решение “установить или выбрать managed?” — упрощённое дерево принятия решения
flowchart TD
A[Нужна Kafka?] --> B{Требования к отказоустойчивости}
B -->|Низкие| C[Локальная установка вручную]
B -->|Высокие| D{Есть команда SRE?}
D -->|Да| E[Кластерная установка + Zookeeper/без ZK]
D -->|Нет| F[Managed Kafka в облаке]Краткое руководство по обновлению версий
- Протестируйте новую версию на staging.
- Проверьте совместимость клиента и брокера по релиз-нотами.
- Сделайте резервную копию критичных данных или настройте зеркалирование.
- Обновляйте брокеры поочерёдно, проверяя состояние under-replicated-partitions.
Заключение
Вы установили Apache Kafka на Ubuntu 22.04, настроили Zookeeper и Kafka как systemd-сервисы, создали топики, научились читать и писать сообщения через консоль и настроили Kafka Connect для потоковой передачи данных из файла. Это рабочая база для тестовой среды и начального изучения Kafka.
Ключевые следующие шаги для перехода в продакшен: настроить безопасность (TLS/SASL), кластерную репликацию с replication-factor >= 3, мониторинг и автоматические бэкапы.
Важно: всегда тестируйте операции обновления и резервного восстановления в контролируемой среде перед применением в продакшене.
Резюме
- Kafka — мощный инструмент для потоковых данных; на Ubuntu её можно установить вручную из бинарного архива.
- Systemd-сервисы упрощают управление процесcами Zookeeper и Kafka.
- Kafka Connect позволяет быстро интегрировать источники/приёмники данных, включая файлы.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента