Xin chào các bạn, Toni Dev đây 😁. Trong phần 3, chúng ta đã cùng nhau thực hành cách khởi động Zookeeper, khởi động Broker, tạo topic, và publish/subscribe tin nhắn. Hôm nay, trong phần 4 - phần cuối cùng của series Kafka, chúng ta sẽ tìm hiểu cách tạo Consumer Group và đọc tin nhắn từ Partition và Offset cụ thể.
1. Khởi Động Môi Trường Kafka với Zookeeper
- Đầu tiên, hãy khởi động lại Dịch vụ Zookeeper và Dịch vụ Broker, giống như trong phần 3:
bin/zookeeper-server-start.sh config/zookeeper.properties
bin/kafka-server-start.sh config/server.properties
2. Tạo Topic với Partition
- Tạo một topic với các partition:
bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 3 --topic ${topic_name}
- Mô tả thông tin của topic:
bin/kafka-topics.sh --describe --topic ${topic_name} --bootstrap-server localhost:9092
-
Như các bạn thấy, tôi đã tạo một topic có tên là topic-part4, với replication-factor 1 và 3 partition.
-
Replication-factor là số lượng bản sao dữ liệu của một topic trên nhiều Broker trong cùng một Cluster. Mục đích của việc này là đảm bảo dữ liệu luôn có sẵn ngay cả khi một Broker gặp vấn đề. Trong môi trường LOCAL mà chúng ta đang thử nghiệm chỉ có một Broker đang chạy, do đó, chúng ta sử dụng replication-factor 1.
-
Partition chính là số lượng partition mà bạn muốn tạo trong topic, và chúng ta đã tạo 3 partition trong topic-part4.
3. Publish/Subscribe Tin Nhắn & Tạo Consumer Group
- Producer gửi tin nhắn vào topic:
bin/kafka-console-producer.sh --topic ${topic_name} --bootstrap-server localhost:9092
- Subscribe tin nhắn và thêm consumer vào một consumer group:
bin/kafka-console-consumer.sh --topic ${topic_name} --bootstrap-server localhost:9092 --from-beginning --group ${group_name}
- Trong bước này, tôi đã thêm 7 tin nhắn vào topic-part4. Sau đó, tôi đã tạo một consumer group có tên là consumer-group-part4 và thêm consumer hiện tại vào group này, đồng thời hiển thị toàn bộ tin nhắn từ topic-part4.
4. Mô Tả Thông Tin Consumer Group
bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group ${group_name} --describe
- Như hình dưới đây, tôi đã mô tả thông tin của consumer-group-part4. Hãy chú ý đến LOG-END-OFFSET, đó chính là số lượng offset tương ứng với từng partition. Nếu cộng toàn bộ LOG-END-OFFSET lại, bạn sẽ biết tổng số offset của topic-part4.
- Partition 0 đang chứa 0 offset.
- Partition 1 đang chứa 7 offset (7 tin nhắn).
- Partition 2 đang chứa 0 offset.
- Lưu ý rằng việc tin nhắn được thêm vào partition nào là do Kafka quyết định dựa trên thuật toán của nó. Bạn có thể tìm hiểu thêm về điều này.
5. Đọc Tin Nhắn Từ Partition & Offset
bin/kafka-console-consumer.sh --topic ${topic_name} --bootstrap-server localhost:9092 --partition 1 --offset 0
- Ở đây, tôi đã đọc tin nhắn từ:
- --partition 1 --offset 0 sẽ đọc được cả 7 tin nhắn, vì nó đọc tin nhắn từ partition 1 bắt đầu từ vị trí offset 0 đến offset cuối cùng (là offset 6).
- Hiểu rằng, mỗi tin nhắn tương ứng với một offset.
- Nếu bạn dùng --partition 1 --offset 6, bạn chỉ đọc được 1 tin nhắn ở vị trí offset 6, vì đó là offset cuối cùng.
6. Tóm Tắt
- Như vậy, chúng ta đã cùng nhau hoàn thành 4 phần trong series Kafka cơ bản này.
- Chúng ta đã tìm hiểu lý thuyết trong phần 1 & 2 (khái niệm về producer, tin nhắn, cluster, broker, zookeeper, topic, partition, offset, consumer, consumer group, cách hoạt động của Kafka,...)
- Thực hành trong phần 3 & 4 (khởi động zookeeper, khởi động broker, tạo topic, publish/subscribe tin nhắn, tạo consumer group, đọc tin nhắn từ partition & offset,...)
- Cảm ơn các bạn đã đồng hành cùng tôi trong series Kafka này. Hy vọng nó cung cấp kiến thức bổ ích cho mọi người. Nếu có góp ý hay thắc mắc nào, hãy bình luận phía dưới nhé 😁. Sự ủng hộ của các bạn là động lực cho tôi để tiếp tục chia sẻ những kiến thức khác.
Tài liệu tham khảo:
- https://www.youtube.com/watch?v=NyLwChatKS4&t=1s
source: viblo