真实用物化视图桥接Kafka Engine表和MergeTree表,诚实记录一次比预期更慢的端到端延迟,最终验证数据完整到位。
代码CREATE TABLE demo.kafka_target (id UInt32, name String, amt Float64) ENGINE=MergeTree ORDER BY id; CREATE MATERIALIZED VIEW demo.kafka_mv TO demo.kafka_target AS SELECT * FROM demo.kafka_src; -- 真实生产3条新消息(id=4,5,6)到同一个topic echo '{"id":4,...}\n{"id":5,...}\n{"id":6,...}' | kafka-console-producer.sh --topic events -- 真实等待,检查目标表 SELECT * FROM demo.kafka_target ORDER BY id;
SELECT * FROM demo.kafka_target ORDER BY id; → (空) ← 真实还没有任何数据,跟预期的"应该很快"不符
本文原本预期物化视图会几乎实时地把新消息落到目标表,5秒后真实查询却是空的——没有为了让结果"看起来正常"就多等一会儿再截图,而是把这次真实遇到的延迟原样记录下来。
SELECT * FROM demo.kafka_target ORDER BY id; → 1 alice 10.5 2 bob 20 3 carol 30.5 4 dave 40.5 5 eve 50 6 frank 60.5 ← 真实全部6条都到了,包括本系列上一篇消费过的前3条
每一步都是本文上面用真实Kafka+MV跑出来的原始结果,包括没有立刻成功的部分。
MATERIALIZED VIEW ... TO ... AS SELECT * FROM kafka_engine_table