clickhouse集群模式下多次查询结果不一致问题排查

Posted by hualeizhang on 2024-01-10
Estimated Reading Time 1 Minutes
Words 521 In Total
Viewed Times

clickhouse集群模式下多次查询结果不一致问题排查

问题描述

项目某个springboot服务通过ELB连接clickhouse集群,界面查询时经常出现两次查询的结果不一致的情况。

排查过程

1. 排查springboot动态数据源

由于业务需要,在同一个页面功能的查询中可能查到clickhouse中多个数据库,springboot服务使用了动态数据源,所以通过增加日志打印当前数据源确认动态数据源是否正确路由到对的库。排查后确认无问题。

2. 登录某clickhouse节点手工查询

通过客户端命令登录到clickhouse一个节点上,将查询语句复制到命令行中执行,执行多次查看查询结果是否一致。排查后确认无问题。

3. 排查两节点数据一致性

如果单节点中查询结果每次都是一致的,那么问题可能出在两个节点的数据不一致。分别在集群的两节点上执行count语句,发现两节点的count结果不一致,说明数据不一致。
通过和clickhouse提供方联系,定位到两个节点的A表的表结构不一致,导致节点间数据同步失败。

此处需要说明下,由于业务需要,A表的字段是通过程序动态添加维护的,表结构变化频繁,一般的固定字段的表大概率不会出现集群间表结构不一致问题。

解决方案

因为已经定位到问题是节点间数据不一致的问题,通过手工将两个节点中A表的结构导出并对比,将差异字段补齐到缺失的表中,再做数据同步即可。

思考

  1. 动态添加字段的这种用法是否合理
  2. 为何clickhouse集群间同步表结构变更会失败
  3. clickhouse在项目中是否必要,要知道每添加一个组件,系统复杂度几何倍增加

如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !