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

2021-08-16 02:55:15 字數 1236 閱讀 5871

每個partition會在磁碟記錄乙個recoverypoint, 記錄已經flush到磁碟的最大offset。當broker fail 重啟時,會進行loadlogs。 首先會讀取該partition的recoverypoint,找到包含recoverypoint的segment及以後的segment, 這些segment就是可能沒有 完全flush到磁碟segments。然後呼叫segment的recover,重新讀取各個segment的msg,並重建索引

優點

1.以segment為單位管理partition資料,方便資料生命週期的管理,刪除過期資料簡單

2.在程式崩潰重啟時,加快recovery速度,只需恢復未完全flush到磁碟的segment

3.通過index中offset與物理偏移對映,用二分查詢能快速定位msg,並且通過分多個segment,每個index檔案很小,查詢速度更快。

1.partition的多個replica中乙個為leader,其餘為follower

2.producer只與leader互動,把資料寫入到leader中

3.followers從leader中拉取資料進行資料同步

4.consumer只從leader拉取資料

isr:所有不落後的replica集合, 不落後有兩層含義:距離上次fetchrequest的時間不大於某乙個值或落後的訊息數不大於某乙個值,leader失敗後會從isr中選取乙個follower做leader

關於replica複製詳解請移步:kafka副本同步機制理解

當producer向leader傳送資料時,可以通過acks引數設定資料可靠性的級別

一致性定義:若某條訊息對consumer可見,那麼即使leader宕機了,在新leader上資料依然可以被讀到

這樣就保證了如果leader broker失效,該訊息仍然可以從新選舉的leader中獲取。對於來自內部broker的讀取請求,沒有hw的限制。同時,follower也會維護乙份自己的hw,folloer.hw = min(leader.hw, follower.offset)

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

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

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

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

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

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