kafka是一个分布式且基于发布/订阅的消息系统。
#Kafka集群是把状态保存在Zookeeper中的,首先要搭建Zookeeper集群。
需要注意的是:Zookeeper集群的工作是超过半数才能对外提供服务,3台中超过两台 超过半数,允许1台挂掉
1、producer:生产者,负责发布消息到kafka
2、broker:代表一台或多台服务器
3、topic:每条发送到kafka集群的消息都会有一个类别,物理上不同的topic存储到不同的broker,逻辑上一个topic可能分别存储在一个或多个broker上,但是生产者或消费者只需要指定topic而无需关心存储
4、zookeeper:集群管理
流程:
Producer使用push模式将消息发布到broker,而Consumer使用pull模式从broker订阅并消费消息。
环境
linux一台或多台,大于等于2
已经搭建好的zookeeper集群
kafka_2.11-0.8.2.1或以上稳定版本
安装JDK
kafka运行需要JDK支持
JDK文档:https://blog.csdn.net/Doudou_Mylove/article/details/89377512
下载kafka
wget http://archive.apache.org/dist/kafka/0.8.2.1/kafka_2.11-0.8.2.1.tgz
tar -zxvf kafka_2.10-0.10.0.1.tgz
mv kafka_2.10-0.10.0.1 /usr/local/kafka配置kafka
mkdir /var/log/kafka #创建kafka日志目录
cd /usr/local/kafka/config #进入配置目录
vim server.properties #编辑修改相应的参数
broker.id=0 port=9092 #端口号 host.name=10.24.45.14 #服务器IP地址,修改为自己的服务器IP log.dirs=/var/log/kafka #日志存放路径,上面创建的目录 zookeeper.connect=localhost:2181 #zookeeper地址和端口,单机配置部署,localhost:2181 #zookeeper.connect=10.24.45.11:12181,10.24.45.12:12181,10.24.45.14:1218 #集群设置zookeeper的连接端口 :wq! #保存退出
配置zookeeper
mkdir /usr/local/kafka/zookeeper #创建zookeeper目录
mkdir /var/log/zookeeper #创建zookeeper日志目录
cd /usr/local/kafka/config #进入配置目录
vim zookeeper.properties #编辑修改相应的参数
dataDir=/usr/local/kafka/zookeeper #zookeeper数据目录 dataLogDir=/var/log/zookeeper #zookeeper日志目录 clientPort=2181 maxClientCnxns=100 tickTime=2000 initLimit=10 syncLimit=5 :wq! #保存退出
创建启动、关闭kafka脚本
cd /usr/local/kafka
#创建启动脚本
vim kafkastart.sh #编辑,添加以下代码
#!/bin/sh #启动zookeeper /usr/local/kafka/bin/zookeeper-server-start.sh /usr/local/kafka/config/zookeeper.properties & sleep 3 #等3秒后执行 #启动kafka /usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties & :wq! #保存退出
#创建关闭脚本
vim kafkastop.sh #编辑,添加以下代码
#!/bin/sh #关闭kafka /usr/local/kafka/bin/kafka-server-stop.sh & sleep 5 #关闭zookeeper /usr/local/kafka/bin/zookeeper-server-stop.sh :wq! #保存退出
#添加脚本执行权限
chmod +x kafkastart.sh
chmod +x kafkastop.sh设置脚本开机自动执行
vim /etc/rc.d/rc.local #编辑,在最后添加一行
sh /usr/local/kafka/kafkastart.sh & #设置开机自动在后台运行脚本
sh /usr/local/kafka/kafkastart.sh #启动kafka
sh /usr/local/kafka/kafkastop.sh #关闭kafka
#这里有个问题,使用命令行关闭是正常的,用脚本每次都执行关闭之后zookeeper的8182端口还在,再执行开启脚本就会提示端口已占用,只能kill掉。
检查kafka是否启动
执行命令:jps
20348 Jps
4233 QuorumPeerMain
18991 Kafka扩展:创建topic来验证是否创建成功
创建Topic
/usr/local/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 2 --partitions 1 --topic cjk
参数解释:
--replication-factor 2 #复制两份
--partitions 1 #创建1个分区
--topic #主题为cjk
报错:Error while executing topic command : Replication factor: 2 larger than available brokers: 0.
创建kafka的topic显示,存活的brokers为0
原因:
没有在kafka目录下创建的zookeeper 指定myid
解决:
cd /usr/local/kafka/zookeeper
touch myid
echo 0 > myid
重新启动kafka就ok
查看创建的所有topic
/usr/local/kafka/bin/kafka-topics.sh --list --zookeeper localhost:2181查看topic状态
/usr/local/kafka/bin/kafka-topics.sh --describe --zookeeper localhost:12181 --topic cjkKafka删除topic
在kafka配置文件中添加删除参数
delete.topic.enable=true
命令删除
/usr/local/kafka/bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic cjk发送数据
/usr/local/kafka/bin/kafka-console-producer.sh --broker-list 10.24.45.14:9092 --topic cjk
[2019-05-08 17:07:17,985] INFO Closing socket connection to /10.24.45.14. (kafka.network.Processor)
> 111111 // 输入内容
> 222222
> 333333
> 444444再打开一个终端查看消费数据
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic cjk --from-beginning
111111 // 输出内容
222222
333333
444444#至此,Linux下Kafka单机安装配置完成。