Amazon KCL 检查点和 Trim Horizo​​n

Posted

技术标签:

【中文标题】Amazon KCL 检查点和 Trim Horizo​​n【英文标题】:Amazon KCL Checkpoints and Trim Horizon 【发布时间】:2016-11-27 09:43:48 【问题描述】:

AWS KCL 库中的检查点和修整如何相关?

文档页面处理启动、关闭和节流说:

默认情况下,KCL 从前端开始读取记录 stream;,这是最近添加的记录。在这个 配置,如果数据生成应用程序将记录添加到 在任何接收记录处理器运行之前流,记录 记录处理器启动后不会读取它们。

更改记录处理器的行为,使其始终 从流的开头读取数据,设置以下值 在您的 Amazon Kinesis Streams 应用程序的属性文件中:

initialPositionInStream = TRIM_HORIZON

文档页面Developing an Amazon Kinesis Client Library Consumer in Java 说:

Streams 要求记录处理器跟踪记录 已经在分片中处理的。 KCL 负责 通过检查点为您进行跟踪 (IRecordProcessorCheckpointer) 来处理记录。唱片处理器 调用此接口上的检查点方法以通知 KCL 如何 到目前为止,它在处理分片中的记录方面取得了进展。在里面 如果 worker 失败,KCL 会使用此信息重新启动 在最后一个已知的已处理记录处处理分片。

第一页似乎说 KCL 在流的顶端恢复,第二页在最后一个已知的已处理记录(由 RecordProcessor 使用 checkpointer 标记为已处理)。就我而言,我肯定需要在最后一个已知的已处理记录处重新启动。是否需要将 initialPositionInStream 设置为 TRIM_HORIZON?

【问题讨论】:

【参考方案1】:

使用 kinesis 流,您有两个选择,您可以读取最新记录,或从最旧的记录开始 (TRIM_HORIZON)。

但是,一旦您启动应用程序,它只会从停止使用其检查点的位置读取。 您可以在 dynamodb 中看到这些检查点(通常表名作为应用程序名称)。 因此,如果您重新启动应用,它通常会从停止的地方继续。

答案是否定的,您不需要将 initialPositionInStream 设置为 TRIM_HORIZON。

【讨论】:

谢谢,所以实际上如果没有可用的检查点,initialPositiionInStream 适用于确定要启动的值? 感谢您的回答,我希望它在官方文档中。这几天我一直很困惑:) 这种检查点原理是 KCL 特有的还是也可以在 Lambda 中使用?【参考方案2】:

当您从 kinesis 流中读取事件时,您有 4 个选项:

TRIM_HORIZON - 在自动修剪之前仍在流分片中的最旧事件(默认为 1 天,但可以延长至 7 天)。如果您想启动一个处理流中所有可用记录的新应用程序,您将使用此选项,但它需要一段时间才能赶上并开始实时处理事件。

LATEST - 流中的最新事件,并忽略所有过去的事件。如果您启动要立即处理的新应用程序,您将使用此选项。

AT/AFTER_SEQUENCE_NUMBER - 序列号通常是您在处理事件时保留的检查点。这些检查点允许您可靠地处理事件,即使在读取器发生故障或您想要更新其版本并继续处理所有事件而不丢失任何事件时也是如此。 AT/AFTER 之间的差异取决于您的检查点的时间,在您成功处理事件之前或之后。

请注意,这是唯一的分片特定选项,因为所有其他选项对于流都是全局的。当您使用 KCL 时,它会为该应用程序管理一个 DynamoDB 表,其中包含每个分片的记录以及该分片的“当前”序列号。

AT_TIMESTAMP - 放入流的事件的估计时间。如果您想根据时间戳查找要处理的特定事件,您将使用此选项。例如,当您知道在特定时间您的服务中有一个真实的事件时,您可以开发一个应用程序来处理这些特定事件,即使您没有序列号。

在此处查看 Kinesis 文档的更多详细信息:https://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetShardIterator.html

【讨论】:

我有点困惑这是否适用于本机 api 访问而不是 Kcl 使用? KCL 是一个实现 API 的库,它对流的控制比您可以直接通过 API 获得的控制更多。 KCL 正在添加应用程序管理端,以及 DynamoDB 中使用序列号的检查点功能。【参考方案3】:

您应该使用“TRIM_HORIZON”。它只会对您的应用程序开始从流中读取记录的第一次时间产生影响。 之后,它将从最后一个已知位置继续。

【讨论】:

100% 确定?不太确定

以上是关于Amazon KCL 检查点和 Trim Horizo​​n的主要内容,如果未能解决你的问题,请参考以下文章

AWS Kinesis ShardIteratorType TRIM_HORIZON 的预期行为

KCL v0.4.5 发布

第1周 支路变量元件KCL和KVL

电路分析二-------基尔霍夫定律KCL和KVL

KCL:声明式的云原生配置策略语言

TRIM_HORIZON vs LATEST