问题描述
我们正在基于Kinesis / DynamoDB流构建服务,并且关于检查点的行为存在以下问题。
我们有一个以以下配置withInitialPositionInStream (InitialPositionInStream.LATEST)
开头的工作程序,并且KCL应用程序的名称始终相同。
我们通过重新打开和关闭工作程序观察到的是,它没有从流的末尾开始消耗,因为我们有一个滞后指标,我们看到当打开工作程序时,消耗滞后是小时,因为它们是我们目前生成的消息,因此我们希望它少于1秒。
- 这是预期的行为吗?
- 我们误解了
LATEST
的工作原理吗?
非常感谢您。
解决方法
作为InitialPositionInStream
状态的文档,
用于指定流中新应用程序应从其开始的位置。 在初始应用程序引导期间(当分片或其父级不存在检查点时)将使用此方法。
因此,它仅在最初的新应用程序引导期间使用,对于LATEST
,它在最近的数据记录之后开始。但是仅当分片或其父级不存在检查点时。
因此,如果您先关闭工作人员然后再将其重新打开,则预计它不再从LATEST
开始,而是从分片的最后一个检查点序列号开始。
KCL不会自动检查站,因此,如果您的工作人员开始时有几个小时的滞后时间,则可能意味着您的检查站太少了。