Edm*_*984 12 amazon-web-services amazon-kinesis amazon-kcl
AWS KCL库中的检查点和修剪如何相关?
文档页面处理启动,关机和限制说:
默认情况下,KCL开始从流的尖端读取记录;这是最近添加的记录.在此配置中,如果数据生成应用程序在任何接收记录处理器运行之前将记录添加到流中,则记录处理器在启动后不会读取这些记录.
要更改记录处理器的行为以便始终从流的开头读取数据,请在Amazon Kinesis Streams应用程序的属性文件中设置以下值:
initialPositionInStream = TRIM_HORIZON
文档页面用Java开发Amazon Kinesis Client Library Consumer说:
Streams要求记录处理器跟踪已在分片中处理的记录.KCL通过将checkpointer(IRecordProcessorCheckpointer)传递给processRecords来为您完成此跟踪.记录处理器在此接口上调用checkpoint方法,以通知KCL处理分片中记录的进度.如果工作程序失败,KCL将使用此信息重新启动最后一个已知处理记录的分片处理.
第一页似乎表示KCL在流的顶端恢复,第二页在最后一个已知的已处理记录(已标记为RecordProcessor使用该处理的处理checkpointer).在我的情况下,我肯定需要重新启动最后一个已知的处理记录.我需要将initialPositionInStream设置为TRIM_HORIZON吗?
ita*_*iel 13
使用kinesis流,您有两个选项,您可以阅读最新的记录,或从最旧的记录(TRIM_HORIZON)开始.
但是,一旦启动了应用程序,它就会从使用其检查点停止的位置读取.您可以在dynamodb中看到这些检查点(通常表名是应用程序名称).因此,如果您重新启动应用程序,它通常会从停止的位置继续.
答案是否定的,您不需要将initialPositionInStream设置为TRIM_HORIZON.
当您从 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
| 归档时间: |
|
| 查看次数: |
9656 次 |
| 最近记录: |