jstorm简介(转)

Jstorm是参考storm的实时流式计算框架,在网络IO、线程模型、资源调度、可用性及稳定性上做了持续改进,已被越来越多企业使用

作为commiter和user,我还是非常看好它的应用前景,下面是在团队内的分享介绍,更多请参考https://github.com/alibaba/jstorm

一、jstorm是什么

jstorm可以看作是storm的java增强版本,除了内核用纯java实现外,还包括了thrift、python、facet ui。从架构上看,其本质是一个基于zk的分布式调度系统

Jstorm主要应用场景有:

1.信息流处理,如聚合、分析等

2.持续计算,如实时数据统计、监控

3.分布式rpc调用

Jstorm在内核上对storm的改进有:

(1)模型简化

(2)多维度资源调度

(3)网络通信层改造

(4)采样重构

(5)worker/task内部异步化处理

(6)classload、HA

模型简化将storm的三层管理模型简化为两层


 jstorm中task直接对应了线程概念,而在storm中是task只是线程executor的一个执行逻辑单元

多维度资源调度 分为cpu、memory、net、disk四个维度,默认情况下:

cpu slots = 机器核数 * 2 -1

memory slots = 机器物理内存 / 1024M

net slots = min(cpu slots, memory slots)

网络通信层 采用了netty + disruptor 替换 zmq + blockingQueue

采样重构 

a.定义了滚动时间窗口

b.优化缓存map性能

c.增量采样时间以及减少无谓数据

Worker/Task内部异步化

异步化和回调是流式框架最基本的两大特征,Jstorm在task的计算中将nextTuple和ack/fail的逻辑分离开来,并在worker中采用单独线程负责流入、流出数据的反序列化及序列化工作

有关jstorm实现的几个关键流程,有兴趣的可以参考源码

1.Nimbus的启动


 2.supervisor的启动


3. worker内部结构


 worker的启动需要完成以下几件事:

a.读取配置文件,启动进程

b.初始化tuple接收队列和发送队列

c.打开端口,启动rpc服务

d.创建context结构,<component, <stream, output_field>>

e.触发各种timer,refresh/reconnection/heartbeat...

task的工作包括:

a.创建内部队列,bind connection

b.反射component拿到taskObj,创建具体的spout/bolt executor

c.反序列化tuple数据,执行处理逻辑

d.做stats,heartbeat等

jstorm在数据的完整性和准确性上分别依赖了acker和事务机制

acker本质是独立的bolt,input是fieldGrouping,output是directGrouping;

每个bolt有两个output stream(ACKER_ACK_STREAM_ID/ACKER_ACK_FAIL_STREAM_ID)

每个spout有一个output stream(ACKER_INIT_STREAM_ID),以及两个input stream(ACKER_ACK_STREAM_ID/ACKER_ACK_FAIL_STREAM_ID)
    Spout
        发送给acker 的value <rootid, xor(target_task_list)>
        发送下一级bolt 的value <rootid, 目标taskid>
    Bolt
         下一级bolt需要ack发送给下一级bolt 为<rootid, 新uuid)>发送给acker的value为<rootid, xor(新uuid, $(接收值))>
         下一级bolt不需要ack发送给下一级bolt 为空发送给acker为<rootid, $(接收值)>

事务:批处理+全局唯一递增id+两阶段提交

在发送tuple的时候带上tid来保证“只有一次”的原语,下游逻辑根据tid是否next tid来判断是否需要处理。为了提高效率,会将多个tuple组装成一批赋予一个tid,并用pipeline方式执行processing和commit阶段,其中processing可以并发执行,而commit具有严格的强顺序性。接口coordinator,commitor中做了状态管理、事务协调、错误检查等工作

另外一个用得最多的高级特性就是trident,它对bolt进行了封装,提供了如joins、aggregations、grouping、filters、function等多种高级数据处理能力

最后,谈谈有关jstorm的运维开发

(1)配置优先级:代码 > jstorm.yaml > default.yaml

(2)stream流对比:

a.fieldsGrouping

b.globalGrouping - target componet的第一个task

c.shuffleGrouping - 自定义random,更平均

d.noneGrouping - 调用random

e.allGrouping - target component所有task

f.directGrouping - 指定目标task

g.customGrouping - 接口customStreamGrouping

(3)jvm调优,优先考虑新生代,开启碎片整理

(4)同一worker内的task,开启定向调度避免网络开销

(5)优雅关闭,reblance或kill前先deactive,等待msg_timeout进行数据清理

(6)其它,hooks、queue-size、topology.max.spout.pending等

http://luoshi0801.iteye.com/blog/2168848

时间: 2024-12-19 06:49:06

jstorm简介(转)的相关文章

[转]JStorm之Nimbus简介

