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. Hôm nay chúng ta sẽ tiếp tục part 2 trong series Apache Kafka và nhân vật chính lần này sẽ là Partition, Offset & Consumer Group.
1. Kafka Partition
- Giả sử có 1 topic phải lưu trữ quá nhiều data. Vậy nên bắt buộc phải chia nhỏ data và lưu trữ vào các servers khác nhau, mỗi server được gọi là 1 partition.
- Partition là nơi lưu trữ data trong topic và 1 topic có thể có 1 hoặc nhiều partition. ID của các partition trong topic sẽ được tăng dần (start từ 0). Trong Kafka Cluster thì một partition có thể replicate (sao chép) ra nhiều bản.
- Việc chia nhỏ topic thành các partition thể hiện tính năng phân phối (distributed) của Kafka, nghĩa là nó lưu trữ data trên nhiều Datacenter (nhiều Servers khác nhau).
2. Kafka Offset
- Trên mỗi partition thì data được lưu trữ cố định và được gán cho một ID gọi là offset (giá trị ID của các offset sẽ tăng dần & start từ 0). Một partition có thể có 1 hoặc nhiều offset.
- Khi 1 message mới publish vào topic, Kafka sẽ quyết định message này nằm trong partition nào & offset nào.
- Để lấy được một message trong Apache Kafka, chúng ta cần chỉ định rõ topic name, partition number và offset number.
- VD mình muốn lấy message tại vị trí offset như hình trên thì: topic_name.2.0
3. Kafka Consumer Group
- Đặt vấn đề, giả sử khi 1 topic có nhiều producer cùng publish messages. Nếu chỉ có 1 consumer để subcribe messages thì sẽ không đủ đáp ứng, vậy nên phải có nhiều consumer cùng nhau xử lý để tránh tình trạng quá tải & độ trễ cao khi system hoạt động. Khi đã có nhiều consumer thì mình phải gom chúng lại trong 1 consumer group để dễ quản lý & phân chia công việc.
- Consumer Group là 1 group chứa các consumer subcribe messages từ các partition khác nhau trong cùng 1 topic.
- Có 1 lưu ý là số lượng consumer càng nhiều thì độ trễ càng ít, nhưng sẽ tốn chi phí để vận hành. Vì vậy phải biết cân bằng & tối ưu chi phí một cách hợp lý mà system vẫn hoạt động tốt. 😄
- Nhìn vào hình trên ta sẽ thấy:
- Consumer Group 1 sẽ có độ trễ thấp hơn vì mỗi consumer chỉ subcribe messages từ 1 partition.
- Consumer Group 2 sẽ có độ trễ cao hơn vì mỗi consumer phải subcribe messages từ 2 partitions.
4. Summary
- Bài này mình đã làm rõ hơn khái niệm về Partition, Offset, Consumer Group và nhiệm vụ riêng của từng cái.
- Ở part 3 mình sẽ bắt đầu thực hành tạo broker, zookeeper, topic, publish message và subcribe message trên terminal.
- Cảm ơn các bạn đã đọc đến đây, nếu có góp ý hay thắc mắc gì thì hãy comment phía dưới để chúng ta cùng upgrade nhé 😁
Reference:
All rights reserved