1. kafka是什么

定義

一千個(gè)人眼里有一千個(gè)哈姆雷特。如果說誰最有資格定義kafka是什么温鸽,那么肯定是官方文檔:

Apache Kafka? is a distributed streaming platform.

官方還對(duì)流平臺(tái)進(jìn)行了定義--流平臺(tái)有三大關(guān)鍵能力(A streaming platform has three key capabilities):

  • Publish and subscribe to streams of records, similar to a message queue or enterprise messaging system.
  • Store streams of records in a fault-tolerant durable way.
  • Process streams of records as they occur.

第一個(gè)特性是類MQ的發(fā)布訂閱特性手负,第二個(gè)特性就是具備容錯(cuò)的存儲(chǔ)能力姑尺,第三個(gè)特性是處理數(shù)據(jù)。所以kafka可以替代ActiveMQ這類消息中間件统捶。另外我們看一下官方對(duì)kafka的定位柄粹,如下圖所示:


kafka定位

kafka幾個(gè)重要的概念:

  • Kafka is run as a cluster on one or more servers that can span multiple datacenters.
  • The Kafka cluster stores streams of records in categories called topics.
  • Each record consists of a key, a value, and a timestamp.

架構(gòu)

kafka架構(gòu)如下圖所示驻右,消息中間件的本質(zhì)就是:生產(chǎn)-存儲(chǔ)-消費(fèi)。由下圖可知堪夭,在kafka的架構(gòu)設(shè)計(jì)里,無論是生產(chǎn)者恨豁,還是消費(fèi)者,還是消息存儲(chǔ)菊匿,都可以水平擴(kuò)容從而提高整個(gè)集群的處理能力计福,生來就是分布式系統(tǒng)。另外疹蛉,圖中沒有展示出來的kafka另一個(gè)很重要的特性力麸,那就是副本,在創(chuàng)建topic的時(shí)候指定分區(qū)數(shù)量的同時(shí)克蚂,還可以指定副本的數(shù)量(副本最大數(shù)量不允許超過broker的數(shù)量埃叭,否則會(huì)報(bào)錯(cuò):Replication factor: 2 larger than available brokers: 1)。各個(gè)副本之間只有一個(gè)leader赤屋,其他是follow,只有l(wèi)eader副本提供讀寫服務(wù)媚媒,follow副本只是冷備涩僻,當(dāng)leader掛掉會(huì)從follow中選舉一個(gè)leader,從而達(dá)到高可用嵌巷。

kafka architecture

圖片來源于https://en.wikipedia.org/wiki/File:Overview_of_Apache_Kafka.svg

topic

下圖是topic的解剖圖室抽,kafka只有topic的概念狠半,沒有類似ActiveMQ中的Queue(一對(duì)一)的概念(ActiveMQ既有Topic又有Queue)颤难。一個(gè)topic可以有若干個(gè)分區(qū)已维,且分區(qū)可以動(dòng)態(tài)修改,但是只允許增加不允許減少垛耳。每個(gè)分區(qū)中的消息是有序的堂鲜。各個(gè)分區(qū)之間的消息是無序的。新消息采用追加的方式寫入缔莲,這種順序?qū)懭敕绞匠兆啵瑥亩筴afka的吞吐能力非常強(qiáng)大(一些驗(yàn)證表名順序?qū)懭氪疟P的速度超過隨機(jī)寫入內(nèi)存)。


kafka topic
  • topic定義
    官方定義:A topic is a category or feed name to which records are published. Topics in Kafka are always multi-subscriber; that is, a topic can have zero, one, or many consumers that subscribe to the data written to it.
    例如訂單支付成功后擅憔,發(fā)送名為TOPIC_PAYMENT_ORDER_SUCCESS檐晕,積分系統(tǒng)可以接收這個(gè)topic,給用戶送積分辟灰。會(huì)員系統(tǒng)可以接收這個(gè)topic,增加會(huì)員成長值笛洛。支付寶里的螞蟻莊園還有支付成功后送飼料等乃坤。

  • 磁盤&內(nèi)存速度對(duì)比
    由下圖可知沟蔑,順序?qū)懭氪疟P的速度(Sequential, disk)為53.2M,而隨機(jī)寫入內(nèi)存的速度(Random, memory)為36.7M厅须。


    磁盤&內(nèi)存速度對(duì)比

圖片來源于網(wǎng)絡(luò):http://searene.me/2017/07/09/Why-is-Kafka-so-fast/

durable

kafka對(duì)消息日志的存儲(chǔ)策略為:The Kafka cluster durably persists all published records—whether or not they have been consumed—using a configurable retention period. For example, if the retention policy is set to two days, then for the two days after a record is published, it is available for consumption, after which it will be discarded to free up space. Kafka's performance is effectively constant with respect to data size so storing data for a long time is not a problem.
即無論如何朗和,kafka會(huì)持久化保存所有消息,無論它們是否已經(jīng)被消費(fèi)千埃。而kafka消息日志保留策略通過配置決定(以log.retention開頭的一些配置忆植,例如log.retention.mslog.retention.minutes朝刊,log.retention.hours拾氓,log.retention.bytes),例如配置有效期兩天咙鞍,那么兩天內(nèi)這些消息日志都能通過offset訪問奶陈。到期后,kafka會(huì)刪除這些消息日志文件釋放磁盤空間吃粒。

