Files
KnowStreaming/docs/plus/02.Kafka均衡方案设计.md
2023-02-14 14:57:39 +08:00

5.6 KiB
Raw Blame History

1. 功能范围

功能包含增加节点、集群均衡、范围均衡、Topic黑名单。Topic迁移、节点下线本次不实现设计的时候需考虑进去避免后期无法实现或者成本过高。容量红线触发自动均衡本期不考虑均衡算法优先实现Topic leader、副本、磁盘均衡后续逐步实现其他维度。

2. 指标采集

通过KS3采集指标写入ES需要计算到每个分区的指标只要Leader分区的指标副本指标根据Leader分区指标进行推导

采集周期: 每分钟

相关指标: 共计4个分区磁盘使用、分区流入流量、分区流出流量、分区CPU使用率

  1. 分区Log磁盘使用大小关联指标kafka.log:type=Log,name=Size,topic=yy_topic_b,partition=0

  2. 分区流入流量根据当前节点的Leader数计算出每个分区平均流入流量关连指标kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec,topic=yy_topic_b Attributes=OneMinuteRate

  3. 分区流出流量根据当前节点的Leader数计算出每个分区平均流量关连指标kafka.server:type=BrokerTopicMetrics,name=BytesOutPerSec,topic=yy_topic_b Attributes=OneMinuteRate

  4. 分区CPU使用率当前节点CPU使用率 * PartitonBytesIn / (BrokerBytesIn * 3 + BrokerReplicationBytesIn *1)副本CPU使用率为Leader使用率 / 3关连指标java.lang:type=OperatingSystem Attributes=ProcessCpuLoad本期不考虑

计算方法: 计算方法有两种一种是由分区驱动首先生产1分钟整个集群的指标快照然后根据Topic元数据分别查询每个Topic分区的Leader所在节点根据当前节点的Leader数量平均计算当前分区的指标。

另一种是在采集时进行计算由指标驱动指标由多个采集节点进行采集每个采集节点需要维护对应Topic的元数据元数据有效期为1分钟采集到Topic指标之后根据当前节点Leader分布情况分别计算出各个分区的平均指标比如Topic A的BytesIn指标为10240当前节点分布的Leader分区有0、5那么0分区和5分区的指标值分别为5120可由标准采集扩展processor进行计算处理

放弃方案:

由采集模块采集标准指标写入ES然后再由样本模块定期查询ES进行分区维度指标计算需要额外协调或者降低实时性否则很难确定是否采集完成

存储格式:

Cluster IP Broker ID Topic Partition NW IN NW OUT Disk Size Cpu Load Create Time

3. 模型计算

  • 根据集群配置查询最近N小时的样本数据计算每个Topic分区的平均指标

  • 根据集群的副本、Leader、Topic、Rack等元数据信息抽象出虚拟集群(Class类),根据均衡目标算法来改变虚拟集群(Class类)中的元数据分布。

  • 根据真实集群与虚拟集群元数据分布的不同提取出需要的副本迁移任务、Leader切换任务

4. 均衡算法

输入参数指标计算周期、均衡节点范围、均衡维度有顺序、各维度均衡区间、Topic黑名单、下线节点列表应用到副本、迁移Topic列表应用到副本

输出结果迁移总览、迁移概览、迁移明细、reassignment json file其中迁移明细为副本从哪个节点迁移到哪个节点上

均衡维度:

  1. Rack感知(副本迁移)

    1. 默认维度

    2. 迁移策略

      • Broker每个副本AR分配列表存在2个以上相同的Rack则迁移到不同的Rack
  2. Topic Leader数平均分布(Leader切换、副本迁移)

    1. 默认维度

    2. 迁移策略

      • 每台Broker的Topic Leader分布数>=Topic的Leader总数/broker总数
  3. Topic副本数平均分布(副本迁移)

    1. 默认维度

    2. 迁移策略

      • 每台Broker相同Topic副本分布个数>upperLimit迁出

      • 每台Broker相同Topic副本分布个数<lowerLimit迁入

  4. 磁盘使用率平均分布(副本迁移)

    1. 可选维度

    2. 迁移策略

      • 磁盘使用率>upperThreshold副本降序迁出

      • 磁盘使用率<lowerThreshold迁入

  5. 网络流入使用率平均分布(副本迁移)

    1. 可选维度

    2. 迁移策略

      • 流入> upperThreshold副本降序迁出

      • 流入<lowerThreshold迁入

  6. 网络流出使用率平均分布(Leader切换、副本迁移)

    1. 可选维度

    2. 迁移策略

      • 流出>upperThreshold副本降序进行Leader切换

      • 切换后流量依然> upperThreshold则需要把Leader副本迁出

      • 流出<lowerThreshold则需要把follower切换成Leader

      • 切换后流量依然< lowerThreshold则需要进行副本迁入

  7. CPU使用率平均分布

    1. 可选维度

5. 均衡执行

输入参数并行度、限速、执行策略、reassignment json file

处理:

  • 并行度定义导致有流入或流出流量各计算一个并行度流出统计在Leader上比如一个分区0 [10,11,12] -> [10,11,15] 那么10计入一个并行度15计入一个并行度

  • 根据并行度拆分任务对于小于2.4版本Kafka按照并行度拆分各个小的子任务分别执行每个节点迁入或迁出副本数不大于并行度限制。对于大于等于2.4版本Kafka根据节点并行度动态增加副本迁移数。

  • 根据集群metadata元数据查询所有URP分区优先迁移