Amazon Kinesis:在同步 Kinesis 分片和租约时捕获异常
Posted
技术标签:
【中文标题】Amazon Kinesis:在同步 Kinesis 分片和租约时捕获异常【英文标题】:Amazon Kinesis: Caught exception while sync'ing Kinesis shards and leases 【发布时间】:2018-06-27 13:54:24 【问题描述】:我正在尝试使 Snowplow 在 AWS 上工作。当我尝试在实例上运行流丰富服务时,我得到了这个异常:
[main] INFO com.amazonaws.services.kinesis.clientlibrary.lib.worker.Worker - Syncing Kinesis shard info
[main] ERROR com.amazonaws.services.kinesis.clientlibrary.lib.worker.ShardSyncTask - Caught exception while sync'ing Kinesis shards and leases
[cw-metrics-publisher] WARN com.amazonaws.services.kinesis.metrics.impl.CWPublisherRunnable - Could not publish 4 datums to CloudWatch
我认为错误不是由于 Cloud Watch:
在同步 Kinesis 分片和租约时捕获异常
【问题讨论】:
我看到了同样的问题。我发现的其他论坛帖子告诉我要确保服务器的 IAM 角色可以访问 Kinesis、Dynamo 和 Cloudwatch,但这并没有解决我的问题。你找到解决方案了吗? 我也面临同样的问题,而且我确实拥有完全访问权限。你找到解决方案了吗? 实际上,问题确实在于无法创建/访问 dynamo db 表,其中保存了已成功处理的 kinesis 数据包的当前索引信息。因此,请确保您的 IAM 角色可以在 DynamoDB 中创建表。参考:docs.aws.amazon.com/streams/latest/dev/… 【参考方案1】:如上面的 cmets 所述,当您缺乏对 Kinesis Client Library (KCL) 所需的 AWS 资源的权限时,会出现此错误。这可以是 DynamoDB、CloudWatch 或 Kinesis。对于 Snowplow 的 Stream Enrich 组件,您需要以下权限:
输入运动流的读取权限(收集器好) 写入权限以输出运动流(丰富好的和丰富的坏) 列出 kinesis 流的权限 对 DynamoDB 状态表的读/写/创建权限(表名是您的流丰富application.conf
中的“appName”值)
将MetricData 放到 Cloudwatch
满足这些需求的 IAM 策略模板版本如下:
"Version": "2012-10-17",
"Statement": [
"Effect": "Allow",
"Action": [
"kinesis:DescribeStream",
"kinesis:GetShardIterator",
"kinesis:GetRecords",
"kinesis:ListShards"
],
"Resource": [
"$collector_stream_out_good"
]
,
"Effect": "Allow",
"Action": [
"kinesis:ListStreams"
],
"Resource": "*"
,
"Effect": "Allow",
"Action": [
"kinesis:DescribeStream",
"kinesis:PutRecord",
"kinesis:PutRecords"
],
"Resource": [
"$enricher_stream_out_good",
"$enricher_stream_out_bad"
]
,
"Effect": "Allow",
"Action": [
"dynamodb:CreateTable",
"dynamodb:DescribeTable",
"dynamodb:Scan",
"dynamodb:GetItem",
"dynamodb:PutItem",
"dynamodb:UpdateItem",
"dynamodb:DeleteItem"
],
"Resource": [
"$enricher_state_table"
]
,
"Effect": "Allow",
"Action": [
"cloudwatch:PutMetricData"
],
"Resource": "*"
]
我写了一个 blog post,其中涵盖了 Stream Enrich 和其他 Snowplow 组件所需的 IAM 权限,因为关于确切所需权限的文档在 Snowplow 文档中很少/不存在。
希望有帮助!
【讨论】:
【参考方案2】:所以我在设置 Snowplow 时遇到了这个问题。我正在使用 terraform 来自动化基础架构,并在销毁并重新应用后出现此错误。这是我学到的。
您授予丰富器 DynamoDB 特权,以便它可以创建表。如果该表在丰富器创建它之前已经创建(但在我的情况下没有被 terraform 破坏),则它无法创建具有相同名称的表。它似乎也不会链接到现有表。
我的解决方案是通过 AWS 控制台删除现有的 DynamoDB 表,终止我的扩充器,然后启动一个新的。错误不再出现,我的浓缩器按预期工作。
【讨论】:
【参考方案3】:我今天遇到了这个问题。对我来说,问题在于,我更改了 kinesis
流名称,而没有更改丰富配置中的 appName
。
一旦我将 appName
更改为新名称并将更新后的名称部署为 snowplow enrich
,我就能够摆脱错误。
【讨论】:
以上是关于Amazon Kinesis:在同步 Kinesis 分片和租约时捕获异常的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Amazon Kinesis 服务上部署和运行 Amazon Kinesis 应用程序
为 amazon-kinesis-video-streams-producer-sdk-cpp 构建依赖项时出错 [重复]