You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Amazon Kinesis KCL 1.14.3多分片多实例如何保留分片租约优雅处理记录

Kinesis分片租约优雅关闭解决方案

你碰到的是Kinesis Client Library(KCL)的租约回收逻辑问题,ZOMBIE 类型的关闭通知本质是KCL判定当前实例持有的对应分片租约已经过期丢失,此时默认不允许再做checkpoint,要实现优雅关闭需要调整KCL相关配置和重写指定方法:

核心需要重写/调整的部分

  • 重写shutdownRequest方法(KCL 2.x以上版本适用)
    KCL 2.x 新增了shutdownRequest回调,会在租约真正过期前提前通知,这时候租约还没有被回收,你可以在这个阶段完成当前正在处理的记录并提交checkpoint。不要在原有的shutdown方法里做阻塞等待,shutdown被触发的时候租约已经丢失,没有办法再更新checkpoint,这里的逻辑只适合做资源清理。
  • 调整租约相关配置延长优雅关闭窗口期
    修改leaseDurationInSeconds配置,默认是10秒,建议调整到3060秒,预留足够的处理时间;修改`leaseRenewalIntervalInSeconds`配置,默认是3秒,调小到12秒提升租约续期的频率,降低误判为ZOMBIE的概率;开启gracefulLeaseHandoff配置(KCL 2.2+版本支持),开启后KCL会在分片被其他实例抢占前通知当前持有实例,主动移交租约前等待你完成当前处理。
  • 调整记录处理的checkpoint逻辑
    不要等一批记录全部处理完才做checkpoint,可以改成每处理N条记录就做一次增量checkpoint,就算真的出现租约丢失的情况,重复处理的记录量也会降到最低;收到shutdownRequest通知后,立刻停止拉取新的分片记录,只处理当前已经拉取到内存的记录,处理完成后立刻提交checkpoint,再通知KCL可以完成租约移交。

就算做了上面的调整,也没法100%避免重复消费的情况,Kinesis本身是At-least-once交付语义,你的业务逻辑必须要实现幂等性,避免重复处理数据带来的副作用。

内容的提问来源于stack exchange,提问作者Mateusz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 16:45:04