Java Acked为零,具有字数拓扑

Java Acked为零,具有字数拓扑,java,apache-storm,Java,Apache Storm,我是storm的新手,我提交了storm初学者项目,单词计数拓扑 我得到 阿克德是零!我怎样才能修好它 任何不知道该项目的人的代码链接 包storm.starter; 导入backtype.storm.Config; 导入backtype.storm.LocalCluster; 导入backtype.storm.StormSubmitter; 导入backtype.storm.task.ShellBolt; 导入backtype.storm.topology.BasicOutCollecto

我是storm的新手,我提交了storm初学者项目,单词计数拓扑

我得到

阿克德是零!我怎样才能修好它

任何不知道该项目的人的代码链接

包storm.starter;
导入backtype.storm.Config;
导入backtype.storm.LocalCluster;
导入backtype.storm.StormSubmitter;
导入backtype.storm.task.ShellBolt;
导入backtype.storm.topology.BasicOutCollector;
导入backtype.storm.topology.IRichBolt;
导入backtype.storm.topology.outputfieldsclarer;
导入backtype.storm.topology.TopologyBuilder;
导入backtype.storm.topology.base.basecbolt;
导入backtype.storm.tuple.Fields;
导入backtype.storm.tuple.tuple;
导入backtype.storm.tuple.Values;
导入storm.starter.spout.RandomSentenceSpout;
导入java.util.HashMap;
导入java.util.Map;
/**
*该拓扑结构展示了Storm的流分组和多语言功能。
*/
公共类WordCountTopology{
公共静态类扩展ShellBolt实现IRichBolt{
公刑{
super(“python”、“splitsense.py”);
}
@凌驾
公共无效申报输出字段(OutputFields申报器申报器){
申报人申报(新字段(“word”);
}
@凌驾
公共映射getComponentConfiguration(){
返回null;
}
}
公共静态类WordCount扩展了BaseBasicBolt{
映射计数=新的HashMap();
@凌驾
public void execute(元组元组,BasicOutCollector){
String word=tuple.getString(0);
整数计数=计数。获取(字);
如果(计数=null)
计数=0;
计数++;
计数。放(字,计数);
emit(新值(字、计数));
}
@凌驾
公共无效申报输出字段(OutputFields申报器申报器){
声明(新字段(“单词”、“计数”));
}
}
公共静态void main(字符串[]args)引发异常{
TopologyBuilder=新TopologyBuilder();
生成器。设置管道(“管道”,新随机语句管道(),5);
builder.setBolt(“split”,新splitsencement(),8)、shuffleGrouping(“spoute”);
builder.setBolt(“count”,new WordCount(),12).Fields分组(“split”,new Fields(“word”);
Config conf=new Config();
conf.setDebug(true);
如果(args!=null&&args.length>0){
conf.setNumWorkers(3);
submitTopology(args[0],conf,builder.createTopology());
}
否则{
conf.setMaxTaskParallelism(3);
LocalCluster cluster=新的LocalCluster();
submitTopology(“字数”,conf,builder.createTopology());
睡眠(10000);
cluster.shutdown();
}
}
}

要想在暴风雨中得到元组,需要做几件事

  • 确保通过设置拓扑\u ackers\u Executors配置来启用ackers

    //in java
    conf.put(Config.TOPOLOGY_ACKER_EXECUTORS, 2);
    //in storm.yaml
    topology.acker.executors: 2  //defaults to 0
    
    您只需在这两个位置之一设置配置。storm.yaml是默认值,Java配置可以覆盖storm.yaml中的任何内容

  • 插销

    如上面的链接所述。必须将元组锚定在一起才能启用确认。在第一个
    收集器.emit
    中,将新创建的元组
    新值(word)
    锚定到旧元组。但是在第二个
    收集器.emit
    中,您没有锚定元组。元组需要彼此锚定,以便确认工作。我不知道如何在Python中实现这一点,所以您必须弄清楚这一点


  • 您可能还需要做其他事情,这个答案主要来自内存,我还没有测试过您的任何代码。但这应该给你一个起点。如果您有任何问题,请在提出另一个低质量问题之前阅读。我就是这样想出来的,你可能也应该学习发展这项技能。

    你能从你的拓扑结构中添加当前的代码吗?storm starter是storm的一个著名例子,因此与storm打交道的每个人都非常了解它!你为什么投反对票??!!你只需要代码,我会发布它?!我没有投你反对票,但根据Stackoverflow指南,你应该提供代码示例。因此,为了您的最大利益,您可能应该遵循这些指导原则。这可能就是其他人否决你的原因。对不起我的问题,但我知道每个人都知道storm在这个项目上有很好的背景。再次抱歉,首先谢谢你的说明。这个项目应该工作得很好,没有任何错误,而且它已经和其他人一起工作了,没有任何问题。所以我问,因为我不是编码员,或者这个项目应该工作得很好,因为我是新来的,所以我问,因为它可能是我不知道的东西,我没有在属性中设置它,我在这里搜索之前问,希望在没有问的情况下得到解决方案,但找不到东西,但感谢你!如果我听起来很严厉,我道歉。作为一个网站,stackoverflow有提问的指导方针,而你似乎没有遵守这些指导方针。你最初的问题听起来很像“给我一个密码”式的问题。在stackoverflow上问质量差的问题可能是得不到很好答案(如果有的话)的最快方法之一。你似乎没有努力去问这个问题,也没有试图自己找出答案。我在这里发布之前搜索过,但除了一篇帖子之外什么也没找到,我尝试了解决方法,但问题仍然存在!所以我在这里向storm的专家寻求帮助,在storm user和storm dev中也向他们寻求帮助,并尝试尝试topology.acker.executors:2不做任何更改您是否在Python中锚定元组?没有java中的所有代码,但如果您不介意的话,我还有一个问题,我应该在storm ui的列中有数字,而不单击show system stats,还是必须单击它才能获得numbres?
    //short java snippet
    String sentence = tuple.getString(0);
    for(String word: sentence.split(" ")) {
      _collector.emit(tuple, new Values(word)); //anchoring
      _collector.emit(new Values(word));        //not anchoring
    }
    _collector.ack(tuple);