首页 > 解决方案 > 更正流数据中的聚合视图

问题描述

这个问题与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。

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

标签: streamstreamingapache-kafka-streamsksqldb

解决方案


在 Kafka Streams 中,您可能可以执行KStream#groupBy()#aggregate()#mapValue(). aggregate() 不会计算聚合,而是返回一个 id->value 的 Map。在 mapValue() 中,您计算​​ Map 的所有值的聚合。这样,当更新到达时,如果将旧值替换为 Map 中的新值,并且 mapValue() 将正确地重新计算聚合结果。


推荐阅读