kafka知識(shí)總結(jié)

本文將介紹最常用的分布式消息中間件kafka究抓。由于筆者水平受限,因此介紹不一定全面拧抖,也不會(huì)太深入佳遣,僅供參考识埋。

環(huán)境

  • windows10
  • kafka 2.1.1

安裝

  • kafka依賴于zookeeper,因此需要先安裝zookeeper
  • windows環(huán)境下kafka只需解壓即可使用零渐,但是需要注意解壓路徑不能包括空格
  • 執(zhí)行kafka-server-start.bat config\server.properties啟動(dòng)服務(wù)

提示命令語(yǔ)法不正確

如果啟動(dòng)時(shí)提示命令語(yǔ)法不正確窒舟,那么需要在kafka安裝目錄中找到bin\windows目錄中的kafka-run-class.bat,為set COMMAND后面的%CLASSPATH%加上雙引號(hào)

基本概念

  • topic诵盼,一個(gè)topic可以理解為一個(gè)邏輯上的消息隊(duì)列
  • partition惠豺,一個(gè)topic包括一個(gè)或多個(gè)partition,同一個(gè)partition的數(shù)據(jù)必定在同一臺(tái)機(jī)器上
  • segment风宁,partition以segment存儲(chǔ)洁墙,每個(gè)segment大小相同,對(duì)應(yīng)物理存儲(chǔ)文件
  • retention period戒财,消息保留時(shí)間热监,超過(guò)被丟棄
  • consume group,消費(fèi)組饮寞,kafka對(duì)同一個(gè)消費(fèi)組內(nèi)的實(shí)例做負(fù)載均衡孝扛,對(duì)不同消費(fèi)組做廣播列吼。一個(gè)partition會(huì)被指派到消費(fèi)組里的某個(gè)實(shí)例。
  • leader和followers苦始,partition的主備模型

命令行操作

主題操作

  • 創(chuàng)建主題
kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
  • 查看主題
kafka-topics.bat --list --zookeeper localhost:2181

注意2.2版本可以直接用--bootstrap-server替代--zookeeper

生產(chǎn)消費(fèi)操作

  • 生產(chǎn)消息
kafka-console-producer.bat --broker-list localhost:9092 --topic test
  • 消費(fèi)消息
kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test --from-beginning

消費(fèi)組操作

  • 查看consumer group的offset
kafka-consumer-groups.bat --bootstrap-server localhost:9092 --describe --group my-group
  • 查看所有的consumer group
kafka-consumer-groups.bat --bootstrap-server localhost:9092 --list
  • 查看consumer group的所有成員
kafka-consumer-groups.bat --bootstrap-server localhost:9092 --describe --group my-group --members
  • 刪除consumer group
kafka-consumer-groups.bat --bootstrap-server localhost:9092 --delete --group my-group --group my-other-group
  • 修改consumer group的offset
kafka-consumer-groups.bat --bootstrap-server localhost:9092 --topic topic_name --group group_name --execute --reset-offsets --to-offset 0

生產(chǎn)者/消費(fèi)者

kafka消息格式

一條消息是一個(gè)record batch寞钥,包含record batch header,每條record又有各自的header

message delivery semantics陌选,消息投遞語(yǔ)義

  • at most once理郑,最多一次,消息可能會(huì)丟失柠贤,但不會(huì)重復(fù)
    先commit offset香浩,再進(jìn)行業(yè)務(wù)處理
  • at least once类缤,最少一次臼勉,消息不會(huì)丟失,可能會(huì)重復(fù)
    先進(jìn)行業(yè)務(wù)處理餐弱,再commit offset
  • exactly once宴霸,只消費(fèi)一次

如何實(shí)現(xiàn)exactly once

  • 生產(chǎn)者:0.11.0.0之后的版本實(shí)現(xiàn)了冪等操作
  • 消費(fèi)者:或者實(shí)現(xiàn)冪等,或者把commit offset和業(yè)務(wù)處理綁定成一個(gè)事務(wù)
  • 使用kafka streams可以實(shí)現(xiàn)

leader

kafka文件存儲(chǔ)格式

一個(gè)segment由.index和.log組成膏蚓。.index是索引文件瓢谢,記錄每條消息的offset和在.log中的地址,.log中存儲(chǔ)具體的數(shù)據(jù)驮瞧。segment大小固定氓扛,但是包含不同數(shù)目的消息,segment文件的命名由上一個(gè)segment的最后一條消息的offset決定论笔。查詢指定offset消息的過(guò)程是先通過(guò)二分查找找到對(duì)應(yīng)的segment采郎,然后在.index文件中通過(guò)二分查找找到對(duì)應(yīng)的存儲(chǔ)地址。

kafka高性能實(shí)現(xiàn)

  • kafka利用內(nèi)存映射文件技術(shù)狂魔,包括mmap和sendfile
  • kafka客戶端會(huì)緩存數(shù)據(jù)然后批量操作
  • byte copy蒜埋,從生產(chǎn)者到kafka到消費(fèi)者都是二進(jìn)制數(shù)據(jù),不需要轉(zhuǎn)換

log compaction

