asynchronous programming.
Message base | Data pipeline |
---|---|
ActiveMQ, RabbitMQ, ZeroMQ | RocketMQ, Kafka |
Lưu trạng thái của Consumer để đảm bảo tất cả đều nhận được message từ topic đang subscribe. | Không lưu trạng thái của Consumer. |
Message bị xóa sau khi các Consumer nhận được message. | Message chưa bị xóa ngay sau khi Consumer nhận message. |
Khi có message mới, Consumer chỉ lấy được duy nhất message đó. | Consumer có thể tùy ý lựa chọn lấy về một danh sách các message, bao gồm cả message cũ. |
Topic, Partition và offset
Kafka broker
Kafka broker & topic
Để đảm bảo high reliable, Kafka tự động phân tán các partition trên tất cả broker đang có. Mỗi partition nằm trên một broker. Topic-A có 3 partition nằm trên các broker nào mà không phụ thuộc thứ tự.
Topic được lưu trữ ở log file phân chia thành các segment khác nhau.
Leader partition concept
- Tại một thời điểm, mỗi partition có duy nhất một replication leader.
- Chỉ có thể read/write message từ replication leader.
- Các replication còn lại được gọi là ISR, đồng bộ message từ replication leader.
- Do vậy, mỗi partition có duy nhất một replication leader và một hoặc nhiều ISR - in-sync replica.
Producer
Producer là người gửi message đến Message broker. Cụ thể với Kafka, producer write data vào partition của topic.
Trong trường hợp gửi message đến topic mà không chỉ định partition, producer sẽ gửi message đến broker theo cơ chế round-robin.
Message đầu tiên đi vào broker 101, message thứ hai đi vào broker 102, message tiếp theo đi vào broker 103... cứ như vậy, các message được write balance giữa các broker.
Consumer
Có gửi thì có nhận, và consumer là đầu nhận message.
- Consumer đọc message từ topic, xác định bằng topic name.
- Đồng thời, consumer biết nên đọc message từ broker nào. Trong trường hợp chưa read xong mà broker gặp sự cố, consumer cũng có cơ chế tự phục hồi.
- Việc đọc message trong một partition diễn ra tuần tự để đảm bảo message ordering. Có nghĩa là consumer không thể đọc message offset=3 khi chưa đọc message offset=2.
- Một consumer cũng có thể đọc message từ một hoặc nhiều hoặc tất cả partition trong một topic.
Consumer group
Quay lại phần trước, consumer là nơi đọc message từ topic. Có nghĩa là một consumer có thể đọc toàn bộ message của tất cả partition thuộc cùng topic.
Nếu số lượng producer tăng lên và đồng thời gửi message đến tất cả partition trong khi chỉ có duy nhất một consumer thì khả năng xử lý sẽ rất chậm, có thể dẫn tới bottle-neck. Giải pháp là tăng số lượng consumer, các consumer có thể xử lý đồng thời message từ nhiều partition. Và tất cả các consumer sẽ thuộc cùng một nhóm được gọi là consumer group.
https://viblo.asia/s/apache-kafka-tu-zero-den-one-aGK7jPbA5j2
0 Nhận xét