安装环境:
centos7
hadoop-2.7.3
zookeeper-3.4.10
kafka-2.11-0.10.2.0 在node1, node2, node3节点上安装
安装kafka之前必须安装zookeeper,如果没有安装zookeeper详细见https://blog.csdn.net/qq_43605654/article/details/90750416
一、Kafka简介
1.简介:
Kafka是分布式发布-订阅消息系统。Kafka是一种快速、可扩展的、设计内在就是分布式的,分区的和可复制的提交日志服务。
2.应用场景:
日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr等。
用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。
运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。
流式处理:比如接入到spark streaming和storm中。
3.特点
– 消息持久化:通过O(1)的磁盘数据结构提供数据的持久化,并且支持数据备份防止数据丢失。其快速读写的性能得益于预读和后写两个特性。【 预读:提前把下条记录读到内存中。后写:一次写入多个操作,要求必须是顺序读写,这种操作系统级别的,对磁盘的一个顺序访问要比对内存随机访问还要快】
– 高吞吐量:每秒百万级的消息读写,每秒可以处理上百兆的数据
– 分布式:扩展能力强
– 多客户端支持:java、 php、 python、 c++ ……
– 实时性:生产者生产的message立即被消费者可见(message是kafka的基本单位)
– 高并发:支持数千个客户端同时读写
二、Kafka安装
node1节点上的操作
1.解压并重命名
tar -zxvf kafka_2.11-0.10.2.0.tgz
mv kafka_2.11-0.10.2.0 kafka-2.11
2.添加环境变量
vi /etc/profile
export KAFKA_HOME=/home/hadoop/kafka-2.11
export PATH=$PATH:$KAFKA_HOME/bin
更新环境变量
source /etc/profile
3.创建日志目录文件
cd /home/hadoop/kafka-2.11/
mkdir logs
4.编辑kafka配置文件
进入kafka安装目录下的conf目录
cd /home/hadoop/kafka-2.11/conf
vi server.properties
修改broker.id
broker.id=1
配置监听listeners
listeners=PLAINTEXT://node1:9092
修改日志存放位置log.dirs
log.dirs=/home/hadoop/kafka-2.11/logs
配置zookeeper连接zookeeper.connect
zookeeper.connect=node1:2181,node2:2181,node3:2181
5.将kafka发送到其它节点(从node1发送给node2和node3)
scp -r /home/hadoop/kafka-2.11 root@node2:/home/hadoop/
scp -r /home/hadoop/kafka-2.11 root@node3:/home/hadoop/
在node2,node3节点进行操作
6.修改其它节点的server.properties配置文件
修改broker.id以及listeners(每个节点的broker.id都应该不一样且是正整数,在此集群中唯一标识此节点,目的是如果节点的ip改变了,通过broker.id还可以找到对应的节点,从而保证了进程正常运行)
node2:
broker.id=2
listeners=PLAINTEXT://node2:9092
node3:
broker.id=3
listeners=PLAINTEXT://node3:9092
三、测试
1.开启zookeeper集群(在这里我使用的是自己编写的开启脚本,开启所有zookeeper,可以参考https://blog.csdn.net/qq_43605654/article/details/90750663)
zkStart-all.sh
如果没有写脚本则用命令 zkServer.sh start 一个个启动zookeeper
2.开启kafka进程
分别进入node1,node2,node3的kafka-2.11目录下(也可以用绝对路径开启,不过会比较长)
使用命令bin/kafka-server-start.sh conf/server.properties &
参数conf/server.properties是指以此配置开启进程,最后的&表示在后台运行该进程
3.通过jps查看进程(这里使用了脚本)
jps-all.sh
可以看到安装kafka的节点(node1,node2,node3)有kafka进程(截图的时候开着hadoop集群,所以有hadoop相关的进程,kafka只依赖于zookeeper,因此开启kafka前必须运行zookeeper)
4.创建一个Kafka的topic(主题)进行测试
kafka-topics.sh --create --zookeeper node1:2181 --replication-factor 1 --partitions 1 --topic test
参数的含义:
--create 意思是该操作是创建操作
--zookeeper node1:2181 指定该主题所在的zookeeper地址(可以指定多个zookeeper节点)
--replication-factor 1 指定副本数为1
--partitions 1 指定分区数为1
--topic test 指定创建的主题名为test
查看创建的topic
kafka-topics.sh --list -zookeeper node1:2181
参数的含义:
--list -zookeeper node1:2181 指定查看的zookeeper节点,在此为查看node1节点上的主题
5.开启生产者消费者窗口进行测试
node1:生产者
kafka-console-producer.sh --broker-list node1:9092 --topic test
参数的含义:
--broker-list node1:9092 指定生产者服务器使用的节点(决定了数据将会去哪里)
--topic test 指定使用的主题
输入一些数据进行测试(生产者生产数据):
node2:消费者
kafka-console-consumer.sh --bootstrap-server node1:9092 --topic test --from-beginning
参数的含义:
--bootstrap-server node1:9092 指定生产者服务器所在节点即broker-server所在的节点
--topic test 指定主题名字
--from-beginning 指定消费类型:从头消费
可以看到控制台输出了从生产者生产的数据(即kafka消费者消费了数据):
6.关闭
生产者消费者进程可以直接通过 Ctrl+C 结束或者通过 kill 进程号 杀死该进程
kafka集群关闭方式:
kafka-server-stop.sh