Storm简介

RK3588 MPP视频编码实战:从环境搭建到高效封装 本文详细介绍了在RK3588平台上利用MPP(Media Process Platform)进行硬件视频编码的完整实战流程。从MPP库的环境搭建、编译安装,到核心编码参数(如码率控制、GOP、图像对齐)的深入解析,并提供了一个可复用的C++编码器类封装方案,帮助开发者快速实现高效的H.264/H.265视频编码,显著降低CPU占用。 阅读详情

 

  • 场景

    伴随着信息科技日新月异的发展,信息呈现出爆发式的膨胀,人们获取信息的途径也更加多样、更加便捷,同时对于信息的时效性要求也越来越高。举个搜索场景中的例子,当一个卖家发布了一条宝贝信息时,他希望的当然是这个宝贝马上就可以被卖家搜索出来、点击、购买啦,相反,如果这个宝贝要等到第二天或者更久才可以被搜出来,估计这个大哥就要骂娘了。再举一个推荐的例子,如果用户昨天在淘宝上买了一双袜子,今天想买一副泳镜去游泳,但是却发现系统在不遗余力地给他推荐袜子、鞋子,根本对他今天寻找泳镜的行为视而不见,估计这哥们心里就会想推荐你妹呀。其实稍微了解点背景知识的码农们都知道,这是因为后台系统做的是每天一次的全量处理,而且大多是在夜深人静之时做的,那么你今天白天做的事情当然要明天才能反映出来啦。

    • 实现一个实时计算系统

    全量数据处理使用的大多是鼎鼎大名的hadoop或者hive,作为一个批处理系统,hadoop以其吞吐量大、自动容错等优点,在海量数据处理上得到了广泛的使用。但是,hadoop不擅长实时计算,因为它天然就是为批处理而生的,这也是业界一致的共识。否则最近这两年也不会有s4,storm,puma这些实时计算系统如雨后春笋般冒出来啦。先抛开s4,storm,puma这些系统不谈,我们首先来看一下,如果让我们自己设计一个实时计算系统,我们要解决哪些问题。

    1.  低延迟。都说了是实时计算系统了,延迟是一定要低的。

    2.  高性能。性能不高就是浪费机器,浪费机器是要受批评的哦。

    3.  分布式。系统都是为应用场景而生的,如果你的应用场景、你的数据和计算单机就能搞定,那么不用考虑这些复杂的问题了。我们所说的是单机搞不定的情况。

    4.  可扩展。伴随着业务的发展,我们的数据量、计算量可能会越来越大,所以希望这个系统是可扩展的。

    5.  容错。这是分布式系统中通用问题。一个节点挂了不能影响我的应用。

    好,如果仅仅需要解决这5个问题,可能会有无数种方案,而且各有千秋,随便举一种方案,使用消息队列+分布在各个机器上的工作进程就ok啦。我们再继续往下看。

    1.  容易在上面开发应用程序。亲,你设计的系统需要应用程序开发人员考虑各个处理组件的分布、消息的传递吗?如果是,那有点麻烦啊,开发人员可能会用不好,也不会想去用。

    2.  消息不丢失。用户发布的一个宝贝消息不能在实时处理的时候给丢了,对吧?更严格一点,如果是一个精确数据统计的应用,那么它处理的消息要不多不少才行。这个要求有点高哦。

    3.  消息严格有序。有些消息之间是有强相关性的,比如同一个宝贝的更新和删除操作消息,如果处理时搞乱顺序完全是不一样的效果了。

  • Storm是什么

    如果只用一句话来描述storm的话,可能会是这样:分布式实时计算系统。按照storm作者的说法,storm对于实时计算的意义类似于hadoop对于批处理的意义。我们都知道,根据google mapreduce来实现的hadoop为我们提供了map, reduce原语,使我们的批处理程序变得非常地简单和优美。同样,storm也为实时计算提供了一些简单优美的原语。我们会在第三节中详细介绍。

    我们来看一下storm的适用场景。

    1.  流数据处理。Storm可以用来处理源源不断流进来的消息,处理之后将结果写入到某个存储中去。

    2.  分布式rpc。由于storm的处理组件是分布式的,而且处理延迟极低,所以可以作为一个通用的分布式rpc框架来使用。当然,其实我们的搜索引擎本身也是一个分布式rpc系统。

    说了半天,好像都是很玄乎的东西,下面我们开始具体讲解storm的基本概念和它内部的一些实现原理吧。

  • Storm的基本概念

    首先我们通过一个 storm 和hadoop的对比来了解storm中的基本概念。

    Hadoop Storm
    系统角色 JobTracker Nimbus
    TaskTracker Supervisor
    Child Worker
    应用名称 Job Topology
    组件接口 Mapper/Reducer Spout/Bolt

    表3-1

    接下来我们再来具体看一下这些概念。

      1.  Nimbus:负责资源分配和任务调度

      2.  Supervisor:负责接受nimbus分配的任务,启动和停止属于自己管理的worker进程。

      3.  Worker:运行具体处理组件逻辑的进程。

      4.  Task:worker中每一个spout/bolt的线程称为一个task. 在storm0.8之后,task不再与物理线程对应,同一个spout/bolt的task可能会共享一个物理线程,该线程称为executor。

      下面这个图描述了以上几个角色之间的关系。
      系统结构
      图3-1

      1.  Topology:storm中运行的一个实时应用程序,因为各个组件间的消息流动形成逻辑上的一个拓扑结构。

      2.  Spout:在一个topology中产生源数据流的组件。通常情况下spout会从外部数据源中读取数据,然后转换为topology内部的源数据。Spout是一个主动的角色,其接口中有个nextTuple()函数,storm框架会不停地调用此函数,用户只要在其中生成源数据即可。

      3.  Bolt:在一个topology中接受数据然后执行处理的组件。Bolt可以执行过滤、函数操作、合并、写数据库等任何操作。Bolt是一个被动的角色,其接口中有个execute(Tuple input)函数,在接受到消息后会调用此函数,用户可以在其中执行自己想要的操作。

      4.  Tuple:一次消息传递的基本单元。本来应该是一个key-value的map,但是由于各个组件间传递的tuple的字段名称已经事先定义好,所以tuple中只要按序填入各个value就行了,所以就是一个value list.

      5.  Stream:源源不断传递的tuple就组成了stream。

      6.  stream grouping:即消息的partition方法。Storm中提供若干种实用的grouping方式,包括shuffle, fields hash, all, global, none, direct和localOrShuffle等

      相比于s4, puma等其他实时计算系统,storm最大的亮点在于其记录级容错和能够保证消息精确处理的事务功能。下面就重点来看一下这两个亮点的实现原理。

      • Storm记录级容错的基本原理

      首先来看一下什么叫做记录级容错?storm允许用户在spout中发射一个新的源tuple时为其指定一个message id, 这个message id可以是任意的object对象。多个源tuple可以共用一个message id,表示这多个源 tuple对用户来说是同一个消息单元。storm中记录级容错的意思是说,storm会告知用户每一个消息单元是否在指定时间内被完全处理了。那什么叫做完全处理呢,就是该message id绑定的源tuple及由该源tuple后续生成的tuple经过了topology中每一个应该到达的bolt的处理。举个例子。在图4-1中,在spout由message 1绑定的tuple1和tuple2经过了bolt1和bolt2的处理生成两个新的tuple,并最终都流向了bolt3。当这个过程完成处理完时,称message 1被完全处理了。
      消息传递
      图4-1

      在storm的topology中有一个系统级组件,叫做acker。这个acker的任务就是追踪从spout中流出来的每一个message id绑定的若干tuple的处理路径,如果在用户设置的最大超时时间内这些tuple没有被完全处理,那么acker就会告知spout该消息处理失败了,相反则会告知spout该消息处理成功了。在刚才的描述中,我们提到了”记录tuple的处理路径”,如果曾经尝试过这么做的同学可以仔细地思考一下这件事的复杂程度。但是storm中却是使用了一种非常巧妙的方法做到了。在说明这个方法之前,我们来复习一个数学定理。

      A xor A = 0.

      A xor B…xor B xor A = 0,其中每一个操作数出现且仅出现两次。

      storm中使用的巧妙方法就是基于这个定理。具体过程是这样的:在spout中系统会为用户指定的message id生成一个对应的64位整数,作为一个root id。root id会传递给acker及后续的bolt作为该消息单元的唯一标识。同时无论是spout还是bolt每次新生成一个tuple的时候,都会赋予该tuple一个64位的整数的id。Spout发射完某个message id对应的源tuple之后,会告知acker自己发射的root id及生成的那些源tuple的id。而bolt呢,每次接受到一个输入tuple处理完之后,也会告知acker自己处理的输入tuple的id及新生成的那些tuple的id。Acker只需要对这些id做一个简单的异或运算,就能判断出该root id对应的消息单元是否处理完成了。下面通过一个图示来说明这个过程。

      图4-1 spout中绑定message 1生成了两个源tuple,id分别是0010和1011.

      图4-2 bolt1处理tuple 0010时生成了一个新的tuple,id为0110.

      图4-3 bolt2处理tuple 1011时生成了一个新的tuple,id为0111.

      图4-4 bolt3中接收到tuple 0110和tuple 0111,没有生成新的tuple.

      可能有些细心的同学会发现,容错过程存在一个可能出错的地方,那就是,如果生成的tuple id并不是完全各异的,acker可能会在消息单元完全处理完成之前就错误的计算为0。这个错误在理论上的确是存在的,但是在实际中其概率是极低极低的,完全可以忽略。

      • Storm的事务拓扑

      事务拓扑(transactional topology)是storm0.7引入的特性,在最近发布的0.8版本中已经被封装为Trident,提供了更加便利和直观的接口。因为篇幅所限,在此对事务拓扑做一个简单的介绍。

      事务拓扑的目的是为了满足对消息处理有着极其严格要求的场景,例如实时计算某个用户的成交笔数,要求结果完全精确,不能多也不能少。Storm的事务拓扑是完全基于它底层的spout/bolt/acker原语实现的,通过一层巧妙的封装得出一个优雅的实现。个人觉得这也是storm最大的魅力之一。

      事务拓扑简单来说就是将消息分为一个个的批(batch),同一批内的消息以及批与批之间的消息可以并行处理,另一方面,用户可以设置某些bolt为committer,storm可以保证committer的finishBatch()操作是按严格不降序的顺序执行的。用户可以利用这个特性通过简单的编程技巧实现消息处理的精确。

      • Storm在淘宝

      由于storm的内核是clojure编写的(不过大部分的拓展工作都是java编写的),为我们理解它的实现带来了一定的困难,好在大部分情况下storm都比较稳定,当然我们也在尽力熟悉clojure的世界。我们在使用storm时通常都是选择java语言开发应用程序。

      在淘宝,storm被广泛用来进行实时日志处理,出现在实时统计、实时风控、实时推荐等场景中。一般来说,我们从类kafka的metaQ或者基于hbase的timetunnel中读取实时日志消息,经过一系列处理,最终将处理结果写入到一个分布式存储中,提供给应用程序访问。我们每天的实时消息量从几百万到几十亿不等,数据总量达到TB级。对于我们来说,storm往往会配合分布式存储服务一起使用。在我们正在进行的个性化搜索实时分析项目中,就使用了timetunnel + hbase + storm + ups的架构,每天处理几十亿的用户日志信息,从用户行为发生到完成分析延迟在秒级。

      • Storm的未来

      Storm0.7系列的版本已经在各大公司得到了广泛使用,最近发布的0.8版本中引入了State,使得其从一个纯计算框架演变成了一个包含存储和计算的实时计算新利器,还有刚才提到的Trident,提供更加友好的接口,同时可定制scheduler的特性也为其针对不同的应用场景做优化提供了更便利的手段,也有人已经在基于storm的实时ql(query language)上迈出了脚本。在服务化方面,storm一直在朝着融入mesos框架的方向努力。同时,storm也在实现细节上不断地优化,使用很多优秀的开源产品,包括kryo, Disruptor, curator等等。可以想象,当storm发展到1.0版本时,一定是一款无比杰出的产品,让我们拭目以待,当然,最好还是参与到其中去吧,同学们。

       

    手把手教你学Simulink——基于Simulink的前馈解耦SVPWM整流器仿真 本文详细介绍了基于Simulink的前馈解耦SVPWM整流器仿真方法。针对三相PWM整流器存在的dq轴交叉耦合问题,提出前馈解耦控制方案,通过在电流环中引入耦合电压补偿项,显著提升系统性能。文章包含完整的系统架构、核心算法、Simulink建模步骤及参数设置,仿真结果显示:电流跟踪误差<2%、动态响应时间<0.05s、THD<3%、功率因数>0.999。同时提供了可直接复用的MATLAB代码和工程优化建议,为电力电子工程师实现高精度AC/DC转换提供了实用解决方案。 阅读详情

    相关推荐

    RocketMQ 5.3.1 集成 Spring Boot 3.4.3 就这么简单

    RocketMQ 是一个分布式消息中间件,支持发布/订阅模型,具有高吞吐量、高可用性和事务消息等特性。它广泛应用于日志处理、订单系统和异步任务等场景。Spring Boot 3.4.3 集成 RocketMQ 5.3.1 的过程异常简单,仅需少量配置即可实现消息的生产和消费。本文从环境搭建到代码实现,覆盖了核心步骤。

    lssffy的博客 1385

    开源的实时计算平台storm简介

    场景 伴随着信息科技日新月异的发展,信息呈现出爆发式的膨胀,人们获取信息的途径也更加多样、更加便捷,同时对于信息的时效性要求也越来越高。举个搜索场景中的例子,当一个卖家发布了一条宝贝信息时,他希望的当然是这个宝贝马上就可以被卖家搜索出来、点击、购买啦,相反,如果这个宝贝要等到第二天或者更久才可以被搜出来,估计这个大哥就要骂娘了。再举一个推荐的例子,如果用户昨天在淘宝上买了一双袜子,今天想买一副

    hewei0241的专栏 1548

    WiFi信道状态信息 基于Intel 5300的CSI Tool 安装及使用(一)

    经过半个月的坎坷安装过程,连Windows系统都没装过的本人终于颤颤巍巍把CSI TOOL装好了,下面记录一下适于我所使用设备的安装过程。设备:一台THINKPAD X201,一台师兄借的华硕主板的台式机首先,如果你和我一样对linux其实一窍不通的话,建议先反复看教程里的安装代码,照猫画虎很难一步实现的,中途一定会有这或那的问题需要解决,所以该了解的基础linux指令还是要了解,起码安装过程中的那些指令可以去查一查。.........

    Silver_777的博客 2万+

    Elastic Search、Hadoop、Spark、ODPS、Apache Druid

    Elastic Search使用倒排索引搜索。倒排索引就是反向索引。 倒排索引不以记录ID为索引,而是以其它记录字段为索引。所有字段内容分词,存储词条对应的记录ID和字段。 https://www.cnblogs.com/cjsblog/p/10327673.html https://www.elastic.co/guide/cn/elasticsearch/guide/current/inverted-index.html ...

    haoranhaoshi的博客 1060

    用朴素贝叶斯分类模型判断病人是否感染幽门螺杆菌(Python实现)

    朴素贝叶斯,Python

    weixin_56529327的博客 1160

    Win11笔记本BIOS设置避坑大全:Secure Boot、RST、UEFI引导,一次讲清

    本文详细解析了Win11笔记本BIOS设置中的关键问题,包括Secure Boot、Intel RST和UEFI引导的配置方法,帮助用户避开双系统安装中的常见陷阱。特别针对不同品牌笔记本的BIOS界面差异,提供了实用的操作指南和优化建议,确保系统兼容性和启动效率。

    weixin_29251131的博客 688

    《Getting Started with Storm》章节一 基础

    注:括号里的字,并且是(灰色)的,是我个人的理解,如有差错,欢迎交流 Storm是一个分布式的、可靠的、容错的数据流处理系统(流式计算框架,可以和mapreduce的离线计算框架对比理解)。整个任务被委派给不同的组件,每个组件负责一个简单的特定的处理任务。Storm集群的输入流是一个叫spout的组件负责接入处理。spout把数据传给bolt组件,bolt组件可以对数据完成某种转化。bo...

    weixin_34313182的博客 285

    高通SA8295P音频接口深度解析:全面掌握SA8295P的LS-I2S、PCM/TDM与高性能音频处理技术设计

    SA8295P提供丰富的音频接口选项,包括LS-I2S、PCM/TDM和HS-I2S接口,具备灵活的配置选项,适合各种高保真音频和高速数据传输应用。结合LS-I2S和PCM/TDM接口:在复杂的音频编解码器设计中,可结合使用LS-I2S和PCM/TDM接口,以处理和传输不同的音频数据流。使用HS-I2S接口:在软件定义无线电(SDR)系统中,高速I2S接口可处理高速数据流,如无线电信号的解码和处理。LS-I2S(低速I2S)接口是SA8295P的一部分,提供了丰富的音频数据传输选项。

    weixin_43199439的博客 1406

    Elasticsearch与Hadoop和Spark的整合与大数据处理

    1.背景介绍 1. 背景介绍 Elasticsearch是一个开源的搜索和分析引擎,基于Lucene库构建,具有实时搜索、文本分析、数据聚合等功能。Hadoop是一个开源的分布式存储和分析平台,由Google的MapReduce算法启发,具有高可扩展性和高容错性。Spark是一个快速、高效的大数据处理引擎,基于内存计算,具有高吞吐量和低延迟。 随着大数据时代的到来,这三种技术在大数据处理领域...

    AI天才研究院 1452

    基于FPGA的万兆以太网学习(1)

    万兆(10G) 以太网测速视频:SFP+屏蔽笼可以插入千兆或万兆光模块。SFP+信号定义与 SFP 一致。

    baidu_34971492的博客 2250

    【从0到1实战】C# WinForm开发工业级PLC监控系统(完整串口+Modbus RTU/TCP+数据库存储+源码+避坑指南)

    做C#工控上位机开发的工程师,尤其是刚入行的新人,最核心的刚需就是开发一套完整的PLC监控系统。这也是工控领域最基础、最核心、应用最广的项目类型——小到单台PLC的设备测控,大到整线的产线监控,本质都是「上位机与PLC通讯,实现数据采集、参数下发、状态监控、数据存储」。碎片化的知识点学了很多,串口会用了、Modbus协议看了、数据库也懂点,但是始终无法把这些知识点串联起来,做出一套能落地的工业级PLC监控系统。

    这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1559

    【项目实战】基于大数据的Hadoop网络电商分析系统Hive数据可视化大屏展示Spark计算机程序设计

    【项目实战】基于大数据的Hadoop网络电商分析系统Hive数据可视化大屏展示Spark计算机程序设计

    qq_2105837402的博客 1602

    Oracle EBS R12 AR 标准发票 核心表结构

    ​ Oracle EBS R12 AR 标准发票 核心表结构 聚焦手动标准发票 (Standard Invoice),按头→行→分配→税→收款计划→会计分录→历史分层,标注主键、外键、关键字段、业务含义,同时说明表间关联关系,适配开发 / 运维 / 数据核对场景。 一、主数据层(发票头 + 行,核心业务表) 1. RA_CUSTOMER_TRX_ALL 【发票头表】 作用:存储整张发票头部信息,一张发票对应一条记录,AR 发票主表。 主键:CUSTOMER_TRX_ID (唯一 ID,系统内部键) 业

    金牌架构师 282

    Storm 简介

    一、Storm 简介 Storm 是 Apache 旗下免费开源的分布式实时计算框架。Storm可以轻松、可靠地处理无限 数据流,对实时分析、在线机器学习、连续计算、分布式RPC,ETL等提供高效、可靠的支 持。 二、什么是分布式计算 分布式计算,将一个任务分解为多个任务,分发给多台计算机,节约整体计算时间。 注:集中式计算,与分布式相对,一个任务一台计算机负责,多个任务多个计算机,不节约整 体计算时间。 三、Storm 分布式实时计算框架的要点 ① 开源,遵循Apache理念,项目创立便是开源 ② 流式计

    1744

    Outlook Express 6 (OE6) for Win7/Win8/Win10

    英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

    温度PID控制PLC程序

    温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

    Apache Storm简介及安装

    一、环境准备 3台虚拟机 ○ 主机名分别是:L0, L2, L3 ○ 操作系统:CentOS 6.7 ○ 已经装有JDK 7 ○ 已经装有 zookeeper-3.4.10 apache-storm-0.9.6.tar.gz 二、Storm简介      Apache Storm是一个免费开源、分布式、高容错的实时计算系统。Storm令持续不...

    东语的专栏 5517

    C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

    基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

    Storm简介——初始Storm

    一、什么是Storm Strom是由Twitter开源的类似于Hadoop的实时数据处理框架。Strom是分布式流式数据处理系统,强大的分布式集群管理、便捷的针对流式数据的编程模型、高容错保障这些都是其成为流式实时数据处理的首选。 二、Storm特点与优势 1)易用:为复杂的流计算模型提供了丰富的服务和编程接口,开发迅速、容易上手学习...

    diantu6020的博客 349

    汉书HE8,好用的汇编代码编写工具

    汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

    storm简介

    场景 伴随着信息科技日新月异的发展,信息呈现出爆发式的膨胀,人们获取信息的途径也更加多样、更加便捷,同时对于信息的时效性要求也越来越高。举个搜索场景中的例子,当一个卖家发布了一条宝贝信息时,他希望的当然是这个宝贝马上就可以被卖家搜索出来、点击、购买啦,相反,如果这个宝贝要等到第二天或者更久才可以被搜出来,估计这个大哥就要骂娘了。再举一个推荐的例子,如果用户昨天在淘宝上买了一双袜子,今天想买一副泳

    it_man的专栏 2562

    大数据组件之Storm简介

    简介 Storm是一个开源的分布式实时计算框架。 特点 支持水平横向扩展 高容错性,通过ack机制每个消息都不丢失(好奇该特性如何实现) 处理速度快,每个节点每秒处理超过一百万个元组(tuples) 其他 各编程语言支持友好 支持本地模式 支持图形化界面管理 与其他计算框架比较 MapReduce(Hadoop家族组件):批处理,适合海量离线处理场景 Spark Streaming:并非真正意义上的流处理,而是微批处理,对数据流进行极小粒度的拆分,近似达到流处理的效果(微分原理) Fl

    GAOXINXINGgaoxinxing的博客 3225

    Storm简介及安装

    文章目录Storm简介及安装Storm简介实时计算系统的出现实时计算系统的特性Storm基本概念Storm基本特性Storm架构 Storm简介及安装 Storm简介 实时计算系统的出现 ​ 全量数据处理使用的大多是鼎鼎大名的hadoop或者hive,作为一个批处理系统,hadoop以其吞吐量大、自动容错等优点,在海量数据处理上 得到了广泛的使用。但是,hadoop不擅长实时计算,因为它天然就是为...

    qq_43502858的博客 296
    上一篇: ELK日志收集系统调研(三) -- LogStash常用配置
    下一篇: LogStash+ElasticSearch性能问题?
    Aaron.com
    博客等级 码龄17年 25粉丝 39原创
    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    个

    红包个数最小为10个

    元

    红包金额最低5元

    当前余额3.43元 前往充值 >
    需支付:10.00元
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付元
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值