val brokerInfo = createBrokerInfoval brokerEpoch = zkClient.registerBroker(brokerInfo)
Ø CreateBrokerInfo : 创建BrokerInfo对象
下面围绕该方法展开
l 第一步代码就是先获取endPoints
val AdvertisedListenersProp = "advertised.listeners"val ListenerSecurityProtocolMapProp = "listener.security.protocol.map" advertised.listeners=PLAINTEXT://your.host.name:9092listener.security.protocol.map=PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL 这两个是属性key, getString、getMap等方法会获取/config/server.properties文件中配置的属性值并转化为string、map对象。配置解析初始化后,就开始创建EndPoint
从parseCsvList可以看出,配置中advertised.listeners的值也可能是多个以“,”隔开的多个字符串值,那也就是说可以一个Key值配置多个EndPoint。可以一次性配置多个EndPoint, 但在validate方法中可以看出endPoint的端口port不能为0,endPoint不能重复,endPoint的协议名称listenerName不能有重复。也就是说一次行配置多个具有不同协议的EndPoint↓EndPoint.createEndPoint 创建EndPoint
l 第二步从ZK中取出其他borker的endPoints与当前broker的做host:port对比,不能有重复的。
l 第三步对endPoints的空port或host进一步整理
l 最后新建BorkerInfo对象
Ø zkClient.registerBroker:注册到Zookeeper
将BrokerInfo的相关数据encode编码并转为字节数组后存储到ZK的/brokers/ids/$id节点