如何使我的storm拓扑实时工作?

9rygscc1  于 2021-06-24  发布在  Storm
关注(0)|答案(2)|浏览(393)

我已经创建了一个简单的程序来读取文件并生成一个文件。它工作得很好。我担心如何使它成为实时拓扑。我想如果我修改源文件意味着添加了一个新的记录,它应该出现在我的目标文件中,我将如何做到这一点,而不重新部署我的拓扑集群。我还需要配置什么来实现这一点下面是提交拓扑的代码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();
wnavrhmk

wnavrhmk1#

在阅读了另一个答案中的注解之后,您可能需要在更新数据库中的行之前实现一个排队系统。
我个人用过rabbitmq和storm,我知道Kafka也是一种选择。具体来说,请尝试添加一个队列,以便拓扑的一部分(也可以在storm之外)读取队列并更新db,而另一部分实现所需的处理逻辑。
实现触发器以将事件发送到storm拓扑可能是个坏主意,除非您没有其他选择。
--迈克尔

uinbv5nw

uinbv5nw2#

您可能可以使用与storm集群集成的消息队列。Kafka可能是一个很好的候选人。它基本上是一个发布订阅的消息系统。生产者负责将消息添加到队列中,另一端的消费者负责检索相同的消息。
因此,如果您将kafka与storm集成,那么只要您的生产者向队列发送/发布消息,它就可以用于storm拓扑。有一个叫做kafkaspout的东西,它是一个正常的spout实现,能够从kafka队列中读取数据。
所以它是这样的,你的拓扑结构从一个kafaspout(订阅了一个特定的主题)开始,当它收到任何东西时就发出,然后把输出链接到你相应的螺栓上。
你也可以寻找红隼作为Kafka的替代品。你应该根据你的目的来选择。

相关问题