ClickHouse Kafka表引擎使用详解

本文详细介绍了如何使用ClickHouse的Kafka表引擎进行数据同步,包括从Kafka写入CK和CK写入Kafka的实现方式,以及各种参数配置与优化技巧,以提升性能和降低维护成本。
摘要由CSDN通过智能技术生成

前言

项目采用Flink、Kafka、Clickhouse的实时数仓架构,数据由Kafka接入,经过Flink处理,写入Clickhouse。

初期直接由Flink写入Clickhouse,经常会出现分区太多合并不来等意外情况,效果不是很好。而且数据也需要共享到其他地方,故直接写入CK对我们来说不是很好的选择。

于是先将数据写入Kafka,之后由Kafka对数据进行分发。

从Kafka写入CK有很多种方法:

  • 使用Flink Connector
  • 使用github上开源的kafka ck组件
  • 使用CK的Kafka表引擎

为了便于维护、降低成本,决定探索下使用CK的Kafka表引擎来写入数据。

Kafka表引擎

简介

CK的Kafka表引擎就是集成了Kafka,在CK端可以查询、写入Kafka。

原理就是CK作为Kafka的生产者或者消费者来生产消费数据,实现数据的同步。

建表

建表语法

和其他表引擎类似,只不过ENGINE为Kafka()

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
    ...
) ENGINE = 
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 – topic 列表 (my_topic)。
  • kafka_group_name – Kafka 消费组名称 (group1)。如果不希望消息在集群中重复,请在每个分片中使用相同的组名。
  • kafka_format – 消息体格式。使用与 SQL 部分的 FORMAT 函数相同表示方法,例如 JSONEachRow。了解详细信息,请参考 Formats 部分。
可选参数:
  • kafka_row_delimiter - 每个消息体(记录)之间的分隔符。

  • kafka_schema – 如果解析格式需要一个 schema 时,此参数必填。

  • kafka_num_consumers – 单个表的消费者数量。默认值是:1,如果一个消费者的吞吐量不足,则指定更多的消费者。消费者的总数不应该超过 topic 中分区的数量,因为每个分区只能分配一个消费者。

  • kafka_max_block_size轮询的最大批处理大小(以消息为单位)(默认值:max_block_size)。

  • kafka_skip_broken_messagesKafka消息解析器对每个块的架构不兼容消息的容忍度。默认值:0。如果kafka_skip_broken_messages = N,则引擎会跳过N条无法解析的Kafka消息(消息等于一行数据)。

  • kafka_commit_every_batch写入整个块后,提交每个消耗和处理的批处理,而不是单个提交(默认值:0)。

  • kafka_thread_per_consumer为每个消费者者提供独立的线程(默认值:0)。启用后,每个消费者将并行并行地刷新数据(否则,来自多个消费者的行将被压缩以形成一个块)。

其他参数
  • <
  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值