天天看點

(知識短文)kafka中partition和消費者對應關系

kafka 為了保證同一類型的消息順序性(FIFO),一個partition隻能被同一組的一個consumer消費,不同組的consumer可以消費同一個partition。但是一個consumer可以消費多個partition

消費者多于partition

Topic: T1隻有1個partition

Group: G1組中啟動2個consumer

消費者數量為2大于partition數量1,此時partition和消費者程序對應關系如下:

(知識短文)kafka中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和消費者程序對應關系如下:

(知識短文)kafka中partition和消費者對應關系

此時P1、P2對應C1,即多個partition對應一個消費者,C1接收到消息量是C2的兩倍

消費者等于partition

Topic:T3包含3個partition

Group: G3組中啟動3個consumer

消費者數量為3等于partition數量3,此時partition和消費者程序對應關系如下:

(知識短文)kafka中partition和消費者對應關系

C1,C2,C3均分了T3的所有消息,即消息在同一個組之間的消費者之間均分了。

多個消費者組

Topic:T3包含3個partition

Group: G3組中啟動3個consumer,G4組中啟動1個consumer

此時partition和消費者程序對應關系如下:

(知識短文)kafka中partition和消費者對應關系

消息被G3組的消費者均分,G4組的消費者在接收到了所有的消息。啟動多個組,則會使同一個消息被消費多次。

如果想要了解更多kafka内容,請參考:

Kafka 架構-圖文講解

Kafka 高性能吞吐揭秘

Kafka最新面試題