Avatar
1
Hihi Teacher
Hihi Teacher
Thự tự tin nhắn trong Kafka
Chào mọi người,

Ví dụ trong Kafka e tạo 1 topic gồm có  5 partition.Theo em hiểu thì khi 1 Consumer nhận message từ topic thì sẽ nhận được từ message từ tất cả partition của topic đó.

  1. Em muốn hỏi là Consumer khi nhận các message từ Kafka (nhiều partition) thì có đảm bảo đúng với với thứ tự được gửi không ạ ?
  2. Nếu câu 1 câu tra lời là  không đảm bảo thì có cách nào để đảm bảo nhận được các message theo thứ tự được gửi không ạ ? ( ví dụ 1 chức năng cần xử lý theo 1 tuần  tự nhất định)

 

  • Answer
kafka
Remain: 5
1 Answer
Avatar
tvd12 Teacher
tvd12 Teacher
The Best Answer
Câu trả lời là không em ạ vì:

  • Kafka là stream chứ không phải là queue, vậy nên mục tiêu của nó là làm sao để có thể truyền đi dữ liệu một cách nhanh chóng nhất
  • Kafka cũng không yêu cầu em truyền Id cho record khi publish, dẫn đến là nó sẽ sử dụng hashCode để tính ra record sẽ được ghi vào partition nào (ví dụ int partitionId = record.hashCode() % 16 nếu em có 16 partition), và khi lấy ra khỏi partition thì kafka có thể lấy theo kiểu round robin, lấy lần lượt từ các partition thì thứ tự lúc em gửi và thứ tự lúc em nhận sẽ được xáo trộn.

  1. Nếu em vẫn muốn sử dụng nhiều partition thì anh chưa nghĩ ra cách nào, nhưng nếu em chỉ sử dụng 1 partition và ở ứng dụng của em chỉ sử dụng single thread để poll record thì có thể đó em ạ.
  • 0
  • Reply