在Spark Streaming中从Kinesis流中读取超过1个分片

时间:2016-06-30 14:15:51

标签: amazon-dynamodb spark-streaming sharding amazon-kinesis-kpl

我收到此错误:

com.amazonaws.services.kinesis.clientlibrary.exceptions.ShutdownException:无法更新检查点 - 实例不保留此分片的租约

任何想法?

感谢。

1 个答案:

答案 0 :(得分:0)

这似乎是运动学问题。出于调试原因,您可以为 LeaseManager 启用日志记录。还有一些额外的消息应该指示检查点请求的状态。需要考虑的一个重要事项是 failoverTimeMillis。您可以尝试增加 failoverTimeMillis 的值,这有助于避免以下问题。更详细的解释在this GitHub issue

<块引用>

此问题的根本原因是有时 KCL Worker 会丢失一个 租用,然后在特定分片上重新获取新租用 丢弃该分片的旧租约,然后它继续持有 仍然持有旧并发令牌的旧租约。不匹配的 并发令牌可防止检查点,但 Worker 从不丢弃 租约,因为租约清理逻辑只比较 shard-id。

<块引用>

减轻此问题影响的一种方法是增加 failoverTimeMillis 在连接器中默认设置为 1000 毫秒 图书馆。增加 failoverTimeMillis 将减少出现故障的机会 工人失去,然后立即重新获得自己的租约。