根据AWS docs:
worker使用Java ExecutorService任务调用记录处理器方法。如果任务失败,则工作程序将保留对记录处理器正在处理的分片的控制。工作人员启动新的记录处理器任务来处理该分片。有关更多信息,请参阅读取限制。
根据AWS文档中的another page:
Kinesis客户端库(KCL)依赖于您的processRecords代码 处理因处理数据记录而产生的任何异常。任何 processRecords引发的异常被KCL吸收。避免 在重复出现故障时无限次重试,KCL不会重新发送 异常时处理的批记录。 KCL然后 调用processRecords用于下一批数据记录而不用 重新启动记录处理器。这有效地导致了消费者 应用程序观察跳过的记录。为了防止跳过记录, 正确处理processRecords中的所有异常。
这两个矛盾的陈述不是吗?一个说记录处理器重新启动,另一个说碎片被跳过。 当记录处理器出现故障时,KCL究竟做了什么? KCL工作人员如何知道记录处理器是否失败?
答案 0 :(得分:4)
根据我编写,调试和支持基于KCL的应用程序的经验,第二个语句更清晰/准确/有用,用于描述您应该如何考虑错误处理。
首先,有点背景知识:
第一个声明是尝试(不是很清楚)说当 KCL任务失败时,该工作者的实例将控制它正在处理的分片(而不是将它们转移给另一个工人。)