<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    歡迎光臨郝學武的blog。

    kafka概念備忘

    Posted on 2014-01-08 11:58 陜西BOY 閱讀(383) 評論(0)  編輯  收藏 所屬分類: kafka

    Kafka is a distributed, partitioned, replicated commit log service. 它提供了類似于JMS的特性,但是在設計實現上完全不同,此外它并不是JMS規范的實現.

        kafka對消息保存時根據Topic進行歸類,發送消息者成為Producer,消息接收者成為Consumer;此外kafka集群有多個kafka實例組成,每個實例(server)稱為broker.

        無論是kafka集群,還是producer和consumer都依賴于zookeeper來保證系統可用性以及保存一些meta信息.

     

    (摘自官網) 

        Topics/logs

        一個Topic可以認為是一類消息,每個topic將被分成多個partition(區),每個partition在存儲層面是append log文件.任何發布到此partition的消息都會直接追加到log文件的尾部,每條消息在文件中的位置稱為offset(偏移量),offset為一個long型數字,它唯一的標記一條消息.kafka并沒有提供其他額外的索引機制來存儲offset,因為在kafka中幾乎不允許對消息進行"隨機讀-寫".



    (摘自官網) 

        kafka和JMS實現(activeMQ)不同的是:即使消息被消費,消息仍然不會被立即刪除.日志文件將會根據broker中的配置要求,保留一定的時間之后刪除;比如log文件保留2天,那么兩天后,文件會被清除,無論其中的消息是否被消費.kafka通過這種簡單的手段,來釋放磁盤空間,以及減少消息消費之后對文件內容改動的磁盤IO開支.

        對于consumer而言,它需要保存消費消息的offset,對于offset的保存和使用,有consumer來控制;當consumer正常消費消息時,offset將會"線性"的向前驅動,即消息將依次順序被消費.事實上consumer可以使用任意順序消費消息,它只需要將offset重置為任意值..(offset將會保存在zookeeper中,參見下文)

        kafka集群幾乎不需要維護任何consumer和producer狀態信息,這些信息有zookeeper保存;因此producer和consumer的客戶端實現非常輕量級,它們可以隨意離開,而不會對集群造成額外的影響.

        partitions的設計目的有多個.最根本原因是kafka基于文件存儲.通過分區,可以將日志內容分散到多個server上,來避免文件尺寸達到單機磁盤的上限,每個partiton都會被當前server(kafka實例)保存;可以將一個topic切分多任意多個partitions,來消息保存/消費的效率.此外越多的partitions意味著可以容納更多的consumer,有效提升并發消費的能力.(具體原理參見下文).

        Distribution

        一個Topic的多個partitions,被分布在kafka集群中的多個server上;每個server(kafka實例)負責partitions中消息的讀寫操作;此外kafka還可以配置partitions需要備份的個數(replicas),每個partition將會被備份到多臺機器上,以提高可用性.

        基于replicated方案,那么就意味著需要對多個備份進行調度;每個partition都有一個server為"leader";leader負責所有的讀寫操作,如果leader失效,那么將會有其他follower來接管(成為新的leader);follower只是單調的和leader跟進,同步消息即可..由此可見作為leader的server承載了全部的請求壓力,因此從集群的整體考慮,有多少個partitions就意味著有多少個"leader",kafka會將"leader"均衡的分散在每個實例上,來確保整體的性能穩定.

        Producers

        Producer將消息發布到指定的Topic中,同時Producer也能決定將此消息歸屬于哪個partition;比如基于"round-robin"方式或者通過其他的一些算法等.

        Consumers

        本質上kafka只支持Topic.每個consumer屬于一個consumer group;反過來說,每個group中可以有多個consumer.發送到Topic的消息,只會被訂閱此Topic的每個group中的一個consumer消費.

        如果所有的consumer都具有相同的group,這種情況和queue模式很像;消息將會在consumers之間負載均衡.

        如果所有的consumer都具有不同的group,那這就是"發布-訂閱";消息將會廣播給所有的消費者.



    (摘自官網) 

        在kafka中,一個partition中的消息只會被group中的一個consumer消費;每個group中consumer消息消費互相獨立;我們可以認為一個group是一個"訂閱"者,一個Topic中的每個partions,只會被一個"訂閱者"中的一個consumer消費,不過一個consumer可以消費多個partitions中的消息.kafka只能保證一個partition中的消息被某個consumer消費時,消息是順序的.事實上,從Topic角度來說,消息仍不是有序的.

        kafka的設計原理決定,對于一個topic,同一個group中不能有多于partitions個數的consumer同時消費,否則將意味著某些consumer將無法得到消息.

        Guarantees

        1) 發送到partitions中的消息將會按照它接收的順序追加到日志中

        2) 對于消費者而言,它們消費消息的順序和日志中消息順序一致.

        3) 如果Topic的"replication factor"為N,那么允許N-1個kafka實例失效.


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    posts - 17, comments - 65, trackbacks - 0, articles - 28

    Copyright © 陜西BOY

    主站蜘蛛池模板: 在线亚洲午夜理论AV大片| 亚洲精品日韩中文字幕久久久| h视频免费高清在线观看| 亚洲AV日韩AV永久无码绿巨人| 97人妻无码一区二区精品免费| 美女尿口扒开图片免费| 久久精品国产亚洲AV网站| 99久久免费精品国产72精品九九 | 亚洲va中文字幕无码| 久久免费线看线看| 亚洲乱码无人区卡1卡2卡3| 国产亚洲一区二区精品| 最近高清国语中文在线观看免费| 成人免费网站久久久| 亚洲日韩国产精品无码av| 亚洲精品国产V片在线观看| 精品香蕉在线观看免费| eeuss影院ss奇兵免费com| 亚洲AV无码专区在线亚| 亚洲AV无码国产在丝袜线观看| 国产美女无遮挡免费视频| 无码免费一区二区三区免费播放| 免费在线观看亚洲| 亚洲一卡二卡三卡四卡无卡麻豆| 区久久AAA片69亚洲| 日韩成全视频观看免费观看高清 | 国产成人免费在线| 一本久久A久久免费精品不卡| 中文字幕在线日亚洲9| 亚洲2022国产成人精品无码区| 免费一级毛片一级毛片aa| 国产桃色在线成免费视频| 国产麻豆成人传媒免费观看| 亚洲av色香蕉一区二区三区蜜桃| 亚洲日韩乱码久久久久久| 亚洲国产成人高清在线观看 | 最近中文字幕无免费视频| 午夜不卡久久精品无码免费| 久久久久女教师免费一区| 日韩色日韩视频亚洲网站 | 五月天国产成人AV免费观看|