Kinesis消费者停机10小时重启后,应选用哪种StartingPosition?
Kinesis消费者重启后获取旧记录的StartingPosition选择
核心结论
要获取停机10小时期间产生的旧记录,你需要选择TRIM_HORIZON,但需结合harlow/kinesis-consumer的checkpoint机制来看具体行为:
两种StartingPosition的实际行为
- LATEST:消费者重启后直接从分片当前最新的记录开始读取,完全跳过停机期间的所有旧记录,仅处理重启后的新数据,和你理解的一致。
- TRIM_HORIZON:这里的“最旧数据”指分片内未被清理的最早记录(Kinesis默认数据保留24小时,10小时的旧数据不会被清理),并非“最旧的未处理记录”。如果没有checkpoint,它会从分片创建以来的最早记录开始消费;如果有checkpoint,则优先从checkpoint位置继续。
针对你的场景的具体建议
首次启动消费者:
直接将StartingPosition设置为TRIM_HORIZON,这样首次启动会从分片最旧的记录开始消费。之后即使停机10小时再重启,由于harlow/kinesis-consumer默认会将checkpoint存储到DynamoDB,重启后会自动从停机前的checkpoint位置继续,刚好能覆盖停机期间的10小时旧记录。已运行过的消费者重启:
如果之前已经有checkpoint存在,重启时无论设置LATEST还是TRIM_HORIZON,包都会优先从上次的checkpoint位置继续消费,这时候自然就能获取停机10小时的旧记录。如果checkpoint被意外删除,设置TRIM_HORIZON会从分片最旧记录开始(包括之前处理过的数据和停机期间的新数据)。若需重新处理10小时的所有数据:
如果之前已经处理过部分数据,但现在想重新获取这10小时的全部记录,需要先手动删除已有的checkpoint,再设置TRIM_HORIZON启动消费者。
内容的提问来源于stack exchange,提问作者Wosabi
相关产品推荐
相关产品推荐

