【问题标题】:how to make my storm topology to work real time?如何让我的风暴拓扑实时工作?
【发布时间】:2013-10-22 06:12:05
【问题描述】:

我创建了一个简单的程序来从文件中读取并生成一个文件。它工作得很好。我担心如何使它成为实时拓扑。我想如果我修改源文件意味着添加一条新记录,它应该进来我的目标文件如何在不重新部署集群上的拓扑的情况下执行此操作。我还需要配置什么来实现此行为。以下是在本地提交拓扑的代码:-

Config conf= new Config();
        conf.setDebug(false);
        conf.put(Config.TOPOLOGY_MAX_SPOUT_PENDING,1);
        TopologyBuilder builder = new TopologyBuilder();



            builder.setSpout("file-reader",new FileReaderSpout(args[0]));
            builder.setBolt("file-writer",new WriteToFileBolt(args[0])).shuffleGrouping("file-reader");
             LocalCluster cluster= new LocalCluster();
                cluster.submitTopology("File-To-File",conf,builder.createTopology());
                Thread.sleep(10000);
                cluster.shutdown();

【问题讨论】:

    标签: apache-storm


    【解决方案1】:

    您可能可以做的是使用与您的风暴集群集成的消息队列。 Kafka 可能是一个非常好的候选人。它基本上是一个发布订阅消息系统。生产者负责将消息添加到队列中,另一端的消费者负责检索消息。

    因此,如果您在生产者向队列发送/发布消息后立即将 Kafka 与 Storm 集成,那么您的 Storm 拓扑将可以使用该消息。有一个叫做 KafkaSpout 的东西,它是一个能够从 Kafka 队列中读取的普通 spout 实现。

    因此,您的拓扑结构从 KafaSpout(订阅特定主题)开始,并在收到任何内容后立即发出,然后将输出链接到相应的螺栓。

    您还可以寻找 Kestrel 作为 Kafka 的替代品。您应该根据具体解决您的目的进行选择。

    【讨论】:

    • 感谢您的回复..如果我的源是数据库表,目标是文件,那么我如何实现实时处理。我可以在不使用任何其他 3rd 方 jar(即 Kafka)的情况下实现
    • 根据我的理解,要实时执行任何操作,您需要确保有一个恒定的数据源(流)来处理。这就是队列概念的用武之地。您可以查询数据库并检索一组信息(结果集/行)并处理它们(如批处理),但是如果有人将新记录添加到数据库中,您会怎么做?然后,您需要某种机制来检测它并使其可用于处理。您能否分享一下您正在努力实现的目标
    • 如果有人将新记录添加到数据库中,我完全想要你所说的同样的事情,那么我需要什么机制来检测它并使其可用于处理。我只是想知道这个检测是什么Storm 提供(类名等)
    • 一种非常丑陋的方法可能是每隔一定的时间间隔使用某种拉入来识别是否添加了任何新内容(不过,您必须有自己的逻辑来确定到目前为止已阅读的内容)。但是在这种情况下,即使没有添加新记录,您也需要继续拉动,这对我来说当然不是推荐的方法
    • 是的,这不是正确的方法。您对 TridentTopology 有任何了解吗?这种拓扑有什么用处?
    【解决方案2】:

    在另一个答案中阅读了您的 cmets,您可能需要在 更新数据库中的行之前实现一个排队系统。

    我个人使用过带有 Storm 的 RabbitMQ,我知道 Kafka 也是一种选择。具体来说,尝试添加一个队列,以便拓扑的一部分(也可以在 Storm 之外)从队列中读取并更新数据库,而另一部分实现您想要的处理逻辑。

    实施触发器以将事件发送到 Storm 拓扑可能是个坏主意,除非您别无选择。

    -- 迈克尔

    【讨论】:

    • 谢谢迈克尔..是的我需要实现队列..你能建议风暴提供的所有东西来实现队列我不想使用任何其他 3rd 方库。
    • 据我所知,Storm 没有提供任何排队机制。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多