组件原理

Flink

Flink是一个批处理和流处理结合的统一计算框架,其核心是一个提供了数据分发以及并行化计算的流数据处理引擎。它的最大亮点是流处理,是业界最顶级的开源流处理引擎,组件架构如图1所示。Flink最适合的应用场景是低时延的数据处理(Data Processing)场景,高并发pipeline处理数据,时延毫秒级,且兼具可靠性。

图1 Flink组件架构图

Storm

Storm是一个分布式、可靠、容错的实时流式数据处理的系统,组件架构如图2所示。在Storm中,先要设计一个用于实时计算的图状结构,我们称之为拓扑(topology)。这个拓扑将会被提交给集群,由集群中的主控节点(master node)分发代码,将任务分配给工作节点(worker node)执行。一个拓扑中包括spout和bolt两种角色,其中spout发送消息,负责将数据流以tuple元组的形式发送出去;而bolt则负责转换这些数据流,在bolt中可以完成计算、过滤等操作,bolt自身也可以随机将数据发送给其他bolt。由spout发射出的tuple是不可变数组,对应着固定的键值对。

图2 Storm组件架构图

业务处理逻辑被封装进Storm中的topology中。一个topology是由一组Spout组件(数据源)和Bolt组件(逻辑处理)通过Stream Groupings进行连接的有向无环图(DAG)。Topology里面的每一个Component(Spout/Bolt)节点都是并行运行的。在topology里面,可以指定每个节点的并行度,Storm则会在集群里面分配相应的Task来同时计算,以增强系统的处理能力。

Kafka

Kafka是一个高吞吐、分布式、基于发布订阅的消息系统,利用Kafka技术可搭建起大规模消息系统,用作实时流处理中的消息缓存,最常见的用途是用来作为实时数据源的缓存,组件架构如图3所示。

图3 Kafka组件架构图

Redis

Redis是一个高性能的Key-Value内存数据库,适合于作为系统中的cache或者消息队列,组件架构如图4所示。

图4 Redis组件架构图