CLICKHOUSE 中获取kafka的CreateTime,并且记录消息进入CLICKHOUSE的时间
背景描述
最近搞了一套流式计算的系统,向确定每部分在压力状态下的时延,来看看这套系统大概是一个什么样的水平,能够应用于哪些方面。所以希望获取一下几点信息:
- 消息从flink输出的时间戳
- 消息进入kafka的时间戳
- 消息进入clickhouse的时间戳
第一条通过java输出就可以了。
第二个,每条消息进入kafka的时候,kafka的timestamp
中会带有CreateTime
的时间戳,这个CreateTime
就是记录消息进入kafka的时间。
第三个,可以通过CLICKHOUSE的now()
函数来获取。
代码
CREATE TABLE price_queue(
timestamp Int64,
price Float32
) ENGINE = kafka(localhost, input-topic, 'default', 'csv')
CREATE TABLE price(
CreateTime Int64,
nowTime Int64,
timestamp DateTime(3, 'Asia/Shanghai'),
price Float32
) ENGINE = MergeTree()
ORDER BY timestamp;
CREATE MATERIALIZED VIEW price_consumer TO price(
CreateTime Int64,
nowTime Int64,
timestamp DateTime(3, 'Asia/Shanghai'),
price Float32
) AS
SELECT
toUInt64(_timestamp_ms) AS CreateTime,
toUInt64(now('Asia/Shanghai')) AS nowTime,
fromUnixTimeStamp64Milli(timestamp, 'Asia/Shanghai') AS timestamp,
ticker,
price
FROM price_queue;
总结
CLICKHOUSE会建三张表,一张为queue
,是用来对接kafka或者其他消息源的;一张为MATERIALIZED VIEW
,是用来对接queue
和查询表
的,主要是将queue
的数据引入,并且做计算后,获得最终的表,再输出到查询表
;最后一张是查询表
,主要是用来查询数据信息的。