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

Apache storm 如何使我的storm拓扑实时工作?,apache-storm,Apache Storm,我已经创建了一个简单的程序来读取文件并生成一个文件。它工作得非常好。我担心如何使其成为实时拓扑。我想知道如果我修改源文件意味着添加了一条新记录,它应该出现在我的目标文件中,我将如何在不在集群上重新部署拓扑的情况下完成它。我还需要配置什么来实现这一点行为。下面是本地提交拓扑的代码:- Config conf= new Config(); conf.setDebug(false); conf.put(Config.TOPOLOGY_MAX_SPOUT_PENDING,

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

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

您可能可以使用与storm集群集成的消息队列。这可能是一个很好的候选人。它基本上是一个发布订阅消息系统。有生产者负责向队列添加消息,另一端的消费者负责检索消息

因此,如果您在制作人向队列发送/发布消息后立即将Kafka与storm集成,它将可用于storm拓扑。有一种称为的东西,它是一种能够从卡夫卡队列中读取数据的普通喷口实现

所以它是这样的,你的拓扑从一个KafaSpout(订阅了一个特定的主题)开始,一旦收到任何东西就会发出,然后将输出链接到相应的螺栓上


你也可以寻找卡夫卡的替代品。您应该根据具体解决目的的方法进行选择。

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

我个人曾在Storm中使用RabbitMQ,我知道卡夫卡也是一种选择。具体来说,请尝试添加一个队列,以便拓扑的一部分(也可以在Storm之外)读取队列并更新DB,而另一部分实现所需的处理逻辑

实现触发器以将事件发送到Storm拓扑可能是个坏主意,除非您没有其他选择

--
Michael

thanx,谢谢你的回复。如果我的源是db表,目标是文件,那么我如何实现实时处理。根据我的理解,我可以不使用任何其他第三方jar(即Kafka)来实现实时处理,以确保有恒定的数据源(流)来处理。这就是队列概念的由来。您可以查询数据库并检索一组信息(结果集/行)并处理它们(像批处理一样),但是如果有人向数据库中添加新记录,您会怎么做?然后,您需要某种机制来检测并使其可用于处理。如果有人在数据库中添加了一条新记录,那么我需要什么机制来检测它并使其可用于处理。我只想知道Storm为这种检测提供了什么(类名等)一种非常丑陋的方法可能是使用某种拉入方式,比如每隔一定的时间间隔,以确定是否有新的内容添加(但您必须有自己的逻辑来确定到目前为止已阅读的内容)。但是,在这种情况下,即使没有新记录添加,您也需要继续拉动,这显然不是meya推荐的方法。这不是正确的方法。您对TridentTopology有什么想法吗?这种拓扑有什么用途?谢谢Michael。。是的,我需要实现队列..你能建议一下storm提供了什么来实现队列吗?我不想使用任何其他第三方库。据我所知,storm不提供任何队列机制。