通俗易懂、完整的kafka安装及使用——保姆级教程
author:陈镇坤27
日期:好久前写的了,忘了日期了
创作不易,转载请注明出处
大致阅读时间:20分钟
以下的教程,假设读者无linux、kafka、zookeeper、shell、内外网相关经验
——————————————————————————————
文章目录
一、准备
1、安装VMware,建议安装最高版本(否则可能遇到关闭服务器卡死,必须重启电脑才能恢复的情况)
2、按照网上已有的教程,创建3台linux虚拟机,并各自配置固定的ip
参考已有博客:https://blog.csdn.net/tandelin/article/details/87106883?utm_medium=distribute.pc_relevant.none-task-blog-title-5&spm=1001.2101.3001.4242
和 https://blog.csdn.net/qq_32278887/article/details/109273542
3、搜索kafka官网,根据官网指引,找到下载页面,本文选择1.1.1版本
kafka是用Scala语言编写的,运行需要Scala支持,我们选择kafka 2.12-1.1.1.tgz包,“-”前面的数字代表Scala版本,后面代表kafka版本。关于版本的选择,参考博客:https://blog.csdn.net/merryxuan/article/details/107105416
4、搜索zookeeper官网,找到下载页面,测试时选用的3.4.5版本(下面截图使用的是3.4.1版)。关于版本选择,需要参考项目现有的依赖,建议用这个网站查看适合自己某个框架版本的对应框架版本号区间:https://mvnrepository.com/artifact/org.apache.kafka/kafka_2.12/1.1.1 (如何查看自己本机的zk版本:yum install -y nc 然后启动zk,最后echo stat|nc localhost 2181)
5、安装SecureCRT,一款不错的远程连接Linux工具。目的利用SFTP命令上传文件(有空可以调整页面展示,舒心敲码)。
二、开始安装
1、上传文件
使用SecureCRT上传tgz包到服务器
相关命令:pwd cd 和 lpwd lcd ,上传使用put 文件 下载使用get 文件
这里出现点小插曲,因为服务器相关文件夹拒绝我的访问,所以我将上传文件放到了其他的文件夹,然后在利用mv 文件 目标目录 剪切过去。
2、解压文件
tar -zxvf tgz文件
3、配置环境变量
vi /etc/profile 阅览系统环境变量文件
# kafka2.12-1.1.1
export KAFKA_HOME=/data/apps/kafka_2.12-1.1.1
export PATH=$PATH:$KAFKA_HOME/bin
source /etc/profile 立即生效
其他:
问题:单机部署后,发现java代码连接不上,没报错,就是没反馈
解决:zk这里配置了server.0 并且创建了myid文件,然后在kafka那里配置了listener,两个都配置了
然后重启就好了
三、修改zk配置
zk的话,若需要集群配置zk服务,则需要快照目录写myid,还需要在配置文件中指定本zk服务的代号和地址(单机可操作可不操作)
vi zoo.cfg
server.0=ip地址:2888:3888 #为该zk应用分配代号
0表示服务器编号(必须唯一)、2888是集群中服务器与leader交换信息的端口,而3888是选举服务器时通信的端口
这个目录需要我们创建zkData,当然命名可以自己做
dataDir=/data/apps/zookeeper-3.4.10/data #数据
dataLogDir=/data/apps/zookeeper-3.4.10/logs #日志
然后在快照的目录里面创建一个myid文件,文件中输入一个之前设定的代号值
四、修改Kafka配置
1.1、配置
kafka的根目录
mkdir logs
再
vi config/server.properties
增加下面配置
############################# Server setting####################
broker.id=0 #服务唯一代号
#允许物理删除创建的topic
delete.topic.enble=true
#注意zk地址,由于是单机部署,只连一台即可
zookeeper.connect=localhost:2181
#日志存放目录
log.dirs=/data/apps/kafka_2.12-1.1.1/logs
#socket 服务监听对这个应用的请所有ip请求,如果不配置,则执行消费等请求时需要指定联机ip,使用localhost会报错
listeners=PLAINTEXT://0.0.0.0:9092
#外部与本服务器的kafka通讯(如果是使用云服务器则必配,本地虚拟机则直接用虚拟机的ip即可)
#建立生产者与消费者之间的通道
advertised.listeners=PLAINTEXT://外网ip:9092
#踩坑 https://blog.csdn.net/wc188996/article/details/86702641
#plaintext是什么
#https://www.liankexing.com/notetwo/12680
#9092是kafka的默认端口
1.2、主要踩坑
单机启动后通过脚本调试生产者和消费者是可以正常进行操作的,但是本地代码调试无反馈,判断是通讯失效,和配置问题,所以做了三个操作。把listeners的配置做上去,然后补充zk的server配置和myid配置,后两个估计无作用,但暂时没进行验证。
启动命令
#按照配置文件的内容启动kafka服务
JMX_PORT=9988 /data/apps/kafka_2.12-1.1.1/bin/kafka-server-start.sh -daemon /data/apps/kafka_2.12-1.1.1/config/server.properties
#打开zk客户端(如果你需要去检查kafka的注册情况和消息发送情况的话)
zkCli.sh start
2、最完美的配置服务启动方案
参考这篇博客:https://blog.csdn.net/weixin_41877978/article/details/99467679
五、安装监控工具
这是官方的文档,比较简略
http://www.kafka-eagle.org/articles/docs/installation/linux-macos.html
配置环境变量
修改配置
kafka.eagle.zk.cluster.alias=cluster1
cluster1.zk.list=内网ip:2181
cluster1.kafka.eagle.offset.storage=kafka
#把存储在zk的那行删除
kafka.eagle.driver=com.mysql.cj.jdbc.Driver
kafka.eagle.url=jdbc:mysql://数据库ip:8200/kafka_eagle?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
kafka.eagle.username=数据库账号
kafka.eagle.password=数据库密码
创建数据库,配置账号
创建账户
create user '账户名'@'%' identified by '密码'; '%'表示所有ip都可访问
在此之前我用的是
insert into mysql.user(Host,User,Password) values('localhost','账户名',password('密码'));
然后报错
#Field 'ssl_cipher' doesn't have a default value
原因是之前的创建账户已经被废弃了
grant all privileges on 表名.* to 账户名@'%' identified by '密码';
flush privileges;
之前我只为这个库配置所有权限,然而登录400,还报错,日志说
DruidDataSource.Druid-ConnectionPool-Create-308212988 - ERROR - create connection error, url: jdbc:mysql://193.112.220.108:8200/kafka_eagle?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull, errorCode 1045, state 28000
java.sql.SQLException: Access denied for user 'root'@'106.52.233.210' (using password: YES)
于是我使用了
grant all privileges on *.* to 账户名@'%' identified by '密码';
flush privileges;
再顺序重启了kafka,kafka-eagle,发现登录没问题了
查看启动错误日志
cd logs
tail -100f error.log
大部分情况报错是因为数据库连接问题导致的
基本命令
ke.sh start
ke.sh stop
激活监控趋势图
要开启监控趋势图,需要在kafka的启动命令中加代码
if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
#export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
#kafka-eagle的配置
export KAFKA_HEAP_OPTS="-server -Xms1G -Xmx1G -XX:PermSize=128m
-XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:ParallelGCThreads=8 -XX:ConcGCThreads=5 -XX:InitiatingHeapOccupancyPercent=70"
export JMX_PORT="9999"
fi
然后kafka便可以通过加的jmx端口收集到kafka的消息消费趋势情况
六、遇到的困难
第一个,单机部署后,java代码访问不了——kafka配置没有开放通讯地址
第二个,eagle监控登录不了,一直在加载——配置文件没有配置数据库或没有数据库不存在
第三个,登录后直接400——数据库问题