国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ZooKeeper 用的好好地,Kafka 為什么要拋棄 ZooKeeper?

這篇具有很好參考價值的文章主要介紹了ZooKeeper 用的好好地,Kafka 為什么要拋棄 ZooKeeper?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

ZooKeeper 的作用

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

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

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

ZooKeeper 用的好好地,Kafka 為什么要拋棄 ZooKeeper?

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

Kafka 就是強依賴于 ZooKeeper,沒有 ZooKeeper 的話 Kafka 都無法運行。

ZooKeeper 為 Kafka 提供了元數(shù)據(jù)的管理,例如一些 Broker 的信息、主題數(shù)據(jù)、分區(qū)數(shù)據(jù)等等。

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

ZooKeeper 用的好好地,Kafka 為什么要拋棄 ZooKeeper?

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

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

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

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

那為什么要拋棄 ZooKeeper

軟件架構(gòu)都是演進的,之所以要變更那肯定是因為出現(xiàn)了瓶頸。

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

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

你要說依賴 Netty 這種,那肯定是沒問題的。

但是 Kafka 的運行需要提供 ZooKeeper 集群,這其實有點怪怪的。

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

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

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

再看性能層面的問題。

ZooKeeper 有個特點,強一致性。

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

ZooKeeper 用的好好地,Kafka 為什么要拋棄 ZooKeeper?

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

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

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

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

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

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

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

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

所以 Kafka 需要去 ZooKeeper 。

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

沒了 Zookeeper 的 Kafka 就把元數(shù)據(jù)存儲到自己內(nèi)部了,利用之前的 Log 存儲機制來保存元數(shù)據(jù)。

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

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

然后還搞了個 KRaft 來實現(xiàn) Controller Quorum。

ZooKeeper 用的好好地,Kafka 為什么要拋棄 ZooKeeper?圖來自 confluent

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

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

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

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

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

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

最后

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

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

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

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

參考資料:文章來源地址http://www.zghlxwxcb.cn/news/detail-460915.html

  • https://www.confluent.io/blog/kafka-without-zookeeper-a-sneakpeek/
  • https://time.geekbang.org/column/article/253202
  • https://www.infoq.cn/article/PHF3gFjUTDhWmctg6kXe

