Гид по технологиям

Установка и базовое использование Apache Kafka на Rocky Linux

• 7 min read • DevOps • Обновлено 21 Nov 2025
Apache Kafka на Rocky Linux — установка и работа
Apache Kafka на Rocky Linux — установка и работа

Kafka — распределённая платформа потоковой передачи данных. В этом руководстве показано, как установить Java, загрузить и распаковать Kafka в /opt/kafka, создать systemd‑сервисы для Zookeeper и Kafka, запустить продюсер и консюмер через консоль и настроить Kafka Connect для чтения из файла. В конце есть советы по отладке, безопасности и контрольный список для администраторов.

Важно: в этой инструкции используется классическая схема с Zookeeper. Новые релизы Kafka могут поддерживать режим без Zookeeper (KRaft) — для продакшен‑развёртываний уточняйте требования вашей версии Kafka.

Логотип Apache Kafka и ключевые понятия

Краткое введение в Apache Kafka

Apache Kafka — это распределённый журнал сообщений и платформа обработки потоков в реальном времени, разработанная Apache Software Foundation. Kafka сочетает возможности очереди сообщений, долговременного хранения и обработки потоков. Типичные сценарии: сбор логов в реальном времени, интеграция данных между системами, аналитика потоков, микросервисная коммуникация и служба событий для корпоративных приложений.

Определение в одну строку: Kafka — масштабируемая система передачи событий, оптимизированная для высокой пропускной способности и устойчивости.

Основные понятия (одной строкой)

  • Топик — логическое имя потока сообщений.
  • Продюсер — отправляет сообщения в топик.
  • Консюмер — читает сообщения из топика.
  • Партиция — единица параллелизма внутри топика.
  • Репликация — копирование партиций для отказоустойчивости.
  • Zookeeper — координационный сервис (в классическом развертывании).

Что вам понадобится (предварительные условия)

  • Сервер с Rocky Linux (v8 или v9). Можно использовать виртуальную машину или облачный инстанс.
  • Непривилегированный пользователь с sudo‑правами.
  • Подключение к интернету для загрузки бинарников Apache Kafka.

Установка Java (OpenJDK 11)

Apache Kafka — Java‑приложение, поэтому первым шагом установим OpenJDK. На момент подготовки этого руководства Kafka требует как минимум Java 11.

Выполните команду:

sudo dnf install java-11-openjdk

Подтвердите установку, введя “y” при запросе.

Вывод установки Java через dnf

Проверьте установленную версию Java:

java -version

Ожидаемый результат — строка с Java OpenJDK 11.

Загрузка и подготовка бинарного пакета Kafka

Создадим системного пользователя для Kafka и установим Kafka в /opt/kafka.

  1. Создаём пользователя kafka (без возможности входа):
sudo useradd -r -d /opt/kafka -s /usr/sbin/nologin kafka
  1. Переходим в /opt и загружаем архив Kafka:
cd /opt
sudo curl -fsSLo kafka.tgz https://downloads.apache.org/kafka/3.3.1/kafka_2.12-3.3.1.tgz
  1. Распаковываем и переименовываем каталог:
tar -xzf kafka.tgz
sudo mv kafka_2.12-3.3.1 /opt/kafka
  1. Меняем владельца каталога на пользователя kafka:
sudo chown -R kafka:kafka /opt/kafka
  1. Создаём каталог для логов и редактируем конфигурацию server.properties, чтобы записывать логи в /opt/kafka/logs:
sudo -u kafka mkdir -p /opt/kafka/logs
sudo -u kafka nano /opt/kafka/config/server.properties

В файле server.properties найдите и измените (раскомментируйте) опцию log.dirs:

# logs configuration for Apache Kafka
log.dirs=/opt/kafka/logs

Сохраните и закройте файл.

Распаковка Kafka и подготовка каталога /opt/kafka

Запуск Kafka и Zookeeper как systemd‑сервисы

Kafka в традиционной конфигурации использует Zookeeper. Для надёжного управления процессами создадим systemd‑юниты для Zookeeper и Kafka. Оба процесса будут запускаться от имени пользователя kafka.

  1. Создайте файл /etc/systemd/system/zookeeper.service:
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
  1. Создайте файл /etc/systemd/system/kafka.service:
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
  1. Перезагрузите конфигурацию systemd и запустите сервисы:
