kafka簡(jiǎn)介

原文鏈接https://kafka.apache.org/intro

Apache Kafka作為一個(gè)流分布式平臺(tái)辆琅,到底意味著什么

我們認(rèn)為排抬,一個(gè)流處理平臺(tái)具有三個(gè)關(guān)鍵能力:

  1. 允許發(fā)布訂閱消息流,在這方面胯盯,類似于一個(gè)消息隊(duì)列网杆,或者企業(yè)消息系統(tǒng)捞蛋。
  2. 高容錯(cuò)的存儲(chǔ)消息流吠撮。
  3. 允許在消息流出現(xiàn)時(shí)實(shí)時(shí)地處理它們尊惰。

那么kakfa的優(yōu)勢(shì)體現(xiàn)在哪?

它應(yīng)用于兩大類應(yīng)用上:

  1. 構(gòu)建實(shí)時(shí)的數(shù)據(jù)流管道泥兰,可靠地獲取系統(tǒng)或應(yīng)用之間的數(shù)據(jù)弄屡。
  2. 構(gòu)建一個(gè)基于流的應(yīng)用,實(shí)時(shí)地轉(zhuǎn)換或?qū)?shù)據(jù)流做出反應(yīng)鞋诗。

為了理解kafka是如何做到這些事情琢岩,讓我們從下到上,深入挖掘kafka的能力师脂。

首先是一些概念

  • kafka是作為一個(gè)集群運(yùn)行在一個(gè)或多個(gè)服務(wù)器上
  • kakfa集群以topic的形式記錄存儲(chǔ)的消息流
  • 每一條消息都包括一個(gè)key,一個(gè)value和一個(gè)時(shí)間戳

Kafka有四個(gè)核心的API

  • Producer API:允許一個(gè)應(yīng)用發(fā)布消息流到一個(gè)或多個(gè)topic里
  • Consumer API:允許一個(gè)應(yīng)用訂閱一個(gè)或多個(gè)topic江锨,處理它們產(chǎn)生的消息
  • Streams API:允許一個(gè)應(yīng)用充當(dāng)一個(gè)流處理器吃警,消費(fèi)從一個(gè)或多個(gè)topic獲取的數(shù)據(jù)流,處理之后生產(chǎn)輸出流到一個(gè)或多個(gè)topic啄育,可以有效地把輸入流轉(zhuǎn)換成輸出流
  • Connector API:允許構(gòu)建可重復(fù)使用的消費(fèi)者或生產(chǎn)者酌心,把topic連接到現(xiàn)有的應(yīng)用程序或者數(shù)據(jù)系統(tǒng)。

在Kafka中挑豌,客戶端和服務(wù)端的通信是通過簡(jiǎn)單的安券、高性能墩崩、與語(yǔ)言無(wú)關(guān)的TCP協(xié)議。除了Java Client之外侯勉,還有好多其他語(yǔ)言的Client可以選擇鹦筹。

話題和日志(Topics & Logs)

先來深入地了解下Kafka里面的topic。Topic是發(fā)布的消息的類別或者種子(Feed)名址貌。Kafka中的topic可以沒有訂閱者铐拐,可以有一個(gè)訂閱者,也可以有好多訂閱者练对。
對(duì)于每一個(gè)Topic遍蟋,Kafka集群維護(hù)這一個(gè)分區(qū)的log,就像下圖中的示例:

image.png

每一個(gè)分區(qū)都是一個(gè)有序的螟凭、不可變的消息隊(duì)列虚青, 并且可以持續(xù)的添加。分區(qū)中的消息都被分了一個(gè)序列號(hào)螺男,稱之為偏移量(offset)棒厘,在每個(gè)分區(qū)中此偏移量都是唯一的。

Kafka集群在一個(gè)可配置的時(shí)間段內(nèi)維持所有的消息烟号,無(wú)論它們是否被消費(fèi)绊谭。 比如這個(gè)時(shí)間段被設(shè)置為2天,那么這個(gè)消息在發(fā)布后兩天內(nèi)都能被獲取并消費(fèi)汪拥,兩天后就會(huì)被丟棄以釋放空間达传。

image.png

實(shí)際上消費(fèi)者所持有的僅有的元數(shù)據(jù)就是這個(gè)偏移量,也就是消費(fèi)者在這個(gè)log中的位置迫筑。 這個(gè)偏移量由消費(fèi)者控制:正常情況當(dāng)消費(fèi)者消費(fèi)消息的時(shí)候宪赶,偏移量也線性的的增加。但是由于實(shí)際上偏移量由消費(fèi)者自己控制脯燃,所以消費(fèi)者可以以任何順序讀取消息搂妻。舉個(gè)栗子,一個(gè)消費(fèi)者可以將偏移量重置為更老的一個(gè)偏移量辕棚,重新讀取消息欲主,或者設(shè)置為最新的值,跳過中間的消息逝嚎。

