kafka-manager配置和使用

01 kafka-manager配置

  最主要配置就是用于kafka管理器状态的zookeeper主机。这可以在conf目录中的application.conf文件中找到。

kafka-manager.zkhosts="my.zookeeper.host.com:2181"

  当然也可以声明为zookeeper集群。

kafka-manager.zkhosts="my.zookeeper.host.com:2181,other.zookeeper.host.com:2181"

  另外也可以通过环境变量ZK_HOSTS来表示。

ZK_HOSTS="my.zookeeper.host.com:2181"

  自定义kafka-manager功能,类似于权限管理。

application.features=["KMClusterManagerFeature","KMTopicManagerFeature","KMPreferredReplicaElectionFeature","KMReassignPartitionsFeature"]
  • KMClusterManagerFeature - allows adding, updating, deleting cluster from Kafka Manager
  • KMTopicManagerFeature - allows adding, updating, deleting topic from a Kafka cluster
  • KMPreferredReplicaElectionFeature - allows running of preferred replica election for a Kafka cluster
  • KMReassignPartitionsFeature - allows generating partition assignments and reassigning partitions

02kafka-manager打包

  下面的命令将创建一个zip文件,可用于部署应用程序。

./sbt clean dist

  更多的玩法配置请参考:production deployment/configuration.

  这个命令执行的会很慢,而且可能会失败,要反复执行几次。不过我已经执行好了,访问链接: https://pan.baidu.com/s/1123fRCT9ywEgiV6HjzSluw 提取码: r86e 。

3|0kafka-manager运行


  经过上一步打包好之后会生成一个zip,具体zip的位置可以看输出日志。解压zip文件,进入kafka-manager目录。

bin/kafka-manager

  或者指定配置文件位置和端口

bin/kafka-manager -Dconfig.file=/path/to/application.conf -Dhttp.port=8080

  也可以指定java home的位置

bin/kafka-manager -java-home /usr/local/oracle-java-8

  修改conf/application.conf如下属性

 
play.http.context = "/kafka-manager" kafka-manager.zkhosts="localhost:2181" kafka-manager.zkhosts=${?ZK_HOSTS} application.features=["KMClusterManagerFeature","KMTopicManagerFeature","KMPreferredReplicaElectionFeature","KMReassignPartitionsFeature"]
 

  默认的端口是9000

4|0kafka-manager界面详情


4|1  集群监控信息


   

  

4|2   Topic配置信息


  

4|3   Topic对应的消费分组信息


   

4|4   消费者消费详情


  

4|5  消费者列表信息


   

4|6   Borker信息


  

  

 

  附:Kafka-Manager API

kafka manager的使用,kafka manager页面参数说明

kafka-manager是kafka集群管理工具,由雅虎开源,用户可以在Web界面执行一些简单的集群管理操作。具体支持以下内容(从githup上kafka-manager项目的readme得到功能列表):

 - Manage multiple clusters
 - Easy inspection of cluster state (topics, consumers, offsets, brokers, replica distribution, partition distribution)
 - Run preferred replica election
 - Generate partition assignments with option to select brokers to use
 - Run reassignment of partition (based on generated assignments)
 - Create a topic with optional topic configs (0.8.1.1 has different configs than 0.8.2+)
 - Delete topic (only supported on 0.8.2+ and remember set delete.topic.enable=true in broker config)
 - Topic list now indicates topics marked for deletion (only supported on 0.8.2+)
 - Batch generate partition assignments for multiple topics with option to select brokers to use
 - Batch run reassignment of partition for multiple topics
 - Add partitions to existing topic
 - Update config for existing topic
 - Optionally enable JMX polling for broker level and topic level metrics.
 - Optionally filter out consumers that do not have ids/ owners/ & offsets/ directories in zookeeper.

翻译如下

管理多个集群
轻松检查群集状态(主题,消费者,偏移,代理,副本分发,分区分发)
运行首选副本选举
使用选项生成分区分配以选择要使用的代理
运行分区重新分配(基于生成的分配)
使用可选主题配置创建主题(0.8.1.1具有与0.8.2+不同的配置)
删除主题(仅支持0.8.2+并记住在代理配​​置中设置delete.topic.enable = true)
主题列表现在指示标记为删除的主题(仅支持0.8.2+)
批量生成多个主题的分区分配,并可选择要使用的代理
批量运行重新分配多个主题的分区
将分区添加到现有主题
更新现有主题的配置
可随意开启对broker级别或者对topic级别的JMX轮询
可方便的过滤出没有id 、所有者、延迟或目录等的消费者

下面通过页面 的操作步骤详细讲解下kafka-manager的使用

