Перейти к основному контенту

Инструкция по ручному развертыванию Kafka для Wisla

В данной инструкции описано как установить Kafka в ручном режиме без использования скрипта предварительной настройки системы.

Этап 1. Переход под пользователя wisla:

На первом этапе  необходимо перейти под пользователя Wisla используя команду:

sudo su - wisla
Если пользователь wisla еще не существует в системе его необходимо создать используя следующие команды пошагово.

1.Команда создания пользователя:

sudo useradd -d /home/wisla -m -s /bin/bash wisla

2.Команда установки пароля:

sudo passwd wisla

3.Добавление пользователя в файлы sudoers:

echo "wisla    ALL=(ALL:ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/wisla

4.Настройка системных лимитов для пользователя wisla:

# Создаем файл лимитов
cat > /etc/security/limits.d/wisla << 'EOF'
wisla   soft      nofile  32768
wisla   hard     nofile  32768
wisla   soft      nproc   32768
wisla   hard     nproc   32768
EOF

5. Добавляем в PAM (если нет):

echo "session required pam_limits.so" >> /etc/pam.d/common-session

 

Этап 2. Подготовка каталога kafka.

После перехода под пользователя wisla вам необходимо создать каталог где будет располагаться портативная Java и  бинарный дистрибутив Kafka использую следующие команды:


1.Создание директории в /opt/:

sudo mkdir -p /opt/kafka

 2.Проверить кому принадлежит каталог kafka:

ls -l /opt/

3.Сменить пользователя для каталога kafka если принадлежит не wisla используя следующую команду:

sudo chown wisla:wisla /opt/kafka

Этап 3. Копирование архива Java:

После создания каталога необходимо подготовить портативную Java для распаковки, предполагаем, что архив Java уже скачан и находится в доступном месте.

1.Скопируем его в домашнюю директорию wisla используя следующую команду:

cp OpenJDK17U-jdk_x64_linux_hotspot_17.0.17_10.tar.gz /home/wisla/

2.Переходим в каталог kafka используя следующую команду:

cd /opt/kafka

3.Распаковка Java:

tar -xzf ~/OpenJDK17U-jdk_x64_linux_hotspot_17.0.17_10.tar.gz

4.Проверяем результат распаковки Java:

ls -la /opt/kafka/

5.Устанавливаем переменную окружения:

export JAVA_HOME="/opt/kafka/jdk-17.0.17+10"
export PATH="$JAVA_HOME/bin:$PATH"

6.Проверяем версию Java:

java -version

Этап 4. Копирование архива Kafka:

После  подготовки портативной Java, необходимо подготовить бинарный дистрибутив Kafka, предполагаем, что  Kafka уже скачана и находится в доступном месте.

1.Копируем архив Kafka в домашнюю директорию:

cp kafka_2.13-4.1.1.tgz /opt/kafka/

2.Переходим в каталог kafka используя следующую команду:

cd /opt/kafka

3.Распаковываем Kafka в /opt/kafka:

tar -xzf ~/kafka_2.13-4.1.1.tgz --strip-components=1 -C /opt/kafka

4.Проверяем результат распаковки Kafka:

ls -la /opt/kafka/bin/kafka-server-start.sh

5.Создаем дополнительные рабочие директории для Kafka:

mkdir -p /opt/kafka/logs
mkdir -p /opt/kafka/config
mkdir -p /opt/kafka/config/kraft

sudo mkdir -p /var/lib/kafka
sudo chown wisla:wisla /var/lib/kafka

Этап 5. Конфигурация Kafka:
Теперь нам необходимо сконфигурировать Kafka.

1.Для начала определим IP адрес который будем использовать для конфигурации Kafka:

IP_ADDRESS=$(ip route get 1 2>/dev/null | awk '{print $7; exit}')

2.Генерируем Cluster ID:

CLUSTER_ID=$(/opt/kafka/bin/kafka-storage.sh random-uuid)
echo "Сгенерированный Cluster ID: $CLUSTER_ID"

ЗАПИШИТЕ ЭТОТ ID - он понадобится позже! (Пример моего ID : IdLVHil7RvCVrR9U2DEvKQ)

3.Создание конфигурационного файла: 