consumer

kafka消費(fèi)topic中某個(gè)分區(qū)示意圖如下,至于kafka如何在各個(gè)topic的各個(gè)分區(qū)中選擇某個(gè)分區(qū)事示,后面的文章會(huì)提到僻肖。由下圖可知,消費(fèi)者通過offset定位并讀取消息劝堪,且各個(gè)消費(fèi)者持有的offset是自己的消費(fèi)進(jìn)度揉稚。


kafka consumer

consumer group

  • each record published to a topic is delivered to one consumer instance within each subscribing consumer group. Consumer instances can be in separate processes or on separate machines.
  • If all the consumer instances have the same consumer group, then the records will effectively be load balanced over the consumer instances.
  • If all the consumer instances have different consumer groups, then each record will be broadcast to all the consumer processes.

即對(duì)于訂閱了某個(gè)topic的consumer group下的所有consumer搀玖,任意一條消息只會(huì)被其中一個(gè)consumer消費(fèi)。如果有多個(gè)consumer group,各個(gè)consumer group之間互不干擾含末。consumer group示意圖如下所示即舌,某個(gè)topic消息有4個(gè)分區(qū):P0, P1, P2, P3。Consumer Group A中有兩個(gè)consumer:C1和C2沼撕。Consumer Group B中有4個(gè)consumer:C3芜飘,C4,C5和C6笼沥。如果現(xiàn)在生產(chǎn)者發(fā)送了一條消息娶牌,那么這條消息只會(huì)被Consumer Group A中的C1和C2之中某個(gè)消費(fèi)者消費(fèi)到,以及被Consumer Group B中的C3诗良,C4,C5和C6之中某個(gè)消費(fèi)者消費(fèi)到舞骆。

consumer group
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末督禽,一起剝皮案震驚了整個(gè)濱河市总处,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胧谈,老刑警劉巖荸频,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件试溯,死亡現(xiàn)場離奇詭異郊酒,居然都是意外死亡键袱,警方通過查閱死者的電腦和手機(jī)摹闽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來澜汤,“玉大人舵匾,你說我怎么就攤上這事』栈澹” “怎么了吵血?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長钱贯。 經(jīng)常有香客問我侦另,道長,這世上最難降的妖魔是什么硫麻? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任樊卓,我火速辦了婚禮,結(jié)果婚禮上碌尔,老公的妹妹穿的比我還像新娘浇辜。我一直安慰自己,他們只是感情好唾戚,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布柳洋。 她就那樣靜靜地躺著,像睡著了一般叹坦。 火紅的嫁衣襯著肌膚如雪熊镣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天,我揣著相機(jī)與錄音绪囱,去河邊找鬼测蹲。 笑死,一個(gè)胖子當(dāng)著我的面吹牛扣甲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播齿椅,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼琉挖,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了涣脚?” 一聲冷哼從身側(cè)響起示辈,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤爬早,失蹤者是張志新(化名)和其女友劉穎曾沈,沒想到半個(gè)月后聊浅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體崭别,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡女气,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年坝咐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了解虱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盆色。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡粥帚,死狀恐怖胰耗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情芒涡,我是刑警寧澤柴灯,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站费尽,受9級(jí)特大地震影響赠群,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜旱幼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一查描、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧柏卤,春花似錦冬三、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至桥滨,卻和暖如春窝爪,著一層夾襖步出監(jiān)牢的瞬間弛车,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來泰國打工蒲每, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留帅韧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓啃勉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親双妨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子淮阐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

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

  • 本文轉(zhuǎn)載自http://dataunion.org/?p=9307 背景介紹Kafka簡介Kafka是一種分布式的...
    Bottle丶Fish閱讀 5,475評(píng)論 0 34
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)刁品,斷路器泣特,智...
    卡卡羅2017閱讀 134,711評(píng)論 18 139
  • 背景介紹 Kafka簡介 Kafka是一種分布式的,基于發(fā)布/訂閱的消息系統(tǒng)挑随。主要設(shè)計(jì)目標(biāo)如下: 以時(shí)間復(fù)雜度為O...
    高廣超閱讀 12,843評(píng)論 8 167
  • 姓名:周小蓬 16019110037 轉(zhuǎn)載自:http://blog.csdn.net/YChenFeng/art...
    aeytifiw閱讀 34,727評(píng)論 13 425
  • 01 有天晚上在朋友圈看到大學(xué)同學(xué)發(fā)的狀態(tài)兜挨,私聊問起近況膏孟。他說不知道自己還留在大城市里的意義是什么。轉(zhuǎn)念一想拌汇,我也...
    李梓妍Li閱讀 473評(píng)論 1 2