【发布时间】:2018-06-23 14:12:03
【问题描述】:
考虑以下代码-
@Bean
public ConsumerFactory<String, String> consumerFactory() {
Map<String, Object> props = new HashMap<>();
props.put(
ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,
bootstrapAddress);
props.put(
ConsumerConfig.GROUP_ID_CONFIG,
groupId);
props.put(
ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG,
StringDeserializer.class);
props.put(
ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,
StringDeserializer.class);
return new DefaultKafkaConsumerFactory<>(props);
}
@Bean
public ConcurrentKafkaListenerContainerFactory<String, String>
kafkaListenerContainerFactory() {
ConcurrentKafkaListenerContainerFactory<String, String> factory
= new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(consumerFactory());
return factory;
}
我创建了一个消费者工厂和一个并发 KafkaListenercontainer 工厂。我还没有为监听器工厂设置并发。 我有一个用@KafkaListener 注释的方法
@KafkaListener(topics = "topicName")
public void listen(String message) {
System.out.println("Received Message: " + message);
当我不设置并发属性时,Spring会创建1个消费者实例,1个kafka监听器容器,属于消费者工厂中指定的组吗?
如果我将并发更改为 3,spring 会创建 3 个消费者实例,因此在配置消费者工厂和 3 个侦听器容器时指定同一消费者组中的 3 个消费者?
另外,根据并发性,假设我们现在只收听一个主题,我们将有 3 个用 @kafkalistener 注释的方法,如果未指定分区,则所有 3 个方法都收听不同的分区(由 kafka 以循环方式提供)。 ?
我是 Kafka 的新手,想澄清一下我的理解。
【问题讨论】:
标签: java spring spring-kafka