日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

kafka数据不丢失不重复_如何配置 KAFKA 使其消息不会丢失

發布時間:2025/3/12 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 kafka数据不丢失不重复_如何配置 KAFKA 使其消息不会丢失 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

不可靠的KAFKA

這里的不可靠是指代KAFKA其設計之初就為高性能而設計,其是允許消息丟失的,但經過多個版本的升級之后,通過KAFKA的相關配置,我們可以將其作為可靠的隊列(不丟消息的隊列)。

在本文里,不會具體列出要改哪個參數,需要改的參數請大家自行翻文檔找出來,這樣理解會更為深刻。

發送消息到KAFKA時產生的消息丟失

在一些比較舊的版本,KAFKA客戶端發送消息到KAFKA服務器時,由于客戶端不等待服務器回應,直接返回,等待發送異步進行。因此其在發送環節就可能存在消息丟失。

為了避免消息丟失,我們需要用新版客戶端,并配置客戶端發送消息時同步等待返回結果

KAFKA服務器宕機導致的消息丟失(磁盤緩存丟失)

KAFKA自身不管理LOG寫入磁盤的緩存,將其交由操作系統處理。因此在默認配置下,如果KAFKA宕機,則會因為數據沒有FLUSH到磁盤而丟失數據。

為了保證數據不丟失,KAFKA提供的現成方法有兩個,

每條消息都Flush一次; 每條都Flush一遍,必然不可行,因為其速度會變得很慢。官方也不建議這么做。(如果其有類似Group Commit的優化機制的話,我覺得可以使用,但是貌似曾經有人提過這個PR,沒有被采納,其認為用集群就可解決這個可靠性問題)

構建集群,以提高可用性。 官方推薦的方法。只要掛的機器不要超過強制寫入的機器,那么就可以保證數據不丟失。但需要注意的是,KAFKA組成的集群必須在不同機房。不然機房一斷電,集群內的KAFKA就會出現消息丟失。

KAFKA復制模式導致的丟失

KAFKA的副本模式為主備復制模式,這個模式下有兩種形式 同步復制模式 以及 異步復制模式。

異步復制模式: 客戶端將信息發送到主副本,主副本收到信息寫到本地緩存后即返回ACK給客戶端。然后異步地將數據發送給備份。本配置為默認配置,其高效,但主掛掉,則消息丟失。 同步復制模式: 客戶端將信息發送到主副本,主副本收到信息,寫到本地緩存,并發送給所有從機,從機都寫到緩存后給主機反饋,主機都收到反饋后再反饋給客戶端

需要修改復制模式為同步復制

KAFKA選舉導致的消息丟失

KAFKA有一個配置,是否允許在不得已的情況下,允許在非同步狀態下的副本成為主副本。其默認是打開的,結果就導致存在丟失消息的可能性。需要將其關閉

未被確認的消息不會被消費

KAFKA使用主從同步復制的時候,沒有被完全復制(完全復制的消息會在HW(High water Mark之下))的信息不會被消費。 一個Broker若需要從非ISR狀態進入到ISR狀態前,會將其在HW之前的消息記錄給truncate掉,并嘗試跟上Master里的記錄。跟上后,將會恢復ISR狀態。

KAFKA的主節點選舉通過ZK中登記的序號決定,更細節可查看KAFKA同步復制模式選舉過程,以上為默認實現,不需修改,也無法修改

已確認的消息如果存在ISR狀態的副本的話,就不會丟失記錄

原Master掛掉后,新選出的Master不會丟棄HW之后的消息,新Master會將這些HW之后的副本再次發送給其余的副本。因此即使高水位信息沒有傳遞給新的Master副本也沒有問題。

ISR分區過少導致失去容災特性

默認配置下,ISR分區個數可以為1時依然可以寫數據。但當出現這種情況的時候,就失去了容災性。只要主分區掛掉,那么數據就丟失。

KAFKA有配置可以指定寫入時最少的ISR數量,少于特定值,就不再ACK。如一共三臺BROKER,我們可以指定ISR最少數量為2,那么只有1臺處于ISR狀態的話,COMMIT將無法執行。

是否設置該值,視具體情況而定,若無法容忍丟失,則設置該值為2,NAME 。追求可用性,則不設置。

個人建議設置為2,無論副本數量有多少

KAFKA如何處理網絡分區情況?

如果MASTER與其他的副本與ZK是聯通的,但是MASTER與其他副本之間出現了網絡分區,那么ISR就只能為1。

消息保存的策略的設置

建議保留消息的策略基于時間。如保留21天

客戶端宕機導致的消費位置丟失

KAFKA在分區中的消費位置由客戶端管控,其有可能沒有及時保存到KAFKA中,導致消費位置丟失。 若消費位置丟失,則消費可能從上一個保存的消費位置重新進行消費。所以在不能接受重復消息的系統需要自行定制對于消息的冪等處理

(死信是否會丟失?)

At Least Once

實際上我們對可靠消息系統的要求通常是At least Once,經過上述配置已經基本達到了At Least Once的要求

消息消費失敗的重試設置

需要設計一個死信隊列,消費失敗的消息需放入里面,以免影響后續其他消息消費

參考

總結

以上是生活随笔為你收集整理的kafka数据不丢失不重复_如何配置 KAFKA 使其消息不会丢失的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。