19

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

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

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

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

initialPositionInStream = TRIM_HORIZON

使用Java 开发 Amazon Kinesis 客户端库使用者的文档页面说:

Streams 要求记录处理器跟踪已在分片中处理的记录。KCL 通过将检查指针 (IRecordProcessorCheckpointer) 传递给 processRecords 来为您处理此跟踪。记录处理器在此接口上调用检查点方法,以通知 KCL 它在处理分片中的记录方面的进展情况。如果工作程序失败,KCL 会使用此信息在最后一个已知的已处理记录处重新开始处理分片。

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

4

3 回答 3

15

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

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

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

于 2016-07-24T06:37:43.450 回答
5

当您从 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

于 2016-07-31T04:02:00.103 回答
3

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

于 2017-03-27T12:39:32.370 回答