网站首页 > 精选文章 / 正文
1 kafka-manager 简介
凌晨 3 时,某大型企业因 Kafka 分区失衡致使服务陷入瘫痪之境。在此危急关头,运维团队迅速启用堪称神器的 kafka-manager,历经 1 小时,成功扭转危机局势!
为了简化开发者和服务工程师维护Kafka集群的工作,yahoo构建了一个叫做Kafka管理器的基于Web工具,叫做 Kafka Manager。这个管理工具可以很容易地发现分布在集群中的哪些topic分布不均匀,或者是分区在整个集群分布不均匀的的情况。它支持管理多个集群、选择副本、副本重新分配以及创建Topic。同时,这个管理工具也是一个非常好的可以快速浏览这个集群的工具,有如下功能:
1.管理多个kafka集群
2.便捷的检查kafka集群状态(topics,brokers,备份分布情况,分区分布情况)
3.选择你要运行的副本
4.基于当前分区状况进行
5.可以选择topic配置并创建topic(0.8.1.1和0.8.2的配置不同)
6.删除topic(只支持0.8.2以上的版本并且要在broker配置中设置delete.topic.enable=true)
7.Topic list会指明哪些topic被删除(在0.8.2以上版本适用)
8.为已存在的topic增加分区
9.为已存在的topic更新配置
10.在多个topic上批量重分区
11.在多个topic上批量重分区(可选partition broker位置)
kafka-manager 项目地址:https://github.com/yahoo/kafka-manager
2 安装kafka-manager
环境要求:
1.安装jdk8
jdk-1.8.0_60
2,kafka集群
软件:
kafka_2.13-3.8.1
zookeeper-3.8.4
3.系统
Linux centos
想要查看和管理Kafka,完全使用命令并不方便,我们可以使用雅虎开源的Kafka-manager,GitHub地址如下:
https://github.com/yahoo/kafka-manager
上面下载的是源码,下载后需要按照后面步骤进行编译。如果觉得麻烦,可以直接给我留言,我给大家发编译好的 kafka-manager-1.3.3.7.zip
- 把kafka-manager-1.3.3.7.zip上传到linux并解压
unzip kafka-manager-1.3.3.7.zip -d /usr/local/kafkamanager
cd /usr/local/kafkamanager/kafka-manager-1.3.3.7
如果没有unzip指令,那需要安装
yum install -y unzip zip
- 修改配置 conf/application.conf,手把手教你改这个配置文件,小白也能秒懂!
cd conf
vi application.conf
#kafka-manager.zkhosts="localhost:2181" ##注释这一行,下面添加一行
kafka-manager.zkhosts="worker1:2181,worker2:2181,worker3:2181" # worker1 是你虚拟机主机名
- 启动
bin/kafka-manager
#kafka-manager 默认的端口是9000,可通过 -Dhttp.port,指定端口;
#在-Dconfig.file=conf/application.conf指定配置文件
nohup bin/kafka-manager -Dconfig.file=conf/application.conf -Dhttp.port=8090 &
- 启动完毕后可以查看ProdServerStart进程是否启动,由于启动过程需要一段时间
jps
- 使用ip地址:端口访问
3 使用kafka-manager
1. 新建 Cluster
点击【Cluster】>【Add Cluster】打开如下添加集群的配置界面:
输入集群的名字(如Kafka-Cluster-1)和 Zookeeper 服务器地址(如localhost:2181)
注意:
如果没有在 Kafka 中配置过 JMX_PORT,千万不要选择第一个复选框Enable JMX Polling
如果选择了该复选框,Kafka-manager 可能会无法启动。
如果要勾选JMX Polling, 我们需要去修改kafka的bin目录kafka-run-class.sh脚本,在第一行添加JMX_PORT=9988
vi /usr/local/kafka/kafka_2.13-3.8.1/bin/kafka-run-class.sh
重启kafka
cd
/usr/local/kafka/kafka_2.13-3.8.1
#停止运行kafka
bin/kafka-server-stop.sh stop
#启动kafka
bin/kafka-server-start.sh -daemon config/server.properties
其他broker的配置可以根据自己需要进行配置,默认情况下,点击【保存】时,会提示几个默认值为1的配置错误,需要配置为>=2的值。提示如下。
把上面报错的修改一下, 点击save按钮保存
新建完成后,运行界面如下:
2. 列出集群
通过上图可知,可以对已有集群配置进行进入、修改和下线操作。
3.查看Brokers列表
4.主题查看
- Brokers Spead%(broker 覆盖率): 该topic的所有分区和副本所占有broker的比重。
- Brokers Skew% (broker 倾斜率): 该 topic 占有的 broker 中,拥有超过该 topic 平均分区数的 broker 所占的比重。
- Brokers Leader Skew% (broker leader 分区倾斜率): 该 topic 占有的 broker 中,拥有超过该 topic 平均 Leader 分区数的 broker 所占的比重。
- Under Replicated%(副本失效率): 该 topic 下的 partition,其中副本处于失效或者失败的比率。失败或者失效是指副本不处于 ISR 队列中。
5. 主题详情查看
我们可以在主题列表页面,点击主题名,就可以查看主题的详情信息
Preferred Replicas(优先副本) 该topic分区的副本中,采用副本列表中的第一个副本作为 Leader 所占的比重。
常见的操作:
操作 | 说明 |
Delete Topic | 删除 topic |
Reassign Partitions | 平衡集群负载,即重分配分区 |
Add Partitions | 增加分区 |
Update Config | 更新topic的配置 |
Manual Partition Assignments | 手动为每个分区下的副本分配 broker |
Generate Partition Assignments | 自动为每个分区下的副本分配 broker |
6.常见的运维操作
场景一: topic数据量太大, 要增加topic数
第一种方式,使用kafka-manager
第二种方式: 使用kafka指令
bin/kafka-topics.sh --bootstrap-server worker2:9092 --alter --topic test123 --partitions 5
如果我们在kafka-manager开启JMX_PORT后,在使用KAFKA命令行工具时,报端口被占用的异常
修改kafka-run-class.sh文件
vi /usr/local/kafka/kafka_2.13-3.8.1/bin/kafka-run-class.sh
修改内容如下:
# JMX port to use
if [ $JMX_PORT ]; then
KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT "
if ! echo "$KAFKA_JMX_OPTS" | grep -qF -- '-Dcom.sun.management.jmxremote.rmi.port=' ; then
# If unset, set the RMI port to address issues with monitoring Kafka running in containers
KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT"
fi
fi
修改为:
if [ $JMX_PORT ] && [ "true" == "$ISKAFKASERVER" ]; then
KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT "
if ! echo "$KAFKA_JMX_OPTS" | grep -qF -- '-Dcom.sun.management.jmxremote.rmi.port=' ; then
# If unset, set the RMI port to address issues with monitoring Kafka running in containers
KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT"
fi
fi
保存退出,重启kafka
cd /usr/local/kafka/kafka_2.13-3.8.1
#停止运行kafka
bin/kafka-server-stop.sh stop
#启动kafka
bin/kafka-server-start.sh -daemon config/server.properties
场景二: 核心topic增加副本因子
- 在kafka服务器上创建一个json脚本文件, 在这个json脚本文件输入需要增加副本因子配置
{"version":1,"partitions":[{"topic":"test123","partition":0,"replicas":[0,1,2]},{"topic":"test123","partition":1,"replicas":[0,1,2]},{"topic":"test123","partition":2,"replicas":[0,1,2]}]}
- 使用kafka-reassign-partitions.sh增加副本因子
bin/kafka-reassign-partitions.sh --bootstrap-server worker2:9092 --reassignment-json-file test123.json --execute
场景三: 负载不均衡的topic, 手动迁移
kafka集群扩容后, 新的broker上面没有旧的topic,也就是说,这些节点是空闲的,它只有在创建新的topic时才会参与工作。除非将已有的Partition迁移到新的Broker上,所以需要手动将一些topic的分区迁移到新的broker上。
kafka-reassign-partitions.sh是kafka提供的用来重新分配partition和replica到broker上的工具
简单实现重新分配需要三步:
- 生成分配计划(generate)
- 执行分配(execute)
- 检查分配的状态(verify)
具体操作如下:
- 生成分配计划
1) 编写分配脚本:
vi topics-to-move.json
内容如下:
{"topics":
[{"topic":"test1"}],
"version": 1
}
2) 执行分配计划生成脚本:
bin/kafka-reassign-partitions.sh --boostrap-server worker1:9092 --topics-to-move-json-file topics-to-move.json --broker-list "4,5" --generate
注意:
--broker-list中写的是所有新添加的broker的brokerId
这样就会把所有的Partition均匀的分散在各个broker上,包括新的broker
3) 执行命令结果如下:
Current partition replica assignment #当前分区的副本分配
{"version":1,"partitions":[{"topic":"test1","partition":0,"replicas":[1,2]},{"topic":"test1","partition":1,"replicas":[0,2]}]}
Proposed partition reassignment configuration #建议的分区配置
{"version":1,"partitions":[{"topic":"test1","partition":0,"replicas":[4,5]},{"topic":"event_request","partition":1,"replicas":[5,4]}]}
Proposed partition reassignment configuration 后是根据命令行的指定的brokerlist生成的分区分配计划json格式。将 Proposed partition reassignment configuration的配置copy保存到一个文件中 topic-reassignment.json
{"version":1,"partitions":[{"topic":"test1","partition":0,"replicas":[4,5]},{"topic":"event_request","partition":1,"replicas":[5,4]}]}
- 执行分配(execute)
根据step1 生成的分配计划配置json文件topic-reassignment.json,进行topic的重新分配。
kafka-reassign-partitions.sh --boostrap-server worker1:9092 --reassignment-json-file topic-reassignment.json --execute
- 检查分配的状态
kafka-reassign-partitions.sh --boostrap-server worker1:9092 --reassignment-json-file topic-reassignment.json --verify
Tags:zookeeper客户端工具
- 上一篇:如何设计一套分布式任务调度系统?
- 下一篇:Consul配置中心
猜你喜欢
- 2025-05-11 Hutool Java工具类库导出Excel,超级简单
- 2025-05-11 SpringCloud组件选型指南:构建分布式系统的艺术
- 2025-05-11 MySQL 数据同步神器 - Canal 入门篇
- 2025-05-11 Kafka监控工具汇总
- 2025-05-11 Consul配置中心
- 2025-05-11 如何设计一套分布式任务调度系统?
- 2025-05-11 出现大量 TIME_WAIT 的话应用层有什么优化方案
- 2025-05-11 在项目中经常实用到的golang 库先收藏了
- 2025-05-11 常用网络诊断工具
- 2025-05-11 大数据开发:聊聊注册中心技术选型