Java 如何使用spring boot设置kafka使用者并发性

Java 如何使用spring boot设置kafka使用者并发性,java,spring-boot,apache-kafka,kafka-consumer-api,spring-kafka,Java,Spring Boot,Apache Kafka,Kafka Consumer Api,Spring Kafka,我正在编写一个基于Java的Kafka消费者应用程序。我正在为我的应用程序使用kafka客户端、Spring kafka和Spring boot。虽然Spring boot让我可以轻松地编写Kafka使用者(无需真正编写ConcurrentKafkaListenerContainerFactory、ConsumerFactory等),但我希望能够为这些使用者定义/自定义一些属性。然而,我找不到一个简单的方法来使用SpringBoot。例如:我有兴趣建立的一些房产是- ConsumerConfig

我正在编写一个基于Java的Kafka消费者应用程序。我正在为我的应用程序使用kafka客户端、Spring kafka和Spring boot。虽然Spring boot让我可以轻松地编写Kafka使用者(无需真正编写ConcurrentKafkaListenerContainerFactory、ConsumerFactory等),但我希望能够为这些使用者定义/自定义一些属性。然而,我找不到一个简单的方法来使用SpringBoot。例如:我有兴趣建立的一些房产是-

ConsumerConfig.MAX\u PARTITION\u FETCH\u BYTES\u CONFIG
ConsumerConfig.PARTITION\u ASSIGNMENT\u STRATEGY\u CONFIG

我查看了Spring Boot的预定义属性

另外,基于前面的一个问题,我想在使用者上设置并发性,但找不到一种配置、application.properties驱动的方法来使用Spring Boot实现这一点

一个明显的方法是在Spring上下文中再次定义
ConcurrentKafkafkalistenerContainerFactory、ConsumerFactory
类,并从中开始工作。我想知道是否有一种更干净的方法可以做到这一点,特别是因为我使用的是SpringBoot

版本-

  • 卡夫卡客户端-0.10.0.0-SASL
  • 春季卡夫卡-1.1.0.0版本
  • 弹簧护套-1.5.10.1释放

在您引用的URL上,向下滚动至

spring.kafka.listener.concurrency= # Number of threads to run in the listener containers.
春季卡夫卡-1.1.0.0版本

我建议至少升级到1.3.5;由于KIP-62,它的线程模型简单得多

编辑

使用Boot2.0,您可以设置任意生产者、消费者、管理员和公共属性,如前所述

在Boot 1.5中,只有所述的
spring.kafka.properties

这将设置生产者和消费者的属性,但您可能会在日志中看到一些关于生产者未使用/不支持的属性的杂音

或者,您可以简单地覆盖引导的消费者工厂,并根据需要添加属性

@Bean
public ConsumerFactory<?, ?> kafkaConsumerFactory(KafkaProperties properties) {
    Map<String, Object> consumerProps = properties.buildConsumerProperties();
    consumerProps.put(ConsumerConfig.HEARTBEAT_INTERVAL_MS_CONFIG, 5_000);
    return new DefaultKafkaConsumerFactory<Object, Object>(consumerProps);
}
@Bean
公共消费工厂卡夫卡消费工厂(卡夫卡房地产){
Map consumerProps=properties.buildConsumerProperties();
consumerProps.put(ConsumerConfig.HEARTBEAT\u INTERVAL\u MS\u CONFIG,5\u 000);
返回新的默认卡夫卡消费工厂(consumerProps);
}

我在谷歌上搜索找到了它。这个问题已经结束了。但是是针对spring boot 2.0版的。

ahh,谢谢您的并发属性,Gary!但是,您能否说明如何配置Spring Boot不支持的属性?我试图用application.properties中的一些道具和通过代码定义的一些道具初始化一个
ConsumerConfig
,但这种方法不起作用。至于升级版本,我依赖于kafka客户端版本,因为我们的经纪人支持该版本。因此,我必须根据兼容性矩阵使用上述版本-请参阅对我答案的编辑。无论如何,我强烈建议您升级到更新的kafka客户端(以及spring kafka 1.3.5)。多亏了新客户可以与旧代理交谈,只要你不尝试使用代理不支持的功能。
@Bean
public ConsumerFactory<?, ?> kafkaConsumerFactory(KafkaProperties properties) {
    Map<String, Object> consumerProps = properties.buildConsumerProperties();
    consumerProps.put(ConsumerConfig.HEARTBEAT_INTERVAL_MS_CONFIG, 5_000);
    return new DefaultKafkaConsumerFactory<Object, Object>(consumerProps);
}