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

jstorm简介(转)的更多相关文章

  1. jstorm简介

    最近在研究jstorm,看了很多资料,所以也想分享出来一些. 安装部署 zeromq 简单快速的传输层框架,安装如下: wget http://download.zeromq.org/zeromq-2 ...

  2. JStorm之Nimbus简介

    本文导读: ——JStorm之Nimbus简介 .简介 .系统框架与原理 .实现逻辑和代码剖析 )Nimbus启动 )Topology提交 )任务调度 )任务监控 .结束语 .参考文献 附:JStor ...

  3. 流式计算-Jstorm提交Topology过程(上)

    Topology是Jstorm对有向无环图的抽象,内部封装了数据来源spout和数据处理单元bolt,以及spout和bolt.bolt和bolt之间的关系.它能够被提交到Jstorm集群. 本文以J ...

  4. 53.storm简介

    一.简介 1.storm是twitter开源的一个分布式的实时计算系统,用于数据实时分析,持续计算,分布式RPC等等. 官网地址:http://storm-project.net 源码地址:https ...

  5. jstorm系列-1:入门

    一.             Storm整体介绍 Storm 是一个类似Hadoop MapReduce的系统, 用户按照指定的接口实现一个任务,然后将这个任务递交给JStorm系统,Jstorm将这 ...

  6. JStorm学习

    一.简介 JStorm是一个分布式实时计算引擎.JStorm是一个类似于Hadoop MapReduce的系统,用户按照指定的接口实现一个任务,然后将这个任务交给JStorm系统,JStorm将这个任 ...

  7. ASP.NET Core 1.1 简介

    ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...

  8. MVVM模式和在WPF中的实现(一)MVVM模式简介

    MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...

  9. Cassandra简介

    在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...

随机推荐

  1. (Problem 16)Power digit sum

    215 = 32768 and the sum of its digits is 3 + 2 + 7 + 6 + 8 = 26. What is the sum of the digits of th ...

  2. php启用gzip压缩

    GZIP(GNU-ZIP)是一种压缩技术.经过GZIP压缩后页面大小可以变为原来的30%甚至更小.这样用户浏览的时候就会感觉很爽很愉快! 要实现GZIP压缩页面需要浏览器和服务器共同支持,实际上就是服 ...

  3. 基于visual Studio2013解决C语言竞赛题之0603打印素数

     题目

  4. [置顶] 使用红孩儿工具箱完成基于Cocos2d-x的简单游戏动画界面

    [Cocos2d-x相关教程来源于红孩儿的游戏编程之路CSDN博客地址:http://blog.csdn.net/honghaier 红孩儿Cocos2d-X学习园地QQ3群:205100149,47 ...

  5. NGUI出现Shader wants normals, but the mesh UIAtlas doesn&#39;t have them

    NGUI出现Shader wants normals, but the mesh UIAtlas doesn't have them,没有网格法线,打开UI Root上 UIPanel组建上的 Nor ...

  6. Log4Net五步走

    本文不是教你全面了解log4net,本文只是希望教会你按步就班,照糊芦画瓢般就会用log4net1,引入log4net.dll组件2,建立一个配置文件两种方法,一种是在Web.Config或App.C ...

  7. 总结:js中4类修改样式的方法

    前言 最近在写一个扩展右键菜单的插件,既然是插件,想着一步到位,把相关的style样式设置都丢进js文件中,直接加载一个js文件便可以使用该插件,所以今天就研究了下js批量的插入样式的方法,即addS ...

  8. perl 面向对象 use base

    1.XXX.pm 文件里面的第一行要是:package XXX: 2.要有构造函数 sub new,实现如下: sub new { my $class = shift; # Get the reque ...

  9. 在大型项目上,Python 是个烂语言吗

    Robert Love, Google Software Engineer and Manager on Web Search. Upvoted by Kah Seng Tay, I was the ...

  10. Swift Error fatal error: unexpectedly found nil while unwrapping an Optional value

    致命的错误: 对一个为空的optional值进行解包. 强制解包(forced unwrapping): 在optional后面加叹号. 比如  "value!" 错误代码: le ...