前言
在上一篇的消费者代码中,里面提到了一个很重要的点,那就是在代码中必须要指明消费者组,为什么要这样呢?
这个跟kafka自身在架构设计时是有一定的关系的,通过之前的学习我们知道,kafka天生就是一个分布式的架构,通过分区实现数据的生产的高吞吐量,生产者将数据发送到不同的分区后,接下来,就是消费者消费数据了;
针对消费者来说,broker的规则是:
- 不同的消费者可以消费某个topic下的不同分区的数据;
- 同一个消费者只能消费某个topic下的具体的某个分区的数据,这个在消费的时候由系统规则默认指定分区
- 同一个消费组下的消费者,不能消费相同分区的数据
这里需要说的就是第三点,这一点很重要,为什么呢?这就回到了上面的问题,生产者将消息发送到不同的分区上面,是按照一定的规则进行发送的,即假如100条数据,3个分区,则每个分区都将均匀的承担一部分数据;
假如说,某个消费组内有多个消费者,为了能完全消费某个topic下的所有数据,必然要求该消费组下的不同的消费者各自消费不同分区的数据,这样才有可能完全消费,否则将会出现某个分区的数据没有消费