kafk優化-3

  一、kafka在使用的時候還是會存在一些問題的,這裏主要是記錄kafka的優化方式,以及帶來的問題。

  二、防止消息丟失和重複消費

  1、防止數據丟失

  1)發送方:ack設置爲1或者-1/all,把min.insyc.replicas設置爲分區數。(目的:ack爲1主要是保證分區leader備份數據,ack爲-1/all的情況下保證整體的leader和follow都進行備份,防止丟失)

  2)接收方:自動提交改成手動提交(目的:避免系統自動是,出現後臺消費異常導致的數據丟失)

  2、重複消費

  1)關閉生產端的重試機制,消費端設置成手動提交。(目的:生產端避免重複發送,消費端:防止異常重複消費)這裏會導致一個問題,就是丟失數據的問題,可以在防止消息消息的基礎上,加上消費消息時冪等性。

  2)冪等性:a、mysql通過主鍵ID插入,主鍵ID唯一來保證。b、使用redis或者ZK的分佈式鎖。

  三、如何順序消費(犧牲性能)

  1、發送方:ack不設置爲0,關閉重試,採用同步方式發送,等到消息成功後發送下一條。

  2、接收方:發送方將消息發送到一個分區,只有一個消費組來進行消費。

  四、解決消息積壓問題

  1、產生原因:消費者消費消息的速度遠趕不上生產者生產的速度。kafka內部消息開始堆積,最終可能導致雪崩。

  2、解決方案:

  1)在消費者中使用多線程,提高消費能力。

  2)創建過個消費組,多個消費者,部署到不同的機器,提高消費能力。

  3)同一個組,建立另外的主體和分區,在主消費的poll下來數據後,不進行處理,直接轉發到新的主體,進行消費,提高性能。

  五、延時隊列

  1、使用場景:訂單30分鐘沒有付款,需要取消訂單等。

  2、消息發送者發送消息時帶上消費發送的時間。

  3、消費者在進行(輪詢)消費的時候,通過時間進行相關的邏輯處理。否者利用kafka的offset機制記錄未消費的下標,後期進行下次消費判斷。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章