【发布时间】:2017-11-01 13:46:45
【问题描述】:
根据AWS docs:
worker 使用 Java ExecutorService 任务调用记录处理器方法。如果任务失败,工作人员将保留对记录处理器正在处理的分片的控制权。工作人员启动一个新的记录处理器任务来处理该分片。有关详细信息,请参阅读取限制。
根据 AWS 文档上的 another page:
Kinesis 客户端库 (KCL) 依赖于您的 processRecords 代码 处理因处理数据记录而产生的任何异常。任何 从 processRecords 抛出的异常被 KCL 吸收。避免 重复失败时无限重试,KCL 不会重新发送 在异常发生时处理的一批记录。当时的KCL 为下一批数据记录调用 processRecords 重新启动记录处理器。这有效地导致消费者 应用程序观察跳过的记录。为了防止跳过记录, 适当处理 processRecords 中的所有异常。
这两种说法不是相互矛盾的吗?一个说记录处理器重新启动,另一个说分片被跳过。 当记录处理器发生故障时,KCL 究竟做了什么? KCL 工作人员如何知道记录处理器是否发生故障?
【问题讨论】:
标签: amazon-web-services amazon-dynamodb amazon-kcl