• 使用物化视图将kafka数据导入到clickhouse


    --------------------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
  • 相关阅读:
    【图论】Tarjan 缩点
    【高级数据结构】左偏树
    【网络流·最大流】ISAP(Improved Shortest Augumenting Path)详解
    linux 压缩和解压文件(.gz.bz2)
    Python requests库
    jmeter 压测之动态数据关联
    Jmeter 之数据库测试
    Jmeter 参数未编码异常:java.net.URISyntaxException: Illegal character in query at index 172
    Fiddler 过滤地址设置
    loadrunner 连接mysql数据库获取数据进行参数化
  • 原文地址:https://www.cnblogs.com/yoyowin/p/14438962.html
Copyright © 2020-2023  润新知