概念

分布式实时容错流处理系统,用于大规模数据的实时处理

工作原理:
类似一个数据处理工厂,其中有多条流水线,流水线上有多个处理单元,从外部对接数据源,然后发送到流水线,经过各处理单元加工后交给客户

特点:
简单的编程模型、伸缩性高、保证无数据丢失、异常健壮、容错性好、语言无关性

Strom 对于实时计算的意义,类似于 Hadoop 对于批处理的意义
Hadoop:MapReduce原语

应用场景:
实时数仓、实时监控、流数据分析、实时报表

典型架构:

数据产生(第三方、传感器、数据库日志、服务器日志)
流式数据处理(数据总线、实时计算、数据存储)
第三方应用

模型

Topology(计算拓扑):
一个拓扑是一个DAG图的计算,由 Spout 组件和 Bolt 组件 通过 Stream Groupings 进行连接

数据模型:Tuple Stream

Spout(数据源):可靠、不可靠两种模式
Bolt(消息处理单元):处理业务逻辑-过滤、聚合、查询数据库

消息分发机制:
Shuffle分组:随机分配模式(常用)
Fields分组:哈希分布模式(常用)
Globa分组:单选发送模式
All分组:全量发送模式

+使用方式:

1、构建 Topology DAG图
2、创建一个 Configuration,指定当前 Topology 的 worker 数量
3、提交任务-本地模式、集群模式

Spout 设计
extends BaseRichSpout
open、nextTuple、ack、fail、declareOutputFields 方法

open:初始化
nextTuple:数据源拉取数据,向下游输送
ack:可靠性消息传输
fail:传输失败时,重发
declareOutputFields:输出字段的名称

Bolt 设计
extends BaseBasicBolt
prepare、execute(emit发送队列)、declareOutputFields、cleanup

体系结构

Client     Master (nimbus)     UI
    Zookeeper Cluster
       Slaves(Worker-Task)

深度剖析

消息保证机制

At most Once:最多一次 关闭 ACK
At least Once:至少一次 启用 ACK ,实现可靠传输
Exactly Once:恰好一次 在 At least Once 的基础上进行状态存储,防止重复发送的数据被重复处理,Trident API 实现

并发机制

Worker(进程)、Executor(线程)、Task(Spout、Bolt)

通信机制

Worker 进程间的数据通信:Netty 基于 NIO 的网络架构,更加高效
Worker 内部的数据通信:Disruptor 实现“队列”功能,一种事件监听、消息处理机制;一边生产、一边消费
Topology 之间的通信:需要自己实现,kafka等

可靠性机制

Nimbus 故障
Nimbus故障,Supervisor还正常运行,对应的Worker也正常运行,只是Supervisor不能接受Nimbus新任务分配

Supervisor 故障
出故障的Supervisor对应的Worker也会故障,Nimbus监控,将对应的Worker重新分配到其他的Supervisor节点运行

Nimbus、Supervisor 故障
Nimbus被设计成HA的,利用主从结构保证主节点故障后,从节点一样能服务

Worker 故障
Supervisor重新创建Worker