修改Kafka Topic分区数
创建Kafka实例Topic成功之后,您可以根据业务需要修改Topic的分区数。分区数只支持增加,不支持减少。修改分区数,不会重启实例,不会影响业务。
修改Topic分区数的方法如下:
约束与限制
- 2023年5月17日及以后创建的实例不提供Kafka Manager功能,不支持在Kafka Manager中修改Topic分区数。
- 所有Topic分区数总和不能超过实例允许的分区上限,不同规格的实例分区上限不同,具体参见产品规格。
- 已开启密文接入的实例,“allow.everyone.if.no.acl.found”设置为“false”时,无法通过客户端修改Topic分区数。
在控制台修改Topic分区数
- 登录管理控制台。
- 在管理控制台左上角单击,选择区域。
请选择Kafka实例所在的区域。
- 在管理控制台左上角单击,选择“应用中间件 > 分布式消息服务Kafka版”,进入分布式消息服务Kafka专享版页面。
- 在左侧导航栏单击“Kafka实例”,进入Kafka实例列表页面。
- 单击Kafka实例的名称,进入实例详情页面。
- 在左侧导航栏选择“Topic管理”,进入Topic列表页面。
- 通过以下任意一种方法,修改Topic分区数。
- 勾选Topic名称左侧的方框,可选一个或多个,单击信息栏左上侧的“编辑Topic”。
- 在待修改分区数的Topic所在行,单击“编辑”。
- 在“编辑Topic”对话框中,输入分区数,单击“确定”。
- 分区数只支持增加,不支持减少。
- 出于性能考虑,Kafka控制台限定单个Topic的分区数上限为200。
在Kafka Manager修改Topic分区数
- 登录Kafka Manager。
- 在Kafka Manager中,单击“Topic > List”,进入Topic列表界面。
- 单击Topic名称,进入Topic详情界面。
- 单击“Add Partitions”,进入增加分区界面。
图1 Topic详情界面
- 输入分区数,单击“Add Partitions”。
图2 增加分区数量
显示“Done”,表示分区增加成功。
图3 分区增加成功
- 分区数只支持增加,不支持减少。
- 出于性能考虑,建议单个Topic的分区数设置为200以内。
在客户端修改Topic分区数
Kafka客户端版本为2.2以上时,支持通过kafka-topics.sh修改Topic分区数。
已开启密文接入的实例,“allow.everyone.if.no.acl.found”设置为“false”时,无法通过客户端修改Topic分区数。
- 未开启密文接入的Kafka实例,在Kafka客户端的“/bin”目录下,通过以下命令修改Topic分区数。
./kafka-topics.sh --bootstrap-server ${connection-address} --topic ${topic-name} --alter --partitions ${number-of-partitions}
参数说明如下:- 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分区数。
- (可选)修改客户端配置文件。
在Kafka控制台的“基本信息 > 连接信息”中查看Kafka安全协议,两种安全协议对应的配置文件设置有所不同,请根据实际情况配置。
- SASL_PLAINTEXT:如果已经设置了用户名和密码,请跳过此步骤,执行2。否则在Kafka客户端的“/config”目录中创建“ssl-user-config.properties”文件,在文件中增加如下内容。
security.protocol=SASL_PLAINTEXT #SASL认证机制为“SCRAM-SHA-512”时,配置信息如下。 sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \ username="**********" \ password="**********"; sasl.mechanism=SCRAM-SHA-512 #SASL认证机制为“PLAIN”时,配置信息如下。 sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \ username="**********" \ password="**********"; sasl.mechanism=PLAIN
参数说明如下:username和password为首次开启密文接入时填入的用户名和密码,或者创建用户时设置的用户名和密码。
- SASL_SSL:如果已经设置了用户名和密码,以及SSL证书配置,请跳过此步骤,执行2。否则在Kafka客户端的“/config”目录中创建“ssl-user-config.properties”文件,在文件中增加如下内容。
security.protocol=SASL_SSL ssl.truststore.location={ssl_truststore_path} ssl.truststore.password=dms@kafka ssl.endpoint.identification.algorithm= #SASL认证机制为“SCRAM-SHA-512”时,配置信息如下。 sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \ username="**********" \ password="**********"; sasl.mechanism=SCRAM-SHA-512 #SASL认证机制为“PLAIN”时,配置信息如下。 sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \ username="**********" \ password="**********"; sasl.mechanism=PLAIN
参数说明如下:
- ssl.truststore.location配置为client.jks证书的存放路径。注意,Windows系统下证书路径中也必须使用“/”,不能使用Windows系统中复制路径时的“\”,否则客户端获取证书失败。
- ssl.truststore.password为服务器证书密码,不可更改,需要保持为dms@kafka。
- ssl.endpoint.identification.algorithm为证书域名校验开关,为空则表示关闭。这里需要保持关闭状态,必须设置为空。
- username和password为首次开启密文接入时填入的用户名和密码,或者创建用户时设置的用户名和密码。
- SASL_PLAINTEXT:如果已经设置了用户名和密码,请跳过此步骤,执行2。否则在Kafka客户端的“/config”目录中创建“ssl-user-config.properties”文件,在文件中增加如下内容。
- 在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
参数说明如下:- 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: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]#
- (可选)修改客户端配置文件。