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
jstorm简介(转)的更多相关文章
- jstorm简介
最近在研究jstorm,看了很多资料,所以也想分享出来一些. 安装部署 zeromq 简单快速的传输层框架,安装如下: wget http://download.zeromq.org/zeromq-2 ...
- JStorm之Nimbus简介
本文导读: ——JStorm之Nimbus简介 .简介 .系统框架与原理 .实现逻辑和代码剖析 )Nimbus启动 )Topology提交 )任务调度 )任务监控 .结束语 .参考文献 附:JStor ...
- 流式计算-Jstorm提交Topology过程(上)
Topology是Jstorm对有向无环图的抽象,内部封装了数据来源spout和数据处理单元bolt,以及spout和bolt.bolt和bolt之间的关系.它能够被提交到Jstorm集群. 本文以J ...
- 53.storm简介
一.简介 1.storm是twitter开源的一个分布式的实时计算系统,用于数据实时分析,持续计算,分布式RPC等等. 官网地址:http://storm-project.net 源码地址:https ...
- jstorm系列-1:入门
一. Storm整体介绍 Storm 是一个类似Hadoop MapReduce的系统, 用户按照指定的接口实现一个任务,然后将这个任务递交给JStorm系统,Jstorm将这 ...
- JStorm学习
一.简介 JStorm是一个分布式实时计算引擎.JStorm是一个类似于Hadoop MapReduce的系统,用户按照指定的接口实现一个任务,然后将这个任务交给JStorm系统,JStorm将这个任 ...
- ASP.NET Core 1.1 简介
ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...
- MVVM模式和在WPF中的实现(一)MVVM模式简介
MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...
- Cassandra简介
在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...
随机推荐
- 使用ownCloud在Linux安装你的个人云服务
ownCloud是一个免费开源的软件,用于为分享文件,日历,联系人,书签和个人音频/视频.非常容易安装和管理. 前提 在这篇教程里我使用CentOS 6.5 minimal server来安装ownC ...
- shell的wc命令统计 head tail命令详解
Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数.字数.行数,并将统计结果显示输出. 1.命令格式: wc [选项]文件... 2.命令功能: 统计指定文件中的字节数. ...
- 鼠标滑轮一滚动Excel就停止工作
鼠标滑轮一滚动Excel就停止工作 问题签名: 问题事件名称:APPCRASH 应用程序名:EXCEL.EXE 应用程序版本:15.0.4420.1017 应用程序时间戳:50673286 故障模块名 ...
- 基于 JVMTI 实现 Java 线程的监控(转)
随着多核 CPU 的日益普及,越来越多的 Java 应用程序使用多线程并行计算来充分发挥整个系统的性能.多线程的使用也给应用程序开发人员带来了巨大的挑战,不正确地使用多线程可能造成线程死锁或资源竞争, ...
- 基于visual Studio2013解决算法导论之053图的邻接表表示
题目 图的邻接表表示 解决代码及点评 // 图的邻接表表示.cpp : 定义控制台应用程序的入口点. // #include <iostream> #include <sta ...
- 基于visual Studio2013解决C语言竞赛题之0416完数
题目 解决代码及点评 完数的解决方案依旧是遍历,然后写出判断完数的函数进行处理 /************************************************** ...
- Git学习笔记总结和注意事项
一.Git简单介绍 Git是眼下世界上最先进的分布式版本号控制系统.其特点简单来说就是:高端大气上档次! 二.Windows上Git安装 最早Git是在Linux上开发的.非常长一段时间内.Git也仅 ...
- 另一种数据库连接字符串的编写方式(Sqlbuilder)
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(); builder.DataSource = "&q ...
- python 3.4 装matplotlib numpy
为了装个matplotlib包,搞了好久: python3.4,官方没有对应版本的包,只能去下面这个地方下对应的版本: http://www.lfd.uci.edu/~gohlke/pythonl ...
- JVM-如何判断一段数据是真正的数据,还是对象的引用
JVM 判断一段数据到底是数据还是引用类型,首先要看JVM选择用什么方式.通常这个选择会影响到GC的实现. 一.保守式 如果JVM选择不记录任何这种类型的数据,那么它就无法区分内存里某个位置上的数据到 ...