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. 【转】管理员必备的Linux系统监控工具

    原文连接: 管理员必备的Linux系统监控工具 #1: top - 进程活动 top提供一个当前运行系统实时动态的视图,也就是正在运行进程.在默认情况下,显示系统中CPU使用率最高的任务,并每5秒钟刷 ...

  2. Hadoop集群的安装与配置(centos 6.5)

    一.Hadoop搭建准备(centOs6.5  且每个系统都要有同一个用户,如:hadoop)     1.IP的配置 包括Master和Slaves的IP配置,之间能够相互ping通:  例如:   ...

  3. CodeForces 294B Shaass and Bookshelf 【规律 & 模拟】或【Dp】

    这道题目的意思就是排两排书,下面这排只能竖着放,上面这排可以平着放,使得宽度最小 根据题意可以得出一个结论,放上这排书的Width 肯定会遵照从小到大的顺序放上去的 Because the total ...

  4. docker学习笔记15:Dockerfile 指令 USER介绍

    USER指令用于指定容器执行程序的用户身份,默认是 root用户. 在docker run 中可以通过 -u 选项来覆盖USER指令的设置. 举例:docker run -i -t -u mysql ...

  5. methanol 模块化的可定制的网页爬虫软件,主要的优点是速度快。

    methanol模块化的可定制的网页爬虫软件,主要的优点是速度快. 下载:http://sourceforge.net/projects/methabot/?source=typ_redirect R ...

  6. cocos2dx进阶学习之CCEGLView

    继承关系 CCEGLView-> CCEGLViewProtocol CCEGLView是窗口,在不同平台上有不同的实现,而CCEGLViewProtocol是CCEGLView定义的接口,所以 ...

  7. MYSQL设计优化

    本文将从各方面介绍优化mysql设计的一些方式. 1.优化sql语句 (1)定位须要优化的sql语句 1)show status统计SQL语句频率 对Myisam和Innodb存储引擎都计数的參数: ...

  8. 多模块Maven项目怎样使用javadoc插件生成文档

    需求 近期要对一个项目结构例如以下的Maven项目生成JavaDoc文档. Project                         |-- pom.xml                   ...

  9. 嵌入式:使用dd命令制作烧写文件

    1. 使用dd命令制作烧写文件 环境: bootargs=mem=64M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtd ...

  10. hibernate 配置文件 和一个 id生成类BaseEntity.java 和一个hibernate工具类 HibernatUtils.java

    package com; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate ...