从 ClickHouse 到 Apache Doris:快成物流的数智化货运应用实践

导读:随着快成物流的大宗商品产业链的不断发展,货运轨迹规划和实时数据分析的需求日益迫切,为了保障数据报表更新、用户画像圈选与物流轨迹实时更新等大数据核心系统性能,快成物流引入 Apache Doris 实时数仓升级了大数据算法平台,目前已经部署在 2 套生产集群,存储数据总量达百亿规模,覆盖实时数仓、BI 多维分析、用户画像、货运轨迹信息系统等业务场景。

作者共创:快成物流大数据算法平台技术负责人 汪新禧 & SelectDB 内容团队

山西快成物流科技有限公司(简称“快成物流”)是一家以新一代信息技术为核心的“互联网 + 大宗物流产业链生态”的平台型科技企业,网络货运排名跻身全国前三。快成物流深耕“让大宗商品流通更美好”的企业使命,依托数字技术连接大宗物流全产业链,向产业参与主体提供全链路一体化物流解决方案,为行业降本、增效、提质持续助力。

目前快成物流服务卡车司机累计已破百万,货主数万家,在业务高峰期,单日新增数据量达到千万级别,大数据系统的数据处理能力面临巨大的挑战。快成物流已拥有多个数据业务线,其中核心业务包括:

  • 网络货运平台: 服务数万货主与百万卡车司机的大宗商品物流运输平台,业务流程复杂,实体货物种类多、服务周期长,对数据实时性要求高、数据分析维度复杂。
  • 快乐驾: 智慧物流车载终端系统,包括轨迹监控、安全驾驶等。
  • 快乐购: 后市场消费服务平台,包括加油加气、卡车零件销售等电商服务。

业务生态.png

随着业务规模的不断扩大,快成大数据算法平台在支撑上述业务产生海量数据存储的同时,也需应对多种多样的数据应用需求,包括基础业务支撑、BI 报表分析、可视化大屏、用户画像、智能风控、精准营销、AB 实验以及合规性监测等,这也对大数据平台提出了更高的技术要求:

  • 极速数据处理:平台需要支持高吞吐量的复杂数据分析,在海量数据中快速准确地提取有价值的信息。
  • 点查性能强:大数据平台需实现高 QPS 点查能力,确保在海量数据中快速定位并查询特定信息,以满足用户对数据实时性的高要求。
  • 运维管理成本低:在保障数据处理效率和质量的同时,大数据平台期望通过自动化、智能化的运维手段降低运营成本。
  • 运行稳定:系统需要高可靠、高可用,为业务持续发展提供有力保障。

业务诉求与技术选型

随着用户对数据分析的实时性与时效性需求的日益提升,快成物流在早期进行 OLAP 数据库技术选型时,核心诉求是寻找一款基于 MPP 架构、高性能、实时的分析型数据库。当时考察选型的数据库包括 Kylin、Druid、Doris、ClickHouse 等。经过评估后,我们先选择了已经拥有一定用户基础的 ClickHouse,其在千万级别的单表处理耗时往往在数秒内,基本满足业务需求。而此时的 Doris 仍在孵化阶段,功能与稳定性尚需时间验证,我们也在持续关注 Doris 的发版与功能升级,并定期进行性能测试。

随着业务深度使用,ClickHouse 在查询性能方面表现较好,帮助我们解决了不少业务问题,但痛点也开始显露出来:

  • 多表 Join 性能有限:ClickHouse 只有 Global Join 和 Local Join,在大表 Join 大表时的场景下,跨节点间数据 Shuffle 时容易导致 Join 性能大打折扣,甚至造成 OOM 。

  • 运维成本高:ClickHouse 的扩容缩容操作复杂,目前做不到自动在线操作;配置管理也相对繁琐,学习成本很高。

与此同时,Apache Doris 的功能正在不断升级完善, 我们发现 Doris 的多表 Join 能力与运维成本更加符合我们对 OLAP 数据库的预期,并且能够很好的解决 ClickHouse 出现的上述痛点,测试环境下的性能表现也十分出色。

经过一段时间的试用后,我们开始逐步替代 ClickHouse,目前快成物流大数据算法平台的主要 MPP 场景都基于 Doris 提供服务。

