精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

Kafka為什么要拋棄ZooKeeper?

jf_ro2CN3Fa ? 來源:yes的練級攻略 ? 2023-05-18 10:56 ? 次閱讀

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

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

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

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

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

今天再稍微展開來說說。

ZooKeeper 的作用

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

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

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

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

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

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

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

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

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

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

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

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

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

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

那為什么要拋棄 ZooKeeper

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

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

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

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

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

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

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

再看性能層面的問題。

ZooKeeper 有個特點,強一致性 。

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

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

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

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

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

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

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

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

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

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

所以,Kafka 需要去 ZooKeeper 。

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

  • 項目地址: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 的選舉,并且讓所有節點達成共識。

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

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

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

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

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

最后

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

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

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

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


審核編輯 :李倩


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

    關注

    112

    文章

    16203

    瀏覽量

    177405
  • 存儲系統
    +關注

    關注

    2

    文章

    404

    瀏覽量

    40834
  • kafka
    +關注

    關注

    0

    文章

    50

    瀏覽量

    5211

原文標題:總監問我:Kafka 為什么要拋棄 ZooKeeper?

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

收藏 人收藏

    評論

    相關推薦

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

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

    Zookeeper源碼記錄

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

    Linux 安裝zookeeper

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

    詳解zookeeper原理

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

    zookeeper的安裝

    zookeeper的集群搭建
    發表于 10-25 17:24

    Kafka基礎入門文檔

    kafka系統入門教程(原理、配置、集群搭建、Java應用、Kafka-manager)
    發表于 03-12 07:22

    Kafka集群環境的搭建

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

    Kafka文件存儲機制分析

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

    分布式發布與訂閱系統Apache Kafka在即將發布的2.8版本

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

    Kafka的概念及Kafka的宕機

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

    Zookeeper使用注意事項

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

    zookeeper+kafka on k8s環境部署

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

    zookeeper引入什么機制

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

    zookeeperkafka的關系

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

    Zookeeper的原理和作用

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