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

问题描述

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

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

我们通过重新打开和关闭工作程序观察到的是,它没有从流的末尾开始消耗,因为我们有一个滞后指标,我们看到当打开工作程序时,消耗滞后是小时,因为它们是我们目前生成的消息,因此我们希望它少于1秒。

  • 这是预期的行为吗?
  • 我们误解了LATEST的工作原理吗?

非常感谢您。

解决方法

作为InitialPositionInStream状态的文档,

用于指定流中新应用程序应从其开始的位置。 在初始应用程序引导期间(当分片或其父级不存在检查点时)将使用此方法。

因此,它仅在最初的新应用程序引导期间使用,对于LATEST,它在最近的数据记录之后开始。但是仅当分片或其父级不存在检查点时。

因此,如果您先关闭工作人员然后再将其重新打开,则预计它不再从LATEST开始,而是从分片的最后一个检查点序列号开始。

KCL不会自动检查站,因此,如果您的工作人员开始时有几个小时的滞后时间,则可能意味着您的检查站太少了。