clickhouse kafka引擎入门

Kakfa

使用方式
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
    ...
) ENGINE = Kafka()
SETTINGS
    kafka_broker_list = 'host:port',
    kafka_topic_list = 'topic1,topic2,...',
    kafka_group_name = 'group_name',
    kafka_format = 'data_format'[,]
    [kafka_row_delimiter = 'delimiter_symbol',]
    [kafka_schema = '',]
    [kafka_num_consumers = N,]
    [kafka_max_block_size = 0,]
    [kafka_skip_broken_messages = N,]
    [kafka_commit_every_batch = 0,]
    [kafka_thread_per_consumer = 0]
  • kafka_broker_list :逗号分隔的brokers地址 (localhost:9092).
  • kafka_topic_list :Kafka 主题列表,多个主题用逗号分隔.
  • kafka_group_name :消费者组.
  • kafka_format – Message format. 比如JSONEachRow、JSON、CSV等等
使用示例

kafka中创建chouse主题,并向该主题写入数据

kafka-topics.sh \
--zookeeper mypc01:2181,mypc02:2181,mypc03:2181/kafka-2020 \
--create \
--topic chouse \
--partitions 2 \
--replication-factor 2

clickhouse中创建表格

CREATE TABLE kafka_table
(
    id   UInt64,
    name String
)
    ENGINE = Kafka() SETTINGS kafka_broker_list = 'mypc01:9092,mypc02:9092,mypc03:9092',kafka_topic_list = 'chouse',kafka_group_name = 'group1',kafka_format = 'JSONEachRow';

创建生产者发送数据

[root@node1 kafka_2.11-1.1.1]# kafka-console-producer.sh --topic chouse --broker-list mypc01:9092,mypc02:9092,mypc03:9092

{"id":2,"name":"ww"}
-- 查询
select * from kafka_table ;
注意点

当我们一旦查询完毕之后,ClickHouse会删除表内的数据,其实Kafka表引擎只是一个数据管道,我们可以通过物化视图的方式访问Kafka中的数据。

  • 首先创建一张Kafka表引擎的表,用于从Kafka中读取数据
  • 然后再创建一张普通表引擎的表,比如MergeTree,面向终端用户使用
  • 最后创建物化视图,用于将Kafka引擎表实时同步到终端用户所使用的表中
--  创建Kafka引擎表

CREATE TABLE kafka_table_consumer
(
    id   UInt64,
    name String
)
    ENGINE = Kafka() SETTINGS kafka_broker_list = 'mypc01:9092,mypc02:9092,mypc03:9092',kafka_topic_list = 'test',kafka_group_name = 'group2',kafka_format = 'JSONEachRow';

-- 创建一张终端用户使用的表
CREATE TABLE kafka_table_mergetree (id UInt64 ,name String)ENGINE=MergeTree() ORDER BY id;
  
-- 创建物化视图,同步数据
CREATE MATERIALIZED VIEW consumer TO kafka_table_mergetree AS SELECT id,name FROM kafka_table_consumer;
-- 查询,多次查询,已经被查询的数据依然会被输出
select * from kafka_table_mergetree;

┌─id─┬─name─┐
│  2 │ ww   │
└────┴──────┘
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值