zookeeper
文章平均质量分 57
曹朋羽
学无止境
展开
-
zookeeper应用之分布式队列
curator对优先队列(DistributedPriorityQueue)、延迟队列(DistributedDelayQueue)都有对应的实现,有兴趣的自己看吧。然后是消息的consumer,这里肯定是使用的watcher。这里有个问题有没有发现,在初始化queue的时候需要指定consumer,那岂不是只能同一个程序中生产消费,何来的分布式?这样在启动测试程序在,consumer的consumeMessage方法就会收到queue.put的消息。这里设置了数据,然后具体的数据消费在下一步。原创 2023-11-20 16:16:15 · 888 阅读 · 0 评论 -
zookeeper应用之leader选举
否则监听自己前一个节点的变化,当前一个节点删除时,再次判断自己是否是最小的节点,是则成为领导者否则继续监听新的前一节点的变化,重复上面的判断操作。在分布式系统中,ZooKeeper可用于实现领导者选举(leader election)功能,确保集群中的多个节点能够协调地选举出一个领导者来负责协调整个集群的工作。整个选举的过程大家是不是感觉有点熟悉,没错就是和前面的分布式锁的原理大致是一致的。2、当节点创建完临时顺序节点后,查询/leader下所有子节点,找到自己创建的节点的顺序号,也就是自己的位置。原创 2023-11-16 16:39:38 · 92 阅读 · 0 评论 -
zookeeper应用之分布式锁
在节点X下创建临时顺序节点,getChildren()获取节点X的所有子节点,判断当前节点是否是第一个子节点,如果是就获取锁成功了,如果不是,那么就监听当前节点的前一个节点删除watcher事件,在前一节点删除之前当前线程需要阻塞等待,前一节点删除在watcher事件处理通知当前线程获取锁成功。在分布式系统中多个服务需要竞争同一个资源时就需要分布式锁,这里使用zookeeper的临时顺序节点来实现分布式锁。定义一个竞争资源stock,多个线程对该资源进行操作,一次只允许一个线程进行操作。原创 2023-11-13 16:33:48 · 492 阅读 · 0 评论 -
zookeeper应用之分布式屏障
这里定义了5个屏障,所有的程序会在barrier.enter()处阻塞等待,直到所有的线程都执行到该方法才会继续执行。每个enter的线程创建了一个子节点,barrier判断达到屏障数量时自动创建一个ready节点。这个时候就需要一个屏障来阻止节点的处理。后面leave()方法离开屏障点又是一个阻塞点,屏障会等到所有的参与者都调用leave方法后才会通知所有参与者继续执行。3、如果屏障存在,则需要watcher屏障节点的删除事件,当屏障节点删除当前程序才可继续,删除之前当前程序一直阻塞等待。原创 2023-11-09 14:27:59 · 468 阅读 · 0 评论 -
zookeeper集群部署
2888和3888是集群间通信使用的端口,客户端连接还是用clientPort配置的端口。在192.168.1.100服务器 echo 1 > /data/app/zk/data/myid。在192.168.1.101服务器 echo 2 > /data/app/zk/data/myid。在192.168.1.102服务器 echo 3 > /data/app/zk/data/myid。然后在数据目录依次创建 myid文件。zookeeper的集群部署方式感觉是接触到的中间件集群搭建相对来说比较简单的了。原创 2023-11-08 14:15:37 · 187 阅读 · 0 评论 -
zookeeper ACL权限控制
可以看到权限类型控制的粒度还是比较细的。前4种对应zookeeper对节点的4种接口操作。最后一个admin权限可以对节点ACL进行设置。ACL对象创建需要两个参数:权限和认证信息。权限可以从ZooDefs.Perms对象使用枚举值,认证信息可以通过Id对象指定。每个节点都可以定义自己的ACL,用来控制客户端对节点的访问。ip:该模式基于客户端的IP地址对访问进行限制。这里注意ZooDefs.Ids.AUTH_IDS方式默认会被客户端设置的认证信息取代。ADMIN(可设置节点的ACL)原创 2023-11-06 09:35:02 · 307 阅读 · 0 评论 -
zookeeper节点类型
如果会话过期或断开连接,节点会自动删除。临时节点通常用于表示分布式系统中的客户端或工作节点,例如队列或锁。顺序节点与持久节点类似,但其名称后面附加了一个序号,使得节点名称唯一。这些是Zookeeper中最常见的一种节点类型,当创建一个持久类型节点时,该值会一直存在zookeeper中,直到被显式删除或被新值覆盖。zookeeper的api将抽象出一个CreateMode枚举对象来表示不同的节点类型。一般顺序节点都会有一层父节点,然后通过调用父节点的所有子节点来获取所有的顺序节点。顺序节点自动会加后缀。原创 2023-11-03 10:46:50 · 521 阅读 · 0 评论 -
java连接zookeeper
curator-framework是基础的依赖,一些特定的使用方式需要添加不同的依赖,有curator-recipes、curator-x-discovery、curator-x-async等。提供了连接重试、分布式锁、选举、队列等多种实际场景的用例。这里先简单搞个使用例子。zkclient对节点数据的操作进行了序列化, 这里先准备一个string类型的序列化类。zkClient封装了zookeeper的官方api,简化了一些繁琐的操作,并提供了一些额外的功能,提高了开发效.原创 2023-11-01 11:05:34 · 1324 阅读 · 0 评论 -
zookeeper安装配置
zookeeper的目录结构和tomcat很像,conf目录是配置文件,bin目录是一些维护脚本。进入解压conf目录,复制zoo_sample.cfg重命名为zoo.cfg作为配置文件。tickTime:指定ZooKeeper中的基本时间单位(以毫秒为单位),用于调节心跳和超时时间等。clientPort:指定ZooKeeper服务器监听的客户端连接端口,默认为2181。可以从zookeeper官网下载对应安装包,这里从清华镜像网站下载,速度相对快一些。中间输入命令也支持tab补全。原创 2023-10-31 14:19:31 · 160 阅读 · 0 评论