所以我需要一个GlobalKTable
包含多个实例中多条消息的聚合。现在,我的单个实例KTable
设置看起来像这样:
final KTable<String, Double> aggregatedMetrics = eventStream
.groupByKey(Serdes.String(), jsonSerde)
.aggregate(
() -> 0d,
new MetricsAggregator(),
Serdes.Double(),
LOCAL_METRICS_STORE_NAME);
显然,这不会扩展,因为每个实例只有它收到的消息的更新指标,而不是所有其他实例收到的所有消息。我在考虑使用它:
final KStreamBuilder builder = new KStreamBuilder();
builder.globalTable(METRIC_CHANGES_TOPIC, METRICS_STORE_NAME);
然后只是将我的aggregatedMetrics
KTable的更新流式传输到METRIC_CHANGES_TOPIC
,这将更新全局表。但是,每个实例只会在每次更新全局表时覆盖其他实例的聚合。
我有什么办法可以进行全球聚合吗?
答案 0 :(得分:2)
解决方案对我来说是正确的。
这听起来不正确:
但是,每个实例都只是覆盖其他实例&#39;每次更新全局表时的聚合。
请注意,聚合是基于密钥完成的。因此,不同的实例将聚合在不同的键上,因此,每个实例只会在GlobalKTable
中更新自己的键。