分片重新缩放后,Amazon Kinesis复制数据

时间:2018-11-07 01:32:51

标签: amazon-web-services amazon-kinesis

我们有以下情况:

  • 初始10个分片正在运行,读取器正在运行。
  • 我们通过控制台将分片扩展到了20个,我们的应用没有 处理分片终止的适当逻辑。应用程序无法使用新分片中的数据

  • 重新调整为10个分片,没有效果,使用者重启无济于事

  • 3-4小时后,我们在处理器中部署了具有有效关闭代码的修补程序:

    @Override public void shutdown(ShutdownInput shutdownInput) { if(ShutdownReason.TERMINATE.equals(shutdownInput.getShutdownReason())) { try { shutdownInput.getCheckpointer().checkpoint(); } catch (InvalidStateException | ShutdownException e) { log.error("Checkpoint failed", e); } } }

结果,我们已经看到数据注视着要流经处理器。 checkpoint的后备Kinesis表中的值已更新为SHARD_END。 (但checkpointSubSequenceNumber=0和以前一样)。

大约24小时后,我们已经看到一天之久的数据再次开始流经处理器(我敢肯定)。 GetRecords.IteratorAgeMilliseconds达到80M +。发送的数据已于一天前处理过(已在日志/等中检查)。

我们搞砸了正确关闭分片吗?再过24小时后,我们是否最终会伪造接收到的数据?对于这种行为有什么解释吗?

是的,租用表现在有30条记录:20条用于分片10-29(带有checkpoint = SHARD_END)和10条用于以后的分片。在尝试强制重新启动处理时,我已经删除了0-10个分片的先前存在的10条记录。我担心lease_counter的碎片越来越多。 作家一直没有停止。

1 个答案:

答案 0 :(得分:0)

因此,问题是: 正常记录处理后无检查点。默认情况下,我们有最新的检查点。在开始重新分片之前,我们从未想到我们可能会丢失一些数据(例如,如果在部署新实例之前将现有实例放下,则在部署期间)。

在shutdown()上没有检查点。

AWS具有v1和v2客户端的文档,但仅描述了v1中的所有内容。因此,请注意并检查v1的文档(此https://github.com/aws-samples/amazon-kinesis-learning/blob/master/src/com/amazonaws/services/kinesis/samples/stocktrades/processor/StockTradeRecordProcessor.java的解释很清楚)。