记录ZooKeeper 写入大文件后处理的经过

问题描述:

在一次测试过程中,ZK写入了70W+节点,总数据量70多M,此时想去删除,尝试了下面几个方案:

方案1.利用代码原生的方法进行删除

CuratorFramework的deletingChildrenIfNeeded进行删除,发现报错

java.io.IOException: Packet len8854970 is out of range!

查看相关代码:


protected final ByteBuffer lenBuffer = ByteBuffer.allocateDirect(4);
protected ByteBuffer incomingBuffer = lenBuffer;

protected void readLength() throws IOException {
    int len = incomingBuffer.getInt();
    if (len < 0 || len >= ClientCnxn.packetLen) {
        throw new IOException("Packet len" + len + " is out of range!");
    }
    incomingBuffer = ByteBuffer.allocate(len);
}

public static final int packetLen = Integer.getInteger("jute.maxbuffer", 4096 * 1024);


默认的单个package的长度是1M,需要设置更大的参数。方案1失败,于是有了方案二:

方案二:Java客户端手动设置单个包的大小

static {
    System.setProperty("jute.maxbuffer", Integer.MAX_VALUE + "");
}

通过上面的代码可以看出最后需要转化为整型,所以我设置了整型的最大值Integer.MAX_VALUE,满心欢喜的等待结果,可惜事与愿违,还是报了下面的错误

Java.io.IOException: Unreasonable length = 1486176

虽然有点不开心,不过问题总算朝着正确的方向推进,针对这个报错,调整了这个参数大小

方案三,修正参数:

static { System.setProperty("jute.maxbuffer", (Integer.MAX_VALUE -1024) + ""); }

这次终于正确的跑起来了

其他尝试的方案:

直接使用ZKCLI进入,也会报超时的错误

再或者可以手动初始化整个ZK

系统设置的话需要再JVAA_OPTS上所有的zk server上都进行设置

相关JIRA:

https://issues.apache.org/jira/browse/ZOOKEEPER-1295

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值