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。

Broker流量均衡 prefer reassign的更多相关文章

  1. Firewalld防火墙:端口转发与流量均衡

    firewalld和iptables的关系 firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,也就是说firewalld和iptables一 ...

  2. Kafka 负载均衡在 vivo 的落地实践

    ​vivo 互联网服务器团队-You Shuo 副本迁移是Kafka最高频的操作,对于一个拥有几十万个副本的集群,通过人工去完成副本迁移是一件很困难的事情.Cruise Control作为Kafka的 ...

  3. (转)ubuntu apache2 的负载均衡和反向代理

    apache功能其实很是强大,最近一段时间研究了下apache的反向代理和负载均衡,反向代理网协的外网出口和我的博客出口就是通过apache的反向代理实现的,总结一下,重点说说负载均衡的配置. 首先说 ...

  4. 浅谈Nginx负载均衡和F5的区别

    前言 笔者最近在负责某集团网站时,同时用到了Nginx与F5,如图所示,负载均衡器F5作为处理外界请求的第一道"墙",将请求分发到web服务器后,web服务器上的Nginx再进行处 ...

  5. Apache+Tomcat实现负载均衡

    反向代理负载均衡 (Apache2+Tomcat7/8) 使用代理服务器可以将请求转发给内部的Web服务器,让代理服务器将请求均匀地转发给多台内部Web服务器之一上,从而达到负载均衡的目的.这种代理方 ...

  6. keepalived+LVS 实现双机热备、负载均衡、失效转移 高性能 高可用 高伸缩性 服务器集群

    本章笔者亲自动手,使用LVS技术实现实现一个可以支持庞大访问量.高可用性.高伸缩性的服务器集群 在读本章之前,可能有不少读者尚未使用该技术,或者部分读者使用Nginx实现应用层的负载均衡.这里大家都可 ...

  7. 性能学习随笔(1)--负载均衡之f5负载均衡

    负载均衡设计涉及软件负载和硬件负载,下文转自CSDN中一篇文章涉及f5硬负载知识 ----转载:https://blog.csdn.net/tvk872/article/details/8063489 ...

  8. 快速理解高性能HTTP服务端的负载均衡技术原理(转)

    1.前言 在一个典型的高并发.大用户量的Web互联网系统的架构设计中,对HTTP集群的负载均衡设计是作为高性能系统优化环节中必不可少的方案.HTTP负载均衡的本质上是将Web用户流量进行均衡减压,因此 ...

  9. 浅谈Nginx负载均衡与F5的区别

    前言 笔者最近在负责某集团网站时,同时用到了Nginx与F5,如图所示,负载均衡器F5作为处理外界请求的第一道“墙”,将请求分发到web服务器后,web服务器上的Nginx再进行处理,静态内容直接访问 ...

随机推荐

  1. Hibernate笔记②--hibernate类生成表、id生成策略、级联设置、继承映射

    一.多表的一个关联关系 老师和学生是一对多的关系 student:tid属性 外键约束 对应teacher表中的id属性 teacher:id 在myeclipse的db窗口中选中两个表来生成类.   ...

  2. 作业3//Calculator::1

    计算器 作业博客 github 1.扯淡 代码其实是在十几号时打的,花了半晚上加半个下午.但是懒得打随笔,所以到现在才完成. 我的课程里没找到queue,是百度照着瞎打的. 2.总结 不大理解要求,S ...

  3. 用JAVA制作微型操作系统4月23日情况

    弄好了一个自认为十分精美的界面,但本想着昨天就在开始按钮上先套入控制jp222面板上的jb2标签上的时间更新,这按钮起到开始线程的作用(我认为按钮应该可以通过t.start()来触发线程,结果不知为什 ...

  4. 将url的参数解析为Json数据

    代码如下: <!DOCTYPE> <html lang="en"> <head> </head> <body> < ...

  5. c++的继承方式

    c++的继承,因为学完过的时间太长,忘了,现在再温习一下. c++的继承方式 1. 公有继承(public) 2. 私有继承(private) 3. 保护继承(protected) 从一个基类派生的继 ...

  6. foo()与@foo()的区别

    1.@foo() 是错误控制输出,foo()是正常调用输出. 2.@符号在PHP 中可以忽略错误报告,对于表达式有提示错误的,但有不影响语句执行的,可以在表达式之前加@. 3.可以把@符号放在变量.函 ...

  7. java 数字转中文

    java代码 数字转中文,该方法只做了对int型整数的转换 private static String numberToChinese(int number) { String[] numbers = ...

  8. Dapper 事务处理

    例子: using (var connection = GetOpenConnection()) using (var transaction = connection.BeginTransactio ...

  9. oracle表空间到32G后扩容

    ), ) total_space FROM dba_data_files ORDER BY tablespace_name; /*查看表空间的使用情况*/ select a.a1 表空间名称, tru ...

  10. [BZOJ2288&BZOJ1150]一类堆+链表+贪心问题

    今天我们来介绍一系列比较经典的堆+链表问题.这类问题的特点是用堆选取最优解,并且通过一些加减操作来实现"反悔". 在看题之前,我们先来介绍一个神器:手写堆. 手写堆的一大好处就是可 ...