1. kafka中術語介紹
Broker:kafka集羣中包含一個或者多個服務實例,這種服務實例被稱爲Broker
Topic:每條發佈到kafka集羣的消息都有一個類別,這個類別就叫做Topic
Partition:Partition是一個物理上的概念,每個Topic包含一個或者多個Partition
Producer:負責發佈消息到kafka的Broker中。
Consumer:消息消費者,向kafka的broker中讀取消息的客戶端
Consumer Group:每一個Consumer屬於一個特定的Consumer Group(可以爲每個Consumer指定 groupName)
2. kafka中topic說明
-
kafka將消息以topic爲單位進行歸類
-
topic特指kafka處理的消息源(feeds of messages)的不同分類。
-
topic是一種分類或者發佈的一些列記錄的名義上的名字。kafka主題始終是支持多用戶訂閱的;也就是說,一 個主題可以有零個,一個或者多個消費者訂閱寫入的數據。
-
在kafka集羣中,可以有無數的主題。
-
生產者和消費者消費數據一般以主題爲單位。更細粒度可以到分區級別。
3.kafka中分區數(Partitions)
Partitions:分區數
Partitions:分區數:控制topic將分片成多少個log,可以顯示指定,如果不指定則會使用 broker(server.properties)中的num.partitions配置的數量。
- 一個broker服務下,是否可以創建多個分區?
可以的,broker數與分區數沒有關係; - 在kafka中,每一個分區會有一個編號:編號從0開始
- 某一個分區的數據是有序的
- 說明-數據是有序 如何保證一個主題下的數據是有序的?(生產是什麼樣的順序,那麼消費的時候也是什麼樣的順序)
一個主題(topic)下面有一個分區(partition)即可
-
topic的Partition數量在創建topic時配置。
-
Partition數量決定了每個Consumer group中併發消費者的最大數量。
-
Consumer group A 有兩個消費者來讀取4個partition中數據;Consumer group B有四個消費者來讀取4個 partition中的數據
4 kafka中副本數( Partition Replication)
kafka分區副本數(kafka Partition Replicas)
副本數(replication-factor)
副本數(replication-factor):控制消息保存在幾個broker(服務器)上,一般情況下等於broker的個數
一個broker服務下,是否可以創建多個副本因子?
不可以;創建主題時,副本因子應該小於等於可用的broker數。 副本因子過程圖
副本因子操作以分區爲單位的。每個分區都有各自的主副本和從副本;主副本叫做leader,從副本叫做 follower(在有多個副本的情況下,kafka會爲同一個分區下的分區,設定角色關係:一個leader和N個 follower),處於同步狀態的副本叫做in-sync-replicas(ISR);follower通過拉的方式從leader同步數據。消費 者和生產者都是從leader讀寫數據,不與follower交互。
副本因子的作用:讓kafka讀取數據和寫入數據時的可靠性。
副本因子是包含本身|同一個副本因子不能放在同一個Broker中。
如果某一個分區有三個副本因子,就算其中一個掛掉,那麼只會剩下的兩個鍾,選擇一個leader,但不會在其 他的broker中,另啓動一個副本(因爲在另一臺啓動的話,存在數據傳遞,只要在機器之間有數據傳遞,就 會長時間佔用網絡IO,kafka是一個高吞吐量的消息系統,這個情況不允許發生)所以不會在零個broker中啓 動。
如果所有的副本都掛了,生產者如果生產數據到指定分區的話,將寫入不成功。
lsr表示:當前可用的副本
5 kafka Partition offset
任何發佈到此partition的消息都會被直接追加到log文件的尾部,每條消息在文件中的位置稱爲offset(偏移量),
offset是一個long類型數字,它唯一標識了一條消息,消費者通過(offset,partition,topic)跟蹤記錄。
6. kafka分區和消費組之間的關係
消費組: 由一個或者多個消費者組成,同一個組中的消費者對於同一條消息只消費一次。
某一個主題下的分區數,對於消費組來說,應該小於等於該主題下的分區數。如下所示:
如:某一個主題有4個分區,那麼消費組中的消費者應該小於4,而且最好與分區數成整數倍
1 2 4
同一個分區下的數據,在同一時刻,不能同一個消費組的不同消費者消費
總結:分區數越多,同一時間可以有越多的消費者來進行消費,消費數據的速度就會越快,提高消費的性能