ClickHouse物化视图消费kafka日志

1.创建kafka主题

./bin/kafka-topics.sh --create --topic wsdlog  --bootstrap-server localhost:9092

2.创建kafka主题表

 CREATE TABLE wsd.log_kafka
(
    `CONTENT` String
)
ENGINE = Kafka
SETTINGS kafka_broker_list = 'localhost:9092', kafka_topic_list = 'wsdlog', kafka_group_name = 'consumer-group1', kafka_format = 'TabSeparated', kafka_num_consumers = 1

3.创建实体表存储消费到的kafka数据

CREATE TABLE wsd.content
(
    `CONTENT` String,
    `addTime` DateTime
)
ENGINE = MergeTree
ORDER BY CONTENT

4.创建物化视图解析kafka引擎表日志并存储到实体表

CREATE MATERIALIZED VIEW wsd.log_content TO wsd.content
(
    `CONTENT` Nullable(String),
    `addTime` DateTime
) AS
SELECT
    CONTENT,
    now() AS addTime
FROM wsd.log_kafka

5.kafka生产数据,查看clickhouse实体表是否拿到数据

./kafka-console-producer.sh --topic wsdlog --bootstrap-server  localhost:9092

 clickhouse实体表也是成功取到数据了

也可以不建立实体表

CREATE MATERIALIZED VIEW wsd.log_content2
(
    `CONTENT` Nullable(String),
    `addTime` DateTime
)
ENGINE = MergeTree
ORDER BY addTime
SETTINGS index_granularity = 8192 AS
SELECT
    CONTENT,
    now() AS addTime
FROM wsd.log_kafka

 clickhouse会自动建立.innner开头的实体表存储

根据不同的场景,可以对物化视图的查询语句进行修改,比如需要针对一些json的解析存储等

如下,这样日志解析存库就可以实时消费kafka日志

CREATE MATERIALIZED VIEW default.nginx_view TO default.nginx ( `time64` DateTime64(6, 'Asia/Shanghai'), `time` DateTime('Asia/Shanghai'), `time_ch` DateTime, `host` String) AS SELECT toDateTime64(extract(CONTENT, '^\\s*(\\d{4,4}\\-\\d\\d\\-\\d\\dT\\d\\d:\\d\\d:\\d\\d(\\.\\d{1,6})?)'), 6, 'Asia/Shanghai') AS time64, toDateTime(time64) AS time, now() AS time_ch, JSONExtractString(conn, 'host') AS host FROM ( SELECT CONTENT, replaceRegexpAll(replaceRegexpAll(CONTENT, '^.+?nginx\\-legal\\s*', ''), ',"request_body":"{.*?}"', '') AS conn FROM default.nginx_kafka )

  • 24
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值