我已经创建了一个简单的程序来读取文件并生成一个文件。它工作得很好。我担心如何使它成为实时拓扑。我想如果我修改源文件意味着添加了一个新的记录,它应该出现在我的目标文件中,我将如何做到这一点,而不重新部署我的拓扑集群。我还需要配置什么来实现这一点下面是提交拓扑的代码locally:-
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();
2条答案
按热度按时间wnavrhmk1#
在阅读了另一个答案中的注解之后,您可能需要在更新数据库中的行之前实现一个排队系统。
我个人用过rabbitmq和storm,我知道Kafka也是一种选择。具体来说,请尝试添加一个队列,以便拓扑的一部分(也可以在storm之外)读取队列并更新db,而另一部分实现所需的处理逻辑。
实现触发器以将事件发送到storm拓扑可能是个坏主意,除非您没有其他选择。
--迈克尔
uinbv5nw2#
您可能可以使用与storm集群集成的消息队列。Kafka可能是一个很好的候选人。它基本上是一个发布订阅的消息系统。生产者负责将消息添加到队列中,另一端的消费者负责检索相同的消息。
因此,如果您将kafka与storm集成,那么只要您的生产者向队列发送/发布消息,它就可以用于storm拓扑。有一个叫做kafkaspout的东西,它是一个正常的spout实现,能够从kafka队列中读取数据。
所以它是这样的,你的拓扑结构从一个kafaspout(订阅了一个特定的主题)开始,当它收到任何东西时就发出,然后把输出链接到你相应的螺栓上。
你也可以寻找红隼作为Kafka的替代品。你应该根据你的目的来选择。