zoukankan      html  css  js  c++  java
  • Broker流量均衡 prefer reassign

    0.均衡流量的步骤

    现在的kafka集群,只要遇到过weibo_common_act2 topic的节点在ZK中丢失,就要prefer一次流量,否则不均匀。

    总结均衡流量的一般步骤:

    1. 通过hpm查询byte-out流量大和小的机器列表
    2. 找出byte-out出口流量大的机器中的哪些topic占用的流量大:java程序kafka-eager-eyes/eager-eyes/ols_kafka-0.8.0/src/main/java/demo/FindTopic.java
    3. 将占用流量比较大的topic均衡一部分到小流量的broker机器上: shell脚本kafka-preferred-replica-election.sh

    1.preferred replica 命令

    /usr/local/kafka-0.8.0-release/bin/kafka-preferred-replica-election.sh --zookeeper 10.39.1.66:22181 --path-to-json-file /usr/local/kafka-0.8.0-release/fengchao_tools/preffered-hq.json

    生成preffered-hq.json

    com/sina/mis/knife/tool/PreferredTopic.java

    { "partitions":[  { "partition":5,  "topic":"openapi_exposure" },{ "partition":6,  "topic":"openapi_exposure" },{ "partition":24,  "topic":"openapi_exposure" },{ "partition":25,  "topic":"openapi_exposure" }], "version":1 }
    

    没有在In Sync Repicas同步的broker id,无法成为leader。

    2.reassign replica

    sh /usr/local/kafka-0.8.0-release/bin/kafka-reassign-partitions.sh --reassignment-json-file /usr/local/kafka-0.8.0-release/fengchao_tools/reassign-hq.json --zookeeper 10.39.1.66:22181 --execute

    reassign-hq.json

    { "partitions":[  { "partition":1, "replicas":[13,8,6 ], "topic":"ols_test" } ], "version":1 }
    

    注意:reassign完成之后,检查一下对应的Server日志是否正常,确保没有问题。

    3.Kafka Reassign Partitions Tool

    1 用途

    该工具的设计目标与Preferred Replica Leader Election Tool有些类似,都旨在促进Kafka集群的负载均衡。不同的是,Preferred Replica Leader Election只能在Partition的AR范围内调整其Leader,使Leader分布均匀,而该工具还可以调整Partition的AR。

    Follower需要从Leader Fetch数据以保持与Leader同步,所以仅仅保持Leader分布的平衡对整个集群的负载均衡来说是不够的。另外,生产环境下,随着负载的增大,可能需要给Kafka集群扩容。向Kafka集群中增加Broker非常简单方便,但是对于已有的Topic,并不会自动将其Partition迁移到新加入的Broker上,此时可用该工具达到此目的。某些场景下,实际负载可能远小于最初预期负载,此时可用该工具将分布在整个集群上的Partition重装分配到某些机器上,然后可以停止不需要的Broker从而实现节约资源的目的。

    需要说明的是,该工具不仅可以调整Partition的AR位置,还可调整其AR数量,即改变该Topic的replication factor。

    2 原理

    该工具只负责将所需信息存入Zookeeper中相应节点,然后退出,不负责相关的具体操作,所有调整都由Controller完成。

    1. 在Zookeeper上创建/admin/reassign_partitions节点,并存入目标Partition列表及其对应的目标AR列表。
    2. Controller注册在/admin/reassign_partitions上的Watch被fire,Controller获取该列表。
    3. 对列表中的所有Partition,Controller会做如下操作:
    • 启动RAR - AR中的Replica,即新分配的Replica。(RAR = Reassigned Replicas, AR = Assigned Replicas)
    • 等待新的Replica与Leader同步
    • 如果Leader不在RAR中,从RAR中选出新的Leader
    • 停止并删除AR - RAR中的Replica,即不再需要的Replica
    • 删除/admin/reassign_partitions节点

    3 用法

    该工具有三种使用模式

    • generate模式,给定需要重新分配的Topic,自动生成reassign plan(并不执行)
    • execute模式,根据指定的reassign plan重新分配Partition
    • verify模式,验证重新分配Partition是否成功

    4 注意

    亲测,在kafka-0.8.0版本, --execute 在使用 --reassignment-json-file 时,不顺畅。报错:

    If --generate option is used, command must include both --topics-to-move-json-file and --broker-list options
    

    需要说明的是,在使用execute之前,并不一定要使用generate模式自动生成reassign plan,使用generate模式只是为了方便。事实上,某些场景下,generate模式生成的reassign plan并不一定能满足需求,此时用户可以自己设置reassign plan。

  • 相关阅读:
    TimusOJ Bald Spot Revisited(质因数分解)
    hdu 6170 Two strings(dp)
    线性筛资料
    BZOJ3437 小P的牧场(斜率优化dp)
    First Blog
    【BZOJ】3930: [CQOI2015]选数
    【Ctsc2011】幸福路径
    【BZOJ】4012: [HNOI2015]开店
    【BZOJ】 3238: [Ahoi2013]差异
    【NOI2014】动物园
  • 原文地址:https://www.cnblogs.com/byrhuangqiang/p/6367039.html
Copyright © 2011-2022 走看看