【已解决】Java保存数据超时失败 ClickHouse exception, code 1002, 8123 failed to respon,keep_alive_timeout参数

问题

  • 使用clickhouse作为数据库,存储前端设备采集到的海量数据
  • 使用Java语言开发,连接数据库保存数据,实时分批写入,使用的maven依赖如下:
	<!-- clickhouse 相关依赖 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.5</version>
        </dependency>
        <dependency>
            <groupId>ru.yandex.clickhouse</groupId>
            <artifactId>clickhouse-jdbc</artifactId>
            <version>0.2.6</version>
        </dependency>
        <!-- clickhouse end -->
  • 使用DruidDataSource建立连接,连接里已经设置了超时时间
@Bean(name = "clickHouseDataSource")
    @ConditionalOnProperty(prefix = "spring.datasource.click-house",name = "url")
    public DataSource clickHouseDataSource() {
        DruidDataSource datasource = new DruidDataSource();
        datasource.setUrl(url);
        datasource.setDriverClassName(driverClassName);
        datasource.setInitialSize(initialSize);
        datasource.setMinIdle(minIdle);
        datasource.setMaxActive(maxActive);
        datasource.setMaxWait(maxWait);
        datasource.setUsername(username);
        datasource.setPassword(password);
        Properties properties = new Properties();
        properties.put("socket_timeout", timeout);
        datasource.setConnectProperties(properties);
        return datasource;
    }
  • ck保存失败,报错信息截取如下
Caused by: ru.yandex.clickhouse.except.ClickHouseUnknownException: ClickHouse exception, code: 1002, host: 192.168.1.100, port: 8123; failed to respond
  • 关键报错截取为code 1002, 8123 failed to respon,使用工具发现clickhouse还可以连接,服务正常,说明这个就是Java程序连接clickhouse的超时问题

解决

  • 数据库连接超时,是偶现现象。数据库与程序都在一个网络环境内,网络连接应该是没问题的
  • 连接超时,有可能是程序的写入或查询数据量过大,数据库未在限定时间范围内返回结果,程序认定超时,抛出报错
  • 程序连接的代码已经设置了超时时间,还是报了这个错误,找其他原因
  • 最终发现还需要修改clickhouse数据库设置,就是clickhouse服务端的参数配置
  • 修改clickhouse配置文件,/etc/clickhouse-serverconfig.xmlkeep_alive_timeout参数,默认是3,可以改为60s
    <!-- For 'Connection: keep-alive' in HTTP 1.1 -->
    <keep_alive_timeout>3</keep_alive_timeout>
  • 重启clickhouse服务(systemctl restart clickhouse-server),问题解决

猜你喜欢

转载自blog.csdn.net/u010882234/article/details/128554212