Kafka中的數(shù)據(jù)稱為message,就類似于record和row。Message是以batches的形式寫入Kafka,batch就是一組數(shù)據(jù),他們被寫入同一個(gè)topic和partition。 Message被寫入topic,topic又被分成了partition。每個(gè)partition可以在不同的server上。
分批次寫入消息是為了提高效率。
topic:主題,一個(gè)主題代表了一類消息,就像數(shù)據(jù)庫(kù)中的表一樣。
Partition:分區(qū),一個(gè)主題有若干個(gè)分區(qū),同一個(gè)主題的分區(qū)可以不分布在同一個(gè)機(jī)器上,單一主題中的分區(qū)有序,但是無(wú)法保證所有的分區(qū)有序。
Producer用來(lái)創(chuàng)造消息。默認(rèn)情況下,producer不care往哪個(gè)partition中寫,一個(gè)topic中message會(huì)被均勻的分配到partition中。通過(guò)message key,partitioner會(huì)生成這個(gè)key的hash并把message寫到特定的partition中。
Consumer讀取數(shù)據(jù)。一個(gè)consumer會(huì)subscribe到一個(gè)或多個(gè)topic下,并以message被produce的順序讀取。通過(guò)跟蹤message offset,consumer記錄哪些消息已經(jīng)被消費(fèi)過(guò)。每個(gè)message有一個(gè)獨(dú)立的offset,對(duì)于每個(gè)partition,通過(guò)存儲(chǔ)最后消費(fèi)消息的offset在zookeeper或kafka中,consumer可以停止重啟是不失去上次讀取的位置。
Consumer組成了consumer group,group保證了每個(gè)partition只有一個(gè)成員進(jìn)行消費(fèi)。如果一個(gè)consumer失敗,group中的consumer會(huì)rebalance partition。
一個(gè)kafka的server稱為一個(gè)broker。一個(gè)partition在cluster中被歸在一個(gè)broker下,這個(gè)broker被稱為partition的leader。一個(gè)partition可以被assign到多個(gè)broker下,這樣partition就會(huì)被復(fù)制。
Replica:副本,分為leader和follower,leader對(duì)外提供服務(wù)。
為什么要用kafka:多個(gè)生產(chǎn)者,多個(gè)消費(fèi)者,磁盤存儲(chǔ),可拓展性高,高性能。
把partition從一個(gè)consumer分配到另一個(gè)consumer稱為rebalance。Rebalance保證了consumer group的高可用和高拓展性。在rebalance過(guò)程中,consumer不消費(fèi)消息。
offset:在partition中給message連續(xù)的id,用來(lái)識(shí)別每條消息。
Zookeeper的作用:在集群不同節(jié)點(diǎn)間建立coordination。同時(shí),如果哪個(gè)節(jié)點(diǎn)失敗,我們還可以通過(guò)zookeeper從之前committed offset中恢復(fù)因?yàn)閦ookeeper周期性的commit offset。如果kafka的cluster有什么更改,zookeeper會(huì)通知所有node這一更改比如增刪broker或topic。
ISR:In-Sync Replicas, 是和leader同步的復(fù)制的分區(qū),這些followers和leader有著相同的message。
QueueFullException:當(dāng)producer以broker無(wú)法接受的速度發(fā)送消息是會(huì)出現(xiàn),解決方案是增加broker的數(shù)量。
Retention Period: retention period 可以幫助保持所有published的消息并不在乎消息是否被消費(fèi)。這些記錄可以通過(guò)retention period的配置進(jìn)行銷毀來(lái)騰出一些空間。
多分區(qū)多副本的好處:kafka通過(guò)給topic指定多個(gè)分區(qū)分布在多個(gè)broker上,并發(fā)能力較好(負(fù)載均衡)。partition可以指定replica數(shù),增加了消息存儲(chǔ)的安全性,提高了容災(zāi)能力,不過(guò)也增加了存儲(chǔ)空間。