每个运动碎片有多个消费者

multiple consumers per kinesis shard

我了解到每个运动流可以有多个消费者应用程序。

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

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

Kinesis Client Library 在后台启动线程,每个线程侦听流中的 1 个分片。您不能通过多个线程连接到分片,即 by-design.

http://docs.aws.amazon.com/kinesis/latest/dev/kinesis-record-processor-scaling.html

For example, if your application is running on one EC2 instance, and is processing one Amazon Kinesis stream that has four shards. This one instance has one KCL worker and four record processors (one record processor for every shard). These four record processors run in parallel within the same process.

在上面的解释中,术语 "KCL worker" 指的是 Kinesis 消费者应用程序。不是线程。

但在下面,相同的 "KCL worker" 术语指的是应用程序中的 "Worker" 线程;这是一个可运行的。

Typically, when you use the KCL, you should ensure that the number of instances does not exceed the number of shards (except for failure standby purposes). Each shard is processed by exactly one KCL worker and has exactly one corresponding record processor, so you never need multiple instances to process one shard.

参见 KCL 源中的 Worker.java class。

聚会晚了,但答案是您可以每个运动碎片有多个消费者。一个 KCL 实例 每个分片仅启动一个进程,但您可以让另一个 KCL 实例使用相同的流(和分片),前提是第二个实例具有权限。

不过,如 the docs 中所述,存在限制,包括:

Each shard can support up to 5 transactions per second for reads, up to a maximum total data read rate of 2 MB per second.

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

的东西