amazon-web-services - 从 Kinesis 中的两个不同流获取数据?

标签 amazon-web-services amazon-kinesis

我正在尝试创建 Kinesis 消费者客户端。为了解决这个问题,我浏览了 Kinesis 开发人员指南和 AWS 文档 http://docs.aws.amazon.com/kinesis/latest/dev/kinesis-record-processor-implementation-app-java.html .

我想知道是否可以从两个不同的流获取数据并进行相应的处理。

假设我有两个不同的流 stream1stream2

是否可以分别从流和进程中获取数据?

最佳答案

为什么不呢?从两个流中获取记录。

如果您的流每个只有一个分片,您还将看到所有事件,因为建议使用单个工作人员处理每个分片,但如果您的逻辑是以某种方式连接来自不同源/流的事件,则您可以用单个工作人员从两个流中读取数据来实现它。

请注意,如果您的流具有多个分片,则每个工作人员将只能看到事件的一部分。您可以有以下选项:

  • 两个流各有一个分片 - 在这种情况下,您可以使用单个工作人员从回合流中读取数据,并查看来自两个流的所有事件。您可以添加时间戳或其他键,以允许您在工作线程中“加入”这些事件。

  • 一个流 (stream1) 具有一个分片,第二个流 (stream2) 具有多个分片 - 在这种情况下,您可以从 stream1 读取 来自所有工作人员,这也将处理来自 stream2 每个的单个分片。您的每一位工作人员都将看到stream1 的所有事件及其在stream2 中的事件份额。请注意,您有一个 limit使用单个分片(2MB/秒或 5 次读取/秒)从 stream1 读取事件的速度,如果您在 stream2 中有许多分片,则此值可能是一个真正的极限。

  • 两个流都可以有多个分片 - 在这种情况下,确保您能够“加入”这些事件将会更加复杂,因为您需要同步对这些流的写入和读取。您还可以使用单个工作人员读取两个流的所有分片,但这不是一个好的做法,因为它限制了您的扩展能力,因为您不再拥有分布式系统。另一种选择是使用相同的 partition_key在两个流中,并且两个流具有相同数量的分片和分区定义,并验证您是否正在从每个工作人员的每个流中读取“正确”的分片,并且您每次都正确执行操作之一您的工作人员失败并重新启动,这可能有点复杂。

您可以考虑的另一个选项是将两种类型的事件写入单个流中,再次使用相同的partition_key,然后如果您需要以不同的方式处理它们,则在读取器端过滤它们(例如,将它们写入 S3 中的不同日志文件)。

关于amazon-web-services - 从 Kinesis 中的两个不同流获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30068227/

相关文章:

amazon-web-services - Cloudformation 模板给出 " Non-Windows instances with a virtualization type of ' hvm' 目前不支持此实例类型

amazon-web-services - 如果 AWS Lambda 函数具有来自多个 Kinesis 流的事件源,传入记录的批处理是来自单个 Kinesis 流还是混合?

amazon-web-services - Aws KInesis Terraform - 如何将数据流连接到 Data Firehose

Nginx 访问日志到 Kinesis

algorithm - 基于时间跨度的 AWS Kinesis 流聚合

node.js - 如何纯粹使用 Cognito 对用户进行身份验证以供 S3 使用

amazon-web-services - EC2 实例 - 完全重新安装

java - AWS ElasticSearch 2.3 Java HTTP 批量 API

amazon-web-services - 参数名称的 AWS Cloudformation 嵌套堆栈参数类型不存在

amazon-web-services - 什么是 AWS 中的低延迟事件溯源服务?