Tìm hiểu về consumer và consumer group trong Kafka
Tại sao phải dùng consumer
- Giả sử bây giờ bạn có một ứng dụng và cần đọc message từ Kafka Topic, chạy thêm một nhiều bước validations, cuối cùng lưu nó lại trên cơ sở dữ liệu. Trong trường hợp này ứng dụng của bạn cần tạo một consumer object, subscribe topic phù hợp và bắt đầu nhận message, validate sau đó ghi kết quả xuống hệ thống.
- Nếu không sử dụng consumer thì nó vẫn hoạt động tốt một thời gian ngắn nào, nhưng nếu tỉ lệ producer nhận message vào topic ngày một tăng lên, thì lúc này ứng dụng của bạn có còn đủ sức để xử lý nữa không.
- Nếu bạn giới hạn số lượng xử lý message, đọc dữ liệu lên rồi xử lí, lúc này bạn sẽ bị thụt lùi về phía sau khi hệ thống nhận message quá nhiều mà không xử lý đầu ra kịp dẫn đến độ trễ của hệ thống. Đặt vấn đề là hệ thống cần scale tiêu thụ message, có nhiều producer write thì lúc này cần có nhiều consumer để đọc dữ liệu.
Consumer là gì
- Kafka consumer là phần quan trọng của consumer group, khi có nhiều consumer subscribe từ một topic và cùng chung một consumer group, mỗi consumer trong group sẽ nhận message từ các partition khác nhau trong topic.
- Bây giờ ta có 1 topic T1 có 4 partition. Giả sử chúng ta tạo consumer C1 và chỉ có duy nhất consumer C1 group G1, và use sử dụng C1 để subscribe đến topic T1, lúc này C1 sẽ nhận tất cả message từ 4 partition.
- Nếu chúng ta tạo consumer C2 trong group G1, mỗi consumer C1,C2 sẽ chỉ nhận message từ 2 partition ngẫu nhiên.
- Nếu tạo 4 consumer trong G1 thì mỗi consumer sẽ read message từ 1 partition.
- Nếu tạo consumer có số lượng nhiều hơn số partition thì một vài consumer sẽ là idle và không nhận message.
- Cách làm này để chúng ta có thể scale khả năng read message từ topic bằng cách add nhiều consumer trong group, góp phần giúp các hoạt động có độ trễ cao xuống thấp hoặc các tính toán phức tạp của data.
Contact
- facebook: https://www.facebook.com/phucducdev/
- group: https://www.facebook.com/groups/575250507328049
- gmail: ducnp09081998@gmail.com or phucducktpm@gmail.com
- linkedin: https://www.linkedin.com/in/phucducktpm/
- hashnode: https://hashnode.com/@OpenDev
- telegram: https://t.me/OpenDevGolang
All rights reserved