Kafka学习笔记01 Quick Start
Posted 完齿猪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kafka学习笔记01 Quick Start相关的知识,希望对你有一定的参考价值。
1.安装运行环境
由于是学习用途,我在自己的电脑安装了虚拟机,虚拟机之上安装linux操作系统.
•虚拟机:Oracle VM VirtualBox
•Linux操作系统:Ubuntu 16.04.3
2.安装JDK
网上的教程比较多,这里不累述,我的版本是JDK 1.8。
•要达到的效果
•kafka_2.11-1.0.0 是server所在的目录,3个server用同一套程序,只是分开不同的配置文件。
•kafka-logs01,02,03 是kafka数据存放的目录,分开存放3个server。
•zookeeper01,02,03是server所在目录,3个server的程式和数据分开放。
•kafka-manager是管理工具,后续再讲。
3.搭建zookeeper伪集群
zookepper是用来保存kafka的信息,kafka自带zookepper,但是为了更好体验,我装了独立的zookepper。伪集群是多个相同的服务部署在一台机器上,真正的集群是部署在多台机器上,起码是多个虚拟机。
http://zookeeper.apache.org/releases.html
•下载zookeeper,目录随意放置,我设置为/home/randy/Tool
•解压文档,目录随意放置,但不要放到/tmp,因为linux每次启动,/tmp会被清空。我的目录是/home/randy/workspace02。
> tar -xvf /home/randy/Tool/zookeeper-3.4.11.tar.gz -C /home/randy/workspace02
> tar -xvf /home/randy/Tool/kafka_2.11-1.0.0.tgz -C /home/randy/workspace02
为方便管理,我命名3个文件夹存放运行文件,分别是zookeeper01,zookeeper02,zookeeper03。
•重命名zookeeper-3.4.11
> cd /home/randy/workspace02
> mv zookeeper-3.4.11 zookeeper01
•生成zookeeper01的配置文档"zoo.cfg",zoo.cfg原来是没有的,要复制sample。
> cp zookeeper01/conf/zoo_sample.cfg zookeeper01/conf/zoo.cfg
•修改zookeeper01的配置文档conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/randy/workspace02/zookeeper01/data/
dataLogDir=/home/randy/workspace02/zookeeper01/logs/
clientPort=3004
maxClientCnxns=60
server.1=127.0.0.1:6664:7774
server.2=127.0.0.1:6665:7775
server.3=127.0.0.1:6666:7776
说明:
tickTime: Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔。
initLimit:用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒
syncLimit:配置Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个
dataDir: Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。伪集群不同的Zookeeper对应的目录不一样
dataLogDir:日志目录,伪集群不同的Zookeeper对应的目录不一样
clientPort:客户端连接时用到的端口,伪集群不同的Zookeeper端口不一样,但可以随意选择。Zookeeper 会监听这个端口,接受客户端的访问请求。
“server.1=127.0.0.1:6660:7770”表示集群中的服务器,
其格式为: server.X=A:B:C,
X是服务器标识ID,即其服务器标识ID檔(myid)中的内容;
A是该Zookeeper的IP,
B是这个服务器与集群中的 Leader 服务器交换信息的端口;
C是集群中各Zookeeper服务器间进行选举leader时要用到的端口。
如果是伪集群的配置方式,由于配置的是伪集群模式, A一样,各个server的B, C参数必须不同。
•创建zookeeper01的zookeeper data和log文件
> mkdir zookeeper01/data
> mkdir zookeeper01/logs
•创建Zookeeper另外两台server
> cp -r zookeeper01 zookeeper02
> cp -r zookeeper01 zookeeper03
•修改zookeeper02和zookeeper03中的conf/zoo.cfg
dataDir=/home/randy/workspace02/zookeeper02/data/
dataLogDir=/home/randy/workspace02/zookeeper02/logs/
clientPort=3005
dataDir=/home/randy/workspace02/zookeeper03/data/
dataLogDir=/home/randy/workspace02/zookeeper03/logs/
clientPort=3006
•创建3台server的server ID的标识文档
> echo 1 >zookeeper01/data/myid
> echo 2 >zookeeper02/data/myid
> echo 3 >zookeeper03/data/myid
•查看Zookeeper启动参数:
> /home/randy/workspace02/zookeeper01/bin/zkServer.sh -help
3.搭建Kafka伪集群
Kafka的厉害之处,就是代码下载、解压就可以马上运行,非常方便。同样,我搭建了3个server,都部署在一台虚拟机上。
https://kafka.apache.org/downloads
kafka_2.11-1.0.0.tgz中,2.11是scala的版本,目前2.11比较稳定,1.0.0是kafka的版本(kafka是用scala编写的)。
•下载Kafka,目录随意放置,我设定的是 /home/randy/Tool,
•解压文档,目录随意放置,不要放到 /tmp 即可,因为Linux每次启动,/tmp会被清空。我的目录是/home/randy/workspace02。
•拷贝配置文档,用来运行3台server
> cd /home/randy/workspace02/kafka_2.11-1.0.0
> cp config/server.properties config/server1.properties
> cp config/server.properties config/server2.properties
•修改配置文档
config/server.properties:
broker.id=0
listeners=PLAINTEXT://:9092
log.dirs=/home/randy/workspace02/kafka-logs01
zookeeper.connect=127.0.0.1:3004,127.0.0.1:3005,127.0.0.1:3006
config/server1.properties:
broker.id=1
listeners=PLAINTEXT://:9093
log.dirs=/home/randy/workspace02/kafka-logs02
zookeeper.connect=127.0.0.1:3004,127.0.0.1:3005,127.0.0.1:3006
config/server2.properties:
broker.id=2
listeners=PLAINTEXT://:9094
log.dirs=/home/randy/workspace02/kafka-logs03
zookeeper.connect=127.0.0.1:3004,127.0.0.1:3005,127.0.0.1:3006
4.启动服务
•启动zookeeper
> cd /home/randy/workspace02/
> zookeeper01/bin/zkServer.sh start
> zookeeper02/bin/zkServer.sh start
> zookeeper03/bin/zkServer.sh start
•验证 zookeeper 状态:
> zookeeper01/bin/zkServer.sh status
•可以用zookeeper client 测试一下:
> zookeeper02/bin/zkCli.sh -server 127.0.0.1:3004
•启动Kafka
> cd /home/randy/workspace02/kafka_2.11-1.0.0
> JMX_PORT=9997 bin/kafka-server-start.sh -daemon config/server.properties
> JMX_PORT=9998 bin/kafka-server-start.sh -daemon config/server1.properties
> JMX_PORT=9999 bin/kafka-server-start.sh -daemon config/server2.properties
也可以用以下命令
> JMX_PORT=9998 bin/kafka-server-start.sh config/server1.properties &
JMX_PORT 设定端口方便用jconsole来查看
& 表示把命令放到后台运行,否则你关闭客户端,服务就终止。
5.验证kafka
•进入kafka目录:
cd /home/randy/workspace02/kafka_2.11-1.0.0
•创建 TOPIC
> bin/kafka-topics.sh --create --zookeeper localhost:3004 --replication-factor 3 --partitions 3 --topic my-replicated-topic
•查看TOPIC list
> bin/kafka-topics.sh --zookeeper localhost:3004,localhost:3005,localhost:3006 --list
•查看单个 TOPIC 的描述
> bin/kafka-topics.sh --describe --zookeeper localhost:3004,localhost:3005,localhost:3006 --topic my-replicated-topic
•订阅TOPIC
从0.11版本开始consumer连接kafka,之前连接zookepper
> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic my-replicated-topic --from-beginning
•发送消息
输入消息按“回车”后,消息就在订阅的客户端冒出来
> bin/kafka-console-producer.sh --broker-list localhost:9092,localhost:9093,localhost:9094 --topic my-replicated-topic
•查看/中止kafka进程
> ps aux | grep server.properties
randy 11204 2.7 10.9 3551472 329228 pts/12 Sl+ 08:58 0:21 /usr/java/jdk1.8.0_151/bin/java...
6.关闭服务
•关闭Kafka
> cd /home/randy/workspace02/kafka_2.11-1.0.0
> bin/kafka-server-stop.sh
•关闭zookeeper
> cd /home/randy/workspace02/
> zookeeper01/bin/zkServer.sh stop
> zookeeper02/bin/zkServer.sh stop
> zookeeper03/bin/zkServer.sh stop
参考文献:
kafka官网 https://kafka.apache.org
以上是关于Kafka学习笔记01 Quick Start的主要内容,如果未能解决你的问题,请参考以下文章