升级Apache Storm至2.3.0后ZooKeeper持续报异常求助
Apache Storm从1.0.3升级至2.3.0后ZooKeeper持续抛出"Unreasonable length"异常的解决方案
问题现象
将Apache Storm从1.0.3版本升级到2.3.0并更新依赖后,ZooKeeper反复出现以下异常,无法建立正常会话:
2022-08-18 06:50:46,431 [myid:] - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@192] - Accepted socket connection from /172.17.0.1:65078 2022-08-18 06:50:46,432 [myid:] - WARN [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@362] - Exception causing close of session 0x0 due to java.io.IOException: Unreasonable length = 1600745078 2022-08-18 06:50:46,433 [myid:] - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1008] - Closed socket connection for client /172.17.0.1:65078 (no session established for client) 2022-08-18 06:50:46,540 [myid:] - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@192] - Accepted socket connection from /172.17.0.1:65080 2022-08-18 06:50:46,541 [myid:] - WARN [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@362] - Exception causing close of session 0x0 due to java.io.IOException: Unreasonable length = 1600745078 2022-08-18 06:50:46,541 [myid:] - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1008] - Closed socket connection for client /172.17.0.1:65080 (no session established for client)
根因分析
这个异常的核心原因是Storm与ZooKeeper的协议版本不兼容:
- Storm 1.0.3依赖的ZooKeeper版本通常为3.4.x早期版本,而Storm 2.3.0依赖的ZooKeeper版本已升级至3.4.14或更高(部分版本兼容3.5.x)。
- 新版Storm客户端使用的ZooKeeper协议格式,旧版ZooKeeper服务器无法正确解析,导致读取到异常的数据包长度值,进而拒绝建立会话。
解决步骤
- 升级ZooKeeper至兼容版本:根据Storm 2.3.0的官方依赖要求,将ZooKeeper升级到3.4.14或以上版本,确保协议版本匹配。
- 清理ZooKeeper旧元数据:停止ZooKeeper服务后,删除其数据目录(默认是
/var/lib/zookeeper)下的所有文件(操作前务必备份重要数据),避免旧版本元数据干扰新协议交互。 - 校验Storm配置一致性:检查所有Storm节点的
storm.yaml配置文件,确认zookeeper.servers列表正确,移除旧版本特有的配置项(如zookeeper.compression.enable等可能影响协议的参数)。 - 统一集群依赖包:确保所有Storm节点的lib目录下依赖包完全一致,禁止混合使用旧版Storm或ZooKeeper的JAR包。
内容的提问来源于stack exchange,提问作者Rishi
相关产品推荐
相关产品推荐

