我创建了一个简单的程序来从文件读取并生成一个文件。它工作得很好。我担心如何使它成为实时拓扑。我想如果我修改源文件意味着添加了一个新的记录它应该进来我的目标文件如何在不重新部署集群上的拓扑的情况下执行此操作。我需要配置以实现此行为。还有本地提交拓扑的代码: -
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();
答案 0 :(得分:1)
您可以做的是使用与风暴群集集成的消息队列。 Kafka可能是一个非常好的候选人。它基本上是一个发布订阅的消息系统。有些生产者负责将消息添加到队列,而另一端的消费者则负责检索消息。
因此,如果您在生产者向队列发送/发布消息后立即将Kafka与风暴集成,那么它将可用于您的风暴拓扑。有一种称为KafkaSpout的东西,它是一种能够从Kafka队列中读取的普通喷口实现。
因此,你的拓扑结构以KafaSpout(订阅特定主题)开始,并在收到任何内容后立即发出,然后将输出链接到相应的螺栓。
你也可以寻找Kestrel作为Kafka的替代品。您应该根据确切的目的来选择。
答案 1 :(得分:0)
在另一个答案中阅读了您的评论后,您可能需要在更新数据库中的行之前实施排队系统。
我亲自将RabbitMQ与Storm一起使用,我知道Kafka也是一种选择。具体来说,尝试添加一个队列,使拓扑的一部分(也可以在Storm之外)读取队列并更新数据库,另一部分实现所需的处理逻辑。
实现触发器以将事件发送到Storm拓扑可能是一个坏主意,除非您没有其他选择。
- 迈克尔