2021SC@SDUSC
storm代码阅读(一)
2021SC@SDUSC
Strom介绍
Apache Storm是一个分布式实时大数据处理系统。Storm设计用于在容错和水平可扩展方法中处理大量数据。它是一个流数据框架,具有最高的摄取率。虽然Storm是无状态的,它通过Apache ZooKeeper管理分布式环境和集群状态。它很简单,您可以并行地对实时数据执行各种操作。
Apache Storm继续成为实时数据分析的领导者。Storm易于设置和操作,并且它保证每个消息将通过拓扑至少处理一次。
准备工作
storm网址: link.
源码链接: link.
storm核心组件
topology 是storm中运行的一个实时应用程序的名称(拓扑),因为各个组件间的消息流动而形成逻辑上的拓扑结构。
stream 表示数据的流向,流式Storm的核心抽象。一个流是一个无界Tuple序列,Tuple可以包含整性、长整型、短整型、字节、字符、双精度数、浮点数、布尔值和字节数组。用户可以通过定义序列化器,在本机Tuple使用自定义类型;
spout 在一个topology中获取源数据流的组件;通常情况下spout会从外部数据源读取数据,然后转换为topology内部的源数据;
bolt 接收数据,然后执行处理的组件,用户可以其中执行自己想要的操作(Bolt可以完成过滤、业务处理、连接运算、连接访问数据库等业务);
stream grouping(流分组) 流分组是拓扑定义的一部分,为每个Bolt指定应该接收哪个流作为输入。在bolt的任务中定义流应该如何分区,Storm有7个内置的流分组接口(随机分组(Shuffle grouping)、字段分组(Fields grouping)、全部分组(All grouping)、全局分组(Global grouping)、无分组(None grouping)、直接分组(Direct grouping)、本地或随机分组(Local or shuffle grouping))
Worker(工作进程)是Spout/Bolt中运行具体处理逻辑的进程。Topology跨一个或多个Worker节点的进程执行,每个Worker节点的进程是一个物理的JVM和Topology执行所有任务的子集。
Task(任务) Worker中每一个Spout/Bolt的线程称为一个任务。每个spout或bolt在集群执行许多任务,每个任务对应一个线程的执行,流分组定义如何从一个任务集到另一个任务集发送Tuple。可通过TopologyBuilder类的setSoupt()和setBolt()方法来设置每个spout或bolt的并行度(parallelism)。
Executor(执行器)在Storm 0.8以后,Task不再与物理线程对应,同一个Spout/Bolt的Task可能会共享一个物理线程,该线程称为Executor(执行器)。
Storm集群中有两类节点:主控节点(Master Node)和工作节点(Worker Node)。其中,主控节点只有一个,而工作节点可以有多个。
主控节点运行的一个称为Nimbus的守护进程,负责在集群中分发代码,对节点分配任务,并监控主机故障。
每个工作节点运行一个称为Supervisor的守护进程,Supervisor监听其主机上已经分配的主机的作业,启动和停止Nimbus已经分配的工作进程。
核心代码确定
核心代码分布
内容与分工
主要研读内容:Nimbus\Bolt\Zookeeper\Topology\Excutor\Supervisor\Woker\Task\Spout\Tuple\Stream groupings。
我负责其中的Topology与Task部分。其中Stream groupings将由小组成员共同完成阅读分析。