Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 卡夫卡没有收到卡夫卡的任何东西_Java_Linux_Apache Storm_Apache Zookeeper - Fatal编程技术网

Java 卡夫卡没有收到卡夫卡的任何东西

Java 卡夫卡没有收到卡夫卡的任何东西,java,linux,apache-storm,apache-zookeeper,Java,Linux,Apache Storm,Apache Zookeeper,我正试图建立一个卡夫卡风暴“你好世界”系统。我已经安装并运行了Kafka,当我使用Kafka producer发送数据时,我可以使用Kafka console consumer读取数据 我从O'Reilly的《风暴入门》一书中选取了第二章的例子,并将其修改为使用卡夫卡斯库特(KafkaSpout)而不是普通的喷口 当我运行应用程序时,kafka中的数据已经挂起,KafkaSpout的下一个线程不会收到任何消息——它进入,尝试在协调器下的空管理器列表上迭代,然后退出 我的环境是一个相当旧的Clou

我正试图建立一个卡夫卡风暴“你好世界”系统。我已经安装并运行了Kafka,当我使用Kafka producer发送数据时,我可以使用Kafka console consumer读取数据

我从O'Reilly的《风暴入门》一书中选取了第二章的例子,并将其修改为使用卡夫卡斯库特(KafkaSpout)而不是普通的喷口

当我运行应用程序时,kafka中的数据已经挂起,KafkaSpout的下一个线程不会收到任何消息——它进入,尝试在协调器下的空管理器列表上迭代,然后退出

我的环境是一个相当旧的Cloudera虚拟机,有Storm 0.9和Kafka-Storm-0.9(最新版本)以及Kafka 2.9.2-0.7.0

这是我如何定义SpoutConfig和拓扑的:

String zookeepers = "localhost:2181";

SpoutConfig spoutConfig = new SpoutConfig(new SpoutConfig.ZkHosts(zookeepers, "/brokers"),
        "gtest",
        "/kafka",  // zookeeper root path for offset storing
        "KafkaSpout");
spoutConfig.forceStartOffsetTime(-1);

KafkaSpoutTester kafkaSpout = new KafkaSpoutTester(spoutConfig);


//Topology definition
TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("word-reader", kafkaSpout, 1);
builder.setBolt("word-normalizer", new WordNormalizer())
    .shuffleGrouping("word-reader");
builder.setBolt("word-counter", new WordCounter(),1)
    .fieldsGrouping("word-normalizer", new Fields("word"));

//Configuration
Config conf = new Config();
conf.put("wordsFile", args[0]);
conf.setDebug(false);
//Topology run
conf.put(Config.TOPOLOGY_MAX_SPOUT_PENDING, 1);
cluster = new LocalCluster();
cluster.submitTopology("Getting-Started-Toplogie", conf, builder.createTopology());
有人能帮我弄清楚为什么我没有收到任何东西吗

谢谢, G

您正在使用“gtest”主题来接收数据。确保制作人正在发送此主题的数据

在螺栓中,像那样打印元组

public void execute(Tuple tuple, BasicOutputCollector collector) {
        System.out.println(tuple);
    }

它应该在卡夫卡中打印挂起的数据。

如果您已经使用了该消息,则不应再读取该消息,除非您的制作人生成新消息。这是因为在代码中使用
-1
调用了
forceStartOffsetTime

格式文件:

喷口中另一个非常有用的配置是强制喷口倒带到上一个偏移的能力。在喷口配置上执行forceStartOffsetTime,如下所示:

它将选择围绕该时间戳写入的最新偏移量开始使用。可以通过传入-1强制喷口始终从最新偏移开始,也可以通过传入-2强制喷口从最早偏移开始


你看起来怎么样?有一个片段会很有用。你可以用-2替换-1,看看你是否收到任何东西,如果你的制作人没事,那么你应该可以消费。

我经历了一些悲伤,将《暴风雨》和《卡夫卡》整合在一起。这些都是快速发展且相对年轻的项目,因此很难找到工作示例来启动您的开发

为了帮助其他开发人员(并希望让其他人提供有用的示例,我也可以使用这些示例),我启动了一个github项目来存放与Storm/Kafka(和Esper)开发相关的代码片段

欢迎您在此查看>

(单击storm+kafka目录中的示例程序,该程序将帮助您启动并运行)

public void execute(Tuple tuple, BasicOutputCollector collector) {
        System.out.println(tuple);
    }
   spoutConfig.forceStartOffsetTime(-2);
SpoutConfig spoutConf = new SpoutConfig(...)
spoutConf.startOffsetTime = kafka.api.OffsetRequest.LatestTime();