返回顶部
首页 > 资讯 > 前端开发 > VUE >从ES迁移到ClickHouse的原因有哪些
  • 351
分享到

从ES迁移到ClickHouse的原因有哪些

2024-04-02 19:04:59 351人浏览 独家记忆
摘要

这篇文章主要讲解了“从ES迁移到ClickHouse的原因有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“从ES迁移到ClickHouse的原因有哪些”

这篇文章主要讲解了“从ES迁移到ClickHouse的原因有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“从ES迁移到ClickHouse的原因有哪些”吧!

为什么选择 ClickHouse

ClickHouse 是一款高性能列式分布式数据库管理系统,我们对 ClickHouse 进行了测试,发现有下列优势:

①ClickHouse 写入吞吐量大,单服务器日志写入量在 50MB 到 200MB/s,每秒写入超过 60w 记录数,是 ES 的 5 倍以上。

②在 ES 中比较常见的写 Rejected 导致数据丢失、写入延迟等问题,在 ClickHouse 中不容易发生。

③查询速度快,官方宣称数据在 pagecache 中,单服务器查询速率大约在 2-30GB/s;没在 pagecache  的情况下,查询速度取决于磁盘的读取速率和数据的压缩率。经测试 ClickHouse 的查询速度比 ES 快 5-30 倍以上。

ClickHouse 比 ES 服务器成本更低:

  • 一方面 ClickHouse 的数据压缩比比 ES 高,相同数据占用的磁盘空间只有 ES 的 1/3 到  1/30,节省了磁盘空间的同时,也能有效的减少磁盘 io,这也是 ClickHouse 查询效率更高的原因之一。

  • 另一方面 ClickHouse 比 ES 占用更少的内存,消耗更少的 CPU 资源。我们预估用 ClickHouse  处理日志可以将服务器成本降低一半。

④相比 ES,ClickHouse 稳定性更高,运维成本更低。

⑤ES 中不同的 Group 负载不均衡,有的 Group 负载高,会导致写 Rejected 等问题,需要人工迁移索引;在 ClickHouse  中通过集群和 Shard 策略,采用轮询写的方法,可以让数据比较均衡的分布到所有节点。

⑥ES 中一个大查询可能导致 OOM 的问题;ClickHouse 通过预设的查询限制,会查询失败,不影响整体的稳定性。

⑦ES 需要进行冷热数据分离,每天 200T  的数据搬迁,稍有不慎就会导致搬迁过程发生问题,一旦搬迁失败,热节点可能很快就会被撑爆,导致一大堆人工维护恢复的工作。

⑧ClickHouse 按天分 Partition,一般不需要考虑冷热分离,特殊场景用户确实需要冷热分离的,数据量也会小很多,ClickHouse  自带的冷热分离机制就可以很好的解决。

⑨ClickHouse 采用 sql 语法,比 ES 的 DSL 更加简单,学习成本更低。

结合携程的日志分析场景,日志进入 ES 前已经格式化成 JSON,同一类日志有统一的 Schema,符合 ClickHouse Table  的模式。

日志查询的时候,一般按照某一维度统计数量、总量、均值等,符合 ClickHouse 面向列式存储的使用场景。

偶尔有少量的场景需要对字符串进行模糊查询,也是先经过一些条件过滤掉大量数据后,再对少量数据进行模糊匹配,ClickHouse 也能很好的胜任。

另外我们发现 90% 以上的日志没有使用 ES 的全文索引特性,因此我们决定尝试用 ClickHouse 来处理日志。

用 ClickHouse 处理日志

ClickHouse 高可用部署方案

①容灾部署与集群规划

我们采用多 Shards、2 Replicas 的方式,通过 ZooKeeper 进行服务器间互相备份,允许一个 Shard 一台服务器 Down  机数据不丢失。

为了接入不同规模的日志,我们将集群分成 6 台、20 台两种规模的多个集群。

从ES迁移到ClickHouse的原因有哪些

②跨 IDC 部署

借助于 ClickHouse 分布式表的特性,我们实现了跨集群搜索。携程有多个 IDC,日志分布在不同的 IDC。

为了避免跨 IDC 搬迁日志,我们在每个 IDC 都部署一套 ClickHouse,然后配置 ClickHouse 的跨 IDC 的  Cluster,创建分布式表,实现跨多个 IDC 数据搜索。

