【问题标题】:How does LATEST position in stream works in Kinesis, KCL?流中的最新位置如何在 Kinesis、KCL 中工作?
【发布时间】:2020-10-06 22:14:23
【问题描述】:

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

我们有一个worker,以下面的配置withInitialPositionInStream (InitialPositionInStream.LATEST)开头,KCL应用的名字总是一样的。

我们通过关闭和再次打开工作人员观察到的是,它不会从流的末尾开始消费,因为我们有一个滞后指标,我们看到当工作人员打开时,消费滞后是小时,而我们预计它会少于 1 秒,因为它们是我们目前生成的消息。

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

非常感谢。

【问题讨论】:

  • 您能说明一下您使用的是什么版本的 kinesis 库吗?另外,您是否手动检查点?谢谢。
  • 嗨 Mikalai,我在 java 中使用的是 2.2.11 版的 KCL,我们在 processRecords 中手动执行检查点,但我认为 KCL 在 processRecords 之后会自动执行检查点。
  • 一般来说,LATEST 仅在初始启动时才考虑,当没有租用表时。如果您使用相同的应用程序 id 重新启动应用程序,kcl 将从每个分片的最新设置 num 恢复。据我所知,它不会自动检查点,与例如 kafka 消费者相比。您必须手动检查点。

标签: amazon-kinesis amazon-dynamodb-streams amazon-kcl


【解决方案1】:

作为InitialPositionInStream 的文档,

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 2017-10-09
    • 2016-06-25
    相关资源
    最近更新 更多