`

storm ui上emit和transferred的区别

阅读更多
最开始对storm ui上展示出来的emit和transferred数量不是很明白, 于是在storm-user上google了一把, 发现有人也有跟我一样的困惑, nathan做了详细的回答:

emitted栏显示的数字表示的是调用OutputCollector的emit方法的次数.

transferred栏显示的数字表示的是实际tuple发送到下一个task的计数.

如果一个bolt A使用all group的方式(每一个bolt都要接收到)向bolt B发射tuple, 此时bolt B启动了5个task, 那么trasferred显示的数量将是emitted的5倍.

如果一个bolt A内部执行了emit操作, 但是没有指定tuple的接受者, 那么transferred将为0.

这里还有关于spout, bolt之间的emitted数量的关系讨论, 也解释了我的一些疑惑:
有的bolt的execture方法中并没有emit tuple, 但是storm ui中依然有显示emitted, 主要是因为它调用了ack方法, 而该方法将emit ack tuple到系统默认的acker bolt. 因此如果anchor方式emit一个tuple, emitted一般会包含向acker bolt发射tuple的数量.

另外collector.emit(new Values(xxx))和collector.emit(tuple, new Values(xxx)) 这两种不同的emit方法也会影响后面bolt的emitted和transferred, 如果是前者, 则后续bolt的这两个值都是0, 因为前一个emit方法是非安全的, 不再使用acker来进行校验.

分享到:
评论
2 楼 dy110936 2015-10-22  
dy110936 写道
如果一个bolt A使用all group的方式(每一个bolt都要接收到)向bolt B发射tuple, 此时bolt B启动了5个task, 那么trasferred显示的数量将是emitted的5倍. 


all group方式是每个bolt都发而不是每个bolt的task都发吧?


是task,我看错了
1 楼 dy110936 2015-10-22  
如果一个bolt A使用all group的方式(每一个bolt都要接收到)向bolt B发射tuple, 此时bolt B启动了5个task, 那么trasferred显示的数量将是emitted的5倍. 


all group方式是每个bolt都发而不是每个bolt的task都发吧?

相关推荐

    EMIT学习经典实例

    EMIT( Emitting Dynamic Methods Interface)是.NET框架中用于动态生成IL(Intermediate Language)代码的API,它允许程序员在运行时构建和执行方法。这个"EMIT学习经典实例"很显然是一个教学资源,包含了多个相关...

    Emit学习之旅

    Emit是.NET Framework的一部分,允许程序员在运行时构建和执行方法,这是实现元编程的重要工具。本文将详细介绍Emit的基础概念、核心API以及如何使用Emit来动态创建和执行方法。 Emit的基础知识: 1. **什么是IL**...

    emit 类库 流畅api

    流畅API则是在Emit库的基础上,通过链式调用来构造IL指令,使得代码更易读。例如,我们可以创建一个简单的加法方法: ```csharp using System; using System.Reflection.Emit; public class DynamicMath { public...

    pyqt5-combobox的使用,ui和业务分离版

    本教程将深入讲解如何在Python的PyQT5框架下使用Combobox,并实现UI与业务逻辑的分离,提高代码的可维护性和可扩展性。 首先,理解UI与业务逻辑分离的概念至关重要。UI负责展示应用程序的视觉元素,而业务逻辑处理...

    Emit实现AOP示例

    纯手工打造Emit实现AOP private static void OverrideMethods(TypeBuilder tb, MethodInfo method) { if (!method.IsPublic|| !method.IsVirtual || IsObjectMethod(method)) return; Type[] paramTypes = ...

    Emit 学习资源汇总

    Emit,全称为Event Emitter,是Node.js中的一个核心模块,它在JavaScript世界中扮演着事件驱动的重要角色。在本文中,我们将深入探讨Emit的相关知识点,包括其原理、用法以及在实际开发中的应用。 事件驱动是Node....

    Emit创建动态类

    在.NET框架中,C#提供了一种强大的编程技术,名为`System.Reflection.Emit`,它允许我们在运行时动态地创建类型、方法、属性等。标题"使用Emit创建动态类"揭示了这一技术的一个核心应用,即在程序执行过程中生成新的...

    storm程序代码示例

    Apache Storm是一个开源的分布式实时计算系统,它能够处理无界数据流,确保每个事件都得到正确的处理,即使在高并发和大规模数据输入的情况下也能保持高效。 **一、Storm简介** Apache Storm的核心概念包括:拓扑...

    Emit常用Opcode指令使用方法

    除了在网上查资料之外学习MSIL另一个好方法就是.Net Reflector和ildasm.exe配合使用,.Net Reflector可以把Emit代码转换为普通C#代码,ildasm.exe可以把普通C#代码转换为MSIL,不会写某一功能的Emit代码就先把它的C#...

    storm 示例demo

    简单的storm入门示例,从0到1让你清楚的理解storm.下面是代码示例: import backtype.storm.topology.BasicOutputCollector; import backtype.storm.topology.OutputFieldsDeclarer; import backtype.storm.topology...

    Emit语法简单实现

    Emit代码示例,包括含参、不含参、静态、非静态等8个例子

    PyQT5 emit 和 connect的用法详解

    在PyQT5中,`emit`和`connect`是用于信号和槽机制的关键函数,这是Qt库中的核心特性,使得对象间的通信变得简单且高效。PyQT5与PyQT4相比,有一些重要的改动,尤其是对于这两个函数的使用。本文将详细讲解PyQT5中`...

    Emit实现从URL或者表单中创建对象

    在IT行业中,Emit是一个非常重要的概念,尤其在JavaScript或TypeScript等动态语言中,它通常与事件处理和对象创建有关。在这个特定的场景中,"Emit实现从URL或者表单中创建对象"指的是利用Emit机制来解析URL或表单...

    Emit实现动态代理

    `Emit`是C#中的一个编译时代码生成工具,它允许我们在运行时动态地创建类型和方法。 动态代理的主要应用场景包括:AOP(面向切面编程)、性能监控、事务管理、缓存策略等。这些场景中,我们通常希望在不修改原始...

    面试官-Vue.js 中的 $emit 和 $on 方法有什么区别?.pdf

    Vue.js 中的 $emit 和 $on 方法有什么区别? 在 Vue.js 中,$emit 和 $on 方法是两个常用的方法,用于实现组件间的通信。它们可以让我们在一个组件中触发一个自定义事件,并在另一个组件中监听这个事件,从而实现...

    $emit触发事件拿不到传递的参数.zip

    你需要在适当的地方和正确的上下文中使用它,通常是某个方法内: ```javascript methods: { childMethod() { this.$emit('childEvent', { key: 'value' }); } } ``` 确保在触发事件时,传递了需要的参数。 ...

    使用MSIL采用Emit方式实现C#的代码生成与注入.rar

    本教程将深入探讨如何使用MSIL和Emit API来生成和注入C#代码。 首先,让我们了解Emit API的基本概念。Emit API提供了一种编程模型,允许程序员逐个指令地创建MSIL。这涉及到创建方法定义,定义局部变量,然后通过`...

    Storm中spout和bolt之间发送和接收数据的java源代码实例

    在Apache Storm分布式流处理框架中,Spout和Bolt是两个核心组件,它们协同工作以处理实时数据流。本篇文章将深入探讨Spout和Bolt之间的数据交互,并提供相关的Java源代码实例,帮助你理解这一过程。 首先,让我们...

Global site tag (gtag.js) - Google Analytics