2.3 实时流处理框架
在大数据领域,Hadoop无疑是炙手可热的技术。作为分布式系统架构,Hadoop具有高可靠性、高扩展性、高效性、高容错性和低成本的优点。然而,随着数据体量越来越大,实时处理能力成为了许多客户需要面对的首要挑战。Hadoop的MapReduce是一个批处理计算框架,在实时计算处理方面显得十分乏力。Hadoop生态圈终于迎来了实时流处理框架。除了实时性,流处理可以处理更复杂的任务,能够以低延时执行大部分批处理的工作任务。一个典型的流架构如图2-9所示,由三个步骤组成:
图2-9 典型的流架构
●采集模块组件是从各种数据源收集数据流(如图2-8的步骤1);
●集成模块组件集成各种数据流,使它们可用于直接消费(如图2-8的步骤2);
●分析模块组件用来分析消费这些流数据。
这三个步骤中,第一步是从各种数据源收集事件,如图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的应用开发人员需要考虑数据丢失的情况,这也限制了开发人员开发复杂的应用系统。