1、storm系统角色和应用组件基本理解:

和Hadoop一起理解,清晰点。

1)物理节点Nimubus,负责资源分配和任务调度;

2)物理节点Supervisor负责接受nimbus分配的任务,启动和停止属于自己管理的worker进程;

3)系统角色Worker运行具体处理组件逻辑的进程;

4)系统爵色Task是worker中每一个spout/bolt的线程称为一个task,storm0.8之后的版本,task不再与物理线程对应,同一个spout/bolt的task可能会共享一个物理线程,该线程称为executor。

节点(supervisor)-进程(worker)-线程(executor)-任务(task)和应用组件的关系呢?

2、Storm应用组件关键的基本理解

这个图对这个关系梳理的还是比较清楚。通俗地理解下:

1)提交有一个topology(就是一个程序)给集群,集群分配到不同worker执行(可能分布在不同节点),就是有多少个进程在同时进行这个topology,而进程可能在同一个节点上也可能在不同节点上;

2)每个topology运行在多个worker上,每个worker又分出多个executor,就是进程内有多个线程来执行;

3)每个executor又可以有多个具体任务来执行。

一个topology可以在多个supervisor上执行,一个supervisor也可以执行多个topology;一个worker只执行某个topology,一个topology由多个worker来执行。

一个executor可以执行一个component中的多个task。 一个executor默认对应一个task,一个worker中包含多个executor。

现在问题是:不同topolopy之间如何通信?同一topology的不同进程(worker)之间如何通信?同一worker的不同线程(executor)之间如何通信?这三层分别涉及到应用间、进程间、线程间的通信?

3、Storm通信机制

有这么一个场景:从一个实时生产的文件列表中取出文件,然后统计具体id的次数,这如果应用storm平台,涉及到文件资源读取会不会重复?具体id的统计如何汇聚?在分布式情况下,storm是如何控制topology不会重复读取文件内容,同时又能汇聚id的次数。先看看storm的通信机制。

1)同一worker间消息的发送使用的是LMAX Disruptor,它负责同一节点(同一进程内)上线程间的通信;
              Disruptor使用了一个RingBuffer替代队列,用生产者消费者指针替代锁。
             生产者消费者指针使用CPU支持的整数自增,无需加锁并且速度很快。Java的实现在Unsafe package中。
       2) 不同worker间通信使用ZeroMQ(0.8)或Netty(0.9.0);
       3) 不同topologey之间的通信,Storm不负责,需要自己实现,例如使用kafka等;

先不考虑不同topologey之间的通信(除了kafa,我想还可以用nosql的redis来保存一些需要共享的数据资源),同一topology的worker之间用netty通信和同一worker之间用LMAX Disruptor通信,这进程和线程的通信工具能否实现对数据资源读取的排斥性,这个storm平台应该是能实现,但个人理解上需要通过代码来加深。

4、Storm并行机制

基于storm的通信机制,我想storm是可以实现并行分布来实现任务。

这张storm官方的图,很清晰地给出了各组件之间的并行度。代码如下:

Config conf = new Config();
conf.setNumWorkers(2); // use two worker processestopologyBuilder.setSpout("blue-spout", new BlueSpout(), 2); // set parallelism hint to 2topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2).setNumTasks(4).shuffleGrouping("blue-spout");topologyBuilder.setBolt("yellow-bolt", new YellowBolt(), 6).shuffleGrouping("green-bolt");StormSubmitter.submitTopology("mytopology",conf,topologyBuilder.createTopology());

该topology:1)包含3个component,1个spout,2个bolt;2)包含2个worker process,10个executor thread,12个task。PS:同颜色属于同一个component。

5、Storm的worker并行配置

Storm官网给出的Worker进程内部的结构图。每一个worker进程都有一个单独的线程来监听该worker的端口号,并接收发送到该端口的数据,它将通过网络发送过来的数据放到worker的接收队列里面。监听的端口号是通过supervisor.slots.ports定义(conf/storm.yaml中配置),每个节点配置几个端口就可以有几个worker。

6、storm的executor并行配置

除在代码中配置外,还可以通过storm rebalance来调整。

storm rebalance mytopology -n 5 -e blue-spout=3 -e yellow-bolt=10

总结:如何理解storm进程间和线程间的通信,是通过storm平台高性能解决实时数据处理的关键,还需要通过实际例子来理解netty和LMAX Disruptor,有了这两个才有并行分布的意义。这个道理很清晰,就是你要实现分布、并行,首要就是要解决不同任务之间的通信问题,才能确保并行分布的任务对数据的共享不会产生冲突。

在线实时大数据平台Storm并行和通信机制理解相关推荐

  1. 在线实时大数据平台Storm集群组件学习

    Hadoop常用于离线的复杂的大数据处理,Spark常用于离线的快速(轻量级)的大数据处理, Storm常用于在线的实时的大数据处理:这句话一定程度上反应了三套大数据平台的鲜明特征.Storm是一套实 ...

  2. 在线实时大数据平台Storm输入源共享试验

    1.背景:topology程序提交集群模式运行试验,验证在同一文件输入源情况下,worker之间是否会重复输入处理,以及数据变量能否在不同worker之间共享,如果文件新增数据,topology会不会 ...

  3. 在线实时大数据平台Storm并行度试验

    集群模式试验:同一文件输入数据如何处理,数据变量共享 1)集群模式一个worker内一个spout一个Bolt jps:1个worker storm list:1个wokers,4个tasks 2)集 ...

  4. 在线实时大数据平台Storm开发之wordcount

    可以在Eclipse下通过Maven引入storm-starter项目,这里直接将storm目录下lib中的jar包引入到工程中. 由于storm-core-1.0.1.jar中带有default.y ...

  5. 在线实时大数据平台Storm集成redis开发(分布锁)

    1.需求场景:spout从ftp列表中拿到未读取的文件读取并发射行到Bolt,bolt进行业务处理后提交下一Bolt入库.用redis主要是:保存文件列表对象,使用分布锁来同步互斥访问共享对象,使文件 ...

  6. 在线实时大数据平台Storm本地模式运行的一个小发现

    1.现象:生产中分别部署了两台服务器,独立运行storm,然后拓扑程序提交是本地模式,发现不用启动storm和zookeeper也可以运行: #jps  没有下面进程  QuorumPeerMain ...

  7. 在线实时大数据平台Storm版本兼容的问题

    部署了storm1.0.1最新版,但原来生产的程序是storm0.8.2版本并在该版本环境中运行,直接将程序放到1.0.1环境中storm jar运行失败. 重构程序,引入storm-core-1.0 ...

  8. 在线实时大数据平台Storm单机部署

    centos单机下部署storm,主要用于开发测试用.部署的IP地址用zoo1代替,要注意/etc/hosts下对应ip和主机名. 1.Zookeeper部署 Apache官网http://zooke ...

  9. 实时大数据平台的设计与实现

    实时大数据平台的设计与实现 什么是实时大数据平台 实时大数据平台和离线大数据平台还是有区别的,更强调数据的实时性.具体的架构,具体的代码该怎么写,模块怎么去构建,各个系统之间怎么去组织协调,都需要根据 ...

最新文章

  1. sqlce wp from查询语句详解
  2. !!基础---c# 下载网页+图片
  3. iOS中常见的内存问题
  4. 面试突然问Java多线程底层原理,我哭了!
  5. 驾驭系统 做一个Windows XP的“***”(图)3
  6. win11怎么取消pin码实现自动登陆 windows11取消pin码自动登陆的方法步骤
  7. 微服务实战(八):落地微服务架构到直销系统(服务高可用性)
  8. Java list 适配器_适配器基类--万能适配器(BaseAdapter)
  9. 【虚拟机】VirtualBox 安装 Windows 11 虚拟机简介
  10. Python源码学习(四)
  11. 用谷歌浏览器下载网页视频
  12. EGO1—实现计数器74HC163
  13. 用户帐户控制---为了对电脑进行保护,已经阻止此应用。---管理员已阻止你运行此应。有关详细信息,请与管理员联系。
  14. Linux进程管理和控制服务
  15. Snaker工作流学习(二)
  16. echarts(五)高级篇(多坐标轴、复杂多坐标轴)
  17. linux系统fasta程序,求助:如何用命令对fasta格式的序列按长短排序
  18. 苹果上网本报价_1小时一个价 iPhone12加价300元起
  19. ThinkPad P1 Gen4 是否支持单条4T固态?
  20. 为什么linux不需要整理磁盘,为什么Linux不需要磁盘碎片整理

热门文章

  1. 大数据技术:Zookeeper分布式协调服务
  2. 台式电脑没鼠标怎么移动光标_台式机没有鼠标 怎么控制光标
  3. IIS6下配置fastcgi的php的教程
  4. iOS APP提交上架流程
  5. string.Join和Reverse的简单使用示例
  6. magento 修改产品类型的方法 change product type
  7. SVN Access Manager 0.5.5.14 发布 - SVN 管理工具
  8. 让你成为有钱人的25种方法!
  9. 如何通过网络连接进行ADB调试
  10. linux内核中的GPIO系统之(1):软件框架