我是Spring和Kafka的新手。我正在研究一个用例[使用SpringBoot-kafka],允许用户在运行时创建kafka主题。 spring应用程序应该在运行时以编程方式订阅这些主题。到目前为止我所知道的是,Kafka听众是设计时间,因此需要在启动前指定主题。有没有办法在SpringBoot-Kafka集成中动态订阅kafka主题?
提到这一点 https://github.com/spring-projects/spring-kafka/issues/132
我计划实现的当前方法是,不要使用Spring-Kafka集成而是自己实现Kafka消费者[使用java代码],如此处所述 spring boot kafka consumer - how to properly consume kafka messages from spring boot
答案 0 :(得分:5)
Kafka听众只是"设计时间"如果要使用注释指定它们。 Spring-kafka允许您动态创建它们,请参阅KafkaMessageListenerContainer。
动态创建的Kafka监听器的最简单示例是:
Map<String, Object> consumerConfig = ImmutableMap.of(
BOOTSTRAP_SERVERS_CONFIG, "brokerAddress",
GROUP_ID_CONFIG, "groupId"
);
DefaultKafkaConsumerFactory<String, String> kafkaConsumerFactory =
new DefaultKafkaConsumerFactory<>(
consumerConfig,
new StringDeserializer(),
new StringDeserializer());
ContainerProperties containerProperties = new ContainerProperties("topicName");
containerProperties.setMessageListener((MessageListener<String, String>) record -> {
//do something with received record
}
ConcurrentMessageListenerContainer container =
new ConcurrentMessageListenerContainer<>(
kafkaConsumerFactory,
containerProperties);
container.start();
有关详细说明和代码,请参阅此博文:http://www.douevencode.com/articles/2017-12/spring-kafka-without-annotations/