引言
大家好,我叫张琦,来自每日互动,担任大数据平台架构师。今天我将分享我们团队在基于Apache DolphinScheduler实现ClickHouse零压入库过程中的实践经验。
这个实践项目涉及到两个关键组件:Apache DolphinScheduler和ClickHouse,主要是我们在实际工作中遇到挑战后的解决方案。通过调研开源组件、验证官方建议和在线方法,我们最终找到了一种较为理想的实现方式,并将其落地。
分享内容概述
本次分享将主要分为以下三个部分:
- 面临的技术挑战
- 零压入库的实现方式
- 生产应用效果及思考
整个分享的内容设计较为简洁,我们会围绕实际遇到的问题和解决方案展开讨论,并分享在开源和非开源技术中的探索和应用经验。
最后,我们会讲述生产应用中的效果,以便大家能够从中获得启发,在未来的类似场景中取得更好的体验和成果。
什么是零压入库?
首先,我们先来解释一下“零压入库”的概念。可能很多人听过“零压大床房”这个词,它指的是让人感受到舒缓、无压力的睡眠体验。
而在我们的技术场景中,“零压入库” 指的是如何让 ClickHouse 在数据入库时不产生明显的系统压力,从而保证服务的稳定性和高性能。
换句话说,我们希望通过优化让 ClickHouse 在数据入库时能做到“无感知”地处理这些操作,从而保证系统性能不受影响。这就是我们称之为“零压入库”的原因。
面临的挑战
ClickHouse的优势与劣势
在实现ClickHouse的零压入库实践中,我们首先需要深入了解其优势和不足,以便于在实际应用中扬长避短。
ClickHouse的优势和不足可以从以下几方面来分析:
ClickHouse的优势
高性能的存储与查询
ClickHouse的列式存储结构让其在数据压缩和查询速度方面表现优异。支持多种数据压缩算法(如LZ4和ZSTD),用户可以根据服务器配置选择合适的压缩算法,在磁盘空间与CPU消耗之间进行平衡。在测试中,ClickHouse单机即可在毫秒级处理十亿级别的数据,社区也在不断更新,百亿级数据下性能表现出色。
灵活的SQL支持
ClickHouse兼容标准SQL,支持复杂查询,包括窗口函数、自定义函数等,适用于大规模数据分析场景。其中对于bitmap的支持,非常优秀。
此外,ClickHouse还支持多源数据联合查询,能够满足多源跨表分析的需求。
单机百亿级别性能
在64C CPU和256GB内存的配置下,ClickHouse单机可以轻松处理百亿级别的数据,实现高效查询和写入。
ClickHouse的劣势
硬件敏感性高
ClickHouse对硬件配置的要求较高,尤其对磁盘的性能非常敏感。不同于对CPU和内存的相对宽容,ClickHouse在机械硬盘和固态硬盘的使用体验上有显著差异,这也直接影响了数据的写入性能。
写入并发受限
ClickHouse的高查询性能是以牺牲写入性能为代价的,尤其在高并发写入场景中易出现瓶颈。其推荐单机QPS/TPS不超过20,最好不超过100。高并发写入会加重IO负担,直接影响查询和服务器性能。
内存消耗高
ClickHouse在写入数据和执行查询时都对内存有较大需求,尤其是在执行关联查询时,需要大量的内存空间来缓存和处理数据。对于内存配置不高的服务器,写入和查询的内存需求可能会影响其他任务的正常执行。
合并性能低
ClickHouse的数据合并性能较差,数据入库后可能需要花费数小时甚至更长时间进行文件合并。文件合并过程中会大量占用IO、CPU和内存资源,影响整体性能。
海量数据入库的挑战
在海量数据入库过程中,ClickHouse的弱点逐渐暴露,尤其是在日入库量达到TB级别、数十TB级别甚至更高的情况下。
我们遇到的主要挑战包括:
-
<