Kafka如何保證消息不丟失不重複

  • 消費端重複消費:
    • 創建去重表
  • 消費端丟失數據:
    • 關閉自動提交offset,處理完以後受到移位
  • 生產端重複發送:
    • 這個不重要,消費端消費以前從去重表中判重就能夠
  • 生產端丟失數據:
    • 解決策略:html

      • 一、異步方式緩衝區滿了,就阻塞在那,等着緩衝區可用,不能清空緩衝區緩存

      • 二、發送消息以後回調函數,發送成功就發送下一條,安全

        • 發送失敗就記在日誌裏,等着定時腳本(定時器)來掃描異步

        • (發送失敗可能並不真的發送失敗,只是沒收到反饋,定時腳本可能會重發)函數

如何保證有序(同步發送能保證順序):日誌

  • 同步發送模式:發出消息後,必須阻塞等待收到通知後,才發送下一條消息htm

  • 異步發送模式:一直往緩衝區寫,而後一把寫到隊列中去blog

  • 二者都是各有利弊:隊列

    • 同步發送模式雖然吞吐量小,可是發一條收到確認後再發下一條,既能保證不丟失消息,又能保證順序get

kafka數據丟失緣由:

  1. 有3種狀態(0(不須要等待確認)、1(leader確認)、-1(all確認))保證消息被安全生產,

    • 在配置狀態爲1(只保證寫入leader成功的話),若是恰好leader partition掛了,數據就會丟失

  2. 使用異步模式的時候,當緩存區滿了,

    • 若是配置狀態爲0(還沒收到確認的狀況下,緩衝池一滿,就清空緩衝池裏的消息),數據就會被立馬丟棄掉

  3. 若是配置狀態爲-1

    • 因爲ISR可能會縮小到僅包含一個Replica,因此設置參數爲all並不能必定避免數據丟失

在數據生產時避免數據丟失的方法:

  • 只要能避免上述兩種狀況,那麼就能夠保證消息不會被丟失。
  •  

 

https://www.cnblogs.com/cherish010/p/9764810.html

相關文章
相關標籤/搜索