ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
在创建一个 Topic 时,Kafka 尽量将 Partition 均分在所有的 Broker 上,并且将 Replicas 也均分在不同的 Broker 上,这点如前面分区策略、副本策略中所述。 <br/> 另外关于 Leader 的负载均衡也需要注意,当一个 Broker 停止时,所有本来将它作为 Leader 的分区将会把 Leader 转移到其他 Broker 上去,极端情况下,会导致同一个 Leader 管理多个分区,导致负载不均衡,同时当这个 Broker 重启时,如果这个 Broker 不再是任何分区的 Leader,Kafka 的 Client 也不会从这个 Broker来读取消息,从而导致资源的浪费。 <br/> Kafka 中有一个被称为**优先副本(preferred replicas)**的概念。如果一个分区有 3 个副本,且这 3 个副本的优先级别分别为 0,1,2,根据优先副本的概念,0会作为Leader。当0节点的Broker挂掉时,会启动1这个节点Broker当做Leader。 当 0 节点的 Broker 再次启动后,会自动恢复为此 Partition 的 Leader。不会导致负 载 不 均 衡 和 资 源 浪 费 , 这 就 是 Leader 的 均 衡 机 制 。 可 在 配 置 文 件conf/server.properties 中配置开启(默认就是开启): ``` auto.leader.rebalance.enable=true ``` 例如,某个 Topic 详情如下: ``` [root@hadoop101 kakfa]# bin/kafka-topics.sh --zookeeper 127.0.0.1:2181 --describe --topic logdata-es Topic:logdata-es PartitionCount:2 ReplicationFactor:2 Configs: Topic: logdata-es Partition: 0 Leader: 0 Replicas: 0,1 Isr: 0,1 Topic: logdata-es Partition: 1 Leader: 1 Replicas: 1,0 Isr: 0,1 ``` Topic logdata-es 中 Partition 0 的 Replicas 为[0,1],则 0 为 Preferred Replica。