如下图所示:

从ES迁移到ClickHouse的原因有哪些

③几个重要的参数说明

如下所示:

  • max_threads:32 #用于控制一个用户的查询线程数。

  • max_memory_usage:10000000000 #单个查询最多能够使用内存大小 9.31G。

  • max_execution_time:30 #单个查询最大执行时间。

  • skip_unavailable_shards:1 #在通过分布式表查询的时候,当某一个 Shard 无法访问时,其他 Shard  的数据仍然可以查询。

④踩过的坑

我们之前将 Cluster 的配置放在 config.d 的目录下,当 ClickHouse 意外重启后,发现查询分布式表时部分 Shard  访问不到的问题,因此我们现在不再使用 config.d 配置方式,Cluster 配置放在 metrika.xml 中。

消费数据到 ClickHouse

从ES迁移到ClickHouse的原因有哪些

我们使用 Gohangout 消费数据到 ClickHouse,关于数据写入的几点建议:

  • 采用轮询的方式写 ClickHouse 集群的所有服务器,保证数据基本均匀分布。

  • 大批次低频率的写入,减少 parts 数量,减少服务器 merge,避免 Too many parts 异常。通过两个阈值控制数据的写入量和频次,超过  10w 记录写一次或者 30s 写一次。

  • 写本地表,不要写分布式表,因为分布式表接收到数据后会将数据拆分成多个 parts,并转发数据到其它服务器,会引起服务器间网络流量增加、服务器 merge  的工作量增加,导致写入速度变慢,并且增加了 Too many parts 的可能性。

  • 建表时考虑 partition 的设置,之前遇到过有人将 partition 设置为 timestamp,导致插入数据一直报 Too many parts  的异常。我们一般按天分 partition。

  • 主键和索引的设置、数据的乱序等也会导致写入变慢。

数据展示

我们调研了像 Supperset、Metabase、Grafana 等几个工具,最终还是决定采用在 Kibana3 上开发支持 ClickHouse  实现图表展示。

主要原因是 Kibana3 这种强大的数据过滤功能,很多系统都不具备,另外也考虑到迁移到其他系统成本较高,用户短期内难以适应。

目前 K3 上几种常用的图表(terms、histogram、percentiles、ranges、table),我们都开发了对应的 ClickHouse  版本,用户体验与原版基本保持一直,查询效率经过优化大幅提升。

查询优化

Kibana 中的 Table Panel 用于显示日志的明细数据,一般查询最近 1 小时所有字段的数据,最终只展示前 500 条记录。这种场景对于  ClickHouse 来说非常不友好。

针对这个问题,我们将 table Panel 的查询分两次进行:

  • 第一次查询单位时间间隔的数据量,根据最终显示的数据量计算出合理查询的时间范围。

  • 第二次根据修正后的时间范围,结合 Table Panel 中配置的默认显示的 Column 查询明细数据。

经过这些优化,查询的时间可以缩短到原来的 1/60,查询的列可以减少 50%,最终查询数据量减少到原来的 1/120。

ClickHouse 提供了多种近似计算的方法,用于提供相对较高准确性的同时减少计算量。

使用 MATERIALIZED VIEW 或者 MATERIALIZED COLUMN 将计算量放在平常完成,也能有效降低查询的数据量和计算量。

Dashboard 迁移

因为 Kibana3 上的 Dashboard 很多,我们开发了一个 Dashboard 迁移工具,通过修改 kibana-init-* 索引中  Dashboard 的配置来进行 Dashboard 迁移。

接入 ClickHouse 的效果

目前我们一个集群的日志量 100T 左右(压缩前 600T 左右),ClickHouse 服务器主要监控指标如下:

从ES迁移到ClickHouse的原因有哪些

从ES迁移到ClickHouse的原因有哪些

从ES迁移到ClickHouse的原因有哪些

ClickHouse 相对 ES 占用更少的内存。ES 为了提高查询效率会将很多数据放在内存中,如:segment 的索引数据、filter  cache、field data cache、indexing buffer 等。

ES 内存的使用量与索引量、数据量、写入量、查询量等成正比。删除(下线)索引、迁移索引或者扩容是应对 ES 内存问题的常用手段。

但是删除(下线)索引导致用户希望保存更长时间数据的需求无法满足,而服务器扩容导致又了成本上升。