基于 Apache Doris 的大数据算法平台

为支撑快成多种多样的数据应用场景, 我们团队自建了相对完善的大数据算法平台,引入 Doris 后的架构如下:

基于 Apache Doris 的大数据算法平台.png

按照从左至右数据流向,数据处理架构可概括为以下主要环节:

数据源端主要包括来自 MySQL 等业务数据库的运单数据、物流车终端上报的物联网数据、埋点日志数据等,在数据采集环节会分别经由 Flink CDC、SeaTunnel、Sqoop 以及 Filebeat 等工具进行数据抽取。在数据清洗计算阶段,实时数据会通过 Kafka 采集和 Flink 进行计算并存储在实时数据仓库 Doris 中,而离线数据则通过 Spark 进行 ETL 后进入离线数据仓库 Hive 中。此外,特征数据还会存储在特征平台 Feathr 中,随后在分析建模环节进行数仓分层、建模,构建指标体系和标签体系,最终服务于数据应用,支持报表生成、BI 分析、业务支撑、调度匹配、风控以及合规等核心业务。

在以上架构中,Apache Doris 担任了实时数据仓库的关键定位,对上游承接了离线和实时数据的接入、对下游支持了 BI、报表、用户画像、风控、营销等数据应用的查询分析服务,在快成的大数据技术算法平台中发挥了至关重要的作用。下文将重点分享 Apache Doris 在快成物流的大数据应用与升级实践,希望对读者产生积极的借鉴意义。

Doris 在快成的应用实践

快成物流的货运业务复杂度高,业务节点多且链路周期较长,实时数仓建设难度较高,加之对接了大量微服务系统,数据库表较为分散,这使我们在建设实时数仓的过程中,面临着诸多挑战:

  • 保证复杂实体关系下的数据准确性;

  • 提升实时多流 Join 的处理效率;

  • 保障数据一致性;

  • 平衡数据数量、时效性与算力资源之间的关系。

01 实时数据接入

针对实时数据,我们又细分为实时与近实时两种情况:

  • 毫秒级实时(Real-time):实时数据处理指数据在产生后立即进行处理和响应,无延迟或延迟极小。实时处理对数据的处理速度要求非常高,通常需要在毫秒级别内完成,常用于需要即时反馈和实时决策的场景,例如实时风控等。

  • 秒级近实时(Near Real-time):近实时数据处理指数据产生后,经过一定延迟再处理,通常在秒级别内完成。近实时处理常用于对数据的快速分析和决策,例如实时报表生成、数据仪表盘等场景。

对于不同源数据的写入,Doris 提供了丰富的数据接入扩展工具,包括 Spark Doris Connector、Flink Doris Connector、Seatunnel Doris Sink 等,方便用户快速从 Hive、MySQL、Kafka 等源端系统中抽取数据并导入 Doris 中。

我们的整库同步和实时数据接入主要通过 Flink Doris Connector 进行,其依赖于 Flink CDC、Debezium 等技术底层实现。通过伪装 MySQL 等关系型数据库的从库实例,进而实时捕获到 Binlog(业务库表的数据变更日志),最后通过 Stream Load 的方式导入到 Doris 库中。

Flink Doris Connector 封装的较为易用,无需提前建表,就可以快速将上游业务库的表结构及数据接入到 Doris 中,轻松实现一键整库同步。其配置文件脚本如下:

<FLINK_HOME>/bin/flink run \-Dexecution.checkpointing.interval=5s \-Dparallelism.default=1 \-c org.apache.doris.flink.tools.cdc.CdcTools \lib/flink-doris-connector-1.17-1.6.1.jar \mysql-sync-database \--database ods \--table-prefix ods_ \--mysql-conf hostname=127.0.0.1 \--mysql-conf username=root \--mysql-conf password=123456 \--mysql-conf database-name=test_mysql_db \--including-tables "tbl1|test_.*" \--sink-conf fenodes=127.0.0.1:8030 \--sink-conf username=root \--sink-conf password=123456 \--sink-conf jdbc-url=jdbc:mysql://127.0.0.1:9030 \--sink-conf sink.label-prefix=label1 \--table-conf replication_num=3

实时数据接入.png

通过 Flink Doris Connector,5 秒内即可将 MySQL 的 CDC 日志采集到 Doris 的 ODS 层中,接着在 Doris 中构建实时数仓的下游层级。数据仓库分层架构遵循了常见的的四层架构(ODS 贴源层 - DWD 明细层 - DWS 汇总层 - ADS 应用层),以确保数据的高效管理、快速响应和便捷运维。

实时数据接入-1.png

02 报表服务与BI实践

面对需要同时处理高并发报表查询和海量数据分析的场景时,传统的大数据解决方案已经逐渐显露不足。我们基于 Doris 重新建设的大数据算法平台,针对离线与实时数据处理效率进行了深度优化,凭借 Doris 强大的宽表查询性能与并行数据处理能力,有效促进了数据报表与 BI 分析场景的功能升级与分析效率的大幅提升。

2-1 数据报表分析

实时数据报表属于数据高并发、大规模特征并存的典型场景,此前系统中使用的 Hive 和 Spark 在处理大规模数据集方面表现出色,然而面对高并发查询时,处理效率与我们的预期存在较大差距。此外,MySQL 对大规模数据进行查询时,效率显著下降,数据报表的更新速度也因此受限。

经测试,Doris 的数据实时写入和更新能力十分强大,能够实现快速及时的查询分析响应。在实时数仓建设阶段,我们把离线数据架构下 DIM 维度层、ADS 应用层的数据通过 SeaTunel 写入了 Doris 中,实现了结果表的查询加速, 从而实现每秒上万数量级的 QPS 并发查询,数据报表更新及时度大大提高。

2-2 BI 即席分析

即席查询(Ad-Hoc Query)是面向数据分析人员的自助分析应用,因其查询条件多样化,对系统的吞吐能力提出了较高的要求。Doris 提供了灵活丰富的 SQL 函数公式,并拥有高吞吐量的计算能力,数据分析师、产品经理等业务人员通过 Metabase(数据探索与可视化工具) + Doris 即可基本满足 BI 的数据探索需求,大部分查询响应速度都在秒级完成。

03 用户画像实践

用户画像在广告推荐系统、商业分析、用户增长、产品设计、数据化运营、精准营销、量化风控等领域得到广泛应用,依托于 Doris 强大的计算能力, 团队构建了快成物流的用户画像体系。

3-1 人群画像圈选

首先,大数据开发人员将离线数仓与实时数仓计算生产的标签,写入到 Doris 的标签表。产品运营通过人群圈选服务动态生成人群圈选 SQL,最后,通过 Doris 实时计算产生结果并返回给用户。

由于充分利用了 Doris 的 Bitmap 精准去重、倒排索引等特性,在数十个标签筛选组合条件下可以在亚秒级的返回圈选结果,用户“所圈即所得”,避免了长时间等待,极大地提高了运营与营销团队的工作效率。

人群画像圈选.png

3-2 个体画像查询

面向客户的个体画像需求同样属于高并发查询场景, 如司机个人画像、风控预警等。Doris 的前缀索引功能,即在排序基础上实现的根据给定前缀列,能够轻松支持上万 QPS,99 分位的查询延时在 150 毫秒以内,非常适合用户画像点查,很好地替代了之前 HBase + Redis 的点查加速方案。

04 轨迹存储与分析实践

GIS 地理信息系统(Geographic Information System) 作为物流运输平台的核心功能模块之一, 在车辆轨迹、司机 APP 轨迹等方面有着重要的应用, 例如车辆在途、轨迹预警、线路预警、司机驾驶安全等。平台有责任与义务在保证司机行车安全的同时,努力降低车主车辆、货主货品财产损失的风险。 然而,技术上也给平台带来海量轨迹存储、高性能查询与分析的硬性指标要求。

另一方面,监管部门也有“五流合一”合规性的政策要求,根据《网络平台道路货物运输经营管理暂行办法》,企业至少保存长达 3 年的轨迹数据。Doris 自 2.0 版本开始支持冷热分离,我们通过在 Partition 级别上设置 Freeze time,将 3 年前的冷数据存储在类似于 S3 的对象存储上,从而节省本地的磁盘空间,进而节省存储成本。

目前公司使用 Doris 支撑了百亿规模的轨迹存储,提供实时在线轨迹回放、轨迹风控预警等能力, 相比于之前 ES 的技术方案,同等规模数据所依赖的存储资源得到极大幅度节省。

05 湖仓一体实践

Doris 通过多源数据目录(Multi-Catalog)功能,支持了包括 Apache Hive、Apache Iceberg、Apache Hudi、Apache Paimon、Elasticsearch、JDBC(MySQL、Oracle、SQL Server) 等主流数据湖、数据库的连接访问。我们通过 Multi-Catalog 拓展了外部数据源的边界,其使用方法也较为简单, 创建 Hive 数据源的 SQL 语句可参考:

CREATE CATALOG hive PROPERTIES ('type'='hms','hive.metastore.uris' = 'thrift://172.21.0.1:7004'
);

在前文提到的用户画像系统中,标签元数据存储在 MySQL, 而明细数据存储在 Doris 中。进行画像圈选服务时,需要分别在 MySQL 与 Doris 两个数据库进行查询,不仅增加了画像系统的复杂度,性能也存在很大的优化空间。我们利用数据湖分析的特性,在 Doris 创建画像元数据的 MySQL Catalog,并规划了两种技术方案:

  1. 使用 SQL Join 语法,直接通过 JDBC 协议关联 MySQL 中的元数据 (数据还在 MySQL 中);
  2. 通过create table as select * from 源表把画像标签元数据同步到 Doris 内部,从而加速查询,然后再通过调度引擎(如 Apache DolphinScheduler)进行周期性调度,

考虑到方式一在批量加载数据时对 MySQL 业务库可能造成的潜在影响,针对用户画像的场景我们最终选择了方案二。建表语句参考:

-- 从 MySQL 导入到 Doris DIM 临时表, 默认 3 副本
create table dim.temp_profile_lable_metadata
PROPERTIES("replication_num" = "3")
as select * from jm_bg_platform.kc_data_profile.profile_lable_metadata;

实践总结与规划

截至目前,基于 Apache Doris 的大数据算法平台已经接入了近 10 个物流大数据业务线,部署生产集群 2 套,存储数据总量达百亿级规模,覆盖实时数仓、BI 多维分析、用户画像、货运轨迹信息系统等业务场景,查询效率大幅提升,其简洁的开发架构与经济的资源存储方案,为业务与开发人员带来极大便利与效益增长。

基于上述应用场景,我们总结了 Doris 的核心优势,具体如下:

  • 查询性能优越: 无论是即席分析场景的多表复杂关联,还是用户画像、特征、实时报表场景的高 QPS 点查,都可以轻松支持;

  • 数据湖分析能力强大:可轻松与 Hive、Hudi、JDBC、ES 构建统一语法的联邦查询;

  • 功能开放:例如 Java UDF 可以复用 Hive UDF,减少重复造轮子;

  • 有效降本:运维方面,可以按需弹性扩缩容节省资源,方便集群数据迁移;开发方面,多表关联便利,不用再频繁改写 Join;

在业务实践环节,我们也记录了许多生产环境下基于 Doris 的开发经验,在此与诸位分享:

  1. MPP 数据库在 OLAP 场景虽然兼容 MySQL 协议,但是不建议当作 MySQL 使用,更适用于大批量的数据写入,而非高并发的单条数据写入;

  2. 构建轻量级数仓时,部分场景可以替代 Hive 数仓,尤其是中小规模的数据量并且相对简单的场景;

  3. GIS 物联网的场景下使用,可以支持存储 PB 数据级别;

  4. 分区表支持原子替换,支持对两个表进行原子的替换操作,不会中断表提供服务;

