DEV Community

Cover image for How to install Apache Kafka on Ubuntu with KRaft Mode (without Zookeeper): A Step-by-Step Guide
Hải Phạm Ngọc
Hải Phạm Ngọc

Posted on • Updated on

How to install Apache Kafka on Ubuntu with KRaft Mode (without Zookeeper): A Step-by-Step Guide

1. Cài đặt Java Development Kit (JDK)

sudo apt install openjdk-11-jdk
Enter fullscreen mode Exit fullscreen mode

Xác minh việc cài đặt bằng cách kiểm tra phiên bản Java:

java -version
Enter fullscreen mode Exit fullscreen mode

2. Tạo Kafka User

sudo adduser kafka
Enter fullscreen mode Exit fullscreen mode

Bạn sẽ được yêu cầu đặt mật khẩu cho người dùng mới. Sau khi đặt mật khẩu, bạn sẽ được nhắc nhập thông tin bổ sung về người dùng. Bạn có thể nhập chi tiết các thông tin này hoặc chỉ cần nhấn Enter để chấp nhận các giá trị mặc định.
Nhập thông tin cho user kafka
Tiếp theo, bạn cần cấp đặc quyền sudo cho user kafka:

sudo usermod -aG sudo kafka
Enter fullscreen mode Exit fullscreen mode

3. Chuyển sang Kafka User đã tạo

Các bước tiếp theo cần được thực hiện trong user kafka. Do đó, bạn cần chuyển sang user kafka đã tạo trước đó bằng lệnh sau:

su - kafka
Enter fullscreen mode Exit fullscreen mode

4. Cài đặt Apache Kafka

Bạn có thể sử dụng lệnh wget để tải xuống phiên bản ổn định mới nhất của Kafka:

wget https://downloads.apache.org/kafka/3.8.0/kafka_2.13-3.8.0.tgz
Enter fullscreen mode Exit fullscreen mode

Sau khi quá trình tải xuống hoàn tất, bạn cần giải nén nó bằng lệnh sau:

tar -xzvf kafka_2.13-3.8.0.tgz 
Enter fullscreen mode Exit fullscreen mode

Di chuyển thư mục kafka đã giải nén sang /opt/apache-kafka để truy cập và quản lý dễ dàng hơn.

sudo mv kafka_2.13-3.8.0 /opt/apache-kafka
sudo chown -R kafka:kafka /opt/apache-kafka
Enter fullscreen mode Exit fullscreen mode

5. Cấu hình biến môi trường PATH

Tạo tệp /etc/profile.d/kafka.sh

sudo nano /etc/profile.d/kafka.sh
Enter fullscreen mode Exit fullscreen mode

Thêm các dòng bên dưới vào tệp:

#!/bin/sh

KAFKA_HOME="/opt/apache-kafka"
PATH="${PATH}:${KAFKA_HOME}/bin"

export KAFKA_HOME
export PATH
Enter fullscreen mode Exit fullscreen mode

Nhấn Ctrl + X, sau đó nhấn Y và nhấn Enter để lưu các thay đổi và thoát.

6. Tạo ID cụm và định dạng bộ lưu trữ bằng kafka-storage.sh

Tạo ID mới cho cụm của bạn

/opt/apache-kafka/bin/kafka-storage.sh random-uuid
Enter fullscreen mode Exit fullscreen mode

Output trả về một UUID, ví dụ: 9OYVwS2kT0KnuFU46oCFfQ
Tiếp theo, bạn cần định dạng thư mục lưu trữ (thay thế bằng UUID thu được ở trên), ví dụ:

/opt/apache-kafka/bin/kafka-storage.sh format -t 9OYVwS2kT0KnuFU46oCFfQ -c /opt/apache-kafka/config/kraft/server.properties
Enter fullscreen mode Exit fullscreen mode

Điều này sẽ định dạng thư mục trong log.dirs trong tập tin config/kraft/server.properties (theo mặc định là /tmp/kraft-combined-logs)

7. Tạo systemd service file cho Kafka

sudo nano /lib/systemd/system/kafka-server.service
Enter fullscreen mode Exit fullscreen mode
[Unit]
Description=Apache Kafka Service with KRaft Mode
Requires=network.target
After=network.target

[Service]
Type=simple
User=kafka
Group=kafka
ExecStart=/opt/apache-kafka/bin/kafka-server-start.sh /opt/apache-kafka/config/kraft/server.properties
ExecStop=/opt/apache-kafka/bin/kafka-server-stop.sh
Restart=on-abnormal
Environment="KAFKA_HEAP_OPTS=-Xmx512m -Xms512m"

