Встановлення кластера Apache Kafka на Debian 12
08:50, 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 Service 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 забезпечує надійну, децентралізовану передачу повідомлень та масштабовані конвеєри даних, що є необхідним для сучасних додатків, які працюють на основі даних.