提升內(nèi)容-kafka consumer 小結(jié)(1)

目錄

kafka consumer

  • 消費(fèi)方式
  • 消費(fèi)分區(qū)分配策略
  • 消費(fèi)過(guò)程中offset的維護(hù) - 老版本zk節(jié)點(diǎn)維護(hù)

1. 消費(fèi)方式

1.1 broker push

這種消費(fèi)方式由broker主動(dòng)推送消息給消費(fèi)者,消費(fèi)者被動(dòng)接收消息懂拾。
缺點(diǎn): consumer 消費(fèi)能力不強(qiáng)的情況下可能出現(xiàn)拒絕服務(wù)胚股、以及因網(wǎng)絡(luò)問(wèn)問(wèn)題產(chǎn)生的網(wǎng)絡(luò)擁塞的情況;

1.2 consumer pull

消費(fèi)者主動(dòng)輪詢broker是否有數(shù)據(jù)可以消費(fèi)额获,拉取消息的速率完全由consumer自己掌握,但是可能會(huì)出現(xiàn)broker沒(méi)有數(shù)據(jù)揣云,消費(fèi)者陷入無(wú)限循環(huán)當(dāng)中;
解決的辦法是,在kafka consumer消費(fèi)數(shù)據(jù)時(shí)傳入一個(gè)時(shí)長(zhǎng)參數(shù) timeout裆熙,防止cpu空轉(zhuǎn)

2. 消費(fèi)者組 consumer group 分區(qū)分配策略

一個(gè)consumer group 中有多個(gè)consumer, 一個(gè)topic 中會(huì)有多個(gè)partition;所以會(huì)出現(xiàn)消費(fèi)者消費(fèi)分區(qū)數(shù)據(jù)時(shí)禽笑,partition分配的問(wèn)題入录,即確定哪個(gè)partition 由哪個(gè)consumer來(lái)消費(fèi)?

2.1 round robin輪詢策略

如下圖所示:
假如同一個(gè)主題:


已consumer group 為主體來(lái)進(jìn)行partition分配

另外 consumer group 可以對(duì)多個(gè)主題進(jìn)行消費(fèi):
看如下場(chǎng)景:
2個(gè)主題 T1、T2


1個(gè)消費(fèi)者group消費(fèi)多個(gè)主題

在這種場(chǎng)景下分區(qū)策略偽代碼如下所示:

def get_partition_index():
    return map(TopicAndPartition:List, hash()) mod num(consumers)

來(lái)確定分配給消費(fèi)者組中消費(fèi)者的partition index
這種方式消費(fèi)者組會(huì)將所有topic 中的 partition 當(dāng)作一個(gè)整體來(lái)輪詢分配佳镜。
分配主體是消費(fèi)者組;
適用于 消費(fèi)者組中所有 消費(fèi)者 訂閱的都是同一個(gè)主題 的場(chǎng)景僚稿。

2.2 Range 策略

2.2.1 Range 分配策略詳解

range 分配主體是被消費(fèi)的broker的單個(gè)主題:
consumer group 中的單個(gè)consumer 被分配的 可消費(fèi) partition 個(gè)數(shù)差距越來(lái)越大。
要點(diǎn): 按主題來(lái)區(qū)分的蟀伸。

range策略詳述蚀同,我們根據(jù)一個(gè)場(chǎng)景來(lái)深入理解一下:
如下圖所示:


range分配策略

當(dāng)前某主題有8個(gè)partition缅刽,某消費(fèi)者組中消費(fèi)者的個(gè)數(shù)是3個(gè),那么最終的分配結(jié)果如下圖所示:


分配主體為某個(gè)topic

具體算法過(guò)程也很簡(jiǎn)單蠢络,簡(jiǎn)述一下:

1. 計(jì)算n = num(topic partitions)/num(consumers of consumer group) = 8/3 = 2
2. 計(jì)算m = num(topic partitions)%num(consumers of consumer group) = 2
3. 分配規(guī)則為消費(fèi)組中的前m個(gè)消費(fèi)者衰猛,每個(gè)消費(fèi)者可以分配到的分區(qū)數(shù)為n+1 = 2+1=3, 剩余的消費(fèi)者可消費(fèi)的分區(qū)數(shù)為n 

range 分配策略是有一些問(wèn)題的:
加入新的主題,但是消費(fèi)者組中的消費(fèi)者數(shù)量不變刹孔,那么頭部的消費(fèi)者就會(huì)被分配更多的partition,造成分配不均的問(wèn)題啡省。

2.2.2 調(diào)用Range的時(shí)機(jī)

當(dāng)消費(fèi)者組中的消費(fèi)者數(shù)量發(fā)生變化的時(shí)候,就會(huì)調(diào)用Range策略芦疏。

3. 消費(fèi)過(guò)程中offset的維護(hù)

3.1 為什么要維護(hù)offset

  1. case_1 - consumer宕機(jī) consumer 在消費(fèi)的過(guò)程中可能出現(xiàn)斷電宕機(jī)的問(wèn)題冕杠,consumer恢復(fù)后需要從消費(fèi)前的位置(offset)繼續(xù)消費(fèi)消息,所以消費(fèi)者在消費(fèi)過(guò)程中需要實(shí)時(shí)記錄消費(fèi)到了哪個(gè)位置酸茴,
    以便消費(fèi)者恢復(fù)之后繼續(xù)消費(fèi)分预。
  2. case_2 - 添加一個(gè)consumer,根據(jù)消費(fèi)者的分區(qū)分配策略薪捍,新加入的消費(fèi)者很可能獲取到之前消費(fèi)者已經(jīng)消費(fèi)過(guò)的分區(qū)笼痹,那么這個(gè)消費(fèi)者應(yīng)該繼續(xù)消費(fèi)后續(xù)的消息。從哪里開(kāi)始繼續(xù)消費(fèi)消息酪穿,就是offset的
    作用所在凳干。

3.2 offset 新老版本維護(hù)策略

3.2.1 老版本 - zookeeper 上保存消費(fèi)者消費(fèi)過(guò)的 消息 的offset

如下圖所示,開(kāi)啟了4個(gè)窗口: (順時(shí)針描述)
左上: 1個(gè)producer console - 生產(chǎn)消息至first topic(first topic 有3個(gè)partition,每個(gè)partition有2個(gè)replication)分區(qū)被济,具體消息進(jìn)入哪個(gè)分區(qū)
救赐,屬于無(wú)指定partition,無(wú)key只磷,有value的情況经磅,可以參考 producer 這一節(jié)來(lái)理解。
右上: 1個(gè)consumer console(其實(shí)是一個(gè)消費(fèi)者組钮追,只不過(guò)只有1個(gè)消費(fèi)者) - 消費(fèi) first topic 分區(qū)(leader) 中的消息
右下: 1個(gè)consumer console (其實(shí)是一個(gè)消費(fèi)者組预厌,只不過(guò)只有1個(gè)消費(fèi)者) - 消費(fèi) first topic 分區(qū)(leader) 中的消息
左下: 1個(gè)zkcli console, 從中我們可以查看到具體的contoller元媚、brokers轧叽、consumers、config 等相關(guān)信息

演示producer & consumer 刊棕,zk 對(duì)消費(fèi)過(guò)的offset的記錄

通過(guò)producer 發(fā)送消息 + consumer 消費(fèi)消息炭晒,
在zkCli 中查看具體的消費(fèi)者消費(fèi)消息的offset變化
命令為:

./zkCli.sh -server localhost:2181
get /consumers/$consumer_group/offsets/$topi/$partition

所以老版本消費(fèi)者消費(fèi)消息的offset 記錄方式為
[consumer group] + [topic] + [partition index]
采用這樣的方式記錄offset,當(dāng)consumer group 中下線甥角、上線新的consumer時(shí)腰埂,消費(fèi)過(guò)的消息就不會(huì)被重新消費(fèi)。

下一節(jié)我們繼續(xù)學(xué)習(xí)新版本 bootstrap-server上保存消費(fèi)者消費(fèi)過(guò)的消息的offset機(jī)制

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蜈膨,一起剝皮案震驚了整個(gè)濱河市屿笼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌翁巍,老刑警劉巖驴一,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異灶壶,居然都是意外死亡肝断,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門驰凛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)胸懈,“玉大人,你說(shuō)我怎么就攤上這事恰响∪で” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵胚宦,是天一觀的道長(zhǎng)首有。 經(jīng)常有香客問(wèn)我,道長(zhǎng)枢劝,這世上最難降的妖魔是什么井联? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮您旁,結(jié)果婚禮上烙常,老公的妹妹穿的比我還像新娘。我一直安慰自己鹤盒,他們只是感情好蚕脏,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著昨悼,像睡著了一般蝗锥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上率触,一...
    開(kāi)封第一講書(shū)人閱讀 51,573評(píng)論 1 305
  • 那天终议,我揣著相機(jī)與錄音,去河邊找鬼葱蝗。 笑死穴张,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的两曼。 我是一名探鬼主播皂甘,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼悼凑!你這毒婦竟也來(lái)了偿枕?” 一聲冷哼從身側(cè)響起璧瞬,我...
    開(kāi)封第一講書(shū)人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎渐夸,沒(méi)想到半個(gè)月后嗤锉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡墓塌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年瘟忱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苫幢。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡访诱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出韩肝,到底是詐尸還是另有隱情触菜,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布伞梯,位于F島的核電站玫氢,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏谜诫。R本人自食惡果不足惜漾峡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望喻旷。 院中可真熱鬧生逸,春花似錦、人聲如沸且预。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)锋谐。三九已至遍尺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間涮拗,已是汗流浹背乾戏。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留三热,地道東北人鼓择。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像就漾,于是被迫代替她去往敵國(guó)和親呐能。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

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