乐趣区

关于spring-cloud-alibaba:Spring-Cloud-Stream多消费端只有一个实例在消费

环境及景象

应用的是 spring cloud stream + kafka 的技术栈。

# kafka 连贯配置
spring.cloud.stream.binders.common.type=kafka
spring.cloud.stream.binders.common.environment.spring.cloud.stream.kafka.binder.brokers=192.168.110.110:9092
spring.cloud.stream.binders.common.environment.spring.cloud.stream.kafka.binder.zk-nodes=192.168.110.110:2181

# 生产端配置
spring.cloud.stream.bindings.input.binder=common
spring.cloud.stream.bindings.input.destination=test-issue
spring.cloud.stream.bindings.input.group=group0
spring.cloud.stream.bindings.input.content-type=text/plain
# kafka 连贯配置
spring.cloud.stream.binders.common.type=kafka
spring.cloud.stream.binders.common.environment.spring.cloud.stream.kafka.binder.brokers=192.168.110.110:9092
spring.cloud.stream.binders.common.environment.spring.cloud.stream.kafka.binder.zk-nodes=192.168.110.110:2181

# 生产端配置
spring.cloud.stream.bindings.output.binder=common
spring.cloud.stream.bindings.output.destination=test-issue
spring.cloud.stream.bindings.output.content-type=text/plain

以后 kafka 是单机部署的,topic 由 stream 主动创立,启动一个生产端,和两个生产端实例。
后果只有一个在生产!!!
其中一个在生产

另一个报错

解决方案

其实问题在于对 kafka 的机制不够理解,kafka 里有个 partition 的概念,而且默认都是单播模式的,索引呢对于生产端而言,一个生产端会独享一个 partition。

所以问题就出在这个 partition 上了,因为是单机部署,topic 由 stream 主动创立并且没有指定 partition,那么这时我在查看 topic 的 partition 时发现只有一个 partition,又因为一个生产端会独享一个 partition 那么就造成了当初的问题只有一个生产端在生产。

解决办法也很简略,只有创立多个 partition 即可。

# 生产者配置,生产荡涤后的 CDR
spring.cloud.stream.bindings.output.binder=common
spring.cloud.stream.bindings.output.destination=test-issue
spring.cloud.stream.bindings.output.content-type=text/plain
spring.cloud.stream.bindings.output.producer.partition-count=2


退出移动版