导读:随着消费者更安全、更舒适、更便捷的驾驶体验需求不断增长,汽车智能化已成必然趋势。长安汽车智能化研究院作为长安汽车集团有限责任公司旗下的研发机构,专注于汽车智能化技术的创新与研究。为满足各业务部门的数据分析需求,长安汽车基于 Apache Doris 升级了车联网数据分析平台,支撑单日百亿级别数据实时处理,并实现十亿级别数据查询秒级响应,为长安汽车在提升用户用车体验、实时预警车辆故障、保证车辆安全驾驶等方面带来显著成果,为其在智能化方向的技术创新提供了有力支持。
作者|长安汽车智能化研究院
智能化是汽车工业进程中的一场革命,它旨在利用大数据、人工智能、云计算、物联网等前沿数字技术,对汽车设备和系统的运行状态进行全方位的感知、分析、决策和控制,从而提高汽车的安全性、舒适性、便捷性和节能性。
长安汽车智能化研究院作为长安汽车集团有限责任公司旗下的研发机构,专注于汽车智能化技术的创新与研究,其愿景是通过持续创新和技术突破,实现汽车智能驾驶、智能网联和智能交通的全面发展,为消费者提供更安全、更便捷、更智能的出行体验,并致力于成为中国汽车智能化领域的领军企业。
实现汽车智能化的关键之一,是需要建立稳定、高效的数据平台,以承载和利用海量的车联网数据。作为智能化发展的重要支撑,长安汽车智能化研究院肩负着整个长安汽车集团车联网数据的汇聚、处理和应用工作。为满足各业务部门提出的数据支持需求,目前已经构建了车联网数据分析平台,并在业务指标分析、质量管理系统、智慧能耗、智能诊断、智慧运营等多个重点领域实现数据应用。
本文将详细介绍长安汽车车联网数据分析平台的演进历程及实践经验,分享长安汽车基于 Apache Doris 支撑单日百亿级别数据实时处理、实现十亿级别数据查询秒级响应的实践经验。此外,Apache Doris 的引入还为长安汽车在用户用车体验提升、驾驶安全保障等方面带来显著收益,为长安汽车从机电化到智能化转型发展提供有力支持。
汽车智能化所面临的挑战
近些年来,长安汽车取得了令人瞩目的销量增长成绩。1-8 月,长安汽车自主乘用车累计销量超百万辆、保持持续上升的发展势头,以深蓝、阿维塔、启源为代表的新能源系列品牌力和产品竞争力不断提升,自主新能源车累计销量约为 25.6 万辆、同比增长 102.44%,成为销量增长新动能。
在汽车销量快速攀升的背后,车联网数据更是呈现爆发式增长的态势,其中最为核心的即车辆 CAN 总线数据。CAN 即 Controller Area Network,通过 CAN 总线可以对车辆上的各类电子控制系统进行统一通信,在实际车辆运行过程中 ,CAN 总线数据是车辆安全性、可靠性和高性能的重要保证:
- 车辆系统监测和控制:CAN 总线数据可用于监测和控制系统中的各种设备和组件。传感器通过 CAN 总线发送其测量值,如温度、压力、位置等,以便其他设备或控制器实时监测和采取相应的措施。同时,控制器可以通过 CAN 总线向执行器发送控制指令,如调节阀门、驱动电机等,以实现对系统的控制。
- 车辆信息实时反馈:CAN 总线数据可用于提供实时反馈信息。例如在车辆控制系统中,传感器通过 CAN 总线传输车速、转向角度、制动状态等数据,控制器可以根据这些数据进行实时决策和调整,以确保车辆的安全性和性能。
- 数据共享和协调:CAN 总线数据允许不同设备之间进行数据共享和协调。通过 CAN 总线,不同的控制器和设备可以交换信息,共享状态和控制命令,有利于提高系统的整体性能和效率。
- 网络管理和故障诊断:CAN 总线数据用于网络管理和故障诊断。通过 CAN 总线,可以进行设备的自动识别、配置和监控,以便进行网络管理和故障排查,提高系统的可靠性和可维护性。
随着网联车销量不断增长,车辆每天将产生千亿级别的 CAN 数据,清洗处理后的数据也在 50 亿级别,面对如此庞大且持续膨胀的数据规模,如何从海量数据中快速提取挖掘有价值的信息,为研发、生产、销售等部门提供数据支持,成为当前亟需解决的问题。
而想要提供良好的数据支持及服务,首先需要应对以下几大挑战:
- 大规模数据实时写入及处理:为实现智能化,汽车的车门、座椅、刹车灯设备被设置了大量的传感器,每个传感器收集一种或者多种信号数据,数据被汇聚后进一步加工处理。目前长安汽车需要支持至少 400 万辆车的链接,车联网数据每秒吞吐量已达百万级 TPS ,每日新增数据规模高达数十 TB ,且还在持续增长中。如何对数据进行实时写入成为了长安汽车首要面临的挑战。
- 准确及时的实时数据分析需求:车联网场景下数据分析通常要求实时性,快速获取分析结果是实时监控、故障诊断、预警和实时决策等服务的重要保障。例如在智能诊断中,车企需要近实时地收集相关信号数据,并快速定位故障原因。通过分析车辆传感器数据、行驶记录等,可以提前发现潜在故障,进行预防性维护,提高车辆的可靠性和安全性。
- 更加低廉的数据存储和计算成本:面对快速增长的的数据以及日益强烈的全量写入和计算需求,导致数据存储和计算成本不断攀升。这就要求数据平台具备低成本存储和计算的能力,以降低使用成本;同时需具备弹性伸缩能力,以便用户在业务高峰期快速扩容,提升海量数据计算场景的分析效率。
为给用户提供更优质的驾车体验、为业务部门提供更准确高效的数据支持,长安汽车开始对大数据平台的建设进行探索和实践。
Hive 离线数据仓库难以支撑超大规模实时数据服务
长安汽车最早以 Hive 为核心构建了数据平台架构,所处理数据包括车辆 CAN 总线数据和埋点数据,这些数据通过 4G 网络从车端传送至长安云端网关,然后由网关将数据写入 Kafka。考虑到数据量级和存储空间的限制,早期架构中的数据处理流程是将 Kafka 采集到的数据直接通过 Flink 进行处理,并通过 ETL 将结果存储到 Hive 中。下游应用使用 Spark SQL 进行逐层离线计算,并通过 Sqoop 将汇总数据导出到 MySQL 中。最终由 Hive 和 MySQL 分别为应用层提供数据服务。
尽管该架构在早期基本满足了数据处理需求,但随着车辆销量不断增长,当需要面对每天千亿级别的数据处理分析工作时,架构的问题逐步暴露出来:
- 数据时效性无法保证:Hive 的导入速度较慢,尤其在处理大规模数据时,导入时间明显增加;同时部分业务依赖 T+1 离线任务,无法满足实时数据处理需求;此外, Hive 只支持分区覆盖,不支持主键级别的数据更新,无法满足特殊场景的数据更新需求。
- 数据查询分析延迟较高:对于 10 亿级别以上大规模表查询,Hive 查询性能较慢。通过 SparkSQL 进行数仓分层运算时,启动和任务执行时间较长,对查询响应也会产生影响。此外,数据看板、BI 展示应用无法直接从 Hive 中查询,需要将 Hive 中数据导出到 MySQL 中,由 MySQL 提供服务,受限于 Hive 导数性能,当数据量较大时,导出到 MySQL 耗时大幅增加,进而导致查询响应时间变长。此外,通过 Java 后端查询 MySQL 时,数据量过大也会影响数据的响应时间。
追根究底,产生这些问题的根本原因在于早期架构无法满足超大规模实时数据场景下的数据需求,这迫使长安汽车必须进行平台升级改造。
技术调研与选型
长安汽车经过深入调研,决定引入开源实时数据仓库 Apache Doris ,在导入性能、实时查询等方面具有显著优势:
- 丰富的数据导入方式:Doris 提供了丰富的内置导入方式,如 Broker Load 和 Stream Load 等,可以满足实时和离线场景中数据导入需求。
- 支持实时查询分析:Doris 大表 Join 能力突出,提供了多种分布式 Join 方式,使 Join SQL 编写具备高度灵活性,极大提升数据分析的效率。此外,Doris 支持单节点上万 QPS 的超高并发,可解决早期架构由于前端并发量过大导致查询失败的问题。
- 较低的使用成本:Doris 兼容 MySQL 协议,开发人员可以更高效便捷的使用 MySQL 编写和执行查询语句,有效提高开发效率。基于 Doris 极简的架构,不仅让部署运维更加简单,也让扩缩容操作变的更加方便弹性。同时,Doris 拥有良好的上下游生态,可为用户提供灵活高效的数据管理和分析体验。这些优势和特性都极大的降低了 Doris 的使用成本。
除此以外,开源社区的活跃度也是我们考虑的重要因素之一 。Apache Doris 吸引了大量的开发者及用户参与社区,共同贡献代码和改进 Doris,这对质量和稳定性的提高起关键作用。同时,Doris 社区为用户提供了全面的文档资料和技术支持,任何问题都可以快速得到解答和帮助。Apache Doris 的活跃程度使我们在使用时更加放心,解决了技术方面的后顾之忧。
基于 Apache Doris 车联网数据分析平台
在新的车联网数据分析平台中,通过 Flink 结合 Doris 的 Stream Load 功能,可直接将 Kafka 数据实时写入 Doris,同时,利用 Doris Broker Load 功能可以将 Hive 中数据导入到 Doris 中进行分析计算。在这个架构中,Apache Doris 承担了实时数据部分的计算和处理,还作为结果端直接输出数据给上游业务平台调用。
这一升级在系统上缩短了数据处理的路径,保证了大规模数据导入的时效性。此外,Apache Doris 的引入为上游应用层提供统一数据服务支持,这对于查询分析效率的提升至关重要。具体收益如下:
- 便捷进行数据写入和迁移:Doris 支持丰富的数据导入形式,可轻松从不同的数据源中导入数据。其次,Doris 支持通过 insert into select 快速导入数据,无需进行繁重的数据迁移配置以及引入外部同步组件。
- 统一数据服务,秒级查询响应:通过 Doris Multi-Catalog 功能,数据分析师可直接从 Doris 上查询数据,实现秒级别查询响应。其次,Doris Join 能力优异,对于超过 1000 万的结果表查询也可实现秒级返回结果。
- 降低存储和计算成本:在早期架构中,使用 Flink 实时写入数据并进行压缩时需要消耗大量的计算资源。而引入 Apache Doris 后,借助 Doris ZSTD 压缩算法(3-5 倍压缩率提升),可有效降低计算和存储所需的资源,还可以将压缩处理流程放到 Doris 内部进行,无需消耗 Flink 计算资源。
从 T+1 到 T+0,实时数据提升智能驾驶体验
CAN 总线数据在车辆分析中扮演着关键的角色,通过 CAN 总线可以读取车辆的各种状态信息,例如车速、转速、水温等。这些数据对于分析车辆的行驶数据具有重要的价值,为整车研发单位提供宝贵的参考信息。
在早期架构中,车辆 CAN 数据是按照 CAN ID 作为维度进行上传的,而在实际使用中,通常需要将不同 CAN ID 的信号按照时间对齐形成一个宽表。过去的数仓架构解决方案会先将 Kafka 中的数据写入到 Hive,此时不同 CAN ID 的数据被存储在不同的行中,需要使用 SparkSQL T+1 将数据转换为几个不同业务域的宽表。然而,这种计算方式耗时较长,SQL 语句难以维护,且数据的实时性较差。
在引入 Apache Doris 之后,我们在 Doris 中基于 Aggregate 聚合模型建立了业务域的宽表,将车辆和时间等作为主键,其他的信号字段都用REPLACE_IF_NOT_NULL
定义。具体如下:
首先,可以使用 Flink 来消费 Kafka 中按 CAN ID 维度的数据,在 Flink 中根据业务域宽表的配置对数据进行分流,将同一个 CAN ID 上的信号分配到相应的业务域宽表中。当同一个车辆在同一时间内不同 CAN ID 的数据到达同一个业务域宽表时,可以将这些数据填充到同一行中的不同 CAN ID 的信号数据字段中,实现宽表的构建(如上图 Doris 的表示例)。
在这种方式中,主要通过 Flink 对数据进行分流,将数据发送到不同的 Doris 业务域宽表中(每个宽表约有 200 个字段)。宽表的生成逻辑被放在了 Doris 中,而不是在 Flink 中进行宽表对齐的操作。这样设计的原因是不同 CAN ID 的数据上传存在一定的时间差,时间窗口过大时,使用 Flink 根据车辆和时间进行聚合可能会导致资源开销过高。
通过以上方案,可以将数据的新鲜度从 T+1 提高到 T+0 。同时,对于包含约 10 亿行数据的宽表,可以达到秒级的查询效率,即在进行单车查询时,可以快速地获取查询结果。
10 亿级别 DTC 故障码实时查询,保障车辆驾驶安全
DTC 属于 CAN 数据中的故障报文,因此对其进行单独的业务数据存储。每天的 DTC 数据量级可以达到 10 亿条,为了让业务端便捷高效的使用这些数据,快速进行故障诊断,提升车辆安全性,需要将 DTC 故障码明细数据与一张 MySQL 业务配置表进行关联。
在早期架构中,开发人员每天都需要将海量 DTC 数据先写入到 Kafka 中,然后通过 Flink 进行实时处理,并将结果存储到 Hive 中。而这种处理方式存在一些问题:
- 面对 10 亿级数据量的表,难以将其导入 MySQL 进行实时查询。如果直接查询 Hive,则查询反馈时间会非常长,难以满足业务需求。
- 由于无法直接关联 MySQL 的配置表,不得不定时将配置表导入 Hive 数仓。这样做虽然能够满足数据处理的需求,但却丢失了 DTC 配置的实时性。
在引入 Apache Doris 后,采用上图所示处理方式成功解决了早期架构存在的问题。首先将 Hive 的 DTC 明细数据通过 HDFS 文件导入的方式导入到 Doris 中,然后创建对应的 MySQL Catalog 连接,最后使用后端 Java 通过 MyBatis 连接 Doris 数据库,并使用 SQL 通过 Catalog 连接 MySQL 的 DTC 配置表进行 Join 操作,可直接实时查询返回结果。
通过 Apache Doris 成功完成了 10 亿级别数据的实时查询,并且可以对关联的 MySQL 配置表进行直接关联查询,成功实现了配置的实时更新。
总结与规划
凭借 Apache Doris 卓越的性能,目前在长安汽车已经部署数十台机器,支撑了近十条业务线,每天处理数据规模达到百亿级别。 Apache Doris 的引入为长安汽车在提升用户用车体验、实时预警车辆故障、保证车辆安全驾驶等方面带来显著成果,为其在智能化方向的技术创新提供了有力支持。
未来,长安汽车将进一步将 Apache Doris 应用在标签和指标业务,实现以下需求:
- 自动识别冷热数据:将热数据存储在 Apache Doris 中,冷数据存储在 Hive 中,通过这种方式实现更高效的数据访问和管理。
- 扩大业务范围:对现有的 Doris 业务 SQL 代码进行优化,利用 Doris 的某些特性和功能,将适合这些特性的业务迁移到 Doris 中,从而提高数据处理和查询的效率。
- 共建社区:积极尝试使用 Doris 最新版本及新功能,在与社区保持同步的同时,不断探索和应用新的技术,反哺社区、为社区发展做出贡献。
最后,衷心感谢 Apache Doris 社区和飞轮科技技术团队的积极支持,期待未来与大家继续深入合作,推动长安汽车智能化发展,为用户提供更好的驾车体验!