jstorm开发指南-写个简单的jstorm应用
jstorm 是阿里巴巴开源的基于storm采用Java重写的一套分布式实时流计算框架,使用简单,特点如下:
- 开发非常迅速: 接口简单,容易上手,只要遵守Topology,Spout, Bolt的编程规范即可开发出一个扩展性极好的应用,底层rpc,worker之间冗余,数据分流之类的动作完全不用考虑。
- 扩展性极好:当一级处理单元速度,直接配置一下并发数,即可线性扩展性能
- 健壮:当worker失效或机器出现故障时, 自动分配新的worker替换失效worker
- 数据准确性: 可以采用Acker机制,保证数据不丢失。 如果对精度有更多一步要求,采用事务机制,保证数据准确。
为什么要选择jstorm,而不采用twitter的storm呢?jstorm对比storm有如下优点:
- Nimbus 实现HA
- 彻底解决Storm雪崩问题:底层RPC采用netty + disruptor保证发送速度和接受速度是匹配的
- 新增supervisor、Supervisor shutdown时、提交新任务,worker数不够时,均不自动触发任务rebalance
- 新topology不影响现有任务,新任务无需去抢占老任务的cpu,memory,disk和net
- 减少对ZK的访问量:去掉大量无用的watch;task的心跳时间延长一倍;Task心跳检测无需全ZK扫描
- Worker 内部全流水线模式:Spout nextTuple和ack/fail运行在不同线程
- 性能:采用ZeroMq, 比storm快30%;采用netty时, 和storm快10%,并且稳定非常多
总之,Jstorm 比Storm 更稳定,功能更强大,更快。而且Storm上跑的程序可以一行代码不变运行在Jstorm上,零成本,推荐所有使用storm的兄弟们搭建个jstorm集群缓过来。
jstorm 集群的搭建过程,可以参考另一篇文章:分布式实时日志系统(一)环境搭建之 Jstorm 集群搭建过程/Jstorm集群一键安装部署
jstorm 开发实例
上面也说过了,jstorm使用起来很简单,遵循Topology,Spout, Bolt的编程规范就可以,在下面的例子中将一步步完成这些。例子也很简单,在spout中不断产生自增的int数组,bolt接受到数值后打印出日志,并插入到hbase中。(如果没有hbase环境的,这一步可以继续注释掉,不用打开,只看到跑到日志打印的地方就好了)
spout 的开发只需要继承BaseRichSpout
,实现继承的方法即可:
1 |
public class TestSpout extends BaseRichSpout { |
bolt 同理,继承 BaseRichBolt
实现其相应的方法:
1 |
public class TestBolt extends BaseRichBolt { private static final Logger LOGGER = CustomerLoggerFactory.LOGGER(TestBolt.class); |
topology 的开发同理:
1 |
public class TestTopology implements ILogTopology { |
经过上面的三个步骤,一个最简单的jstorm应用就开发完成了,接下来通过编译、打包完后,生成jar文件 jstorm-hbase-demo-0.1.jar
,将此jar文件在jstorm集群的nimbus机器上提交即可:jstorm jar jstorm-hbase-demo-0.1.jar com.xirong.demo.BootStrap config.properties
。
demo运行效果
从jstorm集群的监控图赏可以看到,对应topology的运行情况:
bolt 的执行效率,及ack数量,占用机器内存等:
源码已经上传到github上面,喜欢研究的同学,可以fork后自己修改练习。地址为:https://github.com/xirong/jstorm-hbase-demo
源码中使用到的Phoenix组件,hbase上层的中间件,使得开发人员可以使用sql的方式来对hbase进行相应的操作,感兴趣的可以阅读:使用Phoenix通过sql语句更新操作hbase数据 ,此文中介绍了如何安装及使用。
另外想对hbase的有所了解的可以查看:列式存储hbase系统架构学习
原文http://www.ixirong.com/2015/07/18/develop-the-first-jstorm-demo/
最新文章
- XSS
- Cheatsheet: 2015 10.01 ~ 10.31
- WPF多线程UI更新——两种方法
- BootStrap2学习日记5---列表
- RocketMQ入门(3)拉取消息
- STL源码剖析—stl_config
- OD: ActiveX Vulnerabilities
- ios jsbrige
- oracle表连接------&;gt;排序合并连接(Merge Sort Join)
- html、css、js实现简易计算器
- perl的foreach循环的坑
- linux find命令中-print0和xargs中-0的用法
- ffmpeg奇数分辨率转码失败
- jdk的卸载及安装+环境变量的配置
- ISAPI多进程设置
- 终止java线程的2种方法
- Stackoverflow 珠玑:C#封装重试指定次数的功能
- tomcat6和tomcat7管理用户manager配置
- Window环境下,PHP调用Python脚本
- Django之url映射
热门文章
- C#基础--------------------C#正则表达式
- Git -- 相关命令
- Bind 和 ScaffoldColumn
- ubuntu14.04安装好用的google拼音输入法
- HTTP常见的Post请求
- cocos2d - CCSprite各种动画
- Android Material Design控件学习(二)——NavigationView的学习和使用
- Android学习之——实现圆角Button
- 12 go实现几中基本排序算法
- ubuntu-14.04.2-desktop-i386.iso:ubuntu-14.04.2-desktop-i386:安装Oracle11gR2