大数据实时+离线项目架构----智慧物流大数据平台(超流行框架!)

智慧物流大数据平台


一、项目背景

本项目基于一家大型物流公司研发的智慧物流大数据平台。该物流公司是国内综合性快递、物流服务商,并在全国各地都有覆盖的网点。经过多年的积累、经营以及布局,拥有大规模的客户群,日订单达上千万。如此规模的业务数据量,传统的数据处理技术已经不能满足企业的经营分析需求。公司需要基于大数据技术构建数据中心,从而挖掘出隐藏在数据背后的信息价值,为企业提供有益的帮助,带来更大的利润和商机。大数据项目主要围绕订单、运输、仓储、搬运装卸、包装以及流通加工等物流环节中
涉及的数据、信息等。通过大数据分析可以提高运输以及配送效率、减少物流成本、更有效地满足客户服务要求,实现快速、高效、经济的物流,并针对数据分析结果,提出具有中观指导意义的解决方案。针对物流行业的特性,大数据应用主要体现在车货匹配、运输路线优化、库存预测、设备修理预测、供应链协同管理等方面。

二、逻辑架构

在这里插入图片描述
 异构数据源
数据源主要有两种方式:Oracle数据库、MySQL数据库
 数据采集平台
数据采集平台负责将异构数据源采集到数据存储平台,分为批量导入以及实时采集两个部分:
实时采集 Oracle数据库采用ogg进行实时采集,MySQL数据库采用Canal进行实时采集。采集到的数据会存放到消息队列临时存储中。

数据存储平台
本次建设的物流大数据平台存储平台较为丰富。因为不同的业务需要,存储分为以下几个部分
Kafka 作为实时数据的临时存储区,方便进行实时ETL处理
Kudu 与Impala mpp计算引擎对接,支持更新,也支持大规模数据的存储
HDFS 存储温数据、冷数据。大规模的分析将基于HDFS存储进行计算。
ElasticSearch 所有业务数据的查询都将基于ElasticSearch来实现
ClickHouse 实时OLAP分析

数据计算平台
数据计算平台主要分为离线计算和实时计算。
离线计算 Impala:提供准实时的高效率OLAP计算、以及快速的数据查询
Spark/ SparkSQL:大批量数据的作业将以Spark方式运行
ElasticSearch 所有业务数据的查询都将基于ElasticSearch来实现

大数据平台应用
离线场景 报表系统
小区画像
实时场景 DashBoard
业务监控
实时报表
交互查询 AdHoc(即席查询)
自助报表

三、解决方案

数据源:关系型数据库Oracle和MySQL
采集:OGG和Canal分别将Oracle和MySQL的增量数据同步到Kafka集群
存储:ETL计算之后分别存储到kudu,Elasticsearch,ClickHouse中
计算引擎:处理数据使用StructuredStreaming

技术亮点:

完整Lambda 架构系统,有离线业务、也有实时业务
ClickHouse实时存储、计算引擎
Kudu + Impala准实时分析系统
基于Docker 搭建异构数据源,还原企业真实应用场景
以企业主流的Spark生态圈为核心技术,例如:Spark、Spark SQL、structured Streaming
Elasticsearch 全文检索
SpringCloud 搭建数据服务

数据流转

在这里插入图片描述

从数据源开始,业务数据主要存放到OracleMySQL数据库中,我们使用OGGCanal分别将Oracle和
MySQL的增量数据同步到Kafka集群,然后通过StructuredStreaming程序进行实时ETL处理,将处理的
结果写入到Kudu数据库中,供应用平台进行离线分析处理;为了将一些要求监控的业务实时展示,
StructuredStreaming流处理会将数据写入到ClickHouse,Java Web后端直接将数据查询出来进行实时的数据展示;为了方便业务部门对各类单据的查询,StructuredStreaming流式处理系统同时也将数据经过JOIN处理后,将数据写入到ElasticSearch中,然后基于Spring Cloud开发能够支撑高并发访问的数据服务,方便运营人员、客户的查询;

四、项目的技术选型

4.1流式处理平台

采用Kafka作为消息传输中间介质

 Kafka对比其他MQ的优点
