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

时间:2015-05-06 05:27:48

标签: amazon-web-services amazon-kinesis

我正在尝试制作Kinesis Consumer Client。为了解决这个问题,我浏览了Kinesis和AWS文档的开发人员指南http://docs.aws.amazon.com/kinesis/latest/dev/kinesis-record-processor-implementation-app-java.html

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

假设我有两个不同的流stream1stream2

是否可以单独从流和流程中获取数据?

1 个答案:

答案 0 :(得分:4)

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

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

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

  • 两个流都有一个分片 - 在这种情况下,您可以使用来自bout流的单个工作程序进行读取,并查看来自两个流的所有事件。您可以添加时间戳或其他键,以便您加入"这些事件发生在工人身上。

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

  • 两个流都可以有多个分片 - 在这种情况下,确保您能够加入"会更加复杂。这些事件,因为您需要将写入和读取同步到这些流。您还可以使用单个工作人员读取两个流的所有分片,但这不是一个好习惯,因为它限制了您的扩展能力,因为您不再拥有分布式系统。另一个选择是在两个流中使用相同的partition_key,并为两个流分配相同数量的分片和分区定义,并验证您是否正在读取"右键"来自每个工作人员的每个流的分片,并且每当你的一个工作人员失败并重新启动时,你正在正确地进行分片,这可能有点复杂。

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