明细表一直被 sink 写着,历史分区还会被补发。换引擎靠 ATTACH 把历史分区挂进新表,停 sink 排空后按 part_log 补齐,逐副本比行数过闸,再用 EXCHANGE 原子切换。lab 上 sink 只停了零点几秒,回滚后一行不丢。
Posts for: #ReplacingMergeTree
ClickHouse 明细表的去重方案
Kafka 到 ClickHouse 的链路只能做到至少一次,三种重复都会落库。方案不开 sink 的 exactlyOnce,以 ReplacingMergeTree 按业务键折叠为主,入口调大去重窗口,报表靠对账重算兜底;lab 上验过,还没在现有集群上执行。
ClickHouse 的查询路径和 FINAL 的代价
两三亿行的日分区里查交易明细,ClickHouse 依次按分区、part 的最值、稀疏主键和跳数索引跳过数据,只读用到的列。明细换成 ReplacingMergeTree 后要带 FINAL 读,lab 上它的代价随重叠范围变,比手写去重省一个数量级的内存。