数据可以分为两种:静态数据和动态数据(流数据)
流数据特点:
数据来源众多,随时变化,快速持续到达,关注数据的整体价值不过分关注个体价值,数据价值随时间流逝
批量计算:充裕的时间处理静态数据,如hadoop。
将数据存储在数据库,用户主动发出查询,得到结果
流计算:要求在秒级甚至更短的时间完成计算
数据实时采集,数据实时计算,结果主动推送给用户,数据可能不需要存储
数据实时采集:
数据实时计算:
数据经流处理系统处理后的数据,可以流出给下一个环节继续处理,也可以把相关结果处理完以后就丢弃掉,或者存储到相关的存储系统当中去
开源流计算框架storm
设计思想
streams:storm将流数据描述成一个无限的tuple序列。
spout:
bolt:
每个bolt可以包含多个task(任务),每个task可以在不同的机器节点并行处理
topology:相当于hadoop里的job
topology中每个组件都是并行运行的
stream grouping:
图中每个圆圈是一个task。
spout中产出tuple后应当以何种规则分发给boltA和blotB--- stream grouping
分发规则:
ShuffleGrouping:随机分组,保证每个bolt收到的task数量大致相等
FieldsGrouping:按字段分组,保证相同字段的tuple分配到同一个task
AllGrouping:每个task收到所有tuple
GlobalGrouping:所有tuple发到同一个task
DirectGrouping:直接分组,指定摸个task执行tuple
storm工作模式:
nimbus和supervisor不直接通信,而是通过zookeeper。如果nimbus或supervisor发生故障,可以通过zookeeper保存的信息快速恢复工作
worker进程和topology是1-n的关系
每个worker进程,运行着多个executor线程(白色)
每个executor线程运行同一个组件的若干个task。
实际的数据处理有task完成
storm工作流程
所有Topology任务的提交必须在Storm客户端节点上进行。
Nimbus节点首先将Topology分片成一个个Task,分配给相应的Supervisor,将分配信息提交到Zookeeper集群上。
Supervisor会去Zookeeper上认领自己的Task
另外两种流计算框架:spark streaming和samaza
spark streaming:
spark是面向批处理的框架,将实时输入数据以时间片为单位拆分(拆分后称为Dstream---离散化数据流)并处理(RDD操作),以此实现流数据的处理
优点:1、容错性强于storm
2、兼容批量和实时数据处理的算法,方便了需要历史数据和实时数据联合分析的应用场合
缺点:1、离散化数据流终究不是真正的数据流,响应速度慢与storm
samaza:
对于大量流数据的处理能力强于另外两种框架