- vừa được xem lúc

Cài Đặt Cluster KAFKA sử dụng KRAFT

0 0 2

Người đăng: NhanTran

Theo Viblo Asia

Giới Thiệu

Theo cách cài đặt Apache Kafka truyền thống thì chúng ta phải cài đặt thêm cụm ZooKeeper để thực hiện các công việc quan trọng như lưu trữ metadata, quản lý broker, kiểm soát các topic và giám sát cấu hình cụm. Tuy nhiên, sự phức tạp của việc duy trì đồng thời cụm ZooKeeper cùng với cụm Kafka đã trở nên rõ ràng theo thời gian, ngoài ra tương tác giữa Kafka và Zookeeper có thể tạo ra độ trễ, đặc biệt trong các cụm lớn hoặc khi có nhiều cập nhật metadata. Đặc biệt về Khả năng chịu lỗi, nếu Zookeeper gặp sự cố hoặc không ổn định, cả cụm Kafka có thể bị ảnh hưởng nghiêm trọng. Và để giải quyết các vấn đề đó thì KAFKA đã cho ra mắt KRAFT, một cách mới để xử lý metadata trong chính kafka đó chính là sử dụng một giao thức Raft để quản lý metadata và thực hiện bầu chọn leader. image.png

Như bạn có thể thấy thì metadata được lưu chính kafka thông qua thư mục “cluster_metadata”. Nếu bạn tò mò metadata lưu như thế nào thì truy cập vào path mà bạn lưu data của kafka để xem nhé. Ví dụ của mình như sau

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
-r-------- 1 root root 954 Nov 27 21:41 00000000000000012341-0000000215.checkpoint
-r-------- 1 root root 954 Nov 27 22:41 00000000000000019539-0000000215.checkpoint
-r-------- 1 root root 1470 Nov 27 23:41 00000000000000026744-0000000215.checkpoint
-r-------- 1 root root 1470 Nov 28 00:41 00000000000000033965-0000000216.checkpoint
...
-rw-r--r-- 1 root root 72 Nov 27 23:43 leader-epoch-checkpoint
-rw-r--r-- 1 root root 43 Nov 27 19:59 partition.metadata
-rw-r--r-- 1 root root 159 Nov 27 23:43 quorum-state

Cài đặt

Để an toàn thì chúng ta cần tạo một user mới đẻ chạy services kafka.

sudo adduser kafka
sudo adduser kafka sudo

Chọn và tải về kafka qua đường dẫn sau: https://downloads.apache.org/kafka

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ề.

tar xzf kafka_2.13-3.9.0.tgz
mv kafka_2.13-3.9.0 /opt/kafka/

Cấu hình các node, di chuyển đến thư mục vừa giải nén

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

Tìm các dòng sau

...
# The role of this server. Setting this puts us in KRaft mode
process.roles=broker,controller # The node id associated with this instance's roles
node.id=1 # The connect string for the controller quorum
controller.quorum.voters=1@localhost:9092
...

Ba tham số này cấu hình nút Kafka để hoạt động như cả broker và controller , nghĩa là nó sẽ nhận và sử dụng dữ liệu (broker) và thực hiện các tác vụ quản trị (controller). node.id dùng để chỉ định ID của nút trong cụm. Tất cả các nút phải có ID nút duy nhất, ở đây mình có 3 node và sẽ dùng ID lần lượt là 1,2 và 3. controller.quorum.voters Đây là nơi bạn sẽ chỉ định địa chỉ của tất cả các node để mỗi node đều biết tất cả các node khác.

...
controller.quorum.voters=1@kafka1.your_domain:9093,2@kafka2.your_domain:9093,3@kafka3.your_domain:9093
...

listeners định nghĩa các địa chỉ mà Kafka lắng nghe, đồng thời advertised.listeners chỉ định các địa chỉ mà các máy khác kết nối tới.

...
listeners=PLAINTEXT://kafka1.your_domain:9092,CONTROLLER://kafka1.your_domain:9093 # Name of listener used for communication between brokers.
inter.broker.listener.name=PLAINTEXT # Listener name, hostname and port the broker will advertise to clients.
# If not set, it uses the value for "listeners".
advertised.listeners=PLAINTEXT://kafka1.your_domain:9092
...

Thiết lập đường dẫn lưu trữ data của kafka, mình sẽ dùng một ổ đĩa mới mount đường dẫn tách riêng với OS để lưu data của kafka

############################# Log Basics ############################# # A comma separated list of directories under which to store log files
log.dirs=/opt/data-kafka

