JStorm介绍
JStorm是参考storm基于Java语言重写的实时流式计算系统框架,做了很多改进。如解决了之前的Storm nimbus节点的单点问题。
JStorm类似于Hadoop MapReduce系统,用户按照指定的接口去实现一个任务,任务提交给JStorm进行运行,且这种运行是不间断的,因为如果期间有worker发生故障,调度器会分配一个新的worker去替换这个故障worker。
从应用的角度来看,JStorm是一种分布式应用;从系统框架层面来看,JStorm又是一种类似于Hadoop MapReduce的调度系统;从数据层面来看,JStorm又是一种流式的实时计算方案。
JStorm优势
- 易开发性: JStomr接口简易,只需按照Spout、Bolt及Topology编程规范进行应用开发即可;
- 扩展性:可以线性的扩展性能,配置并发数即可;
- 容错性:出现故障worker时,调度器会分配一个新的worker去代替;
- 数据精准性:JStorm内置ACK机制,确保数据不丢失。还可以采用事务机制确保进一步的精准度;
- 实时性:JStorm不间断运行任务,且实时计算。
JStorm应用场景
- 实时计算:可实时数据统计,实时监控;
- 消息转移:流处理完消息后,可以定向的将结果存储到其他消息中间件中;
- rpc请求:提交任务就是一次rpc请求过程;
典型的场景:用于日志分析,rpc请求提交任务,从收集的日志中,统计出特定的数据结果,并将统计后的结果持久化到外部存储中,这是一种信息流处理方式,可聚合,可分析。
JStorm架构
组件介绍
- UI:JStorm web界面。
- Nimbus:调度者,是主控制节点,主要功能为提交任务、分配集群任务、集群监控等。
- Supervisor:负责接收Nimbus分配的任务,管理自己的所属Worker进程,supervisor节点是整个集群中实际运行的topology节点。
- Zookeeper:分布式应用,主要功能包括集群协调、公有数据的存放(如心跳信息、集群的状态和配置信息),Nimbus将分配给Supervisor的任务是写在zk中的,Nimbus是基于zk对整个集群进行调度,所以我们也可以说JStorm是依赖于zk的分布式调度系统。
任务进程和线程
- Worker:运行具体处理组件逻辑的进程;
- Task:每个Worker进程中包含多个Task线程,提交的topology任务内包含多个组件(spout和bolt),每个组件依据其并行度配置会分配到相应数量的Task任务,每个Task任务运行在各自的Task线程中。