Hellu, Toni Dev đây 😁. Ở part 3 thì chúng ta đã cùng nhau practice start zookeeper, start broker, tạo topic, publish/subcribe messages. Hôm nay chúng ta sẽ tiếp tục part 4 (part cuối trong series Kafka) để cùng nhau tạo Consumer Group và read message từ Partition, Offset cụ thể nhé.
1. Start kafka enviroment with Zookeeper
- Đầu tiên chúng ta cùng start lại Zookeeper service & Broker service như part 3 nhé:
bin/zookeeper-server-start.sh config/zookeeper.properties
bin/kafka-server-start.sh config/server.properties
2. Create topic with partition
- Create a topic with partitions:
bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 3 --topic ${topic_name}
- Describe info a topic:
bin/kafka-topics.sh --describe --topic ${topic_name} --bootstrap-server localhost:9092
- Như các bạn thấy, mình vừa tạo ra 1 topic với tên là topic-part4, đi kèm là option replication-factor 1 và partition 3
- Giải thích kỹ hơn về replication-factor, nhắc lại part 1 mình đã có nói đến là 1 Cluster có thể có 1 hoặc nhiều Broker. Vậy thì replication-factor chính là những bản copy data của 1 topic nào đó cho các Broker khác trong cùng 1 Cluster. Mục đích của việc copy data cho các Broker khác là để những Broker này nó có thể cover cho Broker chính nếu nó gặp issue (tránh tình trạng system đang hoạt động thì die bởi vì không có Broker thay thế kịp thời). Mà ở LOCAL env mình đang test thì chỉ có 1 Broker đang run mà thôi, vì vậy mới có option replication-factor 1 ở đây. Đoạn này hơi khó hiểu 1 chút nên các bạn có thể vừa xem hình dưới, vừa đọc chậm lại để ngẫm nhé. 😅
- Còn optiton partition ở đây chính là số lượng partition bạn muốn tạo trong topic. Và mình vừa mới tạo 3 partition trong topic-part4
3. Publish/Subcribe message & create Consumer Group
- Producer publish message vào topic:
bin/kafka-console-producer.sh --topic ${topic_name} --bootstrap-server localhost:9092
- Subcribe message & add consumer vào 1 consumer group:
bin/kafka-console-consumer.sh --topic ${topic_name} --bootstrap-server localhost:9092 --from-beginning --group ${group_name}
- Ở đây mình đã add 7 messages vào topic-part4. Tiếp đến là mình tạo ra 1 consumer group tên là consumer-group-part4, sau đó mình sẽ add consumer hiện tại vào consumer group này. Đồng thời cũng show ra toàn bộ messages của topic-part4.
4. Describe information Consumer Group
bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group ${group_name} --describe
- Như hình trên thì mình đã describe infor của consumer-group-part4. Hãy chú ý đến LOG-END-OFFSET, nó chính là số lượng offset tương ứng với từng partition. Có thể hiểu là nếu cộng toàn bộ LOG-END-OFFSET lại thì sẽ biết được tổng số offset của topic-part4
- Partition 0 đang chứa 0 offset
- Partition 1 đang chứa 7 offset (7 messages)
- Partition 2 đang chứa 0 offset
- Lưu ý rằng việc add message vào partition nào là do Kafka quyết định (cái này dựa vào sự tính toán & thuật toán của Kafka,... các bạn có thể đọc hiểu thêm)
5. Read message from Partition & Offset
bin/kafka-console-consumer.sh --topic ${topic_name} --bootstrap-server localhost:9092 --partition 1 --offset 0
- Ở đây thì mình vừa read messages:
- Đối với --partition 1 --offset 0 sẽ read được cả 7 messages, vì nó read message của partition 1 từ vị trí offset 0 cho đến offset cuối cùng (là offset 6).
- Có thể hiểu 1 message sẽ tương ứng với 1 offset.
- Còn nếu là --partition 1 --offset 6 thì sẽ chỉ read được 1 message ở vị trí offset 6 vì nó đã là offset cuối cùng rồi.
6. Summary
- Như vậy chúng ta đã cùng nhau đi hết 4 phần trong series Kafka basic.
- Cùng nhau tìm hiểu lý thuyết ở part 1 & 2 (khái niệm về producer, messages, cluster, broker, zookeeper, topic, partition, offset, consumer, consumer group, cách hoạt động của Kafka,...)
- Cùng nhau thực hành ở part 3 & 4 (start zookeeper, start broker, tạo topic, publish/subcribe message, create consumer group, read message từ partition & offset,...)
- Cảm ơn các bạn đã đồng hành cùng mình trong series Kafka này, hy vọng nó mang lại kiến thức bổ ích cho mọi người & hãy comment phía dưới nếu có góp ý hay thắc mắc nào nhé 😁 Sự ủng hộ của các bạn là động lực để mình tiếp tục share những kiến thức khác.
Reference: