解决 clickhouse jdbc 偶现 failed to respond 问题

news2024/12/24 20:28:16

背景

Clickhouse集群版本为 Github Clickhouse 22.3.5.5, clickhouse-jdbc 版本为 0.2.4。

问题表现

随着业务需求的扩展,基于Clickhouse 需要支持更多任务在期望的时效内完成,于是将业务系统和Clickhouse交互的部分都提交给可动态调整核心参数的线程池去执行,尽量可控的利用Clickhouse集群的计算资源。

然后一测试就出现了高频的异常:ru.yandex.clickhouse.except.ClickHouseUnknownException: ClickHouse exception, code: 1002, host: 192.168.1.1, port: 8123; 192.168.1.1:8123 failed to respond

搜索发现有比较多类似问题

  • clickhouse分析:clickhouse jdbc返回failed to respond问题排查
  • Retry for NoHttpResponseException
  • Issue with driver not honoring the server keep-alive timeout settings

解决经历

首先问题就指向了驱动版本, 社区在0.2.5优化了这个问题, 那就只能升级驱动版本了, 由于这个项目也是接手的,通常来说遇到性能问题,不会第一时间考虑升级依赖版本除非找到确认的依据是版本有缺陷,因为风险不可控.

但是社区还有类似问题反馈,BatchUpdateException during inserts with jdbc driver 于是直接跨多个版本升到了0.6.0

升级后使用线程池跑确实就不会出现高频的报错了,但是仍偶现有1002报错,当时加了重试逻辑,赶业务进度,测试后就上线了,但是遇到了一个不大不小的坑: Druid管理的JDBC Connection 在调用getConnection().getSchema(); 时,0.2.4版本的驱动正常返回了连接所在的数据库名,但是0.6.0返回了null,导致部分业务场景出错了,只好紧急修复了。


过了一段时间,业务又发生了扩展,要跑的任务更多了,每到高频的跑任务时,就可能会看到告警群会来几条1002的报错告警。然后开始新一轮找问题了

BatchUpdateException during inserts with jdbc driver

在这里插入图片描述由于升级驱动到0.6.0时也调整了JDBC的参数, 那时只看到了客户端的值远大于服务端的值,就只想着尽量复用连接少建立连接的开销实际上不是重点,就把客户端设置为了和服务端的 tcp_keep_alive_timeout保持一致为 290s,注意默认值是3s 部署时调整了参数 。

按这个场景来说,当客户端的一个连接到了超时的边界值时,考虑到网络延迟的开销,客户端会认为是有效的,但是服务端认为超时了,就会关闭连接, 就又会抛出1002了,如果SQL的提交是低频的就不容易出现这个情况,当有多个线程并发跑1小时以上时概率就大大增加了。

通过这个PR Validate stale connection to fix the bug: failed to respond 同时发现了项目内没有设置合理的检查连接活跃性的配置。

综上,将客户端超时调整为140s,并设置客户端检查连接策略和sql 通常默认是 select 1.

目前1002问题尚未出现

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【面试笔记】单片机软件工程师,工业控制方向(储能)

文章目录 1. 基础知识1.1 C语言笔试题1.1.1 用宏定义得到一个数组所含的元素个数1.1.2 定义函数指针从程序固定地址(0)开始执行1.1.3 volatile的含义及作用1.1.4 32位系统,整数7和-7,分别以大端和小端存储,请示意说明 1.2 嵌入式基础1.2.1 简…

知识图谱应用---智慧金融

文章目录 智慧金融典型应用 智慧金融 智慧金融作为一个有机整体,知识图谱提供了金融领域知识提取、融合、分析、推断、决策等功能,如下图所示。在场景方面,智慧金融涵盖智慧支付、智慧财富管理、智慧银行、智慧证券、智慧保险、智慧风控等诸多…

【教程】使用 Tailchat 搭建团队内部聊天平台,Slack 的下一个替代品!

前言 多人协作,私有聊天一直是团队协作的关键点,现在有很多专注于团队协作的应用和平台,比如飞书、企业微信和Slack等。这期教程将带你手把手的搭建一个在线的团队协作向聊天室,希望对你有所帮助! 本期聊天室使用TailChat作为服务…

Rust 第三方库创建和导入(cargo --lib)

前言 日常开发过程中,难免会有一些工具方法,多个项目之间可能会重复使用。 所以将这些方法集成到一个第三方包中方便后期维护和管理, 比如工具函数如果需要修改,多个项目可能每个都需要改代码, 抽离到单独的包中只需要…

esp32-c6所有配套教程

1.介绍 本文是esp32-c6所有资料的介绍 如果需要详细代码的话请访问下面这个链接 esp32-c6使用教程wifi(espidf修改成arduino)附带代码websocket,舵机,点灯【2024年】-CSDN博客 配置环境 视频教程 0-2设置开发环境_哔哩哔哩_bi…

【python】成功解决“ImportError: cannot import name ‘triu’ from ‘scipy.linalg’”错误的全面指南

成功解决“ImportError: cannot import name ‘triu’ from ‘scipy.linalg’”错误的全面指南 在Python编程中,尤其是在使用scipy这个科学计算库时,可能会遇到ImportError错误,提示无法从scipy.linalg模块中导入名为triu的函数。这个错误通…

