如何使用spring boot

时间:2018-05-10 00:14:50

标签: java spring-boot apache-kafka kafka-consumer-api spring-kafka

我正在编写基于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。

版本 -

  • kafka-clients - 0.10.0.0-SASL
  • spring-kafka - 1.1.0.RELEASE
  • spring boot - 1.5.10.RELEASE

2 个答案:

答案 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)