我们有三个使用Spring Cloud 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
由于我们使用同一台配置服务器,因此请您帮忙确保实现负载平衡。
答案 0 :(得分:0)
首先,如果您在项目中使用DynamoDB,将创建一个export {
toLower as stringToLower,
toUpper as stringToUpper,
} from "stringUtils.js";
export {
propertyMap as objectPropertyMap
} from "objectUtils.js";
bean,以允许所有实例访问对每个分片的独占访问权的共享数据。因此,只有一个实例将能够使用一个分片中的记录。
可能只有一个实例将从流中拾取所有分片,但看起来同一记录可能不会进入另一个实例。
对于DynamoDbLockRegistry
,您可以将其作为JVM arg输入:spring.cloud.stream.instanceIndex
作为每个实例的唯一值,因此,每个实例将从流中仅获得其自己的分片子集。否则,将无法通过通用配置服务器对其进行区分。