sudo systemctl daemon-reload
sudo systemctl start zookeeper
sudo systemctl start kafka
sudo systemctl enable zookeeper
sudo systemctl enable kafka
  1. Проверьте статус:
sudo systemctl status zookeeper
sudo systemctl status kafka

Вы должны увидеть, что обе службы запущены и включены для автозапуска.

Создание и запуск systemd‑сервисов для Zookeeper и Kafka

Статус Zookeeper — активен

Статус Kafka — активен

Важно: логи запуска Kafka будут в /opt/kafka/logs/start-kafka.log — проверьте их при проблемах.

Базовые операции: топики, продюсер и консюмер

Все утилиты Kafka находятся в /opt/kafka/bin. Ниже — стандартный сценарий создания топика, отправки сообщений и их чтения.

  1. Создание топика TestTopic (1 партиция, фактор репликации 1):
sudo -u kafka /opt/kafka/bin/kafka-topics.sh \
--create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic TestTopic
  1. Список топиков:
sudo -u kafka /opt/kafka/bin/kafka-topics.sh --list --bootstrap-server localhost:9092
  1. Запуск консольного продюсера (ввод сообщений вручную):
sudo -u kafka /opt/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TestTopic

Набирайте строки и нажимайте Enter — каждое сообщение отправляется в топик.

  1. В другом терминале запустите консольного консюмера, чтобы читать с начала:
sudo -u kafka /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic TestTopic --from-beginning

Сообщения из продюсера будут отображаться у консюмера в реальном времени.

Поток producer → consumer в консоли Kafka

  1. Очистка тестовой среды — удаление топика:
sudo -u kafka /opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --delete --topic TestTopic

Kafka Connect — поток из файла (Connect File Connector)

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

  1. В файле connect-standalone.properties укажите путь к плагинам (libs):
sudo -u kafka nano /opt/kafka/config/connect-standalone.properties

Измените:

plugin.path=/opt/kafka/libs
  1. Создайте файл-источник test.txt:
sudo -u kafka echo -e "Test message from file\nTest using Kafka connect from file" > /opt/kafka/test.txt
  1. Запустите standalone‑режим Connect с примерными конфигурациями source и sink (они создают топик connect-test):
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
  1. В другом терминале запустите консольного консюмера для топика connect-test:
sudo -u kafka /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic connect-test --from-beginning
  1. Добавьте новую строку в файл test.txt — Connect обнаружит изменение и отправит новую запись в Kafka:
sudo -u kafka echo "Another test message from file test.txt" >> /opt/kafka/test.txt

Kafka Connect: поток из файла отображается в консоли

Отладка и проверка состояния

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

  • Просмотр последних строк логов Kafka:
sudo tail -n 200 /opt/kafka/logs/start-kafka.log
  • Просмотр системных логов сервисов через journalctl:
sudo journalctl -u kafka -f
sudo journalctl -u zookeeper -f
  • Проверка доступности порта 9092 (локально):
ss -tunlp | grep 9092
  • Проверка конфигурации broker.id и listeners в /opt/kafka/config/server.properties — для кластеров важно, чтобы listeners был корректно настроен (hostname:port или 0.0.0.0).

  • Если консюмер не получает сообщений, убедитесь, что вы читаете тот же топик и у вас правильный –bootstrap-server.

Совет: при тестах на одной машине используйте localhost; при распределённых развёртываниях используйте реальные хосты/адреса и откройте соответствующие порты в firewall.

Безопасность и продакшен‑настройки (кратко)

Ключевые направления, которые нужно учитывать перед переводом в продуктив:

  • Аутентификация и авторизация: настройка SASL (SCRAM/PLAIN) и ACL для ограничения доступа к топикам.
  • Шифрование: включить SSL/TLS для шифрования трафика между клиентами и брокерами и между брокерами.
  • Разделение ролей: отделение прав продюсеров/консюмеров/админов.
  • Мониторинг: метрики JMX, интеграция с системами мониторинга (Prometheus, Grafana).
  • Резервирование и отказоустойчивость: репликация партиций на нескольких брокерах.
  • Патч‑менеджмент: обновление Java и Kafka по мере выхода важных обновлений безопасности.

