一位消费者在两个单独的集群中从两个不同的主题进行消费

时间:2018-07-03 20:01:08

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

我有一位正在使用经纪人列表(bootstrap.servers)初始化的消费者。现在,在大多数使用情况下,该列表由互连的代理组成。因此,如果有一个连接,那么kafka将自动填充其他代理的列表。

但是,我可能有一个用例,其中我希望一个消费者从两个单独的集群test1和{{1}中出现的两个主题test2C1中消费}。我想到了使用消费者API为kafka消费者提供两个经纪人,每个集群一个。

C2

Properties kafkaProps = new Properties(); kafkaProps.put("bootstrap.servers", "b1:9092,b2:9092"); b1的经纪人,C1b2的经纪人

然后我将使用C2

我想知道这是正确的方法还是行得通。请告诉我你是否要让我分享其他信息

2 个答案:

答案 0 :(得分:1)

在同一使用者下不可能有两个不同的群集主题,当使用者启动时,它将获取群集上的所有代理和主题,并尝试查找另一个群集的主题,因为其中一个主题不存在将导致错误消息

Error while fetching metadata with correlation id 20 : {second-cluster-testtopic=UNKNOWN_TOPIC_OR_PARTITION}

我们可以在同一集群中为两个不同的主题指定相同的使用者,但是建议的方案,例如两个具有相同数据类型的主题

答案 1 :(得分:1)

仅通过将两个不同的逗号分隔为逗号进行测试,

ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,"prod-cluster:9092,dev-cluster:9092"

它收集了开发集群的详细信息并处理了请求。颠倒顺序会颠倒消费者选择的集群。没有引发错误。

根据Kafka文档,使用字符串将多个代理分隔开的目的是为了容错,而不是同时连接。一次,消费者只会与一个经纪人建立联系,而经纪人内部会提供相应集群的元数据,例如分区详细信息,领导者等。