添加集群 

 

图1

Enable JMX Polling
是否开启 JMX 轮训,该部分直接影响部分 kafka broker 和 topic 监控指标指标的获取(生效的前提是 kafka 启动时开启了 JMX_PORT。主要影响如下指标的查看:

broker/topic 的combined metrics 综合指标

图2

Poll consumer information

是否开启获取消费信息,直接影响能够在消费者页面和 topic 页面查看消费信息

图3

 

图4

      

Enable Active OffsetCache
是否开启 offset 缓存,决定 kafka-manager 是否缓存住 topic 的相关偏移量。

其它参数说明

参数名参数说明默认值备注
brokerViewUpdatePeriodSeconds Broker视图周期更新时间/单位(s) 30  
clusterManagerThreadPoolSize 集群管理线程池大小 2  
clusterManagerThreadPoolQueueSize 集群管理线程池列队大小 100  
KafkaCommandThreadPoolSize Kafka命令线程池大小 2  
logkafkaCommandThreadPoolQueueSize logkafka命令线程池列队大小 100  
logkafkaUpdatePeriodSeconds Logkafka周期更新时间/单位(s) 30  
partitionOffsetCacheTimeoutSecs Partition Offset缓存过期时间/单位(s) 5  
brokerViewThreadPoolSize Broker视图线程池大小 8 3 * number_of_brokers
brokerViewThreadPoolQueue Size Broker视图线程池队列大小 1000 3 * total # of partitions across all topics
offsetCacheThreadPoolSize Offset缓存线程池大小 8  
offsetCacheThreadPoolQueueSize Offset缓存线程池列队大小 1000  
kafkaAdminClientThreadPoolSize Kafka管理客户端线程池大小 8  
kafkaAdminClientTheadPoolQueue Sizec Kafka管理客户端线程池队列大小 1000  
kafkaManagedOffsetMetadataCheckMillis Offset元数据检查时间 30000 (这部分解释属自己理解)
kafkaManagedOffsetGroupCacheSize Offset组缓存大小 100000 (这部分解释属自己理解)
kafkaManagedOffsetGroupExpireDays Offset组缓存保存时间 7 (这部分解释属自己理解)
Security Protocol 安全协议 PLAINTEXT [SASL_PLAINTEXT,SASL_SSL,SSL]

 

topic管理
 

图5

 

Brokers Skew% (broker 倾斜率)
该 topic 占有的 broker 中,拥有超过该 topic 平均分区数的 broker 所占的比重。举个例子说明

图6

 

上图,我们以一个 6 个分区,2 个副本的 topic 举例,该 topic 一共 6 * 2 = 12 个 分区,分布在 5 个 broker 上,平均一个 broker 应该拥有 2.4 个分区,因为分区为整数,所以 2 个或者 3 个都是属于平均范围,5 个 broker 并没有那个拥有超过平均分区数的,所以 Brokers Skew% 为 0。
如果此时,我将 broker 1 上的分区 1 的副本移动到 broker 2 上,如下图所示:

图7

 

上图,broker 2 上拥有 4 个分区,超过平均的 2 个或 3 个的平均水平,broker 2 就倾斜了,broker 倾斜率 1/5=20%。

图8

注意如下这种情况也是不计算作倾斜的。

图9

 

Brokers Leader Skew% (broker leader 分区倾斜率)
该 topic 占有的 broker 中,拥有超过该 topic 平均 Leader 分区数的 broker 所占的比重。同样举个例子说明:

图10

 

我们还是以一个 6 个分区,2 个副本的 topic 举例,该 topic 一共有 6 个 Leader 分区,分布在 5 个 broker 上,平均一个 broker 应该拥有 1.2 个 Leader 分区,因为分区为整数,所以 1 个或者 2 个都是属于平均范围,如图所示,5 个 broker 没有那个拥有超过 2 个的 Leader 分区,所以 Brokers Leader Skew% 为 0。
如果此时,我们将 broker3 的 Leader 分区移动到 broker2,如下图所示:

图11

 

图12


 

图13

 

此时,broker2 拥有 3 个 leader 分区,超过平均范围的 2 个,所以 broker2 就 Leader 分区倾斜了,倾斜率 1/5=20%。

Under Replicated%
该 topic 下的 partition,其中副本处于失效或者失败的比率。失败或者失效是指副本不处于 ISR 队列中。目前控制副本是否处于 ISR 中由 replica.log.max.ms 这个参数控制。

replica.log.max.ms: 如果一个follower在这个时间内没有发送fetch请求或消费leader日志到结束的offset,leader将从ISR中移除这个follower,并认为这个follower已经挂了,默认值 10000 ms

用下图举例说明:

图14

broker1 此时拥有 partition1 和 partition4,其中 partition4 时 Leader,partition1 是副本,如果此时 broker 故障不可用,则会出现如下情况:

图15

 

上述两张图片时接连展现,先是发现borker1 上 partition4 这个 Leader 分区失效,继而从 ISR 队列中取出 broker4 上的副本作为 Leader 分区,然后在后期同步检测过程中发现broker1 上 partition1 这个副本失效。最后导致的结果就是 partition1 和 partition4 都出于副本失效或者失败的状态。此时 Under Replicated 的数值为:2/6=33%。

图16

 

总结

上面三个参数对于衡量 topic 的稳定性有重要的影响:
Broker Skew: 反映 broker 的 I/O 压力,broker 上有过多的副本时,相对于其他 broker ,该 broker 频繁的从 Leader 分区 fetch 抓取数据,磁盘操作相对于其他 broker 要多,如果该指标过高,说明 topic 的分区均不不好,topic 的稳定性弱;
Broker Leader Skew:数据的生产和消费进程都至于 Leader 分区打交道,如果 broker 的 Leader 分区过多,该 broker 的数据流入和流出相对于其他 broker 均要大,该指标过高,说明 topic 的分流做的不够好;
Under Replicated: 该指标过高时,表明 topic 的数据容易丢失,数据没有复制到足够的 broker 上。

 

topic 详情

图17

Preferred Replicas
分区的副本中,采用副本列表中的第一个副本作为 Leader 的所占的比重,如上图,6 个副本组,其中只有 partition4 不是采用副本中的第一个在 broker1 中的分区作为 leader 分区,所以 Preferred Replicas 的值为 5/6=83%。

 


上述是关于“优先副本”的相关描述,即在理想的状态下,分区的 leader 最好是 “优先副本”,这样有利于保证集群中 broker 的领导权比较均衡。重新均衡集群的 leadership 可采用 kafka manager 提供的工具

 

topic 操作

操作说明
Delete Topic 删除 topic
Reassign Partitions 平衡集群负载
Add Partitions 增加分区
Update Config Topic 配置信息更新
Manual Partition Assignments 手动为每个分区下的副本分配 broker
Generate Partition Assignments 系统自动为每个分区下的副本分配 broker

一般而言,手动调整、系统自动分配分区和添加分区之后,都需要调用 Reassign Partition。

Manual Partition Assignments
一般当有 Broker Skew 时或者 Broker Leader Skew 后可以借助该功能进行调整,本文前面的 Broker Skew 和 Broker Leader Skew 的说明都借助了该工具。
例如将下图中的 broker1 的分区4 移动到 broker2 上。


 


 

Generate Partition Assignments
该功能一般在批量移动 partition 时比较方便,比如集群新增 broker 或者 topic 新增 partition 后,将分区移动到指定的 broker。
例如下图将 topic 由原来的分布在 5 个 broker 修改为 4 个 broker:

 

 

消费监控

kafka manager 能够获取到当前消费 kafka 集群消费者的相关信息。

 

 

 

 

 

文章参考 https://www.jianshu.com/p/6a592d558812

一.kafka-manager简介

    kafka-manager是目前最受欢迎的kafka集群管理工具,最早由雅虎开源,用户可以在Web界面执行一些简单的集群管理操作。具体支持以下内容:

  • 管理多个集群
  • 轻松检查群集状态(主题,消费者,偏移,代理,副本分发,分区分发)
  • 运行首选副本选举
  • 使用选项生成分区分配以选择要使用的代理
  • 运行分区重新分配(基于生成的分配)
  • 使用可选主题配置创建主题(0.8.1.1具有与0.8.2+不同的配置)
  • 删除主题(仅支持0.8.2+并记住在代理配​​置中设置delete.topic.enable = true)
  • 主题列表现在指示标记为删除的主题(仅支持0.8.2+)
  • 批量生成多个主题的分区分配,并可选择要使用的代理
  • 批量运行重新分配多个主题的分区
  • 将分区添加到现有主题
  • 更新现有主题的配置

kafka-manager 项目地址:https://github.com/yahoo/kafka-manager

二.kafka-manager安装

1.下载安装包

使用Git或者直接从Releases中下载,这里我们下载 1.3.3.18 版本:https://github.com/yahoo/kafka-manager/releases

[admin@node21 software]$ wget https://github.com/yahoo/kafka-manager/archive/1.3.3.18.zip

2.解压安装包

复制代码
[admin@node21 software]$ mv 1.3.3.18.zip kafka-manager-1.3.3.18.zip
[admin@node21 software]$ unzip kafka-manager-1.3.3.18.zip -d /opt/module/
[admin@node21 software]$ cd /opt/module/
[admin@node21 module]$ ll
drwxr-xr-x  9 admin admin   268 May 27 00:33 jdk1.8
drwxr-xr-x  7 admin admin   122 Jun 14 11:44 kafka_2.11-1.1.0
drwxrwxr-x  9 admin admin   189 Jul  7 04:44 kafka-manager-1.3.3.18
drwxr-xr-x 11 admin admin  4096 May 29 10:14 zookeeper-3.4.12
[admin@node21 module]$ ls kafka-manager-1.3.3.18/
app build.sbt conf img LICENCE project public README.md sbt src target test
复制代码

3.sbt编译

1)yum安装sbt(因为kafka-manager需要sbt编译)

