为什么 Kafka 依赖 ZooKeeper?
下面ZooKeeper基本介绍:
1、基本功能
ZooKeeper 为分布式系统提供了一种配置管理的服务:集中管理配置,即将全局配置信息保存在 ZooKeeper 服务中,方便进行修改和管理,省去了手动拷贝配置的过程,同时还保证了可靠和一致性。
2、命名服务
在分布式系统中,经常需要对应用或者服务进行统一命名,便于识别和区分开来,而 ZooKeeper 就提供了这种服务。
3、分布式锁
锁应该都不陌生,没有用过也听说过,在多个进程访问互斥资源的时候,需要加上一道锁。在分布式系统中,分布式程序分布在各个主机上的进程对互斥资源进行访问时也需要加锁。
分布式锁应当具备以下条件:
- 在分布式系统环境下,一个方法在同一时间只能被一个机器的一个线程执行;
- 高可用的获取锁与释放锁;
- 高性能的获取锁与释放锁;
- 具备可重入特性(可理解为重新进入,由多于一个任务并发使用,而不必担心数据错误);
- 具备锁失效机制,防止死锁;
- 具备非阻塞锁特性,即没有获取到锁将直接返回获取锁失败。
4、集群管理
在分布式系统中,由于各种各样的原因,例如机器故障、网络故障等,导致集群中的节点增加或者减少,集群中有些机器需要感知到这种变化,然后根据这种变化做出对应的决策。
我们需要知道以下几点:
- Client 表示客户端,是请求发送方,数量不限;
- Server 表示服务端,是请求接收方,数量不限;
- Client 可以连接到每个 Server,每个 Server 中的数据都是一样的;
- ZooKeeper 启动时,会从所有 Server 中选取一个作为 leader(Paxos 协议),每个 follower 都会和 leader 建立连接;
- leader 负责进行数据更新等操作,并将数据同步到 follower 中,以此实现数据一致性。
znode( ZooKeeper 的数据节点) 有四种类型 :
1)PERSISTENT(持久节点)
默认的节点类型。持久化保存的节点,创建节点的客户端与 ZooKeeper 断开连接后,该节点依旧存在 。
2)PERSISTENT_SEQUENTIAL(持久顺序节点)
所谓顺序节点,就是在创建节点时,ZooKeeper 根据创建的时间顺序给该节点名称进行编号,适合用于分布式锁、分布式选举等场景。创建时添加 -s 参数即可。
3)EPHEMERAL(临时节点)
和持久节点相反,当创建节点的客户端与 ZooKeeper 断开连接后,临时节点会自动删除,适用于心跳、服务发现等场景。创建时添加参数-e 即可。
4)EPHEMERAL_SEQUENTIAL(临时顺序节点)
顾名思义,该类节点结合了临时节点和顺序节点的特征,在创建节点时,ZooKeeper 根据创建的时间顺序给该节点名称进行编号,当创建节点的客户端和 ZooKeeper 断开连接后,节点自动删除。创建时添加 -e -s 参数即可。
ZooKeeper 实现分布式锁就是利用了临时顺序节点。
首先在 ZooKeeper 中创建一个持久节点 ParentLock,每当有客户端想要获得锁时,就在 ParentLock 下创建一个临时顺序节点,如果该节点是第一个,则获得锁,如果不是,则找到排序比它靠前的一个节点并注册 Watcher,用于监听节点是否存在。若第一个节点运行完毕,其客户端会调用指令删除该节点,或者其客户端崩溃,第一个节点也会自动删除,而第二个节点监听到该节点被删除,再经过查询确认就能获得锁了。不难发现 ZooKeeper 实现的分布式锁相当于是一个等待锁的队列,能够提升抢锁的效率,但是因为需要创建和删除节点,导致性能较低。
为什么 Kafka 依赖 ZooKeeper?_kafka依赖zookeeper_freshru的博客-CSDN博客
zooKeeper
#下载到目录usr/local下解压并且重命名wget https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.8.1/apache-zookeeper-3.8.1-bin.tar.gztar zxvf apache-zookeeper-3.8.1-bin.tar.gz#创建data目录
#修改.cfg文件
cd zookeeper
mkdir datacd conf
mv mv zoo_sample.cfg zoo.cfg
vim zoo.cfg
修改
/data路径为
/usr/local/zookeeper/data
根据需求添加端口号配置
admin.serverPort=1234# bin目录下
./zkServer.sh start # 启动,这样启动是单机启动。
./zkServer.sh close # 关闭
./zkServer.sh status # 查看状态设置开机自启
cd /etc/rc.d/init.d
vim zookeeper
#!/bin/bash
#chkconfig:2345 20 90
#description:zookeeper
#processname:zookeeper
export JAVA_HOME=/usr/local/jdk/jdk8
case $1 instart) su root /usr/local/zookeeper/bin/zkServer.sh start /usr/local/zookeeper/conf/zoo.cfg;;stop) su root /usr/local/zookeeper/bin/zkServer.sh stop;;status) su root /usr/local/zookeeper/bin/zkServer.sh status;;restart) su /usr/local/zookeeper/bin/zkServer.sh restart;;*) echo "require start|stop|status|restart" ;;
esac# 启动服务
chkconfig --add zookeeper
service zookeeper start# 进入zookeeper的目录
//启动zookeeper服务端 -指定配置文件cong/zoo.cfg
sudo ./bin/zkServer.sh --config conf start
//启动zookeeper客户端
sudo ./bin/zkCli.sh -server 127.0.0.1:2181
//查看zookeeper启动状态
./bin/zkServer.sh status# 使用zookeeper命令,测试是否启动成功
//创建节点keycreate /queue
//创建临时顺序节点
create -e -s /queue/host1
//查看创建的节点信息ls -R /queue
1、下载kafka安装包
使用kafka集成zookeeper
cd /usr/local/kafka/kafka_2.12-3.1.0/bin //启动zookeeper应用程序./zookeeper-server-start.sh ../config/zookeeper.properties如果启动报错:INFO ZooKeeper audit is disabled. 修改../config/zookeeper.properties
添加audit.enable=true然后重新启动
Apache Download Mirrors https://www.apache.org/dyn/closer.cgi?path=/kafka/3.1.0/kafka_2.12-3.1.0.tgz
将压缩文件移动到自己的softwaremv kafka_2.12-3.1.0.tgz /Users/xiansongliu/Downloads/kafka 解压压缩文件tar -zxvf kafka_2.12-3.1.0.tgz 将安装包移动到/usr/localsudo mv kafka_2.12-3.1.0 /usr/local/kafka启动kafka
./bin/kafka-server-start.sh -daemon config/server.properties
kafka消息交互
1、创建一个topic
./bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test
2、查看创建的topic
./bin/kafka-topics.sh --bootstrap-server localhost:9092 --list
消息通信
./bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test
1、在kafka服务端发送消息
./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test
2、此时客户端接收到消息
zookeeper安装教程_zookpeer安装_北漂人Java的博客-CSDN博客
mac 安装kafka教程_mac安装kafka_北漂人Java的博客-CSDN博客