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