Установка кластера Apache Kafka на Debian 12
08:53, 30.07.2026
Краткое руководство: настройка Apache Kafka в Debian 12
Apache Kafka — это мощная распределённая платформа потоковой передачи событий, разработанная для распределения сообщений с высокой пропускной способностью и низкой задержкой.
Настройка Kafka в Debian 12 требует тщательной конфигурации для обеспечения надёжной и масштабируемой потоковой передачи данных.
В этом руководстве представлено пошаговое описание установки и настройки кластера Apache Kafka в Debian 12 с выделением важнейших этапов и параметров конфигурации.
Основные принципы и элементы архитектуры Kafka
Архитектура Kafka основана на нескольких ключевых компонентах:
- Брокеры: Kafka работает как кластер, состоящий из одного или нескольких серверов, называемых брокерами, которые управляют хранением и распределением сообщений.
- Темы: именованные категории, в которые отправляются записи и из которых они считываются.
- Производители: приложения, отправляющие записи в темы Kafka.
- Потребители: приложения, считывающие записи из тем.
- Разделы: темы Kafka, разделённые на части для более эффективного распределения между несколькими брокерами.
- Репликация: каждый раздел реплицируется, причём один из них отвечает за запросы на чтение и запись, а остальные — за репликацию данных.
- Потоки: Библиотека потоковой обработки для приложений и микросервисов, работающих в режиме реального времени.
- ZooKeeper (опционально): Ранее использовался для управления метаданными, теперь заменён режимом Kafka Raft (KRaft) для более эффективного самоуправления.
Установка Apache Kafka в Debian 12
Установка Java 8+ в Debian 12
Для работы Apache Kafka требуется Java 8 или более поздней версии. Выполните следующие шаги для установки Java:
- Обновите индекс пакетов:
sudo apt update - Установите пакет OpenJDK:
sudo apt install -y openjdk-11-jdk - Проверьте установку Java:
java -version
Загрузите последнюю версию Kafka
- Перейдите по ссылке страницу загрузки Apache Kafka, чтобы скачать последнюю версию.
- Загрузите Kafka с помощью wget или curl:
wget https://downloads.apache.org/kafka/3.x.x/kafka_2.13-3.x.x.tgz
Распакуйте бинарный архив Kafka
Распакуйте загруженный архив:
tar -xzf kafka_2.13-3.x.x.tgz
Переместите извлечённую папку в /opt:
sudo mv kafka_2.13-3.x.x /opt/kafka
Запуск Kafka в режиме Kafka Raft (KRaft)
Режим KRaft устраняет необходимость в использовании ZooKeeper, упрощая управление кластером Kafka. Файлы конфигурации KRaft находятся в /opt/kafka/config/kraft/.
Настройте KRaft для кластера Kafka
- Создайте новый файл конфигурации или отредактируйте существующий файл server.properties:
sudo nano /opt/kafka/config/kraft/server.properties - Добавьте или измените следующие свойства:
process.roles=broker,controller node.id=1 controller.quorum.voters=1@<broker-ip>:9093 listeners=PLAINTEXT://<broker-ip>:9092,CONTROLLER://<broker-ip>:9093 log.dirs=/var/lib/kafka/data
Изменение каталога журналов
Убедитесь, что журналы Kafka хранятся в каталоге с достаточным объёмом дискового пространства; по умолчанию журналы хранятся в “/tmp/kraft-combined-logs” каталоге.
Чтобы обеспечить сохранение журналов в каталоге с достаточным объёмом свободного места, при необходимости обновите log.dirs в файле server.properties:
log.dirs=/new/path/to/kafka-logs
Сгенерируйте идентификатор кластера Kafka
Идентификатор кластера — это то, что идентифицирует кластер в режиме KRaft.
- Сгенерируйте идентификатор кластера:
/opt/kafka/bin/kafka-storage.sh random-uuid - Сохраните сгенерированный идентификатор и отформатируйте каталог журналов:
/opt/kafka/bin/kafka-storage.sh format -t <cluster-id> -c /opt/kafka/config/kraft/server.properties
Преобразование каталога журналов Kafka в формат KRaft
Используя идентификатор кластера, сгенерированный на предыдущем шаге, мы можем отформатировать каталоги журналов. Это делается для каждого брокера Kafka, чтобы у него был каталог для сохранения своего журнала (если в кластере несколько узлов).
- Используя идентификатор кластера и следующую команду, отформатируйте каталог журналов:
/opt/kafka/bin/kafka-storage.sh format -t <uuid> -c /opt/kafka/config/kraft/server.properties - Замените UUID на URaeRekUQAyy8wLMNX2Q-w, чтобы команда выглядела следующим образом:
/opt/kafka/bin/kafka-storage.sh format -t URaeRekUQAyy8wLMNX2Q-w \ -c /opt/kafka/config/kraft/server.properties
В качестве альтернативы можно использовать следующую команду:
/opt/kafka/bin/kafka-storage.sh format \ -t /opt/kafka/bin/kafka-storage.sh random-uuid \ -c /opt/kafka/config/kraft/server.properties
Настройка размера кучи Kafka
Для обеспечения стабильной производительности Kafka можно соответствующим образом настроить размер кучи; размер кучи — это, по сути, объем памяти, принадлежащий виртуальной машине Java (JVM), на которой работает Kafka. Необходимо убедиться, что размер кучи достаточен для обработки объема трафика, который предстоит обработать вашему серверу.
Одним из параметров, использующих память и влияющих на то, как долго Kafka хранит данные, является log.retention.hours, который по умолчанию установлен на 7 дней. Также можно использовать другие параметры, такие как log.retention.minutes, log.retention.ms, или log.retention.bytes, также могут использоваться; эти параметры можно изменить в файле /opt/kafka/config/kraft/server.properties.
Например, чтобы сохранять данные в течение 8 часов, используйте следующую строку:
log.retention.hours=8
Затем сохраните и закройте файл.
Запуск брокера Kafka
Запуск брокера Kafka в фоновом режиме
Запустите брокер Kafka вручную:
/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/kraft/server.properties
Запустите брокер Kafka в качестве службы systemd
- Создайте файл службы kafka.service:
sudo nano /etc/systemd/system/kafka.service
- Добавьте следующую конфигурацию:
[Unit] Description=Служба Apache Kafka After=network.target
[Service] Type=simple ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/kraft/server.properties Restart=on-failure User=kafka
[Install] WantedBy=multi-user.target
- Перезагрузите systemd и запустите Kafka:
sudo systemctl daemon-reload sudo systemctl start kafka sudo systemctl enable kafka
Создание тем, отправка и получение сообщений в Kafka
При правильной настройке ваши производители могут публиковать сообщения в темы Kafka, а потребители — подписываться на несколько тем и считывать записи из них.
Создание темы вручную
Чтобы создать тестовую тему на сервере/брокере Kafka, используйте:
/opt/kafka/bin/kafka-topics.sh --create --topic test-topic --bootstrap-server <broker-ip>:9092 --partitions 1 --replication-factor 1
Просмотр доступных тем Kafka
Чтобы просмотреть доступные темы Kafka, используйте:
/opt/kafka/bin/kafka-topics.sh --list --bootstrap-server <broker-ip>:9092
Запись (создание) и чтение (потребление) сообщений в темах Kafka
- Чтобы создать сообщение, используйте следующую команду:
/opt/kafka/bin/kafka-console-producer.sh --bootstrap-server localhost:9092 \ --topic kafka-topic-test
После запуска вы увидите следующий запрос: >
- Введите сообщение и нажмите ENTER:
>Hello Kafka, this is my message
- Чтобы прочитать сообщение, используйте:
/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic kafka-topic-test
Удаление тем Kafka
Чтобы удалить одну тему, используйте:
/opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --delete --topic <имя-темы>
Чтобы удалить все темы, используйте:
for i in /opt/kafka/bin/kafka-topics.sh --list --bootstrap-server localhost:9092;do /opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --delete --topic $i; done
Настройка кластера Kafka из трёх узлов
Настройте несколько брокеров, создав отдельные файлы server.properties для каждого узла с уникальными значениями node.id, listeners и log. Настройте параметр controller.quorum.voters так, чтобы он включал все узлы.
Управление кластером Kafka через пользовательский интерфейс
Такие инструменты, как Kafka Manager, Conduktor и Lenses.io, предоставляют графические интерфейсы для мониторинга и управления кластерами Kafka. По нашему опыту, эти инструменты упрощают администрирование.
Настройка Apache Kafka в Debian 12 с использованием KRaft обеспечивает надёжную децентрализованную потоковую передачу сообщений и масштабируемые конвейеры данных, что необходимо для современных приложений, ориентированных на данные.