大数据(十五) - JStorm

JStorm 是一个分布式实时计算引擎,是淘宝开源的
随着Storm 的规模越来越大,发现原有的很多Storm设计,只能适合小集群中运行,当集群规模超过100台时,均会出现一些或这或那的问题。JStorm 比Storm更稳定,更强大,更快, Storm上跑的程序,一行代码不变可以运行在JStorm上。
storm/Jstorm的安装、配置、启动几乎一模一样
从应用的角度,JStorm应用是一种遵守某种编程规范的分布式应用。从系统角度, JStorm是一套 类似MapReduce的调度系统。 从数据的角度,JStorm是一套基于流水线的消息处理机制。
在Storm和JStorm出现以前,市面上出现很多实时计算引擎,但自Storm和JStorm出现后,基本上可以说 一统江湖


Jstorm/storm优点
开发非常迅速:接口简单,容易上手,只要遵守Topology、Spout和Bolt的编程规范即可开发出一个扩展性极好的应用,底层RPC、Worker之间冗余,数据分流之类的动作完全不用考虑
扩展性极好:当一级处理单元速度,直接配置一下并发数,即可线性扩展性能
健壮强:当Worker失效或机器出现故障时, 自动分配新的Worker替换失效Worker
数据准确性:可以采用 Ack机制,保证数据不丢失。 如果对精度有更多一步要求,采用 事务机制,保证数据准确。

应用场景
日志分析,从日志中分析出特定的数据,并将分析的结果存入外部存储器如数据库。目前,主流日志分析技术就使用JStorm或Storm 
管道系统, 将一个数据从一个系统传输到另外一个系统, 比如将数据库同步到Hadoop
消息转化器, 将接受到的消息按照某种格式进行转化,存储到另外一个系统如消息中间件
统计分析器, 从日志或消息中,提炼出 某个字段,然后做count或sum计算,最后将统计值存入外部存储器。中间处理过程可能更复杂。



资源slot
在JStorm中,资源类型分为4种, CPU, Memory,Disk, Port, 不再局限于Storm的port。 即一个supervisor可以提供多少个CPU slot,多少个Memory slot, 多少个Disk slot, 多少个Port slot
一个worker就消耗一个Port slot, 默认一个task会消耗一个CPU slot和一个Memory slot
当task执行任务较重时,可以申请更多的CPU slot,
当task需要更多内存时,可以申请更多的内存slot,
当task 磁盘读写较多时,可以申请磁盘slot,则该磁盘slot给该task独享。

Ack机制:通过Ack机制,很容易做到保证所有数据均被处理,一条都不漏。
                当spout触发fail动作时,不会自动重发失败的tuple,需要spout自己重新获取数据,手动重新再发送一次

开发经验总结
https://github.com/alibaba/jstorm/wiki/%E5%BC%80%E5%8F%91%E7%BB%8F%E9%AA%8C%E6%80%BB%E7%BB%93
在架构上,推荐 “消息中间件 + jstorm + 外部存储” 3架马车式架构
        JStorm从消息中间件中取出数据,计算出结果,存储到外部存储上
        通常消息中间件推荐使用RocketMQ,Kafka
        外部存储推荐使用HBase,Mysql
        该架构,非常方便JStorm程序进行重启(如因为增加业务升级程序)

非事务环境中,尽量使用IBasicBolt
对于MetaQ 和 Kafka,
        拉取的频率不要太小,低于100ms时,容易造成MetaQ/Kafka 空转次数偏多
        一次获取数据Block大小推荐是2M或1M,太大内存GC压力比较大,太小效率比较低。
推荐一个worker运行2个task
使用zookeeper时, 建议使用curator,但不要使用过高的curator版本.Curator是Netflix开源的一套ZooKeeper客户端框架. Netflix在使用ZooKeeper的过程中发现ZooKeeper自带的客户端太底层, 应用方在使用的时候需要自己处理很多事情, 于是在它的基础上包装了一下, 提供了一套更好用的客户端框架.

如果直接实现IRichBolt
emit(String streamId, Tuple anchor, List tuple)   后续component会向acker发送ack响应
emit(String streamId, List tuple)后续component不会向acker发送ack响应
IBasicBolt 都会自动使用第一个接口
IBatchBolt 都会自动使用第二个接口
推荐使用IBasicBolt

运维经验总结
https://github.com/alibaba/jstorm/wiki/%E8%BF%90%E7%BB%B4%E7%BB%8F%E9%AA%8C%E6%80%BB%E7%BB%93

常见问题
https://github.com/alibaba/jstorm/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值