大数据中的流处理系统你了解多少?

       学习大数据首先是要掌握相关的概念,而大数据框架就是求学者必须要学习并且掌握的,其中流处理系统被认为是当前学习大数据的重点,而你了解多少呢?


       了解过大数据开发的人都应该明白批处理系统,那么对于流处理该怎样理解呢?举个简单的例子,小学的时候我们都做过这么一道数学题:一个水池有一个进水管和一个出水管,只打开进水管8个小时充满水,只打开出水管6个小时流光水,那么同时打开进水管和出水管,水池多长时间充满水?

       好吧,这道题的答案是永远也充不满……因为出水管出水比较快嘛。流处理系统就相当于这个水池,把流进来的水(数据)进行加工,比如加盐让它变成盐水,然后再把加工过的水(数据)从出水管放出去。这样,数据就像水流一样永不停止,而且在水池中就被处理过了。所以,这种处理永不停止的接入数据的系统就叫做流处理系统。

       流处理系统与批处理系统所处理的数据不同之处在于,流处理系统并不对已经存在的数据集进行操作,而是对从外部系统接入的的数据进行处理。流处理系统可以分为两种:逐项处理:每次处理一条数据,是真正意义上的流处理。微批处理:这种处理方式把一小段时间内的数据当作一个微批次,对这个微批次内的数据进行处理。不论是哪种处理方式,其实时性都要远远好于批处理系统。因此,流处理系统非常适合应用于对实时性要求较高的场景,比如日志分析,设备监控、网站实时流量变化等等。由于很多情况下,我们想要尽快看到计算结果,所以近些年流处理系统的应用越来越广泛。下面我们来了解两种流处理系统。

       Apache Storm是一种侧重于低延迟的流处理框架,它可以处理海量的接入数据,以近实时方式处理数据。Storm延时可以达到亚秒级。Storm含有如下关键概念: Storm topology中封装了实时应用程序的逻辑。Storm topology类似于MapReduce作业,但区别是MapReduce最终会完成,而topology则会一直运行(除非被强制停止)。Topology是由spouts和bolts组成的DAG。

       Stream:Stream是一种不断被接入Storm中的无界的数据序列。Spout是topology中Stream的源。Spout从外部数据源读取数据并接入到Strom系统中。Bolt用于Storm中的数据处理,它可以进行过滤、聚合、连接等操作。将不同的bolt连接组成完整的数据处理链条,最后一个bolt用来输出(到文件系统或数据库等)。

       Storm的基本思想是使用spout拉取stream(数据),并使用bolt进行处理和输出。默认情况下Storm提供了“at least once”的保证,即每条数据被至少消费一次。当一些特殊情况(比如服务器故障等)发生时,可能会导致重复消费。为了实现“exactly once”(即有且仅有一次消费),Storm引入了Trident。Trident可以将Storm的单条处理方式改变为微批处理方式,但同时也会对Storm的处理能力产生一定的影响。

       值得一提的是,一些国内的公司在Storm的基础上进行了改进,为推动流处理系统的发展做出了很大贡献。阿里巴巴的JStorm参考了Storm,并在网络IO、线程模型、资源调度及稳定性上做了改进。而华为的StreamCQL则为Storm提供了SQL查询语义。

       提到ApacheSamza,就不得不提到当前最流行的大数据消息中间件:Apache Kafka。Apache Kafka是一个分布式的消息中间件系统,具有高吞吐、低延时等特点,并且自带了容错机制。以下是Kafka的关键概念:Broker:由于Kafka是分布式消息中间件,所以需要多个节点来存储数据。Broker即为Kafka集群中的单个节点;Topic:用于存储写入Kafka的数据流。如同它的字面含义——主题,不同主题的数据流最好写入不同的topic,方便后续的处理;Partition:每个topic都有1到多个partition,便于分散到不同的borker中。多个partition的数据合并在一起组成了topic完整的数据;Producer:消息的生产者,用来将消息写入到Kafka集群;Consumer:消息的消费者,用来读取Kafka中的消息并进行处理。虽然Kafka被广泛应用于各种流处理系统做数据源,但Samza可以更好的发挥Kafka架构的优势。根据官网的解释,Samza由三个层次组成:数据流层、执行层、处理层,支持三个层次的组件分别为:Kafka、 YARN、Samza API。也就是说,Samza使用Kafka提供了数据流,使用YARN进行资源管理,自身仅提供了操作数据流的API。Samza对Kafka和YARN的依赖在很多方面上与MapReduce对HDFS和YARN的依赖相似。

       如果已经拥有Hadoop集群和Kafka集群环境,那么使用Samza作为流处理系统无疑是一个非常好的选择。由于可以很方便的将处理过的数据再次写入Kafka,Samza尤其适合不同团队之间合作开发,处理不同阶段的多个数据流。

       大数据像一颗新兴的巨星,有众多的追随者,而且,由于其发光程度的不断提升,我们也不难看出,未来将会有更多的人进入到大数据领域,所以,不论是大数据中的流处理、批处理还是混合处理都需要求学者去了解和掌握。

本文转自:海牛学院


猜你喜欢

转载自blog.csdn.net/hainiubuluo/article/details/80929386