Clickhouse 使用Kafka表引擎读取Kafka数据

   把Kafka的数据落地到clickhouse中 ,需要几步?

  答:三步。

  1. 首先是 Kafka 数据表A,它充当的角色是一条数据管道,负责拉取 Kafka 中的数据 ,使用引擎创建一个 Kafka 消费者并作为一条数据流。
     

    CREATE TABLE test.UserForKafka ( 
        Userid String,
    	Age Int32,
    	Mobile String,
    	Address String,
        OrderNo String,
        UpdateTime DateTime,
        CreateTime DateTime
    ) ENGINE = Kafka() 
    	SETTINGS kafka_broker_list = 'kafka 的IP:port',
    	kafka_topic_list = 'topic',
    	kafka_group_name = '消费组',
    	kafka_format = 'JSONEachRow'
    
    必要参数:
    kafka_broker_list – 以逗号分隔的 brokers 列表 (localhost:9092)。
    kafka_topic_list – topic 列表 (my_topic)。
    kafka_group_name – Kafka 消费组名称 (group1)。如果不希望消息在集群中重复,请在每个分片中使用相同的组名。
    kafka_format – 消息体格式。 使用与 SQL 部分的 FORMAT 函数相同表示方法,例如 JSONEachRow。了解详细信息 请参考 https://clickhouse.tech/docs/en/interfaces/formats/
    
    可选参数:
    
    kafka_row_delimiter - 每个消息体(记录)之间的分隔符。
    kafka_schema – 如果解析格式需要一个 schema 时,此参数必填。例如,普罗托船长 需要 schema 文件路径以及根对象 schema.capnp:Message 的名字。
    kafka_num_consumers – 单个表的消费者数量。默认值是:1,如果一个消费者的吞吐量不足,则指定更多的消费者。消费者的总数不应该超过 topic 中分区的数量,因为每个分区只能分配一个消费者。

     

  2. 接着是另外一张任意引擎的数据表B,它充当的角色是面向终端用户的查询表,在生产环境中通常是 MergeTree 系列。
     

    CREATE TABLE test.UserResult (
     Userid String,
     Age	 Int32,
     Mobile  String,
     Address String,
     OrderNo String,
     UpdateTime DateTime,
     CreateTime DateTime 
    ) ENGINE = ReplacingMergeTree(UpdateTime)  --根据业务自行选择使用MergeTree 的其他系列
      PARTITION BY toYYYYMM(toDate(CreateTime)) 
      PRIMARY KEY (CreateTime, Userid, OrderNo) 
      ORDER BY (CreateTime, Userid, OrderNo) 
      SETTINGS index_granularity = 8192
    

     

  3. 最后,创建一张物化视图C,它负责将表A的数据实时同步到表B,会在后台转换引擎中的数据并将其放入之前创建的表中。

    --当 MATERIALIZED VIEW 添加至引擎,它将会在后台收集数据
    CREATE MATERIALIZED VIEW test.User_View TO test.UserResult AS SELECT
    	*  --可以写根据业务需求的SQL
    FROM
    	test.UserForKafka
    -- WHERE  、  GROUP BY  根据自己需要实现 

     

  4. 数据查询的时候则只需面向UserResult  表

  5. 如果需要停止同步数据 则可以删除视图 Drop table  test.User_View  或者 将其卸载   Detach table test.User_View   卸载视图后,如果想要再次恢复,可以使用 装载命令
    ATTACH MATERIALIZED VIEW test.User_View TO test.UserResult AS SELECT
    	*  --可以写根据业务需求的SQL
    FROM
    	test.UserForKafka
    -- WHERE  、  GROUP BY  根据自己需要实现 

     

  6. 可以通过DBeaver 客户端查看,也可以通过clickhouse-client 命令查看数据是否写入  ,还可以通过日志


     
  7. 如果出现读取不到数据 ,日志(/var/log/clickhouse-server/)中出现如图信息

    可能是 /etc/hosts 的文件中没有配置Kafka的 ip 和域名,配置完以后,重启ck

你可能感兴趣的:(clickhouse,大数据)