ClickHouse 的内存消耗主要包括内存型的 engine,数据索引,加载到内存中待计算的数据,搜索的结果等。在 ClickHouse  中日志的数据量和保存时间主要和磁盘有关。

相比 ES,ClickHouse 后至少可以节省 60% 的磁盘空间。

从ES迁移到ClickHouse的原因有哪些

如上图所示,Netflow 的日志占用的磁盘空间 ClickHouse 是 ES 的 32%,CDN 日志占用磁盘空间 ClickHouse 是 ES 的  18%,Dblog 的日志 ClickHouse 是 ES 的 22.5%。

比较查询速度提升,ClickHouse 比 ES 提升了 4.4 倍到 38 倍不等,原来 ES  上查询不出来的问题基本得到了解决,查询慢的问题有了很大的提升。

Netflow 由于数据量非常大,导致 ES 无法查询,ClickHouse 中经过优化,查询耗时 29.5s,CDN 的查询 CK 和 ES 快 38  倍,dbLog 的查询 CK 比 ES 快 4.4 倍。

关于查询速度的对比,因为在生产环境,无法保证 ES 和 ClickHouse 的环境一样,ES 使用的是 40 核 256G 的服务器,一台服务器部署一个  ES 实例,单服务器数据量 3T 左右。

ClickHouse 采用的是 32 核 128G 的服务器,单服务器数据量大约 18T 左右,一台服务器部署一个 ClickHouse 实例。

从ES迁移到ClickHouse的原因有哪些

用 ClickHouse 处理日志查询速度得到了很大的提升,基本解决了数据保存时间短的问题,用户使用体验也得到了提升。

我们预估使用现在 ES 日志集群 50% 的服务器资源就能就能够完成现有 ES 日志的处理,并能提供比现在更好的用户体验。

ClickHouse 基本运维

总体来说 ClickHouse 的运维比 ES 简单,主要包括以下几个方面的工作:

①新日志的接入、性能优化

②过期日志的清理,我们通过一个定时任务每天删除过期日志的 partition。

③ClickHouse 的监控,使用 ClickHouse-exporter+VictoriaMetrics+Grafana 的实现。

④数据迁移,通过 ClickHouse 分布式表的特性我们一般不搬迁历史数据,只要将新的数据接入新集群,然后通过分布式表跨集群查询。

随着时间的推移,历史数据会被清理下线,当老集群数据全部下线后,新老集群的迁移就完成了。

确实需要迁移数据时,采用 ClickHouse_copier 或者复制数据的方式实现。

⑤常见问题处理:

慢查询:通过 kill query 终止慢查询的执行,并通过前面提到的优化方案进行优化。

Too many parts 异常:Too many parts 异常是由于写入的 part 过多 part 的 merge  速度跟不上产生的速度。

导致 part 过多的原因主要包括几个方面:

  • 设置不合。

  • 小批量、高频次写 ClickHouse。

  • 写的是 ClickHouse 的分布式表。

  • ClickHouse 设置的 merge 线程数太少了。

无法启动:之前遇到过 ClickHouse 无法启动的问题。

主要包括两个方面:

  • 文件系统损坏,通过修复文件系统可以解决。

  • 某一个表的数据异常导致 ClickHouse 加载失败,可以删除异常数据后启动,也可以把异常的文件搬到 detached 目录,等 ClickHouse  起来后再 attach 文件恢复数据。

感谢各位的阅读,以上就是“从ES迁移到ClickHouse的原因有哪些”的内容了,经过本文的学习后,相信大家对从ES迁移到ClickHouse的原因有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 从ES迁移到ClickHouse的原因有哪些

