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

Kafka - Đọc message từ Partition, Offset (Part 4)

0 0 16

Người đăng: Toni Dev

Theo Viblo Asia

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 Groupread 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

image.png

  • 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 1partition 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}

image.png

  • Ở đâ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

image.png

  • 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

image.png

  • Ở đâ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:

Bình luận

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

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

007: Partitioning data với PostgreSQL P2

Bài viết nằm trong series Performance optimization với PostgreSQL. . . Partition by list.

0 0 87

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

005: Bao nhiêu partition là đủ cho một topic trong Apache Kafka

© Dat Bui | Buy me a coffee & give your kindness to the world. Bài viết nằm trong series Apache Kafka từ zero đến one.

0 0 41

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

Cách để chọn số lượng partitions hợp lý.

Một vài điểm cân nhắc khi chọn số lượng partition trong kafka:. .

0 0 25

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

Optimize query for Big Database

https://github.com/dwarvesf/challenge/blob/query-big-database-from-multiple-table/query-big-database/images/database.png. Introduction.

0 0 38

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

Kafka - Partition, Offset, Consumer Group (Part 2)

Hellu, lại là mình - Toni Dev đây . Ở part 1 thì chúng ta đã cùng nhau tìm hiểu về các khái niệm cơ bản trong Apache Kafka.

0 0 18

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

001: Message-driven programming với Message broker và Apache Kafka

Bài viết nằm trong series Apache Kafka từ zero đến one. . . Asynchronous programming.

0 0 165