目前,我使用的是基于springboot和kcl库的aws kinesis流,只有一个shard和一个consumer。
现在我需要扩展我的应用程序并在两个使用者之间分配负载。因此,他们应该在一个消费者群体中-以避免对同一消息进行双重处理。
基于动觉文件-我应该有相同数量的碎片作为最大数量的消费者在一个消费群体。我又加了一块碎片。
当我运行第一个使用者时,它会锁定dynamodb中的两个碎片,第二个使用者在我停止第一个使用者之前不会收到任何消息。
我读到我可以尝试改变 spring.cloud.stream.bindings.<streamName>.consumer.concurrency
属性到 1
每个使用者将只能创建一个到一个shard的连接。我不知道如果一个消费者死了我会面对什么?因为另一个消费者被限制只有一个连接,所以永远不会从第二个shard消费数据?
我的配置:
Kinesis stream: events
Number of shards: 2
Consumer#1: spring.cloud.stream.bindings.eventsIn.group=eventsConsumer
spring.cloud.stream.bindings.eventsIn.destination=events
spring.cloud.stream.bindings.eventsIn.content-type=application/json
Consumer#2: spring.cloud.stream.bindings.eventsIn.group=eventsConsumer
spring.cloud.stream.bindings.eventsIn.destination=events
spring.cloud.stream.bindings.eventsIn.content-type=application/json
如何在这两个消费者之间分配负载?如果我不使用任何基于kinesis流的额外aws集成,也许是时候从kinesis迁移到kafka了?
暂无答案!
目前还没有任何答案,快来回答吧!