如何在不丢失数据的情况下部署 Kinesis Data Analytics

问题描述 投票:0回答:1

我们有一个复杂的 IoT 系统,其中 AWS Kinesis Flink 应用程序收集数据、处理数据并将新数据包转发到另一个系统。我们收集大量小数据,例如来自传感器的数据(每个传感器每天大约 100 个)和配置更改(每个传感器每周大约 1 个)。我们在单独的 Kinesis Streams 上接收这些数据,根据两种类型的数据执行一些计算,并将(聚合)数据包发送到新流(大约十个传感器消息加上最后一个配置将产生一个聚合信息包)。

为了实现这一目标,我们根据

KeyedProcessFunctions
中的传感器 ID 分离消息,并将传感器数据和配置数据保存在
ValueStates
中。

非常粗糙的架构:

enter image description here

我们需要做的是使用该架构启动 CI/CD 流程,并在开发其功能和进一步计算时经常更新它。问题是,当我们更新应用程序时,我们会丢失应用程序的内存状态,这可能会导致在最坏的情况下每个传感器丢失最多 10 条传感器消息,因为它们仍处于聚合过程中并且永远不会被聚合并作为新的数据包转发。

更大的问题是我们也会丢失配置数据,导致每个传感器丢失一整天的数据,因为之前的 Flink 应用程序实例收到了配置,现在它丢失了,我们无法处理数据,直到我们收到新配置,可能只能到明天。

有没有好的、值得信赖的方法来解决这个问题?如果我们升级应用程序并在更新应用程序时重播“每天一次”数据流,以确保我们保留

ValueStates

apache-flink amazon-kinesis amazon-kinesis-analytics
1个回答
0
投票

看来快照和更新时恢复快照正是我所寻找的。从这里https://docs.aws.amazon.com/kinesisanalytics/latest/java/how-fault-snapshot.html#how-fault-snapshot-restore

“如果在应用程序的 ApplicationSnapshotConfiguration 中 SnapshotsEnabled 设置为 true,Kinesis Data Analytics 会在应用程序更新、扩展或停止时自动创建并使用快照,以提供一次性处理语义。”

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.