【问题标题】:storm uncontrolled tuple multiplikation风暴不受控制的元组乘法
【发布时间】:2015-07-15 02:32:02
【问题描述】:

我正在尝试将 kafka-data 置于 hdfs 和 hive 中。我正在与 hortonworks 合作。因此,我有以下结构,正如在许多教程 (http://henning.kropponline.de/2015/01/24/hive-streaming-with-storm/) 中看到的(稍作修改):

 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");  

我将 kafka-spout 数据直接发送到 hdfs-bolt,这在我只使用 hdfs-bolt 时有效。当我添加 parse-bolt 来解析 kafka-data 并将其发送到 hive-bolt 时,整个系统变得疯狂。即使我只是通过 kafka 发送一条消息,这条消息也会被 kafka-spout 无限次复制并写入 hdfs 无限次。

如果 parse-bolt 出现错误,hdfs-bolt 不应该还能正常工作吗?我是这个话题的新手,有人能看到一个简单的初学者错误吗?我很感激任何建议。

【问题讨论】:

    标签: hadoop hive apache-kafka apache-storm hortonworks-data-platform


    【解决方案1】:

    你是否在两个螺栓执行结束时确认消息?

    当您从 kafka-spout 读取同一流时,消息将锚定到同一 spout,但具有唯一的 messageId。所以基本上即使你的 parse-bolt 的元组失败了,因为它被锚定到同一个 spout 上,它会在 spout 处被重放。这将导致另一个元组具有不同的 messageId,但为所有订阅它的螺栓播放相同的内容,在您的情况下是 parse-bolthdfs-bolt。 请记住,重播发生在 Spout 上,因此从 spout 订阅该流的所有内容都会收到冗余消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-10
      • 1970-01-01
      • 1970-01-01
      • 2016-01-08
      • 1970-01-01
      • 2015-11-21
      • 1970-01-01
      相关资源
      最近更新 更多