0

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

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();
4

2 回答 2

1

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

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

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

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

于 2013-10-22T07:23:29.540 回答
0

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

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

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

——迈克尔

于 2013-10-26T19:32:13.543 回答