java - 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,会发生一些事情:
- 计数增长非常非常缓慢。
- 最初的增长似乎是对数的。
- 当新消息到达暂停时,计数继续线性增长。
- 它似乎永远无法达到预期的价值。
谁能指出我正确的方向,好吗?
解决方案
推荐阅读
- php - R 和 PHP 的新手尝试将表单数据重定向到 R 脚本
- ruby - rubygem add_dependency 中版本限制的推荐做法是什么?
- inno-setup - Inno Setup - 设置 [Files] 后使用 [Code] 中的输入作为参数
- oauth-2.0 - 本地身份验证以及 oauth2
- reactjs - 如何在 getDerivedStateFromProps 中设置 js 属性?
- java - BufferedWriter 防止覆盖
- java - 无法在此 ManagedType [未知] 上找到具有给定名称 [XXX] 的属性
- django - 如何在 Django 视图上运行在浏览器上输入的 Python 代码?
- gradient - gpflow SVGP的爆炸梯度
- c# - C#:Visual Studio 不应用缩进规则