导读:随着消费者更安全、更舒适、更便捷的驾驶体验需求不断增长,汽车智能化已成必然趋势。长安汽车智能化研究院作为长安汽车集团有限责任公司旗下的研发机构,专注于汽车智能化技术的创新与研究。为满足各业务部门的数据分析需求,长安汽车基于 Apache Doris 升级了车联网数据分析平台,支撑单日百亿级别数据实时处理,并实现十亿级别数据查询秒级响应,为长安汽车在提升用户用车体验、实时预警车辆故障、保证车辆安全驾驶等方面带来显著成果,为其在智能化方向的技术创新提供了有力支持。
作者|长安汽车智能化研究院
智能化是汽车工业进程中的一场革命,它旨在利用大数据、人工智能、云计算、物联网等前沿数字技术,对汽车设备和系统的运行状态进行全方位的感知、分析、决策和控制,从而提高汽车的安全性、舒适性、便捷性和节能性。
长安汽车智能化研究院作为长安汽车集团有限责任公司旗下的研发机构,专注于汽车智能化技术的创新与研究,其愿景是通过持续创新和技术突破,实现汽车智能驾驶、智能网联和智能交通的全面发展,为消费者提供更安全、更便捷、更智能的出行体验,并致力于成为中国汽车智能化领域的领军企业。
实现汽车智能化的关键之一,是需要建立稳定、高效的数据平台,以承载和利用海量的车联网数据。作为智能化发展的重要支撑,长安汽车智能化研究院肩负着整个长安汽车集团车联网数据的汇聚、处理和应用工作。为满足各业务部门提出的数据支持需求,目前已经构建了车联网数据分析平台,并在业务指标分析、质量管理系统、智慧能耗、智能诊断、智慧运营等多个重点领域实现数据应用。
本文将详细介绍长安汽车车联网数据分析平台的演进历程及实践经验,分享长安汽车基于 Apache Doris 支撑单日百亿级别数据实时处理、实现十亿级别数据查询秒级响应的实践经验。此外,Apache Doris 的引入还为长安汽车在用户用车体验提升、驾驶安全保障等方面带来显著收益,为长安汽车从机电化到智能化转型发展提供有力支持。
近些年来,长安汽车取得了令人瞩目的销量增长成绩。1-8 月,长安汽车自主乘用车累计销量超百万辆、保持持续上升的发展势头,以深蓝、阿维塔、启源为代表的新能源系列品牌力和产品竞争力不断提升,自主新能源车累计销量约为 25.6 万辆、同比增长 102.44%,成为销量增长新动能。
在汽车销量快速攀升的背后,车联网数据更是呈现爆发式增长的态势,其中最为核心的即车辆 CAN 总线数据。CAN 即 Controller Area Network,通过 CAN 总线可以对车辆上的各类电子控制系统进行统一通信,在实际车辆运行过程中 ,CAN 总线数据是车辆安全性、可靠性和高性能的重要保证:
随着网联车销量不断增长,车辆每天将产生千亿级别的 CAN 数据,清洗处理后的数据也在 50 亿级别,面对如此庞大且持续膨胀的数据规模,如何从海量数据中快速提取挖掘有价值的信息,为研发、生产、销售等部门提供数据支持,成为当前亟需解决的问题。
而想要提供良好的数据支持及服务,首先需要应对以下几大挑战:
为给用户提供更优质的驾车体验、为业务部门提供更准确高效的数据支持,长安汽车开始对大数据平台的建设进行探索和实践。
长安汽车最早以 Hive 为核心构建了数据平台架构,所处理数据包括车辆 CAN 总线数据和埋点数据,这些数据通过 4G 网络从车端传送至长安云端网关,然后由网关将数据写入 Kafka。考虑到数据量级和存储空间的限制,早期架构中的数据处理流程是将 Kafka 采集到的数据直接通过 Flink 进行处理,并通过 ETL 将结果存储到 Hive 中。下游应用使用 Spark SQL 进行逐层离线计算,并通过 Sqoop 将汇总数据导出到 MySQL 中。最终由 Hive 和 MySQL 分别为应用层提供数据服务。
尽管该架构在早期基本满足了数据处理需求,但随着车辆销量不断增长,当需要面对每天千亿级别的数据处理分析工作时,架构的问题逐步暴露出来:
追根究底,产生这些问题的根本原因在于早期架构无法满足超大规模实时数据场景下的数据需求,这迫使长安汽车必须进行平台升级改造。
长安汽车经过深入调研,决定引入开源实时数据仓库 Apache Doris ,在导入性能、实时查询等方面具有显著优势:
除此以外,开源社区的活跃度也是我们考虑的重要因素之一 。Apache Doris 吸引了大量的开发者及用户参与社区,共同贡献代码和改进 Doris,这对质量和稳定性的提高起关键作用。同时,Doris 社区为用户提供了全面的文档资料和技术支持,任何问题都可以快速得到解答和帮助。Apache Doris 的活跃程度使我们在使用时更加放心,解决了技术方面的后顾之忧。
在新的车联网数据分析平台中,通过 Flink 结合 Doris 的 Stream Load 功能,可直接将 Kafka 数据实时写入 Doris,同时,利用 Doris Broker Load 功能可以将 Hive 中数据导入到 Doris 中进行分析计算。在这个架构中,Apache Doris 承担了实时数据部分的计算和处理,还作为结果端直接输出数据给上游业务平台调用。
这一升级在系统上缩短了数据处理的路径,保证了大规模数据导入的时效性。此外,Apache Doris 的引入为上游应用层提供统一数据服务支持,这对于查询分析效率的提升至关重要。具体收益如下:
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 亿行数据的宽表,可以达到秒级的查询效率,即在进行单车查询时,可以快速地获取查询结果。
DTC 属于 CAN 数据中的故障报文,因此对其进行单独的业务数据存储。每天的 DTC 数据量级可以达到 10 亿条,为了让业务端便捷高效的使用这些数据,快速进行故障诊断,提升车辆安全性,需要将 DTC 故障码明细数据与一张 MySQL 业务配置表进行关联。
在早期架构中,开发人员每天都需要将海量 DTC 数据先写入到 Kafka 中,然后通过 Flink 进行实时处理,并将结果存储到 Hive 中。而这种处理方式存在一些问题:
在引入 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 社区和飞轮科技技术团队的积极支持,期待未来与大家继续深入合作,推动长安汽车智能化发展,为用户提供更好的驾车体验!