1.去官网下载zookeeper,我用的是3.3.6版本:http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.3.6/
2.集群配置
1.将解压后的zookeeper文件夹,复制三份,分别命名为server1,server2,server3;
2. 在当前目录下建立两个文件夹data和dataLog,整体结构如下:
3. 进入data文件夹下,创建三个文件夹对应三个zookeeper服务器,:
4.进入1文件夹下,建立一个myid文件,在里面输入文本: 1 。
注意这个文件不要带后缀名,删掉后缀名。修改完1文件夹后,2、3文件夹操作相同
不过myid文件中的文本要分别修改成2、3,其实只要这三个myid文本中的数字不一样就行
5.修改server1文件夹下conf目录下的zoo.properties文件内容如下,server2、server3配置同理,
修改对应参数即可:
# The number of milliseconds of each tick 心跳间隔 毫秒每次
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting anacknowledgement
syncLimit=5
#刚刚创建的1文件夹位置,这个路径第一个 / 代表磁盘根目录;
#server2、server3文件夹下的这个文件 要修改这个位置
dataDir=/tools/zookeeper/zookeeper-cluster/data/1
#日志输出位置,根据个人喜好 将三个server的日志分开或者放在一个目录
dataLogDir=/tools/zookeeper/zookeeper-cluster/dataLog/1
#这里是重点,配置客户端连接的端口,端口默认2181。我这里设置 server1的端口 为2182
#server2、server3修改为2183,2184 不重复即可。
clientPort=2182
#这里server.x含义,如server.1 这个 1 就是我们刚刚建立的myid文件 里面的文本1
server.1=127.0.0.1:2887:3887
server.2=127.0.0.1:2888:3888
server.3=127.0.0.1:2889:3889
3.启动zookeeper集群
进入server1文件夹下的bin目录,创建一个startup.bat 内容如下:
双击这个startup.bat就可以启动zookeeper服务器了,此时打开控制台会一直闪烁错误,因为在等待集群中另外两台服务器的启动。再去server2、server3重复上述操作启动服务器即可。
4.使用Zookeeper客户端操作:
1.进入bin文件夹下,创建start-client.bat,点击start-client.bat即可运行
start-client.bat脚本内容:
title zkClient-1
zkCli.cmd -r -server 127.0.0.1:2182
-server后面的参数是 要连接的zookeeper服务器的ip
2.创建zk节点:
create /zk "sb" //创建一个叫zk节点,内容为sb
get /zk //查询 zk节点所有信息
stat /zk //查询 zk节点状态 不带上述内容sb
1.下载Kafka:http://mirror.bit.edu.cn/apache/kafka/1.1.0/kafka-1.1.0-src.tgz
2.解压后复制Kafka文件夹,分别命名为kafka01、kafka02、kafka03
一.集群
1.修改config文件夹下的server.properties ,其中的brokerId是惟一的,集群中kafka服务器配置的brokerId不能相同,相当于zookeeper的myid
2.zookeeper.connect=127.0.0.1:2182,127.0.0.1:2183,127.0.0.1:2184/kafka说明:
这个是zookeeper集群的服务器端口号, /kafka是在zookeeper挂载的文件夹,要自己创建zookeeper客户端命令 create /kafka
二.kafka服务端启动
cmd进入 bin/windows文件夹运行命令:
kafka-server-start.bat ../../config/server.properties
三.kafka创建主题
1.创建主题
cmd进入 bin/windows文件夹:运行命令
kafka-topics.bat –create –zookeeper 127.0.0.1:2182,127.0.0.1:2183,127.0.0.1:2184/kafka –replication-factor 1 –partitions 1 –topic sbKafka
指令说明:
–create 指定创建topic动作
–zookeeper 指定kafka连接zk的连接url,该值和server.properties文件中的配置项{zookeeper.connect}一样
–replication-factor:指定每个分区的复制因子个数,默认1个
–partitions:指定当前创建的kafka分区数量,默认为1个
–topic:设置主题名字
2.查看主题状态
cmd进入 bin/windows文件夹:运行命令
kafka-topics.bat –describe –zookeeper 127.0.0.1:2182,127.0.0.1:2183,127.0.0.1:2184/kafka –topic sbKafka
结果信息字段含义:
1 Partition: 分区
2 Leader : 负责读写指定分区的节点
3 Replicas : 复制该分区log的节点列表
4 Isr : “in-sync” replicas,当前活跃的副本列表(是一个子集),并且可能成为Leader
四.kafka生产者生产消息
cmd进入 bin/windows文件夹:运行命令 kafka-console-producer.bat –broker-list
127.0.0.1:9092 –topic sbKafka 然后输入消息 消费者就可以消费了
五.消费者接收消息
cmd进入 bin/windows文件夹:运行命令
kafka-console-consumer.bat –zookeeper 127.0.0.1:2182,127.0.0.1:2183,127.0.0.1:2184/kafka –from-beginning –topic sbKafka 可以在Producer终端上输入字符串消息行,就可以在Consumer终端上看到消费者消费的消息内容。
六.kafka部分名词解释
Broker:Kafka节点,一个Kafka节点就是一个broker,多个broker可以组成一个Kafka集群。
Topic:一类消息,消息存放的目录即主题,例如pageview日志、click日志等都可以以topic的形式存在,Kafka集群能够同时负责多个topic的分发。
Partition:topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列
Segment:partition物理上由多个segment组成,每个Segment存着message信息 Producer :
生产message发送到topic Consumer : 订阅topic消费message, consumer作为一个线程来消费
Consumer Group:一个Consumer Group包含多个consumer, 这个是预先在配置文件中配置好的。
各个consumer(consumer 线程)可以组成一个组(Consumer group ),
partition中的每个message只能被组(Consumer group ) 中的一个consumer(consumer 线程 )
消费,如果一个message可以被多个consumer(consumer 线程 ) 消费的话,
那么这些consumer必须在不同的组。
Kafka不支持一个partition中的message由两个或两个以上的consumer thread来处理,
即便是来自不同的consumer group的也不行。
它不能像AMQ那样可以多个BET作为consumer去处理message,
这是因为多个BET去消费一个Queue中的数据的时候,由于要保证不能多个线程拿同一条message,
所以就需要行级别悲观锁(for update),这就导致了consume的性能下降,吞吐量不够。
而kafka为了保证吞吐量,只允许一个consumer线程去访问一个partition。
如果觉得效率不高的时候,可以加partition的数量来横向扩展,
那么再加新的consumer thread去消费。这样没有锁竞争,充分发挥了横向的扩展性,吞吐量极高。
这也就形成了分布式消费的概念。
至此windows下的zookeeper+kafka集群搭建成功