本文链接: https://lsjlt.com/news/84506.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 从ES迁移到ClickHouse的原因有哪些
    这篇文章主要讲解了“从ES迁移到ClickHouse的原因有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“从ES迁移到ClickHouse的原因有哪些”...
    99+
    2024-04-02
  • 从Ops迁移到DevOps所产生的变化有哪些
    这篇文章主要介绍“从Ops迁移到DevOps所产生的变化有哪些”,在日常操作中,相信很多人在从Ops迁移到DevOps所产生的变化有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”从Ops迁移到DevOps...
    99+
    2023-06-15
  • 从MySQL到ORACLE程序迁移的注意事项有哪些
    本篇文章给大家分享的是有关从MySQL到ORACLE程序迁移的注意事项有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 ...
    99+
    2024-04-02
  • sqlite3迁移mysql可能遇到的问题有哪些
    小编给大家分享一下sqlite3迁移mysql可能遇到的问题有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!问题列表1、sq...
    99+
    2024-04-02
  • Oracle迁移到MySQL性能下降的注意点有哪些
    Oracle迁移到MySQL性能下降的注意点有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 最近有较多的客户系统由原来...
    99+
    2024-04-02
  • linux找不到命令的原因有哪些
    1. 命令不存在:输入的命令在系统中不存在,可能是拼写错误或者未安装相关软件包。2. 命令不在系统的PATH环境变量中:系统会在PA...
    99+
    2023-08-12
    linux
  • java代码迁移的方案有哪些
    迁移Java代码有以下几种常见的方案: 重写代码:将原有的代码逐行重写,适合在迁移过程中进行重构和优化。 逐步重构:根据代码...
    99+
    2023-10-22
    java
  • win10找不到防火墙的原因有哪些
    Windows 10找不到防火墙的原因可能有以下几种:1. 防火墙服务未运行:可能是由于某些原因导致Windows防火墙服务未能正常...
    99+
    2023-09-06
    win10
  • win10找不到dll文件的原因有哪些
    在Windows 10中,找不到DLL文件的原因可能包括:1. 文件被误删除或移动:如果DLL文件被误删除或移动到其他位置,系统将无...
    99+
    2023-09-02
    win10
  • idea中找不到符号的原因有哪些
    以下是一些可能的原因:1. 符号未被收录:某些符号可能尚未被收录到常见的符号库或字体中,因此在某些字体或软件中可能找不到相应的符号。...
    99+
    2023-08-08
    idea
  • SQL慢的原因有哪些
    本篇内容主要讲解“SQL慢的原因有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL慢的原因有哪些”吧!- 思维导图 -写操作作为后端开发,日常操作数据库...
    99+
    2024-04-02
  • 域名信息查询不到的原因有哪些
    1. 域名不存在:可能是因为该域名还未被注册,或者已经被删除。2. WHOIS服务器故障:WHOIS服务器可能会出现故障,导致无法查...
    99+
    2023-06-13
    域名信息查询 域名
  • Python+Selenium定位不到元素的原因有哪些
    这篇文章主要介绍了Python+Selenium定位不到元素的原因有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在做web应用的自动化测试时,定位元素是必不可少的,这个...
    99+
    2023-06-14
  • 无法连接到服务器的原因有哪些
    1. 服务器故障或维护:服务器可能出现故障或正在进行维护,导致无法连接。2. 网络问题:网络连接可能出现问题,例如网络延迟、断开或路...
    99+
    2023-06-06
    无法连接到服务器 服务器
  • Oracle数据文件迁移的方法有哪些
    这篇文章主要讲解了“Oracle数据文件迁移的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Oracle数据文件迁移的方法有哪些”吧!(一) 方法...
    99+
    2024-04-02
  • Couchbase的数据迁移策略有哪些选择
    在Couchbase中,数据迁移可以采用以下几种策略: 使用Couchbase内置的工具:Couchbase提供了一些内置工具,...
    99+
    2024-04-02
  • Win10电脑不能读取移动硬盘的原因有哪些
    Win10电脑不能读取移动硬盘的原因可能有以下几种:1. 驱动问题:移动硬盘的驱动程序可能需要更新或安装,如果驱动程序不匹配或过时,...
    99+
    2023-10-18
    Win10
  • 香港服务器CPU到达100%的原因有哪些
    香港服务器CPU到达100%的原因有:1、香港服务器中毒导致CPU资源被消耗;2、香港服务器正在运作大规模程序导致CPU到达100%;3、香港服务器运行的软件太多,服务器资源承受力不够导致。中毒了,所以导致CPU的资源被消耗得很大,如果是这...
    99+
    2024-04-02
  • 连接到云服务器失败的原因有哪些
    今天小编给大家分享一下连接到云服务器失败的原因有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。导致云服务器连接失败的原因...
    99+
    2023-06-06
  • win7检测不到网络代理的原因有哪些
    有以下几个可能的原因导致Windows 7无法检测到网络代理:1. 代理服务器配置错误:确保代理服务器的地址和端口号正确配置,并且与...
    99+
    2023-09-07
    win7
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作