一。安装zookeeper 伪集群



此处不采用kafka安装包自带的zookeeper,而是自己独立安装zookeeper。 

 

  zookeeper 版本:zookeeper-3.4.11.tar.gz。 

 

  1.将zookeeper-3.4.11.tar.gz解压缩到目录 D:\Program Files\zookeeper-3.4.11\zookeeper-1 

 
新建目录 
 tmp/data, tmp/log。
 
3.配置zoo.cfg和日志设置
 
conf目录,拷贝zoo_sample.cfg 到 文件 zoo.cfg.
 
修改conf\zoo.cfg:
 
 
 
 

  # the directory where the snapshot is stored. 

 

  # do not use /tmp for storage, /tmp here is just 

 

  # example sakes. 

 

  dataDir=D:\\Program Files\\zookeeper-3.4.11\\zookeeper-1\\tmp\\data 

 

  #事务日志路径,默认值为dataDir 

 

  dataLogDir=D:\\Program Files\\zookeeper-3.4.11\\zookeeper-1\\tmp\\log 

 

  # the port at which the clients will connect 

 

  clientPort=2181 

 

  server.1=127.0.0.1:2888:3888 

 

  server.2=127.0.0.1:2889:3889 

 

  server.3=127.0.0.1:2890:3890 

 
 
 
 

  修改bin\zkEnv.cmd: 设置日志路径及日志相关属性。注意:REM 是注解 

 
 
 
 

  REM set ZOO_LOG_DIR=%~dp0%.. 

 

  set ZOO_LOG_DIR=%~dp0%..\log 

 

  REM set ZOO_LOG4J_PROP=INFO,CONSOLE 

 

  set ZOO_LOG4J_PROP=INFO,CONSOLE,ROLLINGFILE 

 
 
 
 

  因为此处设置的值会覆盖log4j.properties中的一些属性,如:zookeeper.root.logger,zookeeper.log.dir 

 
 
 
 
在 
  zookeeper1/tmp/data 
 目录下新建文件: 
 myid 
 。内容为 
 1 
 ,与 
 server.1 
 对应。
 
5. 
  拷贝 
  zookeeper1 
  到 
  zookeeper2 
  和 
  zookeeper3 
  。
 
 
修改配置文件 
  zoo.cfg:
 
 
Zookeeper2 
  的 
  zoo.cfg:
 
 
# the directory where the snapshot is stored.
 
 
# do not use /tmp for storage, /tmp here is just
 
 
# example sakes.
 
 
dataDir=D:\\Program Files\\zookeeper-3.4.11\\zookeeper-2\\tmp\\data
 
 
#事务日志路径,默认值为dataDir
 
 
dataLogDir=D:\\Program Files\\zookeeper-3.4.11\\zookeeper-2\\tmp\\log
 
 
# the port at which the clients will connect
 
 
clientPort=2182
 
 
server.1=127.0.0.1:2888:3888
 
 
server.2=127.0.0.1:2889:3889
 
 
server.3=127.0.0.1:2890:3890
 
 
 
 
 
Zookeeper3 
  的 
  zoo.cfg:
 
 
# the directory where the snapshot is stored.
 
 
# do not use /tmp for storage, /tmp here is just
 
 
# example sakes.
 
 
dataDir=D:\\Program Files\\zookeeper-3.4.11\\zookeeper-3\\tmp\\data
 
 
#事务日志路径,默认值为dataDir
 
 
dataLogDir=D:\\Program Files\\zookeeper-3.4.11\\zookeeper-3\\tmp\\log
 
 
# the port at which the clients will connect
 
 
clientPort=2183
 
 
server.1=127.0.0.1:2888:3888
 
 
server.2=127.0.0.1:2889:3889
 
 
server.3=127.0.0.1:2890:3890
 
 
 
 
 
修改 
  zookeeper2 
  的 
  myid 
  文件内容为‘ 
  2 
  ’, 
  zookeeper3 
  的 
  myid 
  文件内容为‘ 
  3 
  ’。
 
 
6. 
  启动 
  zookeeper 
  :
 
 
Zookeeper1: bin/zkServer.cmd
 
 
Zookeeper2: bin/zkServer.cmd
 
 
Zookeeper3: bin/zkServer.cmd
 
 
7. 
  查看 
  zookeeper 
  状态: 
  jps
 
 
8. 
  测试 
  znode 
  :
 
 
( 
  1 
  )连接一个 
  zookeeper 
  服务节点:  
  bin/zkCli.cmd 
  或者  
  bin/zkCli.cmd -server 127.0.0.1: 2182 
  指定具体某个服务节点。
 
 
( 
  2 
  )查询现有 
  znodes 
  : 
  ls /
 
 
( 
  3 
  )新增 
  znode 
  : 
  create /testNode helloworld Created /testNode
 
 
( 
  4 
  )新增 
  znode 
  成功后,会发现另外两个 
  zookeeper 
  中也相应的增加了 
  /testNode 
  节点。
 
 
 
 
 
 
 
 
 
二。安装kafka伪集群
 
 
 
 
kafka版本:kafka_2.11-1.0.0.tgz
 
 
 
 
1.将kafka_2.11-1.0.0.tgz解压缩到D:\Program Files\kafka_2.11-1.0.0\broker-1
 
 
 
 
2.配置server.properties
 
