1.4.4 流式大数据架构
在企业中,某些场景可能需要实时计算最近特定时间内或当下的数据状态,如实时PV量、最近1分钟的活跃用户数等,传统大数据架构模式无法满足流数据和实时计算的需求。
流式大数据架构相对于传统大数据架构是另外一个极端。它直接将传统复杂的批量数据的同步、处理、清洗等过程剔除,只针对最近特定时间窗口或事件下产生的数据做计算,通过减少数据量、降低处理复杂度并缩减数据历史窗口期来提升计算效率,保障数据的低延迟性。
流式大数据架构的核心是流数据采集和流数据计算。
• 流数据采集:主流的流数据采集方案是Kafka、Flume和消息队列服务,数据源主要集中在网站用户行为这类不断有实时数据产生的场景。
• 流数据计算:流式计算框架包括Spark Streaming、Storm和Flink,三者的主要差异体现在延迟性、吞吐性能、开发难度、状态管理、机器学习集成、Hadoop生态集成、成熟度和广泛性几方面,如表1-2所示。
表1-2 Spark Streaming、Storm和Flink的主要差异
综合对比Spark Streaming、Storm和Flink,如果对数据延迟性要求较高,那么优先选择Storm框架;如果希望兼顾延迟性和吞吐性能,那么优先选择Flink;如果要兼顾传统大数据架构(主要是Hadoop生态),对延迟性要求较低,对吞吐性能要求高,或者对机器学习能力的输出要求高,那么优先选择Spark Streaming。综合所有因素,如果只选择一套框架来满足企业开发需求,那么Hadoop+Spark(含Spark Streaming)更适合我国绝大多数企业。
流式大数据架构的特征如下。
• 物理资源:与传统大数据架构模式类似,优先考虑安全性,可以选择私有化方案,兼顾成本和效率等可以考虑第三方云服务。
• 功能逻辑:数据源一般是稳定且统一的,数据同步通过流式管道进入,经过流式计算框架计算完成后分发给下游消费者。
• 技术要求:流数据采集包括Kafka、Flume和消息队列服务(如RabbitMQ、ZeroMQ、RocketMQ等),流式计算框架包括Spark Streaming、Storm和Flink。
• 数据流模式:有1个数据流分支,从流数据产生到实时同步、流式计算,形成一个单独的数据管道。
图1-7所示为流式大数据架构的核心逻辑,构建于Flume+Kafka+Spark Streaming之上。
• 数据源是Log服务器,产生Log的主体是网站上的用户行为。
• 数据采集采用Flume。它是典型的针对日志采集的技术组件,通过连接多个数据源进行日志信息整合并分发给下游消费者。
• 数据缓存采用Kafka,消费数据来自Flume的输出,并将信息提供给下游消费者。
• 流式计算使用Spark Streaming框架。它属于Spark框架的一个子集,实现对流数据的计算服务。
• 作业调度系统、集群资源管理、分布式协作服务采用Hadoop生态的Oozie、YARN、ZooKeeper。
• 数据输出时,将结果写入Redis做缓存、提供给RabbitMQ做消息队列或写入HBase做实时存取,或者提供给其他业务服务实时消费。
图1-7 流式大数据架构的核心逻辑
流式大数据架构的优势是在兼顾较低IT成本的基础上,实现对流数据的采集、处理和计算;劣势在于技术门槛较高,并且缺少对历史数据的计算支持,无法满足基于深度学习、历史汇总等方面的应用需求,如机器学习、历史状态统计等。因此,它主要适用于大中型企业,特别是需要对实时发生的数据做实时处理的应用场景,如预警、监控、实时信息发布等。