我有一位正在使用经纪人列表(bootstrap.servers
)初始化的消费者。现在,在大多数使用情况下,该列表由互连的代理组成。因此,如果有一个连接,那么kafka将自动填充其他代理的列表。
但是,我可能有一个用例,其中我希望一个消费者从两个单独的集群test1
和{{1}中出现的两个主题test2
和C1
中消费}。我想到了使用消费者API为kafka消费者提供两个经纪人,每个集群一个。
C2
Properties kafkaProps = new Properties();
kafkaProps.put("bootstrap.servers", "b1:9092,b2:9092");
是b1
的经纪人,C1
是b2
的经纪人
然后我将使用C2
。
我想知道这是正确的方法还是行得通。请告诉我你是否要让我分享其他信息
答案 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文档,使用字符串将多个代理分隔开的目的是为了容错,而不是同时连接。一次,消费者只会与一个经纪人建立联系,而经纪人内部会提供相应集群的元数据,例如分区详细信息,领导者等。