大数据-Storm流式框架(一)

news2024/11/14 3:29:46

一、storm介绍

  • Storm是个实时的分布式以及具备高容错的计算系统
    • Storm进程常驻内存(worker,supervisor,nimbus,ui,logviewer。。。)
    • Storm数据不经过磁盘,在内存中处理
  • Twitter开源的分布式实时大数据处理框架,最早开源于github
  • 2013年,Storm进入Apache社区进行孵化
  • 2014年9月,晋级成为了Apache顶级项目
  • 官网 http://storm.apache.org/
  • 国内外各大网站使用,例如雅虎、阿里、百度

1、架构:

  • Nimbus                 1      主             运行于一台主机
  • Supervisor            N      从             运行于多台主机
  • Worker                  M     进程          运行于一个Supervisor中

map     reduce

2、编程模型

  • DAG (有向无环图,Topology) 拓扑
  • Spout     水龙头
  • Bolt        闪电
  • 数据流向

3、序列化

kryo  序列化,高效、数据量小

4、数据传输

  • ZMQ(twitter早期产品)
  • ZeroMQ 开源的消息传递框架,并不是一个MessageQueue
  • Netty
  • Netty是基于NIO的网络框架,更加高效。(之所以Storm 0.9版本之后使用Netty,是因为ZMQ的license和Storm的license不兼容。)

5、高可靠性

  • 异常处理
  • 消息可靠性保障机制

6、可维护性

StormUI图形化监控接口

二、Storm的应用场景

1、流式处理(异步 与 同步)

客户端提交数据进行结算,并不会等待数据计算结果

2、逐条处理

例:ETL(数据清洗)extracted transform load

3、统计分析

例:计算PV、UV、访问热点 以及 某些数据的聚合、加和、平均等

客户端提交数据之后,计算完成结果存储到Redis、HBase、MySQL或者其他MQ当中,客户端并不关心最终结果是多少。

4、实时请求应答服务(同步

客户端提交数据请求之后,立刻取得计算结果并返回给客户端

5、Drpc

同步,storm的功能,分布式RPC

6、实时请求处理

例:图片特征提取

三、Storm比较及计算模型

1、storm和mapreduce的对比

Storm:进程、线程常驻内存运行,数据不进入磁盘,数据通过网络传递。

MapReduce:为TB、PB级别数据设计的批处理计算框架。

2、storm和spark streaming

  1. Storm:纯流式处理 基于记录
    1. 专门为流式处理设计
    2. 数据传输模式更为简单,很多地方也更为高效
    3. 并不是不能做批处理,它也可以来做微批处理,来提高吞吐
  2. Spark Streaming:微批处理
    1. RDD做的很小来用小的批处理来接近流式处理
    2. 基于内存和DAG可以把处理任务做的很快

3、storm计算模型

  1. Topology – DAG有向无环图的实现

    1. 对于Storm实时计算逻辑的封装
    2. 即,由一系列通过数据流相互关联的Spout、Bolt所组成的拓扑结构
    3. 生命周期:此拓扑只要启动就会一直在集群中运行,直到手动将其kill,否则不会终止
    4. 区别于MapReduce当中的Job,MR当中的Job在计算执行完成就会终止
  2. Tuple – 元组

    1. Stream中最小数据组成单元
    2. 看成map集合,类(属性和值)User username, password, birthday
    3. 类似于struct
  3. Stream – 数据流

    1. 从Spout中源源不断传递数据给Bolt、以及上一个Bolt传递数据给下一个Bolt,所形成的这些数据通道即叫做Stream
    2. Stream声明时需给其指定一个Id(默认为default
    3. 实际开发场景中,多使用单一数据流,此时不需要单独指定StreamId
  4. Spout – 数据源

    1. 拓扑中数据流的来源。一般会从指定外部的数据源读取元组(Tuple)发送到拓扑(Topology)中: 消息队列
    2. 一个Spout可以发送多个数据流(Stream)
    3. 可先通过OutputFieldsDeclarer中的declare方法声明定义的不同数据流,发送数据时通过SpoutOutputCollector中的emit方法指定数据流Id(streamId)参数将数据发送出去
    4. Spout中最核心的方法是nextTuple,该方法会被Storm线程不断调用、主动从数据源拉取数据,再通过emit方法将数据生成元组(Tuple)发送给之后的Bolt计算
  5. Bolt – 数据流处理组件

    1. 拓扑中数据处理均由Bolt完成。对于简单的任务或者数据流转换,单个Bolt可以简单实现;更加复杂场景往往需要多个Bolt分多个步骤完成
    2. 一个Bolt可以发送多个数据流(Stream)
    3. 可先通过OutputFieldsDeclarer中的declare方法声明定义的不同数据流,发送数据时通过OutputCollector中的emit方法指定数据流Id(streamId)参数将数据发送出去
    4. Bolt中最核心的方法是execute方法,该方法负责接收到一个元组(Tuple)数据、真正实现核心的业务逻辑

Stream Grouping – 数据流分组(即数据分发策略)

  • Shuffle grouping(随机分组):这种方式会随机分发tuple给bolt的各个task,每个bolt实例接收到的相同数量的tuple。
  • Fields grouping(按字段分组):根据指定字段的值进行分组。比如说,一个数据流根据“word”字段进行分组,所有具有相同“word”字段值的tuple会路由到同一个bolt的task中。
  • All grouping(全复制分组):将所有的tuple复制后分发给所有bolt task。每个订阅数据流的task都会接收到tuple的拷贝。
  • Globle grouping(全局分组):这种分组方式将所有的tuples路由到唯一一个task上。Storm按照最小的task ID来选取接收数据的task
  • None grouping(不分组):在功能上和随机分组相同,是为将来预留的。
  • Direct grouping(指向型分组):数据源会调用emitDirect()方法来判断一个tuple应该由哪个Storm组件来接收。只能在声明了是指向型的数据流上使用。
  • Local or shuffle grouping(本地或随机分组):和随机分组类似,但是,会将tuple分发给同一个worker内的bolt task(如果worker内有接收数据的bolt task)。其他情况下,采用随机分组的方式。取决于topology的并发度,本地或随机分组可以减少网络传输,从而提高topology性能。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS基础框盒模型:打造炙手可热的网页布局!

🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 ⭐ 专栏简介 📘 文章引言 一、是…

老师们都在用的办公好物

现在还有老师不知道班级查询系统吗?各位老师们,向大家推荐一款超级实用的班级查询系统,帮你轻松管理学生信息,省去繁琐的手动操作,还能让学生们自主查询,简直是老师的福音! 如果你在编程方面感到有些吃力&…

vscode推送gitee方法

有一套uni-app代码需要修改,版本控制使用vscode的git功能,远程库在gitee上。 1、设置vscode中git.exe路径 由于git使用了绿色便携版(PortableGit-2.42.0.2-64-bit.7z.exe),vscode未识别到git安装路径,需要…

RTE2023大会来袭,声网宣布首创广播级4K超高清实时互动体验

10月24日,由声网和RTE开发者社区联合主办的RTE2023第九届实时互联网大会在北京举办,声网与众多RTE领域技术专家、产品精英、创业者、开发者一起,共同开启了以“智能高清”为主题的全新探讨。本届RTE大会将持续2天,开展1场主论坛及…

【路径规划】A*算法 Java实现

A*(A-Star)算法是一种广泛使用的寻路算法,尤其在计算机科学和人工智能领域。 算法思想 通过评估函数来引导搜索过程,从而找到从起始点到目标点的最短路径。评估函数通常包括两部分:一部分是已经走过的实际距离&#x…

「我在淘天做技术」双 11 背后的营销技术体系

作者:朱咏杰(小枫) 近期淘天集团秋季 2024 届校园招聘正式启动,预计将发放 2000 多个 offer,其中技术类岗位占比超过 50%。为了方便大家更真实地了解淘天技术的布局和现状,我们策划了「我在淘天做技术」系列,首次全面分…

科技资讯|苹果穿戴新专利,表带、服装等织物可变身柔性屏幕或扬声器

根据美国商标和专利局(USPTO)本周公示的清单,苹果公司获得了一项新的技术专利,可以在 Apple Watch 表带、服装等物品上,引入基于织物的柔性扬声器。 根据专利描述,通过在织物中嵌入声学组件(例…

Makefile总结

一、Makefile用法及变量(自定义变量、自动变量、隐含变量) 一、Makefile的重要性 1、编译文件 2、正常编译,文件多的时候操作麻烦 3、决定能不能完成大型工程 二、Makefile的概述 1、自动化编译-makefile 编译效率:make编译…

01.MySQL(SQL分类及使用)

注意:DML只是进行增删改,DQL才有查询 分类全称说明DDLData Definition Language数据定义语言,用来定义数据库对象(数据库,表,字段)DMLData Manipulation Language数据操作语言,用来…

vue3的getCurrentInstance获取组件实例踩坑记录

一、getCurrentInstance基本用法 我们可以通过 getCurrentInstance这个函数来返回当前组件的实例对象,也就是当前vue这个实例对象 Vue2中,可以通过this来获取当前组件实例; Vue3中,在setup中无法通过this获取组件实例,console.lo…

ElasticSearch中关于Nasted嵌套查询的介绍:生动案例,通俗易懂,彻底吸收

题注:随着对ES接触的越来越深入,发现此前了解的ES知识点有点单薄,特此寻来ES知识点汇总成的一个思维导图,全面了解自己掌握了哪些,未掌握哪些。此外,作者斌并没有足够的精力学习ES全部的知识点,…

1024程序员节,飞桨星河社区开发者们一起闯关升级、玩转Prompt应用赢大奖~

1024,是属于每一位程序员/程序媛的节日~ 今年,飞桨给星河社区的开发者们也准备了“超级码力 碰撞未来”系列活动,和大家沉浸式玩转闯关冒险。 冲榜单 零代码打造爆款Prompt应用 飞桨AI Studio星河社区上线新版文心一言专区,帮助…

代码随想录算法训练营第三十三天 | LeetCode 1005. K 次取反后最大化的数组和、134. 加油站、135. 分发糖果

代码随想录算法训练营第三十三天 | LeetCode 1005. K 次取反后最大化的数组和、134. 加油站、135. 分发糖果 文章链接:K次取反后最大化的数组和 加油站 分发糖果 视频链接:K次取反后最大化的数组和 加油站 分发糖果 目录 代…

STM TIM(二)输出比较

STM TIM(二)输出比较 输出比较简介 OC(Output Compare)输出比较 输出比较可以通过比较CNT(CNT计数器)与CCR寄存器(捕获/比较寄存器)值的关系,来对输出电平进行置1、置0…

Camtasia2024中文免费版电脑录屏软件

真的要被录屏软件给搞疯了,本来公司说要给新人做个培训视频,想着把视频录屏一下,然后简单的剪辑一下就可以了。可谁知道录屏软件坑这么多,弄来弄去头都秃了,不过在头秃了几天之后,终于让我发现了一个值得“…

如何理解Go言中的Context?

目前看过除了《go语言程序设计》以外最好的教程:https://www.practical-go-lessons.com 原文:https://www.practical-go-lessons.com/chap-37-context 你将在本章中学到什么? 1.什么是上下文? 2.什么是链表? 3.如何…

DAOS学习笔记及思考

DAOS带来的思考 根据daos docs的描述,DAOS是Intel基于NVMe全新设计开发并开源的异步对象存储,充分利用下一代NVMe技术的优势,对外提供KV存储接口,提供非阻塞事物I/O,端到端完整性,细粒度的数据控制&#x…

班级信息收集小程序

老师们!这里有一个超级实用的班级信息收集小程序,让你告别繁琐的手动记录成绩,轻松实现学生自助查询成绩!是不是很期待? 什么是成绩查询系统? 成绩查询系统是一种基于互联网和数据库技术的应用程序&#x…

基于springboot+vue实现MOBA类游戏攻略平台项目【项目源码+论文说明】

基于springbootvue实现MOBA类游戏攻略平台 摘要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生&a…