KTable聚合转发相同的消息

时间:2019-10-17 19:20:02

标签: apache-kafka-streams

我正在使用kafka-streams将消息聚合到KTable中。在聚合逻辑中,我总是返回相同的累加器,如下所示:

  streamOfInts
    .groupByKey()
    .aggregate(Accumulator.empty()) {k,v,acc -> acc}
    .toStream()
    .to(...)

我的期望是-由于KTable的值未更改-没有值将被发送到下游。然而,这种情况并非如此。聚合函数始终转发更新。

确保值相同(或相等)的更新不会导致向下游转发的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

DSL运营商根据设计atm发出“更新时”而不是“更改时”。有一张JIRA票证建议添加“变更时发出”语义(https://issues.apache.org/jira/browse/KAFKA-8770)。

作为一种解决方法,您可以使用状态存储实现自定义transform() -对于每个输入记录,请检查存储是否是新存储(->发出并放入存储)或是否已更改(->发出并更新存储)。如果存在并且没有更改,请不要发出任何东西。