Kafka 可靠性和一致性

2021-09-24 21:51:45 字數 747 閱讀 6562

為了保證資料的可靠性,我們最少需要配置一下幾個引數:

1. producer 級別:

· acks=all(或者 request.required.acks=-1)

· 同時發生模式為同步 producer.type=sync:leader 在返回確認或錯誤響應之前,會等待所有同步副本都收到悄息

2. topic 級別:

· 設定副本數 replication.factor>=3

· min.insync.replicas>=2:可以決定在返回確認前至少有多少個副本能夠收到悄息,

生產者會一直重試直到訊息被成功提交

3. broker 級別:

· 關閉不完全的 leader 選舉,即 unclean.leader.election.enable=false;

引入 high water mark 機制:

只有 high water mark 以上的訊息才支援 consumer 讀取,而 high water mark 取決於 isr(in-sync replicas) 列表

裡面偏移量最小的分割槽, 這個很類似於木桶原理。

弊端:會導致 broker 間的訊息複製因為某些原因變慢,那麼訊息到達消費者的時間也會隨之變長(因為我們會先等待訊息複製完畢)。

延遲時間可以通過引數 replica.lag.time.max.ms 引數配置,它指定了副本在複製訊息時可被允許的最大延遲時間。

參考文件:

kafka資料可靠性和一致性保證

kafka資料可靠性和一致性保證 當producer向leader傳送資料時,可以通過request.required.acks引數來設定資料可靠性的級別 1 producer需要等待isr中的所有follower都確認接收到資料後才算一次傳送完成,可靠性最高。但是這樣也不能保證資料不丟失,比如當i...

kafka保證資料一致性和可靠性?

一致性定義 若某條訊息對client可見,那麼即使leader掛了,在新leader上資料依然可以被讀到。hw highwatermark client可以從leader讀到的最大msg offset,即對外可見的最大offset,hw max replica.offset 對於leader新收到的...

Kafka資料可靠性與一致性解析

每個partition會在磁碟記錄乙個recoverypoint,記錄已經flush到磁碟的最大offset。當broker fail 重啟時,會進行loadlogs。首先會讀取該partition的recoverypoint,找到包含recoverypoint的segment及以後的segment...