到了這里,關(guān)于ZooKeeper 用的好好地,Kafka 為什么要拋棄 ZooKeeper?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • kafka為什么快

    消息發(fā)送 1、批量發(fā)送: Kafka 通過將多個消息打包成一個批次,減少了網(wǎng)絡(luò)傳輸和磁盤寫入的次數(shù),從而提高了消息的吞吐量和傳輸效率。 2、異步發(fā)送: 生產(chǎn)者可以異步發(fā)送消息,不必等待每個消息的確認,這大大提高了消息發(fā)送的效2.率 3、消息壓縮: 支持對消息進行壓縮,

    2024年02月02日
    瀏覽(18)
  • Kafka為什么這么快?

    Kafka 是一個基于發(fā)布-訂閱模式的消息系統(tǒng),它可以在多個生產(chǎn)者和消費者之間傳遞大量的數(shù)據(jù)。Kafka 的一個顯著特點是它的高吞吐率,即每秒可以處理百萬級別的消息。那么 Kafka 是如何實現(xiàn)這樣高得性能呢?本文將從七個方面來分析 Kafka 的速度優(yōu)勢。 零拷貝技術(shù) 僅可追加

    2024年02月11日
    瀏覽(26)
  • Kafka 為什么那么快?

    Kafka 為什么那么快?

    有人說:他曾在一臺配置較好的機子上對?Kafka?進行性能壓測,壓測結(jié)果是?Kafka?單個節(jié)點的極限處理能力接近每秒?2000萬?條消息,吞吐量達到每秒?600MB。 那 Kafka 為什么這么快?如何做到這個高的性能? 本篇文章主要從這 3 個角度來分析: 生產(chǎn)端 服務(wù)端? Broker 消費端

    2024年02月12日
    瀏覽(35)
  • kafka為什么如此之快?

    kafka為什么如此之快?

    天下武功,唯快不破。同樣的,kafka在消息隊列領(lǐng)域,也是非??斓?,這里的塊指的是kafka在單位時間搬運的數(shù)據(jù)量大小,也就是吞吐量,下圖是搬運網(wǎng)上的一個性能測試結(jié)果,在同步發(fā)送場景下,單機Kafka的吞吐量高達17.3w/s, 不愧是高吞吐量消息中間件的行業(yè)老大。 那究竟

    2024年02月06日
    瀏覽(22)
  • 面試題:Kafka 為什么那么快?

    面試題:Kafka 為什么那么快?

    有人說:他曾在一臺配置較好的機子上對 Kafka 進行性能壓測,壓測結(jié)果是 Kafka 單個節(jié)點的極限處理能力接近每秒 2000萬 條消息,吞吐量達到每秒 600MB。 那 Kafka 為什么這么快?如何做到這個高的性能? 本篇文章主要從這 3 個角度來分析: 生產(chǎn)端 服務(wù)端 Broker 消費端 先來看下

    2024年01月22日
    瀏覽(26)
  • kafka為什么盡量使用手動提交

    在 Kafka 中,消費者可以使用手動提交和自動提交兩種方式來管理消費偏移量(offset)。它們之間的區(qū)別如下: 1. 手動提交 offset: ? ?- 消費者通過調(diào)用 `commitSync()` 或 `commitAsync()` 方法手動提交消費偏移量。 ? ?- 手動提交 offset 需要顯式地指定要提交的分區(qū)和偏移量。 ? ?

    2024年02月15日
    瀏覽(19)
  • 48 | DMA:為什么Kafka這么快?

    48 | DMA:為什么Kafka這么快?

    過去幾年里,整個計算機產(chǎn)業(yè)界,都在嘗試不停地提升 I/O 設(shè)備的速度。把 HDD 硬盤換成 SSD 硬盤,我們?nèi)匀挥X得不夠快;用 PCI Express 接口的 SSD 硬盤替代 SATA 接口的 SSD 硬盤,我們還是覺得不夠快,所以,現(xiàn)在就有了傲騰(Optane)這樣的技術(shù)。 但是,無論 I/O 速度如何提升,

    2024年02月21日
    瀏覽(16)
  • 面試官問:kafka為什么如此之快?

    面試官問:kafka為什么如此之快?

    天下武功,唯快不破。同樣的,kafka在消息隊列領(lǐng)域,也是非??斓?,這里的塊指的是kafka在單位時間搬運的數(shù)據(jù)量大小,也就是吞吐量,下圖是搬運網(wǎng)上的一個性能測試結(jié)果,在同步發(fā)送場景下,單機Kafka的吞吐量高達17.3w/s,不愧是高吞吐量消息中間件的行業(yè)老大。 那究竟

    2024年02月07日
    瀏覽(27)
  • Kafka 的未來:為何我們要拋棄 ZooKeeper?

    Kafka 的未來:為何我們要拋棄 ZooKeeper?

    一、ZooKeeper 的核心功能 ZooKeeper 是一個廣泛使用的開源分布式協(xié)調(diào)服務(wù)框架,它在確保數(shù)據(jù)一致性方面表現(xiàn)出色,同時也可以作為一個輕量級的分布式存儲系統(tǒng)。它特別適合用來存儲那些需要多個系統(tǒng)共享的配置信息、集群的元數(shù)據(jù)等。ZooKeeper 提供了持久節(jié)點和臨時節(jié)點兩種

    2024年02月02日
    瀏覽(18)
  • 離線數(shù)倉中,為什么用兩個flume,一個kafka

    實時數(shù)倉中,為什么沒有零點漂移問題? 因為flink直接取的事件時間 用kafka是為了速度快,并且數(shù)據(jù)不丟,那為什么既用了kafkachannel,也用了kafka,而不只用kafkachannel呢? 因為需要削峰填谷 離線數(shù)倉中,為什么用兩個flume,一個kafka,直接用taildirsource,kafkachannel,hdfssink不行嗎?

    2024年02月14日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包