首页 > 编程语言 >zookeeper的znode节点过多无法通过zkCli.sh移除节点

zookeeper的znode节点过多无法通过zkCli.sh移除节点

时间:2024-02-29 18:02:02浏览次数:27  
标签:args zookeeper System queue 移除 println 节点

背景描述:zookeeper的一个目录下的znode节点过多,导致在执行ls 和rmr命令的时候,直接终止会话退出,无法递归删除下面的子节点,具体情况如下(生产环境的zookeeper是clickhouse的元数据管理集群,有一个故障是clickhouse副本同步堆积问题),接下来的操作需要知道这个子节点中的znode有序节点是怎么命名的,一般都是‘节点名称-000000xxxxxx’,由于无法获取子节点的列表,所以需要通过循环删除节点找到,大概的区间,然后再逐条尝试删除node

这边写了一个jave的操作代码如下

import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;

import java.io.IOException;

public class DeleChildNode {
    public static void main(String[] args) throws IOException, InterruptedException, KeeperException {
        if (0 == args.length) {
            System.out.println("没有zkurl和zkpath参数,自动退出,参数样例:127.0.0.1:2181 /clickhouse/2/table/host/replices/queue/ 10000 9999999999 10001");
            System.exit(0);
        }
        System.out.println("zkurl:" + args[0] + "\tzkpath:" + args[1] + "\t起始位置:" + args[2] + "\t结束位置:" + args[3] + "\t步长:" + args[4] );
        ZooKeeper zk = new ZooKeeper(args[0], 500000, new Watcher() {
            // 监控所有被触发的事件
            public void process(WatchedEvent event) {
                // dosomething
                System.out.println("成功建立监听连接。。。");
            }
        });
        String t;
        int start = Integer.parseInt(args[2]);
        int end = Integer.parseInt(args[3]);
        int length = Integer.parseInt(args[4]);
        String queue;
        String[] zore = {"0", "00", "000", "0000", "00000"};
        for (int i = start; i < end; i = i + length) {
            try {
                t = i + "";
                queue = "queue-" + zore[10 - t.length() - 1] + t;
//                System.out.println(args[1] + queue);
                zk.delete(args[1] + queue, -1);
                System.out.println("success:"+args[1] + queue);
            } catch (Exception e) {
                System.out.println("fail:"+e.getMessage());
            }
        }
        zk.close();
    }
}

通过上面的这个运行的日志找到删除成功的序列号,定位start 和 end结束点,然后逐个删除

ps备注:目前压测了一下这个zookeeper,一个目录下有25w~35W的节点目录,获取这个目录下的这个子目录就会有问题,这个有大佬知道是什么问题吗?

 

标签:args,zookeeper,System,queue,移除,println,节点
From: https://www.cnblogs.com/zyp87/p/18044972

相关文章

  • 自动移除Typora多余图片
    1#-*-coding:utf-8-*-2#@Time:8/25/20207:40PM3#@Author:OhiyoX4#@FileName:MDImgScripts.py5#@Software:PyCharm6#@Blog:https://blog.ohiyox.in/7#@Desc:1、用于自动清除typora写作后多余的图片,简洁文件夹8#......
  • kafka节点故障恢复原理
    Kafka的LEO和HWLEOLEO是Topic每一个副本的最后的偏移量offset+1HW(高水位线)HighWaterMark是所有副本中,最小的LEOFollower副本所在节点宕机由于数据同步的时候数据是先写入Leader,然后Follower副本向Leader同步只要Leader和其他的Follower副本继续往前存储数据,挂掉的节点在......
  • FastAPI系列:路由之节点元数据参数说明
    节点元数据参数说明#拿app.get()方法的参数来说明,其他的差不多类似defget(self,path:str,*,response_model:Optional[Type[Any]]=None,status_code:Optional[int]=None,tags:Optional[List[Union[str,Enum]]]......
  • python移除/删除非空文件夹/目录的最有效方法是什么?
    1.标准库参考:shutil.rmtree。根据设计,rmtree在包含只读文件的文件夹树上失败。如果要删除文件夹,不管它是否包含只读文件,请使用importshutilshutil.rmtree('/folder_name',ignore_errors=True)2.从os.walk()上的python文档中:#Deleteeverythingreachablefromthedirec......
  • 203. 移除链表元素C
    写了个递归/***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/structListNode*delect(structListNode*head,intx){if(!head)returnNULL;if(head->val==x){structListNode*......
  • centos7 安装zookeeper
    zookeeper单机版安装在官网下载apache-zookeeper-3.9.1-bin.tar.gz解压tar-zxvfapache-zookeeper-3.9.1-bin.tar.gz备注zk需要依赖环境变量中的JAVA_HOME,所以需要提前安装好检查JAVA_HOMEecho$JAVA_HOME修改配置文件cdzookeeper-3.9.1/confmvzoo_sa......
  • 在K8S中,worke节点启动阶段包括什么?
    在Kubernetes(K8S)中,Worker节点启动阶段大致包括以下几个关键步骤:系统初始化:Worker节点操作系统启动,加载基础系统服务和配置。安装必备软件,如Docker或containerd作为容器运行时环境。kubelet启动:kubelet是Kubernetes在每个节点上的代理程序,它会在启动时加载其配置文件(通......
  • 代码随想录 | 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.0
    LeetCode:24.两两交换链表中的节点-力扣(LeetCode)思路:第一步:两两交换要考虑循环什么时候退出,当cur指针.next是null是就到尾部了,同理,链表不是奇数就是偶数,cur.next.next是空也是。第二步循环条件判断完了接下来要实现交换,如图所示,按步骤来就好,提前将1,2,3存好,接下来按图......
  • 27. 移除元素C
    原本我想用头尾交换的双指针的,但是又要判断头尾是否相等,感觉不干净的感觉。就换成了类似筛选的前后双指针。一个是指向要放的位置,一个指向查看的位置。intremoveElement(int*nums,intnumsSize,intval){inti=0,j=0;while(j<numsSize){if(nums[j]!=va......
  • 在K8S中,worke节点如何加入K8S高可用集群?
    在Kubernetes(K8S)中,将一个Worker节点加入到高可用集群的过程与加入单Master集群大体相似,但需要注意的是,高可用集群中的Master通常是通过负载均衡器暴露服务端点的,这样无论哪个Master节点宕机,Worker节点都可以连接到活跃的Master节点。以下是加入高可用Kubernetes集群的具体步骤:1.......