可以看到這種設(shè)計(jì)使得一個(gè)消費(fèi)者的操作不會(huì)影響其它消費(fèi)者扁瓢。 再說說分區(qū)。Kafka中采用分區(qū)的設(shè)計(jì)有幾個(gè)目的补君。一是不受單臺(tái)服務(wù)器的限制引几,一個(gè)分區(qū)可能會(huì)被持有它的服務(wù)器限制,但是Topic擁有多個(gè)分區(qū)挽铁,這就意味著它可以不受限的處理更多的數(shù)據(jù)伟桅。第二敞掘,分區(qū)可以作為并行處理的單元,稍后會(huì)談到這一點(diǎn)楣铁。

分布式

Log的分區(qū)被分布到集群中的多個(gè)服務(wù)器上玖雁,每個(gè)服務(wù)器處理它分到的分區(qū)。 根據(jù)配置每個(gè)分區(qū)還可以復(fù)制到其它服務(wù)器作為備份來容錯(cuò)民褂。 每個(gè)分區(qū)有一個(gè)leader茄菊,零或多個(gè)follower。Leader處理此分區(qū)的所有的讀寫請(qǐng)求赊堪,而follower被動(dòng)的復(fù)制數(shù)據(jù)面殖。如果leader宕機(jī),其它的一個(gè)follower會(huì)被推舉為新的leader哭廉。 一臺(tái)服務(wù)器可能同時(shí)是一個(gè)分區(qū)的leader脊僚,另一個(gè)分區(qū)的follower。 這樣可以平衡負(fù)載遵绰,避免所有的請(qǐng)求都只讓一臺(tái)或者某幾臺(tái)服務(wù)器處理辽幌。

生產(chǎn)者

生產(chǎn)者往某個(gè)Topic上發(fā)布消息,也負(fù)責(zé)選擇發(fā)布到Topic上的哪一個(gè)分區(qū)椿访。最簡(jiǎn)單的方式從分區(qū)列表中輪流選擇乌企。也可以根據(jù)某種算法依照權(quán)重選擇分區(qū)。

消費(fèi)者

消費(fèi)者用一個(gè)消費(fèi)者組名來標(biāo)記自己成玫。 一個(gè)發(fā)布在某個(gè)Topic上的消息被分發(fā)給此消費(fèi)者組中的一個(gè)消費(fèi)者加酵,注意是一個(gè)哦。一個(gè)消費(fèi)者可能在不同進(jìn)程或者機(jī)器上哭当。
如果所有的消費(fèi)者都在一個(gè)組里猪腕,那消息可以被有效的均衡負(fù)載到每一個(gè)消費(fèi)者。
如果所有消費(fèi)者都在不同的組里钦勘,那消息會(huì)被廣播到所有的消費(fèi)者陋葡。

image.png

2個(gè)kafka集群托管4個(gè)分區(qū)(P0-P3),2個(gè)消費(fèi)者組彻采,消費(fèi)組A有2個(gè)消費(fèi)者實(shí)例腐缤,消費(fèi)組B有4個(gè)。
更通用的肛响, 我們可以創(chuàng)建一些消費(fèi)者組作為邏輯上的訂閱者岭粤。每個(gè)組包含數(shù)目不等的消費(fèi)者, 一個(gè)組內(nèi)多個(gè)消費(fèi)者可以用來擴(kuò)展性能和容錯(cuò)终惑。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市门扇,隨后出現(xiàn)的幾起案子雹有,更是在濱河造成了極大的恐慌偿渡,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件霸奕,死亡現(xiàn)場(chǎng)離奇詭異溜宽,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)质帅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門适揉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人煤惩,你說我怎么就攤上這事嫉嘀。” “怎么了魄揉?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵剪侮,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我洛退,道長(zhǎng)瓣俯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任兵怯,我火速辦了婚禮彩匕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘媒区。我一直安慰自己驼仪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布驻仅。 她就那樣靜靜地躺著谅畅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪噪服。 梳的紋絲不亂的頭發(fā)上毡泻,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音粘优,去河邊找鬼仇味。 笑死,一個(gè)胖子當(dāng)著我的面吹牛雹顺,可吹牛的內(nèi)容都是我干的丹墨。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼嬉愧,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼贩挣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤王财,失蹤者是張志新(化名)和其女友劉穎卵迂,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绒净,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡见咒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了挂疆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片改览。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖缤言,靈堂內(nèi)的尸體忽然破棺而出宝当,到底是詐尸還是另有隱情,我是刑警寧澤墨闲,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布今妄,位于F島的核電站,受9級(jí)特大地震影響鸳碧,放射性物質(zhì)發(fā)生泄漏盾鳞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一瞻离、第九天 我趴在偏房一處隱蔽的房頂上張望腾仅。 院中可真熱鬧,春花似錦套利、人聲如沸推励。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)验辞。三九已至,卻和暖如春喊衫,著一層夾襖步出監(jiān)牢的瞬間跌造,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工族购, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留壳贪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓寝杖,卻偏偏與公主長(zhǎng)得像违施,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子瑟幕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

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