云消息队列 Kafka 版Topic分区数过多或过少,都有可能对服务的性能和稳定性产生影响,本文为您介绍如何设置合理的Topic分区数。
背景信息
云消息队列 Kafka 版的存储和协调机制是以分区为粒度的,每个Topic由一个或多个分区组成,Topic的分区数设置不合理可能造成下列问题:
分区数过多
会导致存储碎片化严重,集群性能和稳定性都会急剧下降。
会导致监控每个分区的健康状态变得复杂,故障排查成本增加。
分区数过少
生产者的并发写入能力受限,导致整体吞吐量不足。
当消费者数量超过分区数时,部分消费者无法分配到分区,导致资源浪费。
没有按照推荐的倍数设置分区数
会导致分区未均匀分布在所有计算节点上,从而使某些节点的负载远高于其他节点,可能会造成Topic分区倾斜的问题。
Topic分区数
Topic分区数的确定基于实际业务的吞吐量,还需要综合考虑以下两点:
考虑点 | 建议 | 说明 |
实例建议的倍数 |
| 基于实际业务的吞吐量,按照实例类型选择3或12倍数的分区数,尽量让分区均匀分布在所有计算节点上,减少Topic分区倾斜的风险。 |
消费者数量 | 分区数是消费者数量的整数倍 | 由于一个分区在一个消费者组内只能被一个消费者消费,当分区数是消费者的数量的整数倍,可以保证每个消费者负责消费的分区数量是一致的,避免出现Topic分区倾斜。 |
设置Topic分区数
登录云消息队列 Kafka 版控制台,在概览页面的资源分布区域,选择地域。
在实例列表页面,单击目标实例名称。
在左侧导航栏,单击Topic 管理。
根据下面操作设置Topic分区数。
Serverless实例
创建Topic
在Topic 管理页面,单击创建 Topic。
在创建 Topic面板,设置Topic名称、Topic分区数等属性,然后单击确定。
编辑Topic
在Topic 管理页面,单击需要编辑的Topic名称。
在Topic详情页面的基础信息区域,单击分区副本数后面的编辑。
在编辑分区面板,输入分区数,然后单击确定。
非Serverless实例
创建Topic
在Topic 管理页面,单击创建 Topic。
在创建 Topic面板,设置Topic名称、Topic分区数等属性,然后单击确定。
编辑Topic
在Topic 管理页面,单击需要编辑的Topic名称。
在Topic详情页面,单击配置信息页签,然后单击分区数后面的增加分区数。
在增加分区数面板,输入分区数,然后单击确定。