--------------------kafka通過物化視圖導入clickhouse-------------- step1: 啟動zk和kafka step2:創建一個topic ./kafka-topics.sh --zookeeper localhost:2181 --create --topic test --replication-factor 3 --partitions 2 step3:創建一個生產者用於生產數據 ./kafka-console-producer.sh --broker-list localhost:9092 --topic test step4:創建一個消費之用於查看數據 ./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test #不加--from-beginning 從最新的一條消息開始消費 step5:在clickhouse中創建一個物理表 create table kafka_table ( id Int16, code String, name Nullable(String), insert_time DateTime DEFAULT now(), update_time Date DEFAULT toDate(now()) ) engine = MergeTree () order by id; step6:在clickhouse中創建一個kafka引擎表 create table kafka_queue ( id Int16, code String, name String ) engine = Kafka () settings kafka_broker_list = '192.168.235.140:9092', kafka_topic_list = 'test', kafka_group_name = 'test_group', kafka_format = 'JSONEachRow', kafka_skip_broken_messages = 10; step7:在clickhouse中創建一個物化視圖 create materialized view consumer TO kafka_table as select id,code,name from kafka_queue; step8:在生產中生產數據 {"id":12,"code":"12","name":null} {"id":2,"code":"2","name":"2"} {"id":3,"code":"3","name":""} {"id":4,"code":null,"name":""} --結論:在生產者發送數據后,當所有字段都非null時會寫入ch,
當某個字段為null時,該條數據不能寫入ch,即使在創建物理表時設定了Nullable,但不會導致程序異常,只是不能寫入這條記錄。
但是當創建物理表是設定了Nullable並且kafka引擎表在創建時也給定這個字段Nullable()時,此時這個字段為null值時,該條記錄才會被成功寫入,但是ch中該字段為null值。
當缺失某個字段,這條記錄一樣會被同步到ch,缺失的字段value為null,
當json消息多出一些字段,這條記錄一樣會被同步到ch,多余的字段會被忽略。
ch物理表中的字段如果有Nullable修飾,則kafka引擎表中對應的字段也需要有Nullable修飾。如果不一致會停止接受數據。
停止接收主題數據或更改轉換邏輯,請 detach 物化視圖:
DETACH TABLE consumer;
修改完成后重新創建視圖,可繼續進行作業
create materialized view consumer TO kafka_table as select id,code,name from kafka_queue;
ref:https://blog.csdn.net/ffb920724/article/details/113114629