storm笔记

storm资料:
http://ifeve.com/apache-storm/

spark streaming通过write ahead logs机制以及检查点来容错和数据无丢失;
https://www.cnblogs.com/gaoxing/p/4847119.html
https://blog.csdn.net/qq_21234493/article/details/51386306 !!!(Exactly Once事务依赖于WAL和checkpoint?)
https://blog.csdn.net/Habren/article/details/78659668 (kafka的Exactly Once事务机制)

Storm的事务机制要比SparkStreaming的事务机制要完善;

write ahead logs即WAL,是一种常用的容错机制,很多框架使用该机制(包括hbase),用于保证ACID,提供redo and undo依据;
https://en.wikipedia.org/wiki/Write-ahead_logging

容错、事务、一次仅且一次的区别?
容错应该包括了一次仅且一次;容错保证当节点或任务失败,系统还能消费数据一次仅且一次,没有数据丢失;
WAL也是一种容错机制,保证数据零丢失;
容错更基础,事务更高层?
任意流处理系统都有事务和容错机制;

spark streaming有没有事务?
Spark Streaming的事务处理和数据库的事务有所不同,主要关注某个Job执行的一致性;
Spark Streaming的事务叫Exactly Once(即一次仅且一次),但貌似也是容错。。。

spark streaming事务和数据源(如kafka)紧密相关,需要结合kafka来说明(比如从SparkStreaming来看是成功的,但Kafka认为是失败的);
当然kafka本身也存在事务的问题,即也是如何保证消费一次仅且一次,所以必须结合才能说明;
kafka的事务是比较明显的,提供了直接的API,如beginTransaction()


StreamGrouping定义了消息分发策略,定义了Bolt节点以何种方式接收数据,如Shuffle Grouping(随机分组),Fields Grouping(字段分组),
AllGrouping(全部分组),GlobalGrouping(全局分组),None Grouping(无分组),Direct Grouping(直接分组);

Topology是由消息分组方式连接起来的Spout和Bolt节点网络;
(Topology类似DAG还是job?;Bolt类似RDD还是算子?)
(Spout也可以有多个!Spout和Bolt可以设置不同的并行度)

Storm集群中存在两种类型的节点:运行Nimbus服务的主节点和运行Supervisor服务的工作节点;
Nimbus用于分配代码、布置任务及检测故障;Supervisor用于监听工作、开始并终止工作进程;
Worker由Supervisor负责启动;一个Worker中可以有多个Executor线程;每个Executor中又包含一个或多个Task;
Nimbus和Supervisor的元数据存储在zk,由zk协调管理;
(元数据可用于恢复集群,zk中的/storm)
(当Nimbus死掉,其他节点可正常工作,但不能提交Topology)

(storm也有Worker、Executor和Task,和spark类似,但没有stage?)
(Nimbus类似driver?)
(Supervisor和Worker是否有些重复?Supervisor类似yarn的NM?)

Supervisor会从LocalState获取Worker心跳信息,若没有,Supervisor就会杀掉Worker;
(注意LocalState是本地文件,而不是zk中)
(Worker与Supervisor属于不同的进程)
(Supervisor通过配置supervisor.slots.ports指定Worker个数以及端口;)

Nimbus、Supervisor、Worker和Executor都会和zk交互!
每个Supervisor在zk都有对应的znode,是Nimbus分配任务的依据;(也是storm容错能力的体现)
Supervisor会从zk获取Nimbus分配给它的任务;
Worker会注册自己到zk,会从zk中获取分配给它的任务并执行;

Nimbus、Supervisor以及Worker两两之间都需要维持心跳信息;
(也就是说,Nimbus从某个角度来说,直接管理了Worker,而不必通过Supervisor)

Tuple是Storm中的主要数据结构,类似spark的RDD(或RDD的每个分区的每个记录)?每一条消息都是一个Tuple对象;
(Tuple会指定接收task的id)
(spout的emitDirect也可以指定taskId和streamId,即直接分组)
(Tuple也要求不可变?)

Ack、Fail和Anchor操作是什么?
Storm利用Acker Bolt节点跟踪消息;当Spout发送出去的消息以及这些消息所衍生出来的消息均被成功处理后,Spout将收到对应于该消息的Ack;
Acker Bolt属于系统级的组件,它们由系统创建;

在Storm中,流(stream)是一个非常重要的概念。流可以理解为消息的渠道;
GlobalStreamld包括了componentId和streamld;

在进程之间,Storm采用ZMQ进行通信;(ZeroMQ封装了Socket;ZeroMQ不是传统意义上的MQ;storm0.9开始默认使用Netty代替ZMQ?)
https://blog.csdn.net/tototuzuoquan/article/details/73551560
LocalCluster模式下,系统默认(storm.local.mode.zmq为false)采用一个进程模拟Storm 集群环境,Nimbus, Supervisor, Worker等都是该进程中的一个线程;

Storm提供了3种Scheduler分别是EvenScheduler、DefaultScheduler和IsolationScheduler,都实现IScheduler接口,负责为Topology分配资源;

storm的slot对应worker,一个worker消耗一个slot;(而不是一个Executor一个slot)
https://blog.csdn.net/lunan/article/details/81188123

Supervisor可理解为单机任务调度器,它负责监听Nimbus的任务调度,同时监控Worker的运行状态;
Supervisor中有3个线程,一个计时器线程(负责维持心跳)以及两个事件线程(一个负责与Nimbus同步任务,另一个负责根据任务变化同步管理Worker进程);

Worker是实际执行Topology的进程,它由Supervisor启动,并根据zk启动Executor执行任务;

Executor是Storm的核心运行单位,一个Executor实际上就是一个线程,一个Executor又可以含有多个Task;
Executor实际上包含了[startTaskld, endTaskld]区间 内所有的Task;

storm通过滑动窗口(rolling-window)来更新统计信息,即stormUI;

事务Topology分为基本事务Topology和模糊事务Topology;
事务是按照顺序提交的,利于去重;
非事务Topology的spout为IRichSpout;(不保证可靠传输,消息可能会丢失)
事务Topology的spout为ITransactionalSpout;(分为基本事务和模糊事务,后者对应的数据在重传时可能改变,如从kafka获取数据)

DRPC是英文Distributed Remote Procedure Call的缩写,表示分布式的远程方法调用;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值