每个kinesis碎片多个消费者

时间:2015-12-29 01:34:17

标签: sharding consumer amazon-kinesis

我知道每个kinesis流可以有多个消费者应用。

http://docs.aws.amazon.com/kinesis/latest/dev/developing-consumers-with-kcl.html

然而,我听说你只能使用每个碎片消费者。这是真的?我没有找到任何文档来支持这一点,并且无法想象如果多个消费者正在从同一个流中读取数据。当然,这并不意味着生产者需要为不同的消费者重复不同分片中的内容。

2 个答案:

答案 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之类的内容。