kafka是一個消息隊列,使用模型如下:
一個基本的消息隊列需要保證如下功能:
1,消息傳輸
2,數(shù)據(jù)存儲
3,如何消費(fèi)
如何進(jìn)行消息傳輸?
kafka有有個對應(yīng)topic概念。就是生成者與消費(fèi)者之間進(jìn)行通信,需要先在kafka上面建立一個topic。模型如下:
不過由于可能會有很多的消費(fèi)者,很多生成者,這樣就會對kafka性能產(chǎn)生影響,所以kafka又有了區(qū)(partition)的概念,就是可以對topic再進(jìn)行劃分,劃分多個區(qū),可以理解為對一個消息隊列有分了很多的段,每段去維護(hù)自己的數(shù)據(jù)。模型如下。
如何實現(xiàn)數(shù)據(jù)存儲?
首先應(yīng)該知道任何主機(jī)有可能宕機(jī),這樣發(fā)送到該消息隊列上面的數(shù)據(jù)就會丟失。如何保證消息隊列的高可用性?需要對數(shù)據(jù)做贅余或存儲。kafka會對partition進(jìn)行備份。并且會對本機(jī)上面的partition進(jìn)行落盤存儲。kafka對partition進(jìn)行備份的方式如下:
kafka的落盤方式并不是一有數(shù)據(jù)就進(jìn)行落盤,是當(dāng)有一批數(shù)據(jù)的時候,批量進(jìn)行落盤。而且數(shù)據(jù)并不是消費(fèi)者接收到就銷毀。而是數(shù)據(jù)會有一個定時時間,時間到了才會對數(shù)據(jù)進(jìn)行刪除。
kafka實現(xiàn)消費(fèi)的方式是什么?
一般消費(fèi)模式有兩個,一種是隊列方式,隊列中的一條消息被隊列中的一個消費(fèi)者處理掉。另一種方式是發(fā)布訂閱模式,每條消息對應(yīng)多個消費(fèi)者。前提是消費(fèi)者需要對消息提前進(jìn)行訂閱。
kafka同時具備以上兩種消費(fèi)模式,所以kafka中抽象出一個Consumer Group來。group的使用方式如下: