ES + CH 双写体系的架构设计与落地

Weijie Zhao2024年11月20日14 min read

背景

在日志系统迁移过程中,往往需要同时支持 Elasticsearch 和 ClickHouse,实现平滑过渡。

双写架构

[Kafka Consumer]
       ↓
   [Router]
    ↙    ↘
[ES Writer] [CH Writer]

一致性保障

func (w *DualWriter) Write(batch []Log) error {
    errCh := make(chan error, 2)
    
    go func() { errCh <- w.esWriter.Write(batch) }()
    go func() { errCh <- w.chWriter.Write(batch) }()
    
    for i := 0; i < 2; i++ {
        if err := <-errCh; err != nil {
            return err
        }
    }
    return nil
}

Note

双写模式下需要监控两个存储的写入延迟差异。

Related Posts