Kafka怎么保證消息不丟失?

哪些情況會發生消息丟失

從生產端到消費端都有可能發生消息丟失的情況,也就是在Producer生產者、Broker服務端、Consumer消費者都會發生這個消息丟失

怎么保證消息不丟失

Producer生產者

  1. 生產者會有自己的應答確認配置acks:acks=0代表無需任何響應,只管發不管發送是否成功,最容易丟失數據,性能最好;acks=1(生產者默認配置)代表服務端leader收到消息無需等副本同步之后立即響應,如果leader掛了就會丟失數據;ack=1代表服務端leader收到消息并且ISR副本收到消息之后再響應,可以保證消息不丟失,但是性能最差。
  2. 生產者發送失敗會有重試機制

Broker服務端

  1. 消息持久化:Broker服務端收到消息之后會持久化到磁盤,消息會先寫入page cache,然后定期刷盤,kafka不支持同步刷盤
  2. 副本復制機制:副本會從leader復制消息,當leader掛掉之后,會從副本中選出一個新的leader

Consumer消費者

Consumer消費者只可能是消費失敗但是仍然提交了offset才會導致消息丟失。可以把消費者的自動提交關閉,手動進行提交。另外對程序進行異常捕獲,發生異常可以重試消費或者人工兜底等手段避免消息丟失

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容