Flink或kafka流,以防流中的任何更改导致处理所有数据

时间:2020-06-25 13:20:09

标签: apache-flink apache-kafka-streams flink-streaming

我有一个用例,可以让我根据日期获取余额,并且我想显示每天的正确余额。如果获取旧日期的更新,则该日期之后该帐户的所有余额都会更改。 例如

Account   Date    balance  Total balance
IBM       1Jun    100      100
IBM       2Jun    50       150 
IBM       10Jun   200      350
IBM       12Jun   200      550

现在我收到日期为6月4日的消息(这是某些事务回溯日期,或者一些更正及其频繁发生的情况)

 Account   Date    balance  Total balance
 IBM       1Jun    100      100
 IBM       2Jun    50       150
 IBM       4Jun    300      450 ----------- all data from this point changes
 IBM       10Jun   200      650
 IBM       12Jun   200      850

它是流数据,因此我希望随时显示每个帐户的正确余额。 我知道flink和kafka非常适合流传输用例,在这种情况下,如果特定日期的更新不会触发该点以后所有数据的更新。但是我们能否很好地实现这种情况,或者这根本不是这些流技术的用例吗?

请帮助

1 个答案:

答案 0 :(得分:0)

您不能在队列中修改过去的消息,因此您应该引入一条使前一条无效的新消息。例如,您可以为每个事务使用一个ID(并在需要修改时重复该ID)。如果您有两条或更多条具有相同ID的邮件,请保留最后一条。

从Kafka Streams看KTable。它可以帮助您使用该ID(或任何其他聚合因子)来聚合数据,并通过有效的简历生成一张表,直到现在。如果收到新消息,将发出表更新