首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >卡夫卡消费者因失衡而挨饿

卡夫卡消费者因失衡而挨饿
EN

Stack Overflow用户
提问于 2018-08-01 11:21:38
回答 4查看 1.4K关注 0票数 0

我是Kafka的新手,我认为我在如何平衡分区队列的主题上遗漏了一些东西

我们在一个主题上有5个分区和2个消费者。该主题有一个空键,因此我假设Kafka以循环方式随机挑选一个新分区来添加新记录。

这意味着一个消费者将从3个分区中读取数据,而另一个消费者将从2个分区中读取数据。如果我的假设是正确的(即记录在多个分区中平均不受信任),则具有3个分区的消费者将执行更多的工作(多1.5倍)。这可能会导致一个消费者什么都不做,而另一个消费者则继续努力工作。

我认为你应该为消费者提供一个均匀可分的分区数量。

我是不是遗漏了什么?

EN

回答 4

Stack Overflow用户

发布于 2018-08-01 13:12:01

消费Kafka消息的并行单位是分区。使用Kafka消息的常规场景是使用数据流处理引擎(如Apache Flink、Spark和Storm )获取消息,所有这些消息都在CPU核心上进行分布式处理。规则是每个使用者组的最大并行级别可以是分区的数量。使用者组的每个使用者实例(例如CPU核心)可以使用一个或多个分区,而另一方面,每个分区只能由使用每个使用者组的一个使用者实例

  • 如果您的CPU核心数超过了分区的数量,则其中一些分区将处于空闲状态。
  • 如果您的CPU核心数少于分区数,则其中一些分区将消耗多个分区。
  • 和最优的情况是当CPU核心和Kafka分区的数量相等时。

图像可以很好地描述一切:

票数 2
EN

Stack Overflow用户

发布于 2018-08-01 17:22:29

如果我的假设是正确的(即记录均匀地分布在多个分区中),那么拥有3个分区的使用者将执行更多的工作(多1.5倍)。这可能会导致一个消费者什么都不做,而另一个消费者则继续努力工作。

为什么一个消费者什么都不做?当然,假设两个使用者在同一组中,它仍然会处理这两个分区中的记录

我认为你应该为消费者提供一个均匀可分的分区数量。

是的,这就对了。为了获得最大的并行度,你可以拥有与#个分区一样多的使用者,例如,在你的例子中,5个使用者会给你最大的并行度。

票数 0
EN

Stack Overflow用户

发布于 2018-08-03 04:48:00

你的理解是正确的。可能存在数据偏差。您可以使用偏移量检查器或其他工具检查每个分区中有多少条记录。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51624905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档