我想了解何时从worker调用IRecordProcessor的processRecords方法。如果我之前对processRecords的调用尚未完成,工作人员会调用下一个processRecords吗?工作人员是否会开始从kinesis获取新记录,还是会等到当前记录完成执行。
基本上我想等待很长时间,如果processRecords在保存外部数据库中的记录时出现异常,因为db已关闭或其他一些错误。因此,如果工作人员在完成处理之前没有开始获取新记录,那么想要确认是否存在任何问题?
答案 0 :(得分:0)
摘自其他问题:
该申请(在KCL的帮助下)将继续民意调查“Shard 迭代器“在后台,因此您将收到有关新的通知 数据来了。
来源:https://stackoverflow.com/a/35582161/1622134
而且,“worker”是指应用程序中的“Worker”线程;这是一个可运行的。
每个分片只由一个KCL工作人员处理,并且只有一个 相应的记录处理器,所以你永远不需要多个实例 处理一个碎片。请参阅KCL来源中的Worker.java课程。
来源:https://stackoverflow.com/a/34509567/1622134
要回答您的问题,您可以在processRecords
实施中解决问题。处理记录时,当且仅当try部分成功时,使用try-catch块并将检查点写入DynamoDB。那样;如果写入外部数据库时出错,则不会丢失记录并重新启动。您还应该将这些记录数据(无法插入数据库中)保存到其他地方以便稍后处理。