更新时间:2025-08-21 GMT+08:00

修改Kafka Topic分区数

创建Kafka实例Topic成功之后,您可以根据业务需要修改Topic的分区数。修改分区数,不会重启实例,不会影响业务。

约束与限制

  • 分区数只支持增加,不支持减少。
  • 2023年5月17日及以后创建的实例不提供Kafka Manager功能,不支持在Kafka Manager中修改Topic分区数。
  • Kafka单机/集群实例对Topic的总分区数设置了上限,当Topic的总分区数达到上限后,用户就无法继续创建Topic。不同规格配置的Topic总分区数不同,具体请参考Kafka实例规格
  • 已开启密文接入的实例,“allow.everyone.if.no.acl.found”为“false”时,初始用户(即首次开启密文接入时设置的用户)可以通过客户端修改Topic分区数,其他用户无法通过客户端修改Topic分区数。
  • 批量修改分区数时,每次最多修改50个Topic的分区数。

修改Kafka Topic分区数

您可以在Kafka控制台修改分区数,也可以通过Kafka Manager或者客户端修改分区数。

  1. 登录Kafka控制台
  2. 在管理控制台左上角单击,选择Kafka实例所在的区域。
  3. 单击Kafka实例的名称,进入实例详情页面。
  4. 在左侧导航栏选择“实例管理 > Topic管理”,进入Topic列表页面。
  5. 通过以下任意一种方法,修改Topic分区数。

    • 勾选Topic名称左侧的方框,可选一个或多个,单击信息栏左上侧的“编辑Topic”。
    • 在待修改分区数的Topic所在行,单击“编辑”。

  6. 在“编辑Topic”对话框中,参考表1修改分区数,然后单击“确定”。

    表1 分区数参数说明

    参数

    说明

    分区数

    输入分区数。分区数只支持增加,不支持减少。

    出于性能考虑,Kafka控制台限定单个Topic的分区数上限为200。

    新增分区分配

    设置新增分区所在代理。

    • 自动分配:Kafka服务自动为新增分区分配代理。
    • 手动分配:在下拉框中为新增分区分配代理,分配的代理数量不能小于Topic的副本数。

    设置成功后,在Topic列表页面,查看修改后的分区数。

  1. 登录Kafka控制台
  2. 在管理控制台左上角单击,选择Kafka实例所在的区域。
  3. 单击Kafka实例的名称,进入实例详情页面。
  4. 在左侧导航栏选择“实例管理 > Topic管理”,进入Topic列表页面。
  5. 勾选待修改分区数的Topic,单击信息栏左上侧的“批量编辑Topic”,弹出“批量编辑Topic”对话框。
  6. 在“批量操作”区域,勾选“分区数”,并输入分区数。在“批量数据预览”区域,查看修改前和修改后的分区数。确认无误后,单击“确定”。

    分区数的取值范围受以下几个条件约束:

    • 出于性能考虑,Kafka控制台限定单个Topic的分区数上限为200。
    • 分区数不能小于待设置分区数的Topic中最大分区数的值。例如,Topic01的分区数为3,Topic02的分区数为6,批量修改分区数时,设置的分区数不能小于6。
    图1 批量修改分区数

    设置成功后,在Topic列表页面,查看修改后的分区数。

  1. 登录Kafka Manager
  2. 在Kafka Manager中,单击“Topic > List”,进入Topic列表界面。
  3. 单击Topic名称,进入Topic详情界面。
  4. 单击“Add Partitions”,进入增加分区界面。

    图2 Topic详情界面

  5. 输入分区数,单击“Add Partitions”。

    出于性能考虑,建议单个Topic的分区数设置为200以内。
    图3 增加分区数量

    显示“Done”,表示分区增加成功。

    图4 分区增加成功

Kafka客户端版本为2.2以上时,支持通过kafka-topics.sh修改Topic分区数。

  • 未开启密文接入的Kafka实例,在Kafka客户端的“/bin”目录下,通过以下命令修改Topic分区数。
    ./kafka-topics.sh --bootstrap-server {connection-address} --topic {topic-name} --alter --partitions {number-of-partitions}
    表2 修改Topic分区数参数说明

    参数名称

    说明

    connection-address

    Kafka实例的连接地址,在Kafka控制台的“概览 > 连接信息”中获取。

    topic-name

    Topic名称。

    number-of-partitions

    Topic的分区数。

    出于性能考虑,建议单个Topic的分区数设置为200以内

    示例如下:

    [root@ecs-kafka bin]# ./kafka-topics.sh --bootstrap-server 192.168.xx.xx:9092,192.168.xx.xx:9092,192.168.xx.xx:9092 --topic topic-01 --alter --partitions 6
    [root@ecs-kafka bin]#
  • 已开启密文接入的Kafka实例,通过以下步骤修改Topic分区数。
    1. (可选)如果已经设置了用户名和密码,以及SSL证书配置,请跳过此步骤,执行2。否则请执行以下操作。

      在Kafka客户端的“/config”目录中创建“ssl-user-config.properties”文件,参考3增加用户名和密码,以及SSL证书配置。

    2. 在Kafka客户端的“/bin”目录下,通过以下命令修改Topic分区数。
      ./kafka-topics.sh --bootstrap-server {connection-address} --topic {topic-name} --alter --partitions {number-of-partitions} --command-config ../config/{ssl-user-config.properties} 
      表3 修改Topic分区数参数说明

      参数名称

      说明

      connection-address

      Kafka实例的连接地址,在Kafka控制台的“概览 > 连接信息”中获取。

      topic-name

      Topic名称。

      number-of-partitions

      Topic的分区数。

      出于性能考虑,建议单个Topic的分区数设置为200以内

      ssl-user-config.properties

      配置文件的名称,此配置文件用于存放用户名和密码,以及SSL证书配置信息。

      示例如下:

      [root@ecs-kafka bin]# ./kafka-topics.sh --bootstrap-server 192.168.xx.xx:9093,192.168.xx.xx:9093,192.168.xx.xx:9093 --topic topic-01 --alter --partitions 6 --command-config ../config/ssl-user-config.properties
      [root@ecs-kafka bin]#

相关文档