[Install]
WantedBy=multi-user.target
Enter fullscreen mode Exit fullscreen mode
sudo ln -s /lib/systemd/system/kafka-server.service /etc/systemd/system/kafka-server.service
Enter fullscreen mode Exit fullscreen mode

Yêu cầu systemd tải lại cấu hình của các dịch vụ

sudo systemctl daemon-reload
Enter fullscreen mode Exit fullscreen mode

8. Cấu hình hệ thống khởi động tự động dịch vụ cho Kafka Server (Optional)

sudo systemctl enable kafka-server
Enter fullscreen mode Exit fullscreen mode

9. Khởi động Kafka Services và Verify Status

sudo systemctl start kafka-server
Enter fullscreen mode Exit fullscreen mode
sudo systemctl status kafka-server
Enter fullscreen mode Exit fullscreen mode
● kafka-server.service - Apache Kafka Service with KRaft Mode
     Loaded: loaded (/lib/systemd/system/kafka-server.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2024-09-02 03:32:27 UTC; 10min ago
   Main PID: 4531 (java)
      Tasks: 95 (limit: 3530)
     Memory: 386.1M
     CGroup: /system.slice/kafka-server.service
             └─4531 java -Xmx1G -Xms1G -server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -XX:MaxInlineLevel=15 -Djava.awt.headless=true -Xlog:gc*:file=/opt/apache-kafka/bin/../logs/kafkaServer-gc.log:time,tags:filecount=10,filesize=100M -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dkafka.logs.dir=/opt/apache-kafka/bin/../logs -Dlog4j.configuration=file:/opt/apache-kafka/bin/../config/log4j.properties -cp /opt/apache-kafka/bin/../libs/activation-1.1.1.jar:/opt/apache-kafka/bin/../libs/aopalliance-repackaged-2.6.1.jar:/opt/apache-kafka/bin/../libs/argparse4j-0.7.0.jar:/opt/apache-kafka/bin/../libs/audience-annotations-0.12.0.jar:/opt/apache-kafka/bin/../libs/caffeine-2.9.3.jar:/opt/apache-kafka/bin/../libs/checker-qual-3.19.0.jar:/opt/apache-kafka/bin/../libs/commons-beanutils-1.9.4.jar:/opt/apache-kafka/bin/../libs/commons-cli-1.4.jar:/opt/apache-kafka/bin/../libs/commons-collections-3.2.2.jar:/opt/apache-kafka/bin/../libs/commons-digester-2.1.jar:/opt/apache-kafka/bin/../libs/commons-io-2.11.0.jar:/opt/apache-kafka/bin/../libs/commons-lang3-3.12.0.jar:/opt/apache-kafka/bin/../libs/commons-logging-1.2.jar:/opt/apache-kafka/bin/../libs/commons-validator-1.7.jar:/opt/apache-kafka/bin/../libs/connect-api-3.8.0.jar:/opt/apache-kafka/bin/../libs/connect-basic-auth-extension-3.8.0.jar:/opt/apache-kafka/bin/../libs/connect-json-3.8.0.jar:/opt/apache-kafka/bin/../libs/connect-mirror-3.8.0.jar:/opt/apache-kafka/bin/../libs/connect-mirror-client-3.8.0.jar:/opt/apache-kafka/bin/../libs/connect-runtime-3.8.0.jar:/opt/apache-kafka/bin/../libs/connect-transforms-3.8.0.jar:/opt/apache-kafka/bin/../libs/error_prone_annotations-2.10.0.jar:/opt/apache-kafka/bin/../libs/hk2-api-2.6.1.jar:/opt/apache-kafka/bin/../libs/hk2-locator-2.6.1.jar:/opt/apache-kafka/bin/../libs/hk2-utils-2.6.1.jar:/opt/apache-kafka/bin/../libs/jackson-annotations-2.16.2.jar:/opt/apache-kafka/bin/../libs/jackson-core-2.16.2.jar:/opt/apache-kafka/bin/../libs/jackson-databind-2.16.2.jar:/opt/apache-kafka/bin/../libs/jackson-dataformat-csv-2.16.2.jar:/opt/apache-kafka/bin/../libs/jackson-datatype-jdk8-2.16.2.jar:/opt/apache-kafka/bin/../libs/jackson-jaxrs-base-2.16.2.jar:/opt/apache-kafka/bin/../libs/jackson-jaxrs-json-provider-2.16.2.jar:/opt/apache-kafka/bin/../libs/jackson-module-afterburner-2.16.2.jar:/opt/apache-kafka/bin/../libs/jackson-module-jaxb-annotations-2.16.2.jar:/opt/apache-kafka/bin/../libs/jackson-module-scala_2.13-2.16.2.jar:/opt/apache-kafka/bin/../libs/jakarta.activation-api-1.2.2.jar:/opt/apache-kafka/bin/../libs/jakarta.annotation-api-1.3.5.jar:/opt/apache-kafka/bin/../libs/jakarta.inject-2.6.1.jar:/opt/apache-kafka/bin/../libs/jakarta.validation-api-2.0.2.jar:/opt/apache-kafka/bin/../libs/jakarta.ws.rs-api-2.1.6.jar:/opt/apache-kafka/bin/../libs/jakarta.xml.bind-api-2.3.3.jar:/opt/apache-kafka/bin/../libs/javassist-3.29.2-GA.jar:/opt/apache-kafka/bin/../libs/javax.activation-api-1.2.0.jar:/opt/apache-kafka/bin/../libs/javax.annotation-api-1.3.2.jar:/opt/apache-kafka/bin/../libs/javax.servlet-api-3.1.0.jar:/opt/apache-kafka/bin/../libs/javax.ws.rs-api-2.1.1.jar:/opt/apache-kafka/bin/../libs/jaxb-api-2.3.1.jar:/opt/apache-kafka/bin/../libs/jersey-client-2.39.1.jar:/opt/apache-kafka/bin/../libs/jersey-common-2.39.1.jar:/opt/apache-kafka/bin/../libs/jersey-container-servlet-2.39.1.jar:/opt/apache-kafka/bin/../libs/jersey-container-servlet-core-2.39.1.jar:/opt/apache-kafka/bin/../libs/jersey-hk2-2.39.1.jar:/opt/apache-kafka/bin/../libs/jersey-server-2.39.1.jar:/opt/apache-kafka/bin/../libs/jetty-client-9.4.54.v20240208.jar:/opt/apache-kafka/bin/../libs/jetty-continuation-9.4.54.v20240208.jar:/opt/apache-kafka/bin/../libs/jetty-http-9.4.54.v20240208.jar:/opt/apache-kafka/bin/../libs/jetty-io-9.4.54.v20240208.jar:/opt/apache-kafka/bin/../libs/jetty-security-9.4.54.v20240208.jar:/opt/apache-kafka/bin/../libs/jetty-server-9.4.54.v20240208.jar:/opt/apache-kafka/bin/../libs/jetty-servlet-9.4.54.v20240208.jar:/opt/apache-kafka/bin/../libs/jetty-servlets-9.4.54.v20240208.jar:/opt/apache-kafka/bin/../libs/jetty-util-9.4.54.v20240208.jar:/opt/apache-kafka/bin/../libs/jetty-util-ajax-9.4.54.v20240208.jar:/opt/apache-kafka/bin/../libs/jline-3.25.1.jar:/opt/apache-kafka/bin/../libs/jopt-simple-5.0.4.jar:/opt/apache-kafka/bin/../libs/jose4j-0.9.4.jar:/opt/apache-kafka/bin/../libs/jsr305-3.0.2.jar:/opt/apache-kafka/bin/../libs/kafka-clients-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-group-coordinator-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-group-coordinator-api-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-log4j-appender-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-metadata-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-raft-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-server-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-server-common-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-shell-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-storage-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-storage-api-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-streams-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-streams-examples-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-streams-scala_2.13-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-streams-test-utils-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-tools-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-tools-api-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-transaction-coordinator-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka_2.13-3.8.0.jar:/opt/apache-kafka/bin/../libs/lz4-java-1.8.0.jar:/opt/apache-kafka/bin/../libs/maven-artifact-3.9.6.jar:/opt/apache-kafka/bin/../libs/metrics-core-2.2.0.jar:/opt/apache-kafka/bin/../libs/metrics-core-4.1.12.1.jar:/opt/apache-kafka/bin/../libs/netty-buffer-4.1.110.Final.jar:/opt/apache-kafka/bin/../libs/netty-codec-4.1.110.Final.jar:/opt/apache-kafka/bin/../libs/netty-common-4.1.110.Final.jar:/opt/apache-kafka/bin/../libs/netty-handler-4.1.110.Final.jar:/opt/apache-kafka/bin/../libs/netty-resolver-4.1.110.Final.jar:/opt/apache-kafka/bin/../libs/netty-transport-4.1.110.Final.jar:/opt/apache-kafka/bin/../libs/netty-transport-classes-epoll-4.1.110.Final.jar:/opt/apache-kafka/bin/../libs/netty-transport-native-epoll-4.1.110.Final.jar:/opt/apache-kafka/bin/../libs/netty-transport-native-unix-common-4.1.110.Final.jar:/opt/apache-kafka/bin/../libs/opentelemetry-proto-1.0.0-alpha.jar:/opt/apache-kafka/bin/../libs/osgi-resource-locator-1.0.3.jar:/opt/apache-kafka/bin/../libs/paranamer-2.8.jar:/opt/apache-kafka/bin/../libs/pcollections-4.0.1.jar:/opt/apache-kafka/bin/../libs/plexus-utils-3.5.1.jar:/opt/apache-kafka/bin/../libs/protobuf-java-3.23.4.jar:/opt/apache-kafka/bin/../libs/reflections-0.10.2.jar:/opt/apache-kafka/bin/../libs/reload4j-1.2.25.jar:/opt/apache-kafka/bin/../libs/rocksdbjni-7.9.2.jar:/opt/apache-kafka/bin/../libs/scala-collection-compat_2.13-2.10.0.jar:/opt/apache-kafka/bin/../libs/scala-java8-compat_2.13-1.0.2.jar:/opt/apache-kafka/bin/../libs/scala-library-2.13.14.jar:/opt/apache-kafka/bin/../libs/scala-logging_2.13-3.9.4.jar:/opt/apache-kafka/bin/../libs/scala-reflect-2.13.14.jar:/opt/apache-kafka/bin/../libs/slf4j-api-1.7.36.jar:/opt/apache-kafka/bin/../libs/slf4j-reload4j-1.7.36.jar:/opt/apache-kafka/bin/../libs/snappy-java-1.1.10.5.jar:/opt/apache-kafka/bin/../libs/swagger-annotations-2.2.8.jar:/opt/apache-kafka/bin/../libs/trogdor-3.8.0.jar:/opt/apache-kafka/bin/../libs/zookeeper-3.8.4.jar:/opt/apache-kafka/bin/../libs/zookeeper-jute-3.8.4.jar:/opt/apache-kafka/bin/../libs/zstd-jni-1.5.6-3.jar kafka.Kafka /opt/apache-kafka/config/kraft/server.properties

Sep 02 03:32:31 ubuntu-vm kafka-server-start.sh[4531]: [2024-09-02 03:32:31,283] INFO [BrokerServer id=1] Waiting for all of the authorizer futures to be completed (kafka.server.BrokerServer)
Sep 02 03:32:31 ubuntu-vm kafka-server-start.sh[4531]: [2024-09-02 03:32:31,283] INFO [BrokerServer id=1] Finished waiting for all of the authorizer futures to be completed (kafka.server.BrokerServer)
Sep 02 03:32:31 ubuntu-vm kafka-server-start.sh[4531]: [2024-09-02 03:32:31,283] INFO [BrokerServer id=1] Waiting for all of the SocketServer Acceptors to be started (kafka.server.BrokerServer)
Sep 02 03:32:31 ubuntu-vm kafka-server-start.sh[4531]: [2024-09-02 03:32:31,283] INFO [BrokerServer id=1] Finished waiting for all of the SocketServer Acceptors to be started (kafka.server.BrokerServer)
Sep 02 03:32:31 ubuntu-vm kafka-server-start.sh[4531]: [2024-09-02 03:32:31,283] INFO [BrokerServer id=1] Transition from STARTING to STARTED (kafka.server.BrokerServer)
Sep 02 03:32:31 ubuntu-vm kafka-server-start.sh[4531]: [2024-09-02 03:32:31,284] INFO Kafka version: 3.8.0 (org.apache.kafka.common.utils.AppInfoParser)
Sep 02 03:32:31 ubuntu-vm kafka-server-start.sh[4531]: [2024-09-02 03:32:31,284] INFO Kafka commitId: 771b9576b00ecf5b (org.apache.kafka.common.utils.AppInfoParser)
Sep 02 03:32:31 ubuntu-vm kafka-server-start.sh[4531]: [2024-09-02 03:32:31,284] INFO Kafka startTimeMs: 1725247951283 (org.apache.kafka.common.utils.AppInfoParser)
Sep 02 03:32:31 ubuntu-vm kafka-server-start.sh[4531]: [2024-09-02 03:32:31,285] INFO [KafkaRaftServer nodeId=1] Kafka Server started (kafka.server.KafkaRaftServer)
Sep 02 03:42:30 ubuntu-vm kafka-server-start.sh[4531]: [2024-09-02 03:42:30,843] INFO [NodeToControllerChannelManager id=1 name=registration] Node 1 disconnected. (org.apache.kafka.clients.NetworkClient)
Enter fullscreen mode Exit fullscreen mode

Chúc các bạn thành công!

Top comments (0)