使用zkcopy从Zookeeper复制数据时出现ConnectionLoss连接丢失错误问询
错误根因排查
- 单事务大小超过Zookeeper限制:从日志可看到本次需要复制的节点总量为12497个,zkcopy默认会将全量节点写入操作合并为单个大事务提交。Zookeeper服务端默认
jute.maxbuffer参数限制单请求大小为1MB,大事务包超过阈值后,目标端Zookeeper会主动断开客户端连接。而读取阶段仅逐批拉取源端节点数据,无大事务操作,因此运行正常。 - 会话超时:大事务提交耗时超过zkcopy默认的Zookeeper客户端会话超时时间,会话被目标端回收触发断连。
- 小概率为目标端Zookeeper服务负载过高、网络瞬时波动导致的连接中断,若仅单次报错可重试后再排查。
对应解决方案
- 拆分提交事务:执行zkcopy时添加
--transaction-size参数调小单次事务提交的节点数,将大事务拆分为多个小事务提交,参考命令:
java -jar target/zkcopy.jar --source xxxx:2181/clickhouse --target xxxx:2181/clickhouse --transaction-size 100
- 调大单请求大小限制:若确实需要提交大事务,可修改目标端Zookeeper启动参数,添加
-Djute.maxbuffer=4194304(将单请求上限调整为4MB,可根据实际节点总量调整),重启目标端Zookeeper服务后再执行复制操作。 - 延长会话超时时间:执行复制命令时添加
--timeout参数调长客户端会话超时时间,避免提交耗时过长导致会话过期,示例:
java -jar target/zkcopy.jar --source xxxx:2181/clickhouse --target xxxx:2181/clickhouse --timeout 30000
- 减少写入节点总量:你的操作开启了目标端旧节点删除配置,可先手动清理目标端
/clickhouse路径下的无效节点,降低需要写入的节点总量,进一步降低事务大小。
内容的提问来源于stack exchange,提问作者Yanpeng
相关产品推荐
相关产品推荐

