通俗易懂、完整的kafka安装及使用——保姆级教程

通俗易懂、完整的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——数据库问题

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈镇坤27

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值