我已经创建了一个简单的程序来读取文件并完美地生成file.Its。我担心如何使其实时拓扑。我想如果我修改源文件意味着添加一条新记录,它应该出现在我的目标文件中,我将如何做到这一点,而不重新部署我的拓扑在cluster.What上,否则我需要配置以实现此behavior.Below是本地提交拓扑的代码:-
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();发布于 2013-10-22 15:23:30
您可能要做的就是使用与storm集群集成的消息队列。在这方面,Kafka可能是一个非常好的候选者。它基本上是一个发布-订阅消息系统。生产者负责将消息添加到队列,另一端的消费者负责检索消息。
因此,如果您将Kafka与storm集成在一起,只要您的生产者向队列发送/发布了一条消息,它就可以用于您的storm拓扑。有一个叫做KafkaSpout的东西,它是一个普通的spout实现,能够从Kafka队列中读取数据。
所以它是这样的,你的拓扑开始于一个KafaSpout (订阅了一个特定的主题),一旦它接收到任何东西就发出,然后将输出链接到你相应的螺栓。
您还可以将Kestrel作为Kafka的替代方案。你应该根据具体解决你的目的的东西来选择。
发布于 2013-10-27 03:32:14
在阅读了另一个答案中的注释之后,您可能需要在更新数据库中的行之前实现一个排队系统。
我个人使用过RabbitMQ和Storm,我知道Kafka也是一个选择。具体来说,尝试添加一个队列,以便拓扑的一部分(也可以在Storm之外)读取队列并更新DB,而另一部分实现您想要的处理逻辑。
除非您别无选择,否则实现触发器将事件发送到Storm拓扑可能不是一个好主意。
--迈克尔
https://stackoverflow.com/questions/19510252
复制相似问题