+5

[KAFKA] Các Loại Đọc Message Từ Kafka - Consumer Advanced

Các cách để đọc message từ consumer

  • khi xử lý 1 message từ kafka, cần phải lựa chọn thời điểm để commit offsets của nó, và các cách đọc message khác nhau sẽ ảnh hưởng đến các thiết kế và ứng dụng của bạn.

At Most Once Delivery

  • trong trường hợp này, khi thực hiện đọc message từ kafka thì message đó sẽ commit ngay lập tức.
  • nếu quá trình xử lý message xảy ra lỗi, thì không thể nào khôi phục được message đó -> mất message.
  • phù hợp cho những ứng dụng có thể cho phép data bị mất.

At Least Once Delivery (thường được xử dụng)

  • đọc message từ kafka ít nhất 1 lần,
  • việc đọc message được nhiều lần từ kafka sẽ dẫn đến trường hợp trùng message. khi 1 message gặp vấn đề trong lúc xử lý, chúng ta có thể đọc lại.
  • phù hợp cho những hệ thống không được mất message.
Idempotent Processing: Make sure your processing is idempotent (i.e. processing again the messages won’t impact your systems)

Exactly Once Delivery

  • một số ứng dụng ngoài việc đọc message ít nhất 1 lần( không mất dữ liệu ) mà còn yêu cầu là chính xác đúng 1 lần, 1 message là được xử lý đúng 1 lần.
  • điều này giúp cho kafka đáp ứng được 1 số vấn đề yêu cầu hệ thống xử lý đúng 1 lần như api payment
  • để config chỗ này chúng ta cần chỉnh: processing.guarantee=exactly.once

Summary

  • At most once: offsets sẽ được commit sau khi message được nhận, nếu xảy ra lỗi xử lý, message sẽ bị mất.
  • At least once: offsets sẽ được commit sau khi message được xử lý xong, nếu gặp vấn đề thì hoàn toàn có thể đọc lại message -> message nhiều lúc sẽ bị duplicated, sử dụng idempotent-key để xử lý.
  • Exactly Once Delivery: sẽ phù hợp với việc xử lý trong api transaction hoặc cơ chế kafka-streams api
Cuối Cùng:
Đối với hầu hết các ứng dụng, bạn nên sử dụng quy trình xử lý 'Ít nhất một lần' và đảm bảo các phép biến đổi/xử lý của bạn là bình thường.

All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí