日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

3天內不再提示

Kafka為什么要拋棄ZooKeeper?

jf_ro2CN3Fa ? 來源:yes的練級攻略 ? 2023-05-18 10:56 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

  • ZooKeeper 的作用
  • 那為什么要拋棄 ZooKeeper
    • 先來看看運維的層面的問題。
    • 再看性能層面的問題。
    • 基于 ZooKeeper 的性能問題 Kafka 之前就做了一些升級。
  • 所以沒了 Zookeeper 之后的 Kafka 的怎樣的?
  • 最后

在上個月 30 號, confluent 發(fā)布了一篇文章,文章上說在 Kafka 2.8 版本上將支持內部的 quorum 服務來替換 ZooKeeper 的工作。

2fe14634-f526-11ed-90ce-dac502259ad0.png

其實去年我寫的 Kafka 控制器事件處理全流程這篇文章已經提到這一點。

300b7116-f526-11ed-90ce-dac502259ad0.png

今天再稍微展開來說說。

ZooKeeper 的作用

ZooKeeper 是一個開源的分布式協調服務框架,你也可以認為它是一個可以保證一致性的分布式(小量)存儲系統(tǒng)。特別適合存儲一些公共的配置信息、集群的一些元數據等等。

它有持久節(jié)點和臨時節(jié)點,而臨時節(jié)點這個玩意再配合 Watcher 機制就很有用。

當創(chuàng)建臨時節(jié)點的客戶端與 ZooKeeper 斷連之后,這個臨時節(jié)點就會消失,并且訂閱了節(jié)點狀態(tài)變更的客戶端會收到這個節(jié)點狀態(tài)變更的通知。

302a5fcc-f526-11ed-90ce-dac502259ad0.png

所以集群中某一服務上線或者下線,都可以被檢測到。因此可以用來實現服務發(fā)現,也可以實現故障轉移的監(jiān)聽機制。

Kafka 就是強依賴于 ZooKeeper,沒有 ZooKeeper 的話 Kafka 都無法運行。ZooKeeper 為 Kafka 提供了元數據的管理,例如一些 Broker 的信息、主題數據、分區(qū)數據等等。

在每個 Broker 啟動的時候,都會和 ZooKeeper 進行交互,這樣 ZooKeeper 就存儲了集群中所有的主題、配置、副本等信息。

305c9258-f526-11ed-90ce-dac502259ad0.png

還有一些選舉、擴容等機制也都依賴 ZooKeeper 。

例如控制器的選舉:每個 Broker 啟動都會嘗試在 ZooKeeper 注冊/controller臨時節(jié)點來競選控制器,第一個創(chuàng)建/controller節(jié)點的 Broker 會被指定為控制器。

競爭失敗的節(jié)點也會依賴 watcher 機制,監(jiān)聽這個節(jié)點,如果控制器宕機了,那么其它 Broker 會繼續(xù)來爭搶,實現控制器的 failover。

從上面就可以得知 ZooKeeper 對 Kafka 來說很重要

基于 Spring Boot + MyBatis Plus + Vue & Element 實現的后臺管理系統(tǒng) + 用戶小程序,支持 RBAC 動態(tài)權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

  • 項目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 視頻教程:https://doc.iocoder.cn/video/

那為什么要拋棄 ZooKeeper

軟件架構都是演進的,之所以要變更那肯定是因為出現了瓶頸。

先來看看運維的層面的問題。

首先身為一個中間件,需要依賴另一個中間件,這就感覺有點奇怪。

你要說依賴 Netty 這種,那肯定是沒問題的。但是 Kafka 的運行需要提供 ZooKeeper 集群,這其實有點怪怪的。

就等于如果你公司要上 Kafka 就得跟著上 ZooKeeper ,被動了增加了運維的復雜度。

好比你去商場買衣服,要買個上衣,服務員說不單賣,要買就得買一套,這錢是不是多花了?

所以運維人員不僅得照顧 Kafka 集群,還得照顧 ZooKeeper 集群。

再看性能層面的問題。

ZooKeeper 有個特點,強一致性 。

如果 ZooKeeper 集群的某個節(jié)點的數據發(fā)生變更,則會通知其它 ZooKeeper 節(jié)點同時執(zhí)行更新,就得等著大家(超過半數)都寫完了才行,這寫入的性能就比較差了。

30933aec-f526-11ed-90ce-dac502259ad0.png

然后看到上面我說的小量 存儲系統(tǒng)了吧,一般而言,ZooKeeper 只適用于存儲一些簡單的配置或者是集群的元數據,不是真正意義上的存儲系統(tǒng)。

如果寫入的數據量過大,ZooKeeper 的性能和穩(wěn)定性就會下降,可能導致 Watch 的延時或丟失。

所以在 Kafka 集群比較大,分區(qū)數很多的時候,ZooKeeper 存儲的元數據就會很多,性能就差了。

還有,ZooKeeper 也是分布式的,也需要選舉,它的選舉也不快,而且發(fā)生選舉的那段時候是不提供服務的!

基于 ZooKeeper 的性能問題 Kafka 之前就做了一些升級。

例如以前 Consumer 的位移數據是保存在 ZooKeeper 上的,所以當提交位移或者獲取位移的時候都需要訪問 ZooKeeper ,這量一大 ZooKeeper 就頂不住。

所以后面引入了位移主題(Topic 是 __consumer_offsets),將位移的提交和獲取當做消息一樣來處理,存儲在日志中,避免了頻繁訪問 ZooKeeper 性能差的問題。

還有像一些大公司,可能要支持百萬分區(qū)級別,這目前的 Kafka 單集群架構下是無法支持穩(wěn)定運行的,也就是目前單集群可以承載的分區(qū)數有限。

所以,Kafka 需要去 ZooKeeper 。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現的后臺管理系統(tǒng) + 用戶小程序,支持 RBAC 動態(tài)權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

  • 項目地址:https://github.com/YunaiV/yudao-cloud
  • 視頻教程:https://doc.iocoder.cn/video/

所以沒了 Zookeeper 之后的 Kafka 的怎樣的?

沒了 Zookeeper 的 Kafka 就把元數據存儲到自己內部了,利用之前的 Log 存儲機制來保存元數據。

就和上面說到的位移主題一樣,會有一個元數據主題,元數據會像普通消息一樣保存在 Log 中。

所以元數據和之前的位移一樣,利用現有的消息存儲機制稍加改造來實現了功能,完美!

然后還搞了個 KRaft 來實現 Controller Quorum。

30b1f73e-f526-11ed-90ce-dac502259ad0.png圖來自 confluent

這個協議是基于 Raft 的,協議具體就不展開了,就理解為它能解決 Controller Leader 的選舉,并且讓所有節(jié)點達成共識。

在之前基于 Zookeeper 實現的單個 Controller 在分區(qū)數太大的時候還有個問題,故障轉移太慢了。

當 Controller 變更的時候,需要重新加載所有的元數據到新的 Controller 身上,并且需要把這些元數據同步給集群內的所有 Broker。

而 Controller Quorum 中的 Leader 選舉切換則很快,因為元數據都已經在 quorum 中同步了,也就是 quorum 的 Broker 都已經有全部了元數據,所以不需要重新加載元數據!

并且其它 Broker 已經基于 Log 存儲了一些元數據,所以只需要增量更新即可,不需要全量了。

這波改造下來就解決了之前元數據過多的問題,可以支持更多的分區(qū)!

最后

可能看到這里有人會說,那為何一開始不這么實現?

因為 ZooKeeper 是一個功能強大且經過驗證的工具,在早期利用它來實現一些功能,多簡單喲,都不需要自己實現。

要不是 ZooKeeper 的機制導致了這個瓶頸,也不可能會有這個改造的。

軟件就是這樣,沒必要重復造輪子,合適就好。


審核編輯 :李倩


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

    關注

    114

    文章

    17886

    瀏覽量

    195298
  • 存儲系統(tǒng)

    關注

    2

    文章

    439

    瀏覽量

    41956
  • kafka
    +關注

    關注

    0

    文章

    55

    瀏覽量

    5595

原文標題:總監(jiān)問我:Kafka 為什么要拋棄 ZooKeeper?

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    基于kafkazookeeper高可用集群的shell腳本使用步驟

    kafka+zookeeper高可用集群搭建shell腳本使用教程
    發(fā)表于 03-11 16:50

    Zookeeper源碼記錄

    《源碼_Zookeeper》_Zookeeper 服務端啟動流程
    發(fā)表于 06-13 09:06

    Linux 安裝zookeeper

    Zookeeper 了( sh zkServer.sh),啟動后檢查 Zookeeper 是否已經在服務,可以通過 netstat – ano 命令查看是否有你配置的 clientPort 端口號在監(jiān)聽
    發(fā)表于 07-05 06:18

    詳解zookeeper原理

    大數據生態(tài)之zookeeper(原理)
    發(fā)表于 10-22 08:44

    zookeeper的安裝

    zookeeper的集群搭建
    發(fā)表于 10-25 17:24

    Kafka集群環(huán)境的搭建

    1、環(huán)境版本版本:kafka2.11,zookeeper3.4注意:這里zookeeper3.4也是基于集群模式部署。2、解壓重命名tar -zxvf
    發(fā)表于 01-05 17:55

    Kafka文件存儲機制分析

    《p》Kafka是什么《/p》《p》Kafka是最初由Linkedin公司開發(fā),是一個分布式、分區(qū)的、多副本的、多訂閱者,基于zookeeper協調的分布式日志系統(tǒng)(也可以當做MQ系統(tǒng)),常見可以用
    發(fā)表于 09-28 15:40 ?0次下載

    分布式發(fā)布與訂閱系統(tǒng)Apache Kafka在即將發(fā)布的2.8版本

    分布式發(fā)布與訂閱系統(tǒng)Apache Kafka在即將發(fā)布的2.8版本,使用Kafka內部的Quorum控制器來取代ZooKeeper,因此用戶第一次可在完全不需要ZooKeeper的情況
    的頭像 發(fā)表于 05-31 09:58 ?2248次閱讀

    Kafka的概念及Kafka的宕機

    問題要從一次Kafka的宕機開始說起。 筆者所在的是一家金融科技公司,但公司內部并沒有采用在金融支付領域更為流行的 RabbitMQ ,而是采用了設計之初就為日志處理而生的 Kafka ,所以我一直
    的頭像 發(fā)表于 08-27 11:21 ?3156次閱讀
    <b class='flag-5'>Kafka</b>的概念及<b class='flag-5'>Kafka</b>的宕機

    Zookeeper使用注意事項

    ZAB (Zookeeper Atomic Broadcast 原子廣播協議) 協議是為分布式協調服務ZooKeeper專門設計的一種支持崩潰恢復的一致性協議。基于該協議,ZooKeeper 實現了一種主從模式的系統(tǒng)架構來保持集
    的頭像 發(fā)表于 07-25 09:01 ?1558次閱讀

    zookeeper+kafka on k8s環(huán)境部署

    Apache ZooKeeper 是一個集中式服務,用于維護配置信息、命名、提供分布式同步和提供組服務,ZooKeeper 致力于開發(fā)和維護一個開源服務器,以實現高度可靠的分布式協調,其實也可以認為就是一個分布式數據庫,只是結構比較特殊,是樹狀結構。官網文檔:
    的頭像 發(fā)表于 09-20 10:10 ?2120次閱讀

    zookeeper引入什么機制

    Zookeeper是一個開源的分布式協調服務,被廣泛應用于構建分布式系統(tǒng)和大規(guī)模集群的管理。作為一個分布式協調服務,Zookeeper引入了一系列機制來提供可靠的協調和一致性服務。在這篇文章中,我們
    的頭像 發(fā)表于 12-03 16:38 ?1512次閱讀

    zookeeperkafka的關系

    ZookeeperKafka是兩個不同的開源軟件,它們可以在分布式系統(tǒng)中發(fā)揮不同的作用。下面我將詳細說明它們之間的關系以及它們在分布式系統(tǒng)中的作用。 首先,讓我們先介紹一下Zookeeper
    的頭像 發(fā)表于 12-03 16:39 ?2627次閱讀

    Zookeeper的原理和作用

    Zookeeper是一個分布式協調服務,它提供了一組豐富的API和工具,用于構建分布式應用。它可以幫助開發(fā)人員解決分布式系統(tǒng)中的一些常見問題,如分布式鎖、配置管理、命名服務、分布式隊列等。在這
    的頭像 發(fā)表于 12-03 16:45 ?2536次閱讀

    zookeeper端口配置

    Zookeeper是一個開源的分布式協調服務,用于管理大規(guī)模分布式系統(tǒng)的配置信息、命名服務、同步和分布式鎖等。在使用Zookeeper時,我們需要對其端口進行配置,以確保其能夠正常運行和提供服務
    的頭像 發(fā)表于 12-04 10:37 ?3612次閱讀
    泉州市| 博白县| 盐边县| 自治县| 黑山县| 赣榆县| 江阴市| 岳池县| 临武县| 新建县| 建阳市| 台湾省| 卫辉市| 盈江县| 兴化市| 湖南省| 莱阳市| 冀州市| 荥经县| 潞城市| 贵溪市| 福州市| 乌拉特后旗| 图片| 河东区| 油尖旺区| 长沙市| 大姚县| 南汇区| 临澧县| 红安县| 马尔康县| 汉寿县| 项城市| 五原县| 嘉鱼县| 聂荣县| 德惠市| 高台县| 孝感市| 许昌县|