JStorm

企业级流式计算引擎
授权协议 Apache
开发语言 Java Python
所属分类 服务器软件、 分布式应用/网格
软件类型 开源软件
地区 国产
投 递 者 吕扬
操作系统 跨平台
开源组织 阿里巴巴
适用人群 未知
 软件概览

JStorm 是参考 Apache Storm 实现的实时流式计算框架,在网络IO、线程模型、资源调度、可用性及稳定性上做了持续改进,已被越来越多企业使用。JStorm 可以看作是 storm 的java增强版本,除了内核用纯java实现外,还包括了thrift、python、facet ui。从架构上看,其本质是一个基于zk的分布式调度系统

JStorm 的性能是Apache Storm 的4倍, 可以自由切换行模式或 mini-batch 模式:

JStorm Performance



 

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

采样重构 

  1. 定义了滚动时间窗口

  2. 优化缓存map性能

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

Worker/Task内部异步化

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

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

1.Nimbus的启动


 2.supervisor的启动


3. worker内部结构


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

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

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

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

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

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

task的工作包括:

  1. 创建内部队列,bind connection

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

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

  4. 做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是一个类似于Hadoop MapReduce的系统,用户按照指定的接口实现一个任务,然后将这个任务交给JStorm系统,JStorm将这个任务跑起来,并按7*24小时运行。如果中间一个worker发生了意外故障,调度器立即分配一个新的worker来替换这个失效的worker。 从应用的角度上看,JStorm是一种遵循某种编程规范的分布式应

  • jps 查看niumbus和supervisor进程 ./jstorm list 查看jstorm详细信息 [ducc@saas-billing-server-051 bin]$ ./jstorm list /opt/jdk1.8.0_162/bin/java Running: java -client -Xms256m -Xmx256m -Djstorm.home=/app/bss30_bill

  • 机器规划 172.16.10.210:jstorm nimbus master,jstorm supervisor 172.16.10.211:jstorm supervisor 172.16.10.212:jstorm supervisor 172.16.10.220:2181 : zookeeper 集群部署 准备安装包 wget https://github.com/alibaba/jsto

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

  • 集成spring boot 本地模式 使用jstorm本地模式topology时,可以是jstorm包含springboot,也可以是springboot 包含jstorm,这不影响jar和topology的运行。所以本地模式下,jstorm与springboot或springcloud如何进行集成,都没有影响,但是如果将topology提交到集群去运行时,代码的工程结构就得是jstorm包含sp

  • 安装部署使用 ack机制 ack机制原理 这里不讲什么是ack机制,可以参考官网的文档Ack 机制 我们只要知道它是使用异或xor的原理即可: A xor A = 0 A xor B xor B xor A = 0 使用ack机制 要想使用ack机制,需要做以下工作: Topology的处理 构建topology时设置acker不为0,方法如下: config.setNumAckers(1); 该

  • Jstorm 环境搭建 有三种安装部署方式:standalone模式、yarn模式、docker模式,其中standalone模式最简单、轻量、稳定比较常用,整体规模不超过300台,yarn模式外部依赖较重,规模至少30台,docker比较消耗性能。 standalon模式安装步骤 搭建外部依赖 搭建jstorm之前需要先搭建外部依赖 1. zookeeper 2. jdk 版本>=1.7 搭建J

 相关资料
  • 1.平台注册 登录 Finclip.com,并点击右上角的「登录」,并在跳转后的页面中选择「去注册」,您需要通过以下几步完成账号注册流程: 第一步:填写账号信息 输入登录邮箱,手机号及验证码,企业名称,并设置登录密码,然后点击即可注册成功; ​ 第二步:补充企业信息 在完成个人账号注册后,点击「前往开放平台」,并逐次点击右上角「头像-变更为企业账户」; 并在后续的页面中,分别输入企业名称,社会统一

  • 1、前往如流官网,点击右上角【企业注册】 2、根据指引填写信息,提交注册申请,只有认证审批通过后企业才注册成功,审批通过或拒绝将通过短信通知你,注册成功后你将成为企业创建人。 1)填写企业信息:真实的企业全称、行业类型、人员规模 2)选择主体类型:可选企业、政府/事业单位、其他组织 3)根据选择的主体类型上传所需的营业执照、组织机构代码证、事业单位法人证书、认证授权书等图片 4)填写创建人信息:真

  • 企业授权应用流程 PDF版下载 企业的系统管理员从管理后台-应用市场发起授权安装第三方应用,安装后如流平台会将授权凭证、授权信息等推送给服务商后台。 详细步骤: 企业管理员授权安装应用 企业的系统管理员从管理后台应用市场发起授权安装第三方应用; 授权成功,回调临时授权码 a) 授权成功后,如流企业平台会回调应用开发信息中填写的安装事件回调地址,GET参数上带上临时授权码auth_code; b)

  • 以下是为 linkerd 提供商业支持和其他企业产品的公司列表: Buoyant 是 linkerd 的原创者,并提供支持,培训和企业产品。 了解更多 »

  • 作用 用于查询企业账户额度、开票额度等信息。 依赖 暂无依赖 注意 所有接口调用时需要严格遵守请求方式(GET/POST) 使用接口前需要仔细阅读每个接口的注意事项 接口报错时先阅读通用错误解决方案和当前接口文档下的接口错误解决方案

  • 注意:本书中的 Service Mesh 章节已不再维护,请转到 istio-handbook 中浏览。 本节是根据由Nginx赞助,O’Reilly出版社出品的关于服务网格的书籍总结而来,本书标题是 The Enterprise Path to Service Mesh ,还有个副标题 Decoupling at Layer 5 ,第一版发行于2018年8月8日。这本书一共61页,本文是我对该书