www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]筆者所在的是一家金融科技公司,但公司內(nèi)部并沒有采用在金融支付領(lǐng)域更為流行的 RabbitMQ ,而是采用了設(shè)計之初就為日志處理而生的 Kafka 。


-     Kafka 宕機引發(fā)的高可用思考     -

問題要從一次Kafka的宕機開始說起。

筆者所在的是一家金融科技公司,但公司內(nèi)部并沒有采用在金融支付領(lǐng)域更為流行的 RabbitMQ ,而是采用了設(shè)計之初就為日志處理而生的 Kafka ,所以我一直很好奇Kafka的高可用實現(xiàn)和保障。從Kafka部署后,系統(tǒng)內(nèi)部使用的Kafka一直運行穩(wěn)定,沒有出現(xiàn)不可用的情況。
但最近系統(tǒng)測試人員常反饋偶有Kafka消費者收不到消息的情況,登陸管理界面發(fā)現(xiàn)三個節(jié)點中有一個節(jié)點宕機掛掉了。但是按照高可用的理念,三個節(jié)點還有兩個節(jié)點可用怎么就引起了整個集群的消費者都接收不到消息呢?
要解決這個問題,就要從Kafka的高可用實現(xiàn)開始講起。

-     Kafka 的多副本冗余設(shè)計     -

不管是傳統(tǒng)的基于關(guān)系型數(shù)據(jù)庫設(shè)計的系統(tǒng),還是分布式的如 zookeeper 、 redis 、 Kafka 、 HDFS等等,實現(xiàn)高可用的辦法通常是采用冗余設(shè)計,通過冗余來解決節(jié)點宕機不可用問題。
首先簡單了解Kafka的幾個概念:

物理模型


因為一次 Kafka 宕機,終于搞透了 Kafka 高可用原理!
  • Broker (節(jié)點):Kafka服務(wù)節(jié)點,簡單來說一個 Broker 就是一臺Kafka服務(wù)器,一個物理節(jié)點。
  • Topic (主題):在Kafka中消息以主題為單位進行歸類,每個主題都有一個 Topic Name ,生產(chǎn)者根據(jù)Topic Name將消息發(fā)送到特定的Topic,消費者則同樣根據(jù)Topic Name從對應(yīng)的Topic進行消費。
  • Partition (分區(qū)):Topic (主題)是消息歸類的一個單位,但每一個主題還能再細(xì)分為一個或多個 Partition (分區(qū)),一個分區(qū)只能屬于一個主題。主題和分區(qū)都是邏輯上的概念,舉個例子,消息1和消息2都發(fā)送到主題1,它們可能進入同一個分區(qū)也可能進入不同的分區(qū)(所以同一個主題下的不同分區(qū)包含的消息是不同的),之后便會發(fā)送到分區(qū)對應(yīng)的Broker節(jié)點上。
  • Offset (偏移量):分區(qū)可以看作是一個只進不出的隊列(Kafka只保證一個分區(qū)內(nèi)的消息是有序的),消息會往這個隊列的尾部追加,每個消息進入分區(qū)后都會有一個偏移量,標(biāo)識該消息在該分區(qū)中的位置,消費者要消費該消息就是通過偏移量來識別。
其實,根據(jù)上述的幾個概念,是不是也多少猜到了Kafka的多副本冗余設(shè)計實現(xiàn)了?別急,咱繼續(xù)往下看。
在Kafka 0.8版本以前,是沒有多副本冗余機制的,一旦一個節(jié)點掛掉,那么這個節(jié)點上的所有 Partition的數(shù)據(jù)就無法再被消費。這就等于發(fā)送到Topic的有一部分?jǐn)?shù)據(jù)丟失了。
在0.8版本后引入副本記者則很好地解決宕機后數(shù)據(jù)丟失的問題。副本是以 Topic 中每個 Partition的數(shù)據(jù)為單位,每個Partition的數(shù)據(jù)會同步到其他物理節(jié)點上,形成多個副本。
每個 Partition 的副本都包括一個 Leader 副本和多個 Follower副本,Leader由所有的副本共同選舉得出,其他副本則都為Follower副本。在生產(chǎn)者寫或者消費者讀的時候,都只會與Leader打交道,在寫入數(shù)據(jù)后Follower就會來拉取數(shù)據(jù)進行數(shù)據(jù)同步。
就這么簡單?是的,基于上面這張多副本架構(gòu)圖就實現(xiàn)了Kafka的高可用。當(dāng)某個 Broker 掛掉了,甭?lián)?,這個 Broker 上的 Partition 在其他 Broker 節(jié)點上還有副本。你說如果掛掉的是 Leader 怎么辦?那就在 Follower中在選舉出一個 Leader 即可,生產(chǎn)者和消費者又可以和新的 Leader 愉快地玩耍了,這就是高可用。
你可能還有疑問,那要多少個副本才算夠用?Follower和Leader之間沒有完全同步怎么辦?一個節(jié)點宕機后Leader的選舉規(guī)則是什么?
直接拋結(jié)論:
多少個副本才算夠用? 副本肯定越多越能保證Kafka的高可用,但越多的副本意味著網(wǎng)絡(luò)、磁盤資源的消耗更多,性能會有所下降,通常來說副本數(shù)為3即可保證高可用,極端情況下將 replication-factor 參數(shù)調(diào)大即可。
Follower和Lead之間沒有完全同步怎么辦? Follower和Leader之間并不是完全同步,但也不是完全異步,而是采用一種 ISR機制( In-Sync Replica)。每個Leader會動態(tài)維護一個ISR列表,該列表里存儲的是和Leader基本同步的Follower。如果有Follower由于網(wǎng)絡(luò)、GC等原因而沒有向Leader發(fā)起拉取數(shù)據(jù)請求,此時Follower相對于Leader是不同步的,則會被踢出ISR列表。所以說,ISR列表中的Follower都是跟得上Leader的副本。
一個節(jié)點宕機后Leader的選舉規(guī)則是什么? 分布式相關(guān)的選舉規(guī)則有很多,像Zookeeper的 Zab 、 Raft 、 Viewstamped Replication 、微軟的 PacificA 等。而Kafka的Leader選舉思路很簡單,基于我們上述提到的 ISR列表,當(dāng)宕機后會從所有副本中順序查找,如果查找到的副本在ISR列表中,則當(dāng)選為Leader。另外還要保證前任Leader已經(jīng)是退位狀態(tài)了,否則會出現(xiàn)腦裂情況(有兩個Leader)。怎么保證?Kafka通過設(shè)置了一個controller來保證只有一個Leader。

