Потребление сообщений Кафки весной - PullRequest
0 голосов
/ 09 июня 2018

Следуя этому учебнику , я смог создать простой пример «производитель-потребитель».В моем примере была только 1 тема, и я слушал эту тему.По этой причине код в ReceiverConfig имеет смысл.Особенно точка вокруг GROUP_ID_CONFIG, т.е. я создаю тему topic_name, а затем она была настроена в этой конфигурации.Теперь мой вопрос заключается в том, что если у меня более 1 темы.Допустим, у меня есть 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;
    }
}

1 Ответ

0 голосов
/ 10 июня 2018

Короткий ответ - нет, вам не нужно создавать несколько конфигураций для каждой темы.

Прежде чем идти дальше, я думаю, что стоит уточнить, что groupId - это группа, к которой относится процесс-потребитель, и topic, которая будет потребляться процессом-потребителем, - это две разные вещи.

С предложенным ниже предложением Вы скажете Потребителю, что он принадлежит к группе topic_name , и больше ничего.

props.put(GROUP_ID_CONFIG, "topic_name");

Если вы хотите, чтобы Потребитель считывал данные из нескольких тем, существует метод подписка , который получает Коллекции в качестве параметра, таким образом выукажите все темы для чтения данных без необходимости создания новой конфигурации для каждой темы.

Пожалуйста, посмотрите этот пример, вы увидите метод, который я упомянул

// Subscribe to the topic.
consumer.subscribe(Collections.singletonList(TOPIC));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...