1. Cài đặt Java Development Kit (JDK)
sudo apt install openjdk-11-jdk
Xác minh việc cài đặt bằng cách kiểm tra phiên bản Java:
java -version
2. Tạo Kafka User
sudo adduser kafka
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.
Tiếp theo, bạn cần cấp đặc quyền sudo cho user kafka:
sudo usermod -aG sudo kafka
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
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
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
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
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
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
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
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
Đ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
[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
sudo ln -s /lib/systemd/system/kafka-server.service /etc/systemd/system/kafka-server.service
Yêu cầu systemd tải lại cấu hình của các dịch vụ
sudo systemctl daemon-reload
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
9. Khởi động Kafka Services và Verify Status
sudo systemctl start kafka-server
sudo systemctl status kafka-server
● 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)
Chúc các bạn thành công!
Top comments (0)