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是参考storm的实时流式计算框架,在网络IO、线程模型、资源调度、可用性及稳定性上做了持续改进,已被越来越多企业使用。经过4年发展,阿里巴巴JStorm集群已经成为世界上最大的集群之一,基于JStorm的应用数量...
Storm是一个开源的分布式实时计算框架,主要用于处理无界的数据流,类似于Hadoop对数据进行批处理的方式。Storm的主要特点包括: - 开发语言:主要使用Clojure和Java编写。 - 创建历程:最初由Nathan Marz及其团队...
Storm是一个广泛使用的实时计算框架,它通过一个去中心化的、可靠的拓扑结构来处理数据流。Storm的架构简单,易于使用,并且拥有庞大的社区支持。Storm能保证消息至少处理一次,但对于某些应用场景来说,消息可能被...
JStorm是一款由阿里巴巴开发的分布式实时计算框架,它在处理大规模流式数据处理方面表现出色。自2013年4月30日发布0.7.1版本以来,JStorm经历了多次迭代升级,至2016年5月31日已更新到2.3.0版本,提供了丰富的功能和...
Apache Flink,作为业界公认的顶级流计算引擎,其计算能力不仅限于流处理。实际上,Apache Flink被定位为一个多功能的...2. 流计算框架Flink与Storm的性能对比 3. Spark与Flink:下一代大数据计算引擎的竞争 4. 5分
5. **JStorm**:JStorm是基于Apache Storm的实时流式计算框架,针对网络IO、线程模型等进行了优化,具备高可用性和稳定性,广泛应用于企业实时计算场景。 6. **apns4j**:这是一个Java实现的Apple Push ...
总之,JStorm作为一个成熟的分布式实时计算框架,为大数据实时处理提供了强大且灵活的解决方案,而0.9.6.3版则在前人的基础上进一步优化了性能和用户体验。如果你正面临实时数据处理的挑战,JStorm是一个值得考虑的...
**jStorm:开源分布式计算框架** jStorm是一个强大的开源项目,其主要目标是提供一个简单易用、高效可靠的实时计算系统。与Hadoop MapReduce这样的批量处理框架不同,jStorm专注于实时流处理,允许数据在处理过程中...
2. **JStorm**:这是一个实时流式计算框架,源自Apache Storm并进行了多项改进,如在网络IO、线程模型和资源调度等方面的优化。在阿里巴巴,JStorm已经发展成为世界上最大的流计算集群之一,每天处理的消息量极为...
而Storm和JStorm则提供了低延迟的流式计算能力,适合实时处理;Spark则是一站式解决方案,支持批处理和流处理,同时引入了Lambda架构和Kappa架构,以适应不同的业务需求。 大数据工程师的技能要求主要包括对Java的...
通过构建Flink Cluster、兼容JStorm作业迁移,以及打造流式任务管理平台,企业可以更好地应对实时大数据处理挑战,提升业务效率和数据处理能力。随着Flink技术的不断优化和社区的发展,其在实时计算领域的影响力将...
从大数据计算技术的发展历程来看,Flink代表了第三代计算技术,它基于前两代计算框架的经验,例如MapReduce、Spark和Storm的不足,并在设计上进行了革新。正是由于Flink的这种创新性,它为上层应用带来了更多的革新...
7. 流式计算:Storm、JStorm、Spark Streaming和Flink支持实时数据处理,适应不断变化的数据流。 8. 编程语言:大数据架构师需要熟悉Java、Python、R、Ruby和Scala等语言,其中Python和Scala常用于大数据处理。 9....
滴滴公司面临着实时数据处理的需求日益增长,原有的Storm和JStorm小集群需要整合升级。Flink Streaming 平台化的目的是降低使用门槛,整合资源,减少运维成本,并提高服务稳定性和问题定位效率。 **平台化组件与...
分布式的基于内存的列式存储计算框架 MapReduce局限性 代码繁琐 只支持map和reduce方法, 效率低 不适合迭代多次/交互式/流式处理 框架多样化:会导致学习/运维成本都提高 批处理(离线):MapReduce、Hive、Pig 流式...
基于这些特征,文中列举了相应的解决方案,如数据采集工具(Sqoop、Cammel、Datax),分布式文件存储系统(GFS、HDFS、TFS),以及各种计算框架和流式处理工具。 在大数据生态中,工具有助于提升工作效率,如Oozie...
- **性能对比**:与Storm等其他流处理框架进行了性能对比分析,展示了Flink的优势。 - **实战教程**:提供了从零开始构建Flink应用的教程,以及如何使用Flink SQL进行实时数据处理的示例。 - **深度剖析**:深入...
字节跳动等公司用Flink取代原有的JStorm引擎,成为公司内部流式数据处理的唯一标准,展现了Flink在实际应用中的成功案例。 Flink的社区活跃,支持者众多,这不仅限于开发者社区,还包括各大互联网公司。通过Flink,...