前言
由于工作需要,需要使用mq队列来解决异步调用问题,综合考虑各种使用情况及现有环境的适用性以及团队内的接受度,选择使用kafka来做为mq队列,一则和java耦合度较高,调用简单,二来业务相对来说允许一定的数据丢失率。
一、安装kafka
1.安装linux版本kafka
kafka安装包自带zookeeper,但由于内置的zookeeper效果不好,复用性不强,在使用过程中我们一般会选择外置独立zookeeper来使用。 本文采用zookeeper-3.4.10以及kafka_2.12-1.0.0
1)安装java环境
jdk安装就不多赘述了,自行百度即可,需要注意的是请尽量安装jdk1.8及以上版本
2)安装zookeeper
2.1 下载
下载安装包 https://zookeeper.apache.org/releases.html
2.2解压
下载后解压即可 tar -zxvf zookeeper-3.4.10.tar.gz
2.3修改配置文件
// 1.进入配置文件目录
cd apache-zookeeper-3.7.0/conf
// 2.将zoo_sample.cfg这个文件复制为zoo.cfg (注意:文件名一定要是zoo.cfg) cp zoo_sample.cfg zoo.cfg
// 3.修改配置文件vi zoo.cfg
特别注意
jdk,zookeeper,kafka一定要记得配置环境变量,具体操作如下:
##1.打开环境变量配置文件
vi ~/.bashrc
##2.修改文件
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
#set oracle jdk environment
export JAVA_HOME=/usr/local/java/jdk/jdk1.8.0_241 ## 这里要注意目录要换成自己解压的jdk 目录
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
#export PATH=${JAVA_HOME}/bin:$PATH;/usr/local/java/kafka/kafka/bin:$ZOOKEEPER_INSTALL/bin:$PATH
export ZOOKEEPER_INSTALL=/usr/local/java/zookeeper/zookeeper
export PATH=${JAVA_HOME}/bin:/usr/local/java/kafka/kafka/bin:$ZOOKEEPER_INSTALL/bin:$PATH
##3.执行修改
source ~/.bashrc
或者 . ~/.bashrc 来使编辑的环境变量生效
2.4 启动zookeeper
进入zookeeper安装目录下的bin目录下执行以下指令即可
./zkServer.sh start
#停止
./zkServer.sh stop
#重启
./zkServer.sh restart
#查看状态
./zkServer.sh status
3)安装kafka
3.1 下载
下载安装包 https://kafka.apache.org/downloads
3.2解压
下载后解压即可 tar -zxvf kafka_2.12-1.0.0.tar.gz
3.3修改配置文件
// 1.进入配置文件目录
cd kafka_2.12-1.0.0/config
// 2.修改配置文件vi zookeeper.properties以及vi server.properties
//zookeeper.properties配置如下,
注意:如果采用外置的zookeeper的话,可不用关注此配置文件
//server.peoperties配置如下
broker.id=0
port=9092 #端口号
host.name=localhost #单机可直接用localhost
log.dirs=/usr/local/java/kafka/kafka/kafkadata #日志存放路径可修改可不修改
zookeeper.connect=localhost:2181 #zookeeper地址和端口,单机配置部署,localhost:2181 (如果是集群配置,请把全部zookeeper地址配置上,用逗号分割)
listeners=PLAINTEXT://172.30.105.96:9092 #此项单机使用时注掉,远程访问时请开启,ip地址配置本机ip(特别注意ip地址,现在的云服务器是一组ip,需使用ifconfig指令查询自己本机所在ip)
特别注意
jdk,zookeeper,kafka一定要记得配置环境变量,具体操作如下:
##1.打开环境变量配置文件
vi ~/.bashrc
##2.修改文件
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
#set oracle jdk environment
export JAVA_HOME=/usr/local/java/jdk/jdk1.8.0_241 ## 这里要注意目录要换成自己解压的jdk 目录
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
#export PATH=${JAVA_HOME}/bin:$PATH;/usr/local/java/kafka/kafka/bin:$ZOOKEEPER_INSTALL/bin:$PATH
export ZOOKEEPER_INSTALL=/usr/local/java/zookeeper/zookeeper
export PATH=${JAVA_HOME}/bin:/usr/local/java/kafka/kafka/bin:$ZOOKEEPER_INSTALL/bin:$PATH
##3.执行修改
source ~/.bashrc
或者 . ~/.bashrc 来使编辑的环境变量生效
3.4 启动zookeeper
进入zookeeper安装目录下执行以下指令即可
./bin/kafka-server-start.sh ./config/server.properties
#停止
./bin/kafka-server-stop.sh ./config/server.properties
3.5 kafka创建topic及生产消费测试
#1.创建topic
命令:在kafka 目录下bin目录下执行:
./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic demo demo是topic名字可以随意更换
#2.查看topic
命令:在kafka 目录下bin目录下执行:
./kafka-topics.sh --list --zookeeper localhost:2181
#3.删除topic
命令:在kafka 目录下bin目录下执行:
./kafka-topics.sh --delete --zookeeper localhost:2181 --topic demo demo是要删除的topic名称
###1.生产者测试
命令:在kafka 目录下bin目录下执行:
./kafka-console-producer.sh --broker-list localhost:9092 --topic demo(要启动生产者的topic名称)
###2.消费者测试
命令:在kafka 目录下bin目录下执行:
./kafka-console-consumer.sh --zookeeper localhost:2181 --topic demo --from-beginning
注意:消费这边有几个需要注意的点:
1)当我们输入--zookeeper指令时,系统会提示让我们输入--bootstrap-server,此时如果我们更换为--bootstrap-server指令后会发现消费者不消费,其实是因为我们当前使用的zookeeper是外置的,如果使用的kafka自带的zookeeper的话两个指令都是可以的
2)一定要注意端口号是我们配置的zookeeper端口号,如果使用kafka自带zookeeper的话,此时生产者和消费者端口号是一样的
2.安装windows版本kafka
我们在本地开发过程中,很多情况下需要在自己本地先搭建kafka用于开发测试使用,此时可直接使用windows版kafka要使用,简单易上手
1)安装windows版kafka
kafka安装包中自带两个版本的,所以使用上一份的安装包直接在本地windows电脑解压即可
由于kafka本地使用时往往很多情况下都需要使用命令行来操作,此时用windows自带的命令行很难操作,推荐下载自己使用顺手的工具即可,git是比较好用的命令行工具,但是对linux指令友好,对windows指令支持不太好,我自己使用powershell很方便,在文件夹按住shift+鼠标右键即可选择打开
2)使用
windows版kafka使用和linux版本基本一致,除了指令需要调用windows文件夹下的文件
首先启动zookeeper
启动以后界面如下
然后启动kafka
启动以后界面如下
生产消费和linux版本一致,就不在赘述了,要注意的是调用windows文件夹下的.bat文件
特别注意:windows版本踩的坑,注意使用
windows版本存在bug,在最新版里依然存在,当我们调用删除topic指令删掉指定的topic以后会发现kafka会自动停止运行,并且无法重启,此时也没法通过其他指令去操作kafka,就是无限报log.dirs错误
此时我们的解决办法是找到当时配置的kafka数据所在目录,即server.properties文件中的log.dir所在路径,删掉所有数据,最好连文件夹一起删掉,以及zookeeper.properties文件中dataDir所在文件夹的所有数据一起删掉,然后重启zookeeper以及kafka即可成功启动并恢复使用
也就是说因为这个bug,我们在使用windows版kafka时不能删除某个topic,要不就是情况所有topic数据重新生产消费
linux版本不存在此问题,可放心使用