AWS KCL库中的检查点和修剪如何相关?
文档页面处理启动,关机和限制说:
默认情况下,KCL开始从提示中读取记录 stream;,这是最近添加的记录。在这 配置,如果数据生成应用程序添加记录 在任何接收记录处理器运行之前的流,记录 记录处理器启动后不会读取它们。
更改记录处理器的行为以便始终如此 从流的开头读取数据,设置以下值 在您的Amazon Kinesis Streams应用程序的属性文件中:
initialPositionInStream = TRIM_HORIZON
文档页面用Java开发Amazon Kinesis客户端库使用者说:
Streams要求记录处理器跟踪记录 已经在分片中处理过的。 KCL负责 通过检查指针为您跟踪 (IRecordProcessorCheckpointer)来处理记录。记录处理器 在此接口上调用checkpoint方法以通知KCL如何 它在处理碎片中的记录方面取得了很大进展。在里面 如果工作程序失败,KCL将使用此信息重新启动 在最后一个已知处理记录处处理分片。
第一页似乎说KCL在流的顶端恢复,第二页在最后一个已知的已处理记录(使用RecordProcessor
标记为由checkpointer
处理) 。在我的情况下,我肯定需要重新启动最后一个已知的处理记录。我是否需要将initialPositionInStream设置为TRIM_HORIZON?
答案 0 :(得分:11)
使用kinesis流,您有两个选项,您可以阅读最新的记录,或从最旧的记录开始(TRIM_HORIZON)。
但是,一旦你启动你的应用程序,它只是从它停止使用其检查点的位置读取。 您可以在dynamodb中看到这些检查点(通常表名是应用程序名称)。 因此,如果您重新启动应用程序,它通常会从停止的位置继续。
答案是否定的,您不需要将 initialPositionInStream 设置为TRIM_HORIZON。
答案 1 :(得分:2)
当您从kinesis流中读取事件时,您有4个选项:
TRIM_HORIZON - 在自动修剪之前仍然在流分片中的最早事件(默认为1天,但最多可延长7天)。如果要启动一个新的应用程序来处理流中可用的所有记录,您将使用此选项,但它需要一段时间才能赶上并开始实时处理事件。 / p>
LATEST - 流中的最新事件,并忽略所有过去的事件。如果您要立即启动要在青色时间处理的新应用程序,则将使用此选项。
AT / AFTER_SEQUENCE_NUMBER - 序列号通常是您在处理事件时保留的检查点。这些检查点允许您可靠地处理事件,即使在读取器出现故障或您想要更新其版本并继续处理所有事件而不会丢失任何事件时也是如此。 AT / AFTER之间的差异取决于检查点的时间,成功处理事件之前或之后。
请注意,这是唯一的特定于分片的选项,因为所有其他选项都是流的全局选项。当您使用KCL时,它正在为该应用程序管理一个DynamoDB表,其中包含每个分片的记录,其中包含" current"该分片的序列号。
AT_TIMESTAMP - 放入流中的事件的估计时间。如果要根据时间戳查找要处理的特定事件,可以使用此选项。例如,当您知道在特定时间服务中有真实生活事件时,即使您没有序列号,也可以开发一个处理这些特定事件的应用程序。
在此处查看Kinesis文档中的更多详细信息:https://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetShardIterator.html
答案 2 :(得分:0)
你应该使用" TRIM_HORIZON"。它只会对您的应用程序开始从流中读取记录的第一次时间产生影响。 在那之后,它将从上一个已知位置继续。