Để đảm bảo tính sẵng sàng cho cụm, chỉnh sửa các thông số sau để dảm bảo rằng tất cả các node trên cụm đều được đồng bộ metadata, tại đây mình set là 3 vì cụm mình có 3 node và đảm bảo mỗi node đều giữ metadata.

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 bằng lệnh sau

cd /opt/kafka
bin/kafka-storage.sh random-uuid

Đầu ra có dạng như sau

chd94Dq-T0qyTIpxFk5o9Q

Lưu lại giá trị này dùng để khởi tạo cho node 2 và 3. Cuối cùng chạy lệnh sau để hoàn thành setup cho cụm.

cd /opt/kafka
bin/kafka-storage.sh format -t $ID_vừa_tạo -c config/kraft/server.properties

Kết quả như sau

Output...
Formatting /home/kafka/kafka-logs with metadata.version 3.7-IV4.

Thực hiện cấu hình lần lượt và làm tương tự với các node 2 và 3, nhớ thay thế node.id của mỗi cụm nhé

Tiếp đến tạo file services để chạy kafka

nano /etc/systemd/system/kafka.service [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
tandardError=append:/var/log/kafka/kafka.log
User=kafka
Group=kafka
LimitNOFILE=128000
LimitMEMLOCK=infinity
RestartSec=10
Restart=always
[Install]
WantedBy=multi-user.target

Start lần lượt services trên các node lên thôi.

sudo systemctl start kafka

Dùng CLI để kiểm tra trạng thái cụm

cd /opt/kafka
bin/kafka-metadata-quorum.sh --bootstrap-controller kafka1.your_domain:9093 describe --status

Kết quả sẽ tương tự như thế này:

ClusterId: 9HfEqOkqTe-gu_TjSlOiUw
LeaderId: 65
LeaderEpoch: 216
HighWatermark: 554531
MaxFollowerLag: 0
MaxFollowerLagTimeMs: 0
CurrentVoters: [{"id": 65, "directoryId": null, "endpoints": ["CONTROLLER://kafka65:9093"]}, {"id": 66, "directoryId": null, "endpoints": ["CONTROLLER://kafka66:9093"]}, {"id": 59, "directoryId": null, "endpoints": ["CONTROLLER://kafka59:9093"]}]
CurrentObservers: []

Trong kết quả này, bạn có thể thấy là node có id là 65 đang là leader và 3 node trong cụm của mình đã kết nối thành công. Như vậy là chúng ta đã cài đặt xong 1 cụm kafka sử dụng kraft, nếu bạn có thắc mắc ở phần cài đặt thì để lại bình luận nhé. Trong phần tới mình sẽ viết bài dùng kafka-ui để quản lý các topic và dùng các công cụ grafana, prometheus để giám sát kafka.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Apache Presto - Hướng dẫn cài đặt

Bài viết này mình sẽ hướng dẫn các bạn cách cài đặt Apache Presto, trước tiên, để làm theo hướng dẫn này thì yêu cầu cơ bản như sau:. .

0 0 44

- vừa được xem lúc

Apache Presto - Giới thiệu tổng quan và kiến trúc của Apache Presto

Sau seri HIVE thì mình sẽ mang đến tiếp tục seri về Apache Presto, thằng này thì có thể sử dụng HIVE như là một connector trong kiến trúc của nó, cùng tìm hiểu về nó nhé, let's start. Apache Presto rất hữu ích để thực hiện các truy vấn thậm chí là hàng petabyte dữ liệu.

0 0 44

- vừa được xem lúc

Đọc dữ liệu từ một file text và ghi lại dưới dạng file parquet trên HDFS sử dụng Spark (Phần 2)

Các bạn chưa đọc phần 1 thì có thể đọc tại đây nha : Đọc dữ liệu từ một file text và ghi lại dưới dạng file parquet trên HDFS sử dụng Spark (Phần 1). Ghi dữ liệu ra file parquet sử dụng Spark.

0 0 50

- vừa được xem lúc

Đọc dữ liệu từ một file text và ghi lại dưới dạng file parquet trên HDFS sử dụng Spark (Phần 1)

Định dạng text là một định dạng vô cùng phổ biến cả trên HDFS hay bất cứ đâu. Dữ liệu file text được trình bày thành từng dòng, mỗi dòng có thể coi như một bản ghi và đánh dấu kết thúc bằng kí tự "" (

0 0 37

- vừa được xem lúc

Blockchain dưới con mắt làng Vũ Đại 4.0

Mở bài. Hey nhô các bạn, lại là mình đây .

0 0 51

- vừa được xem lúc

Khám phá từng ngõ ngách Apache Druid - Phần 1

1. Giới thiệu. Trước khi đi vào nội dung chính mình muốn kể 1 câu chuyện sau:. .

0 0 574