1

我们正在尝试重新设计我们当前的数据管道,并考虑Streaming是否可以替代数据移动。 RDBMS事件涉及对现有数据以及历史数据的INSERT,UPDATE和DELETE。所有这些事件都可以有唯一标识它们的键。正确性和完整性非常重要,而处理这些事件和延迟可能会在一定程度上被牺牲。即我们需要基于某些密钥来处理微批处理中的事件,并且我们需要没有更多关键事件(近似值,启发式等都很好)。此外,这些事件并未订购。即key1,key2数据可以一起到达。在某一时刻,key1的所有记录都将到达,而在另一时刻,key2的所有数据都将到达。问题是如何以有意义的方式处理键控数据。再次完整性很重要。我们可以以增量累加结果,但直到我们拥有给定密钥的完整数据时才会有用。流媒体 - 如何逐步处理RDBMS更新并删除事件

我可以想到的一种方式是使用no-sql存储来使用主键作为行键存储此事件,并在no-sql存储上执行幂等更新。但我认为它也必须保持关键数据变化的状态,并使其可供下游用户使用,以便他们知道哪些数据发生了变化。他们现在可以从no-sql存储读取数据。但现在的问题是没有-sql存储是易变的,所以下游可能会处理不一致的数据。

另一种方法是不依赖no-sql,而是以某种方式从流中处理数据。我正在阅读流处理的一些概念,如固定滑动窗口,会话窗口,水印。但我看不出有没有解决这个问题。可能是我需要基于数据(键)的非对齐窗口和 来自发布者的某些信号表明每批事件的完成?

+0

您是否尝试过任何流引擎,如@ apache-apex:http:// apex。 apache.org/? – daemon12

+0

我还没有。看看火花流和谷歌数据流。我更新了我的问题来解释用例。你知道apex已经实现了哪些特定的概念,可以帮助我的用例吗? – nir

回答

0

我已经把这个项目放在一边,但我经历了一些关于谷歌数据流,火花流和apache束的文档。 Storm和Apex在这一点上似乎太复杂了。

有像watermarkstriggers的概念,看起来很有希望告诉你,当窗口是完整的,当你应该开始处理。我可以继续积累事件,直到我收到每个流的水印事件,告诉我开始处理。您可能需要更改您的数据源或这些事件的发布者才能发送此“事件完成”事件。这可能只是难题的第一部分。一旦你有了自定义的事件窗口,那么在开始处理或者更新/删除数据存储中的条目之前,你可能需要经过这些事件并从数据存储(hbase,cassandra)中提取额外的数据;同样,如果您有更多的下游用户,那么您必须向下游传达在该自定义窗口中完成的更改或上游处理,因为您已经拥有该事件,所以对于任何下游可能不易访问。您可能只需要这些事件的标准,以确定他们跨越多个消费者,像客户ID,交易ID,时间期限等downstreamer。