Kafka如何设置Topic分区数

云消息队列 Kafka 版Topic分区数过多或过少,都有可能对服务的性能和稳定性产生影响,本文为您介绍如何设置合理的Topic分区数。

背景信息

云消息队列 Kafka 版的存储和协调机制是以分区为粒度的,每个Topic由一个或多个分区组成,Topic的分区数设置不合理可能造成下列问题:

  • 分区数过多

    • 会导致存储碎片化严重,集群性能和稳定性都会急剧下降。

    • 会导致监控每个分区的健康状态变得复杂,故障排查成本增加。

  • 分区数过少

    • 生产者的并发写入能力受限,导致整体吞吐量不足。

    • 当消费者数量超过分区数时,部分消费者无法分配到分区,导致资源浪费。

  • 没有按照推荐的倍数设置分区数

    • 会导致分区未均匀分布在所有计算节点上,从而使某些节点的负载远高于其他节点,可能会造成Topic分区倾斜的问题。

Topic分区数

Topic分区数的确定基于实际业务的吞吐量,还需要综合考虑以下两点:

考虑点

建议

说明

实例建议的倍数

  • Serverless实例: 分区数是3的倍数

  • Serverless实例: 分区数是12的倍数

基于实际业务的吞吐量,按照实例类型选择312倍数的分区数,尽量让分区均匀分布在所有计算节点上,减少Topic分区倾斜的风险。

消费者数量

分区数是消费者数量的整数倍

由于一个分区在一个消费者组内只能被一个消费者消费,当分区数是消费者的数量的整数倍,可以保证每个消费者负责消费的分区数量是一致的,避免出现Topic分区倾斜。

设置Topic分区数

  1. 登录云消息队列 Kafka 版控制台,在概览页面的资源分布区域,选择地域。

  2. 实例列表页面,单击目标实例名称。

  3. 在左侧导航栏,单击Topic 管理

  4. 根据下面操作设置Topic分区数。

    Serverless实例

    • 创建Topic

      1. Topic 管理页面,单击创建 Topic

      2. 创建 Topic面板,设置Topic名称、Topic分区数等属性,然后单击确定

    • 编辑Topic

      1. Topic 管理页面,单击需要编辑的Topic名称。

      2. Topic详情页面的基础信息区域,单击分区副本数后面的编辑

      3. 编辑分区面板,输入分区数,然后单击确定

    Serverless实例

    • 创建Topic

      1. Topic 管理页面,单击创建 Topic

      2. 创建 Topic面板,设置Topic名称、Topic分区数等属性,然后单击确定

    • 编辑Topic

      1. Topic 管理页面,单击需要编辑的Topic名称。

      2. Topic详情页面,单击配置信息页签,然后单击分区数后面的增加分区数

      3. 增加分区数面板,输入分区数,然后单击确定

相关文档