Kafka系列之(1)——Kafka概念和架構(gòu)

1、概念

Producer:

消息生產(chǎn)者,就是向kafka broker發(fā)消息的客戶端。

Consumer:

消費(fèi)消息。每個(gè)consumer屬于一個(gè)特定的consumer group(可為每個(gè)consumer指定group name,若不指定group name則屬于默認(rèn)的group)。同一topic的一條消息只能被同一個(gè)consumer group內(nèi)的一個(gè)consumer消費(fèi),但多個(gè)consumer group可同時(shí)消費(fèi)這一消息。Consumer Group中的每個(gè)Consumer讀取Topic的一個(gè)或多個(gè)Partitions,并且是唯一的Consumer;一個(gè)Consumer group的多個(gè)consumer的所有線程依次有序地消費(fèi)一個(gè)topic的所有partitions,如果Consumer group中所有consumer總線程大于partitions數(shù)量,則會(huì)出現(xiàn)空閑情況。這樣可以做到負(fù)載均衡,也可以實(shí)現(xiàn)順序消費(fèi)(group中只有一個(gè)consumer)。

Broker:

一臺(tái)kafka服務(wù)器就是一個(gè)broker。一個(gè)集群由多個(gè)broker組成。一個(gè)broker可以容納多個(gè)topic。

topic:

可以理解為一個(gè)MQ消息隊(duì)列的名字。每條發(fā)布到Kafka集群的消息都有一個(gè)類別,這個(gè)類別被稱為topic。(物理上不同topic的消息分開存儲(chǔ),邏輯上一個(gè)topic的消息雖然保存于一個(gè)或多個(gè)broker上但用戶只需指定消息的topic即可生產(chǎn)或消費(fèi)數(shù)據(jù)而不必關(guān)心數(shù)據(jù)存于何處)。

Partition:

parition是物理上的概念,每個(gè)topic包含一個(gè)或多個(gè)partition,創(chuàng)建topic時(shí)可指定parition數(shù)量。每個(gè)partition對(duì)應(yīng)于一個(gè)文件夾,該文件夾下存儲(chǔ)該partition的數(shù)據(jù)和索引文件。為了實(shí)現(xiàn)擴(kuò)展性,一個(gè)非常大的topic可以分布到多個(gè) broker(即服務(wù)器)上,一個(gè)topic可以分為多個(gè)partition,每個(gè)partition是一個(gè)有序的隊(duì)列。partition中的每條消息 都會(huì)被分配一個(gè)有序的id(offset)。kafka只保證按一個(gè)partition中的順序?qū)⑾l(fā)給consumer,不保證一個(gè)topic的整體 (多個(gè)partition間)的順序。也就是說,一個(gè)topic在集群中可以有多個(gè)partition,那么分區(qū)的策略是什么?(消息發(fā)送到哪個(gè)分區(qū)上,有兩種基本的策略,一是采用Key Hash算法,一是采用Round Robin算法)

Offset:

kafka的存儲(chǔ)文件都是按照offset.kafka來(lái)命名,用offset做名字的好處是方便查找。例如你想找位于2049的位置,只要找到2048.kafka的文件即可。當(dāng)然the first offset就是00000000000.kafka

2、架構(gòu)


leader-followers結(jié)構(gòu)

每個(gè)分區(qū)都由一個(gè)服務(wù)器作為“l(fā)eader”,零或若干服務(wù)器作為“followers”,leader負(fù)責(zé)處理消息的讀和寫,followers則去復(fù)制leader.如果leader down了,followers中的一臺(tái)則會(huì)自動(dòng)成為leader。集群中的每個(gè)服務(wù)都會(huì)同時(shí)扮演兩個(gè)角色:作為它所持有的一部分分區(qū)的leader,同時(shí)作為其他分區(qū)的followers,這樣集群就會(huì)據(jù)有較好的負(fù)載均衡。同時(shí),副本也保證了kafka的容錯(cuò)能力。

Zookeeper負(fù)責(zé)選擇leader和保存kafka的元數(shù)據(jù)(服務(wù)器和topic名稱等信息)

3、Kafka消息處理

Producer根據(jù)指定的partition方法(round-robin、hash等),將消息發(fā)布到指定topic的partition里面。

kafka集群接收到Producer發(fā)過來(lái)的消息后,將其持久化到硬盤,并保留消息指定時(shí)長(zhǎng)(可配置),而不關(guān)注消息是否被消費(fèi)。

Consumer從kafka集群pull數(shù)據(jù),并控制獲取消息的offset。

Kafka需要維持的元數(shù)據(jù)只有一個(gè)–消費(fèi)消息在Partition中的offset值,Consumer每消費(fèi)一個(gè)消息,offset就會(huì)加1。其實(shí)消息的狀態(tài)完全是由Consumer控制的,Consumer可以跟蹤和重設(shè)這個(gè)offset值,這樣的話Consumer就可以讀取任意位置的消息。

4、Zookeeper中存儲(chǔ)的Kafka節(jié)點(diǎn)結(jié)構(gòu)


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 姓名:周小蓬 16019110037 轉(zhuǎn)載自:http://blog.csdn.net/YChenFeng/art...
    aeytifiw閱讀 34,894評(píng)論 13 425
  • Kafka簡(jiǎn)介 Kafka是一種分布式的,基于發(fā)布/訂閱的消息系統(tǒng)。主要設(shè)計(jì)目標(biāo)如下: 以時(shí)間復(fù)雜度為O(1)的方...
    Alukar閱讀 3,148評(píng)論 0 43
  • 本文轉(zhuǎn)載自:http://www.cnblogs.com/likehua/p/3999538.html,作者做了一...
    shunyang閱讀 4,137評(píng)論 0 22
  • 目標(biāo) 高吞吐量來(lái)支持高容量的事件流處理 支持從離線系統(tǒng)加載數(shù)據(jù) 低延遲的消息系統(tǒng) 持久化 依賴文件系統(tǒng),持久化到本...
    jiangmo閱讀 1,458評(píng)論 0 4
  • 江南煙雨過 小橋流水時(shí) 二月春風(fēng)吹牛角 牧童歸去落夕陽(yáng) 林中飛鳥盡 花香落滿愁 何處鐘聲何處去 明年此時(shí)更無(wú)聲
    愛陳子閱讀 307評(píng)論 0 1

友情鏈接更多精彩內(nèi)容