`
zhouchaofei2010
  • 浏览: 1106938 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Storm内部通信机制分析(转)

 
阅读更多

一、任务执行及通信的单元

Storm中关于任务执行及通信的三个概念:Worker(进程)、Executor(线程)和TaskSpoutBolt

1、  一个worker进程执行的是一个Topology的子集(不会出现一个worker进程为多个Topology服务),一个worker进程会启动一个或多个executor线程来执行一个topologycomponentSpoutBolt),因此,一个运行中的topology就是由集群中多台物理机上的多个worker进程组成的;

2、  Executor是一个被Worker进程启动的单独线程,每个executor只会运行一个topology的一个componentspoutbolt)的tasktask可以是一个或多个,Storm默认是一个component只生成一个taskexecutor线程会在每次循环里顺序调用所有task实例);

3、  Task是最终运行spoutbolt中代码的单元(一个task即为spoutbolt的一个实例,executor线程在执行期间会调用该tasknextTupleexecute方法)topology启动后,一个componentspoutbolt)的task数目是固定不变的,但该component使用的executor线程可以动态调整(例如:一个executor线程可以执行该component的一个或多个task实例)这意味着,对于一个component存在这样的条件,threads<=tasks(即,线程数小于task数目)。默认情况下task的数目等于executor线程数目,即一个executor线程只运行一个task

 

二、Storm内部通信机制简单介绍

1、  同一worker间消息的发送使用的是LMAX Disruptor,它负责同一节点(同一进程内)上线程间的通信;

A、Disruptor使用了一个RingBuffer替代队列,用生产者消费者指针替代锁。

B、生产者消费者指针使用CPU支持的整数自增,无需加锁并且速度很快。Java的实现在Unsafe package中。

2、  不同worker间通信使用ZeroMQ0.8)或Netty0.9.0);

3、  不同topologey之间的通信,Storm不负责,我们需要自己想办法实现,例如使用kafka等;

Worker进程内部的结构图如下所示:

http://www.michael-noll.com/blog/uploads/storm-internal-message-queues.png

每一个worker进程都有一个单独的线程来监听该worker的端口号,并接收发送到该端口的数据,它将通过网络发送过来的数据放到worker的接收队列里面。

它监听的端口号是通过supervisor.slots.ports定义的。

接收队列的大小是通过topology.receiver.buffer.size定义的,默认值为8.

       DisruptorStorm中的应用如下图所示:

http://images.cnitblog.com/blog/312753/201307/23153829-4ebd07b835ca46408f9e1b1f6282fe84.png

三、与通信相关的几个配置项介绍:

1、  supervisor.slots.ports:worker进程的接收线程的监听端口;

2、  topology.receiver.buffer.size:worker接收线程缓存消息的大小,它将该缓存消息发送给executor线程;需要为2的倍数

3、  topology.transfer.buffer.size:worker进程中向外发送消息的缓存大小;

4、  topology.executor.receive.buffer.size:executor线程的接收队列大小;需要为2的倍数

5、  topology.executor.send.buffer.size:executor线程的发送队列大小;需要为2的倍数

 

http://www.michael-noll.com/blog/2013/06/21/understanding-storm-internal-message-buffers/文章中作者给出的初始建议配置如下:

Try the following settings as a first start and see whether it improves the performance of your Storm topology

conf.put(Config.TOPOLOGY_RECEIVER_BUFFER_SIZE,             8);

conf.put(Config.TOPOLOGY_TRANSFER_BUFFER_SIZE,            32);

conf.put(Config.TOPOLOGY_EXECUTOR_RECEIVE_BUFFER_SIZE, 16384);

conf.put(Config.TOPOLOGY_EXECUTOR_SEND_BUFFER_SIZE,    16384);

 

转自:http://support.huawei.com/ecommunity/bbs/10242723.html

分享到:
评论

相关推荐

    storm实时数据分析 用到的技术分析

    4. Storm内部运行机制:Storm通过Zookeeper集群来协调节点之间的工作,并保证任务分配的高效和可靠性。Zookeeper会存储工作节点的心跳、状态以及整个集群的配置和状态信息。Nimbus节点无状态,所有的状态信息都保...

    Storm源码走读笔记

    本文档是关于Storm源码的详细走读笔记,主要分析了Storm的启动场景、Topology提交过程、worker进程中的线程使用情况、消息传递机制以及 TridentTopology的创建和ack机制等多个方面。 首先,文档提到了Storm集群中的...

    Storm笔记-PPT

    3. **并发与通信机制**:每个Spout和Bolt可以有多个实例并发运行,通过TCP/IP进行进程间的通信。 **六、Storm应用场景** 1. **实时分析**:在广告推荐、社交媒体分析等领域,对实时产生的大量数据进行快速分析。 2...

    storm组件应用说明书

    2. **安装ZMQ (ZeroMQ)**:ZMQ是Storm内部通信的底层库,用于节点间的高效通信。需安装ZMQ 2.1.7版本,并验证其正确安装和运行。 3. **安装JZMQ**:JZMQ是Java对ZMQ的绑定,使得Storm能够利用ZMQ的功能。确保JZMQ...

    apache-storm-0.9.5源码

    总的来说,分析Apache Storm 0.9.5的源码,我们可以深入了解其设计思想、内部机制和实现细节,这对于开发者在实际项目中优化性能、解决故障、定制功能都有极大的帮助。同时,这也为理解后续版本的改进和发展提供了...

    Kerberos之后 storm UI

    4. 监控和管理:使用支持Kerberos的工具(如jconsole、VisualVM等)安全地连接到JMX端口,查看和分析Storm集群的运行状况。 总结来说,"Kerberos之后 storm UI"意味着在安全环境中,我们需要理解如何配置和使用...

    Real-time Analytics with Storm and Cassandra源码

    此外,Cassandra还采用了一种名为Gossip协议的节点间通信机制,用于节点发现和数据复制,保证了系统的高可用性。 在实际项目中,Storm通常被用来实时处理和分析数据流,然后将结果存入Cassandra数据库。这种方式...

    strom源码分析

    - 通信机制:分析Storm内部各组件之间以及与Zookeeper之间的通信机制,包括消息的序列化、传输和反序列化。 - 故障恢复:Storm提供故障检测与恢复机制,源码分析时需要了解如何实现故障转移和作业的重新启动。 在...

    storm实时计算

    相比于传统的批处理方式,Storm提供了更实时的数据处理能力,使得它在大数据领域特别是实时数据分析场景中备受青睐。 #### 二、Storm的核心组件 Storm的核心组件主要包括Spout、Bolt以及Topology。这些组件构成了...

    apache-storm-1.2.3.rar

    源代码可以帮助理解其内部实现机制,配置文件可以定制化Storm集群的运行参数,示例拓扑则为初学者提供了快速上手的起点。 总的来说,Apache Storm 1.2.3是一个强大的实时数据处理框架,适用于需要实时分析、大数据...

    光纤分析标准模型.rar_comsol_comsol 光纤_comsol光纤_storm4ev_光纤

    总之,这个Comsol光纤分析模型为研究人员和工程师提供了一个实用的工具,用于深入理解光纤的物理机制,并优化光纤设计,以提升光通信系统的性能和可靠性。无论是教育目的还是实际工程应用,该模型都具有很高的价值。

    大数据课程体系.docx

    - **Hadoop底层IPC原理和RPC**:探讨Hadoop内部通信机制,包括RPC(远程过程调用)的实现细节。 - **Hadoop底层googleProtoBuf的协议分析**:分析Google Protobuf在Hadoop中的应用情况。 #### 四、分布式数据库...

    数据仓库建设方案设计.docx

    在这个案例中,专家系统专注于车辆监控和故障诊断,通过车地通信接收实时或离线数据,并提供故障处理建议。 1.1 数据仓库总体架构 数据仓库的架构通常包含以下几个核心组成部分: - **数据采集**:这是数据仓库的...

    大数据课程体系

    - **Hadoop底层IPC原理和RPC**:讲解Hadoop内部的远程过程调用机制。 - **Hadoop的底层googleProtoBuf的协议分析**:分析Google Protobuf协议在Hadoop中的应用。 #### 四、分布式数据库与数据仓库 - **Hbase**:...

    hmyjsmst.docx

    以上内容涵盖了大数据领域的关键技术点,包括但不限于分布式计算框架、资源调度、数据分析步骤、Hive、Hadoop HA、Hadoop联邦机制、Storm、Kafka以及HBase等,旨在帮助读者全面了解大数据领域的核心技术及其实现细节...

    大数据课程体系 (2).docx

    事件分发机制确保高效的数据流动,而IPC(进程间通信)和RPC(远程过程调用)则为Hadoop内部通信提供基础。Google ProtoBuf是Hadoop底层使用的序列化协议,用于数据交换。 HBase是NoSQL数据库,与关系型数据库RDBMS...

    微信技术总监分享架构设计

    同时,结合实时计算框架如Storm或Flink,进行在线数据分析,实现消息推送的个性化和精准化。 此外,微信在移动端的优化也值得一提。为了在各种设备和网络环境下保持良好的用户体验,微信进行了大量的性能优化,包括...

    云环境的安全建设思考.pptx

    - 东西向流量监测,即同一云内的通信,也是云环境安全的一大挑战,需要设计有效的内部防护机制。 总的来说,云环境的安全建设需要综合运用各种技术手段,包括但不限于流量识别工具、主机Agent、访问控制策略、资产...

Global site tag (gtag.js) - Google Analytics