ClickHouse使用(六)

本文介绍了ClickHouse中MergeTree系列表引擎的六大类别,并详细解释了ReplacingMergeTree的工作原理及数据TTL特性,包括其存储策略和如何通过TTL设置数据生存周期。

MergeTree 系列表引擎

1 六大类表引擎:

(1)合并树 (2)外部存储 (3)内存(4)文件(5)接口(6)其他

(2)合并树家族:
ReplacingMergeTree/SummingMergeTree/AggregatingMergeTree/CollapsingMergeTree/VersionedCollapsingTree

在MergeTree基础上进行扩展,相关特性在合并的时机提现

2 数据TTL

(1) MergeTree可以设置表的存活时间(列级别+表级别)
(2) TTL工作原理:
1.记录方式,写入数据时,每个分区目录都会写入 ttl.txt文件
2.文件格式,JSON{“columns”:[{“name”:“code”,“min”:“112323”,“max”:“12312332”},{…}],“tables”:{“min”:“12122333”,“max”:“1122312121”}}
含义:列,字段,保存时间的最小值和最大值的时间戳 表,保存时间最小值和最大值的时间戳
3.在文件写入时,生成ttl.txt文件,在MergeTree合并分区时,触发TTl逻辑删除数据
4.删除分区时,遵循贪婪算法,算法规则尽可能找到最早过期的,同时年级老的分区(合并次数多,MaxBlockNum 更大)
5.分区数据按照ttl.txt规则删除后,新分区中不再包含删除的数据
6.默认触发ttl(时间为1天),设置过小会带来性能损失
7.可以手动 optimize 触发
8.停止全部的ttl操作 system stop/start ttl merges
(3)多路径存储策略 (>19.15版本,支持多路径存储)
1.默认策略 MergeTree 存储文件到config.xml 配置中的path指定路径下
2.JBOD策略(多磁盘,无raid),轮训,无备份 相当于 raid 0,磁盘中数据在发生磁盘故障时丢失,可以用clickHouse自身的副本策略来补充
3.hot/cold 写入操作在ssd进行,达到阀值自动迁移到hdd,实现性能和经济性的平衡,内部可以并行使用jbod策略
(4) ReplacingMergeTree
(1)合并分区时按照Order By 排序键 删除重复数据
(2)以分区为单位删除重复数据,不同分区的重复数据不予处理
(3)没有设置ver版本号,保留同一组数据的最后一行
(4)设置ver版本号,保留同一组数据中唯一键最大的一行

<think>好的,我现在需要帮助用户获取ClickHouse-copier的使用指南或文档。首先,回顾用户的历史对话,用户之前询问如何优化ClickHouse-copier的迁移速度,现在想了解具体的使用教程。我需要结合之前的回答和用户提供的引用内容来构建一个清晰的指南。 首先,用户提供的引用中提到使用Docker搭建测试集群,集群结构有四个节点,分为两个分片,每个分片两个副本。这可能涉及配置文件的编写,比如Zookeeper的设置和任务模板。我需要确保在指南中包含这些配置示例。 另外,引用[2]提到了在迁移大数据时出现数据量不符的错误,解决方案是修改config.xml中的参数。这应该在常见问题部分提到,并给出配置示例,比如设置max_table_size_to_drop为0。 接下来,用户需要的是使用教程,所以结构应该从环境准备开始,包括安装和集群配置。然后详细说明配置文件的编写,比如Zookeeper配置和任务模板,特别是分片和副本的设置。任务模板中的参数如并行度、过滤器、压缩等需要详细解释,可能还需要引用之前优化时的建议,如调整max_threads和启用压缩。 操作步骤部分需要具体命令,比如如何启动copier,如何监控任务状态,以及完成后的校验方法。用户之前的回答中提到了使用系统表监控和校验SQL,这些内容需要包含在内。 注意事项部分需要涵盖网络、数据一致性、版本兼容性等问题,特别是用户之前提到的分区和大表处理的问题。常见问题解答应针对用户引用中的错误,比如数据量不一致和权限问题,给出解决方案。 最后,确保提供官方文档链接,方便用户进一步查阅。整个过程中要保持结构清晰,步骤明确,示例具体,并参考之前的回答和用户提供的引用内容,确保信息的一致性和实用性。</think>### ClickHouse-copier 使用指南与最佳实践 #### 一、**环境准备**(基于引用[1]测试集群) 1. **集群架构示例** ```text 集群名称: ck_cluster ┌─分片1 (shard_num=1) │ ├─副本1 (host=clickhouse1) │ └─副本2 (host=clickhouse2) └─分片2 (shard_num=2) ├─副本1 (host=clickhouse3) └─副本2 (host=clickhouse4) ``` 2. **配置文件要求** - 所有节点需共享**相同ZooKeeper配置** - 确保`/etc/clickhouse-server/config.xml`中启用跨集群复制: ```xml <remote_servers incl="clickhouse_remote_servers"> <ck_cluster> <shard> <replica><host>clickhouse1</host></replica> <replica><host>clickhouse2</host></replica> </shard> <shard> <replica><host>clickhouse3</host></replica> <replica><host>clickhouse4</host></replica> </shard> </ck_cluster> </remote_servers> ``` #### 二、**核心配置文件** 1. **任务模板 (`task.xml`)** ```xml <yandex> <logger>...</logger> <zookeeper> <!-- 引用[1]的集群配置 --> <node index="1"><host>zk_server1</host></node> </zookeeper> <task> <name>migration_task</name> <source_cluster>ck_cluster</source_cluster> <destination_cluster>ck_cluster</destination_cluster> <database>test_db</database> <table>source_table</table> <sharding_key>rand()</sharding_key> <!-- 分片策略 --> <copy_factor>1</copy_factor> <!-- 副本数 --> <settings> <max_threads>8</max_threads> <!-- 并行度 --> <use_compression>1</use_compression> </settings> <enabled_partitions> <!-- 分区过滤 --> <partition>2023-10</partition> </enabled_partitions> </task> </yandex> ``` #### 三、**操作步骤** 1. **启动copier工具** ```bash clickhouse-copier --config /path/to/task.xml --task-path /zk/path/migration_task ``` - `--task-path`参数指向ZooKeeper中的任务协调节点 2. **监控任务状态** - 通过ZooKeeper查看任务进度: ```bash zkCli.sh ls /zk/path/migration_task/status ``` - 使用系统表监控(引用自历史回答): ```sql SELECT * FROM system.merges WHERE database = 'test_db' ``` 3. **完成校验** 执行数据一致性检查(优化回答中的方法): ```sql -- 源表与目标表对比 SELECT (SELECT count() FROM source_table) AS src_count, (SELECT count() FROM target_table) AS dst_count, (SELECT sumHash(*) FROM source_table) AS src_hash, (SELECT sumHash(*) FROM target_table) AS dst_hash ``` #### 四、**注意事项** 1. **大表处理**(引用[2]问题解决方案) 在`config.xml`中增加配置避免删除限制: ```xml <max_table_size_to_drop>0</max_table_size_to_drop> <max_partition_size_to_drop>0</max_partition_size_to_drop> ``` 2. **网络稳定性** - 建议使用专用网络通道(如10Gbps+带宽) - 启用断点续传:copier自动记录已传输的分区状态到ZooKeeper 3. **版本兼容性** - 源集群与目标集群的ClickHouse版本差异需 ≤ 2个次要版本 - 跨大版本迁移需使用`clickhouse-backup`工具辅助 #### 五、**官方文档指引** 1. **核心文档** - [ClickHouse官方文档 - copier工具](https://clickhouse.com/docs/en/operations/utilities/clickhouse-copier) - [GitHub示例配置](https://github.com/ClickHouse/ClickHouse/tree/master/programs/copier) 2. **关键参数说明** | 参数 | 作用 | 推荐值 | |------|------|--------| | `max_threads` | 并行线程数 | CPU核心数的50%-75% | | `use_compression` | 网络传输压缩 | 1 (启用) | | `check_referential_integrity` | 外键检查 | 0 (迁移时关闭) | #### 、**常见问题**(结合引用[2]) 1. **数据量不一致** **现象**:copier报错实际同步量≠计划量 **解决方案**: - 检查源表和目标表的`PARTITION BY`定义是否一致 - 验证ZooKeeper中是否存在残留任务状态(清理`/zk/path/migration_task`) 2. **权限问题** - 确保copier进程有ZooKeeper节点的读写权限 - 在`users.xml`中配置分布式DDL权限: ```xml <access_control_improvements>1</access_control_improvements> ``` --- ### 扩展阅读 1. [百亿级数据迁移实战案例](https://clickhouse.com/case-studies/data-migration-at-scale) 2. [分布式表与本地表性能对比分析](https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/replication)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值