Cơ chế
Cơ chế nhận tin nhắn từ Kafka và Zookeeper hoạt động như sau:
- Kafka:
- Kafka sử dụng Zookeeper để theo dõi metadata của các topic, phân vùng và broker trong cụm Kafka.
- Mỗi khi một producer gửi một tin nhắn đến Kafka, Kafka sẽ lưu trữ tin nhắn đó trong một hoặc nhiều phân vùng (topic partitions).
- Consumer muốn đọc tin nhắn từ Kafka sẽ kết nối đến một broker trong cụm Kafka. Zookeeper sẽ giúp consumer tìm ra broker mà nó cần kết nối.
- Consumer sau đó yêu cầu broker gửi tin nhắn từ một phân vùng cụ thể. Broker sẽ cung cấp tin nhắn từ phân vùng đó cho consumer.
- Zookeeper:
- Zookeeper giữ theo dõi trạng thái của các broker trong cụm Kafka. Nó cung cấp thông tin về broker nào đang hoạt động và broker nào không hoạt động.
- Zookeeper cũng giúp Kafka duy trì metadata của các topic, phân vùng và consumer group.
- Mỗi khi có thay đổi về metadata hoặc trạng thái của broker, Kafka sẽ cập nhật thông tin này lên Zookeeper.
Kết hợp nhau, Kafka và Zookeeper giúp tạo ra một hệ thống phân tán mạnh mẽ cho việc lưu trữ và truy xuất dữ liệu trong thời gian thực. Zookeeper đảm bảo tính nhất quán và duy trì metadata, trong khi Kafka quản lý việc lưu trữ và truy xuất tin nhắn từ các topic.
Hãy tưởng tượng Kafka như một hệ thống email nội bộ lớn. Bạn có một cụm email với nhiều hòm thư (topic) và mỗi hòm thư này có nhiều email (tin nhắn). Mỗi email được đánh số thứ tự.
Zookeeper sẽ đóng vai trò như một bảng điều khiển quản lý hệ thống email. Nó sẽ:
- Theo dõi danh sách các hòm thư (topic): Zookeeper sẽ ghi lại danh sách tất cả các hòm thư (topic) hiện có. Nó cũng lưu trữ thông tin về tất cả các email (tin nhắn) trong từng hòm thư.
- Quản lý tình trạng của các email (tin nhắn): Zookeeper sẽ ghi lại trạng thái của từng email (đã đọc, chưa đọc) và ai đã đọc email đó.
- Theo dõi danh sách các người dùng (consumer): Zookeeper cũng ghi lại danh sách tất cả người dùng (consumer) đang tham gia vào hệ thống.
Khi bạn muốn gửi hoặc nhận một email, bạn sẽ đến bảng điều khiển (Zookeeper) để xem danh sách các hòm thư và trạng thái của các email. Sau đó, bạn sẽ truy cập vào hòm thư tương ứng và đọc hoặc gửi email.
Khi có thay đổi trong hệ thống (như thêm hòm thư mới hoặc ai đó đọc một email), bảng điều khiển (Zookeeper) sẽ cập nhật thông tin này để người dùng (consumer) biết được.
Ở đây, Kafka đóng vai trò như nền tảng hỗ trợ việc gửi và nhận tin nhắn giữa các hòm thư, trong khi Zookeeper là trung tâm quản lý theo dõi trạng thái của hệ thống.
Cài đặt Zookper
https://zookeeper.apache.org/releases.html
tar -xvf zookeeper-3.3.6.tar.gz
Đổi config nơi lưu trữ snapshot theo cấu hình server của bạn
Start Zookeeper
./zkServer.sh start
Test Zookeeper
./zkCli.sh -server 127.0.0.1
Lưu ý port mặc định của Zookeeper là running 2181
Cài đặt Kafka
https://kafka.apache.org/downloads
tar -xvf kafka_2.10-0.10.1.0.tgz
Để đổi java version lên 1.8 cho kafka, bạn chỉ cần thêm dòng dưới đây vào file kafka-server-start.sh
export JAVA_HOME=/u01/kafka/jdk1.8.0_252
vi kafka-server-start.sh
Khởi tạo Kafka
./kafka-server-start.sh ../config/server.properties &
port running on 9092
Kiểm thử
- Tạo chủ đề mới
Ở đây mình tạo 1 topic tên là topic_test
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic topic_test
- Xem chủ đề mới tạo
bin/kafka-topics.sh --list --zookeeper localhost:2181
- Sử dụng chủ đề vừa tạo để tạo tin nhắn mới
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic topic_test
Sau đó bạn có thể nhập bất kỳ như
hello kafka!!!
- Mở một terminal khác và thực hiện lệnh bin sau
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic topic_test --from-beginning
Bạn sẽ thấy thông tin đã nhập, cho đến nay tất cả đã hoàn thành. Cách sử dụng của client sẽ có ở bài viết tiếp theo
Note: Để lấy message từ kafka, trong đó –bootstrap-server là thông tin của kafka
./kafka-console-consumer.sh --topic topic_test --from-beginning --bootstrap-server localhost:9092
Hoặc có thể edit trong file config/consumer.properties
./kafka-console-consumer.sh --topic event_online --from-beginning --consumer.config /u01/kafka/kafka_2.10-0.10.1.0/config/consumer.properties
Chúc các bạn thành công!!