AWS KCL Worker关闭后租约表条目超分片数问题排查与解决
问题:DynamoDB Streams KCL 租约表异常交互(版本1.6.0)
使用AWS KCL(DynamoDB Streams适配器版本1.6.0)开发流服务时,遇到租约表与Worker异常交互问题:
- 流仅包含15个分片(已通过
aws dynamodbstreams describe-stream命令确认) - 租约表初始有约105条租约,最终自动降至15条
- 关闭应用时,日志显示这15条租约对应的Worker关闭原因为
ZOMBIE - 应用关闭后,租约表条目数又增至约97条,导致后续启动服务失败,仅能通过删除租约表重置,但问题会重复出现
当前使用的shutdown方法实现如下:
public void shutdown(ShutdownInput shutdownInput) { log.info("Shutting down, reason: " + shutdownInput.getShutdownReason()); try { if (shutdownInput.getShutdownReason() == ShutdownReason.TERMINATE && prevRecord != null) { shutdownInput.getCheckpointer().checkpoint(prevRecord); }else if (shutdownInput.getShutdownReason() != ShutdownReason.ZOMBIE){ shutdownInput.getCheckpointer().checkpoint(); } } catch (Exception e) { log.error(e.getMessage(), e); } }
预期行为:Worker关闭时,能从上次checkpoint的位置恢复租约。
问题根源与解决方案
- 问题根源:在普通
Thread中运行Worker并调用.shutdown(),会导致Worker将所有RecordProcessor实例判定为ZOMBIE,且未完成租约刷新操作 - 解决方案:将Worker置于单线程
ExecutorService中运行
内容的提问来源于stack exchange,提问作者Mason Chester
相关产品推荐
相关产品推荐

