jstorm 基础
来源:互联网 发布:b2c商城源码 编辑:程序博客网 时间:2024/06/13 23:10
jstorm 角色概念:
1. spout:源头。
2. bolt:处理器。
3. topology:由处理器、源头组成的拓扑网络(每条边就是一个订阅关系)。
4. tuple:数据。
5. worker:执行进程。
6. task:执行线程。
7. nimbus:分发代码、任务,监控集群运行状态
8. supervisor:监听 nimbus 的指令,接收分发代码和任务并执行
storm.yaml常用配置
1. storm.zookeeper.servers:zookeeper 集群地址。
2. storm.zookeeper.root:zookeeper 中 storm 的根目录位置。
3. storm.local.dir:用来存放配置文件、JAR 等。
4. storm.messaging.netty.transfer.async.batch:在使用 Netty 的时候,设
置是否一个 batch 中会有多个消息。
5. java.library.path:本地库的加载地址,比如 zeromq、jzmq 等。
6. supervisor.slots.ports:supervisor 节点上的 worker 使用的端口号列表。
7. supervisor.enable.cgroup:是否使用 cgroups 来做资源隔离。
8. topology.buffer.size.limited:是否限制内存,如果不限制将使用 LinkedBlockingDeque。
9. topology.performance.metrics:是否开启监控。
10. topology.alimonitor.metrics.post:是否将监控数据发送给 AliMonitor。
11. topology.enable.classloader:默认禁用了用户自定义的类加载器。
12. worker.memory.size:worker 的内存大小。
在把配置搞正确之后,就可以用 bin 中的脚本来启动节点服务了:
sudo ./jstorm nimbus sudo ./jstorm supervisor
jstorm架构
结构和 hadoop 的很像,整体看来如下(Nimbus 负责控制、提交任务,Supervisor 负责执行任务):
为了做实时计算你需要建立 topology,由计算节点组成的图:
在 JStorm 上的 topology 的生命周期如下:
1. 上传代码并做校验(/nimbus/inbox);
2. 建立本地目录(/stormdist/topology-id/);
3. 建立 zookeeper 上的心跳目录;
4. 计算 topology 的工作量(parallelism hint),分配 task-id 并写入 zookeeper;
5. 把 task 分配给 supervisor 执行;
6. 在 supervisor 中定时检查是否有新的 task,下载新代码、删除老代码,剩下的
工作交个小弟 worker;
7. 在 worker 中把 task 拿到,看里面有哪些 spout/Bolt,然后计算需要给哪些 t
ask 发消息并建立连接;
8. 在 nimbus 将 topology 终止的时候会将 zookeeper 上的相关信息删除;
在集群运行的时候要明白 Worker、Executor、Task 的概念,当然消息被传递的时候 其实发起者、接收者都是 Task,而真正执行的是 Executor(可以理解为一个线程), 由它来轮询其中的 Spout/Bolt:
在 jstorm 中通过 ack 机制来保证数据至少被处理一次,简单来说下 ack:
在消息发、收的过程中会形成一棵树状的结构,在一个消息收的时候发一个验证消 息,发的时候也发一个验证消息,那么总体上每个消息出现两次。那么 ack 机制就 是将每个消息的随机生成的 ID 进行异或,如果在某一时刻结果为 0,那就说明处 理成功。
程序开发基础
所谓普通模式是指不去使用 JStorm 为开发人员提供的高级抽象,用其提供的原生的接 口进行开发,主要涉及到的接口有:
1. ISpout:数据源头接口,jstorm 会不断调用 nextTuple 方法来获取数据并发射
出去。
1. open:在 worker 中初始化该 ISpout 时调用,一般用来设置一些属性:
比如从 spring 容器中获取对应的 Bean。
2. close:和 open 相对应(在要关闭的时候调用)。
3. activate:从非活动状态变为活动状态时调用。
4. deactivate:和 activate 相对应(从活动状态变为非活动状态时调用)。
5. nextTuple: JStorm 希望在每次调用该方法的时候, 它会通过 collector.
emit 发射一个 tuple。
6. ack: jstorm 发现 msgId 对应的 tuple 被成功地完整消费会调用该方法。
7. fail:和 ack 相对应(jstorm 发现某个 tuple 在某个环节失败了)。
storm 入门系列
http://www.cnblogs.com/qwj-sysu/p/5166859.html
JStorm之Nimbus简介
- jstorm 基础
- Jstorm基础架构
- jstorm
- jstorm
- Jstorm
- Jstorm
- JStorm
- storm、jstorm 调研系列(一)----jstorm介绍以及与spark的比较,外加一些基础概念
- jstorm基本概念
- jstorm部署
- JStorm安装
- 阿里JStorm
- JStorm介绍
- java-jstorm
- jstorm学习
- JStorm介绍
- JStorm介绍
- JStorm介绍
- 使用IntelliJ IDEA12创建Maven多模块项目
- ijkplayer需支持的系统库
- 支持全平台的服务器监控报警系统 Shinken
- 利用maven的Profile构建不同环境的部署包,选择不同properties构建不同的环境
- spring boot 报错:Exception in thread "main" java.lang.NoSuchMethodError 根源在pom.xml引用的包中的JAR有冲突
- jstorm 基础
- C#中使用ListView动态添加数据不闪烁
- 赛码网,股神问题,用C语言自己实现的一个程序,仅供参考
- android 仿淘宝物流时间轴控件
- 求两个数的最大公约数(普通方法和迭代法)
- 关于Socket连接与HTTP连接的干货
- Java面试题整理(题目内容非原创)
- grails上传图片
- SSM框架整合