Contentsquare 从 Elasticsearch 迁移到了 ClickHouse

ClickHouse数据导入 文章目录ClickHouse数据导入下载样本数据创建数据库创建数据表数据表字段的数据类型数据表的表引擎导入数据检查数据查询数据 ClickHouse数据导入 参照ClickHouse官方教程来导入样本数据: https://clickhouse.tech/docs/en/getting-started/tutorial/ 下载样本数据 curl https://clickhouse-datasets.s3.yandex.net/hits/tsv/hits_v1.tsv.xz | unxz --threa 阅读详情

图片

欢迎Contentsquare作为我们博客的嘉宾。请继续阅读,了解他们为什么使用ClickHouse,以及从Elastic迁移到ClickHouse的经历。

在Contentsquare,我们过去在Elasticsearch上运行我们的主要SaaS应用程序。

5年前,我们开始了一个迁移过程,将所有的分析应用程序都迁移到ClickHouse 上运行。我们希望通过迁移来改善水平可扩展性、系统的稳定性以及整体效率(查询时间和成本)。

在这篇博文中,我们将告诉您更多关于迁移过程和所学到的经验。

为什么决定进行迁移?

我们在生产环境中有14个Elasticsearch集群。每个集群有30个节点(3个主节点)。我们使用带有网络附加磁盘的 m5.4xlarge 实例。当时,我们在水平可扩展性方面遇到了困难,因为我们无法组建更大的集群并保持它们适应我们的工作负载的稳定性。

由于我们的集群规模有限,我们无法处理任何无法适应单个集群的租户。这对我们公司的增长能力施加了严重的限制。我们能处理的流量有一个上限,这意味着我们的公司增长因技术原因而放缓。对我们来说,这是不可接受的。

为了消除这个技术限制并支持公司的增长,我们有两个选择:

  1. 找到一种方式在多集群环境中高效地托管每个租户。

  2. 迁移到一种更可扩展的技术。

我们选择了第二个选项,并开始研究适合我们需求的OLAP数据库引擎:

  • 查询的最小延迟。

  • 丰富的查询语言。

  • 适用于机械硬盘的快速高效。

  • 部署和操作简单。

经过广泛的工程研究,并对市场上的大多数OLAP数据库和处理系统进行调查,我们发现ClickHouse符合我们的所有要求,并开始计划迁移。

我们的迁移策略

迁移一个大型的、在生产环境中被数千个客户使用的代码库并不是一件容易的事。我们将迁移工作分为3个阶段:

  1. 熟悉ClickHouse并用它构建一个新产品

  2. 使用自定义工具复制所有现有功能,以确保没有任何退化

  3. 逐个迁移我们的客户

图片

阶段 1: 搭建新产品掌握新技术

我们在迁移现有产品之前,选择了在ClickHouse之上构建一个新产品。我们希望先熟悉这项技术,并在一个更安全的环境中将其投入生产。这个阶段的目标是:

  • 熟悉技术并学习如何使用它

  • 构建ClickHouse部署的自动化和CI/CD工具

  • 设置警报和监控系统 

我们花了大约4个月的时间来发现这项新技术、调整它并构建所需的工具。这个阶段对团队的能力提升非常有价值,并使我们对在更大规模上部署ClickHouse感到更加自信。

阶段2:迁移现有产品

在成功完成第一个里程碑后,我们将注意力转向我们的主要产品。我们将团队分为两个部分:一半负责维护和改进当前的技术栈,另一半则负责将所有现有功能迁移到ClickHouse上。

我们以迭代的方式进行主产品的迁移。我们逐个迁移每个现有的API端点,并重新编写它们,使其使用ClickHouse而不是Elasticsearch。我们监听每个传递到旧端点的查询,并在新端点上重新执行相同的查询。这样,我们可以通过实际生产使用中的比较,对比两个端点的结果,识别错误并逐步修复。一旦我们认为该端点稳定可靠,我们就开始重写下一个端点。

在此期间,所有生产查询仍然由旧的Elasticsearch处理。新的ClickHouse基础架构尚未在生产环境中使用。

图片

阶段 3: 迁移客户

在将所有端点迁移到ClickHouse并进行测试后,我们对将客户迁移到新基础架构感到非常放心。我们再次非常小心地不同时迁移所有客户,以确保有足够的时间和资源来识别潜在问题。

