Spring 消费Kafka信息

4ktjp1zp  于 2021-06-08  发布在  Kafka
关注(0)|答案(1)|浏览(356)

通过遵循本教程,我能够创建一个简单的生产者-消费者示例。在我的例子中,只有一个主题,我正在听这个主题。因此,代码 ReceiverConfig 有道理。特别是周围的点 GROUP_ID_CONFIG i、 例如,我创建主题 topic_name 然后在这个配置中进行了配置。现在我的问题是,如果我有一个以上的主题呢。假设我有 topic_1 , topic_2 等等?我要创作吗 ReceiverConfig 对于每个单独的主题?

@EnableKafka
@Configuration
public class ReceiverConfig {
    @Value("${spring.kafka.bootstrap-servers}")
    private String bootstrapServers;

    @Bean
    public Map<String, Object> consumerConfigs() {
        Map<String, Object> props = new HashMap<>();
        props.put(BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
        props.put(KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
        props.put(VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
        props.put(GROUP_ID_CONFIG, "topic_name");
        props.put(AUTO_OFFSET_RESET_CONFIG, "earliest");

        return props;
    }

    @Bean
    public ConsumerFactory<String, String> consumerFactory() {
        return new DefaultKafkaConsumerFactory<>(consumerConfigs());
    }

    @Bean
    public KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<String, String>> kafkaListenerContainerFactory() {
        ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>();
        factory.setConsumerFactory(consumerFactory());
        return factory;
    }
}
vojdkbi0

vojdkbi01#

简单的回答是否定的,您不需要为每个主题创建多个配置。
在进一步讨论之前,我认为应该明确指出 groupId 是使用者进程所属的组,并且 topic 被消费者消费的过程是两件不同的事情。
通过下面的句子,你将告诉消费者,它属于topic\u name组,仅此而已。

props.put(GROUP_ID_CONFIG, "topic_name");

如果希望使用者从多个主题中读取数据,则有一个subscribe方法,该方法接收集合作为参数,这样就可以指定要读取数据的所有主题,而不必为每个主题创建新配置。
请检查这个例子,你会看到我提到的方法

// Subscribe to the topic.
consumer.subscribe(Collections.singletonList(TOPIC));

相关问题