Giới Thiệu
Trong việc triển khai Apache Kafka, một trong những thách thức lớn nhất là quản lý cụm ZooKeeper. ZooKeeper đóng vai trò quan trọng trong việc lưu trữ metadata, quản lý các broker, kiểm soát các topic và đảm bảo cấu hình cho cụm. Tuy nhiên, việc duy trì ZooKeeper song song với Kafka gây ra nhiều phức tạp và có thể tạo ra độ trễ đáng kể, đặc biệt trong các cụm lớn hoặc khi có nhiều cập nhật metadata.
Đặc biệt, nếu ZooKeeper gặp sự cố, toàn bộ cụm Kafka có thể bị ảnh hưởng. Để khắc phục những vấn đề này, Apache Kafka đã giới thiệu KRAFT - một phương pháp mới giúp quản lý metadata bằng giao thức Raft, cho phép Kafka tự quản lý metadata mà không cần đến ZooKeeper.
Metadata hiện được lưu trữ trực tiếp trong thư mục “cluster_metadata” của Kafka. Bạn có thể kiểm tra metadata tại địa chỉ mà bạn đã lưu trữ dữ liệu Kafka. Dưới đây là một ví dụ về cấu trúc thư mục này:
bash
root@dbb-u22:/opt/data-kafka/__cluster_metadata-0# ls -la
total 54916
drwxr-xr-x 2 root root 8192 Nov 30 22:42 .
drwxr-xr-x 6 root root 285 Nov 30 23:11 ..
-rw-r--r-- 1 root root 10485760 Nov 30 23:11 00000000000000000000.index
-rw-r--r-- 1 root root 38984994 Nov 30 23:11 00000000000000000000.log
-rw-r--r-- 1 root root 10485756 Nov 30 23:11 00000000000000000000.timeindex
-rw-r--r-- 1 root root 10 Nov 27 20:41 00000000000000005109.snapshot
...```
## Cài Đặt Cụm Kafka
Để đảm bảo an toàn, trước tiên cần tạo một người dùng mới để chạy dịch vụ Kafka:
```bash
sudo adduser kafka
sudo adduser kafka sudo
Tiếp theo, tải Apache Kafka từ liên kết sau: Apache Kafka Downloads.
bash
wget https://archive.apache.org/dist/kafka/3.9.0/kafka_2.13-3.9.0.tgz
Giải nén tệp vừa tải về:
bash
tar xzf kafka_2.13-3.9.0.tgz
mv kafka_2.13-3.9.0 /opt/kafka/
Bây giờ, hãy cấu hình các node bằng cách di chuyển đến thư mục vừa giải nén:
bash
nano /opt/kafka/config/kraft/server.properties
Tìm và chỉnh sửa các dòng sau:
properties
process.roles=broker,controller
node.id=1
controller.quorum.voters=1@localhost:9092
Trong đó:
process.roles
xác định vai trò của server.node.id
là ID của nút trong cụm (cần đảm bảo mỗi nút có ID duy nhất).controller.quorum.voters
là danh sách các địa chỉ của tất cả các nút trong cụm.
Thay đổi thành:
properties
controller.quorum.voters=1@kafka1.your_domain:9093,2@kafka2.your_domain:9093,3@kafka3.your_domain:9093
Tiếp theo, cấu hình địa chỉ lắng nghe và địa chỉ quảng cáo:
properties
listeners=PLAINTEXT://kafka1.your_domain:9092,CONTROLLER://kafka1.your_domain:9093
inter.broker.listener.name=PLAINTEXT
advertised.listeners=PLAINTEXT://kafka1.your_domain:9092
Thiết lập đường dẫn lưu trữ dữ liệu của Kafka dưới đây, bạn nên sử dụng một ổ đĩa mới tách biệt với hệ điều hành:
properties
log.dirs=/opt/data-kafka
Chỉnh sửa các thông số đảm bảo tính sẵn sàng của cụm:
properties
offsets.topic.replication.factor=3
transaction.state.log.replication.factor=3
transaction.state.log.min.isr=3
Tiếp theo, tạo một ID cho cụm mới:
bash
cd /opt/kafka
bin/kafka-storage.sh random-uuid
Lưu lại giá trị này để khởi tạo cho node 2 và 3. Sau đó, format cho cụm:
bash
cd /opt/kafka
bin/kafka-storage.sh format -t $ID_vừa_tạo -c config/kraft/server.properties
Lặp lại cấu hình cho các node 2 và 3, nhớ thay đổi node.id
cho mỗi node.
Tiếp theo, tạo file dịch vụ để chạy Kafka:
bash
nano /etc/systemd/system/kafka.service
Nội dung file kafka.service
như sau:
ini
[Unit]
Description=Apache Kafka Server
Documentation=http://kafka.apache.org/documentation.html
[Service]
Type=simple
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/kraft/server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
Restart=on-abnormal
StandardOutput=append:/var/log/kafka/kafka.log
StandardError=append:/var/log/kafka/kafka.log
User=kafka
Group=kafka
LimitNOFILE=128000
LimitMEMLOCK=infinity
RestartSec=10
Restart=always
[Install]
WantedBy=multi-user.target
Khởi động dịch vụ Kafka trên các node:
bash
sudo systemctl start kafka
Để kiểm tra trạng thái cụm, sử dụng lệnh CLI:
bash
cd /opt/kafka
bin/kafka-metadata-quorum.sh --bootstrap-controller kafka1.your_domain:9093 describe --status
Kết quả sẽ có dạng như sau:
ClusterId: 9HfEqOkqTe-gu_TjSlOiUw
LeaderId: 65
LeaderEpoch: 216
HighWatermark: 554531
...
Từ kết quả này, bạn có thể thấy rằng node có ID là 65 đang giữ vai trò leader và cả ba node trong cụm đã kết nối thành công.
Vậy là bạn đã hoàn thành việc cài đặt cụm Kafka sử dụng KRAFT. Nếu có bất kỳ câu hỏi nào liên quan đến quá trình cài đặt, hãy để lại bình luận. Trong bài tiếp theo, mình sẽ giới thiệu cách sử dụng Kafka-UI để quản lý các topic và sử dụng Grafana, Prometheus để giám sát Kafka.
source: viblo