(知識短文)kafka中partition和消費者對應關係
- 2019 年 10 月 7 日
- 筆記
kafka 為了保證同一類型的消息順序性(FIFO),一個partition只能被同一組的一個consumer消費,不同組的consumer可以消費同一個partition。但是一個consumer可以消費多個partition
消費者多於partition
Topic: T1隻有1個partition
Group: G1組中啟動2個consumer
消費者數量為2大於partition數量1,此時partition和消費者進程對應關係如下:

只有C1能接收到消息,C2則不能接收到消息,即同一個partition內的消息只能被同一個組中的一個consumer消費。當消費者數量多於partition的數量時,多餘的消費者空閑。
也就是說如果只有一個partition你在同一組啟動多少個consumer都沒用,partition的數量決定了此topic在同一組中被可被均衡的程度,例如partition=4,則可在同一組中被最多4個consumer均衡消費。
消費者少於partition
Topic:T2包含3個partition
Group: G2組中啟動2個consumer
消費者數量為2小於partition數量3,此時partition和消費者進程對應關係如下:

此時P1、P2對應C1,即多個partition對應一個消費者,C1接收到消息量是C2的兩倍
消費者等於partition
Topic:T3包含3個partition
Group: G3組中啟動3個consumer
消費者數量為3等於partition數量3,此時partition和消費者進程對應關係如下:

C1,C2,C3均分了T3的所有消息,即消息在同一個組之間的消費者之間均分了。
多個消費者組
Topic:T3包含3個partition
Group: G3組中啟動3個consumer,G4組中啟動1個consumer
此時partition和消費者進程對應關係如下:

消息被G3組的消費者均分,G4組的消費者在接收到了所有的消息。啟動多個組,則會使同一個消息被消費多次。
如果想要了解更多kafka內容,請參考: