1. JDK安装卸载及配置
系统版本:RedHat Enterprise Linux 7.6(其他操作系统的搭建命令会有所不同)
-
安装 rpm -ivh jdk-8u191-linux-x64.rpm,默认安装在/usr目录中,并以java命名的文件夹
-
卸载 如果服务器有其他低版本jdk,先卸载。查找是否安装jdk命令:
rpm -qa| grep卸载jdk命令:
rpm -e 'rpm -qa| grep jdk' -
环境变量配置vi /etc/profile末尾追加如下命令:
export JAVA_HOME=/usr/java/latest
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export JRE_HOME=$JAVA_HOME/jre
export PATH=$JAVA_HOME/bin:$PATH
`source /etc/profile`使其改变生效
验证:echo $JAVA_HOME命令是否能正确输出配置内容
2. 配置主机名和IP
-
配置主机名
hostnamectl set-hostname 'kafka'reboot重启 -
查看IP地址
pifconfig(例:10.10.203.250) -
修改hosts
vi /etc/hosts追加以下命令:10.10.203.250 kafka -
测试 通过ping主机名的方式验证上述配置是否正确
3. 防火墙设置
防止内网通信时出现奇葩问题,关闭防火墙且关闭开机自启动
# 关闭服务
systemctl stop firewalld.service
# 开机不自启动
systemctl disable firewalld.service
# 查看防火墙状态
systemctl status firewalld.service
服务操作的相关命令有如下几种(以防火墙为例):
启动一个服务:systemctl start firewalld.service
关闭一个服务:systemctl stop firewalld.service
重启一个服务:systemctl restart firewalld.service
显示一个服务的状态:systemctl status firewalld.service
在开机时启用一个服务:systemctl enable firewalld.service
在开机时禁用一个服务:systemctl disable firewalld.service
查看服务是否开机启动:systemctl is-enabled firewalld.service;echo $?
查看已启动的服务列表:systemctl list-unit-files|grep enabled
4. 安装配置
-
进入software文件夹,解压Kafka到usr目录
命令:
tar -zxf kafka_2.11-2.2.0.tgz -C /usr/ -
进入kafka解压的目录,修改config目录下的配置文件server.properties
#broker.id属性表示kafka服务节点的唯一标识,单机不需要改动
#isteners属性表示kafka的socket监听端口号
将listeners=PLAINTEXT://:9092修改为listeners=PLAINTEXT://kafka:9092
(即添加了主机名kafka)
#log.dirs表示kafka日志存储目录
将log.dirs=/tmp/kafka-logs修改为log.dirs=/root/kafka-logs
#log.retention.hours属性表示kafka消息日志的保存时间,默认7*24=168小时
log.retention.hours=168
#修改zookeeper.connect连接参数
将zookeeper.connect=localhost:2181修改为zookeeper.connect=kafka:2181
-
启动Kafka
启动前须保证zookeeper已启动
#-daemon参数表示以后台服务方式启动。如果不加该参数,控制台关闭时也会停止kafka服务
[root@kafka kafka_2.11-2.2.0]# ./bin/kafka-server-start.sh -daemon config/server.properties
jps命令验证kafka是否启动成功:

启动成功后,可以看到root目录下已经自动创建了一个kafka-logs目录:

-
关闭Kafka
如果需要关闭Kafka服务,可以进入kafka目录使用命令:
./bin/kafka-server-stop.sh
5. Zookeeper安装配置
-
进入software文件夹,解压zookeeper到usr目录
命令:
tar -zxf zookeeper-3.4.6.tar.gz -C /usr/ -
进入zookeeper目录
cd /usr/zookeeper-3.4.6/conf复制一份conf目录中的模版配置文件zoo_sample.cfg,该文件是zookeeper启动时默认会寻找的文件命令:
cp zoo_sample.cfg zoo.cfg -
修改zoo.cfg文件,命令:
vi zoo.cfg。将数据目录dataDir属性值修改一下:
-
创建上图对应的目录结构,命令:
mkdir /root/zkdata -
启动zookeeper
#进入到zookeeper目录
cd /usr/zookeeper-3.4.6/
#启动zookeeper并指定zoo.cfg模版
./bin/zkServer.sh start zoo.cfg
可以通过jps命令查看zookeeper启动成功后的进程(jps可以查看所有的java进程,zookeeper是用java写的),可以看到一个名字为QuorumPeerMain的进程代表zookeeper启动成功。
[root@kafka zookeeper-3.4.6]# jps
15345 QuorumPeerMain
15377 Jps
也可以通过以下命令查看zookeeper是否启动成功
[root@kafka zookeeper-3.4.6]# ./bin/zkServer.sh status zoo.cfg
JMX enabled by default
Using config: /usr/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: standalone
6. 生产&消费
6.1 创建Topic
进入kafka目录执行以下命令:
./bin/kafka-topics.sh --bootstrap-server kafka:9092 --create --topic alarm --partitions 1 --replication-factor 1
不同topic之间的内容是相互独立的。
topic属于逻辑概念,可以理解为不同的topic代表不同的业务。
6.2 消费者
./bin/kafka-console-consumer.sh --bootstrap-server kafka:9092 --topic alarm
上述命令执行后会进入阻塞状态
java代码有个属性:ConsumerConfig.AUTO_OFFSET_RESET_CONFIG earliest
6.3 生产者
- 新建一个窗口模拟生产者生产数据
./bin/kafka-console-producer.sh --broker-list kafka:9092 --topic alarm
随意输入内容,在消费者窗口可以看到输出了输入的内容
-
日志查看
生产者生产的消息可以在log中查看,进入自己上述配置的log.dirs=/root/kafka-logs目录,可以看到一个以 主题-0 命名的文件夹(由于单机只设置了一个分区,所以只有一个主题-0文件夹,如果设置了多个分区,则会存在多个文件夹,后面的数字代表分区号)。
直接使用cat命令查看log会有乱码,使用如下命令查看日志(细节目录需要根据自己机器的不同稍作更改):
/usr/kafka_2.11-2.2.0/bin/kafka-run-class.sh kafka.tools.DumpLogSegments --files 00000000000000000000.log --print-data-log
文件中会记录偏移量、创建时间、内容、大小等等
下面简单描述了日志数据的格式概要:
offset: 0 逻辑上值,递增,主键
position: 0 物理偏移量
CreateTime: 1491920255486 创建时间
isvalid: true 是否有效
payloadsize: 3 消息大小
magic: 1 协议版本号
compresscodec: NONE 是否压缩
crc: 3544424991 算法
payload: How are you! 消息内容
6.4 Eagle
- 安装&配置
-
进入software文件夹,解压kafka-eagle-bin-1.4.0.tar.gz
命令:
tar -zxf kafka-eagle-bin-1.4.0.tar.gz -
进入文件夹kafka-eagle-bin-1.4.0看到一个压缩包kafka-eagle-web-1.4.0-bin.tar.gz,将其解压到usr目录下
命令:
tar -zxf kafka-eagle-web-1.4.0-bin.tar.gz -C /usr/ -
进入usr目录,将kafka-eagle-web-1.4.0文件夹重命名为Kafka-eagle
命令:
mv kafka-eagle-web-1.4.0 kafka-eagle -
配置Eagle的环境变量
vi ~/.bashrc追加如下命令:KE_HOME=/usr/kafka-eagle~/.bashrc文件完整内容如下:
-
最后执行命令source ~/.bashrc
-
修改配置文件
进入/usr/kafka-eagle/conf文件夹修改system-config.properties文件,修改后的文件完整内容为:
######################################
# multi zookeeper&kafka cluster list
# 配置Kafka集群所对应的Zookeeper
######################################
#kafka.eagle.zk.cluster.alias=cluster1,cluster2
#cluster1.zk.list=tdn1:2181,tdn2:2181,tdn3:2181
#cluster2.zk.list=xdn10:2181,xdn11:2181,xdn12:2181
# 配置Kafka集群所对应的Zookeeper
kafka.eagle.zk.cluster.alias=cluster1
cluster1.zk.list=kafka:2181
######################################
# zk client thread limit
# 设置Zookeeper线程数,默认25个
######################################
kafka.zk.limit.size=25
######################################
# kafka eagle webui port
# 设置Kafka Eagle浏览器访问端口
######################################
kafka.eagle.webui.port=8048
######################################
# kafka offset storage
# 存储消费信息的类型,一般在0.9版本之前,消费信息会默认存储在Zookeeper中,
# 所以存储类型设置zookeeper即可;如果是在0.10版本之后,消费者信息默认存储在
# Kafka中,所以存储类型需要设置为kafka。注意:这里配置的是默认存储的位置。
# 我们的offset保存在了zk中,如果配置为zk,dashboard会看不到消费者的信息
######################################
cluster1.kafka.eagle.offset.storage=kafka
#cluster2.kafka.eagle.offset.storage=zk
######################################
# kafka metrics, 30 days by default
# 开启性能监控,数据默认保存30天
######################################
kafka.eagle.metrics.charts=true
kafka.eagle.metrics.retain=30
######################################
# kafka sql topic records max
# 在使用KSQL查询主题时,如果遇到错误,可以尝试开启这个属性,默认情况下不开启
######################################
kafka.eagle.sql.topic.records.max=5000
kafka.eagle.sql.fix.error=false
######################################
# delete kafka topic token
# 超级管理员删除主题的Token
######################################
kafka.eagle.topic.token=keadmin
######################################
# kafka sasl authenticate
# 如果启动Kafka SASL协议,开启该属性;SASL是一个鉴权协议,主要用来保证客户端
# 登录服务器的时候,传输的鉴权数据的安全性, SASL是对用户名和密码加解密用的
######################################
cluster1.kafka.eagle.sasl.enable=false
cluster1.kafka.eagle.sasl.protocol=SASL_PLAINTEXT
cluster1.kafka.eagle.sasl.mechanism=SCRAM-SHA-256
cluster1.kafka.eagle.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="kafka" password="kafka-eagle";
cluster1.kafka.eagle.sasl.client.id=
#cluster2.kafka.eagle.sasl.enable=false
#cluster2.kafka.eagle.sasl.protocol=SASL_PLAINTEXT
#cluster2.kafka.eagle.sasl.mechanism=PLAIN
#cluster2.kafka.eagle.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="kafka" password="kafka-eagle";
#cluster2.kafka.eagle.sasl.client.id=
######################################
# kafka sqlite jdbc driver address
######################################
#kafka.eagle.driver=org.sqlite.JDBC
#kafka.eagle.url=jdbc:sqlite:/hadoop/kafka-eagle/db/ke.db
#kafka.eagle.username=root
#kafka.eagle.password=www.kafka-eagle.org
######################################
# kafka mysql jdbc driver address
######################################
kafka.eagle.driver=com.mysql.jdbc.Driver
kafka.eagle.url=jdbc:mysql://10.10.203.250:3306/ke?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
kafka.eagle.username=root
kafka.eagle.password=Ctiuser250!(数据库的用户密码自行更改)
-
修改kafka启动文件
命令:
vi /usr/kafka_2.11-2.2.0/bin/kafka-server-start.sh在文件中的如下代码块添加
export JMX_PORT="7788"端口可自行更改这里的端口不一定非要设置成7788,端口只要可用均可。Kafka Eagle系统会自动获取这个JMX端口。
if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
(此处添加代码)
fi
-
修改eagle启动文件权限
cd /usr/kafka-eagle/执行如下命令:
chmod u+x bin/ke.sh -
安装mysql
由于Kafka Eagle监控得到的数据是存放在上述配置文件system-config.properties配置的jdbc对应驱动下的,所以安装mysql。
先查看自己机器是否安装过mysql或者mariadb,Mariadb也被视为开源数据库MySQL的替代品,安装MySQL时可能有冲突。
安装顺序:common、libs、client、server、devel
rpm -ivh --nodeps mysql-community-common-5.7.33-1.el7.x86_64.rpm
rpm -ivh --nodeps mysql-community-libs-5.7.33-1.el7.x86_64.rpm
rpm -ivh --nodeps mysql-community-client-5.7.33-1.el7.x86_64.rpm
sudo rpm -ivh --nodeps mysql-community-server-5.7.33-1.el7.x86_64.rpm
rpm -ivh --nodeps mysql-community-devel-5.7.33-1.el7.x86_64.rpm
-
启动mysql并查看是否正常启动
10. 查看初始化密码
vi /var/log/mysqld.log
11. 登录mysql
12. 修改root用户的初始密码
`set password for 'root'@'localhost'='Ctiuser250!'`
13. 修改mysql登录设置
`vi /etc/my.cnf`文件完整内容如下:
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
skip-name-resolve
skip-grant-tables
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
-
重新启动mysql
service mysqld restart -
将mysql的登录设置改回来
vi /etc/my.cnf将在[mysqld]的段中加上的skip-grant-tables删除,重启mysql -
对root用户授权
17. 启动Eagle
cd /usr/kafka-eagle/bin
./ke.sh start
正确启动eagle后,数据库中会自动创建一个叫做ke的数据库,如下图所示: