当前位置: 首页 > 知识库问答 >
问题:

Kafka不会均匀地填充主题中的分区

司徒锐进
2023-03-14

我想有一个主题与10个分区。我使用的是Kafka的默认配置。我用帮助器脚本创建了一个有10个解析的主题,现在我将为它生成消息。

问题是,消费者似乎只有5个分区可以从中获取数据。

让我们更详细地描述一下。

我知道每个分区需要一个使用者线程。我希望能够提交每个分区的偏移量,这是可能的,只有当我有一个线程每个消费连接器每个分区(我是使用高级消费)。

topicCountMap.put("mytopic", 1);

当我这样做10次时,我有10个消费者,每个分区每个线程的消费者,我可以在每个分区独立提交偏移量,因为如果我在主题映射中放置不同的数字,我将为该主题提交超过1个消费者线程,所以如果我要用创建的消费者实例提交偏移量,它将为所有线程提交这些偏移量,这是不希望的,因此为多个分区提交这些偏移量是不希望的。

但问题是,当我使用消费者时,只有5个消费者参与,似乎其他线程是空闲的,但我不知道为什么。

第一个可能的原因是,即使我有10个分区,只有5个分区有消息,所以其他5个消费者是空闲的,但我不明白为什么当我使用生产者时,消息不能均匀地分布在所有分区上。我发送了1M的信息,所以如果说它们是均匀分布的,每个家庭都必须至少有一些信息在里面。

//编辑

我设法在一个主题中创建了10个分区,但只有7个使用者。那对我来说只是个奇迹。

问题是,我正在循环中创建这些消费者线程。所以我启动第一个线程(提交到executor服务),然后是另一个,然后是另一个等等。

这样的场景是,第一个使用者得到所有10个分区,然后第二个连接,所以这两个之间的分裂为5和5(或类似的东西),然后其他线程连接。

我将此理解为所有使用者之间的分区重新平衡,因此它在这样的意义上表现良好,即如果创建了更多的使用者,那么这些使用者之间就会发生分区平衡,因此每个使用者都应该有一些分区可操作。

但是从结果中我看到只有7个消费者,根据所消费的消息,他们似乎被分成了3,2,1,1,1,1,1分区。是的,这7个消费者涵盖了所有10个分区,但为什么超过1个分区的消费者不进行分割,而将分区交给其余3个消费者呢?

共有1个答案

刘高驰
2023-03-14

当我在通过管理脚本创建主题之前(意外地)以编程方式访问主题时,我也看到过类似的行为。在这种情况下,分区数以及其他主题配置设置默认为broker.config中的值

 类似资料:
  • 0.1-0.2:********** 0.2-0.3:******** 0.3-0.4:********* 0.5-0.6:********* 0.6-0.7:********* 0.7-0.8:********* 0.4-0.5:********* 0.5-0.6:********* 0.6-0.7:********* 0.1-0.2:********* 0.2-0.3:********* 0.

  • 我们在AWS上运行16个节点kafka集群,每个节点是m4. xLargeEC2实例,具有2TB EBS(ST1)磁盘。Kafka版本0.10.1.0,目前我们有大约100个主题。一些繁忙的话题每天会有大约20亿个事件,一些低量的话题每天只有数千个。 我们的大多数主题在生成消息时使用UUID作为分区键,因此分区分布相当均匀。 我们有相当多的消费者使用消费群体从这个集群消费。每个使用者都有一个唯一的

  • 我有一个有几个消费者的消费群体。每个使用者被分配到一组分区。消费者何时轮询选择了已使用分区的消息?它是在消费者端完成的,还是Kafka服务器决定使用哪个分区? 我的一些分区有很多消息,但有些分区没有或几乎没有。但我仍然需要我的消费者平等地使用分配给它的每个分区。因此,我需要我的消费者快速遍历分区,最好从每个分配的分区轮询x条消息。 我在用https://github.com/appsignal/r

  • 这个问题与这篇文章有关,如何在4个数组的多维数组中分发mysql结果集 我得到了公认的答案,但现在我想对代码进行修改,但我没有太多的成功。。。 基本上,从一个mysql结果集,我需要填充4个数组均匀分布尽可能多的从上到下...Chris Hayes提供了一个有效的解决方案,但是当我今天测试它时,我意识到它从左到右填充数组,而不是从上到下... 我如何改变代码,使其填充4个数组尽可能从上到下?

  • 问题内容: 我试图识别/创建一个函数(在Java中),该函数给我一个非均匀的分布式数字序列。如果我有一个函数说它将给我一个从到的随机数。 该函数最适合任何给定的函数,下面仅是我想要的示例。 但是,如果我们说函数将返回来自分布式的s nonuni。 我想例如说 约占所有案件的20%。 大约是所有情况的50%。 约占所有案件的20%。 大约是所有情况的10。 总之somting,给我一个数字,如正态分

  • 我正在使用Kafka Producer和RoundRobin分区器来处理一个有12个分区的主题。 代码可在此处找到https://github.com/apache/kafka/blob/2.8/clients/src/main/java/org/apache/kafka/clients/producer/RoundRobinPartitioner.java 我面临的问题是,这个分区程序让分区正确