<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          圖解Kafka中的基本概念

          共 1770字,需瀏覽 4分鐘

           ·

          2020-08-21 18:03


          本文公眾號來源:草捏子
          作者:草捏子
          本文已收錄至我的GitHub

          本次將學(xué)習(xí)Kafka中的基本概念。首先我們回顧下在消息系統(tǒng)的使用場景中有三種角色分別是生產(chǎn)者消息系統(tǒng)消費者,其中生產(chǎn)者負(fù)責(zé)產(chǎn)生消息和發(fā)送消息到消息系統(tǒng),而消息系統(tǒng)將為消費者提供消息用于處理,如下圖。

          Kafka是基于發(fā)布/訂閱模式的消息系統(tǒng),如下圖。生產(chǎn)者會將消息推送到Kafka中的某個Topic上。引入Topic的目的則是為了對消息進(jìn)行分類,這樣消費者就可以根據(jù)需要訂閱相應(yīng)的Topic獲取消息。

          雖然Kafka這樣已經(jīng)能開始工作了,但緊接著又面臨單點問題。而為了解決單點問題,Kafka引入了Broker的概念。一個Broker是一個Kafka實例,而一臺機(jī)器上可運行多個Broker,這里我們認(rèn)為一臺機(jī)器上只有一個Kafka實例。多個Broker將形成一個Kafka集群,而Topic也可指定副本數(shù)量,作為多個副本位于多臺機(jī)器上。Kafka使用ZooKeeper在多個副本中選舉出一個Leader,其他副本將作為Follower。Leaer主要負(fù)責(zé)讀寫消息,也就是和生產(chǎn)者、消費者打交道,同時將消息同步寫到其他副本中。當(dāng)有Broker失效時,如果Topic沒有了Leader,則會重新選舉出新的Leader,從而解決單點問題。

          引入Broker和副本后解決了單點問題,接著面對的是性能問題,對于單個Topic來說,只有Leader所在的Broker與生產(chǎn)者、消費者進(jìn)行通信,這樣吞吐量將受到Broker所在的機(jī)器限制。那么如何提高吞吐量。Kafka將Topic拆分成多個分區(qū),也就是將消息進(jìn)行劃分,類似數(shù)據(jù)庫的分庫,這樣起到了負(fù)載均衡的作用,可不受單機(jī)的限制。如下圖,生產(chǎn)者A分別往TopicA的分區(qū)0和分區(qū)1寫消息,而消費者A、B則也從分區(qū)0、1獲取消息。這里注意下,在不同分區(qū)存儲的消息也是不同的,和副本的概念要分清楚。

          從上圖中我們可看到消費者A在消費TopicA時分別從分區(qū)0、分區(qū)1中獲取消息,為了進(jìn)一步提高吞吐量,Kafka引入了消費組的概念,將消費者A拆分成多個消費者,從而形成一個消費組。我們可以這樣理解,消費者A是一個應(yīng)用A實例,為了提高消費的吞吐量,我們多部署了幾個消費者A實例,這樣就有多個消費者形成一個消費組,但干的都是應(yīng)用A做的事,需要與消費者B(不同的應(yīng)用)區(qū)分開。一般設(shè)置消費組的消費者數(shù)與分區(qū)數(shù)一致,這是為了一個消費者能負(fù)責(zé)一個分區(qū),提高效率。如果消費組的消費者數(shù)量小于分區(qū)數(shù),則會出現(xiàn)一個消費者負(fù)責(zé)多個分區(qū)。而如果消費組的消費者數(shù)量大于分區(qū)數(shù),則會出現(xiàn)有消費者分不到分區(qū),造成浪費。所以一般保持一致。為了簡潔,且消費組B和消費組A類似,所以下圖未將消費組B畫出。

          Kafka中的基本概念就是以上這些:生產(chǎn)者、消費者、Topic、Broker、副本、分區(qū)和消息組。最后為了大家更好的理解分區(qū)的概念,再畫一張細(xì)節(jié)圖。

          一個分區(qū)可以看做是一個單獨的隊列,生產(chǎn)者根據(jù)策略將消息寫入對于的分區(qū),策略有三種:一、直接指定分區(qū);二、如果未指定分區(qū),則根據(jù)消息的key,通過哈希函數(shù)指定分區(qū);三、如果沒有key,則輪詢分區(qū)。這里想強調(diào)的是分區(qū)中的數(shù)據(jù)是不同的,一條消息只會進(jìn)入一個分區(qū)。而消費組中的消費者則會根據(jù)偏移量去分區(qū)中取得相應(yīng)的消息進(jìn)行消費處理。


          各類知識點總結(jié)

          下面的文章都有對應(yīng)的原創(chuàng)精美PDF,在持續(xù)更新中,可以來找我催更~

          掃碼或者微信搜Java3y?免費領(lǐng)取原創(chuàng)思維導(dǎo)圖、精美PDF。在公眾號回復(fù)「888」領(lǐng)取,PDF內(nèi)容純手打有任何不懂歡迎來問我。


          原創(chuàng)電子書

          原創(chuàng)思維導(dǎo)圖


          我是三歪,一個想要變強的男人,感謝大家的點贊收藏和轉(zhuǎn)發(fā),下期見。
          瀏覽 53
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  看屄屄视频 | 日韩A级视频 | 99久久人妻无码中文字幕系列 | 亚洲影院第一页 | 撸一撸AV|