Установка и базовое использование Apache Kafka на Rocky Linux
Kafka — распределённая платформа потоковой передачи данных. В этом руководстве показано, как установить Java, загрузить и распаковать Kafka в /opt/kafka, создать systemd‑сервисы для Zookeeper и Kafka, запустить продюсер и консюмер через консоль и настроить Kafka Connect для чтения из файла. В конце есть советы по отладке, безопасности и контрольный список для администраторов.
Важно: в этой инструкции используется классическая схема с Zookeeper. Новые релизы Kafka могут поддерживать режим без Zookeeper (KRaft) — для продакшен‑развёртываний уточняйте требования вашей версии 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:
java -versionОжидаемый результат — строка с Java OpenJDK 11.
Загрузка и подготовка бинарного пакета Kafka
Создадим системного пользователя для Kafka и установим Kafka в /opt/kafka.
- Создаём пользователя kafka (без возможности входа):
sudo useradd -r -d /opt/kafka -s /usr/sbin/nologin kafka- Переходим в /opt и загружаем архив Kafka:
cd /opt
sudo curl -fsSLo kafka.tgz https://downloads.apache.org/kafka/3.3.1/kafka_2.12-3.3.1.tgz- Распаковываем и переименовываем каталог:
tar -xzf kafka.tgz
sudo mv kafka_2.12-3.3.1 /opt/kafka- Меняем владельца каталога на пользователя kafka:
sudo chown -R kafka:kafka /opt/kafka- Создаём каталог для логов и редактируем конфигурацию 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 и Zookeeper как systemd‑сервисы
Kafka в традиционной конфигурации использует Zookeeper. Для надёжного управления процессами создадим systemd‑юниты для Zookeeper и Kafka. Оба процесса будут запускаться от имени пользователя kafka.
- Создайте файл /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- Создайте файл /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- Перезагрузите конфигурацию systemd и запустите сервисы:
sudo systemctl daemon-reload
sudo systemctl start zookeeper
sudo systemctl start kafka
sudo systemctl enable zookeeper
sudo systemctl enable kafka- Проверьте статус:
sudo systemctl status zookeeper
sudo systemctl status kafkaВы должны увидеть, что обе службы запущены и включены для автозапуска.



Важно: логи запуска Kafka будут в /opt/kafka/logs/start-kafka.log — проверьте их при проблемах.
Базовые операции: топики, продюсер и консюмер
Все утилиты Kafka находятся в /opt/kafka/bin. Ниже — стандартный сценарий создания топика, отправки сообщений и их чтения.
- Создание топика TestTopic (1 партиция, фактор репликации 1):
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- Запуск консольного продюсера (ввод сообщений вручную):
sudo -u kafka /opt/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TestTopicНабирайте строки и нажимайте Enter — каждое сообщение отправляется в топик.
- В другом терминале запустите консольного консюмера, чтобы читать с начала:
sudo -u kafka /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic TestTopic --from-beginningСообщения из продюсера будут отображаться у консюмера в реальном времени.

- Очистка тестовой среды — удаление топика:
sudo -u kafka /opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --delete --topic TestTopicKafka Connect — поток из файла (Connect File Connector)
Kafka Connect — фреймворк для интеграции внешних систем с Kafka. В простейшем случае можно использовать файловый коннектор, чтобы читать строки из файла и автоматически отправлять их в топик.
- В файле connect-standalone.properties укажите путь к плагинам (libs):
sudo -u kafka nano /opt/kafka/config/connect-standalone.propertiesИзмените:
plugin.path=/opt/kafka/libs- Создайте файл-источник test.txt:
sudo -u kafka echo -e "Test message from file\nTest using Kafka connect from file" > /opt/kafka/test.txt- Запустите 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- В другом терминале запустите консольного консюмера для топика connect-test:
sudo -u kafka /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic connect-test --from-beginning- Добавьте новую строку в файл test.txt — Connect обнаружит изменение и отправит новую запись в Kafka:
sudo -u kafka echo "Another test message from file test.txt" >> /opt/kafka/test.txt
Отладка и проверка состояния
Полезные команды и места для проверки при возникновении проблем:
- Просмотр последних строк логов 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% доступности брокера — задаётся отдельно).
- План восстановления и бэкапа согласован.
Мини‑методология развертывания (шаги)
- Подготовить ОС: обновление пакетов, сетевые настройки, создание пользователя kafka.
- Установить Java и проверить версию.
- Загрузить и распаковать Kafka в /opt/kafka.
- Настроить server.properties (log.dirs, listeners, broker.id).
- Создать systemd‑юниты и запустить Zookeeper и Kafka.
- Выполнить базовые тесты: создание топика, отправка/чтение сообщений.
- Настроить мониторинг, безопасность и резервирование перед продакшеном.
Частые проблемы и когда это может не сработать
- Порт 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), интегрировать мониторинг и протестировать в многоброкерной конфигурации с репликацией и автоматическим восстановлением.
Краткий чек: убедитесь, что логи читаемы, сервисы включены, и базовые тесты проходят — после этого можно двигаться к продакшен‑оптимизациям.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента