You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ClickHouse单副本宕机时ZooKeeper操作日志保留时长及恢复同步问题

ClickHouse ReplicatedMergeTree ZK日志保留与副本恢复同步解答

1. ZK操作日志的保留规则

ReplicatedMergeTree在ZK /log 路径下存储的操作日志不会永久保留,保留时长由两个ClickHouse服务端配置共同决定,没有固定的统一有效期:

  • 最少保留条数由 merge_tree_replicated_logs_to_keep 控制,默认值为1000,即无论日志生成时间多久,至少会保留最近1000条操作日志。
  • 最长保留时长由 merge_tree_replicated_log_max_age 控制,默认值为7天,即超过该时长的日志,只要当前保留的日志总数大于merge_tree_replicated_logs_to_keep的阈值,就会被清理。

注意:日志清理动作由活跃的ClickHouse副本主动触发,不是ZK自带的TTL能力。实际保留时长是两个配置共同作用的结果:如果写入频率极高,1天就产生2000条日志,那么超出1000条的旧日志即使仅生成1天也会被清理;如果写入频率极低,7天仅产生500条日志,所有日志会保留满7天才会被清理。

2. ZK日志清理后副本恢复的同步逻辑

如果宕机副本恢复时,ZK上留存的最早日志序号已经大于该副本最后同步的日志序号,也不会出现数据不一致的问题,副本会走兜底的块同步流程完成数据对齐:

  1. 副本启动后首先上报本地所有数据块(Part)的校验和、版本信息到ZK的对应/blocks路径,和集群其他健康副本的已提交数据块列表做对比。
  2. 筛选出本地缺失、校验和不匹配、版本落后的数据块,直接从其他健康副本下载完整的数据块,不需要依赖ZK的历史操作日志。
  3. 补全所有缺失数据的同时,副本会同步合并、突变等未完成的任务状态,确保本地操作和集群状态一致。
  4. 所有数据对齐完成后,副本恢复正常服务,继续拉取新的ZK日志做增量同步。

只要集群中至少存在一个持有完整数据的健康副本,宕机恢复的副本就可以自动完成全量同步,不需要人工介入。

内容的提问来源于stack exchange,提问作者wxl356

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 07:15:04