Tác giả: https://www.facebook.com/lang.thinh.146/
Source: https://github.com/quocthinh861/kafka-zookeeper-cluster.git
Ở bài viết trước, chúng ta đã setup xong cụm zookeeper bao gồm 3 servers chạy trên 3 AZ khác nhau, bài viết này sẽ tiếp tục tạo thêm 3 con trên 3 AZ còn lại để tạo cụm boostrap server nhé
Kiến trúc Kafka
Nói sơ qua một tí, Kafka sử dụng Zookeeper để gửi các message đến các server (hay còn được gọi là broker) thông qua topic. Các topic này sẽ có số bản sao (replication factor) và sẽ được phân tán trên khắp broker. Trong phạm vi bài lab này, mô hình của chúng ta sẽ như sau:
Có thể thấy rằng chúng ta có 3 broker, với cách setup như thế này nếu trong tính huống 1 con broker bị shutdow thì dữ liệu của chúng ta tại thời điểm đó vẫn được bảo toàn, nhờ vào cơ chế sao lưu của kafka (N-1 brokers can be down, if N is your default topic replication factor). Dữ liệu được phân tán đều trên cụm, có nghĩa ít bộ nhớ được sử dụng hơn trên từng broker nhưng vẫn có thể bảo toàn tính khả dụng của dữ liệu
Cấu hình Kafka
Để cấu hình cho Kafka thì có rất nhiều setting cho nó, việc setup sao cho phù hợp phụ thuộc vào hạ tầng của bạn. Bài viết này chủ yếu sử dụng các setting mặc định cung cấp bởi Kafka. Bạn có thể đọc file cấu hình Kafka tại đây. Chú ý chúng ta chỉ ra đường dẫn sao lưu dữ liệu và chỉ ra cụm zookeeper đã cài đặt ở bài viết trước
# The id of the broker. This must be set to a unique integer for each broker.
broker.id=1
...
# Zookeeper connection string (see zookeeper docs for details).
# This is a comma separated host:port pairs, each corresponding to a zk
# server. e.g. "127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002".
# You can also append an optional chroot string to the urls to specify the
# root directory for all kafka znodes.
zookeeper.connect=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181/kafka
Setup Kafka
Trước tiên mình sẽ setup chỉ với 1 server chạy kafka. Đầu tiên các bạn tạo ra 1 instance với AIM đã được tạo sẵn ở bài trước, đặt tên là My Kafka 1
, với bài viết trước mình đã tạo 3 server Zookeeper trên 3 subnet khác nhau, với instance này các bạn chọn 1 trong các subnet còn lại, trong ví dụ của mình, mình thiết lập private ip cho nó là 192.168.1.119
(chú ý địa chỉ ip này chính là địa chỉ ip mà các bạn đã set trong bài viết trước /etc/hosts
lúc đầu nha)
SSH vào instance, tại đây các bạn đã có sẵn thư mục /kafka với tất cả setup đã được thiết lập sẵn. Để chạy Kafka trước tiên nhìn vào file setting cho nó ở đây . Có rất nhiều thông số cấu hình, mình muốn tập trung vào một số thông số quan trọng sau đây:
Với mỗi Kafka server cần có 1 id riêng biệt broker.id=1
log.dirs=/data/kafka
chỉ định nên lưu dữ liệu log
min.insync.replicas=2
vì chúng ta chỉ có 1 kafka server nên các bạn sửa lại thành 1 nhé (sửa lại bằng 2 khi ở phía dưới bài viết)
zookeeper.connect=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181/kafka
đây là chuỗi kết nối cụm Zookeeper đã tạo, chú ý chúng ta thêm /kafka
ở phía cuối để Zookeeper lưu tất cả dữ liệu cụm kafka ở một thư mục riêng có tên là kafka cho dễ quản lý nha
Bước tiếp theo gắn file setting này thay thế file setting mặc định
# edit kafka configuration
rm config/server.properties
nano config/server.properties
Chạy thử xem sao bin/kafka-server-start.sh config/server.properties
.
Đến đây cũng như bài viết trước, mình sẽ biến nó thành service để chạy ngầm, file script có nội dung ở đây
# Install Kafka boot scripts
sudo nano /etc/init.d/kafka
sudo chmod +x /etc/init.d/kafka
sudo chown root:root /etc/init.d/kafka
# you can safely ignore the warning
sudo update-rc.d kafka defaults
Sau đó chúng ta có thể tắt và khởi động như 1 service
# start kafka
sudo service kafka start
Để xác định service đang chạy, các bạn dùng câu lệnh nc -vz localhost 9092
Chúng ta đã setup xong cụm 1 node Kafka rồi, để chạy thử vài câu lệnh xem cụm hoạt động tốt không nhé
Chúng ta tạo ra 1 topic trên server Kafka
# create a topic
bin/kafka-topics.sh --zookeeper zookeeper1:2181/kafka --create --topic first_topic --replication-factor 1 --partitions 3
Vào một trong các con Zookeeper chạy câu lệnh bin/kafka-topics.sh --list --zookeeper localhost:2181
, kết quả cho thấy topic được tạo ở trên đã được Zookeeper lưu lại 😘
Vậy là đã hoàn thành xong việc setup cụm Kafka gồm 1 node rồi. Tiếp theo chỉ cần tạo AIM từ instance này và tạo thêm 2 instance trên 2 subnet còn lại giống bài viết trước thế là xong (chú ý file config các bạn sửa lại broker.id cho 2 instance lần lượt 2, 3) 😚Ở bài viết tiếp theo, mình sẽ thực hiện các thao tác gửi nhận dữ liệu trên cụm này nhé !!!