每個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,其餘為followerisr:所有不落後的2.producer只與leader互動,把資料寫入到leader中
3.followers從leader中拉取資料進行資料同步
4.consumer只從leader拉取資料
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...