kafka消息丟失情況與解決方案


1、Kafka消息丟失的情況:

 (1)auto.commit.enable=true,消費端自動提交offersets設置為true,當消費者拉到消息之后,還沒有處理完 commit interval 提交間隔就到了,提交了offersets。這時consummer又掛了,重啟后,從下一個offersets開始消費,之前的消息丟失了。

(2)網絡負載高、磁盤很忙,寫入失敗,又沒有設置消息重試,導致數據丟失。

(3)磁盤壞了已落盤數據丟失。

(4)單 批 數 據 的 長 度 超 過 限 制 會 丟 失 數 據 , 報kafka.common.Mess3.ageSizeTooLargeException異常

 

2、Kafka避免消息丟失的解決方案:

(1)設置auto.commit.enable=false,每次處理完手動提交。確保消息真的被消費並處理完成。

(2)kafka 一定要配置上消息重試的機制,並且重試的時間間隔一定要長一些,默認 1 秒鍾不符合生產環境(網絡中斷時間有可能超過 1秒)。

(3)配置多個副本,保證數據的完整性。

(4)合理設置flush間隔。kafka 的數據一開始就是存儲在 PageCache 上的,定期 flush 到磁盤上的,也就是說,不是每個消息都被存儲在磁盤了,如果出現斷電或者機器故障等,PageCache 上的數據就丟。可以通過 log.flush.interval.messages 和 log.flush.interval.ms 來 4.配置 flush 間隔,interval大丟的數據多些,小會影響性能但在 0.本,可以通過 replica機制保證數據不丟,代價就是需要更多資源,尤其是磁盤資源,kafka 當前支持 GZip 和 Snappy壓縮,來緩解這個問題 是否使用 replica 取決於在可靠性和資源代價之間的 balance。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM