【发布时间】: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