将Kafka Topic中的数据直接导入到ClickHouse

ClickHouse使用Kafka表引擎作为数据管道用途的示意图

image.png

在上图中,整个拓扑分为三类角色:

  • 首先是Kafka数据表A,它充当的角色是一条数据管道,负责拉取Kafka中的数据。
  • 接着是另外一张任意引擎的数据表B,它充当的角色是面向终端用户的查询表,在生产环境中通常是MergeTree系列。
  • 最后,是一张物化视图C,它负责将表A的数据实时同步到表B。

现在用一个具体的示例演示这种使用方法。

  1. 首先新建一张Kafka引擎的表,让其充当数据管道
CREATE TABLE kafka_queue(
        id UInt32,        code String,        name String) 
ENGINE = Kafka()
SETTINGS    
    kafka_broker_list = 'hdp1.nauu.com:6667',    
    kafka_topic_list = 'sales-queue',    
    kafka_group_name = 'chgroup',    
    kafka_format = 'JSONEachRow',    
    kafka_skip_broken_messages = 10
  1. 然后,新建一张面向终端用户的查询表,这里使用MergeTree表引擎:
CREATE TABLE kafka_table (
    id UInt32,    
    code String,    
    name String) 
ENGINE = MergeTree()
ORDER BY id
  1. 最后,新建一张物化视图,用于将数据从kafka_queue同步到kafka_table:
CREATE MATERIALIZED VIEW consumer TO kafka_table
AS SELECT id,code,name FROM kafka_queue

至此,全部的工作就完成了。现在可以继续向Kafka主题发送消息,数据查询则只需面向kafka_table

如果需要停止数据同步,则可以删除视图: DROP TABLE consumer

或者将其卸载: DETACH TABLE consumer

在卸载了视图之后,如果想要再次恢复,可以使用装载命令:

ATTACH MATERIALIZED VIEW consumer TO kafka_table(
    id UInt32,     code String,     name String
) 
AS SELECT id, code, name FROM kafka_queue

猜你喜欢

转载自juejin.im/post/7127128255059984397