流中的最新位置如何在 KCL 的 Kinesis 中工作?

How does LATEST position in stream works in Kinesis, KCL?

我们正在构建基于 Kinesis/DynamoDB 流的服务,我们有以下关于检查点行为的问题。

我们有一个从以下配置开始的工作器 withInitialPositionInStream (InitialPositionInStream.LATEST) 并且 KCL 应用程序的名称始终相同。

我们通过关闭和再次打开工作程序观察到的是它不会从流的末尾开始消费,因为我们有一个滞后指标并且我们看到当工作程序打开时消费延迟是几小时,当我们期望它小于 1 秒时,因为它们是我们此刻产生的消息。

非常感谢。

正如 InitialPositionInStream 的文档所述,

Used to specify the position in the stream where a new application should start from. This is used during initial application bootstrap (when a checkpoint doesn't exist for a shard or its parents).

因此,它仅在初始新应用程序 bootstrap 期间使用,而在 LATEST 的情况下,它在最近的数据记录之后启动。但仅当分片或其父代不存在检查点时。

因此,如果您关闭您的 worker 然后再次打开它,它不会再从 LATEST 开始,而是从分片的最后一个检查点序列号开始。

KCL 不会自动检查点,因此如果你的工作人员开始时有一个小时的延迟意味着你的检查点可能太少了。