当前位置: 首页 > 知识库问答 >
问题:

如何将多个(不同的)元组从一个KafkaSpout一次发送到bolt?

罗浩然
2023-03-14

我是阿帕奇Storm的新手。

请救命!!

我的拓扑:

TopologyBuilder builder=new TopologyBuilder();

这里,我试图从事件流中获取长度为3的窗口中的第一个和最后一个事件。但是我得到的第一个和最后一个事件是一样的,因为KafkaSpout一次只发送一个元组。

共有1个答案

锺离良哲
2023-03-14

spout不能这样做,但是您可以使用Storm的窗口支持https://storm.apache.org/releases/2.0.0-snapshot/windowing.html,或者只编写一个聚合螺栓并将其放在spout和拓扑的其余部分之间。

所以您的拓扑结构应该是spout->aggregator->feature selection->trend detection

我建议您尝试一下内置的窗口化支持,但是如果您更愿意编写自己的聚合,那么您的bolt实际上只需要接收一些元组(例如3),并发出一个包含所有值的新元组。

聚合器螺栓应该执行如下操作

private List<Tuple> buffered;

execute(Tuple input) {
  if (buffered.size != 2) {
    buffered.add(input)
    return
  }
  Tuple first = buffered.get(0)
  Tuple second = buffered.get(1)
  Values aggregate = new Values(first.getValues(), second.getValues(), input.getValues())
  List<Tuple> anchors = List.of(first, second, input)
  collector.emit(anchors, aggregate)
  collector.ack(first, second, input)
  buffered.clear()
}

这样,您就得到一个包含3个输入元组内容的元组。

 类似资料:
  • 问题内容: 我有两个卡夫卡喷口,我要将其值发送到同一螺栓。 可能吗 ? 问题答案: 是的,有可能: 您也可以使用任何其他分组。 更新: 为了区分使用者螺栓中的元组(即topic_1或topic_2),有两种可能性: 1)您可以使用操作员ID(如@ user-4870385所建议): 2)您可以使用流名称(@zenbeni建议)。对于这种情况,两个喷口都需要声明命名流,而螺栓需要通过流名称连接到喷口

  • 我有一个名为TwoNumbers的类,它创建一个包含两个数字的对象。我创建了一个包含此对象的ArrayList<>,并希望将这些对象复制到新的ArrayList中。 问题是我只想将不同的对象复制到新的ArrayList中。当对象内部的数字可能相同时,Java将每个对象视为不同的对象,我不知道如何阻止它复制每个对象。 我的TwoNumber类:公共TwoNumbers(int n1,int n2)

  • 问题内容: 我对android非常陌生,我正在尝试将用户输入的数据(他们的名字)发送到另一个活动。过去,我可以使用Intent在活动之间发送单行代码,但是我无法解决如何向两个不同的TextView发送两个不同的字符串。 这是到目前为止我的MainActivity代码: 我第二项活动MainGame的代码: 当我运行它时,我得到了两个TextView中都为“ name2”添加的内容。我需要做些什么来

  • 问题内容: 我想知道是否有任何意识形态的方法将多个InputStream链接到Java(或Scala)的一个连续InputStream中。 我需要的是解析从FTP服务器通过网络加载的平面文件。我要做的是获取文件[1..N],打开流,然后将它们组合为一个流。因此,当file1结束时,我想从file2开始读取,依此类推,直到到达fileN的末尾。 我需要按特定顺序读取这些文件,数据来自遗留系统,该系统

  • 我在一个类中有一个imageView,在单击imageView时,会出现一个对话框,它有两个选项,可以从相机中获取图像,也可以打开设备的图像库。我想将图像从一个类发送到另一个类,这样它就可以出现在ImageView中。我搜索了很多小时,但我只得到关于从一个类到另一个类的文本数据发送。谁能告诉我从一个类到另一个类的图像发送? 这是来自sender类的代码,它将获取图像。 谢谢你的帮助

  • 问题内容: 我有一个JSP文件为 jsp 1.jsp ,另一个JSP文件为 jsp 2.jsp 我已经包括 JSP 2.jsp 在 JSP 1.jsp页面 使用 现在,我需要某些元素上的click事件。在那件事上,我想将一个字符串变量传递给包含的jsp。 假设我有一个列表,单击它后,我想将该列表的名称转移到另一个JSP, 在另一个JSP中,我试图使用该字符串执行某些任务。 我在没有任何servle