storm java 开发的hello world 入门示例
Storm中的核心概念:
Stream: 流是一个没有边界的Tuple序列,这些Tuple以分布式的方式并行创建与处理
Spout:是Topology中消息的生产者(即是Tuple的创建者)
Bolt:消息的处理者
是接收Spout发出Tuple后处理数据的组件,并产生新的数据输出流。可执行过滤,合并,统计等操作。
生命周期:客户端创建Bolt,然后将其序列化拓扑,并提交给集群中的主机。集群启动worker进程,反序列化Bolt,调用prepare方法开始处理Tuple
Tuple:可简单的认为是消息传递时约定的一种数据结构,Fields-Values形式。可形象的比喻为数据库表定义与数据储存,定义好了Fields之后它的值可能就是一个Values的列表.Fields默认支持的类型有:Integer,float,double,long,short,string,byte 其它类型的就需要序列化了
大概看一下Fields对应的源码
Tuple的生命周期:backtype.storm.spout.ISpout 实现接口负责产生与传递Tuple
Task:每一个Spout/Bolt的运行线程称为一个Task,也就是Spout/Bolt的执行单元
Worker:是一个java进程,执行Topology的一部分任务。会启动一个或是多个executor线程来执行一个Topology的组件(Spout/Bolt),因此在执行时,可能跨一个或是多个worker
Stream Grouping:定义一个流如何分配Tuple到Bolt的,主要流分组类型有:
- 随机分组
- 字段分组
- 全部分组:对于每一个Tuple来说,所有的Bolt都会收到
- 全局分组:全部的流都分配到Bolt的同一个任务
- 无分组
- 直接分组 :元组的生产者决定元组由哪个元组消费者任务接收
Topology: