删除重建同名Kinesis数据流后ETL报错,如何不删DynamoDB表修复?
解决DynamoDB流关联同名新Kinesis流后的ETL任务报错问题
问题原因
每个Kinesis数据流都有唯一的内部标识符(即使名称完全相同)。删除旧流后创建同名新流时,DynamoDB流的关联记录仍指向旧流的标识,而ETL任务保存的shard迭代器属于已被删除的旧流,导致在新流中调用GetShardIterator时触发无效迭代器错误。
解决步骤
更新DynamoDB与Kinesis流的关联
登录DynamoDB控制台,找到目标表,进入「Exports and streams」标签页:- 在「Kinesis data stream」配置项中,先选择「Disable」并保存,等待配置生效。
- 重新选择你创建的同名新Kinesis流,再次保存配置。这会让DynamoDB重新建立与新流的绑定,确保后续数据变更事件发送到新流。
重置ETL任务的读取状态
根据你使用的ETL服务类型操作:- Kinesis Data Firehose:进入Firehose控制台找到对应投递流,点击「停止」,待状态变为已停止后,再点击「启动」。启动后Firehose会从新Kinesis流的最新位置开始读取,不再使用旧的shard迭代器。
- Glue ETL作业:确认作业的Kinesis数据源配置指向新流(可通过ARN验证,避免名称混淆),然后:
- 如果启用了Glue书签,先禁用书签运行一次作业,再重新启用书签;
- 直接重新启动作业,让任务重新初始化对新流的读取上下文。
验证修复效果
在DynamoDB表中执行测试变更(如插入、更新数据),检查ETL任务是否正常捕获事件并同步到Redshift,同时查看任务日志确认GetShardIterator错误已消失。
内容的提问来源于stack exchange,提问作者64rl0
相关产品推荐
相关产品推荐

