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的主要内容,如果未能解决你的问题,请参考以下文章

Kafka quick start (Mac指令)

kafka quick start

Apache Kafka - Quick Start on Windows

《Qt Quick 4小时入门》学习笔记4

《Qt Quick 4小时入门》学习笔记2

kafka 笔记