Kafka是一个分布式的消息队列,具体如下图,他需要zookeeper来管理一下,所以在安装kafka前我们要先安装zookeeper,一般kafka安装包中都会自带一个简单版的zookeeper。
zookeep负责管理分布式的存储模块,broke、topic、consumer都会在zookeep中注册。
Kafka架构图:
这块看网上的图和文字真的看不懂,建议在b站找个视频讲解15分钟就搞懂了。
kafka的主要特征,解耦(大概是扩展性强)、削峰(缓解数据峰值时候的压力)
分为两种模式 点对点模式和发布订阅模式
发布订阅模式中也分为两种,一种是producer主动推信息,一种是consumer主动拉取信息(拉取信息需要消费者执行一个拉取的轮训,即便没有消息也要执行轮训)
zookeeper的作用
帮助kafka存储一些数据,记录消费职位,服务器挂掉之后,会通过zookeeper上的信息重新从上次的位置继续消费,从而防止数据丢失。
0.9版本之前offset存储在zk,0.9之后存储在本地(默认存7天,168小时)
因为这样需要频繁的和zk交互,zk反应比较慢,所以改版存储在本地(存在一个kafka broker中)
================================================
下载kafka安装包,个人习惯放在/opt中,之后解压安装包,官网下的是kafka_2.12-2.6.0.tgz用tar xvfz kafka_2.12-2.6.0.tgz 解压,解压后进入解压的文件夹
配置文件在config中:
kafka配置文件是server.properties
zookeeper的是zookeeper.properties
消费者的是consumer.properties
生产者的是producer.properties
首先要配置zookeeper.properties:
datadir是缓存数据的保存地点
clientport是zookeeper端口
dataLogDir是日志的保存地点
之后配置server.properties:
Broker.id是集群中broker的唯一id,每个机器的不能一样,这里我就启一个,所以就不动了
host.name是服务器ip地址,虚拟机实验就localhost就行,剩下的要配置ip地址
zookeeper.connect 是zk地址,注意看看路径对不对
Port 端口号(listeners=PLAINTEXT)也是端口,默认就行
log.dirs kafka数据存放地址
配置好后先运行zookeeper,再运行kafka
开启zookeeper:
bin/zookeeper-server-start.sh config/zookeeper.properties
输出日志的开启方法:
nohup bin/zookeeper-server-start.sh config/zookeeper.properties > zookeeper-run.log 2>&1 & (这样在本目录会有个日志)
开启kafka:
bin/kafka-server-start.sh config/server.properties
输出日志的开启方法:
nohup bin/kafka-server-start.sh config/server.properties > kafka-run.log 2>&1 & (这样在本目录会有个日志)
使用jps -l查看是否运行成功:
显示:[root@localhost bin]# jps
7797 Kafka
7564 QuorumPeerMain //QuorumPeerMain是zookeeper的守护进程
创建一个topic:
./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test //注意这里2181是config目录中zookeeper.properties配置clientPort端口,replication-factor是每个partition的副本个数 --partitions是对应topic下分区数量
返回结果:Created topic "test"
显示topic:
./kafka-topics.sh -list -zookeeper localhost:2181
创建一个生产者:
./kafka-console-producer.sh --broker-list localhost:9092 --topic test//--broker -list是你broker服务器所在的IP地址和端口 --topic选择topic
输入完成后会进入输入面板,在输入面板中输入信息,按ctrl c结束
在消费者中查看:
./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
查看topic test中的历史消息,这样就可以看到刚刚发送的
--from-beginning是把缓存的记录都同步过来,删掉这个就是显示的实时接收的数据
=======================================================================================================
server.properties中字段对应的中文解释:https://blog.csdn.net/lizhitao/article/details/25667831
我参考的这三个教程搭建kafka。
https://www.cnblogs.com/zhaoshizi/p/12154518.html
https://www.cnblogs.com/enhance/p/11233164.html
https://blog.csdn.net/sinat_32023305/article/details/83860441