增加对BrokerMetadata中endpoints为internal|External方式的解析

This commit is contained in:
xuguang
2022-01-12 16:15:46 +08:00
parent c344fd8ca4
commit 4df2dc09fe
5 changed files with 110 additions and 88 deletions

View File

@@ -109,5 +109,10 @@
<groupId>junit</groupId> <groupId>junit</groupId>
<artifactId>junit</artifactId> <artifactId>junit</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>compile</scope>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@@ -17,6 +17,10 @@ public class KafkaConstant {
public static final String RETENTION_MS_KEY = "retention.ms"; public static final String RETENTION_MS_KEY = "retention.ms";
public static final String EXTERNAL_KEY = "EXTERNAL";
public static final String INTERNAL_KEY = "INTERNAL";
private KafkaConstant() { private KafkaConstant() {
} }
} }

View File

@@ -0,0 +1,18 @@
package com.xiaojukeji.kafka.manager.common.entity.ao.common;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class IpPortData implements Serializable {
private static final long serialVersionUID = -428897032994630685L;
private String ip;
private String port;
}

View File

@@ -1,6 +1,17 @@
package com.xiaojukeji.kafka.manager.common.zookeeper.znode.brokers; package com.xiaojukeji.kafka.manager.common.zookeeper.znode.brokers;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.xiaojukeji.kafka.manager.common.constant.KafkaConstant;
import com.xiaojukeji.kafka.manager.common.entity.ao.common.IpPortData;
import com.xiaojukeji.kafka.manager.common.utils.NumberUtils;
import lombok.Data;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* @author zengqiao * @author zengqiao
@@ -18,22 +29,48 @@ import java.util.List;
* "version":4, * "version":4,
* "rack": "CY" * "rack": "CY"
* } * }
*
* {
* "listener_security_protocol_map":{"SASL_PLAINTEXT":"SASL_PLAINTEXT","PLAINTEXT":"PLAINTEXT"},
* "endpoints":["SASL_PLAINTEXT://10.179.162.202:9093","PLAINTEXT://10.179.162.202:9092"],
* "jmx_port":8099,
* "host":"10.179.162.202",
* "timestamp":"1628833925822",
* "port":9092,
* "version":4
* }
*
* {
* "listener_security_protocol_map":{"EXTERNAL":"SASL_PLAINTEXT","INTERNAL":"SASL_PLAINTEXT"},
* "endpoints":["EXTERNAL://10.179.162.202:7092","INTERNAL://10.179.162.202:7093"],
* "jmx_port":8099,
* "host":null,
* "timestamp":"1627289710439",
* "port":-1,
* "version":4
* }
*
*/ */
public class BrokerMetadata implements Cloneable { @Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class BrokerMetadata implements Serializable {
private static final long serialVersionUID = 3918113492423375809L;
private long clusterId; private long clusterId;
private int brokerId; private int brokerId;
private List<String> endpoints; private List<String> endpoints;
// <EXTERNAL|INTERNAL, <ip, port>>
private Map<String, IpPortData> endpointMap;
private String host; private String host;
private int port; private int port;
/* @JsonProperty("jmx_port")
* ZK上对应的字段就是这个名字, 不要进行修改 private int jmxPort;
*/
private int jmx_port;
private String version; private String version;
@@ -41,91 +78,54 @@ public class BrokerMetadata implements Cloneable {
private String rack; private String rack;
public long getClusterId() { @JsonIgnore
return clusterId; public String getExternalHost() {
if (!endpointMap.containsKey(KafkaConstant.EXTERNAL_KEY)) {
return null;
}
return endpointMap.get(KafkaConstant.EXTERNAL_KEY).getIp();
} }
public void setClusterId(long clusterId) { @JsonIgnore
this.clusterId = clusterId; public String getInternalHost() {
if (!endpointMap.containsKey(KafkaConstant.INTERNAL_KEY)) {
return null;
}
return endpointMap.get(KafkaConstant.INTERNAL_KEY).getIp();
} }
public int getBrokerId() { public static void parseAndUpdateBrokerMetadata(BrokerMetadata brokerMetadata) {
return brokerId; brokerMetadata.setEndpointMap(new HashMap<>());
}
public void setBrokerId(int brokerId) { if (brokerMetadata.getEndpoints().isEmpty()) {
this.brokerId = brokerId; return;
} }
public List<String> getEndpoints() { // example EXTERNAL://10.179.162.202:7092
return endpoints; for (String endpoint: brokerMetadata.getEndpoints()) {
} int idx1 = endpoint.indexOf("://");
int idx2 = endpoint.lastIndexOf(":");
if (idx1 == -1 || idx2 == -1 || idx1 == idx2) {
continue;
}
public void setEndpoints(List<String> endpoints) { String brokerHost = endpoint.substring(idx1 + "://".length(), idx2);
this.endpoints = endpoints; String brokerPort = endpoint.substring(idx2 + 1);
}
public String getHost() { brokerMetadata.getEndpointMap().put(endpoint.substring(0, idx1), new IpPortData(brokerHost, brokerPort));
return host;
}
public void setHost(String host) { if (KafkaConstant.EXTERNAL_KEY.equals(endpoint.substring(0, idx1))) {
this.host = host; // 优先使用external的地址进行展示
} brokerMetadata.setHost(brokerHost);
brokerMetadata.setPort(NumberUtils.string2Integer(brokerPort));
}
public int getPort() { if (null == brokerMetadata.getHost()) {
return port; brokerMetadata.setHost(brokerHost);
} brokerMetadata.setPort(NumberUtils.string2Integer(brokerPort));
}
public void setPort(int port) { }
this.port = port;
}
public int getJmxPort() {
return jmx_port;
}
public void setJmxPort(int jmxPort) {
this.jmx_port = jmxPort;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
public String getRack() {
return rack;
}
public void setRack(String rack) {
this.rack = rack;
}
@Override
public String toString() {
return "BrokerMetadata{" +
"clusterId=" + clusterId +
", brokerId=" + brokerId +
", endpoints=" + endpoints +
", host='" + host + '\'' +
", port=" + port +
", jmxPort=" + jmx_port +
", version='" + version + '\'' +
", timestamp=" + timestamp +
", rack='" + rack + '\'' +
'}';
} }
} }

View File

@@ -74,15 +74,10 @@ public class BrokerStateListener implements StateChangeListener {
BrokerMetadata brokerMetadata = null; BrokerMetadata brokerMetadata = null;
try { try {
brokerMetadata = zkConfig.get(ZkPathUtil.getBrokerIdNodePath(brokerId), BrokerMetadata.class); brokerMetadata = zkConfig.get(ZkPathUtil.getBrokerIdNodePath(brokerId), BrokerMetadata.class);
if (!brokerMetadata.getEndpoints().isEmpty()) {
String endpoint = brokerMetadata.getEndpoints().get(0);
int idx = endpoint.indexOf("://");
endpoint = endpoint.substring(idx + "://".length());
idx = endpoint.indexOf(":");
brokerMetadata.setHost(endpoint.substring(0, idx)); // 解析并更新本次存储的broker元信息
brokerMetadata.setPort(Integer.parseInt(endpoint.substring(idx + 1))); BrokerMetadata.parseAndUpdateBrokerMetadata(brokerMetadata);
}
brokerMetadata.setClusterId(clusterId); brokerMetadata.setClusterId(clusterId);
brokerMetadata.setBrokerId(brokerId); brokerMetadata.setBrokerId(brokerId);
PhysicalClusterMetadataManager.putBrokerMetadata(clusterId, brokerId, brokerMetadata, jmxConfig); PhysicalClusterMetadataManager.putBrokerMetadata(clusterId, brokerId, brokerMetadata, jmxConfig);