更新时间:2026-06-11 GMT+08:00
分享

创建Kafka Topic

操作场景

用户可以根据业务需要,使用集群客户端或KafkaUI创建Kafka的主题。启用Kerberos认证的集群,需要拥有管理Kafka主题的权限。

前提条件

  • 已安装客户端,例如安装目录为“/opt/client”,以下操作的客户端目录只是举例,请根据实际安装目录修改。

    下载并安装集群客户端的具体操作,请参考安装MRS集群客户端

  • 各组件业务用户由MRS集群管理员根据业务需要创建。“机机”用户需要下载keytab文件。“人机”用户第一次登录时需修改密码。(集群未启用Kerberos认证(普通模式)时不涉及)

    创建用户相关操作请参考创建Kafka用户并绑定角色

约束与限制

MRS 3.3.1及之后版本,Kafka不再支持使用“--zookeeper”方式创建Topic。

创建Kafka Topic

当前支持使用集群客户端或KafkaUI创建Kafka的主题。

使用Kafka客户端创建Kafka Topic

  1. 登录MRS集群Manager。

    登录集群Manager具体操作,请参考访问MRS集群Manager

  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主题。

    • 以下--zookeeper--bootstrap-server方法任选一种即可,相关区别请参见常见问题
    • 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

  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名称,可以查看详细信息。

    图1 Topic创建成功

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”选项来控制副本分配策略。

相关文档

相关文档