注:ISR與OSR列表數據是存儲在Zookeeper的Partition中的(一個Topic可能會配置多個partition)。
一、Kafka副本
Kafka中主題的每個Partition有一個預寫式日志文件,每個Partition都由一系列有序的、不可變的消息組成,這些消息被連續(xù)的追加到Partition中,Partition中的每個消息都有一個連續(xù)的序列號叫做offset,
確定它在分區(qū)日志中唯一的位置。
Kafka每個topic的partition有N個副本,其中N是topic的復制因子。Kafka通過多副本機制實現故障自動轉移,當Kafka集群中一個Broker失效情況下仍然保證服務可用。在Kafka中發(fā)生復制時確保partition的預寫式日志有序地寫到其他節(jié)點上。N個replicas中。其中一個replica為leader,其他都為follower,leader處理partition的所有讀寫請求,與此同時,follower會被動定期地去復制leader上的數據。
Kafka必須提供數據復制算法保證,如果leader發(fā)生故障或掛掉,一個新leader被選舉并接收客戶端的消息成功寫入。Kafka確保從同步副本列表中選舉一個副本為leader,或者換句話說,follower追趕leader數據。leader負責維護和跟蹤ISR中所有follower滯后狀態(tài)。當生產者發(fā)送一條消息到Broker,leader寫入消息并復制到所有follower。消息提交之后才被成功復制到所有的同步副本。消息復制延遲受最慢的follower限制,重要的是快速檢測慢副本,如果follower”落后”太多或者失效,leader將會把它從replicas從ISR移除。
二、Partition 中 Follower 追上 Leader 的含義
Kafka中每個partition的follower沒有“趕上”leader的日志可能會從同步副本列表中移除。下面用一個例子解釋一下“追趕”到底是什么意思。請看一個例子:主題名稱為foo 1 partition 3 replicas。假如partition的replication分布在Brokers 1、2和3上,并且Broker 3消息已經成功提交。同步副本列表中1為leader、2和3為follower。假設replica.lag.max.messages設置為4,表明只要follower落后leader不超過3,就不會從同步副本列表中移除。replica.lag.time.max設置為500 ms,表明只要follower向leader發(fā)送請求時間間隔不超過500 ms,就不會被標記為死亡,也不會從同步副本列中移除。
下面看看,生產者發(fā)送下一條消息寫入leader,與此同時follower Broker 3 GC暫停,如下圖所示:
直到follower Broker 3從同步副本列表中移除或追趕上leader log end offset,最新的消息才會認為提交。注意,因為follower Broker 3小于replica.lag.max.messages= 4落后于leader Broker 1,Kafka不會從同步副本列表中移除。在這種情況下,這意味著follower Broker 3需要迎頭追趕上知道offset = 6,如果是,那么它完全“趕上” leader Broker 1 log end offset。讓我們假設代理3出來的GC暫停在100 ms和追趕上領袖的日志結束偏移量。在這種狀態(tài)下,下面partition日志會看起來像這樣
三、是什么原因導致分區(qū)的 Follower 與 Leader 不同步
一個副本不同步Leader有如下幾個原因:
自我介紹一下,小編13年上海交大畢業(yè),曾經在小公司待過,也去過華為、OPPO等大廠,18年進入阿里一直到現在。
深知大多數Java工程師,想要提升技能,往往是自己摸索成長或者是報班學習,但對于培訓機構動則幾千的學費,著實壓力不小。自己不成體系的自學效果低效又漫長,而且極易碰到天花板技術停滯不前!
因此收集整理了一份《2024年Java開發(fā)全套學習資料》,初衷也很簡單,就是希望能夠幫助到想自學提升又不知道該從何學起的朋友,同時減輕大家的負擔。
既有適合小白學習的零基礎資料,也有適合3年以上經驗的小伙伴深入學習提升的進階課程,基本涵蓋了95%以上Java開發(fā)知識點,真正體系化!
由于文件比較大,這里只是將部分目錄大綱截圖出來,每個節(jié)點里面都包含大廠面經、學習筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且后續(xù)會持續(xù)更新
如果你覺得這些內容對你有幫助,可以添加V獲?。簐ip1024b (備注Java)
總結:心得體會
既然選擇這個行業(yè),選擇了做一個程序員,也就明白只有不斷學習,積累實戰(zhàn)經驗才有資格往上走,拿高薪,為自己,為父母,為以后的家能有一定的經濟保障。
學習時間都是自己擠出來的,短時間或許很難看到效果,一旦堅持下來了,必然會有所改變。不如好好想想自己為什么想進入這個行業(yè),給自己內心一個答案。
面試大廠,最重要的就是夯實的基礎,不然面試官隨便一問你就涼了;其次會問一些技術原理,還會看你對知識掌握的廣度,最重要的還是你的思路,這是面試官比較看重的。
最后,上面這些大廠面試真題都是非常好的學習資料,通過這些面試真題能夠看看自己對技術知識掌握的大概情況,從而能夠給自己定一個學習方向。包括上面分享到的學習指南,你都可以從學習指南里理順學習路線,避免低效學習。
大廠Java架構核心筆記(適合中高級程序員閱讀):
一個人可以走的很快,但一群人才能走的更遠。不論你是正從事IT行業(yè)的老鳥或是對IT行業(yè)感興趣的新人,都歡迎掃碼加入我們的的圈子(技術交流、學習資源、職場吐槽、大廠內推、面試輔導),讓我們一起學習成長!文章來源:http://www.zghlxwxcb.cn/news/detail-860624.html
歡迎掃碼加入我們的的圈子(技術交流、學習資源、職場吐槽、大廠內推、面試輔導),讓我們一起學習成長!**
[外鏈圖片轉存中…(img-6cm4n7zo-1712651137023)]文章來源地址http://www.zghlxwxcb.cn/news/detail-860624.html
到了這里,關于Kafka 的 replica 同步機制(ISR與OSR列表數據相互轉換)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!