关于后端:kafka-系列-51分区管理

3次阅读

共计 2207 个字符,预计需要花费 6 分钟才能阅读完成。

优先正本的选举

当咱们输出以下命令,

kafka-topics.sh  --zookeeper zookeeper:2181  --describe  --topic test4

查看主题详情时,会展现如下信息

其中 Replicas 就是 AR

现,咱们将 brokerId 2 的机器重启,kafka 会从 Isr 正本中选出一个新的节点作为 leader, brokerId 为 2 的机器重启后,只能作为 follower

从上图,能够看到,Partition 1 选出了新的 Leader 3,从而导致,brokerId 3 负载较高。

为此,kafka 引进 优先正本概念
优先正本为 Replicas 列表中的第一个节点。对于 Partition 1 来说就是 brokerId 2 的节点。也就是说,Paritition 1 按理 Leader 应该为 2,而非 3。

分区主动均衡

kafka 可在 broker 端,通过 auto.leader.rebalance.enable 管制是否开启分区主动均衡,该参数默认为 true,即默认开启。
如果开启分区主动均衡,kafka 会定时轮询所有的 broker 节点,计算每个 broker 节点分区不均衡率(不均衡的 leader 数 / 分区总数)是否超过 leader.imbalance.per.broker.percentage 参数配置的比例,默认为 10%。如果超过,则主动执行分区均衡。其中,定时轮询工作的执行周期默认为 300 秒,由参数 leader.imbalance.check.interval.seconds

这里不倡议在线上开启分区自动化均衡

分区手动均衡

kafka 中提供 kafka-preferred-replica-election.sh 脚本对 leader 分区从新均衡。

在这里,咱们须要对 主题 test4 中的 partition 1 进行重调配

  1. 创立 test4_election.json 文件(文件本人命名)
{
  "partitions": [
     {
       "partition": 1,
       "topic": "test4"
     }
  ]
}
  1. 输出命令,指定方才创立的文件
kafka-preferred-replica-election.sh --zookeeper zookeeper:2181 --path-to-json-file test4_election.json

分区重调配

当咱们须要提前下线一个节点,或者新增一个节点时,都须要对分区进行重调配。kafka 提供 kafka-reassign-partitions.sh 脚本执行分区重调配。

先看执行前test4 的分区如下

现要让 brokerId 2 节点下线。那么就须要对 parition 0, partition 1 重新分配。

  1. 编写 test4_reassign.json 文件
{
  "partitions": [
    {
      "topic": "test4",
      "partition": 1,
      "replicas": [1,3]
    },
    {
      "topic": "test4",
      "partition": 0,
      "replicas": [1,3]
    }
  ],
  "version": 1
}
  1. 执行命令
kafka-reassign-partitions.sh --zookeeper zookeeper:2181 --execute --reassignment-json-file test4_reassign.json

执行完后,新的分区调配如下

分区重调配的基本原理是:broker 控制器为每个分区新增正本,而后再复制 leader 正本的数据。复制结束之后,最初将旧正本删除掉。

复制限流

从分区重调配的原理理解到,复制的时候会产生大量的网络传输,此时如果业务流量特地大,那么可能会对以后业务造成影响,因而须要对复制进行限流。

kafka-reassign-partitions.sh 限流

kafka-reassign-partitions.sh --zookeeper zookeeper:2181 --execute --reassignment-json-file test4_reassign.json --throttle 1024

批改正本因子

应用 kafka-reassign-partitions.sh,进行正本因子的批改。

  1. 生成重调配 json
kafka-reassign-partitions.sh --zookeeper zookeeper:2181 --generate --topics-to-move-json-file test5_reassign.json --broker-list 1,2,3

  1. 将红色框的内容,复制的 json 文件中
{
    "version":1,
    "partitions":[
        {
            "topic":"test4",
            "partition":0,
            "replicas":[
                3,
                2
            ],
            "log_dirs":[
                "any",
                "any"
            ]
        },
        {
            "topic":"test4",
            "partition":2,
            "replicas":[
                2,
                1
            ],
            "log_dirs":[
                "any",
                "any"
            ]
        },
        {
            "topic":"test4",
            "partition":1,
            "replicas":[
                1,
                3
            ],
            "log_dirs":[
                "any",
                "any"
            ]
        }
    ]
}
  1. 开始重调配
kafka-reassign-partitions.sh --zookeeper zookeeper:2181 --execute --reassignment-json-file test4_reassign.json

重调配后果如下

正文完
 0