kafka架構(gòu)簡介

Kafka 架構(gòu)簡介

Kafka是一個(gè)開源的等龙、分布式的甸箱、可分區(qū)的闽坡、可復(fù)制的基于日志提交的發(fā)布訂閱消息系統(tǒng)栽惶。它具備以下特點(diǎn):

·消息持久化: 為了從大數(shù)據(jù)中獲取有價(jià)值的信息愁溜,任何信息的丟失都是負(fù)擔(dān)不起的。Kafka使用了O(1)的磁盤結(jié)構(gòu)設(shè)計(jì)外厂,這樣做即便是在要存儲(chǔ)大體積的數(shù)據(jù)時(shí)也是可以提供穩(wěn)定的性能冕象。使用Kafka時(shí),message會(huì)被存儲(chǔ)并且會(huì)被復(fù)制以防止數(shù)據(jù)丟失汁蝶。

·高吞吐量: 設(shè)計(jì)是工作在普通的硬件設(shè)施上多個(gè)客戶端能夠每秒處理幾百兆的數(shù)據(jù)量渐扮。

·分布式: Kafka Broker的中心化集群支持消息分區(qū),而consumer采用分布式進(jìn)行消費(fèi)掖棉。

·種多Client支持: Kafka很容易與其它平臺(tái)進(jìn)行支持墓律,例如:Java、.NET幔亥、PHP耻讽、Ruby、Python帕棉。

·實(shí)時(shí): 消息由producer產(chǎn)生后立即對(duì)consumer可見齐饮。這個(gè)特性對(duì)于基于事件的系統(tǒng)是很關(guān)鍵的。

下面就來對(duì)Kafka架構(gòu)做一個(gè)簡單的說明:

Kafka各組件說明

Broker

每個(gè)kafka server稱為一個(gè)Broker笤昨,多個(gè)borker組成kafka cluster祖驱。

image

一個(gè)機(jī)器上可以部署一個(gè)或者多個(gè)Broker,這多個(gè)Broker連接到相同的ZooKeeper就組成了Kafka集群瞒窒。

Topic

Kafka是一個(gè)發(fā)布訂閱消息系統(tǒng)捺僻,它的邏輯結(jié)構(gòu)如下:

image

Topic 就是消息類別名,一個(gè)topic中通常放置一類消息崇裁。每個(gè)topic都有一個(gè)或者多個(gè)訂閱者匕坯,也就是消息的消費(fèi)者consumer。

Producer將消息推送到topic拔稳,由訂閱該topic的consumer從topic中拉取消息葛峻。

Topic 與broker

一個(gè)Broker上可以創(chuàng)建一個(gè)或者多個(gè)Topic。同一個(gè)topic可以在同一集群下的多個(gè)Broker中分布巴比。

image

Partition log

Kafka會(huì)為每個(gè)topic維護(hù)了多個(gè)分區(qū)(partition)术奖,每個(gè)分區(qū)會(huì)映射到一個(gè)邏輯的日志(log)文件:

image

每當(dāng)一個(gè)message被發(fā)布到一個(gè)topic上的一個(gè)partition,broker應(yīng)會(huì)將該message追加到這個(gè)邏輯log文件的最后一個(gè)segment上轻绞。這些segments 會(huì)被flush到磁盤上采记。Flush時(shí)可以按照時(shí)間來進(jìn)行,也可以按照message 數(shù)來執(zhí)行政勃。

每個(gè)partition都是一個(gè)有序的唧龄、不可變的結(jié)構(gòu)化的提交日志記錄的序列。在每個(gè)partition中每一條日志記錄都會(huì)被分配一個(gè)序號(hào)——通常稱為offset奸远,offset在partition內(nèi)是唯一的既棺。論點(diǎn)邏輯文件會(huì)被化分為多個(gè)文件segment(每個(gè)segment的大小一樣的)讽挟。

     Broker集群將會(huì)保留所有已發(fā)布的message records,不管這些消息是否已被消費(fèi)丸冕。保留時(shí)間依賴于一個(gè)可配的保留周期戏挡。例如:如果設(shè)置了保留策略是2day,那么每一條消息發(fā)布兩天內(nèi)是被保留的晨仑,在這個(gè)2day的保留時(shí)間內(nèi),消息是可以被消費(fèi)的拆檬。過期后不再保留洪己。
image

Partition distribution

日志分區(qū)是分布式的存在于一個(gè)kafka集群的多個(gè)broker上。每個(gè)partition會(huì)被復(fù)制多份存在于不同的broker上竟贯。這樣做是為了容災(zāi)答捕。具體會(huì)復(fù)制幾份,會(huì)復(fù)制到哪些broker上屑那,都是可以配置的拱镐。經(jīng)過相關(guān)的復(fù)制策略后,每個(gè)topic在每個(gè)broker上會(huì)駐留一到多個(gè)partition持际。如圖:

image

如果要了解kafka如何進(jìn)行partition沃琅、replica 分配的,可以參考:

http://www.cnblogs.com/yurunmiao/p/5550906.html

對(duì)于同一個(gè)partition蜘欲,它所在任何一個(gè)broker益眉,都有能扮演兩種角色:leader、follower姥份。

看上面的例子郭脂。紅色的代表是一個(gè)leader。

對(duì)于topic1的4個(gè)partition:

Part 1的leader是broker1澈歉,followers是broker2\3展鸡。

Part2的leader是broker2,followers是broker1\4埃难。

Part3的leader是broker3莹弊,followers是broker1\3。

Part4的leader是broker4涡尘,followers是broker2\3箱硕。

對(duì)于topic2的3個(gè)partition:

Part1的leader是broker1,followers是broker2悟衩。

Part2的leader是broker2剧罩,followers是broker3。