Важно: конкретные команды по настройке SASL/SSL зависят от версии Kafka и используемой инфраструктуры — следуйте официальной документации при включении безопасности.

Производительность и тюнинг (упрощённо)

Несколько практических правил‑эвристик (ментальные модели):

  • Чем больше партиций — тем выше параллелизм, но выше нагрузка на контроллер и метаданные.
  • Репликация повышает надёжность, но снижает производительность записи с учётом задержки подтверждений.
  • Размер батчей продюсера и linger.ms существенно влияют на пропускную способность и задержку: большие батчи повышают throughput, но увеличивают задержку.
  • Для больших объёмов данных используйте быстрые диски (NVMe) и отдельные файловые системы для логов Kafka.

Эти параметры настраиваются в server.properties и в конфигурации клиентов.

Контрольный список (роль‑ориентированный)

Администратор (DevOps):

  • Установлена и проверена версия Java.
  • Kafka установлена в /opt/kafka и принадлежит пользователю kafka.
  • Созданы systemd‑юниты и сервисы запущены и включены.
  • Логи направлены в /opt/kafka/logs и настроен ротация логов.
  • Настроен мониторинг и оповещения.

Разработчик (Engineer):

  • Тестовый топик создан и доступны prod/dev разделы.
  • Продюсер и консюмер корректно подключаются и проходят аутентификацию (если включена).
  • Производительность на тестовой нагрузке удовлетворяет требованиям.

Оператор (SRE):

  • Настроены SLI/SLO для задержки и доступности (например, 99.9% доступности брокера — задаётся отдельно).
  • План восстановления и бэкапа согласован.

Мини‑методология развертывания (шаги)

  1. Подготовить ОС: обновление пакетов, сетевые настройки, создание пользователя kafka.
  2. Установить Java и проверить версию.
  3. Загрузить и распаковать Kafka в /opt/kafka.
  4. Настроить server.properties (log.dirs, listeners, broker.id).
  5. Создать systemd‑юниты и запустить Zookeeper и Kafka.
  6. Выполнить базовые тесты: создание топика, отправка/чтение сообщений.
  7. Настроить мониторинг, безопасность и резервирование перед продакшеном.

Частые проблемы и когда это может не сработать

  • Порт 9092 занят другим процессом — измените listeners или освободите порт.
  • Неверные пути или права доступа — проверьте владельца /opt/kafka и права на каталоги конфигурации и логи.
  • Конфликт версий Java — используйте рекомендованную версию для вашей версии Kafka.
  • В многомашинной топологии некорректные listeners/advertised.listeners приведут к невозможности подключения клиентов.

Набор тестов и критерии приёмки

Критерии приёмки для базового развёртывания:

  • Kafka и Zookeeper запущены и активны (systemctl status).
  • Удачное создание топика и его отображение в списке.
  • Продюсер может отправить 100 сообщений, и консюмер получит все 100.
  • Kafka Connect корректно читает файл и данные появляются в соответствующем топике.

Тесты (примеры):

  • Тест доступности: ping/ss/journalctl, проверки процессов.
  • Функциональный тест: скрипт, который создаёт 100 сообщений и проверяет, что все доставлены.

Короткий глоссарий

  • Топик — имя потока сообщений.
  • Партиция — последовательный лог в топике.
  • Продюсер — компонент, пишущий события в Kafka.
  • Консюмер — компонент, читающий события из Kafka.
  • Zookeeper — координационный сервис (в классическом режиме).

Заключение

В этом руководстве вы:

  • Установили Java и Kafka на Rocky Linux.
  • Настроили Kafka и Zookeeper как systemd‑сервисы.
  • Создали топик, отправляли и читали сообщения через консольные утилиты.
  • Настроили Kafka Connect для чтения из файла и увидели поток данных в реальном времени.

Дальшие шаги: настроить безопасность (SASL/SSL), интегрировать мониторинг и протестировать в многоброкерной конфигурации с репликацией и автоматическим восстановлением.

Краткий чек: убедитесь, что логи читаемы, сервисы включены, и базовые тесты проходят — после этого можно двигаться к продакшен‑оптимизациям.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро