纠正流数据中的聚合视图

时间:2019-03-19 19:32:41

标签: stream streaming apache-kafka-streams ksql

此问题与KSQL或流处理技术的聚合视图有关。当我们接收事件时,我们将应用group by子句对事件进行汇总。现在发生了一个事件,它是对先前某个事件的更正。这将使我的聚合视图处于不一致状态。这不是乱序事件到达的情况。例如。我有一个事件(e),由实体ID(t),类别(c)和数量(q)属性组成。 追踪事件

1) e1 —> t1, c1, q1
2) e2 -> t2, c2, q2
3) e3 -> t3, c1, q3
4) e4 -> t1, c1, q4 correction to e1
5) e5 -> t5, c2, q5

我的汇总视图将是按类别对数量分组的总和

c1 -> q1 + q3 + q4

c2 -> q2 + q5.

c1现在处于不一致状态。 c1应该仅是q3 + q4。

是否有任何解决此类问题的方法。我知道我可以将所有事件保留在某个缓存中,然后创建一个聚合视图,但这是实时数据,因此每次都需要刷新所有视图。

1 个答案:

答案 0 :(得分:0)

在Kafka Streams中,您可以执行KStream#groupBy()#aggregate()#mapValue()。 Aggregate()不会计算聚合,但会返回id-> value的Map。在mapValue()中,您可以计算Map的所有值的汇总。这样,当更新到达时,if将用Map中的新值替换旧值,而mapValue()将正确地重新计算聚合结果。