背景
EFAK:3.0.1
kafk版本:3.3.1
zookeeper版本:3.7.1
jdk版本:1.8
kafka和zookeeper是部署在同一个服务器上使用不同端口。
官网下载EFAK安装包
准备软件
官网下载EFAK压缩包。
mkdir /data/efak
wget https://www.kafka-eagle.org/#download
tar -zxf kafka-eagle-bin-3.0.1.tar.gz
环境准备
参考官方配置,添加环境变量。
1、配置jdk
此处有个坑!!! 如果使用的java不是1.8,使用了高版本,会出现其他问题 jdk1.8下载
配置好java环境变量。
cd /usr/java
tar -zxvf jdk-xxxx.tar.gz
mv jdk-xxxx jdk1.8
vi /etc/profile
export JAVA_HOME=/usr/java/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile 使环境变量生效。
2、配置efak的环境变量
vi /etc/profile
export KE_HOME=/data/efak
export PATH=$PATH:$KE_HOME/bin
source /etc/profile 配置立即生效。
3、准备mysql数据库
略。。。。
修改EFA配置
######################################
# multi zookeeper & kafka cluster list
# Settings prefixed with 'kafka.eagle.' will be deprecated, use 'efak.' instead
######################################
efak.zk.cluster.alias=cluster1
#cluster1.zk.list=tdn1:2181,tdn2:2181,tdn3:2181
#zookeeper连接地址
cluster1.zk.list=192.168.1.96:2181,192.168.1.96:2182,192.168.1.96:2183
#cluster2.zk.list=xdn10:2181,xdn11:2181,xdn12:2181
######################################
# zookeeper enable acl
######################################
#cluster1.zk.acl.enable=false
#cluster1.zk.acl.schema=digest
#cluster1.zk.acl.username=test
#cluster1.zk.acl.password=test123
######################################
# broker size online list
######################################
cluster1.efak.broker.size=20
######################################
# zk client thread limit
######################################
kafka.zk.limit.size=16
######################################
# EFAK webui port
######################################
efak.webui.port=8048
######################################
# EFAK enable distributed
######################################
efak.distributed.enable=false
efak.cluster.mode.status=master
efak.worknode.master.host=localhost
efak.worknode.port=8085
######################################
# kafka jmx acl and ssl authenticate
######################################
##因为没有使用acl和ssl,所以注释了
#cluster1.efak.jmx.acl=false
#cluster1.efak.jmx.user=keadmin
#cluster1.efak.jmx.password=keadmin123
#cluster1.efak.jmx.ssl=false
#cluster1.efak.jmx.truststore.location=/data/ssl/certificates/kafka.truststore
#cluster1.efak.jmx.truststore.password=ke123456
######################################
# kafka offset storage
######################################
#kafka版本小于0.10.x使用"zk";版本大于0.10.x使用“kafka”
cluster1.efak.offset.storage=kafka
#cluster2.efak.offset.storage=zk
######################################
# kafka jmx uri
######################################
#此处不用动,就算是jmx端口不是默认9999,rmi端口不是默认9998
cluster1.efak.jmx.uri=service:jmx:rmi:///jndi/rmi://%s/jmxrmi
#cluster1.efak.jmx.uri=service:jmx:rmi://192.168.1.96:9999/jmxrmi
######################################
# kafka metrics, 15 days by default
######################################
efak.metrics.charts=true
efak.metrics.retain=15
######################################
# kafka sql topic records max
######################################
efak.sql.topic.records.max=5000
efak.sql.topic.preview.records.max=10
######################################
# delete kafka topic token
######################################
efak.topic.token=keadmin
######################################
# kafka sasl authenticate
######################################
##没有使用sasl功能,所以注释
#cluster1.efak.sasl.enable=false
#cluster1.efak.sasl.protocol=SASL_PLAINTEXT
#cluster1.efak.sasl.mechanism=SCRAM-SHA-256
#cluster1.efak.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="kafka" password="kafka-eagle";
#cluster1.efak.sasl.client.id=
#cluster1.efak.blacklist.topics=
#cluster1.efak.sasl.cgroup.enable=false
#cluster1.efak.sasl.cgroup.topics=
cluster2.efak.sasl.enable=false
cluster2.efak.sasl.protocol=SASL_PLAINTEXT
cluster2.efak.sasl.mechanism=PLAIN
cluster2.efak.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="kafka" password="kafka-eagle";
cluster2.efak.sasl.client.id=
cluster2.efak.blacklist.topics=
cluster2.efak.sasl.cgroup.enable=false
cluster2.efak.sasl.cgroup.topics=
######################################
# kafka ssl authenticate
######################################
cluster3.efak.ssl.enable=false
cluster3.efak.ssl.protocol=SSL
cluster3.efak.ssl.truststore.location=
cluster3.efak.ssl.truststore.password=
cluster3.efak.ssl.keystore.location=
cluster3.efak.ssl.keystore.password=
cluster3.efak.ssl.key.password=
cluster3.efak.ssl.endpoint.identification.algorithm=https
cluster3.efak.blacklist.topics=
cluster3.efak.ssl.cgroup.enable=false
cluster3.efak.ssl.cgroup.topics=
######################################
# kafka sqlite jdbc driver address
######################################
#efak.driver=org.sqlite.JDBC
#efak.url=jdbc:sqlite:/hadoop/kafka-eagle/db/ke.db
#efak.username=root
#efak.password=www.kafka-eagle.org
######################################
# kafka mysql jdbc driver address
######################################
##填写mysql连接信息
efak.driver=com.mysql.cj.jdbc.Driver
efak.url=jdbc:mysql://127.0.0.1:3306/ke?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
efak.username=root
efak.password=1q2w3e4r
至此EFAK已经配置结束。使用bin/ke.sh start
启动。
默认账号密码: admin/123456
修改zookeeper和kafka配置
zookeeper配置
每个节点都修改zookeeper启动脚本:bin/zkServer.sh,大约在77行以后。
67 echo "ZooKeeper remote JMX Port set to $JMXPORT" >&2
68 echo "ZooKeeper remote JMX authenticate set to $JMXAUTH" >&2
69 echo "ZooKeeper remote JMX ssl set to $JMXSSL" >&2
70 echo "ZooKeeper remote JMX log4j set to $JMXLOG4J" >&2
71 if [ "x$JMXHOSTNAME" = "x" ]
72 then
73 ZOOMAIN="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=$JMXPORT -Dcom.sun.management.jmxremote.authenticate=$JMXAUTH -Dcom.sun.management.jmxremote.ssl=$JMXSSL -Dzookeeper.jmx.log4j.disable=$JMXLOG4J org.apache.zookeeper.server.quorum.QuorumPeerMain"
74 else
75 echo "ZooKeeper remote JMX Hostname set to $JMXHOSTNAME" >&2
76 ZOOMAIN="-Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=$JMXHOSTNAME -Dcom.sun.management.jmxremote.port=$JMXPORT -Dcom.sun.management.jmxremote.authenticate=$JMXAUTH -Dcom.sun.management.jmxremote.ssl=$JMXSSL -Dzookeeper.jmx.log4j.disable=$JMXLOG4J org.apache.zookeeper.server.quorum.QuorumPeerMain"
77 fi
78 ##在此处添加下面一行代码。
79 ZOOMAIN="-Dzookeeper.4lw.commands.whitelist=* ${ZOOMAIN}"
80 fi
81 else
82 echo "JMX disabled by user request" >&2
83 ZOOMAIN="org.apache.zookeeper.server.quorum.QuorumPeerMain"
84 fi
kafka修改启动脚本
每个节点都需要修改。
1、开启kafka的jmx功能。
#kafka1
vim config/server.properties
#最后增加
kafka.server.jmx.enabled=true
kafka.server.jmx.url=192.168.1.96:9999 #写自己的IP+jmx_port
#kafka2
vim config/server.properties
#最后增加
kafka.server.jmx.enabled=true
kafka.server.jmx.url=192.168.1.96:9991 #写自己的IP+jmx_port
#kafka3
vim config/server.properties
#最后增加
kafka.server.jmx.enabled=true
kafka.server.jmx.url=192.168.1.96:9992 #写自己的IP+jmx_port
2、修改启动脚本
此处又有个坑!!! 参照官方文档是让修改bin/kafka-server-start.sh
但是发现没用。(也可能是添加的位置不对。)
参考大佬写的。需要修改bin/kafka-run-class.sh
。
我这边因为是同一个主机上启动了三个kafka所以,jmx端口一定要修改。
kafka1启动脚本
vim bin/kafka-run-class.sh
##在原"#JMX port to use"这一行上添加
JMX_PORT=9999
JMX_RMI_PORT=9998
ISKAFKASERVER="false"
if [[ "$*" =~ "kafka.Kafka" ]]; then
ISKAFKASERVER="true"
fi
if [ $JMX_PORT ] && [ "true" == "$ISKAFKASERVER" ]; then
KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT -Dcom.sun.management.jmxremote.rmi.port=$JMX_RMI_PORT -Djava.rmi.server.hostname=192.168.1.96"
echo set KAFKA_JMX_PORT:$KAFKA_JMX_OPTS
fi
#注释掉原配置;
# JMX port to use
#if [ $JMX_PORT ]; then
# KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT "
#fi
kafka2启动脚本
vim bin/kafka-run-class.sh
##在原"#JMX port to use"这一行上添加
JMX_PORT=9991
JMX_RMI_PORT=9997
ISKAFKASERVER="false"
if [[ "$*" =~ "kafka.Kafka" ]]; then
ISKAFKASERVER="true"
fi
if [ $JMX_PORT ] && [ "true" == "$ISKAFKASERVER" ]; then
KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT -Dcom.sun.management.jmxremote.rmi.port=$JMX_RMI_PORT -Djava.rmi.server.hostname=192.168.1.96"
echo set KAFKA_JMX_PORT:$KAFKA_JMX_OPTS
fi
# JMX port to use
#if [ $JMX_PORT ]; then
# KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT "
#fi
kafka3启动脚本配置
vim bin/kafka-run-class.sh
##在原"#JMX port to use"这一行上添加
JMX_PORT=9992
JMX_RMI_PORT=9996
ISKAFKASERVER="false"
if [[ "$*" =~ "kafka.Kafka" ]]; then
ISKAFKASERVER="true"
fi
if [ $JMX_PORT ] && [ "true" == "$ISKAFKASERVER" ]; then
KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT -Dcom.sun.management.jmxremote.rmi.port=$JMX_RMI_PORT -Djava.rmi.server.hostname=192.168.1.96"
echo set KAFKA_JMX_PORT:$KAFKA_JMX_OPTS
fi
# JMX port to use
#if [ $JMX_PORT ]; then
# KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT "
#fi
注: 一定要加上-Djava.rmi.server.hostname=192.168.1.96
(EFAK所在IP),上面大佬里边没有加,在我这边就不能用。
重启
重启 zookeeper
重启kafka
重启efak
最后一个坑
上述配置再centos7中验证没有问题,但是在ubuntu20.4中有问题;
在添加KE_HOME这个环境变量时,官网是添加在/etc/profile中,这个在centos7中没有问题,但是在ubuntu20.4中不生效,启动efak的时候,提示找不到KE_HOME环境变量,需要添加到~/.bahrc中,同样使用source ~/.bashrc
生效