我们最初迁移了一个客户,然后是另一个客户,再然后是更多的客户。在接下来的6个月内,我们的所有客户都完成了迁移,我们的Elasticsearch集群可以关闭。我们自豪地说,在迁移过程中,我们完全没有遇到任何回归问题,这要归功于我们仔细的规划和准备。

我们迁移之后的体验

ClickHouse的运行成本比原来降低了11倍,同时查询的p99性能提升了10倍。因此,我们能够允许客户查询多达3个月的历史数据,而不仅仅是之前的1个月。我们还将数据保留期延长到了13个月,因为现在技术上有可能实现这一点。

我们对 ClickHouse 的设置

在迁移到ClickHouse时,我们进行了两个主要的架构调整,以充分利用ClickHouse的优势。

首先,我们设计了一个自定义的数据导入组件,以降低主要ClickHouse集群中插入操作的开销。其次,我们决定将查询表示为抽象语法树。这使我们能够构建一个查询优化器,利用我们的数据模型所隐含的一些假设。

摄入流水线

我们将数据逐个分片进行插入,但我们确保插入的方式与我们在分布式表中定义的分片键兼容。这样做可以减少集群管理插入操作所需的I/O量。

因此,我们不得不构建一个专门的组件,我们称之为 clickin ,用于处理插入操作。clickin 从Kafka主题中读取数据;Kafka主题中的数据使用ClickHouse的分片键进行分区。因此,分区分配是静态的。

由于我们已经构建了一个组件来最小化插入操作的I/O开销,我们也利用这个机会实现了另一个优化。 clickin 将输入数据使用 clickhouse-local 实例转换为ClickHouse的本地格式,然后将其发送到集群。这样,我们可以节省一些CPU资源,因为数据以对ClickHouse最有效的格式到达。

图片

查询优化器

我们从一开始就选择构建一个库,允许我们将ClickHouse查询构建和操作为抽象语法树。我们需要采用这种方法,因为我们的大多数查询都是动态的,并且使用用户选择的构建模块即时组合而成。这个设计选择使我们能够构建一个查询优化器,为我们进行几个重要的转换:

  • 将分区键和排序键条件传播到所有子查询中

  • 在适用时,将 distributed_group_by_no_merge 设置传播到嵌套子查询中

  • 在适用时将子查询合并在一起 

  • 在生成查询之前简化一些冗余/无用的代数表达式。

这些优化使我们最慢的5%查询的速度提高了10倍。

图片

经验教训: 丝滑般迁移的注意事项

  • 不要将迁移视为修复功能性错误的机会。这会使您的非回归测试变得非常困难,并且会减慢进展速度。

  • 投资于非回归测试的自动化。

  • 备份尚不完善,我们不得不构建一个小工具来进行备份。我们利用了这里描述的一种技术。

  • ClickHouse非常非常快,但对于查询优化几乎没有什么帮助。

    • 投资足够的时间来了解MergeTree引擎以及查询的执行方式。

    • 确保所有关于实体的数据都在一个单独的分片中。这将允许您使用   distributed_group_by_no_merge = 1 ,并减少网络I/O。

    • 确保可以轻松关闭所有写入表的进程,在进行模式更改之前您需要这样做。 

从Elasticsearch迁移到ClickHouse是一个漫长的过程,但这是我们所做过的最好的技术决策之一。我们没有任何后悔,这释放了新功能、增长和更容易扩展的潜力。

图片

联系我们

手机号:13910395701

邮箱:Tracy.Wang@clickhouse.com

满足您所有的在线分析列式数据库管理需求

记一次 ClickHouse 数据迁移,实战经验 Clickhouse 的数据备份有多种方式,其官方网站上就提供了多种备份方式可以参考,但是不同公司有不同的可用资源和业务需求,因此不存在一个通用的解决方案可以应对各种情况下的ClickHouse备份和恢复。 适用于 1GB 数据的方案可能并不适用于几十 PB 数据的情况。 有多种具备各自优缺点的可能方法,将在下面对其进行讨论。最好使用几种方法而不是仅仅使用一种方法来弥补它们的各种缺点。 背景: 某项目clickhouse 数据库迁移,数据量大约9亿条单表,版本为clickhouse20,迁移... 阅读详情

