在线实时大数据平台Storm并行和通信机制理解
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并行和通信机制理解相关推荐
- 在线实时大数据平台Storm集群组件学习
Hadoop常用于离线的复杂的大数据处理,Spark常用于离线的快速(轻量级)的大数据处理, Storm常用于在线的实时的大数据处理:这句话一定程度上反应了三套大数据平台的鲜明特征.Storm是一套实 ...
- 在线实时大数据平台Storm输入源共享试验
1.背景:topology程序提交集群模式运行试验,验证在同一文件输入源情况下,worker之间是否会重复输入处理,以及数据变量能否在不同worker之间共享,如果文件新增数据,topology会不会 ...
- 在线实时大数据平台Storm并行度试验
集群模式试验:同一文件输入数据如何处理,数据变量共享 1)集群模式一个worker内一个spout一个Bolt jps:1个worker storm list:1个wokers,4个tasks 2)集 ...
- 在线实时大数据平台Storm开发之wordcount
可以在Eclipse下通过Maven引入storm-starter项目,这里直接将storm目录下lib中的jar包引入到工程中. 由于storm-core-1.0.1.jar中带有default.y ...
- 在线实时大数据平台Storm集成redis开发(分布锁)
1.需求场景:spout从ftp列表中拿到未读取的文件读取并发射行到Bolt,bolt进行业务处理后提交下一Bolt入库.用redis主要是:保存文件列表对象,使用分布锁来同步互斥访问共享对象,使文件 ...
- 在线实时大数据平台Storm本地模式运行的一个小发现
1.现象:生产中分别部署了两台服务器,独立运行storm,然后拓扑程序提交是本地模式,发现不用启动storm和zookeeper也可以运行: #jps 没有下面进程 QuorumPeerMain ...
- 在线实时大数据平台Storm版本兼容的问题
部署了storm1.0.1最新版,但原来生产的程序是storm0.8.2版本并在该版本环境中运行,直接将程序放到1.0.1环境中storm jar运行失败. 重构程序,引入storm-core-1.0 ...
- 在线实时大数据平台Storm单机部署
centos单机下部署storm,主要用于开发测试用.部署的IP地址用zoo1代替,要注意/etc/hosts下对应ip和主机名. 1.Zookeeper部署 Apache官网http://zooke ...
- 实时大数据平台的设计与实现
实时大数据平台的设计与实现 什么是实时大数据平台 实时大数据平台和离线大数据平台还是有区别的,更强调数据的实时性.具体的架构,具体的代码该怎么写,模块怎么去构建,各个系统之间怎么去组织协调,都需要根据 ...
最新文章
- sqlce wp from查询语句详解
- !!基础---c# 下载网页+图片
- iOS中常见的内存问题
- 面试突然问Java多线程底层原理,我哭了!
- 驾驭系统 做一个Windows XP的“***”(图)3
- win11怎么取消pin码实现自动登陆 windows11取消pin码自动登陆的方法步骤
- 微服务实战(八):落地微服务架构到直销系统(服务高可用性)
- Java list 适配器_适配器基类--万能适配器(BaseAdapter)
- 【虚拟机】VirtualBox 安装 Windows 11 虚拟机简介
- Python源码学习(四)
- 用谷歌浏览器下载网页视频
- EGO1—实现计数器74HC163
- 用户帐户控制---为了对电脑进行保护,已经阻止此应用。---管理员已阻止你运行此应。有关详细信息,请与管理员联系。
- Linux进程管理和控制服务
- Snaker工作流学习(二)
- echarts(五)高级篇(多坐标轴、复杂多坐标轴)
- linux系统fasta程序,求助:如何用命令对fasta格式的序列按长短排序
- 苹果上网本报价_1小时一个价 iPhone12加价300元起
- ThinkPad P1 Gen4 是否支持单条4T固态?
- 为什么linux不需要整理磁盘,为什么Linux不需要磁盘碎片整理