Kafka提供了一种consumer的抽象概念:consumer group
queue模式:所有的consumer都位于同一个consumer group 下;
publish-subscribe模式:所有的consumer都有着自己唯一的consumer group。
说明: 由2个broker组成的kafka集群 ,某个主题总共有4个partition(P0-P3) ,分别位于不同的broker上。这个集群 由2个Consumer Group消费 , A有2个consumer instances,B有4个。
通常一个topic会有几个consumer group ,每个consumer group都是一个逻辑上的订阅者 ( logical subscriber ) 。
**消费顺序
一个partition同一个时刻在一个consumer group中只能有一个consumer instance在消费 ,从而保证消费顺序。 consumer group中的consumer instance的数量不能比一个Topic中的partition的数量多 ,否则 ,多出来的consumer消费不到消息。 Kafka只在partition的范围内保证消息消费的局部顺序性 ,不能在同一个topic中的多个partition中保证总的消费顺序 性。 如果有在总体上保证消费顺序的需求 ,那么我们可以通过将topic的partition数量设置为1 ,将consumer group中的 consumer instance数量也设置为1 ,但是这样会影响性能 ,所以kafka的顺序消费很少用。