Làm sao để lấy các message queue trong log để thực hiện lại các message khi kafka apache bị sập?

mọi người cho em hỏi là,khi kafka apache bị sập, thì làm sao em có thể lấy các message queue trong log để thực liện lại các message . mọi người có tài liệu nào về kafka cho em tham khảo với ạ

1 Like

Kafka có persistence sẵn nên chỉ cần mở lại Kafka là xong nè O3O

7 Likes

Khi Kafka bị sập, cậu sẽ đối mặt với 1 trong các kịch bản sau:

  1. App chưa kịp publish message tới Kafka thì đã bị mất kết nối. Trường hợp này, cậu chỉ có thể biết nội dung message bên phía application (publisher).
  2. App đã kịp publish message, Kafka đang trong quá trình nhận nội dung message thì bị crash. Trường hợp này tương đối hiếm, nhưng vẫn có thể xảy ra, và cậu cũng chỉ có thể biết nội dung message từ phía application (publisher).
  3. App đã kịp publish message, Kafka đã nhận được nội dung message, nhưng chưa kịp persist thì bị crash. Trường hợp này, cậu có thể biết nội dung message từ phía application (publisher). Application log của Kafka thường chỉ dùng để track lỗi, nên cậu không có cơ hội đọc được message trong log đâu.
    Log này có khả năng sẽ có thứ cậu tìm, nhưng tớ không nghĩ cậu đọc được nó.
  4. Kafka đã nhận được nội dung message, đã persist rồi bị crash. Trường hợp này khi restart Kafka, message sẽ được process tiếp.
    Từ đây trở đi, message sẽ được Kafka retry nếu như thất bại.

Như cậu thấy, hầu hết các TH Kafka sẽ tự recover mọi thứ cho cậu. Tuy nhiên, có 1 số TH nho nhỏ, cậu cần phải tự publish message lại lần nữa.
Ở cả 3 TH (1), (2), (3), cậu không có cách nào khác ngoài check log của publisher để lấy. Đó thực ra là giải pháp hiệu quả và đơn giản nhất cho cậu: cậu có thể log message ở publisher trước khi gửi, và ở consumer sau khi nhận, rồi so sánh log publisher với log consumer để tìm ra số message “đi lạc” :smile:

Còn về tài liệu Kafka, tớ nghĩ tớ không có giải pháp nào ngoài google ra mấy quyển sách và đọc. Cậu thử làm vậy xem :smiley:

9 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?