一.简介 JStorm集群包含两类节点:主控节点(Nimbus)和工作节点(Supervisor).其分别对应的角色如下:1. 主控节点(Nimbus)上运行Nimbus Daemon.Nimbus负责接收Client提交的Topology,分发代码,分配任务给工作节点,监控集群中运行任务的状态等工作.Nimbus作用类似于Hadoop中JobTracker.2. 工作节点(Supervisor)上运行Supervisor Daemon.Supervisor通过subscribe Zookeep

[转]JStorm之Supervisor简介

一.简介 Supervisor是JStorm中的工作节点,类似于MR的TT,subscribe zookeeper的任务调度结果数据,根据任务调度情况启动/停止工作进程Worker.同时Supervisor需要定期向zookeeper写入活跃端口信息以便Nimbus监控.Supervisor不执行具体处理工作,所有的计算任务都交Worker完成.从整个架构上看,Supervisor处在整个JStorm三级管理架构的中间环节,辅助管理任务调度和资源管理工作. 二.架构 1.Supervisor S

JStorm之Nimbus简介

JStorm之Nimbus简介 一.简介 JStorm集群包含两类节点:主控节点(Nimbus)和工作节点(Supervisor).其分别对应的角色如下: 1. 主控节点(Nimbus)上运行Nimbus Daemon.Nimbus负责接收Client提交的Topology,分发代码,分配任务给工作节点,监控集群中运行任务的状态等工作.Nimbus作用类似于Hadoop中JobTracker. 2. 工作节点(Supervisor)上运行Supervisor Daemon.Supervisor通

[转]JStorm介绍

一.简介 Storm是开源的分布式容错实时计算系统,目前被托管在GitHub上,遵循 Eclipse Public License 1.0.最初由BackType开发,现在已被Twitter收入麾下.Storm最新版本是Storm 0.9,核心采用Clojure实现.Storm为分布式实时计算提供了一组通用原语,可被用于“流处理”之中,实时处理消息:Storm也可被用于“连续计算”(continuous computation),对数据流做连续处理,在计算时就将结果以流的形式输出给用户:它还可被

JStorm学习

一.简介 JStorm是一个分布式实时计算引擎.JStorm是一个类似于Hadoop MapReduce的系统,用户按照指定的接口实现一个任务,然后将这个任务交给JStorm系统,JStorm将这个任务跑起来,并按7*24小时运行.如果中间一个worker发生了意外故障,调度器立即分配一个新的worker来替换这个失效的worker. 从应用的角度上看,JStorm是一种遵循某种编程规范的分布式应用:从系统的角度上看,JStorm是一套类似MapReduce的调度系统:从数据角度上看,JStor

Android网络通讯简介

网络通信应该包含三部分的内容:发送方.接收方.协议栈.发送方和接收方是参与通信的主体,协议栈是发送方和接收方进行通信的契约.按照服务类型,网络通信可分为面向连接和无连接的方式.面向连接是在通信前建立通信链路,而通信结束后释放该链路.无连接的方式则不需要在通信前建立通信连接,这种方式不保证传输的质量. Android提供了多种网络通信的方式,如Java中提供的网络编程,在Android中都提供了支持.Android中常用的网络编程方式如下: 针对TCP/IP协议的Socket和ServerSock

微信红包的架构设计简介

@来源于QCon某高可用架构群整理,整理朱玉华. 背景:有某个朋友在朋友圈咨询微信红包的架构,于是乎有了下面的文字(有误请提出,谢谢) 概况:2014年微信红包使用数据库硬抗整个流量,2015年使用cache抗流量. 微信的金额什么时候算? 答:微信金额是拆的时候实时算出来,不是预先分配的,采用的是纯内存计算,不需要预算空间存储.. 采取实时计算金额的考虑:预算需要占存储,实时效率很高,预算才效率低. 实时性:为什么明明抢到红包,点开后发现没有? 答:2014年的红包一点开就知道金额,分两次操作

JSON 简介

ylbtech-JSON: JSON 简介 JSON:JavaScript Object Notation(JavaScript 对象表示法) JSON是存储和交换文本信息的语法,类似 XML. JSON 比 XML 更小.更快.更易解析. JSON 实例 { "employee":[ {"firstName":"John","lastName":"Doe"}, {"firstName"

Docker简介

Docker简介 什么是Docker: 正所谓Docker的英文本意为"搬运工",所以在我们的世界里,可以理解为Docker搬运的是装满任意类型的APP的集装箱,开发者可以通过Docker将APP变成一种标准化的.可移动植的.自动管理的组件.它用一种新的方式实现了轻量级的虚拟机,专业术语成为应用容器(Application Container) Docker的优势: 1.利用率高 ·Docker对系统资源的利用率很高,一台主机可以同时运行数千个Docker容器 2.可以快速的交付应用程