1. 程式人生 > 實用技巧 >kafka相關概念

kafka相關概念

一、topic(主題)partition(分割槽) offset(位移)

建立toipc
bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic test-topic --partitions 3  --replication-factor 1
test-topic // topic名字
--partitions 3 // 分割槽數為3
--replication-factor 1  // 副本數為1(不得超過broker數量)

列出topic
bin/kafka-topics.sh --zookeeper localhost:2181
--list 檢視指定topic詳情 bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic test-topic

1、建立topic時會指定partitions的數量,也就是說一個topic下面可以建立多個分割槽。
2、producer向topic發訊息時,會把訊息均攤到這些partition上面,每向一個partition上寫一個訊息,partition上面寫入offset會向後移一位。
3、consumer消費topic時,是按partition讀取的,partition上每消費一條訊息,該消費者讀取的offset會向後移一位。注意producer寫入的offset與consumer讀取的offset不是同一個。

二、producer傳送的訊息會均攤到每個partitions上
建立了一個topic,裡面有3個partition。當傳送訊息時,會負載均衡的把訊息均攤到每個partition上,並且每個partition的offset是累加的。如下圖所示,我從100開始累加逐條傳送到topic上面,可以看到訊息確實是均攤到每個partition上面的。

三、consumer是按partition消費的

1、topic有三個partition,消費者組有一個消費者例項時。可以看到消費者會先讀取一個partition,消費完這個partition後再消費下一個partition。

2、topic有三個partition,消費者組有兩個消費者例項時。可以看到consume1消費一個partition,consumer2消費兩個partition。

3、topic有三個partition,消費者組有三個消費者例項時。可以看到三個例項各自消費一個partition。

4、topic有三個partition,消費者組有四個消費者例項時。可以看到是有一個例項是消費不到partition的,所以消費者例項並不是越多吞吐量越大,等於partition數就可達到最大吞吐量。