大数据开发工程师-第十四周 消息队列之Kafka从入门到小牛-4


Kafka技巧篇

Kafka集群参数调忧

JVM参数调忧

1
2
3
4
默认启动的Broker进程只会使用1G内存,在实际使用中会导致进程频繁GC,影响Kafka集群的性能和稳
定性
通过 jstat -gcutil <pid> 1000 查看到kafka进程GC情况
主要看 YGC,YGCT,FGC,FGCT 这几个参数,如果这几个值不是很大,就没什么问题
1
2
3
4
YGC:young gc发生的次数
YGCT:young gc消耗的时间
FGC:full gc发生的次数
FGCT:full gc消耗的时间
1
2
3
4
5
[root@bigdata01 kafka_2.12-2.4.1]# jps
13248 Kafka
18087 Jps
1679 QuorumPeerMain
[root@bigdata01 kafka_2.12-2.4.1]# jstat -gcutil 13248 1000

image-20230416230418172

1
2
如果你发现YGC很频繁,或者FGC很频繁,就说明内存分配的少了
此时需要修改kafka-server-start.sh中的KAFKA_HEAP_OPTS
1
2
3
4
5
export KAFKA_HEAP_OPTS="-Xmx10g -Xms10g -XX:MetaspaceSize=96m -XX:+UseG1GC -XX

xms:初始化内存
xmx:最大内存
建议设置成一样大,否则可能进行内存交换
1
这个配置表示给kafka分配了10G内存

Replication参数调忧

1
2
3
4
5
6
7
8
replica.socket.timeout.ms=60000
这个参数的默认值是30秒,它是控制partiton副本之间socket通信的超时时间,如果设置的太小,有可能会由于网络原因导致造成误判,认为某一个partition副本连不上了。

replica.lag.time.max.ms=50000
如果一个副本在指定的时间内没有向leader节点发送任何请求,或者在指定的时间内没有同步完leader中的数据,则leader会将这个节点从Isr列表中移除。

这个参数的值默认为10秒
如果网络不好,或者kafka压力较大,建议调大该值,否则可能会频繁出现副本丢失,进而导致集群需要频繁复制副本,导致集群压力更大,会陷入一个恶性循环

Log参数调优

1
2
3
4
5
6
7
8
9
10
11
这块是针对Kafka中数据文件的删除时机进行设置,不是对kafka本身的日志参数配置
log.retention.hours=24
这个参数默认值为168,单位是小时,就是7天,默认对数据保存7天,可以在这调整数据保存的时间,我们在实际工作中改为了只保存1天,因为kafka中的数据我们会在hdfs中进行备份,保存一份,所以就没有必要在kafka中保留太长时间了。

在kafka中保留只是为了能够让你在指定的时间内恢复数据,或者重新消费数据,如果没有这种需求,那就没有必要设置太长时间。

这里分析的Replication的参数和Log参数都是在server.properties文件中进行配置

JVM参数是在kafka-server-start.sh脚本中配置

broker参数调优更多在开发文档里有

Kafka Topic命名小技巧

1
2
3
4
5
6
7
8
9
10
针对Kafka中Topic命名的小技巧
建议在给topic命名的时候在后面跟上r2p10之类的内容
r2:表示Partition的副本因子是2
p10:表示这个Topic的分区数是10

这样的好处是后期我们如果要写消费者消费指定topic的数据,通过topic的名称我们就知道应该设置多少个消费者消费数据效率最高。
因为一个partition同时只能被一个消费者消费,所以效率最高的情况就是消费者的数量和topic的分区数量保持一致。在这里通过topic的名称就可以直接看到,一目了然。

但是也有一个缺点,就是后期如果我们动态调整了topic的partiton,那么这个topic名称上的partition数量就不准了,针对这个topic,建议大家一开始的时候就提前预估一下,可以多设置一些partition,我们
在工作中的时候针对一些数据量比较大的topic一般会设置40-50个partition,数据量少的topic一般设置5-10个partition,这样后期调整topic partiton数量的场景就比较少了。

Kafka集群监控管理工具

1
2
3
4
5
6
7
8
9
10
现在我们操作Kafka都是在命令行界面中通过脚本操作的,后面需要传很多参数,用起来还是比较麻烦的,那kafka没有提供web界面的支持吗?
很遗憾的告诉你,Apache官方并没有提供,不过好消息是有一个由雅虎开源的一个工具,目前用起来还是不错的。

它之前的名字叫KafkaManager,后来改名字了,叫CMAK
CMAK是目前最受欢迎的Kafka集群管理工具,最早由雅虎开源,用户可以在Web界面上操作Kafka集群
可以轻松检查集群状态(Topic、Consumer、Offset、Brokers、Replica、Partition)

那下面我们先去下载这个CMAK
需要到github上面去下载
在github里面搜索CMAK即可

下载CMAK

image-20230416233039880

image-20230416233050053

image-20230416233123771

image-20230416233141274

1
注意:由于cmak-3.0.0.4.zip版本是在java11这个版本下编译的,所以在运行的时候也需要使用java11这个版本,我们目前服务器上使用的是java8这个版本
1
2
3
4
5
6
7
8
9
10
我们为什么不使用java11版本呢?因为自2019年1月1日1起,java8之后的更新版本在商业用途的时候就需要收费授权了。
在这针对cmak-3.0.0.4这个版本,如果我们想要使用的话有两种解决办法
1:下载cmak的源码,使用jdk8编译
2:额外安装一个jdk11(自己用不属于商业用途,现实公司很少有用java8以后的)
如果想要编译的话需要安装sbt这个工具对源码进行编译,sbt是Scala 的构建工具, 类似于Maven。

