
# 创建Kafka Topic
#### 操作场景
用户可以根据业务需要，使用集群客户端或KafkaUI创建Kafka的主题。启用Kerberos认证的集群，需要拥有管理Kafka主题的权限。
#### 前提条件
- 已安装客户端，例如安装目录为"/opt/client"，以下操作的客户端目录只是举例，请根据实际安装目录修改。 下载并安装集群客户端的具体操作，请参考[安装MRS集群客户端](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0089.html)。
  
- 各组件业务用户由MRS集群管理员根据业务需要创建。"机机"用户需要下载keytab文件。"人机"用户第一次登录时需修改密码。（集群未启用Kerberos认证（普通模式）时不涉及） 创建用户相关操作请参考[创建Kafka用户并绑定角色](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1032.html#mrs_01_1032__section15172119027)。
  
 
#### 约束与限制
MRS 3.3.1及之后版本，Kafka不再支持使用"--zookeeper"方式创建Topic。
#### 创建Kafka Topic
当前支持使用集群客户端或KafkaUI创建Kafka的主题。
#### 使用Kafka客户端创建Kafka Topic
1. 登录MRS集群Manager。 
   登录集群Manager具体操作，请参考[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)。
   
   
2. 获取Kafka节点业务IP及端口。
   
   1. 选择"集群 \> 服务 \> Kafka \> 实例"，查看并记录任意一个Broker角色实例的业务IP地址。
   
   2. 选择"配置 \> 全部配置"，并根据集群模式获取端口号：
      - 集群已启用Kerberos认证（安全模式）：搜索"sasl.port"参数，查看并记录端口号，默认为21007。
      
      - 集群未启用Kerberos认证（普通模式）：搜索"port"参数，查看并记录端口号，默认为9092。
       
   
   
   
   
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-topics.sh** 管理Kafka主题。
   
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
   - 以下**--zookeeper** 和**--bootstrap-server** 方法任选一种即可，相关区别请参见[常见问题](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_24136.html#mrs_01_24136__section74791413182617)。
   
   - MRS 3.3.1及之后版本，Kafka不再支持使用"--zookeeper"方式创建Topic。
    
   1. 执行以下命令创建Topic。
      ```
      ./kafka-topics.sh --create --topic 主题名称 --partitions 主题占用的分区数 --replication-factor 主题的备份数 --bootstrap-server Kafka集群IP:21007 --command-config ../config/client.properties
      ```
      ```
      ./kafka-topics.sh --create --topic 主题名称 --partitions 主题占用的分区数 --replication-factor 主题的备份数 --zookeeper ZooKeeper的任意一个节点的业务IP:clientPort/kafka
      ```
      例如，执行以下命令，创建一个名称为"topic01"的主题，占用分区数为1，备份数为2，Kafka集群IP和端口可以参考[2]获取：
      ```
      ./kafka-topics.sh --create --topic topic01 --partitions 1 --replication-factor 2 --bootstrap-server x.x.x.x:21007 --command-config ../config/client.properties
      ```
      执行结果如下，表示创建成功：
      ```
      Created topic topic01.
      ```
      
   
   2. 执行以下命令查看Topic信息。
      ```
      ./kafka-topics.sh --describe --bootstrap-server Kafka集群IP:21007 --command-config ../config/client.properties --topic 主题名称
      ```
      ```
      ./kafka-topics.sh --describe --zookeeper ZooKeeper的任意一个节点的业务IP:clientPort/kafka --topic 主题名称
      ```
      例如，执行以下命令，查看已创建的"topic01"信息：
      ```
      ./kafka-topics.sh --describe --bootstrap-server x.x.x.x:21007 --command-config ../config/client.properties --topic topic01
      ```
      例如执行后结果如下：
      ```
      Topic: topic01  TopicId: 5KuoIR0VQ0W-ne0Qej1vNw PartitionCount: 1       ReplicationFactor: 2    Configs: 
      ...
      ```
      
   
   
   
   
 
 #### 使用KafkaUI创建Kafka Topic
- 集群已启用Kerberos认证（安全模式），执行Create Topic操作的用户需属于"kafkaadmin"用户组，否则将会由于鉴权失败导致无法创建。
- 集群未启用Kerberos认证（普通模式），执行Create Topic操作不做鉴权，即任意用户都可执行Create Topic操作。
1. 使用具有KafkaUI页面访问权限的用户登录FusionInsight Manager。 
   登录集群Manager具体操作，请参考[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)。
   
   
2. 选择"集群 \> 服务 \> Kafka"。
3. 在"KafkaManager Web UI"右侧，单击URL链接，进入KafkaUI的页面。
4. 单击"Create Topic"进入创建Topic页面。在弹出的页面中参考[表1]填写信息，单击"Create"，完成Topic创建。
   
    表1创建Topic信息 
   | 参数名称               | 参数描述                                                    | 备注         |
   |:---|:---|:---|
   | Topic              | Topic的名称，只能包含英文字母、数字、中划线和下划线，且不能多于249个字符。               | 例如：topic01 |
   | Partitions         | Topic的分区数量，取值范围大于等于1，默认为3。                              | 3          |
   | Replication Factor | Topic的副本因子，取值范围为1\~*N*，N为当前集群Broker个数，默认为2。             | 2          |
   | Advanced Options   | 高级配置。用户可根据需要单击"Advanced Options"配置topic相关高级参数，通常保持默认即可。 | -          |
      
   
   
5. 创建完成后，单击"Topics"页签，查看"Topic List"中存在已创建的Topic名称，单击Topic名称，可以查看详细信息。 
   图1Topic创建成功   
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002516240177.png "点击放大")
   
   
 
#### Kafka客户端常用命令
使用**kafka-topics.sh**管理Kafka主题的常用命令如下所示：
- 创建主题： MRS 3.3.1及之后版本，Kafka不再支持使用"--zookeeper"方式创建Topic。
  ```
  ./kafka-topics.sh --create --topic 主题名称 --partitions 主题占用的分区数 --replication-factor 主题的备份数 --zookeeper ZooKeeper的任意一个节点的业务IP:clientPort/kafka
  ```
  ```
  ./kafka-topics.sh --create --topic 主题名称 --partitions 主题占用的分区数 --replication-factor 主题的备份数 --bootstrap-server Kafka集群IP:21007 --command-config ../config/client.properties
  ```
  
- 罗列主题：
  ```
  ./kafka-topics.sh --list --zookeeper ZooKeeper的任意一个节点的业务IP:clientPort/kafka
  ```
  ```
  ./kafka-topics.sh --list --bootstrap-server Kafka集群IP:21007 --command-config ../config/client.properties
  ```
  
- 查看主题：
  ```
  ./kafka-topics.sh --describe --zookeeper ZooKeeper的任意一个节点的业务IP:clientPort/kafka --topic 主题名称
  ```
  ```
  ./kafka-topics.sh --describe --bootstrap-server Kafka集群IP:21007 --command-config ../config/client.properties --topic 主题名称
  ```
  
- 修改主题：
  ```
  ./kafka-topics.sh --alter --topic 主题名称 --config 配置项=配置值 --zookeeper ZooKeeper的任意一个节点的业务IP:clientPort/kafka
  ```
  
- 扩展分区：
  ```
  ./kafka-topics.sh --alter --topic 主题名称 --zookeeper ZooKeeper的任意一个节点的业务IP:clientPort/kafka --command-config Kafka/kafka/config/client.properties --partitions 扩展后分区个数
  ```
  ```
  ./kafka-topics.sh --alter --topic 主题名称 --bootstrap-server Kafka集群IP:21007 --command-config Kafka/kafka/config/client.properties --partitions 扩展后分区个数
  ```
  
- 删除主题：
  ```
  ./kafka-topics.sh --delete --topic 主题名称 --zookeeper ZooKeeper的任意一个节点的业务IP:clientPort/kafka
  ```
  ```
  ./kafka-topics.sh --delete --topic 主题名称 --bootstrap-server Kafka集群IP:21007 --command-config ../config/client.properties
  ```
  
- 切换主题分区的Leader Broker（仅适用于MRS 3.6.0.1及之后版本）：
  ```
  ./kafka-preferred-leader-election.sh  --bootstrap-server Kafka集群IP:21007  --topic-partition 主题名称:分区  --target-broker-id 目标Leader BrokerID --command-config ../config/client.properties
  ```
  其中目标Leader Broker需要在要切换的主题分区副本中。
  
 
 #### 常见问题
**使用** **kafka-topics.sh** **创建Topic时，** **--zookeeper和--bootstrap-server两种方法的区别** **是什么？**
在Apache Kafka中，--zookeeper和--bootstrap-server是两个用于客户端工具（如生产者、消费者、管理命令）的参数，但它们的用途和适用场景有显著区别：
- --zookeeper：由客户端生成副本分配方案。
  - 为了降低对ZooKeeper组件的依赖，MRS 3.3.1及之后版本，Kafka不再支持使用"--zookeeper"方式创建Topic。
  
  - 使用该方式创建Topic时，支持使用"--enable-rack-aware"和"--enable-az-aware"（前提是服务端开启了跨AZ特性，即服务端启动参数"az.aware.enable"为"true"，否则会执行失败）这两个选项自由组合来选用副本分配策略。
   
- --bootstrap-server：由服务端生成副本分配方案。
  - 使用该方式创建Topic时，支持使用"rack.aware.enable"和"az.aware.enable"这两个服务启动参数组合来控制副本分配策略。其中"az.aware.enable"参数不可修改，在创建集群时如果开启跨AZ特性，会自动配置为"true";"rack.aware.enable"参数支持用户自定义修改。
  
  - 不支持"--enable-rack-aware"和"--enable-az-aware"选项来控制副本分配策略。
   
 
#### 相关文档
- 更多管理Kafka Topic相关操作请参考[管理Kafka Topic](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_300272.html)。
- 使用Kafka客户端命令创建Topic时，报错NoAuthException、KeeperErrorCode = NoAuth for /config/topics，请参考[创建Kafka Topic时报错"NoAuthException"](https://support.huaweicloud.com/trouble-mrs/mrs_03_0121.html)章节进行处理。
- 使用Kafka客户端命令创建Topic时，报错NoNodeException: KeeperErrorCode = NoNode for /brokers/ids，请参考[创建Kafka Topic时报错"NoNode for /brokers/ids"](https://support.huaweicloud.com/trouble-mrs/mrs_03_0123.html)章节进行处理。
- 使用Kafka客户端命令创建Topic时，报错replication factor larger than available brokers，请参考[创建Kafka Topic时报错"replication factor larger than available brokers"](https://support.huaweicloud.com/trouble-mrs/mrs_03_0124.html)章节进行处理。
- 使用Kafka客户端命令创建Topic时，发现创建Topic Partition的Leader显示为none，请参考[创建Kafka Topic时，发现Partition的Leader显示为none](https://support.huaweicloud.com/trouble-mrs/mrs_03_0139.html)章节进行处理。
- 使用Kafka客户端获取Topic时报错"ERROR org.apache.kafka.common.errors.InvalidReplicationFactorException: Replication factor: 2 larger than available brokers: 0."，请参考[获取Kafka Topic时报错"InvalidReplicationFactorException"](https://support.huaweicloud.com/trouble-mrs/mrs_03_0044.html)章节进行处理。
- 删除Kafka Topic后发现未成功删除时，请参考[删除Kafka Topic时发现无法删除](https://support.huaweicloud.com/trouble-mrs/mrs_03_0108.html)章节进行处理。
- 删除Kafka Topic时报错"ERROR kafka.admin.AdminOperationException: Error while deleting topic test4"，请参考[删除Kafka Topic时报错"AdminOperationException"](https://support.huaweicloud.com/trouble-mrs/mrs_03_0120.html)章节进行处理。
 
