MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > 精选文章 / 正文

Kafka运维深夜翻车!这个开源工具竟让百万集群效率翻倍?

2025-05-11 16:04 huorong 精选文章 29 ℃ 0 评论

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

  1. 把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


  1. 修改配置 conf/application.conf,手把手教你改这个配置文件,小白也能秒懂!
cd conf
vi application.conf
#kafka-manager.zkhosts="localhost:2181"       ##注释这一行,下面添加一行
kafka-manager.zkhosts="worker1:2181,worker2:2181,worker3:2181" # worker1 是你虚拟机主机名
  1. 启动
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 &
  1. 启动完毕后可以查看ProdServerStart进程是否启动,由于启动过程需要一段时间
jps
  1. 使用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增加副本因子

  1. 在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]}]}
  1. 使用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上的工具

简单实现重新分配需要三步:

  1. 生成分配计划(generate)
  2. 执行分配(execute)
  3. 检查分配的状态(verify)

具体操作如下:

  1. 生成分配计划

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]}]}
  1. 执行分配(execute)

根据step1 生成的分配计划配置json文件topic-reassignment.json,进行topic的重新分配。

kafka-reassign-partitions.sh --boostrap-server worker1:9092 --reassignment-json-file topic-reassignment.json --execute
  1. 检查分配的状态
kafka-reassign-partitions.sh --boostrap-server worker1:9092 --reassignment-json-file topic-reassignment.json --verify



Tags:zookeeper客户端工具

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言