2.3 实时流处理框架
在大数据领域,Hadoop无疑是炙手可热的技术。作为分布式系统架构,Hadoop具有高可靠性、高扩展性、高效性、高容错性和低成本的优点。然后,随着数据体量越来越大,实时处理能力成为了许多客户需要面对的首要挑战。Hadoop的MapReduce是一个批处理计算框架,在实时计算处理方面显得十分乏力。Hadoop生态圈终于迎来了实时流处理框架。除了实时性,流处理可以处理更复杂的任务,能够以低延时执行大部分批处理的工作任务。
一个典型的流架构如上图所示,由三个组件组成:
(1)采集模块组件是从各种数据源收集数据流(图2-8的步骤1)。
(2)集成模块组件集成各种数据流,使它们可用于直接消费(图2-8的步骤2)。
(3)分析模块组件用来分析消费这些流数据。
第一步是从各种数据源收集事件,如图2-8所示的Flume组件。这些事件来自于数据库、日志、传感器等,这些事件需要清理组织化到一个中心。第二步,在一个中心集成各种流,典型工具如图2-8所示的Apache Kafka。Kafka提供一个broker功能,以高可靠性来收集并缓冲数据,以及分发到各种对不同流感兴趣的消费者那里进行分析。第三步,对流进行真正的分析,例如创建计数器实现聚合,Map/Reduce之类计算,将各种流Join一起分析,等等,提供了数据分析所需的一步到位的高级编程。
在Apache下有多个流处理系统,例如:Apache Kafka、Apache Storm、Apache Spark Streaming、Apache Flink等。尽管Spark比Hadoop要快很多,但是Spark还不是一个纯流处理引擎。Spark只是一个处理小部分输入数据的快速批操作(微批处理模式)。这就是Flink与Spark流处理的区别。Spark流处理提供了完整的容错功能,并保证了对流数据仅一次处理(也就是说,如果一个节点失败,它能恢复所有的状态和结果)。这是Flink和Storm所不能提供的功能。Flink和Storm的应用开发人员需要考虑数据丢失的情况,这也限制了开发人员开发复杂的应用系统。