我们知道,在kafka 0.7中,我们可以为生产者指定zk.connect,因此生产者可以找到代理的添加和删除。但是在kafka 0.8中,我们不能为生产者指定zk.connect。 kafka 0.8的生产商可以找到吗?如果没有,系统的可扩展性并不比0.7版差?
答案 0 :(得分:2)
您仍然可以使用ZooKeeper客户端来检索代理列表:
ZkClient zkClient = new ZkClient("localhost:2108", 4000, 6000, new BytesPushThroughSerializer());
List<String> brokerList = zkClient.getChildren("/brokers/ips");
根据这一点,您不必在客户端“硬编码”代理列表,就系统架构而言,您是灵活的。但无论如何,这会再次添加ZooKeeper依赖,这实际上是生产者在几种环境中的劣势。
如果您想详细了解所谓的“群集元数据API”解决方案,请查看以下链接:https://issues.apache.org/jira/browse/KAFKA-369
最佳
预
P.S。:很抱歉将此问题转发给您的其他问题 - 但答案适合两者; - )
答案 1 :(得分:0)
很难弄清楚到底在找什么,在0.8中我们必须在metadata.broker.list
属性中指定经纪人列表
Properties props = new Properties();
props.put("metadata.broker.list", "broker1:9092,broker2:9092");
来自kafka消费者example他们说
属性“metadata.broker.list”定义了Producer可以找到一个或多个Brokers以确定每个主题的Leader的位置。这不需要是集群中的完整Broker集,但如果第一个Broker不可用,则应至少包含两个。无需担心找出哪个Broker是主题(和分区)的领导者,生产者知道如何连接到Broker并要求元数据然后连接到正确的Broker。
通过说添加是否意味着向群集添加新节点?