Kafka概述

什么是kafka

Kafka官網(wǎng)介紹kafka是一個(gè)分布式的流平臺(tái)练般。

  • 可以讓你發(fā)布和訂閱流式的記錄。這一方面與消息隊(duì)列或者企業(yè)消息系統(tǒng)類(lèi)似。
  • 可以儲(chǔ)存流式的記錄无虚,并且有較好的容錯(cuò)性。
  • 可以在流式記錄產(chǎn)生時(shí)就進(jìn)行處理衍锚。

平時(shí)對(duì)kafka的認(rèn)識(shí)還是作為消息隊(duì)列比較多友题,其他特性在大數(shù)據(jù)領(lǐng)域應(yīng)用很廣。簡(jiǎn)單來(lái)說(shuō)kafka是一個(gè)基于消息戴质、分布式度宦、高吞吐的流平臺(tái)。

主題與日志

Kafka是以發(fā)布—訂閱的方式形式進(jìn)行數(shù)據(jù)傳輸告匠,數(shù)據(jù)的發(fā)送者(稱(chēng)為發(fā)布者)不會(huì)將數(shù)據(jù)直接發(fā)送給特定的接收者(稱(chēng)為訂閱者)戈抄。發(fā)布者以某種方式將消息進(jìn)行分類(lèi),接受者訂閱它們后专,以便接收特定類(lèi)型的消息划鸽。
在 Kafka 中,發(fā)布訂閱的對(duì)象是主題(Topic)戚哎,你可以為每個(gè)業(yè)務(wù)裸诽、每個(gè)應(yīng)用甚至是每類(lèi)數(shù)據(jù)都創(chuàng)建專(zhuān)屬的主題。Kafka 將每個(gè)主題劃分成多個(gè)分區(qū)(Partition)型凳,每個(gè)分區(qū)是一組有序的消息日志丈冬,消息日志是kafka的數(shù)據(jù)單元,由消息和鍵組成甘畅。

來(lái)自官網(wǎng)

這里重點(diǎn)說(shuō)一下日志的概念埂蕊,日志是分布式系統(tǒng)的靈魂。這里的日志并非日常開(kāi)發(fā)中打印的日志疏唾,這里的日志通常是只能追加蓄氧、按照時(shí)間完全有序(totally-ordered)的記錄序列,如mysql中的binlog是記錄所有數(shù)據(jù)庫(kù)表結(jié)構(gòu)變更槐脏,redis的AOF記錄每次寫(xiě)命令喉童。
通過(guò)這種方式可以實(shí)現(xiàn)提供節(jié)點(diǎn)之間的數(shù)據(jù)復(fù)制、為系統(tǒng)提供外部的數(shù)據(jù)訂閱准给、調(diào)整節(jié)點(diǎn)之間的數(shù)據(jù)平衡等功能泄朴。Kafka的消息日志也是遵循上面的規(guī)則設(shè)計(jì)的重抖,是一段有序只能追加的寫(xiě)的物理文件露氮。
即使我們之前沒(méi)有使用過(guò)kafka,也聽(tīng)說(shuō)過(guò)kafka的高吞吐钟沛,但是kafka對(duì)消息日志做了持久化的處理畔规,我們都知道涉及到磁盤(pán)IO都想到一個(gè)慢字。kafka的高吞吐的一方面就是在于它日志的設(shè)計(jì)恨统。

  • append-only
    官網(wǎng)提到don't fear the filesystem!叁扫,不要害怕文件系統(tǒng)三妈。我們固定思維以為涉及到磁盤(pán)文件會(huì)很慢,是因?yàn)槲覀兪褂玫姆绞讲粚?duì)莫绣,只要使用方式正確磁盤(pán)文件也可以像網(wǎng)絡(luò)一樣快畴蒲。磁盤(pán)系統(tǒng)慢是因?yàn)樗膶ぶ罚疟P(pán)的順序?qū)懕入S機(jī)寫(xiě)快6000倍以上对室,這是因?yàn)椴僮飨到y(tǒng)提供了 read-ahead 和 write-behind 技術(shù)模燥,read-ahead 是以大的 data block 為單位預(yù)先讀取數(shù)據(jù),而 write-behind 是將多個(gè)小型的邏輯寫(xiě)合并成一次大型的物理磁盤(pán)寫(xiě)入掩宜。
  • batch and zero-copy
    使用順序?qū)懴舜疟P(pán)訪問(wèn)慢的情況蔫骂,關(guān)于IO操作低下的主要原因就剩下了兩個(gè):大量的小型 I/O 操作,以及過(guò)多的字節(jié)拷貝牺汤。
    為了提高效率消息按照批次寫(xiě)入kafka辽旋,批次就是一組消息,這些消息都屬于來(lái)自同一個(gè)主題和分區(qū)檐迟。這樣減少了小型的I/O操作补胚,但是消息的實(shí)時(shí)性就有所損耗。
    另外一個(gè)就是zero-copy追迟,關(guān)于零拷貝我之前有文章介紹了零拷貝的概念糖儡,這里不多講。簡(jiǎn)單來(lái)說(shuō)怔匣,傳統(tǒng)的I/O操作涉及多次數(shù)據(jù)的拷貝握联,從內(nèi)存空間到內(nèi)核空間,但是零拷貝使用sendfile的指令每瞒,可以允許操作系統(tǒng)將數(shù)據(jù)從 內(nèi)核空間 直接發(fā)送到網(wǎng)絡(luò)金闽,這樣避免重新復(fù)制數(shù)據(jù)。