Part3的leader是broker3座泳,followers是broker4惠昔。

對(duì)于topic2的4個(gè)partition:

Part 1的leader是broker4幕与,followers是broker1\2\3。

Part2的leader是broker2镇防,followers是broker1\3\4啦鸣。

Part3的leader是broker3,followers是broker1\2\4来氧。

Part4的leader是broker1诫给,followers是broker2\3\4。

下面是一個(gè)真實(shí)的例子:

image

圖中的partition 0 的leader是broker 2啦扬,它有3個(gè)replicas:2中狂,1,3扑毡。

In-Sync Replica:在同步中胃榕,也就是有哪些broker正處理同步中。partition 0的ISR是2瞄摊,1勋又,3,說明了3個(gè)replica都是正常狀態(tài)换帜。如果有一個(gè)broker down楔壤,那么它就不會(huì)在ISR中出現(xiàn)。

之后把broker1停止后:

image

每個(gè)partition的Leader的用于處理到該partition的讀寫請(qǐng)求的惯驼。

每個(gè)partition的followers是用于異步的從它的leader中復(fù)制數(shù)據(jù)的挺邀。

Kafka會(huì)動(dòng)態(tài)維護(hù)一個(gè)與Leader保持一致的同步副本(in-sync replicas (ISR))集合,并且會(huì)將最新的同步副本(ISR )集合持久化到zookeeper跳座。如果leader出現(xiàn)問題了端铛,就會(huì)從該partition的followers中選舉一個(gè)作為新的leader。

所以呢疲眷,在一個(gè)kafka集群中禾蚕,每個(gè)broker通常會(huì)扮演兩個(gè)角色:在一個(gè)partition中扮演leader,在其它的partition中扮演followers狂丝。Leader是最繁忙的换淆,要處理讀寫請(qǐng)求。這樣將leader均分到不同的broker上几颜,目的自然是要確保負(fù)載均衡倍试。

Producer

Producer作為消息的生產(chǎn)者,在生產(chǎn)完消息后需要將消息投送到指定的目的地(某個(gè)topic的某個(gè)partition)蛋哭。Producer可以根據(jù)指定選擇partition的算法或者是隨機(jī)方式來選擇發(fā)布消息到哪個(gè)partition县习。

Consumer

     在Kafka中,同樣有consumer group的概念,它是邏輯上將一些consumer分組躁愿。因?yàn)槊總€(gè)kafka consumer是一個(gè)進(jìn)程叛本。所以一個(gè)consumer group中的consumers將可能是由分布在不同機(jī)器上的不同的進(jìn)程組成的。Topic中的每一條消息可以被多個(gè)consumer group消費(fèi)彤钟,然而每個(gè)consumer group內(nèi)只能有一個(gè)consumer來消費(fèi)該消息来候。所以,如果想要一條消息被多個(gè)consumer消費(fèi)逸雹,那么這些consumer就必須是在不同的consumer group中营搅。所以也可以理解為consumer group才是topic在邏輯上的訂閱者。

     每個(gè)consumer可以訂閱多個(gè)topic梆砸。

     每個(gè)consumer會(huì)保留它讀取到某個(gè)partition的offset转质。而consumer 是通過zookeeper來保留offset的。

Kafka提供的保障

1辫樱、如果producer往特定的partition發(fā)送消息時(shí),會(huì)按照先后順序存儲(chǔ)俊庇,也就是說如果發(fā)送順序是message1狮暑、message2、message3辉饱。那么這三個(gè)消息在partition log中的記錄的offset就是 message1_offset < message2_offset < message3_offset搬男。

2、consumer也是有序的瀏覽log中的記錄彭沼。

3缔逛、如果一個(gè)topic指定了replication factor為N,那么就允許有N-1個(gè)Broker出錯(cuò)姓惑。

架構(gòu)圖

對(duì)上述各組件介紹后褐奴,現(xiàn)在就應(yīng)該可以很容易的理解Kafka的架構(gòu)圖:

image

出處:http://www.cnblogs.com/seaspring/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市于毙,隨后出現(xiàn)的幾起案子敦冬,更是在濱河造成了極大的恐慌,老刑警劉巖唯沮,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脖旱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡介蛉,警方通過查閱死者的電腦和手機(jī)萌庆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來币旧,“玉大人践险,你說我怎么就攤上這事。” “怎么了捏境?”我有些...
    開封第一講書人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵于游,是天一觀的道長。 經(jīng)常有香客問我垫言,道長贰剥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任筷频,我火速辦了婚禮蚌成,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘凛捏。我一直安慰自己担忧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開白布坯癣。 她就那樣靜靜地躺著瓶盛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪示罗。 梳的紋絲不亂的頭發(fā)上惩猫,一...
    開封第一講書人閱讀 49,842評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音蚜点,去河邊找鬼轧房。 笑死,一個(gè)胖子當(dāng)著我的面吹牛绍绘,可吹牛的內(nèi)容都是我干的奶镶。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼陪拘,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼厂镇!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起左刽,我...
    開封第一講書人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤剪撬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后悠反,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體残黑,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年斋否,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了梨水。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡茵臭,死狀恐怖疫诽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤奇徒,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布雏亚,位于F島的核電站,受9級(jí)特大地震影響摩钙,放射性物質(zhì)發(fā)生泄漏罢低。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一胖笛、第九天 我趴在偏房一處隱蔽的房頂上張望网持。 院中可真熱鬧,春花似錦长踊、人聲如沸功舀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辟汰。三九已至,卻和暖如春阱佛,著一層夾襖步出監(jiān)牢的瞬間帖汞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來泰國打工瘫絮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涨冀,地道東北人填硕。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓麦萤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親扁眯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子壮莹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容