我们有以下情况:
@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字段的值被更新为SHARD_END。(但checkpointSubSequenceNumber=0和以前一样)。
大约24小时后,我们看到了数据,这是一天前开始通过我们的处理器再次(我确信)。GetRecords.IteratorAgeMilliseconds去了80M+。发送的数据一天前就已经被处理了(签入日志/等)。
,我们是不是搞砸了正确的关机碎片?,我们会在24小时后伪造收到这些数据吗?对这种行为有什么解释吗?
是的,租约表现在有30条记录: 20条用于碎片,10-29用于checkpoint=SHARD_END,10条用于后面的碎片。我已经删除了以前存在的0-10个碎片的10个记录,同时试图强制重新启动处理。我担心的是,lease_counter正在成长为死碎片。在这段时间里,作家并没有停下来。
发布于 2018-11-28 22:44:21
因此,问题是:在正常记录处理之后没有检查点。默认情况下我们有最新的检查点。在我们开始使用reshard之前,我们从未想过可能会丢失一些数据(例如,在部署期间,如果在新实例启动之前将现有实例放下)。
关闭()时没有检查点。
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解释得差不多了)。
https://stackoverflow.com/questions/53182535
复制相似问题