客戶端

Kafka的客戶端分為兩部分剿骨,生產(chǎn)者與消費(fèi)者代芜。

生產(chǎn)者

生產(chǎn)者程序通常持續(xù)不斷地向一個(gè)或多個(gè)主題發(fā)送消息,生產(chǎn)者默認(rèn)情況下把消息均勻的分布到主題的分區(qū)上浓利,也可以將消息發(fā)送到指定的分區(qū)挤庇,通常是通過(guò)消息鍵和分區(qū)策略實(shí)現(xiàn)的,后續(xù)會(huì)詳細(xì)介紹贷掖。

消費(fèi)者

消費(fèi)者讀取消息嫡秕。消費(fèi)者可以訂閱一個(gè)或者多個(gè)主題,并按照消息的生成順序讀取它們苹威。每個(gè)消息日志都有自己的偏移量(offset)昆咽,是一個(gè)不斷遞增的整數(shù)值,在創(chuàng)建消息的時(shí)候會(huì)保存進(jìn)去。在給定的分區(qū)里面掷酗,每個(gè)消息的偏移量是唯一的调违。消費(fèi)者把每個(gè)分區(qū)讀取的消息偏移量存入zookeeper(之前版本)或kafka,這樣在消費(fèi)者關(guān)閉或者重啟泻轰,它的讀取狀態(tài)也不會(huì)消息技肩。
為了提高消息的消費(fèi)速度和擴(kuò)展與容錯(cuò),kafka引入消費(fèi)者組(consumer group)的概念浮声。也就是說(shuō)亩鬼,會(huì)有一個(gè)消費(fèi)者或者多個(gè)消費(fèi)者讀取一個(gè)主題。群組保證一個(gè)分區(qū)只能被一個(gè)消費(fèi)者使用阿蝶。

消費(fèi)者組

通過(guò)這種方式雳锋,消費(fèi)者可以提高消費(fèi)的速率,而且當(dāng)一個(gè)一個(gè)消費(fèi)者失效之后羡洁,集群中其他消費(fèi)者可以接管失效消費(fèi)者的工作玷过,這就是消費(fèi)者重平衡,后續(xù)會(huì)介紹這個(gè)概念筑煮。

服務(wù)端與集群

