#作者:程宏斌

文章目录

  • 一、前言
  • 二、问题描述
  • 三、定位过程
  • 四、问题根因
  • 五、解决方案
    • 根本解决方案
    • 应急处理方案
    • 调大参数可能出现的问题
  • 六、总结
    • 为什么超出会报错
    • 官方对于jute.maxbuffer的解释
    • 注意事项
    • 官方建议

一、前言

在分布式系统中,ZooKeeper作为关键的协调服务,承担着数据存储与状态同步的任务。然而,在实际运行过程中,可能会遇到由于jute.maxbuffer参数配置不当而导致的启动异常问题。本报告旨在分析jute.maxbuffer相关问题导致的启动异常,包括其产生的原因、具体错误表现及排查思路,并提供有效的解决方案,以确保ZooKeeper服务的稳定运行。

二、问题描述

问题描述:
Unable to load database on disk java.io.IOException: Unreasonable length=2429535
问题导致的zookeeper启动异常的问题。
在这里插入图片描述

三、定位过程

通过排查日志可以发现Zookeeper在加载磁盘上的数据库时遇到异常。
具体的错误信息是Unreasonable length=2429535,ZooKeeper在加载数据库时遇到了jute.maxbuffer限制的问题。当前jute.maxbuffer的默认大小是1MB(1048575字节,官方指定),但日志中显示的长度2429535远超此值,出现Unreasonable length问题,导致zookeeper节点异常。

四、问题根因

在查看日志时,可以发现那个会话存在异常大量的ZNode节点(会有ID)。
然后查看具体的数据,看哪个节点数据异常,正常数据存放临时ZNode节点。当ZooKeeper关闭会话(CloseSession)时,会自动清理所有关联的临时ZNode,从而在事务日志中记录相应的删除操作。由于这些事务数据的总大小超过了1MB,导致无法同步至Follower节点,最终触发当前ZooKeeper节点的异常退出,进而引发集群重新选举Leader

五、解决方案

根本解决方案

1、需要排查ZNode节点数据过大的原因,并制定相应的处理方案。(需要研发确认)
2、规范zookeeper使用,严格按照官方要求使用。
3、将数据拆分到多个会话中,以避免单个会话关闭时触发大量临时节点删除,从而导致 ZooKeeper 产生过大的事务日志。(需要研发确认)
4、为不同业务分配独立的 ZNode,避免多个业务共享同一个大节点,从而降低数据量过大带来的风险。(需要研发确认)

应急处理方案

zookeeper的-DmaxBufferSize调大,具体调大到多少,需要看日志报错超出的大小。

在这里插入图片描述

调大参数可能出现的问题

可能会导致额外的延迟(LatencySpikes),降低吞吐量(Throughput)。
可能会使Leader与Follower之间的同步时间变得不可预测,并可能导致超时(Timeout),进而使选举仲裁节点变得不稳定。

六、总结

为什么超出会报错

1)zookeeper启动的时候会加载datalog(快照日志)进行内存数据恢复,zookeeper的快照日志是按照行记录的,在读取的时候会判断record的大小是否大于jute.maxbuffer(默认1M)。超过默认值1M,zookeeper将无法启动。
2)在closeSession写入数据的时候也是会判断节点数据大小是否大于jute.maxbuffer。
3)当一个客户端建立了很多的临时节点时,在进行closeSession的时候会把所有的临时节点的path集中在一起写到快照日志的record(因为closeSession时是需要删除所有临时节点的)。这时候record很大,超过1MB,就会超过jute.maxbuffer。造成zookeeper服务端报错。

官方对于jute.maxbuffer的解释

https://zookeeper.apache.org/doc/r3.6.3/zookeeperAdmin.html

在这里插入图片描述
官方翻译如下:
非安全选项
以下选项在特定情况下可能会有所帮助,但使用时需谨慎。每个选项的潜在风险将在说明其功能的同时进行解析。
jute.maxbuffer(Java系统属性:jute.maxbuffer)
此选项仅能通过Java系统属性进行配置,且无zookeeper前缀。它用于指定ZNode数据存储的最大大小,单位为字节。默认值为0xfffff(1,048,575字节,即接近1MB)。

注意事项

该属性必须在所有ZooKeeper服务器端和客户端上保持一致,否则可能会导致异常问题。
客户端jute.maxbuffer > 服务器端jute.maxbuffer:
当客户端尝试写入的数据大小超出服务器端的jute.maxbuffer限制时,服务器会报错 java.io.IOException: Len error。
客户端jute.maxbuffer < 服务器端jute.maxbuffer:
当客户端尝试读取的数据大小超出自身的jute.maxbuffer限制时,客户端会报错 java.io.IOException: Unreasonable length 或Packet len is out of range!

