Spring Cloud Aws kinesis Binder 组中的所有 JVM 以不同的时间间隔使用相同的消息
Spring Cloud Aws kinesis Binder All JVMs in group consume same message at different intervals
我们有三个容器作为消费者使用 Spring 云 AWS kinesis 绑定器连接到 Kinesis 流。
我们使用消费者组在三个容器之间进行负载平衡。要求是容器分担负载,负载要能均匀分布。
- 所有容器都使用来自配置服务器的相同应用程序配置
目前我们有如下配置。
spring:
cloud:
stream:
bindings:
MyStream:
group: my-group
destination: stream-1
content-type: application/json
所有容器都在使用相同的消息,但在不同的时间(相差 5 到 10 分钟)
根据文档,
单个消费者组内的静态分片分布
可以在单个消费者组中的所有实例之间均匀分布分片。这通过配置完成:
spring.cloud.stream.instanceCount= to number of instances
spring.cloud.stream.instanceIndex= current instance’s index
由于我们使用相同的配置服务器,请问如何确保实现负载平衡。
首先,如果您在项目中使用 DynamoDB,将创建一个 DynamoDbLockRegistry
bean 以允许所有实例访问关于对每个分片的独占访问的共享数据。因此只有一个实例能够使用一个分片中的记录。
可能只有一个实例会从一个流中获取所有分片,但看起来同一条记录可能不会进入另一个实例。
对于 spring.cloud.stream.instanceIndex
您可以将其作为 JVM arg 提供:-Dspring.cloud.stream.instanceIndex=
对于每个实例作为唯一值,因此每个实例将从流中仅获取其自己的分片子集。否则无法通过通用配置服务器区分它。
我们有三个容器作为消费者使用 Spring 云 AWS kinesis 绑定器连接到 Kinesis 流。 我们使用消费者组在三个容器之间进行负载平衡。要求是容器分担负载,负载要能均匀分布。
- 所有容器都使用来自配置服务器的相同应用程序配置
目前我们有如下配置。
spring:
cloud:
stream:
bindings:
MyStream:
group: my-group
destination: stream-1
content-type: application/json
所有容器都在使用相同的消息,但在不同的时间(相差 5 到 10 分钟)
根据文档,
单个消费者组内的静态分片分布 可以在单个消费者组中的所有实例之间均匀分布分片。这通过配置完成:
spring.cloud.stream.instanceCount= to number of instances
spring.cloud.stream.instanceIndex= current instance’s index
由于我们使用相同的配置服务器,请问如何确保实现负载平衡。
首先,如果您在项目中使用 DynamoDB,将创建一个 DynamoDbLockRegistry
bean 以允许所有实例访问关于对每个分片的独占访问的共享数据。因此只有一个实例能够使用一个分片中的记录。
可能只有一个实例会从一个流中获取所有分片,但看起来同一条记录可能不会进入另一个实例。
对于 spring.cloud.stream.instanceIndex
您可以将其作为 JVM arg 提供:-Dspring.cloud.stream.instanceIndex=
对于每个实例作为唯一值,因此每个实例将从流中仅获取其自己的分片子集。否则无法通过通用配置服务器区分它。