大家好,今天很高兴在这里与大家分享、探讨和学习分布式流处理技术。
一、分布式流处理技术概述
随着计算机和网络技术的迅猛发展以及数据获取手段的不断丰富,在越来越多的领域出现了对海量、高速数据进行实时处理的需求,这类需求的数据普遍具有以下特征:
数据价值高
数据已经渗透到每一个行业和业务职能领域,对数据的占有、控制、挖掘和运用已成为国家间和企业间新的争夺焦点。
数据时效性强
营销时机转瞬即逝、风险防控分秒必争、重大决策快速精准,数据处理必须在秒级或更短的时间内得到结果。
数据量大
数据规模大,往往达到PB级别。根据IDC的“数字宇宙”的报告,预计到2020年,全球数据使用量将达到35.2ZB。
数据量增长迅速
数据产生速度快,可以达到GB/S级别,数据量暴增场景频现。
由于此类需求往往超出传统数据处理技术的能力,使得现有的技术不能很好地满足对海量、高速数据进行实时处理和分析的需求,分布式流处理技术应运而生。
分布式流处理技术发展并非一蹴而就,其演变历程大致可分为三个阶段:初始期、发展期以及成熟期。实时数据库、主动数据库以及信息过滤系统为流处理技术初始期形态;集中式数据量管理系统为流处理技术发展形态;最后演变成成熟期的分布式流处理技术平台。
既然流处理技术这么强大,能解决这么多问题,到底什么是分布式流处理技术?
指针对流式数据的一种分布式、高吞吐、高可用、低延迟、具有自身容错性的实时计算技术,它根据一组处理规则来进行持续计算的技术。打个比方:相信大家对每年夏天的洪水灾害印象深刻,比如“故宫看海”,雨(数据)又大又急,雨水不能及时排出,将故宫变海,后借助科学排水系统(分布式流处理平台)解决。
二、分布式流处理主流技术
2004年以来,随着Hadoop平台的诞生,大数据时代的到来,分布式流处理技术逐渐成为大数据时代的焦点,S4、Storm、Spark
Streaming、Samza、MillWheel等面向流处理的平台相继被提出。
它们都采用分布式架构,其处理能力可以随节点数目的增长而扩展,具有良好的伸缩性。多数平台都将计算逻辑和基础模块分离,自身只完成底层数据传输、任务分配等工作,并不提供查询语言支持,用户需要以编码方式自行完成处理流程和计算单元的定义。
S4为通用分布式流处理平台,采用去中心化结构,各对等节点通过ZooKeeper进行协调工作。
Storm采用弱中心化结构,提供消息处理反馈机制、巧妙的利用异或计算保障记录被完全处理,抽象出部分如连接、聚合等复杂运算的编程接口。
SparkStreaming引入微批次的概念,将数据的处理粒度由单条记录粗化为数据集合,把对于数据流的操作看作是接连不断的批处理操作。
Samza数据传输依赖于LinkedIn公司的另一开源项目Kafka分布式消息中间件,原生支持与YARN协作,共享计算节点以及完成集群控制和故障恢复等工作
MillWheel面向带有时间戳的有序数据。它采用了低位线方式对数据进行批次切分和局部排序,以内部计时器触发机制保证数据按顺序处理,并支持状态的持久化保存。
下面将重点针对Storm、Spark Streaming以及Samza进行介绍。
Storm由Twitter在2011年开源,主要包括主控节点、工作节点。主控节点即运行nimbus守护进程的节点,Nimbus将任务分配给其他机器,并负责故障监测。工作节点即运行supervisor守护进程的节点,是实时数据处理作业运行的节点。spout是流式处理的源头,是一个计算的起始单元,它封装数据源中的数据为Storm可以识别的数据项。bolt
是处理过程单元,从输入流中获取一定数量的数据项处理后,将结果作为输出流发送。topology是由spout和bolt为点组成的网络,网络中的边表示一个bolt订阅了某个或某个其他bolt或spout的输出流。
Client提交由spout和bolt组成的topology任务到Nimbus(其中Nimbus1、Nimbus2以及Nimbus3为Nimbus
HA),Nimbus建立topology本地目录,Nimbus节点监控心跳并将任务分片(Task),然后将Task和Supervisor相关的信息提交到zookeeper集群上,Supervisor去zookeeper集群上认领自己的Task并通知自己的Worker进程进行Task的处理。
Spark是一个类似于MapReduce的分布式计算框架,其核心是弹性分布式数据集,可以在快速在内存中对数据集进行多次迭代,以支持复杂的数据挖掘算法和图形计算算法。Spark
Streaming是一种构建在Spark上的实时计算框架,它扩展了Spark处理大规模流式数据的能力。
Spark Streaming通过分布在各个节点上的Receiver,缓存从客户端传来的流数据,并将流数据包装成Spark能够处理的RDD的格式,输入到Spark
Streaming,之后由Spark Streaming 将作业提交到Spark集群进行执行,执行结果可以存放在数据库、HDFS等上面。
Samza是由三层构成:
1.数据流层:分布式消息中间件Kafka,负责数据传输与缓冲;
2.执行层:Hadoop资源调度管理系统YARN,负责资源管理、节点管理以及应用管理;
3.处理层:Samza API,流处理核心。
Samza的客户端使用YARN来运行一个Samza job,数据流输入到Kafka的Brokers。YARN启动并且监控一个或者多个Samza
Containers,业务处理逻辑代码运行在这些容器里,处理结果输出到Kafka的Brokers。
根据以上表格各项对比结果个人更倾向于Storm和Spark Streaming。
共同优势:二者都是都是开源的,低延迟的,分布式的,可扩展的和容错的,他们都允许你在有错误恢复的集群中通过并行任务执行流处理代码,他们也提供简单的API抽象底层和复杂的实现。
Spark Streaming优势:对复杂的批量数据处理、基于历史数据的交互式查询以及基于实时数据流的数据处理需求能同时满足;无需维护多套软件;能做到统一协调集群资源;基于Spark便于进行横向扩展,如:机器学习等组件支持。
不足:增加了数据处理延迟;基于RDD的转换操作表达能力有限;缺乏内存监控信息,调试比较困难。
Storm优势:延时比Spark Streaming更小;发布时间长,更成熟。
不足:很多特性需要在外部组件(如分布式消息中间件等)的支持下由用户自行实现,增加工作量。
在做技术选型时可以根据具体应用场景进行选择。
三、分布式流处理技术应用场景
分布式流处理技术应用场景主要体现在三个大的方面:实时营销、实时服务以及实时监控应用场景。
应用场景1—实时营销:根据特定消费者当前的个性需求,为其提供商品,该商品在被消费过程中可自动收集顾客信息,分析、了解消费者的偏好和习惯,自动调整产品功能,实时地适应消费者变化着的需求,金融、电商以及广告等行业有较多应用场景体现。
金融:根据客户信用卡消费记录,掌握客户的消费习惯和偏好,预测客户未来的消费需求,并为其推荐个性化的金融产品;
电商:根据电商平台用户浏览商品的分类、价格区间、品牌等因素对用户进行个性化推荐促成交易;
广告:根据客户的查询偏好、浏览历史、地理位置等综合语义决定插入什么广告、在什么位置插入这些广告能得到最佳效果。
电商平台、非电商业务系统以及外部数据共同描绘出用户画像,当用户访问电商网站、电商APP等触点时,根据用户画像为用户进行商品、商户等个性化实时推荐。再根据用户操作进行推荐算法以及画像修正。
应用场景2—实时服务:对消费者动态需求的快速反应,随时满足消费者在消费过程中新产生的需求,提高消费者的满意程度,培养消费者对企业的忠诚度并提升企业的竞争力,社交、电信以及交通等行业有较多应用场景体现。
社交:实时分析用户的状态信息,及时提供最新的用户分享信息到相关的朋友,准确地推荐朋友,推荐主题,提升用户体验,并能及时发现和屏蔽各种欺骗行为。
交通:实时接收用户使用手机软件发送的约车请求,司机根据约车请求进行接单(或派单),到达目的地后进行实时结算服务。
电信:用户流量、资费实时统计做到个性化提醒服务;套餐、终端、阅读、动漫等根据用户画像进行个性化推荐服务。
由于打车服务是典型的基于LBS(地理位置实时定位系统)的应用,实时性要求高且用户请求服务器并发量大。司机每隔几秒钟上报一次经纬度,乘客发单时,圈选出附近司机,将订单推送给司机,司机接单,开始服务。
应用场景3—实时监控:实时监控一般是指利用软件或硬件采集信息,并用采集到的信息对系统、环境、硬件等运行状态进行实时的监控。
制造:对机械运行状态信息进行实时监控,分析出可能产生问题的部件进行预警。
交通:通过传感器实时感知车辆、道路的状态,并分析和预测一定范围、一段时间内的道路流量情况,以便有效地进行分流、调度和指挥。
金融:信用卡诈骗、保险诈骗、证券交易诈骗、程序交易等需要实时跟踪发现。
运维自动化提升运维效率,保障运维质量(包括程序可靠性、可用性以及用户体验),做到监控覆盖率无盲点、实时且准确无误的告警。由于覆盖点全,数据产生快,数据量多,数据多产生的告警点也就很多,这就对实时性提出了较高的要求。
|