每个kinesis碎片多个消费者

bho*_*ass 14 sharding consumer amazon-kinesis

我读过每个kinesis流可以有多个消费者应用程序.

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

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

az3*_*az3 16

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类.

  • @ user1058511:你可以.Kinsis支持多个应用程序的用例同时使用相同的流.例如,您有一个应用程序可以更新实时仪表板,另一个应用程序可以存档数据.您希望两个应用程序同时并独立地使用来自同一流的数据. (2认同)

Cam*_*one 7

迟到了,但答案是每个kinesis碎片可以有多个消费者.氯化钾实例只启动每个碎片一个过程,但你可以有另一种KCL实例消耗相同的流(和碎片),假设第二个有权限.

但是,正如文档所述,有一些限制,包括:

每个分片每秒最多可支持5个​​事务进行读取,最高总数据读取速率为每秒2 MB.

如果您想要一个包含多个消费者的流,其中每条消息将被处理一次,那么您最好使用Amazon Simple Queue Service.

  • 我会编辑"处理过一次"以"至少处理一次".在SQS中,您无法保证消息将被处理一次.您将至少获得一次处理:/sf/ask/2623049061/ (2认同)
  • 每个使用者都获得相同的数据(通过其检查点进行管理),并且可以以他们想要的任何速率使用它们,彼此独立,就像拥有两个迭代器一样。它们仅结合了其合并的读取限制。这是Kinesis在行为上与AWS SQS(实际上具有单个迭代器)不同的地方。 (2认同)