有客戶端就有服務(wù)端辛蚊,一個(gè)獨(dú)立的kafka服務(wù)器被稱(chēng)為broker。broker處理客戶端的請(qǐng)求真仲,接受生產(chǎn)者的消息袋马,為消息設(shè)置偏移量,并提交消息到磁盤(pán)保存秸应。為消費(fèi)者提供服務(wù)虑凛,對(duì)提取的分區(qū)做出相應(yīng),返回提交到磁盤(pán)的消息软啼。
Kafka集群由多個(gè)broker組成桑谍,broker的信息存儲(chǔ)在zookeeper上,通過(guò)zookeeper可監(jiān)控和管理集群每個(gè)broker祸挪。在集群多個(gè)broker中會(huì)有一個(gè)broker充當(dāng)控制器的角色(controller)锣披,kafka使用zookeeper的臨時(shí)節(jié)點(diǎn)選舉控制器,控制器的作用很多比如主題的管理贿条、集群成員管理等雹仿,這里就不詳細(xì)介紹了。
在kafka文檔中介紹“一個(gè)分布式整以、可分區(qū)的胧辽、可復(fù)制的提交日志服務(wù)”,復(fù)制是分布式系統(tǒng)中保證可用性的關(guān)鍵悄蕾。
前面提高kafka使用topic組織數(shù)據(jù)票顾,一個(gè)topic被分為若干個(gè)個(gè)分區(qū)础浮,每個(gè)分區(qū)有多個(gè)副本帆调。這些副本保存在broker上奠骄,每個(gè)broker可以保存多個(gè)屬于不同主題和分區(qū)的副本。
副本有兩種類(lèi)型

  • leader:每個(gè)分區(qū)都有一個(gè)leader副本番刊,為了保證數(shù)據(jù)一致性含鳞,所有生產(chǎn)者和消費(fèi)者的請(qǐng)求都是處理的這個(gè)副本。
  • follower:leader以外的副本都是follower副本芹务。follower不處理客戶端的請(qǐng)求蝉绷,唯一的任務(wù)就是從leader那里復(fù)制消息,保持和leader一樣的狀態(tài)枣抱。如果leader崩潰熔吗,其中一個(gè)將會(huì)升為新leader。

總結(jié)

本文介紹了kafka的一些概念佳晶,比如消息日志桅狠、生產(chǎn)者、消費(fèi)者轿秧、broker中跌,下面一張圖詳細(xì)的展示了它們之間的關(guān)系。


極客時(shí)間《Kafka核心技術(shù)與實(shí)戰(zhàn)》

關(guān)于kafka菇篡,早在去年的時(shí)候就在斷斷續(xù)續(xù)的接觸和學(xué)習(xí)漩符,我學(xué)習(xí)kafka更多的側(cè)重點(diǎn)是它系統(tǒng)的設(shè)計(jì),一個(gè)分布式的流服務(wù)器是怎么設(shè)計(jì)的驱还。它是如何做到高可用嗜暴、高吞吐的,這是很吸引人的東西议蟆。相反在關(guān)于kafka的使用和搭建我關(guān)注的就比較少灼伤,本文是我自己的在看了一些資料后的總結(jié)和一些看法,接下來(lái)的時(shí)間應(yīng)該也會(huì)繼續(xù)寫(xiě)kafka相關(guān)的文章咪鲜。

參考

《Kafka權(quán)威指南》
kafka官網(wǎng)
極客時(shí)間《Kafka核心技術(shù)與實(shí)戰(zhàn)》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末狐赡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子疟丙,更是在濱河造成了極大的恐慌颖侄,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件享郊,死亡現(xiàn)場(chǎng)離奇詭異览祖,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)炊琉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)展蒂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)又活,“玉大人,你說(shuō)我怎么就攤上這事锰悼×荆” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵箕般,是天一觀的道長(zhǎng)耐薯。 經(jīng)常有香客問(wèn)我,道長(zhǎng)丝里,這世上最難降的妖魔是什么曲初? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮杯聚,結(jié)果婚禮上臼婆,老公的妹妹穿的比我還像新娘。我一直安慰自己幌绍,他們只是感情好颁褂,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著纷捞,像睡著了一般痢虹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上主儡,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天奖唯,我揣著相機(jī)與錄音,去河邊找鬼糜值。 笑死丰捷,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的寂汇。 我是一名探鬼主播病往,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼骄瓣!你這毒婦竟也來(lái)了停巷?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤榕栏,失蹤者是張志新(化名)和其女友劉穎畔勤,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體扒磁,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡庆揪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年无切,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了艾疟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陈轿。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡凉翻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出内颗,到底是詐尸還是另有隱情钧排,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布起暮,位于F島的核電站卖氨,受9級(jí)特大地震影響会烙,放射性物質(zhì)發(fā)生泄漏负懦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一柏腻、第九天 我趴在偏房一處隱蔽的房頂上張望纸厉。 院中可真熱鬧,春花似錦五嫂、人聲如沸颗品。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)躯枢。三九已至,卻和暖如春槐臀,著一層夾襖步出監(jiān)牢的瞬間锄蹂,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工水慨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留得糜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓晰洒,卻偏偏與公主長(zhǎng)得像朝抖,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谍珊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354