将风暴的字数拓扑与kafka结合起来

时间:2015-03-27 05:53:06

标签: apache-storm apache-kafka kafka-consumer-api

我正在尝试将风暴的字数统计程序与kafka集成,因为我的生产者工作正常,即它正在读取文本文件并将每行作为消息发送,我可以在简单的消费者控制台中看到这些消息。 现在,为了将它与风暴集成,即将这些消息/线路发送到消费者喷口,我刚刚用风暴喷口集成依赖的kafka喷口替换了以前的字数统计程序风暴喷口,其余的程序是相同的,我正在尝试在eclipse中运行它但它没有执行,我不知道是什么问题,甚至不知道我是否正确地执行它,这是我的主要类 -

package com.spnotes.storm;
import storm.kafka.BrokerHosts;
import storm.kafka.KafkaSpout;
import storm.kafka.SpoutConfig;
import storm.kafka.StringScheme;
import storm.kafka.ZkHosts;
import backtype.storm.Config;
import backtype.storm.LocalCluster;
import backtype.storm.spout.SchemeAsMultiScheme;
import backtype.storm.topology.TopologyBuilder;

import com.spnotes.storm.bolts.WordCounterBolt;
import com.spnotes.storm.bolts.WordSpitterBolt;

public class WordCount {

public static void main(String[] args) throws Exception{
    Config config = new Config();
    config.setDebug(true);
    config.put(Config.TOPOLOGY_MAX_SPOUT_PENDING, 1);
    BrokerHosts hosts = new ZkHosts("localhost:9092");
    SpoutConfig spoutConfig = new SpoutConfig(hosts, "test", "localhost:2181", "id1");
    spoutConfig.scheme = new SchemeAsMultiScheme(new StringScheme());
    KafkaSpout kafkaSpout = new KafkaSpout(spoutConfig);

    TopologyBuilder builder = new TopologyBuilder();

    builder.setSpout("line-reader-spout", kafkaSpout);

    builder.setBolt("word-spitter", new WordSpitterBolt()).shuffleGrouping("line-reader-spout");

    builder.setBolt("word-counter", new WordCounterBolt()).shuffleGrouping("word-spitter");


    LocalCluster cluster = new LocalCluster();
    System.out.println("submit topology");
    Thread.sleep(10000);
    //StormSubmitter.submitTopology("HelloStorm5", config, builder.createTopology());
    cluster.submitTopology("HelloStorm5", config, builder.createTopology());
    cluster.shutdown();
}

}

有2个螺栓WordSplitterBolt()和WordCounterBolt(),Wordsplitterbolt将每行/消息分成标记/单词,WordCounterBolt正在计算每个单词。任何人都可以告诉我,我做错了什么吗?我需要创建自己的喷口而不是使用预定义的KafkaSpout吗?我的主要课程是否正确?

1 个答案:

答案 0 :(得分:2)

更改代码:

        BrokerHosts hosts = new ZkHosts(zkConnect);

zkConnect是zookeeper的主机名和端口,不适用于kafka。将其更改为localhost:2181

正如聊天中讨论的与代码相关的休息问题。

问题在于Maven依赖。将所有依赖关系都包含在POM.xml中。