可扩展 Kafka集群可以透明的扩展,增加新的服务器进集群。
高性能 Kafka性能远超过传统的ActiveMQ、RabbitMQ等,Kafka支持Batch操作。
容错性 Kafka每个Partition数据会复制到几台服务器,当某个Broker失效时,Zookeeper将
通知生产者和消费者从而使用其他的Broker。

 Kafka对比其他MQ的缺点
重复消息 Kafka保证每条消息至少送达一次,虽然几率很小,但一条消息可能被送达多次。
消息乱序 Kafka某一个固定的Partition内部的消息是保证有序的,如果一个Topic有多个
Partition,partition之间的消息送达不保证有序。
复杂性 Kafka需要Zookeeper的支持,Topic一般需要人工创建,部署和维护比一般MQ成
本更高。

 Kafka对比其他MQ的使用场景
Kafka 主要用于处理活跃的流式数据,大数据量的数据处理上
其他MQ 用在对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量还在其次,
更适合于企业级的开发
 总结
在这里插入图片描述

4.2 分布式计算平台

分布式计算采用Spark生态
在这里插入图片描述
如果对延迟要求不高的情况下,可以使用 Spark Streaming,它拥有丰富的高级 API,使用
简单,并且 Spark 生态也比较成熟,吞吐量大,部署简单,社区活跃度较高,从 GitHub 的
star 数量也可以看得出来现在公司用 Spark 还是居多的,并且在新版本还引入了
Structured Streaming,这也会让 Spark 的体系更加完善。

 如果对延迟性要求非常高的话,可以使用当下最火的流处理框架 Flink,采用原生的流处理系
统,保证了低延迟性,在 API 和容错性方面做的也比较完善,使用和部署相对来说也是比较
简单的,加上国内阿里贡献的 Blink,相信接下来 Flink 的功能将会更加完善,发展也会更加
好,社区问题的响应速度也是非常快的,另外还有专门的钉钉大群和中文列表供大家提问,
每周还会有专家进行直播讲解和答疑。

结论:本项目使用Structured Streaming开发实时部分,同时离线计算使用到SparkSQL,而Spark的生
态相对于Flink更加成熟,因此采用Spark开发

4.3 海量数据存储

ETL后的数据存储到Kudu中,供实时、准实时查询、分析
Kudu是一个与HBase类似的列式存储分布式数据库,官方给Kudu的定位是:在更新更及时的
基础上实现更快的数据分析

 Kudu对比其他列式存储(HBase、HDFS)
HDFS 使用列式存储格式Apache Parquet,Apache ORC,适合离线分析,不支持单条纪录
级别的update操作,随机读写性能差
HBASE 可以进行高效随机读写,却并不适用于基于SQL的数据分析方向,大批量数据获取时
的性能较差。
KUDU KUDU较好的解决了HDFS与HBASE的这些缺点,它不及HDFS批处理快,也不及HBase
随机读写能力强,但是反过来它比HBase批处理快(适用于OLAP的分析场景),而
且比HDFS随机读写能力强(适用于实时写入或者更新的场景),这就是它能解决的
问题。
Elastic Search作为单据数据的存储介质,供顾客查询订单信息

 Elasticsearch的使用场景
记录和日志分析 围绕Elasticsearch构建的生态系统使其成为最容易实施和扩展日志记录
解决方案之一,利用这一点来将日志记录添加到他们的主要用例中,或
者将我们纯粹用于日志记录。
采集和组合公共数据 Elasticsearch可以灵活地接收多个不同的数据源,并能使得这些数据可
以管理和搜索
全文搜索 非常强大的全文检索功能,方便顾客查询订单相关的数据
事件数据和指标 Elasticsearch还可以很好地处理时间序列数据,如指标(metrics )和应
用程序事件
数据可视化 凭借大量的图表选项,地理数据的平铺服务和时间序列数据的
TimeLion,Kibana是一款功能强大且易于使用的可视化工具。对于上面
的每个用例,Kibana都会处理一些可视化组件。
ClickHouse作为实时数据的指标计算存储数据库

 ClickHouse与其他的OLAP框架的比较
直接查询,ClickHouse支持类SQL语
言,提供了传统关系型数据的便利

框架软件版本

