天天看點

kafka随筆記

Kafka相關概念

1. Topic:特指Kafka處理的消息源(feeds of messages)的不同分類。
2. Partition:Topic實體上的分組,一個topic可以分為多個partition,每個partition是一個有序的隊列。partition中的每條消息都會被配置設定一個有序的id(offset)。
3. Message:消息,是通信的基本機關,每個producer可以向一個topic(主題)釋出一些消息。
4. Producers:消息和資料生産者,向Kafka的一個topic釋出消息的過程叫做producers。
5. Consumers:消息和資料消費者,訂閱topics并處理其釋出的消息的過程叫做consumers。
6. Broker:緩存代理,Kafa叢集中的一台或多台伺服器統稱為broker。
           

注意事項:

1.kafka取消息時間複雜度為O(1) ,删除kafka的日志并不能提高性能

2.根據offset找到日志檔案:

kafka Consumer均衡算法,partition的個數和消費組組員個數的關系

有一個topic:lijietest,然後這個topic的partition和他們所在的broker的圖如下:

kafka随筆記

1.其中 broker有兩個,也就是伺服器有兩台。

2.partition有6個,分布按照如圖所示,按照哈希取模的算法配置設定。

3.消費者有8個,他們屬于同一個消費組。

如果按照如圖所示,那麼這一個消費組中的消費者會怎麼取kafka的資料呢?

其實kafka的消費端有一個均衡算法,算法如下:

1.A=(partition數量/同分組消費者總個數)

2.M=對上面所得到的A值小數點第一位向上取整

3.計算出該消費者拉取資料的patition合集:Ci = [P(M*i ),P((i + 1) * M -1)]

按照如圖所示,那麼這裡:

A=6/8=0.75

M=1

C0=[P(1*0),P((0+1)*1-1)]=[P0,P0]

同理:

C1=[P(1*1),P((1+1)*1-1)]=[P1,P1]

C2=[P(1*2),P((2+1)*1-1)]=[P2,P2]

C3=[P(1*3),P((3+1)*1-1)]=[P3,P3]

C4=[P(1*4),P((4+1)*1-1)]=[P4,P4]

C5=[P(1*5),P((5+1)*1-1)]=[P5,P5]

C6=[P(1*6),P((6+1)*1-1)]=[P6,P6]

C7=[P(1*7),P((7+1)*1-1)]=[P7,P7]

那麼按照上面的算法:

C0消費者消費P0的資料

C1消費者消費P1的資料

C2消費者消費P2的資料

C3消費者消費P3的資料

C4消費者消費P4的資料

C5消費者消費P5的資料

C6消費者消費P6的資料

C7消費者消費P7的資料

但是partition隻有P0-P5根本就沒有P6和P7,是以這兩個消費者相當于是會被閑置的,就相當于占用資源,卻沒什麼用,是以在這裡真正起到作用的就是C0-C5。

1.按照如上的算法,是以如果kafka的消費組需要增加組員,最多增加到和partition數量一緻,超過的組員隻會占用資源,而不起作用;

2.kafka的partition的個數一定要大于消費組組員的個數,并且partition的個數對于消費組組員取模一定要為0,不然有些消費者會占用資源卻不起作用;

3.如果需要增加消費組的組員個數,那麼也需要根據上面的算法,調整partition的個數