在同一台机器上搭建zk集群和kfaka集群。
一.Zookeeper集群搭建
1.创建zk安装目录
[root@master ~]# mkdir -p /opt/server/zookeeper/server1/data
[root@master ~]# mkdir -p /opt/server/zookeeper/server1/dataLog
[root@master ~]# mkdir -p /opt/server/zookeeper/server2/data
[root@master ~]# mkdir -p /opt/server/zookeeper/server2/dataLog
[root@master ~]# mkdir -p /opt/server/zookeeper/server3/data
[root@master ~]# mkdir -p /opt/server/zookeeper/server3/dataLog
2.下载zk-3.3.6,并解压到上述三个目录中
#下载
[root@master ~]# wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.3.6/zookeeper-3.3.6.tar.gz
#解压
[root@master ~]# tar -zxvf zookeeper-3.3.6.tar.gz -C /opt/server/zookeeper/server1
[root@master ~]# tar -zxvf zookeeper-3.3.6.tar.gz -C /opt/server/zookeeper/server2
[root@master ~]# tar -zxvf zookeeper-3.3.6.tar.gz -C /opt/server/zookeeper/server3
3.修改三个zk配置文件
[root@master ~]# cd /opt/server/zookeeper/server1/zookeeper-3.3.6/conf
[root@master conf]# cp -rf zoo_sample.cfg zoo.cfg
[root@master conf]# vim zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
clientPort=2181 #2182,2183
dataDir=/opt/server/zookeeper/server1/data #server2和server3依次修改目录即可
dataLogDir=/opt/server/zookeeper/server1/dataLog #server2和server3依次修改目录即可
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
#创建zk的id编号
[root@master conf]# echo "1" > /opt/server/zookeeper/server1/data/myid
[root@master conf]# echo "2" > /opt/server/zookeeper/server2/data/myid
[root@master conf]# echo "3" > /opt/server/zookeeper/server3/data/myid
4.依次开启三个zk
[root@master conf]# cd /opt/server/zookeeper/server1/zookeeper-3.3.6/
[root@master zookeeper-3.3.6]# bin/zkServer.sh start
[root@master zookeeper-3.3.6]# cd /opt/server/zookeeper/server2/zookeeper-3.3.6/
[root@master zookeeper-3.3.6]# bin/zkServer.sh start
[root@master zookeeper-3.3.6]# cd /opt/server/zookeeper/server3/zookeeper-3.3.6/
[root@master zookeeper-3.3.6]# bin/zkServer.sh start
5.客户端登录验证
[root@master zookeeper-3.3.6]# bin/zkCli.sh -server master:2181
二.Kafka集群搭建
1.创建kafka安装目录
[root@master ~]# mkdir -p /opt/server/kafka/kafka1/kafkaLog
[root@master ~]# mkdir -p /opt/server/kafka/kafka2/kafkaLog
[root@master ~]# mkdir -p /opt/server/kafka/kafka3/kafkaLog
2.下载zk-3.3.6,并解压到上述三个目录中
[root@master ~]# wget http://apache.fayea.com/kafka/0.10.2.2/kafka_2.11-0.10.2.2.tgz
[root@master ~]# tar -zxvf kafka_2.11-0.10.2.2 -C /opt/server/kafka/kafka1
[root@master ~]# vi /opt/server/kafka/kafka1/kafka_2.11-0.10.2.2/config/server.properties
broker.id=0 #broker.id=1、broker.id=2
log.dirs =/opt/server/kafka/kafka1/kafkaLog
listeners=PLAINTEXT://master:9092 #port=9093、port=9094
port=9092 #port=9093、port=9094
zookeeper.connect=master:2181,master:2182,master:2183
message.max.byte=5242880
default.replication.factor=2
replica.fetch.max.bytes=5242880
[root@master ~]# vi /opt/server/kafka/kafka1/kafka_2.11-0.10.2.2/config/consumer.properties
zookeeper.connect=master:2181,master:2182,master:2183
group.id=logGroup
同样解压到kafka2、kafka3中,更改配置。唯一跟kafka1的区别就是broker.id和port。
3.开启服务
[root@master ~]# cd /opt/server/kafka/kafka1/kafka_2.11-0.10.2.2/bin
[root@master ~]# ./kafka-server-start.sh ../config/server.properties &
[root@master ~]# cd /opt/server/kafka/kafka2/kafka_2.11-0.10.2.2/bin
[root@master ~]# ./kafka-server-start.sh ../config/server.properties &
[root@master ~]# cd /opt/server/kafka/kafka3/kafka_2.11-0.10.2.2/bin
[root@master ~]# ./kafka-server-start.sh ../config/server.properties &
三.Kafka基本应用
1.创建主题
让我们创建一个名为“test”的主题,它只包含一个分区,只有一个副本:
1 |
|
如果我们运行list topic命令,我们现在可以看到该主题:
1 2 |
|
或者,您也可以将代理配置为在发布不存在的主题时自动创建主题,而不是手动创建主题。
2.发送一些消息
Kafka附带一个命令行客户端,它将从文件或标准输入中获取输入,并将其作为消息发送到Kafka集群。默认情况下,每行将作为单独的消息发送。
运行生产者,然后在控制台中键入一些消息以发送到服务器。
1 2 3 |
|
3.启动消费者
1 2 3 |
|
4.设置多代理集群(具体配置如上方:二.kafka配置)
现在创建一个复制因子为3的新topic:
1 |
|
现在我们有一个集群,我们怎么知道哪个Agent正在做什么?要查看运行“describe topics”命令:
1 2 3 |
|
这是输出的解释。第一行给出了所有分区的摘要,每个附加行提供有关一个分区的信息。由于我们只有一个分区用于此topic,因此只有一行。
- “leader”是负责给定分区的所有读取和写入的节点。每个节点将成为随机选择的分区部分的领导者。
- “replicas”是复制此分区日志的节点列表,无论它们是否为领导者,或者即使它们当前处于活动状态。
- “isr”是“同步”复制品的集合。这是副本列表的子集,该列表当前处于活跃状态并且已经被领导者捕获。
请注意示例中,节点1是该topic的唯一分区的领导者。
5.测试容错性
broker1充当leader,所以让我们kill它:
1 2 3 |
|
leader已切换到其中一个从属节点,节点1不再位于同步副本集中:
1 2 3 |
|
但即使最初接受写入的leader已经失败,这些消息仍可供消费。