相关推荐

数据通过logstash写入clickhouse详解

最近由于需要向clickhouse导入数据,数据规模较大,考虑传输工具的效率。因此logstash暂入候选名单。网上资料本文讲解插件的用法调试的过程。提供详细的案例调试代码,遇到的message=>"Bad Request", :response=>"Code: 26, e.displayText() = DB::Exception: Cannot parse JSON string: expected opening quote: (while read the value of key id

x443557730的博客 7691

clickhouse hbase性能对比_为什么我们要从ES迁移到ClickHouse?

“ ElasticSearch 是一种基于 Lucene 的分布式全文搜索引擎,携程用 ES 处理日志,目前服务器规模 500+,日均日志接入量大约 200TB。图片来自 Pexels随着日志量不断增加,一些问题逐渐暴露出来:一方面 ES 服务器越来越多,投入的成本越来越高。另一方面用户的满意度不高,日志写入延迟、查询慢甚至查不出来的问题一直困扰着用户。而从运维人员的角度看,ES 的运维...

weixin_39951112的博客 4683

U8备份提示“远程组件初始化失败”

问题现象: SQL出现问题后重装,U8没有重装,之后直接附加数据库,U8可以正常登陆,但是在备份的时候提示远程组件初始化失败。 问题原因: 因为重装了SQL,没有进行U8数据源初始化,导致Master库中丢失了存储过程储 解决办法:在Master库重建存储过程 USE [master] GO SET ANSI_NULLS OFF GO SET QUOTED_IDENTIFIER OFF GO CREATE PROCEDURE [dbo].[U8FileServerExtendProc] @cmdLi.

SamYux 2472

如何迁移ES数据到CLICKHOUSE中

示例场景:需要迁移某个应用的历史日志数据到CK中,日志数据在ES中是按天索引的,每天一个索引文件,索引规则是"应用名"+"日期"。CSV文件输出也验证了下。

qq_34458790的博客 1463

使用RepeatModeler和RepeatMasker注释基因组重复序列

重复序列注释有两种常用策略,基于同源序列相似性和基于重复序列结构特征。RepeatMasker是基于同源序列相似性注释序列的常用工具, RepeatModeler可用来从头对基因组的重复序列家族进行建模注释,它的核心组件是RECON和RepatScout。 这篇教程介绍如何使用RepeatModeler从头鉴定基因组的重复序列,之后用RepeatMasker根据自...

xuzhougeng blog 8849

【数据中台】数据中台架构搭建百科全书

0、前言 当前,大部分企业不再建设从源数据采集到分析应用的烟囱式系统,更倾向于数据集中采集、存储,并应用分层建设。这种方式一方面有利于应用系统的快速部署,另一方面也保证了数据的集中管理与运营,体现数据的资产、资源属性。 数据中台的出现弥补了数据开发和应用开发之间由于开发速度不匹配而出现的响应力不足等缺陷问题。 数据中台是国内学者提出的概念,起始于阿里的“大中台、小前台”概念。阿里的中台是从管理的角度出发,以中台事业部集中数据搜索,技术及产品,数据共享等多个部门的功能。其他组织或企业建设数据中台不一定需

Sunny的专栏 8405

【用户画像】将数据迁移到ClickHouse(源码实现)、位图的介绍(bitmap)、位图在用户分群中的应用、位图的使用

函数arrayJoin宽表转Bitmap表需要行转列,要用arrayJoin把多列数组炸成行。把聚合列的数字值聚合成Bitmap的聚合函数bitmapAnd求两个Bitmap值的交集bitmapOr求两个Bitmap值的并集bitmapXor求两个Bitmap值的差集(异或)把Bitmap转换成数值数组把一列中多个bitmap值进行并集聚合。(连续值)求Bitmap包含的值个数更多其他函数可以参考官网。

weixin_43923463的博客 2844

LTspice introduction - 2 LTspice的界面

LTspice的界面主要有两个:Schematic Capture和Waveform Viewer Schematic Capture 它主要是用来画电路图的,画完电路图之后,添加一些dot 命令同时选择一些仿真的参数,点击执行(Run)Waveform Viewer 如果你的仿真不是op point的话,一个都会打开它,在它里面你可以画图相应的图形。 有两种方式可以在Viewer

