我正在编写基于Java的Kafka Consumer应用程序。我正在为我的应用程序使用kafka-clients,Spring Kafka和Spring启动。虽然Spring启动让我轻松编写Kafka使用者(没有真正编写ConcurrentKafkaListenerContainerFactory,ConsumerFactory等),但我希望能够为这些使用者定义/自定义一些属性。但是,我找不到使用Spring启动的简单方法。例如:我有兴趣设置的一些属性是 -
ConsumerConfig.MAX_PARTITION_FETCH_BYTES_CONFIG
ConsumerConfig.PARTITION_ASSIGNMENT_STRATEGY_CONFIG
我看了一下Spring Boot预定义的属性here。
另外,基于之前的问题here,我想在使用者身上设置并发性,但是找不到配置,使用Spring.properties驱动的方式来做到这一点。
一种显而易见的方法是在我的Spring Context中再次定义ConcurrentKafkaListenerContainerFactory, ConsumerFactory
类并从那里开始工作。我想了解是否有更简洁的方法,特别是因为我使用的是Spring Boot。
版本 -
答案 0 :(得分:5)
在您引用的网址上,向下滚动到
spring.kafka.listener.concurrency= # Number of threads to run in the listener containers.
spring-kafka - 1.1.0.RELEASE
我建议升级到至少1.3.5;由于KIP-62,它有一个更简单的线程模型。
修改强>
使用Boot 2.0,您可以设置任意生产者,消费者,管理员,公共属性,如in the boot documentation所述。
spring.kafka.consumer.properties.heartbeat.interval.ms
使用Boot 1.5,here只有spring.kafka.properties
。
这会为生产者和使用者设置属性,但是您可能会在日志中看到有关生产者未使用/不支持的属性的一些噪音。
或者,您可以简单地覆盖Boot的消费者工厂并根据需要添加属性......
@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);
}
答案 1 :(得分:1)