Kafka Streams:键的聚合结果根据线程数而不同

Jak*_*ski 5 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(...))
    .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);
Run Code Online (Sandbox Code Playgroud)

当我开始调整线程数量时,奇怪的事情发生了。

在具有 1 个线程的最简单示例中,计数随着收到的消息数量而良好增长。

将线程数设置为例如 50,会发生一些事情:

  1. 计数增长非常非常缓慢。
  2. 最初的增长似乎是对数的。
  3. 当新消息到达暂停时,计数会继续线性增长。
  4. 它似乎永远达不到预期的值。

有人能指出我正确的方向吗?