Kafka环境搭建

201 阅读3分钟

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是否启动成功:

    ![](https://secure2.wostatic.cn/static/pjGaDj24uA6u7Gm6ohUbzK/image.png)

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

    ![](https://secure2.wostatic.cn/static/6TQ88SbuoxH8wCMYYzsdwi/image.png)
  • 关闭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属性值修改一下:

image.png

  • 创建上图对应的目录结构,命令:mkdir /root/zkdata

  • 启动zookeeper

#进入到zookeeper目录
 cd /usr/zookeeper-3.4.6/
#启动zookeeper并指定zoo.cfg模版
 ./bin/zkServer.sh start zoo.cfg

image.png 可以通过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

随意输入内容,在消费者窗口可以看到输出了输入的内容

image.png

  • 日志查看

    生产者生产的消息可以在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

  • 安装&配置
    1. 进入software文件夹,解压kafka-eagle-bin-1.4.0.tar.gz

      命令:tar -zxf kafka-eagle-bin-1.4.0.tar.gz

    2. 进入文件夹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/

    3. 进入usr目录,将kafka-eagle-web-1.4.0文件夹重命名为Kafka-eagle

      命令:mv kafka-eagle-web-1.4.0 kafka-eagle

    4. 配置Eagle的环境变量

      vi ~/.bashrc追加如下命令:KE_HOME=/usr/kafka-eagle

      ~/.bashrc文件完整内容如下:

image.png

最后执行命令source ~/.bashrc

  1. 修改配置文件

    进入/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!(数据库的用户密码自行更改)
  1. 修改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
  1. 修改eagle启动文件权限

    cd /usr/kafka-eagle/

    执行如下命令:chmod u+x bin/ke.sh

  2. 安装mysql

    由于Kafka Eagle监控得到的数据是存放在上述配置文件system-config.properties配置的jdbc对应驱动下的,所以安装mysql。

    先查看自己机器是否安装过mysql或者mariadb,Mariadb也被视为开源数据库MySQL的替代品,安装MySQL时可能有冲突。

image.png

image.png

安装顺序: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
  1. 启动mysql并查看是否正常启动

image.png 10. 查看初始化密码

vi /var/log/mysqld.log

image.png 11. 登录mysql

image.png 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
  1. 重新启动mysql

    service mysqld restart

  2. 将mysql的登录设置改回来

    vi /etc/my.cnf 将在[mysqld]的段中加上的skip-grant-tables删除,重启mysql

  3. 对root用户授权

image.png 17. 启动Eagle

cd /usr/kafka-eagle/bin

./ke.sh start

image.png

正确启动eagle后,数据库中会自动创建一个叫做ke的数据库,如下图所示:

image.png