如何确定分区数
Kafka中的消息数据是保存到各个Partition分区中的,Partition分区是Kafka并行化的基础,不同的Partition分区分布到各个Broker中,可以实现机器间的并行处理。同一Broker下的不同Partition分区分布到不同的磁盘驱动上,也可实现磁盘间的并行处理。所以,理论上Partition分区的个数决定了最大并行度。但是,分区数也不是越多越好。
如何确认消费者数
我们分析Kafka消费者的分区分配策略可以知道,Topic下的分区是按照分区分配策略分配给消费组下的每个消费者,如下:
- range:每个消费者分配(某个订阅的Topic分区数 / 总消费者数),那么剩下的分区数(Topic下的分区数 % 总消费者数)分配给前n个消费者。
- roundRobin:每个消费者分配(所有订阅的分区数 / 总消费者数),那么剩下的分区数(所有订阅的分区数 % 总消费者数)分配给前n个消费者。
那么分区数和消费者数的关系分如下几种情况:
- 分区数 > 消费者数:每个消费者消费1个或者多个分区
- 分区数 = 消费者数:每个消费者消费一个分区
- 分区数 < 消费者数:部分消费者没有消费分区,剩下的消费者消费一个分区
假设分区数为N,那么消费者数为N能达到最大的吞吐量,当消费者数大于分区数N的时候,比N多的那部分消费者将无法消费任何分区,浪费系统资源