在我们的项目中,我们希望特定主题中存在的所有数据都可以被Kafka引擎使用,但是我们尝试了两种方法,但是它们都不起作用。
CREATE TABLE xx.yyy (
`shop_id` String,
`last_updated_at` String
) ENGINE = Kafka('XXX', 'shop_price_center.t_sku_shop_price', 'xxx', 'JSONEachRow', '', '', 1, 0, 0, 20000,
auto_offset_reset='earliest')
<kafka>
<debug>cgrp</debug>
<auto_offset_reset>earliest</auto_offset_reset>
</kafka>
任何一位大师都可以向我展示一个完整的示例来说明解决方案吗?非常感谢。
答案 0 :(得分:0)
数据只能从Kafka读取一次(每次读取后,消费者的偏移量将向前移动,因此,不可能重复读取相同的数据),因此需要使用实例化视图来监听Kafka主题并将数据放到普通的-表格:
/* ordinary table */
CREATE TABLE xx.yyy (
shop_id String,
last_updated_at String
)
ENGINE = MergeTree()
PARTITION BY tuple() /* just demo settings */
ORDER BY (last_updated_at, shop_id); /* just demo settings */
/* Kafka 'queue' */
CREATE TABLE xx.yyy_queue (
shop_id String,
last_updated_at String
)
ENGINE = Kafka SETTINGS
kafka_broker_list = '..',
kafka_topic_list = 'topic',
kafka_group_name = '..',
kafka_format = 'JSONEachRow',
kafka_row_delimiter = '\n',
kafka_skip_broken_messages = 1,
kafka_num_consumers = 1,
kafka_max_block_size = 1000;
/* materialized view: it transfers data from topic to sql-table */
CREATE MATERIALIZED VIEW xx.yyy_consumer TO xx.yyy AS
SELECT
shop_id,
last_updated_at
FROM xx.yyy_queue;
Kafka特定的设置(例如 auto_offset_reset )应在 /etc/clickhouse-server/config.d 目录中的xml文件中定义,而不是在表定义中:
<?xml version="1.0"?>
<yandex>
<kafka>
<auto_offset_reset>earliest</auto_offset_reset>
</kafka>
</yandex>
仅从 xx.yyy -普通表中选择数据,而不从 xx.yyy_queue 中选择数据:
SELECT *
FROM xx.yyy;