流式数据的特点是数据连续不断、来源众多、格式复杂、物理顺序不一、数据的价值密度低。流式数据是一个无穷的数据序列,序列中的每一个元素来源各异、格式复杂,序列往往包含时间标签或者其他的有序标签,如IP报文中的序号。同一流式数据往往是被按序处理的。然而数据的到达顺序是不可预知的。由于时间和环境的动态变化,无法保证重放数据流与之前数据流中数据元素顺序的一致性,这就导致了数据的物理顺序与逻辑顺序不一致。而且数据源不受接收系统的控制,数据的产生是实时的、不可预知的。此外,数据的流速往往有较大的波动。因此需要系统具有很好的可伸缩性,能够动态适应不确定流入的数据流,具有很强的系统计算能力和大数据流量动态匹配能力。其次,数据流中的数据格式可以是结构化的、半结构化的甚至是无结构化的。数据流中往往含有错误元素、垃圾信息等。因此流式数据的处理系统要有很好的容错性与异构数据分析能力,能够完成数据的动态清洗、格式处理等任务。最后,流式数据是活动的,随着时间的推移不断增长。这与传统的数据处理模型的存储与查询不同,要求系统能够根据局部数据进行计算,保存数据流的动态属性。
流式计算常常应用于设备状态的监控中。当设备工作时,传感器采集系统采集传感器的信息,包括时间、位置、环境和行为等内容,并实时传递到分析平台上。当平台分析发现可能导致故障的异样特征信号时,需要进行预警,避免故障的发生。
Twitter的Storm系统是目前最常用的流式数据处理系统。Storm是一套分布式、可靠、可容错的用于处理流式数据的系统。其流式处理作业被分发至不同类型的组件,每个组件负责一项简单的、特定的处理任务。Storm集群的输入流由名为Spout的组件负责。Spout将数据传递给名为Bolt的组件,后者将以指定的方式处理这些数据,并转发给另外的Bolt。Storm集群可以看成一条由Bolt组件组成的链,称为一个Topology。每个Bolt对Spout产生出来的数据做某种方式的处理。Storm可用来实时处理新数据和更新数据库,兼具容错性和扩展性。Storm也可被用于连续计算,对数据流做连续查询,在计算时将结果以流的形式输出给用户。它还可被用于分布式RPC(Remote Prcedure Call Protocol),以并行的方式运行复杂运算。
Storm的主要特点如下:
1)简单的编程模型。Storm提供类似于MapReduce的操作,降低了并行批处理与实时处理的复杂性。一个Storm作业只需实现一个Topology及其所包含的Spout与Bolt。通过指定它们的连接方式,Topology可以胜任大多数的流式作业需求。(www.daowen.com)
2)容错性。Storm利用ZooKeeper管理工作进程和结点的故障。在工作过程中,如果出现异常,Topology会失败。但Storm将以一致的状态重新启动处理,这样它可以正确地恢复。
3)水平扩展。Storm拥有良好的水平扩展能力,其流式计算过程是在多个线程、进程和服务器之间并行进行的。Nimbus结点将大量的协同工作都交由ZooKeeper结点负责,使得水平扩展不会产生瓶颈。
4)快速可靠的消息处理。Storm以ZeroMQ作为消息队列,极大提高了消息传递的速度,系统的设计也保证了消息能得到快速处理。Storm保证每个消息至少能得到一次完整处理。任务失败时,它会负责从消息源重试消息。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。