[admin@node21 ~]$ curl https://bintray.com/sbt/rpm/rpm > bintray-sbt-rpm.repo
[admin@node21 ~]$ sudo mv bintray-sbt-rpm.repo /etc/yum.repos.d/
[admin@node21 ~]$ sudo yum install sbt

修改仓库地址:(sbt 默认下载库文件很慢, 还时不时被打断),我们可以在用户目录下创建 touch ~/.sbt/repositories, 填上阿里云的镜像   # vi ~/.sbt/repositories  

复制代码
[repositories] 
local
aliyun: http://maven.aliyun.com/nexus/content/groups/public/
typesafe: http://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
sonatype-oss-releases
maven-central
sonatype-oss-snapshots
复制代码

验证:检查sbt是否安装成功,查看命令输出,发现已经成功可以从maven.aliyun.com/nexus下载到依赖即表示成功

[admin@node21 ~]$ sbt-version

2)编译kafka-manager

[admin@node21 kafka-manager-1.3.3.18]$ ./sbt clean dist

看到打印这个消息 Getting org.scala-sbt sbt 0.13.9  (this may take some time)... 就慢慢等吧,可以到~/.sbt/boot/update.log 查看sbt更新日志。sbt更新好,就开始下载各种jar包,最后看到:Your package is ready in /opt/module/kafka-manager-1.3.3.18/target/universal/kafka-manager-1.3.3.18.zip  证明编译好了。

4.安装

环境准备:Java 8+     kafka集群搭建参考:CentOS7.5搭建Kafka2.11-1.1.0集群      

重新解压编译好的kafka-manager-1.3.3.18.zip

[admin@node21 kafka-manager-1.3.3.18]$ ls
bin  conf  lib  README.md  share

修改配置文件

复制代码
[admin@node21 kafka-manager-1.3.3.18]$ pwd
/opt/module/kafka-manager-1.3.3.18
[admin@node21 kafka-manager-1.3.3.18]$ ls conf/
application.conf  consumer.properties  logback.xml  logger.xml  routes
[admin@node21 kafka-manager-1.3.3.18]$ sudo vi conf/application.conf 
修改kafka-manager.zkhosts列表为自己的zk节点
kafka-manager.zkhosts="node21:2181,node22:2181,node23:2181"
复制代码

5.启动服务

启动zk集群,kafka集群,再启动kafka-manager服务。

bin/kafka-manager 默认的端口是9000,可通过 -Dhttp.port,指定端口; -Dconfig.file=conf/application.conf指定配置文件:

[admin@node21 kafka-manager-1.3.3.18]$ nohup bin/kafka-manager -Dconfig.file=conf/application.conf -Dhttp.port=8080 &

jps查看进程

6.编写服务启动脚本

chmod +x kafka-manager.sh

nohup /opt/module/kafka-manager-1.3.3.18/bin/kafka-manager -Dconfig.file=/opt/module/kafka-manager-1.3.3.18/conf/application.conf -Dhttp.port=8888 >/opt/module/kafka-ma
nager-1.3.3.18/kafka-manager.log 2>&1 &

WebUI查看:http://node21:8888/ 出现如下界面则启动成功。

三.kafka-manager配置

1.新建Cluster

点击【Cluster】>【Add Cluster】打开如下添加集群配置界面:输入集群的名字(如Kafka-Cluster-1)和 Zookeeper 服务器地址(如localhost:2181),选择最接近的Kafka版本

其他broker的配置可以根据自己需要进行配置,默认情况下,点击【保存】时,会提示几个默认值为1的配置错误,需要配置为>=2的值。提示如下。

新建完成后,保存运行界面如下:

四.kafka-manager管理

1.新建主题

Topic---Create

2.查看主题

Topic---list

 

 

 

posted @ 2021-03-05 16:28  CharyGao  阅读(3578)  评论(0编辑  收藏  举报