Linux入门教程笔记(一文带你了解Linux并精通)

文章目录 一、Linux概述二、Linux目录结构(重点)2.1 Linux文件系统的类型2.2 Linux文件系统的结构2.3 具体的目录结构2.3.1 Linux 根目录2.3.2 Linux /usr目录2.3.3 Linux /var 目录2.3.4 tar包存放目录:crossed_swords: 三、vi和vim编辑器四、Lnux开机&…

SpringMVC接收数据

SpringMVC接收数据 SpringMVC处理请求流程 SpringMVC涉及组件理解: DispatcherServlet : SpringMVC提供,我们需要使用web.xml配置使其生效,它是整个流程处理的核心,所有请求都经过它的处理和分发![ CEO ]HandlerMappi…

16个常用的思维模型

01.机会成本 02.沉没成本 03.直觉思维 04.决策树 05.非SR模型 06.确认性偏差 07.易得性偏差 08.逆向思维 09.六顶思考帽 10.101010旁观思维 11.升级思维 11.笛卡尔模型 13.第一性原理 14.奥卡姆剃刀理论 15.马斯洛需求层次理论 16.反脆弱思维 来源:16个常用的思维模…

基于最大重叠离散小波变换的PPG信号降噪(MATLAB 2018)

光电容积脉搏波PPG信号结合相关算法可以用于人体生理参数检测,如血压、血氧饱和度等,但采集过程中极易受到噪声干扰,对于血压、血氧饱和度测量的准确性造成影响。随着当今社会医疗保健技术的发展,可穿戴监测设备对于PPG信号的质量…

WSDM 2023 推荐系统相关论文整理(三)

WSDM 2023的论文录用结果已出,推荐系统相关的论文方向包含序列推荐,点击率估计等领域,涵盖图学习,对比学习,因果推断,知识蒸馏等技术,累计包含近四十篇论文,下文列举了部分论文的标题…

Source Insight 4.0安装和使用

文章目录 一、前言二、新建工程2.1 新建工程2.2 同步工程 3 Source Insight怎么生成函数调用关系图?3.1 打开关系窗口3.2 打开关系函数3.3 修改关系属性3.4设置 Relation Window Options3.5 设置Levels3.6 修改显示模式 4 下载地址 一、前言 Source Insight 4.0 是每…

Blog项目切换Markdown编辑器———LayUI弹出层弹出写在页面的内容导致的各种bug

【2024.5.24回顾】 1 问题描述(描述完自己解决了…) 正常情况 点击添加文章按钮后,弹出文章编辑界面,如果用富文本功能编辑,则一切正常。可以多次打开、关闭 Markdown 如果在弹出层中点击了切换编辑器按钮,会成功切换为markd…

Android RelativeLayout Rtl布局下的bug:paddingStart会同时作用于左右内边距

问题现象 如上图,只是设置了paddingStart,在RTL布局下,左右都产生了10dp的间距。其他布局如LinearLayout,FrameLayout则没有这个问题。 private void positionAtEdge(View child, LayoutParams params, int myWidth) {if (isLayou…

simCSE句子向量表示(1)-使用transformers API

SimCSE SimCSE: Simple Contrastive Learning of Sentence Embeddings. Gao, T., Yao, X., & Chen, D. (2021). SimCSE: Simple Contrastive Learning of Sentence Embeddings. arXiv preprint arXiv:2104.08821. 1、huggingface官网下载模型 官网手动下载:pri…

【Python数据分析--Numpy库】Python数据分析Numpy库学习笔记,Python数据分析教程,Python数据分析学习笔记(小白入门)

一,Numpy教程 给大家推荐一个很不错的笔记,个人长期学习过程中整理的 Python超详细的学习笔记共21W字点我获取 1-1 安装 1-1-1 使用已有的发行版本 对于许多用户,尤其是在 Windows 上,最简单的方法是下载以下的 Python 发行版…

史上最全,呕心沥血总结oracle推进SCN方法(三)

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG数据库运维(如安装迁移,性能优化、故障应急处理等) 公众号:老苏畅谈运维 欢迎关注本人公众号,更多精彩与您分享。前面介…

实现k8s网络互通

前言 不管是docker还是k8s都会在物理机组件虚拟局域网,只不过是它们实现的目标不同。 docker:针对同一个物理机(宿主机) k8s:针对的是多台物理机(宿主机) Docker 虚拟局域网 K8S虚拟局域网 …

腾讯云centos上安装docker

下面的操作是在root用户下操作的,如果非root用户在命令行前加上sudo 1. 系统及内核查看 操作系统:64位的CentOS 7或更新版本。内核版本:最低要求是3.10,推荐使用3.10或更高版本。 #查看内核版本 (base) [klfwjfweaVM-0-6-centos ~]$ uname…

专业开放式耳机什么牌子更好?六大技巧教你不踩坑!

相信很多入坑的朋友再最开始挑选耳机的时候都会矛盾,现在市面上这么多耳机,我该怎么选择?其实对于开放式耳机,大家都没有一个明确的概念,可能会为了音质的一小点提升而耗费大量的资金,毕竟这是一个无底洞。…