官方建议

ZooKeeper设计初衷是存储KB级别的数据,因此不建议在生产环境中将jute.maxbuffer调整为超过默认值,原因如下:
大体积ZNode会导致意外的延迟波动,影响吞吐量,降低整体性能。
大体积ZNode使Leader与Follower之间的同步时间变得不可预测,可能出现不同步或超时问题,进而导致集群不稳定。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/92603.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/92603.shtml
英文地址,请注明出处:http://en.pswp.cn/web/92603.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java基础十三: List

目录 1.Java LinkedList 的高级应用与示例 1.1 LinkedList的基本使用 基本操作示例 1.2 LinkedList独有的方法 特定方法示例 1.3 队列模式&#xff08;先进先出&#xff09; 队列模式示例 1.4 栈模式&#xff08;先进后出&#xff09; 栈模式示例 总结 2.Java Vecto…

[机器学习]03-基于核密度估计(KDE)的鸢尾花数据集分类

关键点&#xff1a;使用核密度估计&#xff08;KDE&#xff09; 估计类别条件概率密度&#xff08;高斯核&#xff0c;带宽0.2&#xff09;采用最大后验概率&#xff08;MAP&#xff09; 决策准则进行分类程序代码&#xff1a;import random import matplotlib from sklearn.ne…

jmeter怎么实现多个请求真正的同时发送

1.首先在插件管理器Plugins Manager中搜索插件Parallel Controller&Sampler&#xff0c;勾选上对应的插件后&#xff0c;在右下角点击Apply Changes and Restart JMeter&#xff0c;安装插件2.插件安装完毕后&#xff0c;然后在线程组上面右击&#xff0c;点击添加--逻辑控…

复杂环境下车牌识别准确率↑29%:陌讯动态特征融合算法实战解析

原创声明本文为原创技术解析&#xff0c;核心技术参数与架构设计引用自《陌讯技术白皮书》&#xff0c;转载需注明来源。一、行业痛点&#xff1a;车牌识别的现实挑战在智慧交通、停车场管理等场景中&#xff0c;车牌识别作为关键技术环节&#xff0c;长期面临多重环境干扰。据…

Express中间件和路由及响应方法

1.中间件分类 应用程序级别中间件 通过 app.use() 或 app.METHOD()&#xff08;如 app.get&#xff09;绑定的中间件&#xff0c;作用于整个应用程序。例如 记录请求日志、解析请求体等全局功能。例如&#xff1a; app.use((req, res, next) > {console.log(Request URL:…

Dokcer创建中间件环境

简而言之&#xff0c;用docker来搞中间件环境比价好使&#xff0c;不用关心各种环境了 rabbitmqsudo docker run -d \--name rabbitmq \-p 5672:5672 \-p 15672:15672 \rabbitmq:3.8-managementredis 5.0.3 docker start my-redisdocker run --name my-redis -d -p 6379:6379 \…

Linux高级编程-文件操作

1.Linux下的文件类型7种文件类型&#xff1a;b 块设备文件 -------> 存储类设备&#xff08;硬盘&#xff09; c 字符设备文件 ------->如输入输出设备&#xff08;鼠标键盘显示器...&#xff09; d 目录文件 ------->文件夹 - 普通文件 -------&g…

web:vue中import *** from 和import {***} from的区别

在Vue.js中,import语句用于导入模块、组件或变量等。使用带花括号{}和不带花括号的区别主要在于导入的内容是具名导出(named exports)还是默认导出(default export)。 默认导入 (Default Import) - 不带花括号 import Vue from vue; import MyComponent from ./MyCompone…

Mysql如何优化my.conf配置文件?

优化 MySQL 的 my.cnf 配置文件&#xff0c;可以显著提升数据库性能&#xff0c;特别是在高并发或大数据量场景下。以下是优化 my.cnf 的方法和建议&#xff0c;涵盖 常见配置项、参数说明 和 优化技巧。1. 优化前的准备工作在修改 my.cnf 之前&#xff0c;需了解以下内容&…

Cherryusb UAC例程对接STM32内置ADC和DAC播放音乐和录音(上)=>TIM+DAC+ADC+DMA正弦波回环测试

