【Storm实战】1.1 图解Storm的抽象概念

文章目录

  • 0. 前言
  • 1. Storm 中的抽象概念
    • 1.1 流 (Stream)
    • 1.2 拓扑 (Topology)
    • 1.3 Spout
    • 1.4 Bolt
    • 1.5 任务 (Task)
    • 1.6 工作者 (Worker)
  • 2. 形象的理解Storm的抽象概念
    • 2.1 流 (Stream)
    • 2.2 拓扑 (Topology)
    • 2.3 Spout
    • 2.4 Bolt
    • 2.5 任务 (Task)
    • 2.6 工作者 (Worker)
    • 场景1
    • 场景2
  • 3.参考文档

0. 前言

Storm 是一个分布式实时计算系统,用于处理大规模流式数据。它基于流处理模型,可以在一个分布式集群上运行,实时地处理和分析数据。Storm 提供了高可靠性、高吞吐量的数据流处理能力,可用于构建实时大数据分析应用和实时流处理任务。

在学习和使用 Storm 之前,我们需要对一些抽象概念有基本的了解。这些抽象概念包括流、拓扑、Spout、Bolt、任务和工作者。流是数据处理的基本单位,可以理解为一个无限的有序的元组序列。拓扑是一个由 Spout 和 Bolt 组成的数据流处理网络,定义了数据流从源头到最终目的地的路径。Spout 是数据源头,负责从外部源读取数据并封装成流。Bolt 是数据处理单元,负责接收输入流并进行处理。任务是在执行拓扑时运行在工作进程中的实际执行实例,每个 Spout 和 Bolt 组件可以配置为多个任务来实现并行处理。工作者是 Storm 运行在集群节点上的进程,可以执行一个或多个任务。

为了更好地理解这些抽象概念,可以将其类比为水力发电或水力传动系统。在这个类比中,流就像是河流,拓扑就像是水力发电系统,Spout 就像是水轮机,Bolt 就像是齿轮和发电机,任务就像是工人,工作者就像是工作站。

1. Storm 中的抽象概念

在学习Storm 之前,我们需要对Storm中的抽象概念有个基本的认识。方便我们后面写DEMO示例。
在这里插入图片描述
图片来源官方文档https://storm.apache.org/releases/2.6.0/Concepts.html

1.1 流 (Stream)

流是Storm中数据处理的基本概念。一个流可以理解为一个无限的、有序的元组(tuple)序列。在Storm中,元组是数据的基本单位,它是一个可以包含多种数据类型的键值对列表。流是可以在拓扑中的各个组件之间传输的。

1.2 拓扑 (Topology)

拓扑是Storm中最顶层的抽象,它定义了数据流从源头到最终目的地的整个路径。在Storm中,拓扑是由一系列的spouts和bolts组成的网络。Spouts用于生成数据流,而bolts则用于处理流经它们的数据。一旦提交到集群,拓扑将会不断运行,直到被显式地终止。

1.3 Spout

Spout是Storm拓扑中的数据源头,负责从外部源(如数据库、消息队列、文件系统等)读取数据并将其封装成流以供拓扑内的bolts处理。Spout可以发射多个流,并且能够对外部源的数据进行可靠或不可靠的读取。

1.4 Bolt

Bolt是拓扑中的数据处理单元,它负责接收来自spout或其他bolt的输入流,并进行处理,这些处理可以包括过滤、聚合、连接、写数据库等操作。处理完成后,bolt可以发射新的流到拓扑中的其他bolt进一步处理,或者将结果输出到外部系统。

1.5 任务 (Task)

在Storm中,任务是指在执行拓扑时,运行在工作进程中的实际执行实例。每个spout或bolt组件可以配置为多个任务来运行。任务数量决定了可用于处理数据的并行度。每个任务都会在集群某个节点的工作进程中的一个线程上执行。

1.6 工作者 (Worker)

工作者是Storm中运行在集群节点上的进程。工作者进程可以执行一个或多个任务。一个工作者进程只属于一个拓扑,但可以运行拓扑中多个任务(即,可以运行多个spout和bolt的实例)。通过分配更多的工作者进程,可以提高拓扑的并发度和处理能力。

以上概念构成了Storm的核心架构,理解它们可以帮助把握Storm的数据流处理和分布式计算模型。
在这里插入图片描述

2. 形象的理解Storm的抽象概念

可能很多同学看完上面的概念和图,也感觉似懂非懂的。好吧,那么我们通俗的利用水力发电或者水力传动系统这种常见的模型,来理解Storm 抽象概念的设计思想。

我搞了一个图来类比解释Storm的概念,我相信大家应该会有一定的收获。
在这里插入图片描述

通过这个水力发电系统的比喻,我相信大家一定可以直观地理解Storm中的流、拓扑、Spout、Bolt、任务和工作者是如何协同工作处理数据的。

2.1 流 (Stream)

想象一条河流,河流不断地流动,携带着水分子(这里的水分子可以类比为数据的元组)。流在Storm中就像这条河流,是连续不断地数据(元组)序列。

2.2 拓扑 (Topology)

把拓扑想象成是一个水力发电系统。这个系统由水轮机(Spouts)和一系列的齿轮与发电机(Bolts)组成。水轮机从河流(Stream)中捕捉水流(数据流),然后通过一系列的齿轮(处理步骤)传输至发电机,最终产生电力(处理后的数据)。

2.3 Spout

Spout可以视为水力发电系统中的水轮机,它不断从河流(外部数据源)中截取水流,并开始推动整个系统的运作。在Storm中,Spout负责不断地捕获外部数据,并将其封装成流,供后续的Bolts处理。

2.4 Bolt

Bolt就像是沿着水轮机的齿轮和发动机,它们接收从水轮机传来的动力(元组),执行各种操作(处理数据),比如研磨谷物或发电。在Storm中,Bolts可以执行多种数据转换操作,如过滤、聚合、写入数据库等。

2.5 任务 (Task)

任务可以想象成是工人在水轮机和发电机之间的每个环节上工作。如果这个系统需要处理更多的水流(数据),我们就需要更多的工人(任务)。在Storm中,增加任务的数量可以提高系统处理数据的能力。

2.6 工作者 (Worker)

工作者可以看作是整个水力发电系统的工作站或工厂。在这些工作站里,每个工人(任务)负责操作一套齿轮与发动机(执行Spout和Bolt的逻辑)。工厂越多,系统的处理能力就越强。在Storm中,我们可以增加工作者(进程)的数量来扩展拓扑的处理能力。

场景1

基于水轮发电机的思想。假设水流过发电机Bolt 后,此处的水流还具有动力,那么我们是不是可以再串行接一个齿轮和管道,用来供热(处理数据)。这时候我们上面的处理结构就会变成。如下
在这里插入图片描述

场景2

基于水轮发电机的思想。假设水流过发电机Bolt 后,此处的水流还具有动力,那么我们是不是可以再串行接一个齿轮和水磨,用来研磨谷物(处理数据),研磨完我们依然可以将水流分子(tuple)作为热源传递给供热管道(Bolt)进行供热处理。这时候我们上面的处理结构就会变成。如下
在这里插入图片描述

3.参考文档

storm 官方文档 https://storm.apache.org/releases/current/index.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/231398.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql 将表里的两列值数据互换

示例: 需要将表中的 两个订单号互换 方案: 将同一张表数据做 临时数据 和主表 做数据交互 。 update 表 as main, 表 as temp set main.bill_no temp.track_bill_no, main.track_bill_no temp.bill_no where main.id temp.id…

实时记录和查看Apache 日志

Apache 是一个开源的、广泛使用的、跨平台的 Web 服务器,保护 Apache Web 服务器平台在很大程度上取决于监控其上发生的活动和事件,监视 Apache Web 服务器的最佳方法之一是收集和分析其访问日志文件。 Apache 访问日志提供了有关用户如何与您的网站交互…

HarmonyOS应用开发之DevEco Studio安装与初次使用

1、DevEco Studio介绍 DevEco Studio是基于IntelliJ IDEA Community开源版本打造,面向华为终端全场景多设备的一站式集成开发环境(IDE),为开发者提供工程模板创建、开发、编译、调试、发布等E2E的HarmonyOS应用/服务的开发工具。…

如何通过HACS+Cpolar实现远程控制米家和HomeKit等智能家居设备

文章目录 基本条件一、下载HACS源码二、添加HACS集成三、绑定米家设备 ​ 上文介绍了如何实现群晖Docker部署HomeAssistant,通过内网穿透在户外控制家庭中枢。本文将介绍如何安装HACS插件商店,将米家,果家设备接入 Home Assistant。 基本条件…

在Google Colab中调用Gemini的API实现智能问答

一、引言 Google终于放出大招,在2023年12月6日正式推出规模最大、功能最强大的人工智能模型Gemini,对标ChatGPT,甚至有要赶超ChatGPT-4.0的节奏。 相比之前的Bard,Gemini的文本理解能力、图片识别能力和语义抽取能力大大增强&am…

Spring见解3 AOP

