Hadoop 风暴不可控的元组倍增

Hadoop 风暴不可控的元组倍增,hadoop,hive,apache-kafka,apache-storm,hortonworks-data-platform,Hadoop,Hive,Apache Kafka,Apache Storm,Hortonworks Data Platform,我正试图把卡夫卡的数据通过风暴在hdfs和蜂巢。我在霍顿工厂工作。因此,我有以下结构,正如在许多教程()中看到的(稍加修改): 我将kafka喷口数据直接发送到hdfs bolt,当我只使用hdfs bolt时,它就可以工作了。当我添加parse bolt来解析kafka数据并将其发送到hive bolt时,整个系统都疯了。即使我只是通过卡夫卡发送一条消息,卡夫卡喷口也会无限次地复制该消息,并将其写入hdfs infinite 如果解析螺栓中有错误,hdfs螺栓是否仍正常工作?我对这个话题还不熟

我正试图把卡夫卡的数据通过风暴在hdfs和蜂巢。我在霍顿工厂工作。因此,我有以下结构,正如在许多教程()中看到的(稍加修改):

我将kafka喷口数据直接发送到hdfs bolt,当我只使用hdfs bolt时,它就可以工作了。当我添加parse bolt来解析kafka数据并将其发送到hive bolt时,整个系统都疯了。即使我只是通过卡夫卡发送一条消息,卡夫卡喷口也会无限次地复制该消息,并将其写入hdfs infinite


如果解析螺栓中有错误,hdfs螺栓是否仍正常工作?我对这个话题还不熟悉,有人能看出初学者犯的一个简单错误吗?非常感谢您的建议。

您是否在两次执行结束时确认了这些消息

当您从您的卡夫卡喷口读取相同的流时,消息将锚定到相同的喷口,但具有唯一的消息ID。因此,本质上,即使解析螺栓的元组失败,因为它被锚定到同一个喷口,它也会在喷口处被重放。这将导致另一个元组使用不同的messageId,但为订阅它的所有螺栓播放相同的内容,在您的例子中是解析螺栓hdfs螺栓。 请记住,重播发生在喷口,因此从喷口订阅到该流的所有内容都将获得冗余消息

 TopologyBuilder builder = new TopologyBuilder();

 builder.setSpout("kafka-spout", kafkaSpout);

 builder.setBolt("hdfs-bolt", hdfsBolt).globalGrouping("kafka-spout");

 builder.setBolt("parse-bolt", new ParseBolt()).globalGrouping("kafka-spout");

 builder.setBolt("hive-bolt", hiveBolt).globalGrouping("parse-bolt");