-     Ack 參數(shù)決定了可靠程度     -

另外,這里補充一個面試考Kafka高可用必備知識點:request.required.asks 參數(shù)。
Asks這個參數(shù)是生產(chǎn)者客戶端的重要配置,發(fā)送消息的時候就可設(shè)置這個參數(shù)。該參數(shù)有三個值可配置:0、1、All 。

第一種是設(shè)為0 意思是生產(chǎn)者把消息發(fā)送出去之后,之后這消息是死是活咱就不管了,有那么點發(fā)后即忘的意思,說出去的話就不負(fù)責(zé)了。不負(fù)責(zé)自然這消息就有可能丟失,那就把可用性也丟失了。
第二種是設(shè)為1 意思是生產(chǎn)者把消息發(fā)送出去之后,這消息只要順利傳達給了Leader,其他Follower有沒有同步就無所謂了。存在一種情況,Leader剛收到了消息,F(xiàn)ollower還沒來得及同步Broker就宕機了,但生產(chǎn)者已經(jīng)認(rèn)為消息發(fā)送成功了,那么此時消息就丟失了。
設(shè)為1是Kafka的默認(rèn)配置 可見Kafka的默認(rèn)配置也不是那么高可用,而是對高可用和高吞吐量做了權(quán)衡折中。
第三種是設(shè)為All(或者-1) 意思是生產(chǎn)者把消息發(fā)送出去之后,不僅Leader要接收到,ISR列表中的Follower也要同步到,生產(chǎn)者才會任務(wù)消息發(fā)送成功。
進一步思考, Asks=All 就不會出現(xiàn)丟失消息的情況嗎?答案是否。當(dāng)ISR列表只剩Leader的情況下, Asks=All 相當(dāng)于 Asks=1 ,這種情況下如果節(jié)點宕機了,還能保證數(shù)據(jù)不丟失嗎?因此只有在 Asks=All并且有ISR中有兩個副本的情況下才能保證數(shù)據(jù)不丟失。

-     解決問題     -

繞了一大圈,了解了Kafka的高可用機制,終于回到我們一開始的問題本身, Kafka 的一個節(jié)點宕機后為什么不可用?
我在開發(fā)測試環(huán)境配置的 Broker 節(jié)點數(shù)是3, Topic 是副本數(shù)為3, Partition 數(shù)為6, Asks參數(shù)為1。

當(dāng)三個節(jié)點中某個節(jié)點宕機后,集群首先會怎么做?沒錯,正如我們上面所說的,集群發(fā)現(xiàn)有Partition的Leader失效了,這個時候就要從ISR列表中重新選舉Leader。如果ISR列表為空是不是就不可用了?并不會,而是從Partition存活的副本中選擇一個作為Leader,不過這就有潛在的數(shù)據(jù)丟失的隱患了。
所以,只要將Topic副本個數(shù)設(shè)置為和Broker個數(shù)一樣,Kafka的多副本冗余設(shè)計是可以保證高可用的,不會出現(xiàn)一宕機就不可用的情況(不過需要注意的是Kafka有一個保護策略,當(dāng)一半以上的節(jié)點不可用時Kafka就會停止)。那仔細(xì)一想,Kafka上是不是有副本個數(shù)為1的Topic?
問題出在了 __consumer_offset 上, __consumer_offset 是一個Kafka自動創(chuàng)建的 Topic,用來存儲消費者消費的 offset (偏移量)信息,默認(rèn) Partition數(shù)為50。而就是這個Topic,它的默認(rèn)副本數(shù)為1。如果所有的 Partition 都存在于同一臺機器上,那就是很明顯的單點故障了!當(dāng)將存儲 __consumer_offset 的Partition的Broker給Kill后,會發(fā)現(xiàn)所有的消費者都停止消費了。
這個問題怎么解決? 第一點 ,需要將 __consumer_offset 刪除,注意這個Topic時Kafka內(nèi)置的Topic,無法用命令刪除,我是通過將 logs 刪了來實現(xiàn)刪除。
第二點 ,需要通過設(shè)置 offsets.topic.replication.factor 為3來將 __consumer_offset 的副本數(shù)改為3。通過將 __consumer_offset 也做副本冗余后來解決某個節(jié)點宕機后消費者的消費問題。
最后,關(guān)于為什么 __consumer_offset的Partition會出現(xiàn)只存儲在一個Broker上而不是分布在各個Broker上感到困惑。

作者:JanusWoo



	

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