我知道每个kinesis流可以有多个消费者应用。
http://docs.aws.amazon.com/kinesis/latest/dev/developing-consumers-with-kcl.html
然而,我听说你只能使用每个碎片消费者。这是真的?我没有找到任何文档来支持这一点,并且无法想象如果多个消费者正在从同一个流中读取数据。当然,这并不意味着生产者需要为不同的消费者重复不同分片中的内容。
答案 0 :(得分:15)
Kinesis Client Library在后台启动线程,每个线程都会侦听流中的1个分片。您无法通过多个线程连接到分片,即按设计。
http://docs.aws.amazon.com/kinesis/latest/dev/kinesis-record-processor-scaling.html
例如,如果您的应用程序在一个EC2实例上运行,那么 正在处理一个包含四个分片的Amazon Kinesis流。这个 实例有一个KCL工作者和四个记录处理器(一个记录 每个碎片的处理器)。这四个记录处理器运行在 在同一过程中并行。
在上面的解释中,术语“KCL工作者”指的是Kinesis消费者应用程序。不是线程。
但是下面,相同的“KCL工作者”一词指的是申请中的“工人”主题;这是一个可运行的。
通常,当您使用KCL时, 你应该确保实例的数量不超过 分片数量(故障待机目的除外)。每个碎片都是 由一个KCL工作人员处理并且只有一个对应的 记录处理器,因此您永远不需要多个实例来处理一个 碎片。
请参阅KCL来源中的Worker.java课程。
答案 1 :(得分:6)
晚会,但答案是你可以每个kinesis分片有多个消费者。 KCL实例 只会为每个分片启动一个进程,但是您可以让另一个KCL实例使用相同的流(和分片),假设第二个具有权限。
the docs中列出了一些限制,包括:
每个分片每秒最多可支持5次事务处理,最高总数据读取速率为每秒2 MB。
如果您想要一个包含多个消费者的流,其中每条消息都会被处理一次,那么您最好使用Amazon Simple Queue Service之类的内容。