由于我们在这使用不属于商业用途,所以使用jdk11是没有问题的,那就不用重新编译了。
下载jdk11,jdk-11.0.7_linux-x64_bin.tar.gz
将jdk11的安装包上传到bigdata01的/data/soft目录下
只需要解压即可,不需要配置环境变量,因为只有cmak这个工具才需要使用jdk11
1
[root@bigdata01 soft]# tar -zxvf jdk-11.0.7_linux-x64_bin.tar.gz
1
2
3
4
接下来把 cmak-3.0.0.4.zip 上传到bigdata01的/data/soft目录下
1:解压
[root@bigdata01 soft]# unzip cmak-3.0.0.4.zip
-bash: unzip: command not found
1
2
注意:如果提示-bash: unzip: command not found,则说明目前不支持unzip命令,可以使用yum在线安装
建议先清空一下yum缓存,否则使用yum可能无法安装unzip
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@bigdata01 soft]# yum clean all 
Loaded plugins: fastestmirror
Cleaning repos: base extras updates
Cleaning up list of fastest mirrors

[root@bigdata01 soft]# yum install -y unzip
Loaded plugins: fastestmirror
.....
Running transaction
Installing : unzip-6.0-21.el7.x86_64 1/1
Verifying : unzip-6.0-21.el7.x86_64 1/1
Installed:
unzip.x86_64 0:6.0-21.el7
Complete!
1
2
再重新解压
[root@bigdata01 soft]# unzip cmak-3.0.0.4.zip

配置CMAK

1
2
3
4
5
6
7
8
9
2:修改CMAK配置
首先修改bin目录下的cmak脚本
在里面配置JAVA_HOME指向jdk11的安装目录,否则默认会使用jdk8
[root@bigdata01 soft]# cd cmak-3.0.0.4
[root@bigdata01 cmak-3.0.0.4]# cd bin/
[root@bigdata01 bin]# vi cmak
....
JAVA_HOME=/data/soft/jdk-11.0.7
.....
1
2
3
4
5
6
7
8
9
然后修改conf目录下的application.conf文件
只需要在里面增加一行cmak.zkhosts参数的配置即可,指定zookeeper的地址

注意:在这里指定zookeeper地址主要是为了让CMAK在里面保存数据,这个zookeeper地址不一定是kafka集群使用的那个zookeeper集群,随便哪个zookeeper集群都可以。(cmak需要报错它自己的东西)
[root@bigdata01 cmak-3.0.0.4]# cd conf/
[root@bigdata01 conf]# vi application.conf
....
cmak.zkhosts="bigdata01:2181,bigdata02:2181,bigdata03:2181"
....
1
2
3
4
5
6
7
3:修改kafka启动配置
想要在CMAK中查看kafka的一些指标信息,在启动kafka的时候需要指定JMX_PORT

停止kafka集群
[root@bigdata01 kafka_2.12-2.4.1]# bin/kafka-server-stop.sh
[root@bigdata02 kafka_2.12-2.4.1]# bin/kafka-server-stop.sh
[root@bigdata03 kafka_2.12-2.4.1]# bin/kafka-server-stop.sh
1
2
3
4
重新启动kafka集群,指定JXM_PORT
[root@bigdata01 kafka_2.12-2.4.1]# JMX_PORT=9988 bin/kafka-server-start.sh -d
[root@bigdata02 kafka_2.12-2.4.1]# JMX_PORT=9988 bin/kafka-server-start.sh -d
[root@bigdata03 kafka_2.12-2.4.1]# JMX_PORT=9988 bin/kafka-server-start.sh -d

启动CMAK

1
2
3
4
5
6
7
4:启动cmak
[root@bigdata01 cmak-3.0.0.4]# bin/cmak -Dconfig.file=conf/application.conf -

如果想把cmak放在后台执行的话需要添加上nohup和&
1 [root@bigdata01 cmak-3.0.0.4]# nohup bin/cmak -Dconfig.file=conf/application.conf -Dhttp.port=9001 &

cmak默认监听端口9000,但这样和hdfs的端口重复了

访问CMAK

1
2
5:访问cmak
http://bigdata01:9001/

image-20230416235630637

1
6:操作CMAK

image-20230416235520700

image-20230416235548395

1
2
这几个参数配置好了以后还需要配置以下几个线程池相关的参数,这几个参数默认值是1,在保存的时候会提示需要大于1,所以可以都改为10
最后点击Save按钮保存即可
1
2
3
brokerViewThreadPoolSize:10
offsetCacheThreadPoolSize:10
kafkaAdminClientThreadPoolSize:10
1
最后进来是这样的

image-20230417000304032

查看kafak集群的所有broker信息

image-20230417000358325

查看kafak集群的所有topic信息

image-20230417000847024

image-20230417000718104

image-20230417000734624

1
点击topic的消费者信息是可以进来查看的

image-20230417001617419

创建一个topic

image-20230417001657421

给topic增加分区

image-20230417001716328

1
这是CMAK中常见的功能,当然了这里面还要一些我们没有说到的功能就留给大家以后来发掘了。

本文标题:大数据开发工程师-第十四周 消息队列之Kafka从入门到小牛-4

文章作者:TTYONG

发布时间:2023年04月16日 - 00:04

最后更新:2023年04月20日 - 00:04

原始链接:http://tianyong.fun/%E5%A4%A7%E6%95%B0%E6%8D%AE%E5%BC%80%E5%8F%91%E5%B7%A5%E7%A8%8B%E5%B8%88-%E7%AC%AC%E5%8D%81%E5%9B%9B%E5%91%A8-%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97%E4%B9%8BKafka%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E5%B0%8F%E7%89%9B-4.html

许可协议: 转载请保留原文链接及作者。

多少都是爱
0%