AWS Kinesis ShardIteratorType TRIM_HORIZON 的预期行为

2024-04-24

Context:我不一定指的是基于 KCL 的应用程序,只是纯粹的 Kinesis API 调用。

是否使用TRIM_HORIZON分片迭代器类型立即为您提供流中最早发布的记录(即 Kinesis 内置 24 小时窗口内最早可用的记录),或者只是长达 24 小时前的某个时间段的迭代器/游标,然后您必须使用它来沿着溪流前进,直到达到最早发布的记录?

换句话说,以防不太清楚......

当使用分片迭代器类型时TRIM_HORIZON,是预期的行为,它将返回 24 小时前可用的记录,但如果 24 小时前恰好发布了零条记录,而不是仅 3 小时前,则您的应用程序将需要迭代轮询之前的 21 条记录距离达到 3 小时前发布的记录还有几个小时?

时间线示例:

  1. 9 月 29 日上午 5:00 - 创建一个包含 1 个分片的流“foo”
  2. 9 月 29 日上午 5:02 - 将单个记录“Item=A”发布到“foo”流
  3. 9 月 29 日 5:03 am - 问题 aGetShardIterator打电话给TRIM_HORIZON作为您的分片迭代器类型,然后发出GetRecords使用该分片迭代器调用并接收记录“Item=A”
  4. 9 月 30 日上午 7:02 - 将第二条记录“Item=B”发布到“foo”流
  5. 9 月 30 日上午 7:03 - 问题 aGetShardIterator打电话给TRIM_HORIZON作为您的分片迭代器类型,然后发出GetRecords使用该分片迭代器进行调用。这次通话的结果应该是什么? (注意:我们不记得/重复使用步骤 3 中的分片迭代器)

对于上面的步骤 5,距离“Item=A”消息在流上发布已超过 24 小时,而距离“Item=B”发布仅一分钟。一个新的分片迭代器将与TRIM_HORIZON立即为您提供最早的可用记录,或者您是否需要继续迭代,直到到达某个已发布内容的时间段?

我一直在尝试 Kinesis,昨天或两天前一切都工作正常(即我发布和使用时没有任何问题)。我对代码进行了一些额外的修改,并于今天再次开始发布。当我启动我的消费者时,即使让它运行几分钟也没有任何结果。我尝试同时发布和消费,但仍然一无所获。手动播放后AFTER_SEQUENCE_NUMBER迭代器类型,并使用几天前消费者日志中的一些序列号,我能够访问我最近发布的消息。但如果我回去使用TRIM_HORIZON输入,我根本没有看到任何消息。

我看过docs http://docs.aws.amazon.com/kinesis/latest/dev/amazon-kinesis-consumers.html,但我发现的大多数文档都假设您正在使用 KCL(我实际上最初使用的是 KCL,但当它开始失败时,我转向原始 API 调用)并提到您必须有一个应用程序名称,并且 DynamoDB 表用于跟踪状态。如果您使用纯 Kinesis API 调用或 Kinesis CLI(我最终尝试过这两种方法),我可以说这是不正确的。我终于写了一个纯API脚本来开始TRIM_HORIZON并无限轮询,最终创下新记录(大约进行了 600 次迭代;开始时间晚于“现在”14 小时,发现记录晚于“现在”约 5 小时)。如果这是预期的行为,那么似乎文档中的措辞 http://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetShardIterator.html#Kinesis-GetShardIterator-request-ShardIteratorType只是有点令人困惑/误导:

TRIM_HORIZON - 从分片中最后一个未修剪的记录开始读取 在系统中,这是分片中最旧的数据记录。

我假设(现在看来是错误的)术语“最旧的数据记录”意味着我已发布到流中的记录,而不仅仅是流中的一个时间段。

如果有人可以帮助确认/解释我所看到的行为,那就太好了。

Thanks!


它位于 TRIM HORIZON(修剪水平线)或发生流修剪的水平线(HORIZON)。

分片迭代器在调用时可能会获得 0 条记录,因此您需要继续迭代以到达最旧记录所在的区域(如果您不经常推送到流或有时间间隙)。 getRecords 将为您提供可用于迭代的下一个分片迭代器。

来自文档:http://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetRecords.html http://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetRecords.html

