ClickHouse使用
官方文档
https://clickhouse.com/docs/zh
简述
CloudCanal 近期实现了 MySQL(RDS) 到 ClickHouse 实时同步的能力,功能包含全量数据迁移、增量数据迁移、结构迁移能力,以及附带的监控、告警、HA等能力(平台自带)。
ClickHouse 本身并不直接支持 Update 和 Delete 能力,但是他自带的 MergeTree 系列表中 CollapsingMergeTree 和 VersionedCollapsingMergeTree 可变相实现实时增量的目的,并且性能完全够用,能够比较轻松达到 1k RPS 以上的能力。
启动服务
# 准备好本地四个目录:ClickHouseConfiguration ClickHouseData ClickHouseInitDB ClickHouseLogs
docker run -d -p 8123:8123 -p 9000:9000 -p 9004:9004 \
-v `pwd`/ClickHouseData:/var/lib/clickhouse/ \
-v `pwd`/ClickHouseConfiguration:/etc/clickhouse-server/ \
-v $(realpath ./ClickHouseLogs):/var/log/clickhouse-server/ \
-v $(realpath ./ClickHouseInitDB):/docker-entrypoint-initdb.d/ \
--cap-add=SYS_NICE --cap-add=NET_ADMIN --cap-add=IPC_LOCK \
--name ClickHouse-Server --ulimit nofile=262144:262144 \
clickhouse/clickhouse-server:23.2.4.12
启动客户端
docker exec -it ClickHouse-Server /bin/bash
clickhouse-client
ClickHouse client version 23.2.4.12 (official build).
Connecting to localhost:9000 as user default.
Password for user (default): # 输入default用户的密码
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 23.2.4 revision 54461.
Warnings:
* Linux transparent hugepages are set to "always". Check /sys/kernel/mm/transparent_hugepage/enabled
a1ab06ae0541 :) show databases;
SHOW DATABASES
Query id: daf5ffd2-7714-4ec6-ac68-9f8a1eb003be
┌─name───────────────┐
│ INFORMATION_SCHEMA │
│ default │
│ information_schema │
│ lit_info │
│ lit_info_oa │
│ system │
│ test_base │
└────────────────────┘
7 rows in set. Elapsed: 0.002 sec.
配置修改
# 配置数据库引擎
SET allow_experimental_database_materialized_mysql=1
添加配置文件
- 新建配置文件:
config.d/docker_related_config.xml
以允许键值为空。默认值无此配置即值为0,是禁用状态。
<clickhouse>
<!-- Listen wildcard address to allow accepting connections from other containers and host network. -->
<listen_host>::</listen_host>
<listen_host>0.0.0.0</listen_host>
<listen_try>1</listen_try>
<!--
<logger>
<console>1</console>
</logger>
-->
</clickhouse>
创建来源于库
CREATE DATABASE lit_info ENGINE = MaterializeMySQL(
'10.17.0.21:3306', 'lit_inf_sys_db', 'root', 'lit-Info-Dev'
)
# 10.17.0.21:3306 - MySQL 地址和端口
# lit_inf_sys_db - MySQL 库的名称
# root - MySQL 同步账户
# lit-Info-Dev - MySQL 同步账户的密码
结构迁移
目前到 ClickHouse 的结构迁移中,默认选择 ReplacingMergeTree 作为表引擎,源主键作为 sortKey (无主键表则是 tuple),如下示例:
CREATE TABLE console.worker_stats
(
`id` Int64,
`gmt_create` DateTime,
`worker_id` Int64,
`cpu_stat` String,
`mem_stat` String,
`disk_stat` String
)
ENGINE = ReplacingMergeTree()
ORDER BY id
SETTINGS index_granularity = 8192
创建来源于表
CREATE TABLE t_manhour ENGINE = MergeTree PARTITION BY toYYYYMM ( work_date )
ORDER BY
work_date AS SELECT
*
FROM
mysql ( '10.17.0.21:3306', 'lit_inf_sys_db', 'man_hour_info', 'root', 'lit-Info-Dev' );
CREATE TABLE act_hi_detail
ENGINE = MergeTree
PARTITION BY toYYYYMM(TIME_)
ORDER BY TIME_ AS
SELECT *
FROM mysql('10.17.0.21:3306', 'lit_inf_sys_db', 'act_hi_detail', 'root', 'lit-Info-Dev');
验证数据
- 让我们通过查看插入了多少行来验证它是否有效:
SELECT count()
FROM act_hi_detail
- 在执行此查询时,数据集有 27,450,499 行。让我们看看 test_base 中表的大小是多少:
SELECT formatReadableSize(total_bytes)
FROM system.tables
WHERE name = 'act_hi_detail'
- 请注意,表的大小仅为 24 MiB!而MySQL中的大小为341.9MB
创建表
与大多数数据库管理系统一样,ClickHouse在逻辑上将表分组为数据库。包含一个default
数据库,但我们将创建一个新的数据库tutorial
:
clickhouse-client --query "CREATE DATABASE IF NOT EXISTS tutorial"
与创建数据库相比,创建表的语法要复杂得多(请参阅参考资料. 一般CREATE TABLE
声明必须指定三个关键的事情:
实时同步
参考:https://blog.csdn.net/qq_44273429/article/details/122158913
评论区