在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Kafka的概念及Kafka的宕機

阿銘linux ? 來源:掘金 ? 作者:JanusWoo ? 2021-08-27 11:21 ? 次閱讀

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

筆者所在的是一家金融科技公司,但公司內部并沒有采用在金融支付領域更為流行的 RabbitMQ ,而是采用了設計之初就為日志處理而生的 Kafka ,所以我一直很好奇Kafka的高可用實現和保障。從 Kafka 部署后,系統內部使用的 Kafka 一直運行穩定,沒有出現不可用的情況。

但最近系統測試人員常反饋偶有Kafka消費者收不到消息的情況,登陸管理界面發現三個節點中有一個節點宕機掛掉了。但是按照高可用的理念,三個節點還有兩個節點可用怎么就引起了整個集群的消費者都接收不到消息呢?

要解決這個問題,就要從 Kafka 的高可用實現開始講起。

Kafka 的多副本冗余設計

不管是傳統的基于關系型數據庫設計的系統,還是分布式的如 zookeeper 、 redis 、 Kafka 、 HDFS 等等,實現高可用的辦法通常是采用冗余設計,通過冗余來解決節點宕機不可用問題。首先簡單了解 Kafka 的幾個概念:

3898b0f4-f628-11eb-9bcf-12bb97331649.png

邏輯模型

38a3dfd8-f628-11eb-9bcf-12bb97331649.png

Broker (節點):Kafka 服務節點,簡單來說一個 Broker 就是一臺 Kafka 服務器,一個物理節點。

Topic (主題):在 Kafka 中消息以主題為單位進行歸類,每個主題都有一個 Topic Name ,生產者根據 Topic Name 將消息發送到特定的 Topic,消費者則同樣根據 Topic Name 從對應的 Topic 進行消費。

Partition (分區):Topic (主題)是消息歸類的一個單位,但每一個主題還能再細分為一個或多個 Partition (分區),一個分區只能屬于一個主題。主題和分區都是邏輯上的概念,舉個例子,消息1和消息2都發送到主題1,它們可能進入同一個分區也可能進入不同的分區(所以同一個主題下的不同分區包含的消息是不同的),之后便會發送到分區對應的Broker節點上。

Offset (偏移量):分區可以看作是一個只進不出的隊列(Kafka只保證一個分區內的消息是有序的),消息會往這個隊列的尾部追加,每個消息進入分區后都會有一個偏移量,標識該消息在該分區中的位置,消費者要消費該消息就是通過偏移量來識別。

38d4a6f4-f628-11eb-9bcf-12bb97331649.png

就這么簡單?是的,基于上面這張多副本架構圖就實現了 Kafka 的高可用。當某個 Broker 掛掉了,甭擔心,這個 Broker 上的 Partition 在其他 Broker 節點上還有副本。你說如果掛掉的是 Leader 怎么辦?那就在 Follower中在選舉出一個 Leader 即可,生產者和消費者又可以和新的 Leader 愉快地玩耍了,這就是高可用。

你可能還有疑問,那要多少個副本才算夠用?Follower 和 Leader 之間沒有完全同步怎么辦?一個節點宕機后 Leader 的選舉規則是什么?

直接拋結論:

多少個副本才算夠用?

副本肯定越多越能保證 Kafka 的高可用,但越多的副本意味著網絡、磁盤資源的消耗更多,性能會有所下降,通常來說副本數為3即可保證高可用,極端情況下將 replication-factor 參數調大即可。

Follower 和 Lead 之間沒有完全同步怎么辦?

Follower 和 Leader 之間并不是完全同步,但也不是完全異步,而是采用一種 ISR機制( In-Sync Replica)。每個Leader會動態維護一個ISR列表,該列表里存儲的是和Leader基本同步的Follower。如果有 Follower 由于網絡、GC 等原因而沒有向 Leader 發起拉取數據請求,此時 Follower 相對于 Leader 是不同步的,則會被踢出 ISR 列表。所以說,ISR 列表中的 Follower 都是跟得上 Leader 的副本。

一個節點宕機后 Leader 的選舉規則是什么?

分布式相關的選舉規則有很多,像 Zookeeper的 Zab 、 Raft、 Viewstamped Replication、微軟的 PacificA 等。而 Kafka 的 Leader 選舉思路很簡單,基于我們上述提到的 ISR 列表,當宕機后會從所有副本中順序查找,如果查找到的副本在ISR列表中,則當選為Leader。另外還要保證前任Leader已經是退位狀態了,否則會出現腦裂情況(有兩個Leader)。怎么保證?Kafka 通過設置了一個 controller 來保證只有一個 Leader。

Ack 參數決定了可靠程度

另外,這里補充一個面試考Kafka高可用必備知識點:request.required.asks 參數。

Asks 這個參數是生產者客戶端的重要配置,發送消息的時候就可設置這個參數。該參數有三個值可配置:0、1、All 。

第一種是設為0,意思是生產者把消息發送出去之后,之后這消息是死是活咱就不管了,有那么點發后即忘的意思,說出去的話就不負責了。不負責自然這消息就有可能丟失,那就把可用性也丟失了。

第二種是設為1,意思是生產者把消息發送出去之后,這消息只要順利傳達給了Leader,其他Follower有沒有同步就無所謂了。存在一種情況,Leader剛收到了消息,Follower還沒來得及同步Broker就宕機了,但生產者已經認為消息發送成功了,那么此時消息就丟失了。

設為1是Kafka的默認配置,可見Kafka的默認配置也不是那么高可用,而是對高可用和高吞吐量做了權衡折中。

第三種是設為All(或者-1)

意思是生產者把消息發送出去之后,不僅Leader要接收到,ISR列表中的Follower也要同步到,生產者才會任務消息發送成功。

進一步思考, Asks=All 就不會出現丟失消息的情況嗎?答案是否。當ISR列表只剩Leader的情況下, Asks=All 相當于 Asks=1 ,這種情況下如果節點宕機了,還能保證數據不丟失嗎?因此只有在 Asks=All 并且有ISR中有兩個副本的情況下才能保證數據不丟失。

解決問題

繞了一大圈,了解了Kafka的高可用機制,終于回到我們一開始的問題本身, Kafka 的一個節點宕機后為什么不可用?

我在開發測試環境配置的 Broker 節點數是3, Topic 是副本數為3, Partition 數為6, Asks 參數為1。

當三個節點中某個節點宕機后,集群首先會怎么做?沒錯,正如我們上面所說的,集群發現有Partition的Leader失效了,這個時候就要從ISR列表中重新選舉Leader。如果ISR列表為空是不是就不可用了?并不會,而是從Partition存活的副本中選擇一個作為Leader,不過這就有潛在的數據丟失的隱患了。

所以,只要將Topic副本個數設置為和Broker個數一樣,Kafka的多副本冗余設計是可以保證高可用的,不會出現一宕機就不可用的情況(不過需要注意的是Kafka有一個保護策略,當一半以上的節點不可用時Kafka就會停止)。那仔細一想,Kafka上是不是有副本個數為1的Topic?

問題出在了 __consumer_offset 上, __consumer_offset 是一個 Kafka 自動創建的 Topic,用來存儲消費者消費的 offset (偏移量)信息,默認 Partition 數為50。而就是這個Topic,它的默認副本數為1。如果所有的 Partition 都存在于同一臺機器上,那就是很明顯的單點故障了!當將存儲 __consumer_offset 的 Partition 的 Broker 給 Kill 后,會發現所有的消費者都停止消費了。這個問題怎么解決?

第一點 ,需要將 __consumer_offset 刪除,注意這個Topic時Kafka內置的Topic,無法用命令刪除,我是通過將 logs 刪了來實現刪除。