后续我们将持续深入使用 Apache Doris 的新版功能,并重点关注扩展以下方面:

  • 引入异步物化视图:Apache Doris 在 2.1 版本推出了基于多表的异步物化视图,支持透明改写加速、自动刷新、外表到内表的物化视图以及物化视图直查,此外,还可以用于数据仓库分层建模、作业调度和数据加工等场景。

  • 数据一体能力扩展:此前我们曾向社区提议增强数据集成能力,例如通过 JDBC Catalog 从 MySQL 直接同步数据至 Doris,意见已被社区采纳并改进完成,后续也期待更多的新功能。

  • 增强 GIS 地理信息系统功能:如经纬度距离实时刷新、区域范围搜索提速;

  • 期待整合 AI算法库:增加例如 Spark ML 类的机器学习算法库,整合特征平台与向量数据库。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/39775.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这才叫必备软件推荐 你不能不知道的mac软件 Mac上有什么实用的必备软件 Mac常用必备软件推荐 一些好用的Mac软件

Mac OS是一个类Unix系统&#xff0c;内置终端Shell&#xff0c;这使得它天生就适合为程序员、开发者、设计者所用。不得不说苹果对用户体验的追求已经到了极致。遂开本篇&#xff0c;由于应用众多&#xff0c;一锅炖不下&#xff0c;故打算做一个系列。 下面为大家一一介绍一些…

基于物品的协同过滤算法

预估用过户对候选物品的兴趣 计算物品相似度 召回通道 快速做召回条件

Unity2D - 状态机(State Machine)详解

1. 状态机概述 在角色的生成中&#xff0c;由于事件的不同&#xff0c;动作的不同&#xff0c;角色会处于不同的状态中。例如对战冒险游戏&#xff0c;面临Boss的攻击&#xff0c;角色会受到例如中毒&#xff0c;恐惧等Debuff效果&#xff0c;若单纯的在一个脚本中使用if等语句…

绝地求生PUBG怎么领取补偿G币 补偿G币什么时候到账

绝地求生这款大逃杀射击游戏相信大家都不陌生&#xff0c;在之前的新版本NewJeans联动中&#xff0c;由于一些官方设定的错误&#xff0c;导致在开典藏箱的时候出现了一些问题&#xff0c;官方也推出了相应的补偿措施&#xff0c;比如退还G币&#xff0c;回收典藏箱子开出来的东…

Linux之Uboot简介和移植

uboot简介 uboot 的全称是 Universal Boot Loader&#xff0c;uboot 是一个遵循 GPL 协议的开源软件&#xff0c;uboot是一个裸机代码&#xff0c;可以看作是一个裸机综合例程。现在的 uboot 已经支持液晶屏、网络、USB 等高级功能。 也就是说&#xff0c;可以在没有系统的情况…

绝区零国际服怎么下载 绝区零国际服下载教程

绝区零即将上线&#xff0c;每位玩家都能在这里开启全新的时空冒险之旅&#xff0c;主要玩法分为以剧情和副本为主的核心玩法、以刷材料为主的养成副本&#xff0c;以及日常任务为主&#xff0c;在以往的手游中&#xff0c;玩家进入某项玩法只需要从游戏界面调取菜单即可&#…

如何用简单的html,css,js写出一个带有背景层的删除弹出框

虽然每次项目都是主要写后端&#xff0c;但是有时候前端的样式太丑了&#xff0c;也有点看不下去。弹出框是项目中用的比较多的&#xff0c;比如删除&#xff0c;修改或者添加什么的&#xff0c;都需要一个弹出框。 所以这里简单记录一下&#xff0c;应该如何实现。实现效果如…

软考《信息系统运行管理员》-2.3信息系统运维的外包

2.3信息系统运维的外包 信息系统运维外包的概念/模式 也称为信息系统代维。是指信息系统使用单位将全部或一部分的信息系统维护服务工作&#xff0c;按照规定的维护服务要求&#xff0c;外包委托给专业公司管理。 完全外包运维模式部分外包模式 信息系统运维外包的好处 有利…

offer150-16:数值的整数次方

题目描述:实现函数double Power(double base,int exponent),求base 的exponent次方。不得使用库函数&#xff0c;同时不需要考虑大数问题。 分析&#xff0c;题目要求实现库函数pow(),由于不需要考虑大数问题&#xff0c;不必担心溢出&#xff0c;那么就需要对输入的各种情况进…

预测未来 | Matlab实现HMM隐马尔科夫时间序列预测未来

预测未来 | Matlab实现HMM隐马尔科夫时间序列预测未来 目录 预测未来 | Matlab实现HMM隐马尔科夫时间序列预测未来效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.预测未来 | Matlab实现HMM隐马尔科夫时间序列预测未来 2.运行环境为Matlab2023b及以上&#xff1b; 3…

