一、任务执行及通信的单元
Storm中关于任务执行及通信的三个概念:Worker(进程)、Executor(线程)和Task(Spout、Bolt)
1、 一个worker进程执行的是一个Topology的子集(不会出现一个worker进程为多个Topology服务),一个worker进程会启动一个或多个executor线程来执行一个topology的component(Spout或Bolt),因此,一个运行中的topology就是由集群中多台物理机上的多个worker进程组成的;
2、 Executor是一个被Worker进程启动的单独线程,每个executor只会运行一个topology的一个component(spout或bolt)的task(task可以是一个或多个,Storm默认是一个component只生成一个task,executor线程会在每次循环里顺序调用所有task实例);
3、 Task是最终运行spout或bolt中代码的单元(一个task即为spout或bolt的一个实例,executor线程在执行期间会调用该task的nextTuple或execute方法)topology启动后,一个component(spout或bolt)的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间通信使用ZeroMQ(0.8)或Netty(0.9.0);
3、 不同topologey之间的通信,Storm不负责,我们需要自己想办法实现,例如使用kafka等;
Worker进程内部的结构图如下所示:
每一个worker进程都有一个单独的线程来监听该worker的端口号,并接收发送到该端口的数据,它将通过网络发送过来的数据放到worker的接收队列里面。
它监听的端口号是通过supervisor.slots.ports定义的。
接收队列的大小是通过topology.receiver.buffer.size定义的,默认值为8.
Disruptor在Storm中的应用如下图所示:
三、与通信相关的几个配置项介绍:
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);
相关推荐
4. Storm内部运行机制:Storm通过Zookeeper集群来协调节点之间的工作,并保证任务分配的高效和可靠性。Zookeeper会存储工作节点的心跳、状态以及整个集群的配置和状态信息。Nimbus节点无状态,所有的状态信息都保...
本文档是关于Storm源码的详细走读笔记,主要分析了Storm的启动场景、Topology提交过程、worker进程中的线程使用情况、消息传递机制以及 TridentTopology的创建和ack机制等多个方面。 首先,文档提到了Storm集群中的...
3. **并发与通信机制**:每个Spout和Bolt可以有多个实例并发运行,通过TCP/IP进行进程间的通信。 **六、Storm应用场景** 1. **实时分析**:在广告推荐、社交媒体分析等领域,对实时产生的大量数据进行快速分析。 2...
2. **安装ZMQ (ZeroMQ)**:ZMQ是Storm内部通信的底层库,用于节点间的高效通信。需安装ZMQ 2.1.7版本,并验证其正确安装和运行。 3. **安装JZMQ**:JZMQ是Java对ZMQ的绑定,使得Storm能够利用ZMQ的功能。确保JZMQ...
总的来说,分析Apache Storm 0.9.5的源码,我们可以深入了解其设计思想、内部机制和实现细节,这对于开发者在实际项目中优化性能、解决故障、定制功能都有极大的帮助。同时,这也为理解后续版本的改进和发展提供了...
4. 监控和管理:使用支持Kerberos的工具(如jconsole、VisualVM等)安全地连接到JMX端口,查看和分析Storm集群的运行状况。 总结来说,"Kerberos之后 storm UI"意味着在安全环境中,我们需要理解如何配置和使用...
此外,Cassandra还采用了一种名为Gossip协议的节点间通信机制,用于节点发现和数据复制,保证了系统的高可用性。 在实际项目中,Storm通常被用来实时处理和分析数据流,然后将结果存入Cassandra数据库。这种方式...
- 通信机制:分析Storm内部各组件之间以及与Zookeeper之间的通信机制,包括消息的序列化、传输和反序列化。 - 故障恢复:Storm提供故障检测与恢复机制,源码分析时需要了解如何实现故障转移和作业的重新启动。 在...
相比于传统的批处理方式,Storm提供了更实时的数据处理能力,使得它在大数据领域特别是实时数据分析场景中备受青睐。 #### 二、Storm的核心组件 Storm的核心组件主要包括Spout、Bolt以及Topology。这些组件构成了...
源代码可以帮助理解其内部实现机制,配置文件可以定制化Storm集群的运行参数,示例拓扑则为初学者提供了快速上手的起点。 总的来说,Apache Storm 1.2.3是一个强大的实时数据处理框架,适用于需要实时分析、大数据...
总之,这个Comsol光纤分析模型为研究人员和工程师提供了一个实用的工具,用于深入理解光纤的物理机制,并优化光纤设计,以提升光通信系统的性能和可靠性。无论是教育目的还是实际工程应用,该模型都具有很高的价值。
- **Hadoop底层IPC原理和RPC**:探讨Hadoop内部通信机制,包括RPC(远程过程调用)的实现细节。 - **Hadoop底层googleProtoBuf的协议分析**:分析Google Protobuf在Hadoop中的应用情况。 #### 四、分布式数据库...
在这个案例中,专家系统专注于车辆监控和故障诊断,通过车地通信接收实时或离线数据,并提供故障处理建议。 1.1 数据仓库总体架构 数据仓库的架构通常包含以下几个核心组成部分: - **数据采集**:这是数据仓库的...
- **Hadoop底层IPC原理和RPC**:讲解Hadoop内部的远程过程调用机制。 - **Hadoop的底层googleProtoBuf的协议分析**:分析Google Protobuf协议在Hadoop中的应用。 #### 四、分布式数据库与数据仓库 - **Hbase**:...
以上内容涵盖了大数据领域的关键技术点,包括但不限于分布式计算框架、资源调度、数据分析步骤、Hive、Hadoop HA、Hadoop联邦机制、Storm、Kafka以及HBase等,旨在帮助读者全面了解大数据领域的核心技术及其实现细节...
事件分发机制确保高效的数据流动,而IPC(进程间通信)和RPC(远程过程调用)则为Hadoop内部通信提供基础。Google ProtoBuf是Hadoop底层使用的序列化协议,用于数据交换。 HBase是NoSQL数据库,与关系型数据库RDBMS...
同时,结合实时计算框架如Storm或Flink,进行在线数据分析,实现消息推送的个性化和精准化。 此外,微信在移动端的优化也值得一提。为了在各种设备和网络环境下保持良好的用户体验,微信进行了大量的性能优化,包括...
- 东西向流量监测,即同一云内的通信,也是云环境安全的一大挑战,需要设计有效的内部防护机制。 总的来说,云环境的安全建设需要综合运用各种技术手段,包括但不限于流量识别工具、主机Agent、访问控制策略、资产...