如何使用spring-kafka为监听器传递多个引导服务器

时间:2017-09-19 13:30:00

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

我有一个需要从具有相同主题的多个kafka服务器读取的侦听器,这些服务器都在一个zookeeper下配置。我如何从这些多个服务器中读取。你能帮忙解决这个问题。

而不是Kafka服务器,我可以指向zookeeper吗?

2 个答案:

答案 0 :(得分:4)

@KafkaListener需要KafkaListenerContainerFactory @Bean,而ConsumerFactory则基于DefaultKafkaConsumerFactoryMap<String, Object>接受@Configuration @EnableKafka public class KafkaConfig { @Bean KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<Integer, String>> kafkaListenerContainerFactory() { ConcurrentKafkaListenerContainerFactory<Integer, String> factory = new ConcurrentKafkaListenerContainerFactory<>(); factory.setConsumerFactory(consumerFactory()); return factory; } @Bean public ConsumerFactory<Integer, String> consumerFactory() { return new DefaultKafkaConsumerFactory<>(consumerConfigs()); } @Bean public Map<String, Object> consumerConfigs() { Map<String, Object> props = new HashMap<>(); props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, ...); ... return props; } } 消费者配置:

ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG

https://docs.spring.io/spring-kafka/docs/1.2.2.RELEASE/reference/html/_reference.html#__kafkalistener_annotation

其中bootstrap.servers完全是标准的Apache Kafka requirepass XXX masterauth XXX property

  

用于建立与Kafka群集的初始连接的主机/端口对列表。无论此处指定哪些服务器进行引导,客户端都将使用所有服务器 - 此列表仅影响用于发现整套服务器的初始主机。此列表应采用host1:port1,host2:port2,....的形式。由于这些服务器仅用于初始连接以发现完整的集群成员资格(可能会动态更改),因此此列表不需要包含完整集服务器(如果服务器关闭,您可能需要多个服务器)。

不,你不能指向Zookeeper地址。那不再是Kafka的支持。

答案 1 :(得分:1)

地图具有键:字符串和值:对象。

key:ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG的对象应该是一系列主机端口对,以“,”分隔,例如:host1:port1,host2:port2,host3:port3 ......

例如,监听三台服务器:localhost:9092,192.168.22.12:9088,localhost:7898