我有一个需要从具有相同主题的多个kafka服务器读取的侦听器,这些服务器都在一个zookeeper下配置。我如何从这些多个服务器中读取。你能帮忙解决这个问题。
而不是Kafka服务器,我可以指向zookeeper吗?
答案 0 :(得分:4)
@KafkaListener
需要KafkaListenerContainerFactory
@Bean
,而ConsumerFactory
则基于DefaultKafkaConsumerFactory
。 Map<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
其中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