sudo cat > /opt/kafka/config/kraft/server.properties << EOF
process.roles=broker,controller
node.id=1
controller.quorum.voters=1@${IP_ADDRESS}:9093
listeners=PLAINTEXT://${IP_ADDRESS}:9092,CONTROLLER://${IP_ADDRESS}:9093
advertised.listeners=PLAINTEXT://${IP_ADDRESS}:9092
log.dirs=/var/lib/kafka
num.partitions=1
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
controller.listener.names=CONTROLLER
sasl.mechanism.controller.protocol=PLAINTEXT
auto.create.topics.enable=true
EOF

4.Проверяем созданный файл:

cat /opt/kafka/config/kraft/server.properties

5.Форматирование хранилища

if [ ! -f /var/lib/kafka/meta.properties ]; then
    echo "Инициализируем хранилище Kafka..."
    /opt/kafka/bin/kafka-storage.sh format \
        -t $CLUSTER_ID \
        -c /opt/kafka/config/kraft/server.properties
    
    echo "Хранилище инициализировано с Cluster ID: $CLUSTER_ID"
else
    echo "Хранилище уже инициализировано"
    cat /var/lib/kafka/meta.properties
fi

6.Создание файла службы:

Создаем файл службы

sudo cat > /etc/systemd/system/kafka.service << EOF
[Unit]
Description=Apache Kafka Service (KRaft mode)
After=network.target

[Service]
Type=simple
User=wisla
Group=wisla
WorkingDirectory=/opt/kafka
Environment="JAVA_HOME=/opt/kafka/jdk-17.0.17+10"
Environment="PATH=/opt/kafka/jdk-17.0.17+10/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
ExecStartPre=/bin/bash -c "if [ ! -f /var/lib/kafka/meta.properties ]; then /opt/kafka/bin/kafka-storage.sh format -t $CLUSTER_ID -c /opt/kafka/config/kraft/server.properties; fi"
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/kraft/server.properties
SuccessExitStatus=143
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

Создание скрипта запуска:

sudo cat > /usr/local/bin/kafka-start << 'EOF'
#!/bin/bash
KAFKA_DIR="/opt/kafka"
KAFKA_LOG_DIR="/var/lib/kafka"
CLUSTER_ID="$CLUSTER_ID"  # ВСТАВЬТЕ ВАШ Cluster ID!

if [ ! -f $KAFKA_LOG_DIR/meta.properties ]; then
    $KAFKA_DIR/bin/kafka-storage.sh format -t $CLUSTER_ID -c $KAFKA_DIR/config/kraft/server.properties
fi
systemctl start kafka
echo "Kafka запущен в режиме KRaft"
EOF

Создаем скрипт остановки:

sudo cat > /usr/local/bin/kafka-stop << 'EOF'
#!/bin/bash
systemctl stop kafka
echo "Kafka остановлен"
EOF

Создаем скрипт статуса:

sudo cat > /usr/local/bin/kafka-status << 'EOF'
#!/bin/bash
echo "Kafka статус:"
systemctl status kafka --no-pager
EOF

Создаем скрипт сброса:

sudo cat > /usr/local/bin/kafka-reset << 'EOF'
#!/bin/bash
echo "Сброс Kafka хранилища..."
systemctl stop kafka
KAFKA_DIR="/opt/kafka"
KAFKA_LOG_DIR="/var/lib/kafka"
CLUSTER_ID="$CLUSTER_ID"  # ВСТАВЬТЕ ВАШ Cluster ID!

rm -rf $KAFKA_LOG_DIR/*
$KAFKA_DIR/bin/kafka-storage.sh format -t $CLUSTER_ID -c $KAFKA_DIR/config/kraft/server.properties
echo "Хранилище сброшено. Запустите: systemctl start kafka"
EOF

Выдача прав на исполнение:

chmod +x /usr/local/bin/kafka-*

Этап 6. Запуск и проверка Kafka:

Обновляем systemd:

sudo systemctl daemon-reload

Включаем автозагрузку:

sudo systemctl enable kafka

Запускаем Kafka

sudo systemctl start kafka

Проверяем статус

sudo systemctl status kafka

Смотрим логи:

sudo journalctl -u kafka -f

Проверяем, что порты открыты

netstat -tlnp | grep -E "9092|9093"

Проверяем метаданные

ls -la /var/lib/kafka/

Установка завершена! Kafka готова к использованию.