compaction指對(duì)相同key的數(shù)據(jù)進(jìn)行合并最楷。

  • 開(kāi)啟log compaction
log.cleanup.policy=compact
  • 開(kāi)啟compaction后整份,默認(rèn)情況下除了最后一個(gè)segment,都會(huì)進(jìn)行合并籽孙。

followers

kafka的高可用設(shè)計(jì)

每個(gè)partition都有一個(gè)leader烈评,若干個(gè)followers,讀寫(xiě)請(qǐng)求發(fā)送給leader處理犯建。leader維護(hù)了一個(gè)isr(in-sync replicas)列表讲冠,寫(xiě)數(shù)據(jù)時(shí)只有當(dāng)指定數(shù)量的isr告知已收到(acknowledge)leader才會(huì)commit,而數(shù)據(jù)只有commit之后才會(huì)被消費(fèi)者看到胎挎。告知已收到的數(shù)量可以由producer決定沟启,包括0,1或者all(-1)

崩潰恢復(fù)機(jī)制

如果分區(qū)的當(dāng)前l(fā)eader掛掉了忆家,會(huì)從isr列表中重新選舉leader。如果列表中的所有節(jié)點(diǎn)都掛掉了德迹,那么有以下幾種策略

  • 等待isr列表中的節(jié)點(diǎn)恢復(fù)芽卿,然后成為leader
  • 等待第一個(gè)節(jié)點(diǎn)恢復(fù)(可能不在isr列表中),然后成為leader

kafka vs rocketmq

  • 定位:kafka主要定位于日志輸出胳搞,而rocketmq定位于非日志的可靠消息傳輸
  • 存儲(chǔ):kafka多文件存儲(chǔ)卸例,rocketmq單文件存儲(chǔ),有人說(shuō)kafka吞吐量更高肌毅,也有人說(shuō)rocketmq支持更多的topic(性能下降平緩)筷转,不過(guò)據(jù)說(shuō)kafka 1.1.0之后可以支持20萬(wàn)的partition
  • 備份:rocketmq沒(méi)有master選舉;rocketmq的slave可讀悬而,而kafka只能從leader讀
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末呜舒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子笨奠,更是在濱河造成了極大的恐慌袭蝗,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件般婆,死亡現(xiàn)場(chǎng)離奇詭異到腥,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蔚袍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)乡范,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人啤咽,你說(shuō)我怎么就攤上這事晋辆。” “怎么了闰蚕?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵栈拖,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我没陡,道長(zhǎng)涩哟,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任盼玄,我火速辦了婚禮贴彼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘埃儿。我一直安慰自己器仗,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著精钮,像睡著了一般威鹿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上轨香,一...
    開(kāi)封第一講書(shū)人閱讀 51,190評(píng)論 1 299
  • 那天忽你,我揣著相機(jī)與錄音,去河邊找鬼臂容。 笑死科雳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的脓杉。 我是一名探鬼主播糟秘,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼球散!你這毒婦竟也來(lái)了尿赚?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤沛婴,失蹤者是張志新(化名)和其女友劉穎吼畏,沒(méi)想到半個(gè)月后督赤,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體嘁灯,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年躲舌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了丑婿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡没卸,死狀恐怖羹奉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情约计,我是刑警寧澤诀拭,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站煤蚌,受9級(jí)特大地震影響耕挨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜尉桩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一筒占、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蜘犁,春花似錦翰苫、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)导披。三九已至,卻和暖如春埃唯,著一層夾襖步出監(jiān)牢的瞬間盛卡,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工筑凫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留滑沧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓巍实,卻偏偏與公主長(zhǎng)得像滓技,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子棚潦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

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

  • kafka數(shù)據(jù)可靠性深度解讀 Kafka起初是由LinkedIn公司開(kāi)發(fā)的一個(gè)分布式的消息系統(tǒng)令漂,后成為Apache...
    it_zzy閱讀 2,007評(píng)論 2 20
  • 1 概述 Kakfa起初是由LinkedIn公司開(kāi)發(fā)的一個(gè)分布式的消息系統(tǒng),后成為Apache的一部分丸边,它使用Sc...
    流浪冰007閱讀 1,796評(píng)論 0 6
  • 1. 概述 Kakfa起初是由LinkedIn公司開(kāi)發(fā)的一個(gè)分布式的消息系統(tǒng)叠必,后成為Apache的一部分,它使用S...
    尼小摩閱讀 1,438評(píng)論 0 17
  • 目標(biāo) 高吞吐量來(lái)支持高容量的事件流處理 支持從離線系統(tǒng)加載數(shù)據(jù) 低延遲的消息系統(tǒng) 持久化 依賴文件系統(tǒng)妹窖,持久化到本...
    jiangmo閱讀 1,280評(píng)論 0 4
  • 追逐著遠(yuǎn)方的燈火 看不見(jiàn)黎明的到來(lái) 心中向往著的生活 是埋葬多年的夢(mèng)想 輾轉(zhuǎn)反側(cè)著的煎熬 現(xiàn)實(shí)中的坎坎坷坷 漂浮不...
    勵(lì)志洋妞閱讀 282評(píng)論 0 2