ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # 简介 ![](https://box.kancloud.cn/29c22826b3895a6775341b897db067fe_1576x736.png) # storm架构图 ![](https://box.kancloud.cn/a552d48b78cd8a67baa5a490ebfc805e_715x429.png) * Nimbus:负责资源分配和任务调度。(类似yarn的ResourceManager) * Supervisor:负责接受nimbus分配的任务,启动和停止属于自己管理的worker进程。(类似yarn的NodeManager) * Worker:运行具体处理组件逻辑的进程。启动多少个work是由用户提交的任务的配置决定的.supervisor启动多少个worker是由nuimbus镜像分配的 * Task:worker中每一个spout/bolt的线程称为一个task. 在storm0.8之后,task不再与物理线程对应,同一个spout/bolt的task可能会共享一个物理线程,该线程称为executor。 # storm编程模型 ![](https://box.kancloud.cn/8628704396ae78d7a470a5909b110956_690x510.png) ## 基本介绍 Topology: Storm中运行的一个实时应用程序,因为各个组件间的消息流动形成逻辑上的一个拓扑结构。 Spout:有三个方法(open, nextTuple, outputFields) 在一个topology中产生源数据流的组件。通常情况下spout会从外部数据源中读取数据,然后转换为topology内部的源数据。 Spout是一个主动的角色,其接口中有个nextTuple()函数,storm框架会不停地调用此函数,用户只要在其中生成源数据即可。 Bolt:有两个方法(execute(Tuple input), outputFields) 在一个topology中接受数据然后执行处理的组件。 Bolt可以执行过滤、函数操作、合并、写数据库等任何操作。Bolt是一个被动的角色, 其接口中有个execute(Tuple input)函数,在接受到消息后会调用此函数,用户可以在其中执行自己想要的操作。 Tuple: 一次消息传递的基本单元。 本来应该是一个key-value的map, 但是由于各个组件间传递的tuple的字段名称已经事先定义好, 所以tuple中只要按序填入各个value就行了,所以就是一个value list. 本质上是list数据结构 Stream: 源源不断传递的tuple就组成了stream。 # 如何实时的进行业务逻辑处理 在storm中每个业务逻辑都可以抽象成一个Bolt,复杂的业务可以用多个bolt进行连接 数据连接的方式,有几种策略可选(shuffleGrouping, local or shufflerGrouping, FiledGrouping) # 并行度 一个worker运用多少个线程(task),取决于所有组件的并行度/worker数 # 集群概念 nimbus(主节点,管理任务的分配) supervisor(每个物理服务器上的管理者,负责启动和停止自己的worker) worker(负责运行用户的topology程序),包含具体的线程(task) task:spouttask和bolt task