Flume+Kafka+Flink+Redis构建大数据实时处理系统(PV、UV)
发布网友
发布时间:2024-10-02 11:43
我来回答
共1个回答
热心网友
时间:2024-10-07 03:57
大数据处理的常用方法目前流行两种:离线处理和在线实时流处理。在互联网应用中,无论是哪一种处理方式,基本数据来源都是日志数据,例如web应用的用户访问日志、点击日志等。
大数据处理目前流行的是离线处理和在线处理,基本处理架构如下:
对于数据分析结果时间要求严格的,可以采用在线实时处理方式。例如使用Flink、SparkStreaming进行处理。例如天猫双十一的成交额实时动态更新,就需要采用在线处理。接下来介绍实时数据处理方式,即基于Flink的在线处理,在以下完整案例中,我们将完成以下几项工作:
需要注意的是,本案例核心在于如何构建实时处理系统,让我们对大数据实时处理系统有一个基本的、清晰的了解与认识。
实时处理系统整体架构如下:
从以上架构可以看出,其由以下三个重要组成部分:
从构建实时处理系统的角度出发,我们需要做的是,如何让数据在各个不同集群系统之间打通,即需要做各个系统之前的整合,包括Flume与Kafka的整合,Kafka与Flink的整合。当然,各个环境是否使用集群,依个人实际需要而定,在我们的环境中,Flume、Kafka、Flink都使用集群。
对于Flume而言,关键在于如何采集数据,并且将其发送到Kafka上,由于我们这里使用Flume集群的方式,Flume集群的配置也是十分关键的。对于Kafka,关键就是如何接收来自Flume的数据。从整体上讲,逻辑应该是比较简单的,即可以在Kafka中创建一个用于我们实时处理系统的topic,然后Flume将其采集到的数据发送到该topic上即可。
在我们的场景中,两个Flume Agent分别部署在两台Web服务器上,用来采集Web服务器上的日志数据,然后其数据的下沉方式都为发送到另外一个Flume Agent上,所以这里我们需要配置三个Flume Agent。
对于Kafka而言,关键在于如何接收来自Flume的数据。从整体上讲,逻辑应该是比较简单的,即可以在Kafka中创建一个用于我们实时处理系统的topic,然后Flume将其采集到的数据发送到该topic上即可。
在我们的场景中,两个Flume Agent分别部署在两台Web服务器上,用来采集Web服务器上的日志数据,然后其数据的下沉方式都为发送到另外一个Flume Agent上,所以这里我们需要配置三个Flume Agent。
在Kafka中,先创建一个topic,用于后面接收Flume采集过来的数据:
Flink提供了特殊的Kafka Connectors来从Kafka topic中读取数据或者将数据写入到Kafka topic中,Flink的Kafka Consumer与Flink的检查点机制相结合,提供exactly-once处理语义。为了做到这一点,Flink并不完全依赖于Kafka的consumer组的offset跟踪,而是在自己的内部去跟踪和检查。
Flink的kafka consumer叫做FlinkKafkaConsumer08(对于Kafka 0.9.0.X来说是09 等),它提供了对一个或多个Kafka topic的访问。
Flink Kafka Consumer08、09等的构造函数接收以下参数:
1、topic名称或者名称列表
2、反序列化来自kafka的数据的DeserializationSchema/Keyed Deserialization Schema
3、Kafka consumer的一些配置,下面的配置是必需的: "bootstrap.servers"(以逗号分隔的Kafka brokers列表) "zookeeper.connect"(以逗号分隔的Zookeeper 服务器列表) "group.id"(consumer组的id)
例如:
Java 代码:
Scala 代码:
当前FlinkKafkaConsumer的实现会建立一个到Kafka客户端的连接来查询topic的列表和分区。
为此,consumer需要能够访问到从提交Job任务的服务器到Flink服务器的consumer,如果你在客户端遇到任何Kafka Consumer的问题,你都可以在客户端日志中看到关于请求失败的日志。
Flink Kafka Consumer将会从一个topic中消费记录并以一致性的方式周期性地检查所有Kafka偏移量以及其他操作的状态。Flink将保存流程序到状态的最新的checkpoint中,并重新从Kafka中读取记录,记录从保存在checkpoint中的偏移位置开始读取。
checkpoint的时间间隔定义了程序在发生故障时可以恢复多少。
同时需要注意的是Flink只能在有足够的slots时才会去重启topology,所以如果topology由于TaskManager丢失而失败时,任然需要有足够的slot可用。Flink on YARN支持YARN container丢失自动重启。
所谓Flink和Redis的整合,指的是在我们的实时处理系统中的数据的落地方式,即在Flink中包含了我们处理数据的逻辑,而数据处理完毕后,产生的数据处理结果该保存到什么地方呢?显然就有很多种方式了,关系型数据库、NoSQL、HDFS、HBase等,这应该取决于具体的业务和数据量,在这里,我们使用Redis来进行最后分析数据的存储。
所以实际上做这一步的整合,其实就是开始写我们的业务处理代码了,因为通过前面Flume-Kafka-FLink的整合,已经打通了整个数据的流通路径,接下来关键要做的是,在Flink中,如何处理我们的数据并保存到Redis中。
Flink自带的connector提供了一种简洁的写入Redis的方式,只需要在项目中加入下面的依赖即可实现。
兼容版本:Redis 2.8.5 注意:Flink的connector并不是Flink的安装版本,需要写入用户的jar包并上传才能使用。
数据可视化处理目前我们需要完成两部分的工作:
对于Web项目的开发,因个人技术栈能力而异,选择的语言和技术也有所不同,只要能够达到我们最终数据可视化的目的,其实都行的。这个项目中我们要展示的是pv和uv数据,难度不大,因此可以选择Java Web,如Servlet、SpringMVC等,或者Python Web,如Flask、Django等,Flask我个人非常喜欢,因为开发非常快,但因为前面一直用的是Java,因此这里我还是选择使用SpringMVC来完成。
至于UI这一块,我前端能力一般,普通的开发没有问题,但是要做出像上面这种地图类型的UI界面来展示数据的话,确实有点*为力。好在现在第三方的UI框架比较多,对于图表类展示的,比如就有highcharts和echarts,其中echarts是百度开源的,有丰富的中文文档,非常容易上手,所以这里我选择使用echarts来作为UI,并且其刚好就有能够满足我们需求的地图类的UI组件。
对于页面数据的动态刷新有两种方案,一种是定时刷新页面,另外一种则是定时向后端异步请求数据。
目前我采用的是第一种,页面定时刷新,有兴趣的同学也可以尝试使用第二种方法,只需要在后端开发相关的返回JSON数据的API即可。
至此,从整个大数据实时处理系统的构建到最后的数据可视化处理工作,我们都已经完成了,可以看到整个过程下来涉及到的知识层面还是比较多的,不过我个人觉得,只要把核心的原理牢牢掌握了,对于大部分情况而言,环境的搭建以及基于业务的开发都能够很好地解决。
Flume+Kafka+Flink+Redis构建大数据实时处理系统(PV、UV)
Flume集群的配置也是十分关键的。对于Kafka,关键就是如何接收来自Flume的数据。从整体上讲,逻辑应该是比较简单的,即可以在Kafka中创建一个用于我们实时处理系统的topic,然后Flume将其采集到的数据发送到该topic上即可。
ZESTRON表界面分析
在Dr. O.K. Wack Chemie GmbH,我们高度重视ZESTRON的表界面分析技术。该技术通过深入研究材料表面与界面的性质,为提升产品质量与可靠性提供了有力支持。ZESTRON的表界面分析不仅涵盖了相变化、化学反应、吸附与解吸等关键领域,还通过高精度仪器如固体表面Zeta电位分析仪等,确保数据准确可靠。这些分析手段对于优化产品配方、改进生产工艺、预防失效问题等具有重要意义,是我们不断提升产品性能与质量的重要工具。表面污染分析包括评估表面上存在的颗粒、残留物或物质。通过利用显微镜、光谱学和色谱法等技术,分析人员可以识别和表征污染物,以确定其成分和来源。这种分析在电子、制药和制造等各个行业中至关重要,以确保产品质量、性能和安全性。了解表面...
SparkStreaming项目实战,实时计算pv和uv(硬肝)
项目流程涉及到从日志数据的采集、清洗、实时计算至结果展示的全过程。数据首先通过 Flume 采集并存储于 HDFS,以供离线业务使用,同时,这些数据也通过 Kafka 进行 sink,而 SparkStreaming 则从 Kafka 中拉取数据进行实时处理。计算 PV(页面访问量)时,采用直接拉取数据的模式,利用 mapWithState 算子...
基于Flink的实时计算平台的构建
针对业务系统数据,Canal监控Binlog日志,发送至kafka;针对日志数据,由Flume来进行统一收集,并发送至kafka。消息队列的数据既是离线数仓的原始数据,也是实时计算的原始数据,这样可以保证实时和离线的原始数据是统一的。2. 计算层 Flink 有了源数据,在 计算层 经过Flink实时计算引擎做一些加工处理,然后...
北京交通大学-研究生课程-大数据技术基础与应用-综合实验报告
本次实验旨在综合运用Flume、Kafka、Flink、Mysql和DLV构建一个全面的大数据处理平台,加深对各组件的相互联系及功能的理解,提升多组件整合搭建大数据平台的能力。实验首先设计了一个电影数据源,每固定时间间隔生成电影观看数据,并将数据写入特定目录。Flume agent监测该目录变化,将信息传递至Kafka和HDFS通道。
大数据处理需要用到的编程语言有哪些
java语言:Java是一门很适合大数据项目的编程语言,Hadoop、Spark、Storm、Flink、Flume、Kafka、Sqoop等大数据框架和工具都是用Java编写的,因此,大数据会不可避免的使用到Java。Scala语言:Scala是一门轻松的语言,在JVM上运行,成功地结合了函数范式和面向对象范式 ...
大数据开发工程师要学习哪些课程?
大数据技术栈:Hadoop、Spark、Storm、Flink等;数据收集:关系型数据收集工具Sqoop与Canel、非关系型数据收集系统Flume、分布式消息队列Kafka;数据存储:数据存储格式、分布式文件系统及分布式数据库;资源管理和服务协调:YARN、ZooKeeper;计算引擎:包括批处理、交互式处理,以及流式实时处理三类引擎,内容涉及...
华为大数据认证考什么
HCIA-Big Data 考试内容 HCIA-Big Data V3.0考试覆盖:(1)大数据行业的发展趋势,大数据特点以及华为鲲鹏大数据等;(2)常用且重要大数据组件基础技术原理(包括HBase, Hive, Loader, MapReduce, YARN, HDFS, Spark, Flume, Kafka, ElasticSearch,ZooKeeper, Flink,Redis);(3)华为大数据解决方案...
大数据工程师需要具备的技能有什么?
大数据需要学习的技术知识:基础部分为java语言和linux操作系统;大数据相关技术部分为hadoop、hive、hbase、oozie、flume、python、redis、kafka、scala、spark、ELK、flink等。大数据的学习周期:零基础通常需要脱产全日制学习6个月左右,前一个半月学习java,四个多月时间学习大数据处理技术以及做项目。。
每秒千万级实时数据处理系统是如何设计的?
大数据实时数据处理用的技术主要是Flume+Kafka+SparkStreaming、Flume+Kafka+Storm、Flink等。这些技术每个技术细节就不详细讲述了。它们都是处理海量数据使用的开源框架,对于京东或者阿里很有可能优化了源码,开发出适合他们公司需要的场景框架。但是核心技术差异不大。大数据实时计算技术基本上都是用Kafka、Spark...
大数据主要学习什么知识?
第五阶段为分布式计算引擎主要讲解计算引擎、scala语言、spark、数据存储hbase、redis、kudu,并通过某p2p平台项目实现spark多数据源读写。第六阶段为数据存储与计算(实时场景)主要讲解数据通道Kafka、实时数仓druid、流式数据处理flink、SparkStreaming,并通过讲解某交通大数让你可以将知识点融会贯通。第七...