【问题标题】:How to assign specific Kinesis Shard in CloudWatch Subscription如何在 CloudWatch 订阅中分配特定的 Kinesis 分片
【发布时间】:2015-09-17 19:58:10
【问题描述】:

如果您计划向特定 Kinesis 流订阅的 CloudWatch 日志数据超过单个分片的处理能力,是否可以通过添加多个分片来扩展您的流,然后在这些分片之间分配多个 CloudWatch 日志订阅?

文档here 有点掩饰分片处理,仅指“shardId-000000000000”。

API docs(至少对于 .NET SDK,无论如何)建议在创建订阅时指定目标 arn,但我的理解是 arn 不能比 Kinesis Stream 更具体,但我确实这样做了不要认为单个碎片被分配了arns。

基本上,如果您计划订阅的 CloudWatch 数据超出单个分片的处理能力,有没有办法将您的流“扩展”为多分片流(同时使用 CloudWatch 订阅并避免编写自定义客户端来处理数据),还是有必要“横向扩展”成多个单分片流?

【问题讨论】:

  • 您可以拆分分片以增加运动流容量:docs.aws.amazon.com/kinesis/latest/APIReference/…
  • 当然可以。但是,当您使用 Kinesis API 将记录传输到 Kinesis Stream 时,您必须明确说明要将记录传输到流中的哪个分片(请参阅此处所需的 PartitionKey 参数docs.aws.amazon.com/kinesis/latest/APIReference/…) CloudWatch 文档没有提到这样一个参数,文档也没有提到在没有这样一个参数的情况下它可能会如何表现。
  • 您不是按 ID 写入分片,而是使用分区键写入。您的每个分片都有一系列哈希键,分区键将映射到其中一个。因此,您只需在 API 调用中设置分区键即可。
  • 在您使用 CloudWatch 订阅时没有 API 调用,除了您最初用于创建订阅的 API 调用,并且该调用只允许您为 Kinesis Stream 指定一个 arn,但是使您无法控制分片/分区键。 aws.amazon.com/about-aws/whats-new/2015/06/…
  • 你是对的。分区键用于常规 Kinesis 调用,以允许分发,并将相关记录保存在一起(=在同一个分片中)。在 CloudWatch Logs 订阅中,这不太相关,您主要需要跨分片的均匀分布。因此,可能会使用随机密钥。如果您需要更多事件(或更少过滤),您可以向 Kinesis steam 添加更多分片。

标签: amazon-cloudwatch amazon-kinesis


【解决方案1】:

我从组织的 AWS 代表那里收到了这个答复:

CloudWatch 订阅在内部根据以下所有参数为每条消息创建一个 PartitionKey:ownerIdlogGroupNamelogStreamName强>。

由于文档中没有提及,我曾假设 CloudWatch 订阅系统几乎忽略了分片 partitionkey,但看起来您似乎自动获得了一个相当不错的机制来在流中分发消息碎片。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    • 2019-12-25
    • 1970-01-01
    • 2019-10-01
    • 2011-04-18
    • 2021-01-15
    相关资源
    最近更新 更多