前言
clickhouse在使用MergeTree引擎的情况下,保证数据至少一次的逻辑。
1,直接落盘,类似于LSM思路,不过由于直接落盘,在每批次很少,批次数大,磁盘merge不过来的情况下会存在too many parts的问题。参考文档https://clickhouse.com/docs/en/development/architecture/#merge-tree
2,WAL,后期才支持的https://github.com/ClickHouse/ClickHouse/pull/13640,主要是避免大量小文件的情况,这样也能保证一致性 主要是min_bytes_for_wide_part, min_rows_for_wide_part 这两个值控制。首先先走WAL顺序写一份数据到磁盘,同时会在内存buffer中先缓存一份数据,当达到min_bytes_for_wide_part,min_rows_for_wide_part 阈值的时候落盘。