Gee*_*arn 2 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。
我想知道是否有可能从两个不同的流中获取数据并进行相应处理。
假设我有两个不同的流stream1和stream2。
是否可以从流和流程中分别获取数据?
为什么不?从两个流中获取get_records。
如果流中每个流只有一个分片,那么您还将看到所有事件,因为建议使用一个工作程序处理每个分片,但是如果您的逻辑是通过某种方式将来自不同源/流的事件加入,则可以实现它一个工人从两个流中读取。
请注意,如果您的流具有多个分片,则每个工作人员将仅看到事件的一部分。您可以选择以下选项:
两个流都有一个单独的分片-在这种情况下,您可以使用单个工作程序从bout流中读取数据,并查看两个流中的所有事件。您可以添加时间戳或其他键,以允许您在工作程序中“加入”这些事件。
一个流(流1)与一个碎片和第二流(流2与多个碎片) -在这种情况下,你可以读取流1从您的所有工作人员,这也将处理来自单个碎片STREAM2每个。您的每个工作人员都将看到stream1的所有事件以及stream2的事件份额。请注意,使用单个分片(2MB /秒或5个读取/秒)可以从stream1读取事件的速度受到限制,并且如果stream2中有许多分片,这可能是一个实际的限制。
两个流都可以有多个分片-在这种情况下,确保您能够“加入”这些事件会变得更加复杂,因为您需要将写入和读取同步到这些流。您也可以使用一个工作程序读取两个流的所有分片,但这不是一个好习惯,因为这将限制扩展能力,因为您再也没有分布式系统了。另一个选择是在两个流中使用相同的partition_key,并为两个流使用相同数量的分片和分区定义,并验证您是否从每个工作线程中的每个流的“正确”分片中读取数据,并且每次您的一个工作人员发生故障并重新启动时,都可以正确执行此操作,这可能会有些复杂。
您可以考虑的另一种选择是将两种类型的事件都写在一个流中,再次使用相同的partition_key,然后如果需要以不同方式处理它们(例如,将它们写入不同的日志文件),则在读取器端对其进行过滤。在S3中)。
| 归档时间: |
|
| 查看次数: |
781 次 |
| 最近记录: |