如果分片中没有可用记录 迭代器指向,GetRecords 返回一个空列表。请注意,它 可能需要多次调用才能到达分片的一部分 包含记录。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AWS Kinesis ShardIteratorType TRIM_HORIZON 的预期行为 的相关文章

  • 如何将域添加到 aws 上的现有 SSL 证书

    我有一个与 Amazon Web Services 上的负载均衡器关联的 SSL 证书 我想在该证书上有一个额外的域 我的问题是 是否可以向 aws 上现有的 ssl 证书添加额外的域 我发现您可以在创建证书时添加其他名称 但我不知道如何使
  • 如何修改 Amazon RDS 实例的 my.ini 参数

    在启动 MySQL 5 5 RDS 实例时 Amazon 使用默认参数组来配置 my ini 参数 但控制台不允许我修改它们 我怎样才能实现这个目标 例如默认将存储引擎设置为MyISAM或设置字符集 此处记录了这一点 http aws am
  • AWS Lambda 提前结束(没有任何显式返回或回调)

    我在放入 AWS Lambda 中的一些 Node js 代码时遇到了一些问题 我需要进行几个异步调用 虽然第一个调用的行为符合我的预期 但 lambda 函数在第二个调用完成之前终止 返回值为 null 这让我认为 lambda 正在执行
  • 如何在PHP中将图像从内存上传到AWS S3?

    所以我目前有一个使用 AWS S3 上传图像的上传系统 这是代码 Upload image to S3 s3 Aws S3 S3Client factory array key gt mykey secret gt myskey try s
  • 从 API 网关自定义授权方返回的 401 缺少“Access-Control-Allow-Origin”标头

    为了防止未登录的用户通过 AWS API Gateway 调用我的 lambda 函数 我使用自定义授权者 lambda 解决方案 如果请求被授权 200 并且我从被调用的 lambda 得到响应 一切正常并且我得到Access Contr
  • 将消息从 AWS Lambda 发布到 AWS IoT

    我正在尝试使用 Nodejs 将消息从 AWS Lamba 发布到 AWS IoT 我已压缩该项目并上传到 AWS IoT 下面是代码片段 var awsIot require aws iot device sdk var device a
  • AWS S3 公共对象与私有对象?

    回到 S3 我的存储桶中有图像的 URL 我将在我的应用程序中呈现这些图像 但它们被设置为私有 当我尝试单击该链接时 它显示 访问被拒绝 当我将链接的设置更改为公共时 它会通过 但是我读到公共访问并不是最安全的事情 所以这本质上是一个由两部
  • 更新项目时,NUMBER_VALUE 无法转换为字符串

    我在 DynamoDB 上遇到了这个奇怪的问题 我似乎无法更新项目 这是我的命令 TableName UserTable Key UID S h4XJj3YRxZiF7TDcGkxAhc UpdateExpression SET numRa
  • 在 Python 2.7 中出现“ImportError:无法导入名称 HTTPSConnection”错误

    我正在尝试在 AWS ElasticBeanstalk 中部署 django 当我按照所示步骤操作时here http docs aws amazon com elasticbeanstalk latest dg create deploy
  • EC2专用实例是否共享RAM带宽?

    如果我创建一个专用实例并且它在多芯片服务器上启动 它是否共享其自己的 CPU 的 RAM 带宽 如果邻居运行一些消耗内存带宽的任务会发生什么 它会影响我的实例吗 这在共享实例上怎么样 RAM有哪几种寻址方式 仅在其自己的 numa 节点上还
  • 如何使用 aws-cdk 在 EC2 和 RDS 之间创建 DependsOn 关系

    我目前正在使用aws cdk TypeScript 创建一个堆栈 其中包含EC2实例和一个RDS数据库实例 The RDS实例需要在之前设置EC2实例可以启动并且userdata将被执行 我遇到的问题是 我找不到一种方法来定义DepensO
  • IOPS 与吞吐量。选择 AWS EBS 时使用哪一种

    在选择合适的 EBS 卷类型时 我需要决定IOPS 或吞吐量是否是更好的性能衡量标准 https docs aws amazon com en us AWSEC2 latest UserGuide EBSVolumeTypes html问题
  • 检查SQS队列是否为空的有效方法

    我有一个SQS Queue多个主机从中读取消息 我想在处理队列中的所有消息后运行一些作业 业务逻辑 如何检查队列是否为空 是的 我可以检查ApproximateNumberOfMessages and ApproximateNumberOf
  • 如何恢复丢失的aws服务器实例的私钥?

    我丢失了 AWS 实例的私钥 我在控制台面板中搜索了该选项 恐怕你可能不走运 当您启动实例时 您应该指定密钥的名称 您计划用于连接到实例的对 如果你不指定 启动实例时现有密钥对的名称 您 将无法连接到实例 当您连接到 例如 您必须指定与密钥
  • Amazon S3 - 一个对象的多个键

    我有一个 S3 存储桶 其中包含超过 1 亿个对象 每个对象像往常一样都有一个唯一的密钥 我想知道是否有办法为其中一些对象分配另一个键 像这样的东西 键1 gt 对象1 键2 gt 对象2 Key3 gt Object2 我想添加这个 我在
  • 如何在亚马逊 EC2 上调试 python 网站?

    我是网络开发新手 这可能是一个愚蠢的问题 但我找不到可以帮助我的确切答案或教程 我工作的公司的网站 用 python django 构建 托管在亚马逊 EC2 上 我想知道从哪里开始调试这个生产站点并检查存储在那里的日志和数据库 我有帐户信
  • 通过updateTable创建多个GSI

    我在用着更新表 http docs aws amazon com AWSJavaScriptSDK latest AWS DynamoDB html updateTable property根据 DynmaoDB 的规定 根据文档 如果我们
  • Spark s3 写入(s3 与 s3a 连接器)

    我正在从事一项在 EMR 上运行的作业 它在 s3 上保存了数千个分区 分区为年 月 日 我有过去 50 年的数据 现在 当 Spark 写入 10000 个分区时 使用以下命令大约需要 1 小时s3a联系 它非常慢 df repartit
  • 如何在 NextJS 中设置 AWS-SDK 凭证

    我需要从 NextJs 应用程序将一些文件上传到 S3 由于它是服务器端 我的印象是简单地设置环境变量应该可以工作 但事实并非如此 我知道还有其他选择 例如为 EC2 分配角色 但我想使用 accessKeyID 和 SecretKey 这
  • Docker Build 找不到 pip

    尝试关注一些 1 https aws amazon com blogs aws run docker apps locally using the elastic beanstalk eb cli 2 http docs aws amazo

随机推荐