第二點 ,需要通過設置 offsets.topic.replication.factor 為3來將 __consumer_offset 的副本數改為3。通過將 __consumer_offset 也做副本冗余后來解決某個節點宕機后消費者的消費問題。

最后,關于為什么 __consumer_offset 的 Partition 會出現只存儲在一個 Broker 上而不是分布在各個 Broker 上感到困惑。

作者:JanusWoo

來源:https://juejin.im/post/6874957625998606344

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • ISR
    ISR
    +關注

    關注

    0

    文章

    38

    瀏覽量

    14471
  • HDFS
    +關注

    關注

    1

    文章

    30

    瀏覽量

    9641
  • kafka
    +關注

    關注

    0

    文章

    52

    瀏覽量

    5243
  • zookeeper
    +關注

    關注

    0

    文章

    34

    瀏覽量

    3712

原文標題:探究Kafka高可用實現

文章出處:【微信號:aming_linux,微信公眾號:阿銘linux】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    華為云 FlexusX 實例下的 Kafka 集群部署實踐與性能優化

    前言 華為云 FlexusX 實例,以創新的柔性算力技術,為 Kafka 集群部署帶來前所未有的性能飛躍。其靈活的 CPU 與內存配比,結合智能調度與加速技術,讓 Kafka 在高并發場景下依然
    的頭像 發表于 01-07 17:23 ?186次閱讀
    華為云 FlexusX 實例下的 <b class='flag-5'>Kafka</b> 集群部署實踐與性能優化

    docker 部署 kafka 及 ui 搭建

    建站、開發??測試環境、游戲服務器、音視頻服務等中低負載場景。 1.2 什么是 kafka 原文鏈接:https
    的頭像 發表于 01-03 09:30 ?158次閱讀
    docker 部署 <b class='flag-5'>kafka</b> 及 ui 搭建

    寶藏級微服務架構工具合集

    寶藏級熱門微服務架構工具包含Spring Boot、Eclipse Vert.X、Kubernetes、Tyk、RabbitMQ、Apache Kafka等。其中,Spring Boot簡化了微服
    的頭像 發表于 12-21 16:33 ?227次閱讀

    超詳細“零”基礎kafka入門篇

    響應數據流的實時流應用程序 要了解Kafka如何做這些事情,讓我們深入探討Kafka的能力。 (3)首先是幾個概念
    的頭像 發表于 12-18 09:50 ?948次閱讀
    超詳細“零”基礎<b class='flag-5'>kafka</b>入門篇

    OpenAI就ChatGPT宕機事件致歉

    近日,全球領先的AI研究機構OpenAI遭遇了一次重大的服務中斷事件,其備受歡迎的聊天機器人ChatGPT在全球范圍內出現了宕機現象。與此同時,Sora及相關的API服務也受到了波及,無法正常運作
    的頭像 發表于 12-16 09:47 ?452次閱讀

    Kafka高性能背后的技術原理

    Kafka 是一款性能非常優秀的消息隊列,每秒處理的消息體量可以達到千萬級別。
    的頭像 發表于 10-23 09:37 ?422次閱讀
    <b class='flag-5'>Kafka</b>高性能背后的技術原理

    諧波的概念及應用

    本文簡單介紹了諧波的概念及應用。
    的頭像 發表于 10-18 14:14 ?685次閱讀
    諧波的<b class='flag-5'>概念及</b>應用

    華為云分布式消息服務 DMS 9 月新動態上線啦!

    【摘要】 RocketMQ 5.X 專業版、kafka 監控大屏、CloudPond 部署等多項特性,一睹為快! 華為云分布式消息服務DMS是完全托管的消息隊列服務,可完全兼容業界主流的 Kafka
    的頭像 發表于 10-15 09:54 ?503次閱讀
    華為云分布式消息服務 DMS 9 月新動態上線啦!

    納尼?自建K8s集群日志收集還能通過JMQ保存到JES

    作者:京東科技 劉恩浩 一、背景 基于K8s集群的私有化交付方案中,日志收集采用了ilogtail+logstash+kafka+es方案,其中ilogtail負責日志收集,logstash負責對數
    的頭像 發表于 09-30 14:45 ?243次閱讀

    S參數的概念及應用

    電子發燒友網站提供《S參數的概念及應用.pdf》資料免費下載
    發表于 08-12 14:29 ?0次下載

    繼電器電感的基本概念及分類

    重要的影響。 一、繼電器電感的基本概念 電感的定義 電感是指導體在磁場中運動時,由于電磁感應作用而產生的電動勢。電感的大小與導體的長度、截面積、形狀以及磁場的強度有關。 電感的單位 電感的單位是亨利(H),常用的單位還有毫亨
    的頭像 發表于 07-24 09:41 ?734次閱讀

    數控機床的概念及用途有哪些

    的加工任務。數控機床具有高效率、高精度、高可靠性等特點,廣泛應用于各個制造領域。 數控機床的概念 數控機床是一種高度自動化的機床,其核心是數控系統。數控系統由輸入設備、控制器、驅動器和執行機構組成。輸入設備將加工程序以數字形式輸入到控制器,控制器根據程序指令控制驅動
    的頭像 發表于 06-07 11:23 ?2607次閱讀

    萬用表的基本概念及結構組成

    在電子測試領域,萬用表被譽為“全能戰士”。其強大的功能和廣泛的應用使其成為電子工程師、維修人員和技術人員不可或缺的測量工具。本文將詳細介紹萬用表的基本概念、結構組成以及應用,帶您領略萬用表的獨特魅力。
    的頭像 發表于 05-10 15:05 ?1770次閱讀

    面試官:Kafka會丟消息嗎?

    許多開發人員普遍認為,Kafka 的設計本身就能保證不會丟失消息。然而,Kafka 架構和配置的細微差別會導致消息的丟失。我們需要了解它如何以及何時可能丟失消息,并防止此類情況的發生。
    的頭像 發表于 04-29 17:32 ?1078次閱讀
    面試官:<b class='flag-5'>Kafka</b>會丟消息嗎?

    Redis流與Kafka相比如何?

    我們先來看看Kafka的基本架構。基本的數據結構是主題。它是一個按時間排序的記錄序列,只需追加。使用這種數據結構的好處在Jay Kreps的經典博文The Log中得到了很好的描述。
    的頭像 發表于 02-21 16:09 ?512次閱讀
    Redis流與<b class='flag-5'>Kafka</b>相比如何?
    主站蜘蛛池模板: 巨乳色在线观看 | 精品一区二区在线观看 | 特级毛片aaaa免费观看 | 最新欧美精品一区二区三区 | 亚洲偷图色综合色就色 | 国产亚洲卡二卡3卡4卡乱码 | 女性一级全黄生活片在线播放 | 激情福利视频 | 黄色在线网站视频 | 毛片官网| 黄黄网址| 天堂网2021天堂手机版 | 大香线蕉97久久 | 91大神视频在线播放 | 手机成人在线视频 | 永久免费看的啪啪网站 | 五月天丁香婷婷开心激情五月 | 特级全毛片 | 婷婷五月在线视频 | 色老头影院 | 一级做a爰片久久毛片鸭王 一级做a爰片久久毛片一 | 日本一本在线视频 | 亚洲一级毛片免费观看 | 国产精品一区在线播放 | 成人最新午夜免费视频 | 日韩一级片免费在线观看 | 黄色网页在线观看 | 国产一级特黄aaa大片 | 免费观看四虎精品国产永久 | 成人性欧美丨区二区三区 | 老色批午夜免费视频网站 | 免费看一毛一级毛片视频 | h网站在线 | 欧美三级第一页 | videos另类重口tv | 久久99久久精品免费思思6 | 国产国产人免费人成成免视频 | 伊人福利网 | 四虎国产精品视频免费看 | 大尺度视频在线 | 丁香婷婷色 |