修改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或者客户端修改分区数。
- 登录Kafka控制台。
- 在管理控制台左上角单击
,选择Kafka实例所在的区域。
- 单击Kafka实例的名称,进入实例详情页面。
- 在左侧导航栏选择“实例管理 > Topic管理”,进入Topic列表页面。
- 通过以下任意一种方法,修改Topic分区数。
- 勾选Topic名称左侧的方框,可选一个或多个,单击信息栏左上侧的“编辑Topic”。
- 在待修改分区数的Topic所在行,单击“编辑”。
- 在“编辑Topic”对话框中,参考表1修改分区数,然后单击“确定”。
表1 分区数参数说明 参数
说明
分区数
输入分区数。分区数只支持增加,不支持减少。
出于性能考虑,Kafka控制台限定单个Topic的分区数上限为200。
新增分区分配
设置新增分区所在代理。
- 自动分配:Kafka服务自动为新增分区分配代理。
- 手动分配:在下拉框中为新增分区分配代理,分配的代理数量不能小于Topic的副本数。
设置成功后,在Topic列表页面,查看修改后的分区数。
- 登录Kafka控制台。
- 在管理控制台左上角单击
,选择Kafka实例所在的区域。
- 单击Kafka实例的名称,进入实例详情页面。
- 在左侧导航栏选择“实例管理 > Topic管理”,进入Topic列表页面。
- 勾选待修改分区数的Topic,单击信息栏左上侧的“批量编辑Topic”,弹出“批量编辑Topic”对话框。
- 在“批量操作”区域,勾选“分区数”,并输入分区数。在“批量数据预览”区域,查看修改前和修改后的分区数。确认无误后,单击“确定”。
分区数的取值范围受以下几个条件约束:
- 出于性能考虑,Kafka控制台限定单个Topic的分区数上限为200。
- 分区数不能小于待设置分区数的Topic中最大分区数的值。例如,Topic01的分区数为3,Topic02的分区数为6,批量修改分区数时,设置的分区数不能小于6。
图1 批量修改分区数设置成功后,在Topic列表页面,查看修改后的分区数。
- 登录Kafka Manager。
- 在Kafka Manager中,单击“Topic > List”,进入Topic列表界面。
- 单击Topic名称,进入Topic详情界面。
- 单击“Add Partitions”,进入增加分区界面。
图2 Topic详情界面
- 输入分区数,单击“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分区数。
- (可选)如果已经设置了用户名和密码,以及SSL证书配置,请跳过此步骤,执行2。否则请执行以下操作。
在Kafka客户端的“/config”目录中创建“ssl-user-config.properties”文件,参考3增加用户名和密码,以及SSL证书配置。
- 在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]#
- (可选)如果已经设置了用户名和密码,以及SSL证书配置,请跳过此步骤,执行2。否则请执行以下操作。
相关文档
- 如果您希望通过API修改Topic分区数,请参考修改Kafka实例Topic。
- 如果您希望扩大Topic的总分区数,请参考如何扩总分区。