Java Kafka流:密钥的聚合结果因线程数而异

Java Kafka流:密钥的聚合结果因线程数而异,java,scala,apache-kafka,apache-kafka-streams,Java,Scala,Apache Kafka,Apache Kafka Streams,我有一个包含50个分区的输入主题,我试图统计使用Kafka Streams接收的消息总量。考虑以下拓扑结构: var inputStream = builder.stream("input-topic", Consumed.with(...)); inputStream // Grouping by a constant key here for global aggregation. .groupBy((k, v) -> 1L, Serialized.with(...

我有一个包含50个分区的输入主题,我试图统计使用Kafka Streams接收的消息总量。考虑以下拓扑结构:

var inputStream = builder.stream("input-topic", Consumed.with(...));


inputStream
    // Grouping by a constant key here for global aggregation.
    .groupBy((k, v) -> 1L, Serialized.with(...))
    .count()
    .toStream()
    .foreach((k, v) -> System.out.println("Count updated to: " + v));

...

// For simplicity, let's consider the cache size to be zero.
props.put(StreamsConfig.CACHE_MAX_BYTES_BUFFERING_CONFIG, 0);
当我开始玩线程数时,奇怪的事情就会发生

在具有1个线程的最简单示例中,计数随着接收到的消息数的增加而增加

将线程数设置为例如50,会发生以下情况:

  • 伯爵长得很慢
  • 最初的增长似乎是对数增长
  • 当新到达的消息暂停时,计数继续线性增长
  • 它似乎从未达到期望的值

  • 有人能给我指一下正确的方向吗?

    是不是在50岁的时候开始出错了?1个线程也可以,但是2个线程呢?4.10? 你为什么需要更多的线?如果要进行全局计数,并且所有记录都具有相同的密钥,那么它们将由单个线程处理。