Установка Apache Kafka и CMAK на CentOS 8

Введение
Apache Kafka — это свободная платформа потоковой передачи данных для аналитики, интеграции данных и критичных приложений. По сравнению с традиционными брокерами сообщений (например, ActiveMQ или RabbitMQ) Kafka даёт высокую пропускную способность, встроенную партиционирование, репликацию и отказоустойчивость. CMAK (Cluster Manager, ранее Kafka Manager) — инструмент для управления и просмотра состояния кластеров Kafka (топики, потребители, смещения, брокеры, распределение реплик и партиций).
В этом руководстве показано, как развернуть Kafka с CMAK на CentOS 8 и провести базовую верификацию работоспособности.
Что будет сделано
- Установим Java (OpenJDK 11).
- Скачаем и распакуем Kafka.
- Создадим systemd-сервисы для Zookeeper и Kafka.
- Установим и запустим CMAK.
- Настроим SELinux и firewall.
- Добавим тестовый топик и проверим в CMAK.
Важно: руководство ориентировано на одиночный тестовый узел (single-node). Для production-кластера потребуются дополнительные шаги: репликация, мониторинг, резервирование и безопасность.
Требования
- Сервер с CentOS 8
- Доступ root или эквивалентные права sudo
- Подключение к интернету для загрузки пакетов и артефактов
Шаг 1. Обновление системы и зависимости
Рекомендуется обновить систему перед началом:
dnf update -yУстановите утилиты git и unzip:
dnf install git unzip -yШаг 2. Установка Java
Kafka требует Java. Установите OpenJDK 11:
dnf install java-11-openjdk-devel -yПроверьте версию Java:
java --versionОжидаемый пример вывода (может отличаться по билду и дате):
openjdk 11.0.8 2020-07-14
OpenJDK Runtime Environment (build 11.0.8+10-post-CentOS-0centos8)
OpenJDK 64-Bit Server VM (build 11.0.8+10-post-CentOS-0centos8, mixed mode, sharing)Шаг 3. Скачивание и распаковка Kafka
Создайте директорию для Kafka и загрузите релиз:
mkdir /usr/local/kafka-server
cd /usr/local/kafka-server
wget https://downloads.apache.org/kafka/2.6.0/kafka_2.13-2.6.0.tgzРаспакуйте архив и уберите уровень вложенности:
tar -xvzf kafka_2.13-2.6.0.tgz --strip 1Примечание: при установке в production рекомендуется хранить Kafka в менеджируемом каталоге (например /opt/kafka) и настроить отдельные каталоги для логов и данных.
Шаг 4. Systemd для Zookeeper и Kafka
Создайте systemd‑юнит для Zookeeper:
nano /etc/systemd/system/zookeeper.serviceДобавьте:
[Unit]
Description=Apache Zookeeper Server
Requires=network.target remote-fs.target
After=network.target remote-fs.target
[Service]
Type=simple
ExecStart=/usr/local/kafka-server/bin/zookeeper-server-start.sh /usr/local/kafka-server/config/zookeeper.properties
ExecStop=/usr/local/kafka-server/bin/zookeeper-server-stop.sh
Restart=on-abnormal
[Install]
WantedBy=multi-user.targetСохраните и закройте файл.
Создайте systemd‑юнит для Kafka:
nano /etc/systemd/system/kafka.serviceДобавьте (обратите внимание на JAVA_HOME):
[Unit]
Description=Apache Kafka Server
Documentation=http://kafka.apache.org/documentation.html
Requires=zookeeper.service
After=zookeeper.service
[Service]
Type=simple
Environment="JAVA_HOME=/usr/lib/jvm/jre-11-openjdk"
ExecStart=/usr/local/kafka-server/bin/kafka-server-start.sh /usr/local/kafka-server/config/server.properties
ExecStop=/usr/local/kafka-server/bin/kafka-server-stop.sh
Restart=on-abnormal
[Install]
WantedBy=multi-user.targetСохраните и выполните перезагрузку конфигурации systemd:
systemctl daemon-reloadЗапустите и включите службы:
systemctl enable --now zookeeper
systemctl enable --now kafka
systemctl start zookeeper
systemctl start kafkaПроверка статуса:
systemctl status zookeeper kafkaПример вывода покажет, что оба сервиса активны (active (running)). Если есть ошибки — смотрите журнал:
journalctl -u zookeeper -f
journalctl -u kafka -fШаг 5. Установка и конфигурация CMAK
CMAK позволяет просматривать состояние кластера через веб‑интерфейс.
Скачайте исходники CMAK и соберите дистрибутив:
cd /root
git clone https://github.com/yahoo/CMAK.gitОтредактируйте конфигурацию и укажите хосты Zookeeper:
nano ~/CMAK/conf/application.confИзмените строку на:
cmak.zkhosts="localhost:2181"Соберите дистрибутив:
cd ~/CMAK/
./sbt clean distПосле успешной сборки пакет появится в /root/CMAK/target/universal. Распакуйте zip:
cd ~/CMAK/target/universal
unzip cmak-3.0.0.5.zipШаг 6. Запуск CMAK
Запустите CMAK из распакованной папки:
cd ~/CMAK/target/universal/cmak-3.0.0.5
bin/cmakПо умолчанию CMAK слушает на порту 9000.
Важно: в продакшне рекомендуется запускать CMAK позади reverse proxy (nginx) и настроить systemd‑юнит для автоматического запуска.
Шаг 7. Настройка SELinux и firewall
Если SELinux включён (по умолчанию в CentOS 8), выполните:
chcon -t httpd_sys_rw_content_t ~/CMAK/target/universal/cmak-3.0.0.5 -R
setsebool -P httpd_can_network_connect 1Откройте порт 9000 в firewalld:
firewall-cmd --permanent --zone public --add-port 9000/tcp
firewall-cmd --reloadВажно: если вы используете reverse proxy (nginx) или балансировщик, настройте правила безопасности соответствующим образом.
Шаг 8. Доступ к CMAK и добавление кластера
Откройте в браузере: http://your-server-ip:9000. Вы увидите главный экран CMAK и список доступных кластеров.

