前言
kafka是一款A(yù)pache組織下的一款開(kāi)源流處理平臺(tái)。由Scala開(kāi)發(fā)語(yǔ)言編寫(xiě)實(shí)現(xiàn)鸳玩。
流平臺(tái)具有三個(gè)關(guān)鍵功能:
- 發(fā)布和訂閱記錄流喻频,類(lèi)似于消息隊(duì)列或企業(yè)消息傳遞系統(tǒng)。
- 以容錯(cuò)的持久方式存儲(chǔ)記錄流粘都。
- 處理記錄流廓推。
kafka的主要應(yīng)用場(chǎng)景:
- 建立實(shí)時(shí)流數(shù)據(jù)管道,在系統(tǒng)之間進(jìn)行數(shù)據(jù)傳輸翩隧。
- 構(gòu)建實(shí)時(shí)流應(yīng)用程序以轉(zhuǎn)換或響應(yīng)數(shù)據(jù)流樊展。
kafka的幾個(gè)核心概念,理解這幾個(gè)概念對(duì)kafka的正確使用十分重要堆生。
1. topic
消息主題专缠,無(wú)論是發(fā)布還是消費(fèi)都是以topic為單位,一般一個(gè)topic對(duì)應(yīng)一種業(yè)務(wù)場(chǎng)景
2. partition
分區(qū)淑仆,一個(gè)主題可以對(duì)應(yīng)1~N個(gè)分區(qū)涝婉,kafka可以保證單個(gè)分區(qū)的消息的FIFO,而不能保證整個(gè)topic消息的FIFO(除非該topic只有一個(gè)partition)蔗怠。kafka的高吞吐的原理也是主要通過(guò)增加分區(qū)實(shí)現(xiàn)的墩弯。
3. broker
一個(gè)broker表示一臺(tái)服務(wù)器,一個(gè)broker可以包含多個(gè)主題的多個(gè)分區(qū)寞射。多個(gè)broker可以構(gòu)成kafka集群渔工。每個(gè)broker有一個(gè)唯一的id。關(guān)于分區(qū)在broker上的分配策略后面會(huì)講到桥温。
4. producer
生產(chǎn)者引矩,負(fù)責(zé)往指定的topic推送消息的角色。
5. consumer
消費(fèi)者侵浸,負(fù)責(zé)從指定topic消費(fèi)消息的角色旺韭。
6. consumer group
消費(fèi)組,一個(gè)消費(fèi)組可以包含多個(gè)消費(fèi)者掏觉,一個(gè)分區(qū)只能同時(shí)給同一個(gè)消費(fèi)組內(nèi)的一個(gè)消費(fèi)者消費(fèi)(這里要注意茂翔,如果是多個(gè)消費(fèi)組同時(shí)消費(fèi)一個(gè)分區(qū)是允許的,而且各自的消費(fèi)偏移量互不干擾)履腋。
7.replication
副本集珊燎,副本分首領(lǐng)(leader)副本和跟隨(follower)副本, 分區(qū)至少有一個(gè)leader副本惭嚣,0~N個(gè)follower副本,producer和consumer負(fù)責(zé)跟leader副本交互,follower只負(fù)責(zé)同步leader的數(shù)據(jù)悔政,以防在leader掛掉的時(shí)候晚吞,選舉一個(gè)follower當(dāng)選新的leader從而實(shí)現(xiàn)高可用。
8.offset
偏移量谋国,標(biāo)識(shí)一個(gè)消費(fèi)者在分區(qū)中消費(fèi)到了哪個(gè)位置槽地,消費(fèi)者每次消費(fèi)消息的時(shí)候都會(huì)帶上offset,消費(fèi)完可以自動(dòng)提交當(dāng)前的offset或手動(dòng)提交芦瘾,取決于配置捌蚊。