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简介



0 0
原创粉丝点击