贾亮的专栏 3220

Flink CDC实现数据增量备份到ClickHouse实战

点击上方蓝色字体,选择“设为星标”回复"面试"获取更多惊喜八股文教给我,你们专心刷题和面试Hi,我是王知无,一个大数据领域的原创作者。放心关注我,获取更多行业的一手消息。本文我们首先来介...

微信搜:import_bigdata,大数据领域硬核原创作者 3584

第七篇:A133 Android 10 触摸提示音过大

描述: 开启触摸提示音功能之后,客户反馈触摸提示音过大,需要改小。 解决方案: 看代码注释,在framework下搜索方法即可。 /** @see AudioManager#playSoundEffect(int) */ public void playSoundEffect(int effectType) { playSoundEffectVolume(effectType, -1.0f); } /** @see AudioManager#playSoundEff

qq_33088619的博客 1696

HDR 人像肤色稳定实战:AE/AWB/ToneMap 冲突解耦与优先级裁决

人像 HDR 最容易“翻车”的就是**肤色飘**:AE 抢亮度、AWB 拉白点、TM 又在肩部压高光,三方各自“对”却合起来“错”。本文给出一套**工程可落地**的裁决策略:以**肤色 ROI 锚点**为最高约束,AE 先对脸部入射照度收敛,AWB 在**肤色先验 + 光源模型**下缓变,TM 采用**色相保持 + 中灰/肤色双锚**且时域一致化。配套**阈值与回归**(ΔE00、亮度漂移 RMS、频闪注入),把“主观对”的口径落到**可度量**,并给出逆光、多脸、霓虹等极端场景的**例外分流**。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1199

Trip.com 如何从 Elasticsearch 迁移到 ClickHouse 并构建了 50PB 的日志解决方案

本文字数:8721;估计阅读时间:22 分钟审校:庄晓东(魏庄)本文在公众号【ClickHouseInc】首发在 Trip.com,我们为用户提供广泛的数字产品,包括酒店和机票预订、景点、旅游套餐、商务旅行管理和与旅行相关的内容。正如你所猜的那样,我们需要一个可扩展、可靠且快速的日志平台,这对于我们的运营至关重要。

ClickHouseDB的博客 1396

基于Simulink的自适应反步法(Adaptive Backstepping)控制​

本文针对非线性系统控制中未知参数和强非线性耦合的挑战,提出基于Simulink的自适应反步法解决方案。通过融合参数在线估计与反步递归设计,该方法显著提升了永磁同步电机(PMSM)速度控制的鲁棒性,使跟踪误差从20%降至3%,参数估计收敛时间小于0.5秒。文章详细阐述了从算法推导到Simulink实现的完整流程,包括系统架构设计、核心算法推导(以PMSM为例)、模块化建模方法、参数优化策略以及工程部署建议。提供的自适应控制器MATLAB代码和关键参数表可直接应用于实际工程,为电机驱动、机械臂等非线性系统控制提

xiaoheshang_123的博客 101

Elasticsearch多种方案数据迁移

Elasticsearch数据迁移 注意:Elasticsearch同版本数据迁移,只需将数据存储目录的文件拷贝到新集群path,重启es集群,即可自动recovery,迁移效率最快。这种方案需要重新给启动用户赋权限,然后es启动即可。 不同版本可采取以下方案: 方案1:使用Elasticsearch-Exporter迁移 1.Elasticsearch-Exporter简介: 将ES中的数据向其他导出的简单脚本实现。 2.Elasticsearch-Exporter安装: npm install nomn

weixin_43833817的博客 1万+

YOLOv8n轻量化实战:10分钟打通实时摄像头目标检测,附参数调优与避坑指南

本文介绍了如何快速入门YOLOv8目标检测框架,通过摄像头实战实现实时检测。YOLOv8凭借轻量化架构和跨平台优势,是新手入门的理想选择。文章详细讲解了环境搭建(1分钟完成)、核心代码逻辑(3分钟掌握)以及性能调优技巧(3分钟进阶),提供可直接运行的代码示例。重点包括:模型选择(优先yolov8n.pt)、摄像头参数优化、置信度阈值调整、检测类别指定等实用技巧,帮助开发者快速实现10-15FPS的实时检测效果,并针对不同场景提供优化建议。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 370

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【笔记】从ES到ClickHouse:B站海量日志分析场景迁移的实践与思考

【笔记】从ES到ClickHouse:B站海量日志分析场景迁移的实践与思考

JH_Zhai的博客 648

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

从Elasticsearch迁移到ClickHouse:golang-migrate/migrate终极指南

在当今大数据时代,数据迁移是很多企业面临的重要挑战。当您需要从Elasticsearch迁移到ClickHouse时,golang-migrate/migrate提供了一个简单高效的解决方案。这个基于Go语言的数据库迁移工具支持多种数据库类型,让您的数据迁移过程变得轻松可控。 ## 为什么选择ClickHouse? 🚀 ClickHouse作为高性能的列式数据库,在处理大规模数据分析时具有显

gitblog_00541的博客 359

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

通过logstash(6.8.6)将es(6.8.6)数据导入clickhouse

通过logstash(6.8.6)将es(6.8.6)数据导入clickhouse

ma_ling_shu的博客 1827

记 350亿数据从 es 迁移到 ClickHouse 遇到的问题

记 350亿数据从 es 迁移到 ClickHouse 遇到的问题

caohao0591的专栏 1891

法国大数据公司ContentSquare获4200万美元B轮融资

【数据猿导读】 ContentSquare CEO Jonathan Cherki表示,想要把这笔钱用在未来数字体验上。ContentSquare的技术可帮助企业了解每个用户与其网站或移动APP交互情况,从而改善其线上转型工作。作者 | 金又南官网 | www.datayuan.cn微信公众号ID | datayuancn当你获得4200万美元融资后,下一步你会怎么走?来自法国的大数据公司Cont

数据猿 792

如何快速地把HDFS中的数据导入ClickHouse

如何快速地把HDFS中的数据导入ClickHouse ClickHouse是面向OLAP的分布式列式DBMS。我们部门目前已经把所有数据分析相关的日志数据存储至ClickHouse这个优秀的数据仓库之中,当前日数据量达到了300亿。 之前介绍的有关数据处理入库的经验都是基于实时数据流,数据存储在Kafka中,我们使用Java或者Golang将数据从Kafka中读取、解析、清洗之后写入ClickH...

Ricky点滴 1万+

ES 不香吗,为啥还要 ClickHouse?

点击上方“芋道源码”,选择“设为星标”管她前浪,还是后浪?能浪的浪,才是好浪!每天 8:55 更新文章,每天掉亿点点头发...源码精品专栏原创 | Java 2020 超神之路,很肝~中...

芋艿V 1165

ES数据迁移

移除数据节点 移除node前可以先exclude要移除的node l cluster: cluster.routing.allocation.exclude._name : node1 l Index: index.routing.allocation.exclude._name: node1 index.routing.allocation.require.node_type: hot 技巧:以上参数可根据_ip、_host等来进行配置 以上参数可实现hot-warn 目标:迁移替换sto

阿拉斯加大闸蟹的博客 9674

ClickHouse(二)-导入数据

###导入数据 准备数据 http://files.grouplens.org/datasets/movielens/ movieslens数据集,ratings.csv 26024314条数据 上手 链接clickhouse docker exec -it ch-server /bin/bash clickhouse-client 建表 CREATE TABLE ratings(user...

木卫二号的专栏 1万+

告别规则黑盒:基于JVS-Rules的风控规则治理实践——可视化决策编排+血缘追踪+版本快照

可读’——通过决策流图谱与业务语义节点,让非技术人员理解逻辑;‘可溯’——依赖规则版本快照与执行日志,实现任意交易的全链路回放;‘可担责’——基于血缘追踪与权限基线,清晰界定业务定义、技术实现、合规验证三方责任。这三者共同构成风控规则治理的三角支柱,将隐性经验转化为可版本化、可审计、可协同的组织级数字资产。

weixin_42054392的博客 220
上一篇: 流式平台的高速内容分布式分析
下一篇: ​深度介绍 ClickHouse Joins 的底层知识(ClickHouse 中对 Join 类型的支持 - Part 2)
ClickHouseDB
博客等级 码龄3年 1707粉丝 320原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值