0

在我的 Producer application.properties 中,我有

spring.cloud.stream.bindings.output.producer.partitionKeyExpression=payload
spring.cloud.stream.bindings.output.producer.partitionCount=4

我的消费者 application.properties 看起来像这样

spring.cloud.stream.bindings.input.consumer.partitioned=true
spring.cloud.stream.bindings.input.group=group01

当我将我的应用程序部署到 Pivotal Cloud Foundry 并将应用程序扩展到 2 个实例时,我看到创建了两个队列。它们以后缀 -0 和 -1 为界。

但这意味着如果消息带有以 -3 或 -4 结尾的主题,那么它们就会丢失,因为这些主题不存在绑定。如果我将消费者缩放为拥有 4 个实例,那么它会按预期工作。

我的问题是消费者实例不可能少于生产者的 partitionCount 吗?在这种情况下,一个或多个队列将有多个绑定到交换

4

2 回答 2

1

RabbitMQ 就是这种情况,默认情况下它不是分区介质 - 每个分区对应一个实例/队列。使用 Kafka,我们确实支持每个消费者的多个分区(因此一个主题将在应用程序的多个实例之间共享)。我们正在考虑为 RabbitMQ 支持类似的东西,尽管在这种特殊情况下的困难在于要知道总共有多少个分区并不容易(除非通过检查主题,这很容易出错)。

于 2016-08-18T00:34:59.207 回答
-1

没有。的消费者实例不需要与否匹配。主题中的分区数:

  1. 如果没有。消费者的数量小于分区,那么一些消费者实例开始从多个分区中获取数据
  2. 如果没有。消费者的数量大于分区,那么一些消费者实例将永远不会收到任何数据。它只会保持空闲状态。
于 2016-08-19T05:05:32.690 回答