jstorm

原创 2015年11月19日 13:51:30

 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等

jstorm集群配置部署过程全纪录

Jstorm是阿里在storm的基础上开发的一个流计算系统,提供比storm更多的功能和
  • carlislelee
  • carlislelee
  • 2014年07月11日 15:10
  • 6964

jstorm源码分析:work管理

管理work前面已经知道了,通过SyncProcessEvent 可以从zookeeper上获取分配到一台机器的任务信息,那么有了这些信息,我们能干什么呢?接下来我们就来揭开SyncProcessEv...
  • benbendy1984
  • benbendy1984
  • 2016年05月31日 08:57
  • 1559

大数据(十五) - JStorm

JStorm 是一个分布式实时计算引擎,是淘宝开源的 随着Storm 的规模越来越大,发现原有的很多Storm设计,只能适合小集群中运行,当集群规模超过100台时,均会出现一些或这或那的问题。JSt...
  • matthewei6
  • matthewei6
  • 2016年01月23日 16:04
  • 3516

JStorm学习笔记

JSTORM使用笔记 安装部署 zeromq 简单快速的传输层框架,安装如下: wget http://download.zeromq.org/zeromq-2.1...
  • zhoudatianchai
  • zhoudatianchai
  • 2015年07月22日 14:52
  • 1132

Jstorm 集群搭建过程/Jstorm集群一键安装部署

原文地址:http://www.kuqin.com/shuoit/20150513/346034.html Jstorm 官方搭建使用过程如连接https://github.com/...
  • u012107806
  • u012107806
  • 2016年01月11日 17:50
  • 2126

jstorm本地开发环境搭建

maven依赖 com.alibaba.jstorm jstorm-core 2.1.1
  • jamal117
  • jamal117
  • 2017年01月21日 14:33
  • 1670

jstorm了解—应用场景

JStorm处理数据的方式是基于消息的流水线处理, 因此特别适合无状态计算,也就是计算单元的依赖的数据全部在接受的消息中可以找到, 并且最好一个数据流不依赖另外一个数据流。...
  • duqi_2009
  • duqi_2009
  • 2015年09月06日 17:40
  • 2799

storm、jstorm 调研系列(一)----jstorm介绍以及与spark的比较,外加一些基础概念

storm、jstorm是干什么的storm是一款开源的、分布式的、低延迟的、可扩展的、容错的实时计算框架,采用clojure和java的混合编程,总体两者的代码总量是55开的,但clojure语言具...
  • yc_pku
  • yc_pku
  • 2016年08月14日 16:38
  • 3934

JStorm和Storm比较

1、What——JStorm是什么?  概述:   JStorm 是一个分布式实时计算引擎,类似Hadoop MapReduce的系统, 用户按照规定的编程规范实现一个任务,然后将这个任务递交给J...
  • jinfeiteng2008
  • jinfeiteng2008
  • 2016年12月06日 15:24
  • 3101

jstorm源码分析:提交任务过程

submitTopologyWithOpts(ServiceHandler) 1 首先是校验任务的名称是否合法 if (!Common.charValidate(topologyName...
  • benbendy1984
  • benbendy1984
  • 2016年03月17日 23:03
  • 2577
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:jstorm
举报原因:
原因补充:

(最多只允许输入30个字)