Redian新闻
>
CK03# ClickHouse日志存储设计点梳理

CK03# ClickHouse日志存储设计点梳理

科技

引言

最近周末比较忙,卷的有点累,上周的文章掉了链子,这周赶一篇。本文主要梳理了使用ClickHouse作为日志存储的设计点,主要内容有:

  • 应用日志存储时长定制
  • ClickHouse数据的冷热存储
  • ClickHouse数据迁移与删除
  • ClickHouse查询性能调优点


一、应用日志存储时长定制

公司所有的应用存储日志时长统一设置固定存储时长,比如:1个月、2个月。


这种策略也常被公司采用,优点是整体设计简单。


缺点不能满足业务需要以及可能存在成本浪费。


有的业务场景日志存储3天,例如用户推荐、行为分析等。


很多应用要求存储7天,核心链路场景却希望存储1个月。


对于逆向退货场景类的却要2个月,甚至一些特殊场景要求3个月、6个月的。


小结:也就是说根据应用设置不同的存储时长,是一个不错的方案,即能满足不同场景需求也兼顾存储成本。


二、ClickHouse数据的冷热存储

用ClickHouse做日志存储,通过冷/热盘来存储数据。


热盘可以使用ESSD,存储1~3天的数据。


冷盘可以使用普通盘,存储3天以上的数据。


通过TTL或者迁移命令将热盘数据迁移到冷盘去。


下面是日志平台简要架构图示。



下面是ClickHouse配置冷热存储的配置。

<storage_configuration>
  <disks>
    <hot>
      <path>/data1/clickhouse/hot/data/</path>
      <max_data_part_size_bytes>1073741824</max_data_part_size_bytes>
    </hot>
    <cold>
      <path>/data2/clickhouse/cold/data/</path>
    </cold>
  </disks>
  <policies>
    <ttl>
      <volumes>
        <hot>
          <disk>hot</disk>
        </hot>
        <cold>
          <disk>cold</disk>
        </cold>
      </volumes>
      <move_factor>0.1</move_factor>
    </ttl>
  </policies>
</storage_configuration>

合并分区或者一次性写入的分区大小超过max_data_part_size_bytes,也会被写入到COLD卷中。


当存储磁盘空间小move_factor时,默认为0.1即磁盘小于10%时,数据会自动移动到下一个磁盘volume组。


也就是热盘磁盘剩余10%时,clickhouse会将热数据向冷盘迁移。


通过下面命令查看冷热存储策略以及对应的磁盘空间和剩余空间。

SELECT name, path, formatReadableSize(free_space) AS free, formatReadableSize(total_space) AS total, formatReadableSize(keep_free_space) AS reserved FROM system.disks;

运行结果图示


通过下面命令查看max_data_part_size以及move_factor的配置。

SELECT policy_name, volume_name, volume_priority, disks, formatReadableSize(max_data_part_size) AS max_data_part_size, move_factor FROM system.storage_policies;


运行结果图示


小结:通过冷热多路径存储策略,非常适合日志的场景。

三、ClickHouse数据迁移与删除

尽管ClickHouse提供表级别和列级别的数据TTL迁移和数据过期策略。


然而在数据迁移和删除不可避免造成磁盘IO增加,影响集群的整体性能。


那我们在业务低峰期比如凌晨两点,定时执行指定的分区迁移,能将影响降到最小。


下面就走一把,如何通过命令来执行数据分区的迁移。


下面是查看分区所在磁盘的命令。

SELECT partition, name, disk_name FROM system.parts WHERE table='tb_logs_local';


可以看出,分区Part (000125d45a217a0d121f99b0cdfda94c_908003_1097483_4) 存储在hot磁盘中。


同样在system.parts还可以查询更多的信息,比如database

SELECT partition,name, database,table,disk_name FROM system.parts WHERE table='tb_logs_local';


执行结果图示



通过move命令将hot盘的分区迁移到冷盘中。

alter table dw_log.tb_logs_local on cluster default move partition ('xxx-clasp','xx','2022-07-01 19:00:00') to disk 'cold'


执行结果图示


通过再次查看,该分区已被迁移到冷盘中了。


同样通过drop命令,可以将分区删除。

alter table dw_log.tb_logs_local on cluster default drop partition ('scp-pink-clasp','MF7','2022-07-01 19:00:00') ;



删除结果查询,该分区检索不到。



小结:在创建表时可以设置应用名称、日期为分区键,在system.parts有详细的应用以及创建日期,进而通过move/drop命令执行分区的转移和删除。


四、ClickHouse查询性能调优点

如何提高ClickHouse的查询性能?


优化方向一,一个超大集群切分两个中等规模集群。


优化方向二,通过对表字段设置合理的索引。


一级索引,通常primary key与order by定义相同。


MergeTree会根据index_granularity间隔为数据表生成一级索引保存在primary.idx文件中。


index_granularity默认8192行,也就是使用的是稀疏索引。


也就是数据被分割为 n=数据总行数/index_granularity 个区间,每一个区间一个索引。


二级索引又称跳数索引,主要有minmax、set、ngrambf_v1和tokenbf_v1四种类型。


二级索引共同参数granularity,指跳过几个区间再生成一条索引。


具体跳数索引的含义以及原理,再起一篇梳理。


下面是一个测试样例。

CREATE TABLE logs_demo
(

    `application` String,

    `environment` String,

    `ip` String,

    `filename` String,

    `keys` Array(Nullable(String)) CODEC(ZSTD(1)),

    `values_string` Array(Nullable(String)) CODEC(ZSTD(1)),

    `values_number` Array(Nullable(Float64)) CODEC(ZSTD(1)),

    `file_offset` Nullable(UInt32),

    `message` String CODEC(ZSTD(1)),

    `log_type` String,

    `log_time` DateTime64(3),

    INDEX environment environment TYPE SET(100) GRANULARITY 2,

    INDEX message message TYPE tokenbf_v1(32768,
 2,
 0) GRANULARITY 2
)
ENGINE = MergeTree
PARTITION BY (application,
 toStartOfHour(log_time))
ORDER BY (environment,
 log_time,
 ip,
 file_offset)
SETTINGS allow_nullable_key = 1,
 storage_policy = 'ttl',
 index_granularity = 8192;

其中environment使用SET类型的跳数索引。


message使用了布隆过滤器tokenbf_v1类型的跳数索引。


小结:总之可通过调整跳数索引与集群规模来优化查询查询性能。

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
玛莎、Waitrose取消标注best before日期?!能不能吃全靠猜?开门见山,枕海入眠……这些国家公园住宿简直就是 dream house唱《国际歌》确实有不妥之处CK01# ClickHouse术语及知识点梳理【吃饭, Airbnb兑换类别延期至9月末过期】“Pay Yourself Back”:Chase UR固定比例兑换介绍The Keg Steakhouse热门菜品排行榜出炉!测测你是几星顾客!世界第八洲-西兰洲陌上花开875 Be Your Mirror, Your Sword, Your Shield, and Your Love震撼!!!大佬们对ClickHouse的讨论,值得深思。。。FA17# 缓存设计治理点梳理[模型] 骨折三作——1:12 Kawasaki KH400(1979)CustomHTC推出Vive Flow商用版本;Khronos Group成立新组织以统一元宇宙标准,微软、高通、索尼等公司加入新黄金时代 | 入选Gold House年度A100榜单 吴弭盛装出席Jay Chou Professes His Love for Art in New Music Video精读俱乐部 | G1-3孩子不容错过的《Magic Tree House》,一起开启探险之旅吧!Chinese Courts See Rise in Emojis Used as Evidence in Lawsuits开源ClickHouse是如何成为极致弹性的云原生数据仓库的?Chinese Cities Loosen Housing Policies for Three-Child FamiliesFacebook创办地House上市出售,房东曾拒绝FB股票抵租金或损失105万每月。。。纽约首秀!荷兰DEEP HOUSE小王子BROOKS亮相纽约!听说全纽约的潮人都来了……埃及游记:新开罗,胡佛金字塔与卡纳克神庙天普附近传出70声枪响, 1死1重伤!Rittenhouse广场露天美术展开展! 有机草莓可能携甲肝病毒,全美正在召回Chinese Court Rejects Appeal in Landmark Sexual Harassment CaseOpenhouse预告|洛杉矶成年人的秘密基地藏在这间公寓里车盲的烫手山芋自动驾驶与五月花草交响曲Live Nation半年卖1亿张票,Spotify放弃车载硬件,SoundCloud裁员 20%CK02# ClickHouse分布式表读写原理梳理Open House预告|远离网红滤镜,1133Hope凭何成为Downtown下一个卷王?9.10 | NASU征服群山系列活动⑨- Cliff Walk and Halfway House LoopOpen House揭秘|这周五来参观USC最好玩的公寓!MegaHouse《间谍过家家》阿尼亚:乖巧坐姿+可动脑瓜太萌了!Disabled Man in Chinese Countryside Inspires Disillusioned YouthMegaHouse 桌面军队“玄武”:中式僵尸妹造型的可爱机娘!FA15# 日志平台演进点梳理
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。