Spring cloud stream Spring Cloud Aws kinesis Binder组中的所有JVM以不同的间隔使用相同的消息
我们有三个容器连接到Kinesis stream,作为使用Spring cloud AWS Kinesis binder的消费者。 我们已经使用消费者组在三个容器之间进行负载平衡。要求集装箱分担荷载,并能均匀分配荷载Spring cloud stream Spring Cloud Aws kinesis Binder组中的所有JVM以不同的间隔使用相同的消息,spring-cloud-stream,spring-cloud-aws,spring-integration-aws,Spring Cloud Stream,Spring Cloud Aws,Spring Integration Aws,我们有三个容器连接到Kinesis stream,作为使用Spring cloud AWS Kinesis binder的消费者。 我们已经使用消费者组在三个容器之间进行负载平衡。要求集装箱分担荷载,并能均匀分配荷载 所有容器都使用配置服务器中的相同应用程序配置 目前我们有如下配置 spring: cloud: stream: bindings: MyStream: group: my-group destinati
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参数提供给每个实例:-dsspring.cloud.stream.instanceIndex=
,作为唯一值,因此每个实例将只从流中获取自己的碎片子集。否则,无法通过公共配置服务器对其进行区分。首先,如果您在项目中使用DynamoDB,将创建一个DynamoDbLockRegistry
bean,以允许所有实例访问共享数据,该共享数据以独占方式访问每个碎片。因此,只有一个实例能够使用来自一个碎片的记录
可能只有一个实例将从一个流中拾取所有碎片,但看起来同一条记录可能不会转移到另一个实例
对于
spring.cloud.stream.instanceIndex
,您可以将其作为JVM参数提供给每个实例:-dsspring.cloud.stream.instanceIndex=
,作为唯一值,因此每个实例将只从流中获取自己的碎片子集。否则,无法通过通用配置服务器进行区分。谢谢。我猜我们的应用程序中没有StreamListener,消息作为Trasnformer(输入)直接发送到Transformer,可能是因为这个原因,问题出现了。在安装StreamListener之后,一切都很好。谢谢Artem。我猜我们的应用程序中没有StreamListener,消息作为Trasnformer(输入)直接发送到Transformer,可能是因为这个原因,问题出现了。在放置StreamListener之后,一切都很好。