Spring Cloud Stream Kafka 消费者模式

Posted

技术标签:

【中文标题】Spring Cloud Stream Kafka 消费者模式【英文标题】:Spring Cloud Stream Kafka consumer patterns 【发布时间】:2017-06-22 06:55:22 【问题描述】:

对于具有多个分区的主题 -

1) 单个 SpringBoot 实例是否使用多个线程来处理(使用 StreamListener 注释的方法)来自每个分区的每条消息?

2) 是否可以为每个分区配置多个线程,或者我必须手动将其从侦听器线程移交给工作池?

【问题讨论】:

【参考方案1】:

....consumer.concurrency控制线程数(默认1)。

分区分布在线程中。如果你有 20 个分区和 4 个线程;他们每个人会得到 5 个分区。

您需要拥有至少与所有实例的聚合并发数一样多的分区。 (如果您有 2 个应用实例和每个 5 个线程,则至少需要 10 个分区)。

您不应将来自单个分区的消息分发到多个线程;一旦你切换到新线程,偏移量就会被提交,这可能会导致消息丢失。

您应该始终犯错,因为分区数超过了您需要的并发数。

【讨论】:

要添加到 Gary 的评论中,这里有一篇很好的文章可以指导您完成调整大小的过程。confluent.io/blog/…

以上是关于Spring Cloud Stream Kafka 消费者模式的主要内容,如果未能解决你的问题,请参考以下文章

Spring cloud kafka stream pitfalls

Spring cloud kafka stream pitfalls

spring-cloud-stream kafka 消费者并发

spring-cloud-stream-kafka 在应用程序启动后仅使用最新消息

多个 @EnableBinding 与 Kafka Spring Cloud Stream

spring.cloud.stream.kafka.bindings.<channelName>.producer.configuration 未应用