我是Kafka的新手,我认为我在如何平衡分区队列的主题上遗漏了一些东西
我们在一个主题上有5个分区和2个消费者。该主题有一个空键,因此我假设Kafka以循环方式随机挑选一个新分区来添加新记录。
这意味着一个消费者将从3个分区中读取数据,而另一个消费者将从2个分区中读取数据。如果我的假设是正确的(即记录在多个分区中平均不受信任),则具有3个分区的消费者将执行更多的工作(多1.5倍)。这可能会导致一个消费者什么都不做,而另一个消费者则继续努力工作。
我认为你应该为消费者提供一个均匀可分的分区数量。
我是不是遗漏了什么?
发布于 2018-08-01 13:12:01
消费Kafka消息的并行单位是分区。使用Kafka消息的常规场景是使用数据流处理引擎(如Apache Flink、Spark和Storm )获取消息,所有这些消息都在CPU核心上进行分布式处理。规则是每个使用者组的最大并行级别可以是分区的数量。使用者组的每个使用者实例(例如CPU核心)可以使用一个或多个分区,而另一方面,每个分区只能由使用每个使用者组的一个使用者实例。
图像可以很好地描述一切:

发布于 2018-08-01 17:22:29
如果我的假设是正确的(即记录均匀地分布在多个分区中),那么拥有3个分区的使用者将执行更多的工作(多1.5倍)。这可能会导致一个消费者什么都不做,而另一个消费者则继续努力工作。
为什么一个消费者什么都不做?当然,假设两个使用者在同一组中,它仍然会处理这两个分区中的记录
我认为你应该为消费者提供一个均匀可分的分区数量。
是的,这就对了。为了获得最大的并行度,你可以拥有与#个分区一样多的使用者,例如,在你的例子中,5个使用者会给你最大的并行度。
发布于 2018-08-03 04:48:00
你的理解是正确的。可能存在数据偏差。您可以使用偏移量检查器或其他工具检查每个分区中有多少条记录。
https://stackoverflow.com/questions/51624905
复制相似问题