stream - 更正流数据中的聚合视图
问题描述
这个问题与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。
有没有办法解决这些问题。我知道我可以将所有事件保存在某个缓存中,然后创建一个聚合视图,但这是实时数据,所以我的所有视图每次都需要刷新。
解决方案
在 Kafka Streams 中,您可能可以执行KStream#groupBy()#aggregate()#mapValue()
. aggregate() 不会计算聚合,而是返回一个 id->value 的 Map。在 mapValue() 中,您计算 Map 的所有值的聚合。这样,当更新到达时,如果将旧值替换为 Map 中的新值,并且 mapValue() 将正确地重新计算聚合结果。
推荐阅读
- javascript - 如果数组索引值等于 ax & y 值,如何返回布尔值
- python - 如何将条形图设置为仅使用传递给 bar 函数的值?
- angular - 如何将活动类添加到具有角度片段的链接?
- ejb - EJB 丢失 @MappedSuperclass 属性
- logging - Log4J 日志记录实现
- html - 如何在此类 data-v-056fbda 类中使用 xpath
- automated-tests - 使用 appium 对聊天应用程序进行自动化测试
- asp.net-mvc - 在 ASP.NET MVC 5 客户端中获取声明,为 Identity Server 4 中的 TestUser 设置
- html - Bootstrap,如何将 div 元素保留在 img-fluid 下?
- blockchain - Remix IDE 在已部署的合约选项下不显示已部署的功能