Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 一个消费者在两个不同的集群上消费两个不同的主题_Java_Apache Kafka_Kafka Consumer Api - Fatal编程技术网

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集群的情况下使用这两个主题