在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
数据分析职业是一个多金的职业,数据分析职位是一个金饭碗的职位,前景美好,但是要全面掌握大数据分析技术,非常困难,大部分学员的痛点是不能快速找到入门要点,精准快速上手。本课程采用项目驱动的方式,以Spark3和Clickhouse技术为突破口,带领学员快速入门Spark3+Clickhouse数据分析,促使学员成为一名高效且优秀的大数据分析人才。学员通过本课程的学习,不仅可以掌握使用Python3进行Spark3数据分析,还会掌握利用Scala/java进行Spark数据分析,多语言并进,力求全面掌握;另外通过项目驱动,掌握Spark框架的精髓,教导Spark源码查看的技巧;会学到Spark性能优化的核心要点,成为企业急缺的数据分析人才;更会通过Clickhouse和Spark搭建OLAP引擎,使学员对大数据生态圈有一个更加全面的认识和能力的综合提升。真实的数据分析项目,学完即可拿来作为自己的项目经验,增加面试谈薪筹码。课程涉及内容:Ø  Spark内核原理(RDD、DataFrame、Dataset、Structed Stream、SparkML、SparkSQL)Ø  Spark离线数据分析(千万简历数据分析、雪花模型离线数仓构建)Ø  Spark特征处理及模型预测Ø  Spark实时数据分析(Structed Stream)原理及实战Ø  Spark+Hive构建离线数据仓库(数仓概念ODS/DWD/DWS/ADS)Ø  Clickhouse核心原理及实战Ø  Clickhouse engine详解Ø  Spark向Clickhouse导入简历数据,进行数据聚合分析Ø  catboost训练房价预测机器学习模型Ø  基于Clickhouse构建机器学习模型利用SQL进行房价预测Ø  Clickhouse集群监控,Nginx反向代理Grafana+Prometheus+Clickhouse+node_exporterØ  Spark性能优化Ø  Spark工程师面试宝典       课程组件:集群监控:福利:本课程凡是消费满359的学员,一律送出价值109元的实体书籍.
好的,我可以为您提供一些思路和代码示例。 首先,针对物流订单数据集的详细数据分析,您可以考虑以下几个方面: 1. 数据质量分析:对数据中的缺失值、异常值、重复值等进行处理,确保数据的准确性和完整性。 2. 物流订单分析:对数据进行统计分析,比如订单数量、订单类型、订单来源、订单金额等等,以便更好地了解订单的情况。 3. 物流路径分析:对物流运输路径进行分析,比如起点、终点、中转站、运输时间等等,以便更好地了解物流情况。 4. 物流成本分析:对物流成本进行分析,比如人工成本、运输成本、仓储成本等等,以便更好地了解物流成本情况。 接下来,我们来看一下如何用Java实现对物流订单数据集的采集和预处理。 1. 数据采集:您可以使用Java提供的网络编程功能,通过网络爬虫等方式来获取物流订单数据。比如使用Java中的HttpClient库来进行HTTP请求,获取数据。以下是一个使用HttpClient获取数据的示例代码: ```java CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet("http://example.com/data"); CloseableHttpResponse response = httpClient.execute(httpGet); HttpEntity entity = response.getEntity(); String data = EntityUtils.toString(entity, "UTF-8"); ``` 2. 数据预处理:对采集到的数据进行清洗和处理,以便更好地进行分析和可视化。比如去除重复数据、处理缺失值等。以下是一个简单的数据去重示例: ```java Set<String> set = new HashSet<>(); List<String> dataList = new ArrayList<>(); for (String data : dataList) { if (!set.contains(data)) { set.add(data); } } ``` 最后,我们来看一下如何用Java实现数据可视化。您可以使用一些Java可视化库,比如JFreeChart、ECharts等。以下是一个使用JFreeChart实现折线图可视化的示例代码: ```java DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(100, "Series 1", "Category 1"); dataset.addValue(200, "Series 1", "Category 2"); dataset.addValue(150, "Series 1", "Category 3"); JFreeChart chart = ChartFactory.createLineChart("Chart Title", "Category", "Value", dataset); ChartPanel chartPanel = new ChartPanel(chart); JFrame frame = new JFrame("Chart Frame"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(500, 500); frame.add(chartPanel); frame.setVisible(true); ``` 以上是一些简单的示例代码,仅供参考。如果您需要更加详细的代码实现和功能实现,可以具体考虑您的需求和数据情况来进行实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值