4.Spring AOP 4.1.为什么要学习AOP? 案例:有一个接口Service有一个insert方法,在insert被调用时打印调用前的毫秒数与调用后的毫秒数,其实现为: public class UserServiceImpl implements UserService {private UserDao userDao…

新年福利|这款价值数万的报表工具永久免费了

随着数据资产的价值逐渐凸显,越来越多的企业会希望采用报表工具来处理数据分析,了解业务经营状况,从而辅助经营决策。不过,企业在选型报表工具的时候经常会遇到以下几个问题: 各个报表工具有很多功能和特性&#xff0c…

金蝶云星空数据库根据仓库和仓位查询内码(SQL脚本)

SELECT a.仓库ID,a.仓库名称,d.仓位ID,d.仓位名称,c.内码FROM ( SELECT a.FSTOCKID 仓库ID,b.FNAME 仓库名称FROM T_BD_STOCK aINNER JOIN T_BD_STOCK_L bON a.FSTOCKID b.FSTOCKID --仓库列表) aLEFT JOIN ( SELECT FENTRYID 仓位值表FENTRYID,FSTOC…

C++ 释放指针

在C中,释放指针通常使用delete或delete[]操作符; 如果指针指向的是单个对象,可以使用delete操作符进行释放; 在释放完内存后,最好将指针置为nullptr,以避免出现悬空指针(dangling pointer&#…

软件测试基础理论学习-软件测试方法论

软件测试方法论 软件测试的方法应该建立在不同的软件测试类型上,不同的测试类型会存在不同的方法。本文以软件测试中常见的黑盒测试为例,简述常见软件测试方法。 黑盒测试用例设计方法包括等价类划分法、边界值分析法、因果图法、判定表驱动法、正交试…

一、Qt介绍

一、Qt介绍 1、介绍 Qt是一套程序开发库,但是与MFC(依赖于Windows API)不同,Qt是跨平台开发库。 Qt获取:[Qt下载地址](https://download.qt.io/archive/qt/)2、Qt安装 QtMinGWSourcesQt ChartsQt Data Visualizatio…

c语言题目之统计二级制数中1的个数

文章目录 题目一、方法1二、方法2三,方法3总结 题目 统计二进制数中1的个数 输入一行,输出一行 输入: 输入一个整数 输出: 输出存储在内存中二进制的1的个数 一、方法1 之前的文章中,小编写了有关于内存在二进制中的存…

cissp 第10章 : 物理安全要求

10.1 站点与设施设计的安全原则 物理控制是安全防护的第一条防线,而人员是最后一道防线。 10.1.1 安全设施计划 安全设施计划通过关键路径分析完成。 关键路径分析用于找出关键应用、流程、运营以及所有必要支撑元索间的关系。 技术融合指的是各种技术、解决方案…

MongoDB 面试题

MongoDB 面试题 1. 什么是MongoDB? MongoDB是一种非关系型数据库,被广泛用于大型数据存储和分布式系统的构建。MongoDB支持的数据模型比传统的关系型数据库更加灵活,支持动态查询和索引,也支持BSON格式的数据存储,这…

ARCGIS PRO SDK Geoprocessing

调用原型:Dim gpResult AS IGPResult await Geoprocessing.ExecuteToolAsync(调用工具名称, GPValue数组, environment, null, null, executeFlags) 一、调用工具名称:地理处理工具名称。如面转线:management.PolygonToLine,而非…

解析为什么Go语言要使用[]rune而不是string来表示中文字符

众所周知,Go语言中有以下这些数据类型。但rune32这个go语言特有的数据类型,比较有意思却经常遭到忽视。所以今天探索学习一下这个数据类型的功能、用法。 Go基本数据类型 布尔:bool 字符串:string 整数: int int8 …

群晖Docker部署HomeAssistant容器结合内网穿透远程控制家中智能设备

目录 一、下载HomeAssistant镜像 二、内网穿透HomeAssistant,实现异地控制智能家居 三、使用固定域名访问HomeAssistant 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。 点击跳转到网站 Ho…

Ubuntu20.04 上启用 VCAN 用作本地调试

目录 一、启用本机的 VCAN​ 编辑 1.1 加载本机的 vcan 1.2 添加本机的 vcan0 1.3 查看添加的 vcan0 1.4 开启本机的 vcan0 1.5 关闭本机的 vcan0 1.6 删除本机的 vcan0 二、测试本机的 VCAN 2.1 CAN 发送数据 代码 2.2 CAN 接收数据 代码 2.3 CMakeLists.…

缺失的第一个正数(LeetCode 41)

文章目录 1.问题描述2.难度等级3.热门指数4.解题思路4.1 暴力4.2 排序4.3 哈希表4.4 空间复杂度为 O(1) 的哈希表4.5 置换 参考文献 1.问题描述 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级…

CSS基本知识

文章目录 1. CSS 是什么2. 基本语法规范3. 引入方式3.1 内部样式表3.2 行内样式表3.3 外部样式 4. 选择器4.1 选择器的功能4.2 选择器的种类4.3 基础选择器4.3.1 标签选择器4.3.2 类选择器4.3.3 id 选择器4.3.4 通配符选择器 4.4 复合选择器4.4.1 后代选择器4.4.2 伪类选择器 5…