首页 > 解决方案 > 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);

当我开始玩弄线程数时,会发生奇怪的事情。

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

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

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

谁能指出我正确的方向,好吗?

标签: javascalaapache-kafkaapache-kafka-streams

解决方案


推荐阅读