Storm程序的并发机制原理总结

文章目录

  • 目录
    • 前言:
    • 1、概念
    • 2、配置并行度
    • 总结:

目录

前言:

为了在以后的实践中提高Storm程序执行的效率,我们还是有必要了解下对应的Storm程序的并发机制。(哈哈,虽然以博主小菜鸟的水平还没有接触到这种提升程序效率层面的东西(这里只是空谈理论),但是Storm的并行机制还是有必要了解下,毕竟技多不压身嘛!)

1、概念

  • 并发度:用户指定的一个任务,可以被多个线程执行,**并发度的数量等于线程的数量。**一个任务的多个线程,会被运行在多个Worker(JVM)上,有一种类似于平均算法的负载均衡策略。尽可能减少网络IO,和Hadoop中的MapReduce中的本地计算的道理一样。
  • Workers (JVMs): 在一个物理节点上可以运行一个或多个独立的JVM
    进程。一个Topology可以包含一个或多个worker(并行的跑在不同的物理机上), 所以worker process就是执行一个topology的子集, 并且worker只能对应于一个topology
  • Executors (threads): 在一个worker JVM进程中运行着多个Java线程。一个executor线程可以执行一个或多个tasks但一般默认每个executor只执行一个task。一个worker可以包含一个或多个executor,每个component (spout或bolt)至少对应于一个executor, 所以可以说executor执行一个compenent的子集, 同时一个executor只能对应于一个component。
  • Tasks(bolt/spout instances):Task就是具体的处理逻辑对象,**每一个Spout和Bolt会被当作很多task在整个集群里面执行。**每一个task对应到一个线程,而stream grouping则是定义怎么从一堆task发射tuple到另外一堆task。你可以调用TopologyBuilder.setSpout和TopBuilder.setBolt来设置并行度 — 也就是有多少个task。

2、配置并行度

  • 对于并发度的配置, 在storm里面可以在多个地方进行配置, 优先级为: defaults.yaml < storm.yaml < topology-specific configuration< internal component-specific configuration < external component-specific configuration
  • worker processes的数目, 可以通过配置文件和代码中配置, worker就是执行进程, 所以考虑并发的效果,数目至少应该大亍machines的数目
  • executor的数目, component的并发线程数,只能在代码中配置(通过setBolt和setSpout的参数), 例如,setBolt(“green-bolt”, new GreenBolt(), 2)
  • tasks的数目, 可以不配置, 默认和executor1:1, 也可以通过setNumTasks()配置 。Topology的worker数通过config设置,即执行该topology的worker(java)进程数。它可以通过 storm rebalance 命令任意调整。
  • 动态的改变并行度
    Storm支持在不 restart topology 的情况下, 动态的改变(增减) worker processes 的数目和 executors 的数目, 称为rebalancing. 通过Storm web UI,或者通过storm rebalance命令实现:
    storm rebalance mytopology -n 5 -e blue-spout=3 -e yellow-bolt=10

并发度描述如下图所示:
这里写图片描述

配置实例

Config conf = newConfig();
conf.setNumWorkers(2); //用2个worker
topologyBuilder.setSpout("blue-spout", newBlueSpout(), 2); //设置2个并发度
topologyBuilder.setBolt("green-bolt", newGreenBolt(), 2).setNumTasks(4).shuffleGrouping("blue-spout"); //设置2个并发度,4个任务
topologyBuilder.setBolt("yellow-bolt", newYellowBolt(), 6).shuffleGrouping("green-bolt"); //设置6个并发度
StormSubmitter.submitTopology("mytopology", conf, topologyBuilder.createTopology());

3个组件的并发度加起来是10,就是说拓扑一共有10个executor,一共有2个worker,每个worker产生10 / 2 = 5条线程。
绿色的bolt配置成2个executor和4个task。为此每个executor为这个bolt运行2个task。

总结:

知道了并发机制后,那么在实际生产中如何指定驱动类中每个组件的并发度数量?如何设置worker的数量?有以下几个参考点:
1,根据上游的数据量来设置Spout的并发度。
2,根据业务复杂度和execute方法执行时间来设置Bolt并发度。
3,根据集群的可用资源来配置,一般情况下70%的资源使用率。
4,Worker的数量理论上根据程序并发度总的Task数量来均分,在实际的业务场景中,需要反复调整。

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

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

相关文章

《无线网络:理解和应对互联网环境下网络互连所带来的挑战》——第2章 无线生态系统 2.1无线标准化过程...

本节书摘来自华章出版社《无线网络&#xff1a;理解和应对互联网环境下网络互连所带来的挑战》一书中的第2章&#xff0c;第2.1节&#xff0c;作者&#xff1a;&#xff08;美&#xff09;杰克L.伯班克&#xff08;Jack L. Burbank&#xff09;等著&#xff0c;更多章节内容可以…

Flask模板01

模板 在前面的示例中&#xff0c;视图函数的主要作用是生成请求的响应&#xff0c;这是最简单的请求。实际上&#xff0c;视图函数有两个作用&#xff1a;处理业务逻辑和返回响应内容。在大型应用中&#xff0c;把业务逻辑和表现内容放在一起&#xff0c;会增加代码的复杂度和…

★数学上最大的数是多少?

数学上最大的数是多少&#xff1f; 怪罗科普 收藏(282)| 阅读(117678)人类已经使用数长达千年之久。普遍认为&#xff0c;数的概念最先源于史前人类开始使用手指进行计数。这最终演变成符号语言&#xff0c;然后在沙子、墙壁和木头等物体上作标记。 我们已经向前发展了一大步&…

Flask模板02

3.4 控制语句 常用的几种控制语句&#xff1a; 模板中的if控制语句 app.route(/user) def user():user dongGereturn render_template(user.html,useruser)<html><head>{% if user %}<title> hello {{user}} </title>{% else %}<title> welc…

Storm任务提交过程及目录树介绍

目录前言&#xff1a;1、Storm 任务提交的过程2、Storm相关的目录树总结&#xff1a; 目录 前言&#xff1a; 对于任何一个组件来说&#xff0c;了解它相关的任务提交的过程是非常有必要的&#xff08;毕竟生产中遇到一些Bug时&#xff0c;你如果知道内部执行的过程&#xf…

《Adobe InDesign CS6中文版经典教程》—第1课1.5节修改文档的缩放比例

本节书摘来自异步社区《Adobe InDesign CS6中文版经典教程》一书中的第1课1.5节修改文档的缩放比例&#xff0c;作者【美】Adobe公司,更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.5 修改文档的缩放比例Adobe InDesign CS6中文版经典教程InDesign中的控件让用户能…

随机生成一定范围的随机数

function randomNum(min,max) { return Math.ceil(Math.random()*(max-min)min); } min,max最小最大范围数字。转载于:https://www.cnblogs.com/kingzlz/p/6229586.html

【python】Flask视图

2.1 从 Hello World 开始 Flask程序运行过程&#xff1a; 所有Flask程序必须有一个程序实例。 Flask调用视图函数后&#xff0c;会将视图函数的返回值作为响应的内容&#xff0c;返回给客户端。一般情况下&#xff0c;响应内容主要是字符串和状态码。 当客户端想要获取资源…

大数据之Kafka入门简介

目录前言&#xff1a;1、Kafka是什么2、JMS是什么3、Kafka核心组件&#xff08;重点&#xff09;总结&#xff1a; 目录 前言&#xff1a; 作为流式计算中的一个组件&#xff0c;对于它的组成以及运行的原理&#xff0c;学习者也需要相关的了解。以下主要简单介绍了kafka是什…

oracle的安装与plsql的环境配置

1&#xff0c;首先得有oracle的安装包和plsql的安装包&#xff0c;安装包地址可见百度云 http://pan.baidu.com/s/1miTqhmg 2.解压下来进入0817账套&#xff0c;找到set.exe文件&#xff0c;双击安装即可 注意的是安装的时候有两个目录是要自己创建的&#xff0c;否则安装不成功…

如何在Docker容器中运行GUI程序

如何在Docker容器中运行GUI程序 各位&#xff0c;今天我们将学习如何在Docker之中运行GUI程序。我们可以轻易地在Docker容器中运行大多数GUI程序且不出错。Docker是一个开源项目&#xff0c;提供了一个打包、分发和运行任意程序的轻量级容器的开放平台。它没有语言支持、框架或…

【python】Get与Post的区别?(面试官最想听到的答案)

GET和POST是HTTP请求的两种基本方法&#xff0c;要说它们的区别&#xff0c;接触过WEB开发的人都能说出一二。 最直观的区别就是GET把参数包含在URL中&#xff0c;POST通过request body传递参数。 你可能自己写过无数个GET和POST请求&#xff0c;或者已经看过很多权威网站总结出…

大数据之Kafka集群安装及简单使用

目录1、Kafka集群部署2、Kafka常用操作命令 目录 1、Kafka集群部署 1.1、下载安装包 http://kafka.apache.org/downloads.html 在linux中使用wget命令下载安装包 wget http://mirrors.hust.edu.cn/apache/kafka/0.8.2.2/kafka_2.11-0.8.2.2.tgz 1.2、解压安装包 tar -z…

Python爬虫入门之Urllib库的基本使用

那么接下来&#xff0c;小伙伴们就一起和我真正迈向我们的爬虫之路吧。 1.分分钟扒一个网页下来 怎样扒网页呢&#xff1f;其实就是根据URL来获取它的网页信息&#xff0c;虽然我们在浏览器中看到的是一幅幅优美的画面&#xff0c;但是其实是由浏览器解释才呈现出来的&#xf…

【python】hashlib.shasha256练习注册 --笔记

用户注册和登录import csv import hashlib#注册将用户信息填写到csv文件中 def register():username input(用户名:)password input(密码:)user []user.append(username)user.append(hashlib.sha256(password.encode(utf-8)).hexdigest())with open(t2/users.csv, a, newlin…

《3ds Max疯狂设计学院》——1.6节3ds Max 2016新增的主要功能

本节书摘来自异步社区《3ds Max疯狂设计学院》一书中的第1章&#xff0c;第1.6节3ds Max 2016新增的主要功能&#xff0c;作者 曹茂鹏&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看 1.6 3ds Max 2016新增的主要功能1&#xff0e;Max Creation Graph3ds Max…

大数据之Kafka内部原理详细介绍

目录前言&#xff1a;1、Kafka整体结构2、Consumer与topic关系3、Kafka消息的分发4、Consumer的负载均衡5、kafka文件存储机制总结&#xff1a; 目录 前言&#xff1a; 本篇文章所介绍的内容还是以了解为主&#xff0c;主要目的还是为了对Kafka有一个更深入的理解。主要介绍…

【python】urllib和urllib3,requests 简要概括---笔记

urllib和urllib3&#xff0c;requestsurl:协议://存放资源的地址&#xff08;域名&#xff09;/具体的资源https://bj.lianjia.com/zufang/dghfjhsjdf648.htmlurllib.request 用来发出请求urllib.parseurllib.request.urlopen(str) --->response对象request urllib.reques…

JS与APP原生控件交互

“热更新”、“热部署”相信对于混合式开发的童鞋一定不陌生&#xff0c;那么APP怎么避免每次升级都要在APP应用商店发布呢&#xff1f;这里就用到了混合式开发的概念&#xff0c;对于电商网站尤其显得重要&#xff0c;不可能每次发布一个活动&#xff0c;都要发布一个现版本&a…

《脱颖而出——成功网店经营之道》一2.6 连横:返利模式的应用及分销

本节书摘来异步社区《脱颖而出——成功网店经营之道》一书中的第2章&#xff0c;第2.6节&#xff0c;作者&#xff1a; 何小健 责编&#xff1a; 赵轩, 更多章节内容可以访问云栖社区“异步社区”公众号查看。 2.6 连横&#xff1a;返利模式的应用及分销 脱颖而出——成功网店…