路径跟踪算法---Stanley Method实现

文章目录 前言一、Stanley原理介绍二、主要代码实现三、效果 前言 Stanley Controller也是基于几何追踪的轨迹跟踪控制器&#xff0c;和Pure Pursuit不同的是&#xff0c;其基于前轮中心点为参考点进行控制&#xff0c;没有预瞄距离&#xff0c;以前轮中心点与最近参考轨迹点进…

天诚长租公寓智能门锁管理解决方案

人才是区域创新发展的第一资源&#xff0c;如何解决人才的住房问题&#xff0c;让人才“流进来”、“留下来”、“融进来”&#xff0c;就需要优先安排优质人才公寓、人才优租房和公共租赁住房房源&#xff0c;并为青年人才群体提供智能化、信息化的租住体验及通行服务。 一、…

四、(1)网络爬虫入门及准备工作(爬虫及数据可视化)

四、&#xff08;1&#xff09;网络爬虫入门及准备工作&#xff08;爬虫及数据可视化&#xff09; 1&#xff0c;网络爬虫入门1.1 百度指数1.2 天眼查1.3 爬虫原理1.4 搜索引擎原理 2&#xff0c;准备工作2.1 分析爬取页面2.2 爬虫拿到的不仅是网页还是网页的源代码2.3 爬虫就是…

app单页下载页源码带管理后台

新版带后台管理APP应用下载页,自动识别安卓苹果下载页&#xff0c;带管理后台&#xff0c;内置带3套App下载模板带中文模板/英文模板随时切换。 app单页下载页源码带管理后台

告别PS修图,设计师都在用的AI抠图工具

引言 大家好&#xff01;如果你是美工或设计师&#xff0c;肯定深知Photoshop修图的繁琐和耗时。现在有一款超方便的工具&#xff0c;让你摆脱这些问题——千鹿设计助手。它不仅是个抠图工具&#xff0c;还能通过先进的AI技术&#xff0c;让抠图变得简单快速&#xff0c;让你专…

[Leetcode 128][Medium] 最长连续序列

目录 题目描述 整体思路 具体代码 题目描述 原题链接 整体思路 首先看到找连续升序排序的最长序列长度&#xff0c;想到对数组进行排序预处理。但是排序算法时间复杂度需要O(nlogn)&#xff0c;题目要求时间复杂度为O(n)。因此不能进行排序与处理 接着想到数据结构哈希表&a…

为什么网上商店需要翻译成其他语言

网上商店不仅仅是一个可以买到商品的网站。它是一个完整的电子商务平台&#xff0c;为来自世界各地的用户提供购买所需物品的机会。但是&#xff0c;为了让这些用户舒适地使用网站&#xff0c;需要高质量的翻译和本地化。 本地化是指产品或服务适应特定文化或市场的过程。它包…

Nginx详解-安装配置等

目录 一、引言 1.1 代理问题 1.2 负载均衡问题 1.3 资源优化 1.4 Nginx处理 二、Nginx概述 三、Nginx的安装 3.1 安装Nginx 3.2 Nginx的配置文件 四、Nginx的反向代理【重点】 4.1 正向代理和反向代理介绍 4.2 基于Nginx实现反向代理 4.3 关于Nginx的location路径…

CSS 文本输入框右下角的尺寸控件(三斜线:-webkit-resizer)消除,以及如何配置其样式,添加 resize 让标签元素可进行拖拽放大。

前言&#xff1a;在日常的前端开发中&#xff0c;不管是原始的和 还在在各类组件库中的文本输入框中&#xff0c;元素内容的右下角总是有一个三斜线的样式&#xff0c;本文简单了解它是什么&#xff1f;如何去控制并修改样式&#xff1f; 一、它是&#xff1f; 这三个斜线其实…

echarts实现3D柱状图(视觉层面)

一、第一种效果 效果图 使用步骤 完整实例&#xff0c;copy就可直接使用 <template><div :class"className" :style"{height:height,width:width}" /> </template><script>import echarts from echartsrequire(echarts/theme/…