Если кластеры отсутствуют, добавьте новый: в меню выберите Cluster → Add Cluster и заполните форму (имя кластера, zookeeper hosts и т. п.).


После удачного добавления вы увидите подтверждение:

Шаг 9. Создание тестового топика и проверка в CMAK
Создайте топик на сервере Kafka:
cd /usr/local/kafka-server
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic MyNewTopicВернитесь в CMAK, откройте раздел Topic — вы увидите созданный топик.

Откройте информацию по топику для просмотра партиций, реплик и операций:


Проверка работоспособности: быстрый тест продьюсер/консьюмер
На том же сервере можно запустить продьюсер и консьюмер для проверки доставки сообщений:
# Продьюсер
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic MyNewTopic
# Введите несколько строк и нажмите Enter для отправки
# В другом терминале — консьюмер
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic MyNewTopic --from-beginningЕсли сообщения видны в консьюмере, кластер работает и CMAK корректно отображает топик.
Дополнительно: рекомендации по безопасности и эксплуатации
- В production используйте отдельные узлы для Kafka и Zookeeper, настройте replication.factor > 1 и min.insync.replicas.
- Шифруйте трафик между клиентами и брокерами (SSL/TLS) и включайте аутентификацию (SASL) для контроля доступа.
- Включите авторизацию (ACL) для ограничения операций на топиках и группах.
- Разверните мониторинг (Prometheus + Grafana) и оповещения по SLI/SLO для задержки и потребления.
- Храните данные журналов и логи в отдельном разделе/диске с резервным копированием.
Полезные сниппеты и чек‑лист
Сниппеты команд для администрирования:
# Статус сервисов
systemctl status zookeeper kafka
# Журналы
journalctl -u kafka -f
journalctl -u zookeeper -f
# Список топиков
bin/kafka-topics.sh --list --zookeeper localhost:2181
# Удаление топика (внимание!)
bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic MyNewTopicЧек‑лист для роли администратора:
- Установил Java и проверил версию
- Скачал и распаковал Kafka
- Создал и включил systemd для Zookeeper и Kafka
- Собрал и запустил CMAK
- Открыл порт 9000 и настроил SELinux
- Создал тестовый топик и проверил продьюсер/консьюмер
Чек‑лист для разработчика/интегратора:
- Подключился к брокеру по bootstrap-server
- Протестировал продьюсера и консьюмера
- Проверил видимость топиков и смещений в CMAK
- Оценил задержки и производительность на тестовых нагрузках
Советы по отладке и типичные проблемы
- Если CMAK недоступен на 9000: проверьте, запущен ли процесс bin/cmak, открыт ли порт в firewall и разрешён ли доступ SELinux.
- Если Kafka не стартует: проверьте JAVA_HOME в systemd‑юните и журналы kafka в journalctl.
- Проблемы с Zookeeper: убедитесь, что zookeeper.properties корректен и порт 2181 свободен.
Альтернативные подходы
- Вместо CMAK можно использовать коммерческие решения и интерфейсы (например, Confluent Control Center) или open-source инструменты (Kafdrop, AKHQ) для администрирования кластеров и просмотра сообщений.
- Для production часто используют systemd‑юнит с ограничениями ресурсов, отдельного пользователя для запуска и управление через CP/CM/Ansible.
Когда этот подход не подойдёт
- Для крупных production‑кластеров на нескольких узлах требуется отдельное планирование: HA Zookeeper ensemble, распределённые брокеры, мониторинг и резервное копирование. Руководство подходит для тестовой или небольшой среды.
Факт‑бокс: ключевые порты и значения
- Порт Zookeeper по умолчанию: 2181
- Порт Kafka по умолчанию: 9092
- Порт CMAK по умолчанию: 9000
- Рекомендуемая Java: OpenJDK 11+
Критерии приёмки
- Сервисы zookeeper и kafka работают (systemctl active)
- CMAK доступен по http://
:9000 - В CMAK виден созданный топик
- Простой продьюсер/консьюмер успешно отправляют и получают сообщения
Заключение
Поздравляю — вы успешно установили Apache Kafka и CMAK на CentOS 8. Дальше рекомендуется:
- Перенести CMAK под systemd и reverse proxy (nginx) для надёжности
- Настроить SSL/SASL и ACL для безопасности
- Развернуть мониторинг и резервное копирование
Если нужны примеры systemd‑юнита для CMAK, настройка TLS/SASL или помощь в масштабировании кластера — задайте дополнительные вопросы.
Короткое резюме:
- Установили Java, Kafka и Zookeeper
- Настроили systemd‑сервисы
- Собрали и запустили CMAK
- Создали топик и проверили работу
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента