Java 一个消费者在两个不同的集群上消费两个不同的主题
我有一个消费者,我正在用代理列表(Java 一个消费者在两个不同的集群上消费两个不同的主题,java,apache-kafka,kafka-consumer-api,Java,Apache Kafka,Kafka Consumer Api,我有一个消费者,我正在用代理列表(bootstrap.servers)初始化它。现在,在大多数用例中,列表由相互关联的代理组成。因此,如果有人连接,卡夫卡将自动填充其他经纪人的列表 然而,我可能有一个用例,其中我希望一个消费者从两个主题test1和test2中消费,这两个主题位于两个单独的集群C1和C2中。我考虑使用consumer API为kafka消费者提供两个代理,每个集群一个 Properties kafkaProps = new Properties(); kafkaP
bootstrap.servers
)初始化它。现在,在大多数用例中,列表由相互关联的代理组成。因此,如果有人连接,卡夫卡将自动填充其他经纪人的列表
然而,我可能有一个用例,其中我希望一个消费者从两个主题test1
和test2
中消费,这两个主题位于两个单独的集群C1
和C2
中。我考虑使用consumer API为kafka消费者提供两个代理,每个集群一个
Properties kafkaProps = new Properties();
kafkaProps.put("bootstrap.servers", "b1:9092,b2:9092");
这里的b1
是来自C1
的经纪人,b2
是来自C2
然后我将使用consumer.subscribe(newarraylist(){{{“test1”,“test2”}})
我想知道这是否是正确的方法,或者它是否会起作用。请告诉我您是否希望我共享任何额外信息在同一消费者下不可能有两个不同的群集主题,当消费者开始时,将获取群集上的所有代理和主题,并尝试查找另一个群集的主题,因为其中一个主题不存在,因此将产生错误消息
Error while fetching metadata with correlation id 20 : {second-cluster-testtopic=UNKNOWN_TOPIC_OR_PARTITION}
我们可以让同一个消费者在同一个集群下处理两个不同的主题,但明智的情况是,两个主题具有相同类型的数据,只需将两个不同的集群用逗号分隔,然后在prop-
ConsumerConfig.BOOTSTRAP\u SERVERS\u CONFIG,“产品集群:9092,开发集群:9092”
它获取了dev集群的详细信息并处理了请求。反转顺序将反转使用者拾取的簇。没有抛出错误
根据Kafka文档,使用字符串分隔的多个代理的目的是为了容错,而不是同时连接。一次,消费者将仅与一个代理连接,该代理在内部提供相应集群的元数据,如分区详细信息、领导者等。您需要使用MirrorMaker将数据从一个集群发送到另一个集群,以便在给定一个Kafka集群的情况下使用这两个主题