0. 概述 文本目标基于Cherryusb官方例程audio_v1_mic_speaker_multichan_template.c&#xff0c;底层对接STM32的内置ADC和DAC&#xff0c;实现录音和播放。通过电脑播放歌曲&#xff0c;板子发出声音。通过电脑录音机开启录音&#xff0c;板子作为麦克风采集声音&#xff0c;…

数模个人笔记

写在前面&#xff1a;不建议观看&#xff0c;会烂尾的1.马氏链&#xff1a;状态空间指的是随机变量的取值范围&#xff0c;xi称为一个状态&#xff0c;应用背景在现在的条件下下一状态发生的概率&#xff0c;比如退火&#xff0c;他的条件概率可化简为&#xff1a;且nm时刻的概…

Spring Boot自定义Starter:从原理到实战全解析

1. 背景与需求1.1 什么是Starter&#xff1f; Spring Boot的起步依赖&#xff08;Starter&#xff09;是一种特殊的依赖描述符&#xff0c;用于简化Spring应用的依赖管理和自动配置。官方文档将Starter定义为“一组方便的依赖描述符”&#xff0c;开发者只需引入对应的Starter&…

安宝特方案丨工业AR+AI质检方案:致力于提升检测精度与流程效率

据IDC预测&#xff0c;2025年中国工业AI质检市场规模将达62亿元&#xff0c;年复合增长率28.5%&#xff0c;新能源、消费电子、高端装备三大领域贡献超70%市场份额。这一数据印证了AI质检已从可选技术升级为制造业降本增效的生存刚需。当前制造业质检环节正面临&#xff1a;精度…

AudioLLM

参考链接&#xff1a;https://mp.weixin.qq.com/s/cscrUn7n_o6PdeQRzWpx8g 视频教程&#xff1a;https://www.bilibili.com/video/BV1LGbozkEDY 模型代码&#xff1a;https://github.com/boson-ai/higgs-audio 如果是两个模型加在一起&#xff1a;一个语言模型&#xff0c;一个…

基于 CEP 引擎的算法拆单与调度实践—基础篇

在金融市场中&#xff0c;大额订单的一次性交易可能会对市场价格产生较大冲击&#xff0c;导致交易成本增加。例如&#xff0c;大额买入订单可能会迅速推高股价&#xff0c;使后续买入成本上升&#xff1b;大额卖出订单则可能打压股价&#xff0c;造成资产贱卖。拆单算法通过将…

开源 C# TCP 通信框架 SocketDJ 发布:轻量、免费、可扩展

前言市面上的网络通信框架琳琅满目&#xff0c;功能强大者有之&#xff0c;但不少都存在功能闭源、商业收费、学习成本高等问题。作为一名热爱底层技术的开发者&#xff0c;我始终相信&#xff1a;基础通信能力应当简单、透明且免费。最近正好有项目需求&#xff0c;索性动手从…

移动机器人路径规划中ROS2中间件性能的研究综述

导读&#xff1a; 随着移动机器人在工业自动化、特种作业及智能服务领域的广泛应用&#xff0c;其路径规划能力越来越依赖机器人操作系统ROS2的通信性能。ROS2通过去中心化架构与数据分发服务中间件显著提升了系统可靠性&#xff0c;但动态复杂环境中路径规划对通信延迟、带宽…

【昇腾】Atlas 500 A2 智能小站制卡从M.2 SATA盘启动Ubuntu22.04系统,重新上电卡死没进系统问题处理_20250808

一、问题背景 Atlas 500 A2智能小站是华为基于20T 12G版本的Atlas 200I A2加速模块开发的面向广泛边缘应用场景的轻量边缘设备&#xff0c;具有超强计算性能、配置灵活、体积小、支持温度范围宽、环境适应性强、易于维护 管理等特点的产品。Atlas 500 A2智能小站主要应用在智能…

sigaction 中 sa_handler = SIG_IGN 的深度解析与应用实践

sigaction 中 sa_handler SIG_IGN 的深度解析与应用实践 核心意义&#xff1a;主动忽略信号 当 sa_handler 设置为 SIG_IGN 时&#xff0c;内核将完全丢弃指定的信号&#xff0c;不会&#xff1a; 执行默认行为调用任何处理函数中断进程的正常执行 这与 SIG_DFL&#xff08;默…

【LLM实战|langchain、qwen_agent】RAG高级

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?type=blog 0. 前言 RAG高级 1. RAG 高效召回方法 合理设置TOP-K 改进索引算法 -知识图谱 引入重排序 重排序模型 BGE-Rerank Cohere Rerank 混合检索 向量索引+关键词索引…