5

将一个分片拆分为 2 个子分片时,父分片将关闭。预计记录处理器(此处使用 KCL)将在发生这种情况时检查点,如以下 KCL 源代码所示:

try {
                recordProcessor.shutdown(recordProcessorCheckpointer, reason);
                String lastCheckpointValue = recordProcessorCheckpointer.getLastCheckpointValue();
                if (reason == ShutdownReason.TERMINATE) {
                    if ((lastCheckpointValue == null)
                            || (!lastCheckpointValue.equals(SentinelCheckpoint.SHARD_END.toString()))) {
                        throw new IllegalArgumentException("Application didn't checkpoint at end of shard "
                                + shardInfo.getShardId());
                    }
                }

问题是:

  • 这个检查站是必不可少的吗?

  • 如果记录处理器没有检查点并吸收异常会发生什么?

我问的原因是因为在我的用例中,我想确保流中的每条记录都已处理到 s3,现在如果分片关闭,可能还有一些项目尚未刷新,因此我想确保他们会对子碎片的新消费者/工人感到不满?

如果我检查站,他们不会反感。

有任何想法吗?

提前谢谢。

4

1 回答 1

8

项目不会在分片之间移动。重新分片后,新记录被放入新分片,但旧记录永远不会从父分片转移,并且不再向(现已关闭的)父分片添加新记录。即使在父分片关闭后,数据也会在其正常的 24 小时生命周期内保留在父分片中。您的记录处理器只有在到达父分片的数据末尾后才会关闭。

http://docs.aws.amazon.com/kinesis/latest/dev/kinesis-using-sdk-java-after-resharding.html

顺便说一句,您可能知道 SDK API 很困难,而且客户端库也好不到哪里去。试试连接器库,它是一个更好的 API,包括一个 S3 归档应用程序的示例。

https://github.com/awslabs/amazon-kinesis-connectors

于 2015-03-16T05:33:03.250 回答