将相关属性设为以下值:
 

  #broker.id=0 

 

  broker.id=1 

 

  delete.topic.enable=true 

 

  listeners=PLAINTEXT://:9092 

 

  # kafa 数据存放地址 

 

  log.dirs=D:\\data\\kafka\\broker-1 

 

  #zookeeper集群地址 

 

  zookeeper.connect=localhost:2181,localhost:2182,localhost:2183 

 
 
 
 

  3.修改bin\windows\kafka-run-class.bat: 设置日志文件路径 

 

  set LOG_DIR="d:\\logs\\kafka\\broker-1" 

 
 
 
 

  备注:log.dirs 和 LOG_DIR对应的目录可以不用手动生成,kafka会自动生成。 

 
 
 
 

  4. 拷贝broker-1 到 broker-2,broker-3 

 

  修改对应的配置文件 

 
 
 
 

  broker-2 : 

 

  server.properties文件: 

 

  #broker.id=0 

 

  broker.id=2 

 

  delete.topic.enable=true 

 

  listeners=PLAINTEXT://:9093 

 

  # kafa 数据存放地址 

 

  log.dirs=D:\\data\\kafka\\broker-2 

 

  #zookeeper集群地址 

 

  zookeeper.connect=localhost:2181,localhost:2182,localhost:2183 

 
 
 
 

  bin\windows\kafka-run-class.bat 文件: 

 

  set LOG_DIR="d:\\logs\\kafka\\broker-2" 

 
 
 
 

  broker-3 : 

 

  server.properties文件: 

 

  #broker.id=0 

 

  broker.id=3 

 

  delete.topic.enable=true 

 

  listeners=PLAINTEXT://:9094 

 

  # kafa 数据存放地址 

 

  log.dirs=D:\\data\\kafka\\broker-3 

 

  #zookeeper集群地址 

 

  zookeeper.connect=localhost:2181,localhost:2182,localhost:2183 

 
 
 
 

  bin\windows\kafka-run-class.bat 文件: 

 

  set LOG_DIR="d:\\logs\\kafka\\broker-3"


5.启动 kafka

broker-1: bin\windows\kafka-server-start.bat config\server.properties 

 

  broker-2: bin\windows\kafka-server-start.bat config\server.properties 

 

  broker-3: bin\windows\kafka-server-start.bat config\server.properties


启动后此时通过zookeeper客户端链接任何一个zookeeper服务端,查看 该zookeeper服务端下的znode节点:ls /,会发现多出了一个brokers 节点。


 

      


kafka mac m1安装_kafka



之所以任何一个zookeeper服务端的内容都一样,这是因为zookeeper会对任何一个zookeeper服务端执行相同的写操作。这是zookeeper的特性。



6. 测试topic


任选一个broker(即kafka设备) 执行新增topic的命令。此处我们通过broker-2新增一个复制因子为2的topic:




kafka mac m1安装_kafka mac m1安装_02




此时,连接任何一个zookeeper服务端查看:






kafka mac m1安装_zookeeper_03



会发现zookeeper服务端中保存了kafka的topic信息。



查看topic的信息:



kafka mac m1安装_数据_04




"leader":该节点负责所有指定分区的读和写,每个节点的领导都是随机选择的。


"replicas":备份的节点,无论该节点是否是leader或者目前是否还活着,只是显示。


"isr":备份节点的集合,也就是活着的节点集合。



从中可以看出,my-replicated-topic 是作用在 broker-1和broker-2设备上,因为复制因子是2,所以只在2各设备上保存该topic的数据。


我们查看在broker-1的数据存储目录D:\data\kafka\broker-1下会发现新增的文件夹:my-replicated-topic-0,该文件下就是保存my-replicated-topic 这个topic的所有数据。


同样broker-2的数据存储目录下也有一样的文件夹!而broker-3设备则没有。



备注:其实 在连接zookeeper服务器的时候,只需要写一个zookeeper服务器地址就可以,因为zookeeper会对所有zookeeper服务器进行相同的写操作。而通常要写所有的zookeeper服务器地址是因为防止其中有的服务器链接失败的i情况。



7. 测试发布信息和消费信息



发布信息:



kafka mac m1安装_kafka mac m1安装_05




消费消息:



kafka mac m1安装_数据_06




备注: 发布消息时,--broker-list 可以列出所有的broker,也可以只列个别,甚至列出的broker可以不是该topic保存数据所在的设备,比如此处可以只设为 localhost:9094, 即broker3,my-replicated-topic 的数据只保存在broker1和broker2,但此处也能正常发送消息。猜想这些是通过broker中设置的zookeerper列表进行连接的,所以可以任何一个可以连接到zookeeper的broker。



同样 消费信息时,--zookeeper 可以设置多个zookeeper服务地址,也可以只设置部分或一个,建议设置所有的zookeeper服务地址。



我们现在测试备份的功能:


my-replicated-topic 现在的leader是1,机broker-1负责my-replicated-topic的分区的读写。



现在停掉broker-1,我们再看下效果:




kafka mac m1安装_kafka windows_07



leader 变为了2。Isr 也由1,2变为了2,表示现在broker1已经不在同步备份集合里了。


但是消费还是能正常进行,因为broker-2中有备份数据:



kafka mac m1安装_数据_08





    

kafka mac m1安装_kafka mac m1安装_09