
# 如何获取Topic的分布信息
#### 问题描述
如何获取Topic在Broker实例的分布信息？
#### 前置操作
1. 已安装客户端，例如安装目录为"/opt/client"，以下操作的客户端目录只是举例，请根据实际安装目录修改。 
   下载并安装集群客户端的具体操作，请参考[安装MRS集群客户端](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0089.html)。
   
   
2. 登录MRS集群Manager。 
   登录集群Manager具体操作，请参考[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)。
   
   
3. 获取ZooKeeper节点业务IP及端口。 
   1. 选择"集群 \> 服务 \> ZooKeeper \> 实例"，查看并记录任意一个ZooKeeper角色实例的业务IP地址。
   
   2. 选择"配置 \> 全部配置"，搜索"clientPort"，查看并记录端口号。 创建LTS版本类型集群时，可以选择"组件端口"为"开源"场景或"定制"场景，选择"开源"时ZooKeeper默认端口为2181，选择"定制"时ZooKeeper默认端口为24002。
      
   
   
   
   
4. 以客户端安装用户，登录安装客户端的节点。
5. 执行以下命令，切换到客户端安装目录，例如安装目录为"/opt/client"，具体以实际替换。 
   ```
   cd /opt/client
   ```
   
   
6. 执行以下命令配置环境变量。 
   ```
   source bigdata_env
   ```
   
   
7. 执行以下命令，进行用户认证。（集群未启用Kerberos认证（普通模式）时跳过此步骤） 
   ```
   kinit 组件业务用户
   ```
   
   
8. 执行以下命令进入Kafka客户端"bin"目录。 
   ```
   cd Kafka/kafka/bin
   ```
   
   
9. 执行Kafka相关命令，获取Topic分布信息和副本同步信息，观察返回结果。 
   ```
   kafka-topics.sh --describe --zookeeper <zk_host:port/chroot>
   ```
   例如：
   ```
   [root@mgtdat-sh-3-01-3 client]#kafka-topics.sh --describe --zookeeper 10.149.0.90:2181/kafka
   Topic:topic1   PartitionCount:2  ReplicationFactor:2     Configs:
   Topic: topic1  Partition: 0 Leader: 26 Replicas: 23,25 Isr: 26
   Topic: topic1  Partition: 1 Leader: 24 Replicas: 24,23 Isr: 24,23
   ```
   其中，Replicas对应副本分布信息，Isr对应副本同步信息。
   
   
 
#### 查询Broker ID的对应关系
- **方法一：**
  1. 在ZooKeeper中查询Broker ID的对应关系。
     ```
     sh zkCli.sh -server <zk_host:port>
     ```
     
  
  2. 在ZooKeeper客户端执行如下命令。
     ```
     ls /kafka/brokers/ids
     ```
     ```
     get /kafka/brokers/ids/<查询出的Broker id>
     ```
     例如：
     ```
     [root@node-master1gAMQ kafka]# zkCli.sh -server node-master1gAMQ:2181
     Connecting to node-master1gAMQ:2181
     Welcome to ZooKeeper!
     JLine support is enabled
     WATCHER::
     WatchedEvent state:SyncConnected type:None path:null
     [zk: node-master1gAMQ:2181(CONNECTED) 0] ls /kafka/brokers/
     ids      seqid    topics
     [zk: node-master1gAMQ:2181(CONNECTED) 0] ls /kafka/brokers/ids
     [1]
     [zk: node-master1gAMQ:2181(CONNECTED) 1] get /kafka/brokers/ids/1
     {"listener_security_protocol_map":{"PLAINTEXT":"PLAINTEXT","SSL":"SSL"},"endpoints":["PLAINTEXT://192.168.2.242:9092","SSL://192.168.2.242:9093"],"rack":"/default/rack0","jmx_port":21006,"host":"192.168.2.242","timestamp":"1580886124398","port":9092,"version":4}
     [zk: node-master1gAMQ:2181(CONNECTED) 2]
     ```
     
   
- **方法二：**
  执行以下命令，获取节点和broker ID的对应关系
  ```
  kafka-broker-info.sh --zookeeper <zk_host:port/chroot>
  ```
  例如：
  ```
  [root@node-master1gAMQ kafka]# bin/kafka-broker-info.sh --zookeeper 192.168.2.70:2181/kafka
  Broker_ID     IP_Address
  --------------------------
    1           192.168.2.242
  ```
  
 
