【问题标题】:Data from Amazon Kinesis to DynamoDB从 Amazon Kinesis 到 DynamoDB 的数据
【发布时间】:2015-06-01 10:37:25
【问题描述】:

我必须将我的数据从 Kinesis 传递到 DynamoDB。问题是当我的软件运行时并非所有数据都到达。 所以当我重新启动我的应用程序时,很多记录都会添加到 DynamoDB 中。 现在我不知道为什么记录没有在运行时间内全部到达,但这是一个大问题。 资源的监控很好,我尝试了 InitialPositionInStream.LATEST 和 InitialPositionInStream.TRIM_HORIZON 没有任何改变。 它发生在某人身上吗?有解决办法吗? 似乎有一个保存记录的缓冲区。我使用了aws的git代码。 可能是网络问题?

【问题讨论】:

    标签: java amazon-web-services record amazon-dynamodb amazon-kinesis


    【解决方案1】:

    Amazon Kinesis 中的记录保存 24 小时。

    如果您使用TRIM_HORIZON,您将从最旧的记录(即最多 24 小时)开始并从那里向前遍历。 LATEST 表示您只对开始新申请后收到的记录感兴趣。

    如果您还没有使用Amazon Kinesis Client Library,我建议您使用它,它将使用它为自己创建的 DynamoDB 表来管理记录的检查点,以保持顺序。这样,当您停止并重新启动应用程序时,它将保存并从上次成功处理的记录恢复(这仍处于接收至少一次的模型中)。

    【讨论】:

    • 我使用了 Amazon Kinesis 客户端,可能问题出在 Kinesis 分片上,因为我用 3 个分片写入没有问题,但是当我阅读时我需要 25 个分片,我认为它们太多了,但看起来工作。
    • 我想知道是不是KCL保存在Dynamo中的序列号太大(注意:如果您之前运行过应用程序并且分片的dynamo记录存在,KCL将使用它的最后一个检查点,而不是LATESTTRIM_HORIZON)。如果您重新创建了流并且没有清除 KCL 正在使用的 dynamo 数据库的内容,则可能会发生这种情况。如果你真的希望 KCL 从LATESTTRIM_HORIZON 开始,那么你需要为流清除 DDB 的内容。
    • 与上述内容差不多,但要添加 KCL 是一个可扩展且容错的库,它提供了简单的接口来处理 Kinesis 记录。我强烈建议将其合并到您的应用程序中,这是一个很好的示例,说明如何使用它github.com/awslabs/dynamodb-cross-region-library
    • 但如果我清除 DDB,我将从流中的第一条记录开始(因为我删除了检查点)。我认为使用 LATEST 我避免了检查点,它只获取新记录,而使用 TRIM_HORIZON 应用程序从第一个未修剪的记录中获取。但尝试它们似乎是平等的。
    • 您对 TRIM_HORIZON 和 LATEST 的工作方式是正确的。您确定这是您正在观察的内容,流中有多个记录(在每种情况下清除 DDB 之后)?可能您需要发布相关代码以及您是如何测试的
    猜你喜欢
    • 1970-01-01
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多