修改Kafka Topic副本数
创建Kafka实例Topic成功之后,您可以根据业务需要修改Topic的副本数。
通过修改分区平衡可以实现修改副本数,Kafka控制台提供两种修改副本数的方法:使用自动平衡修改副本数和使用手动平衡修改副本数。
单机实例不支持修改副本数。
操作影响
- 对数据量大的Topic进行分区平衡,会占用大量的网络和存储带宽,业务可能会出现请求超时或者时延增大,建议在业务低峰期时操作。对Topic进行分区平衡前,根据Kafka实例规格对比当前实例负载情况,评估是否可以进行分区平衡,建议预留足够的带宽进行分区平衡,CPU使用率在90%以上时,不建议进行分区平衡。Topic的数据量和CPU使用率可以通过监控页面的“队列数据容量”和“CPU使用率”查看,具体步骤请参考查看Kafka监控数据。
- 带宽限制是指设定Topic进行副本同步的带宽上限,确保不会对该实例上的其他Topic造成流量冲击。但需要注意,带宽限制不会区分是正常的生产消息造成的副本同步还是分区平衡造成的副本同步,如果带宽限制设定过小,可能会影响正常的生产消息,且可能会造成分区平衡一直无法结束。如果分区平衡一直无法结束,请联系客服处理。
- 分区平衡任务启动后,不能删除正在进行分区平衡的Topic,否则会导致分区平衡任务无法结束。
- 分区平衡任务启动后,无法修改Topic的分区数。
- 分区平衡任务启动后,无法手动停止任务,需要等到任务完成。
- 已设置了一个定时分区平衡任务,在此任务未执行前,无法对本实例内的任何Topic执行其他分区平衡任务。
- 分区平衡后Topic的metadata会改变,如果生产者不支持重试机制,会有少量的请求失败,导致部分消息生产失败。
- 数据量大的Topic进行分区平衡的时间会比较长,建议根据Topic的消费情况,适当调小Topic老化时间,使得Topic的部分历史数据被及时清理,加快迁移速度。Topic的数据量可以通过监控页面的“队列数据容量”查看,具体步骤请参考查看Kafka监控数据。
分区平衡前的准备工作
- 在不影响业务的前提下,适当调小Topic老化时间并等待消息老化,减少迁移数据,加快迁移速度,分区平衡任务结束后可重新调整为初始值。修改Topic老化时间的步骤,请参考修改Kafka消息老化时间。
- 确保分区平衡的目标Broker磁盘容量充足,在磁盘存储统计中查看每个Broker的可用磁盘容量。如果目标Broker磁盘剩余容量接近分区平衡迁移到该Broker上的数据量,为了给目标Broker上的消息生产预留存储空间,应先进行磁盘扩容,再进行分区平衡。
使用自动平衡修改副本数
- 登录管理控制台。
- 在管理控制台左上角单击,选择区域。
请选择Kafka实例所在的区域。
- 在管理控制台左上角单击,选择“应用中间件 > 分布式消息服务Kafka版”,进入分布式消息服务Kafka专享版页面。
- 单击Kafka实例的名称,进入实例详情页面。
- 在左侧导航栏单击“Topic管理”,进入Topic列表页面。
- 通过以下任意一种方法,进入“自动平衡”页面。
- 勾选Topic名称左侧的方框,可选一个或多个,单击信息栏左上侧的“一键平衡 > 自动平衡”。
- 在待修改副本数的Topic所在行,单击“更多 > 一键平衡 > 自动平衡”。
- 修改副本数。
表1 自动平衡参数说明 参数名称
说明
Brokers列表
勾选目标Broker的名称,Topic分区的副本即将迁移至目标Broker上。
Topic列表
输入Topic的副本数,副本数须小于等于Broker的数量。
带宽限制
输入带宽大小,默认值为“-1”,表示不限制带宽。
如果实例负载较低(例如实例规格为300MB/s,当前实例负载为30MB/s),建议不设置带宽限制。如果需要设置带宽限制,建议该参数值不小于待分区平衡Topic的总生产带宽 * 待分区平衡Topic的最大副本数。
带宽限制值的估算方法,请参考带宽限制值估算方法。
执行时间
选择分区平衡任务执行的时间。
- 立即执行:表示立即执行分区平衡任务。
- 定时执行:表示在指定的时间执行分区平衡任务。
- (可选)单击“一键测算”,在“预估耗时”中,显示执行自动平衡大概需要的时间。
一键测算功能对Kafka实例性能没有影响。
- 单击“确定”。
定时任务和非定时任务查看分区平衡是否完成的方法不同,具体如下:
表2 查看分区平衡结果 任务类型
分区平衡结果
非定时任务
在Topic列表页面左上方单击“查看变更任务”,进入“后台任务管理 > 后台任务”页面,当任务的“状态”为“成功”时,表示分区平衡完成,即修改副本数成功。
定时任务
- 系统自动跳转到“后台任务管理 > 定时任务”页面,此页面的状态仅表示定时任务是否开始执行,并非表示任务是否执行成功。
- 当“状态”为“待执行”时,表示定时分区平衡任务未执行。
- 当“状态”为“成功”时,表示定时分区平衡任务开始执行。
- 当“状态”为“取消”时,表示已取消定时分区平衡任务。
- 单击“后台任务”,进入“后台任务”页签,查看任务的状态。当任务的“状态”为“成功”时,表示分区平衡完成,即修改副本数成功。
- 系统自动跳转到“后台任务管理 > 定时任务”页面,此页面的状态仅表示定时任务是否开始执行,并非表示任务是否执行成功。
使用手动平衡修改副本数
- 登录管理控制台。
- 在管理控制台左上角单击,选择区域。
请选择Kafka实例所在的区域。
- 在管理控制台左上角单击,选择“应用中间件 > 分布式消息服务Kafka版”,进入分布式消息服务Kafka专享版页面。
- 单击Kafka实例的名称,进入实例详情页面。
- 在左侧导航栏单击“Topic管理”,进入Topic列表页面。
- 通过以下任意一种方法,进入“手动平衡”页面。
- 勾选Topic名称左侧的方框,手动平衡每次只能勾选一个Topic,单击信息栏左上侧的“一键平衡 > 手动平衡”。
- 在待修改副本数的Topic所在行,单击“更多 > 一键平衡 > 手动平衡”。
- 修改副本数。
- 在“手动平衡”对话框右上角,单击“减少副本”/“添加副本”,为Topic的每个分区减少/增加副本数。
- 在待修改分区平衡的副本名称下,单击Broker名称或,选择目标Broker的名称,副本即将迁移至目标Broker上。同一分区下的不同副本需要分配在不同的Broker上。
- 在“带宽限制”中,输入带宽大小,默认值为“-1”,表示不限制带宽。如果实例负载较低(例如实例规格为300MB/s,当前实例负载为30MB/s),建议不设置带宽限制。如果需要设置带宽限制,建议该参数值不小于待分区平衡Topic的总生产带宽 * 待分区平衡Topic的最大副本数。带宽限制值的估算方法,请参考带宽限制值估算方法。
- 在“执行时间”中,选择分区平衡任务执行的时间。“立即执行”表示立即执行分区平衡任务。“定时执行”表示在指定的时间执行分区平衡任务。
- (可选)单击“一键测算”,在“预估耗时”中,显示执行手动平衡大概需要的时间。
一键测算功能对Kafka实例性能没有影响。
- 单击“确定”。
定时任务和非定时任务查看分区平衡是否完成的方法不同,具体如下:
表3 查看分区平衡结果 任务类型
分区平衡结果
非定时任务
在Topic列表页面左上方单击“查看变更任务”,进入“后台任务管理 > 后台任务”页面,当任务的“状态”为“成功”时,表示分区平衡完成,即修改副本数成功。
定时任务
- 系统自动跳转到“后台任务管理 > 定时任务”页面,此页面的状态仅表示定时任务是否开始执行,并非表示任务是否执行成功。
- 当“状态”为“待执行”时,表示定时分区平衡任务未执行。
- 当“状态”为“成功”时,表示定时分区平衡任务开始执行。
- 当“状态”为“取消”时,表示已取消定时分区平衡任务。
- 单击“后台任务”,进入“后台任务”页签,查看任务的状态。当任务的“状态”为“成功”时,表示分区平衡完成,即修改副本数成功。
- 系统自动跳转到“后台任务管理 > 定时任务”页面,此页面的状态仅表示定时任务是否开始执行,并非表示任务是否执行成功。