gpt4 book ai didi

apache-flink - Flink Kinesis Consumer 不存储最后成功处理的序列号

转载 作者:行者123 更新时间:2023-12-02 11:49:40 25 4
gpt4 key购买 nike

我们使用 Flink Kinesis Consumer 将 Kinesis 流中的数据消费到我们的 Flink 应用程序中。

KCL 库使用 DynamoDB 表来存储上次成功处理的 Kinesis 流序列号。这样下次应用程序启动时,它就会从上次停止的地方恢复。

但是,Flink Kinesis Consumer 似乎没有维护任何此类序列号。在任何持久性存储中。因此,我们需要依靠 ShardIteratortype(trim_horizen、latest 等)来决定在应用程序重启时从何处恢复 Flink 应用程序处理。

解决此问题的一个可能的解决方案是依赖 Flink 检查点机制,但该机制仅在应用程序因故障而恢复时才有效,而当应用程序被故意取消且需要从上次成功使用的 Kinesis 流序列重新启动时则无效没有。

我们需要自己存储这些最后成功消费的序列号吗?

最佳答案

Flink 的最佳实践是使用检查点和保存点,因为它们会创建一致的快照,其中包含消息队列的偏移量(在本例中为 Kinesis 流序列号)以及作业图其余部分的所有状态由于消耗了这些偏移量的数据而产生的。这使得恢复或重新启动成为可能,而不会丢失或重复数据。

Flink 的 checkpoints快照是 Flink 本身为了故障恢复而自动拍摄的快照,并且采用了针对快速恢复而优化的格式。 Savepoints使用相同的底层快照机制,但都是手动触发,其格式更关心操作灵 active 而不是性能。

保存点就是您要寻找的。特别是cancel with savepointresume from savepoint非常有用。

另一个选择是使用 retained checkpoints使用ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION。

关于apache-flink - Flink Kinesis Consumer 不存储最后成功处理的序列号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54825364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com