繁体   English   中英

从Kinesis中的两个不同流中获取数据?

[英]Getting Data from two different Streams in Kinesis?

我正在尝试成为Kinesis Consumer Client。 为此,我浏览了Kinesis开发人员指南和AWS文档http://docs.aws.amazon.com/kinesis/latest/dev/kinesis-record-processor-implementation-app-java.html

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

假设我有两个不同的Streams stream1stream2

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

为什么不? 从两个流中获取get_records。

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

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

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

  • 一个流( 流1)有一个碎片,并与多个碎片第二流( 流2) -在这种情况下,你可以从流1从您的所有工作人员,也将从STREAM2每个处理单碎片阅读。 您的每个工作人员都将看到stream1的所有事件以及stream2的事件份额 请注意,使用单个分片(2MB /秒或5个读取/秒)可以从stream1读取事件的速度受到限制 ,并且如果stream2中有许多分片,这可能是一个实际的限制。

  • 两个流都可以有多个分片-在这种情况下,要确保您能够“加入”这些事件,这将变得更加复杂,因为您需要将写入和读取都同步到这些流。 您也可以使用一个工作程序读取两个流的所有分片,但这不是一个好习惯,因为这将限制扩展能力,因为您再也没有分布式系统了。 另一个选择是在两个流中使用相同的partition_key ,并为两个流使用相同数量的分片和分区定义,并验证您是否从每个工作线程中的每个流的“正确”分片中读取数据,并且每次您的一个工作人员发生故障并重新启动时,都可以正确执行此操作,这可能会有些复杂。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM