原文:http://stackoverflow.com/questions/19807395/how-would-i-split-a-stream-in-apache-storm

问题:
我现在不清楚如何在storm里拆分stream流。比如,我的Bolt A经过计算有somevalue1, somevalue2, and somevalue3等值。我希望发送somevalue1到bolt B,somevalue2到bolt C,somevalue1,somevalue2到bolt D。在strom里我应当怎么做?我应当在我的topology里使用何种grouping?提前先感谢您的帮助。

--------------------------------------------

回答:

你的情况可以使用多个stream流来应对,这并不是真正意义的拆分,但你将获得很多灵活性,你可以把它视为基于bolt实例内容的路由。

你需要在boltA中声明stream:

@Override
public void declareOutputFields(final OutputFieldsDeclarer outputFieldsDeclarer) {
  outputFieldsDeclarer.declareStream("stream1", new Fields("field1"));
  outputFieldsDeclarer.declareStream("stream2", new Fields("field1"));
}

在boltA里选择性的提交stream流:

collector.emit("stream1", new Values("field1Value"));
collector.emit("stream2", new Values("field1Value"));

在拓扑定义时设置监听接收正确的stream流

builder.setBolt("boltB", new MyBolt1()).shuffleGrouping("boltA", "stream1");
builder.setBolt("boltC", new MyBolt2()).shuffleGrouping("boltA", "stream2");
builder.setBolt("boltD", new MyBolt3()).shuffleGrouping("boltA", "stream1").shuffleGrouping("boltA", "stream2");

[QA翻译]如何在Storm里拆分stream流?的更多相关文章

  1. 如何在BIOS里设置定时关机?

    如何在BIOS里设置定时关机? 通过CMOS设置实现定时开机的设置过程如下: 首先进入"CMOS SETUP"程序(大多数主板是在计算机启动时按DEL键进入): 然后将光条移到&q ...

  2. [翻译] 如何在 ASP.Net Core 中使用 Consul 来存储配置

    [翻译] 如何在 ASP.Net Core 中使用 Consul 来存储配置 原文: USING CONSUL FOR STORING THE CONFIGURATION IN ASP.NET COR ...

  3. 如何在IDEA里给大数据项目导入该项目的相关源码(博主推荐)(类似eclipse里同一个workspace下单个子项目存在)(图文详解)

    不多说,直接上干货! 如果在一个界面里,可以是单个项目 注意:本文是以gradle项目的方式来做的! 如何在IDEA里正确导入从Github上下载的Gradle项目(含相关源码)(博主推荐)(图文详解 ...

  4. [转]如何在 Git 里撤销(几乎)任何操作

    任何版本控制系统的一个最有的用特性就是“撤销 (undo)”你的错误操作的能力.在 Git 里,“撤销” 蕴含了不少略有差别的功能. 当你进行一次新的提交的时候,Git 会保存你代码库在那个特定时间点 ...

  5. 启动phpstyle Apache的80端口被win7的System PID=4的进程占用的解决方法 以及 如何在phpStyle里发布程序

    学习前端是,用到Ajax,php语言,操作mysql数据库,浏览器无法解析php代码(把源码输出):原因,我之前用的是tomcat服务器写jsp,servlet,php用的是apache服务器,没有配 ...

  6. Maven:如何在eclipse里新建一个Maven的java项目和web项目

    如何在eclipse里新建一个Maven的java项目和web项目: 一:java项目 New-->Other-->Maven 右击项目-->properties,修改以下文件: ① ...

  7. 如何在Kubernetes里创建一个Nginx service

    Jerry之前的文章如何在Kubernetes里创建一个Nginx应用,已经使用kubectl命令行创建了Pod,但是在kubernetes中,Pod的IP地址会随着Pod的重启而变化,因此用Pod的 ...

  8. Storm实时计算:流操作入门编程实践

    转自:http://shiyanjun.cn/archives/977.html Storm实时计算:流操作入门编程实践   Storm是一个分布式是实时计算系统,它设计了一种对流和计算的抽象,概念比 ...

  9. 简洁方便的集合处理——Java 8 stream流

    背景 java 8已经发行好几年了,前段时间java 12也已经问世,但平时的工作中,很多项目的环境还停留在java1.7中.而且java8的很多新特性都是革命性的,比如各种集合的优化.lambda表 ...

随机推荐

  1. C# MVC跳转

    MVC方式: 显示提示框,并返回上一页 return Content("<script>alert('暂时没有实践作业!');history.go(-1);</script ...

  2. struts2的占位符*在action中的配置方法

    转自:https://blog.csdn.net/u012546338/article/details/68946633 在配置<action> 时,可以在 name,class,meth ...

  3. OGG双向复制

    注意:在进行如下配置之前,先在源数据库(原来的目标数据库)端添加辅助的redolog配置:      1.SQL> alter database add supplemental log dat ...

  4. com.mysql.jdbc.Driver to com.mysql.cj.jdbc.Driver

    com.mysql.jdbc.Driver tocom.mysql.cj.jdbc.Driver MySQL :: MySQL Connector/J 8.0 Developer Guide :: 4 ...

  5. 【css a标签 鼠标悬浮时变手型】

    <a href="#" style="cursor:pointer">

  6. Python开发【Tornado】:异步Web服务(一)

    异步Web服务 前言: 到目前为止,我们已经看到了许多使Tornado成为一个Web应用强有力框架的功能.它的简单性.易用性和便捷性使其有足够的理由成为许多Web项目的不错的选择.然而,Tornado ...

  7. Android之上下文context

    Context,中文直译为“上下文”,SDK中对其说明如下: 1.它描述的是一个应用程序环境的信息,即上下文. 2.该类是一个抽象(abstract class)类,Android提供了该抽象类的具体 ...

  8. Android中的Handler及它所引出的Looper、MessageQueue、Message

    0.引入 0.1.线程间通信的目的 首先,线程间通信要交流些什么呢? 解答这个问题要从为什么要有多线程开始,需要多线程的原因大概有这些 最早也最基本:有的任务需要大量的时间,但其实并不占用计算资源,比 ...

  9. form表单上传图片问题:线下可以而线上不可以

    由于上传图片需要一定时间,而线下速度快线上速度慢. 所以如果你的上传窗口是弹出界面,那么就会面临上传未完成就关闭了该界面.导致上传失败.

  10. apache ab test使用 单独安装ab和htpasswd

    apache ab test使用 apache ab test使用 单独安装ab和htpasswd 转载自: http://www.cnblogs.com/super-d2/p/3831155.htm ...