2013-10-22 99 views
0

我創建了一個簡單的程序來讀取文件並生成一個文件,它的工作完美。我擔心如何使它實時拓撲。我想如果我修改源文件意味着添加一個新的記錄它應該進來我的目標文件我怎麼會做它無需重新部署在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(); 

回答

1

什麼你也許可以做的是使用一個消息隊列與你的風暴集羣整合。 Kafka可能是一個非常好的候選人。它基本上是一個發佈訂閱的消息系統。有生產者負責將消息添加到另一端的隊列和消費者以檢索相同的消息。

因此,如果您在生產者發送/發佈消息到隊列中時將卡夫卡與風暴整合在一起,則它將適用於您的風暴拓撲結構。有一種叫做KafkaSpout的東西,它是一個能夠從卡夫卡隊列中讀取的普通噴口實現。

所以它是這樣的拓撲有KafaSpout(訂閱特定的主題)開始,當它接收到任何東西,然後掃描鏈的輸出到您相應的螺栓儘快發出。

您還可以查找Kestrel作爲卡夫卡的替代品。你應該根據什麼解決你的目的來選擇。

+0

thanx您reply..if我的源是一個數據庫表和目標文件,那麼我如何能實現實時processing.can我實現,而無需使用任何其他第三方的jar(即卡夫卡) – user2435082

+0

根據我對實時做任何事情的理解,您需要確保持續處理數據(數據流)來源。這就是隊列的概念。你可以查詢一個數據庫並檢索一組信息(結果集/行)並處理它們(比如批處理),但是如果有人向db中添加新記錄,你會怎麼做?那麼您需要某種機制來檢測並使其可用於處理。你可以請分享你到底想要達到什麼 – user2720864

+0

我完全想要你說的相同的東西,如果有人向db中添加一條新的記錄,那麼我需要什麼機制來檢測它,並使它可用於processing.i只是想知道對於這種檢測,Storm提供了什麼(類名等) – user2435082

0

在其他答案中閱讀了您的意見後,您可能需要在之前實施排隊系統以更新數據庫中的行。

我個人使用RabbitMQ風暴,我知道卡夫卡也是一種選擇。具體來說,嘗試添加一個隊列,使得拓撲的一部分(也可以在Storm之外)讀取隊列並更新數據庫,而另一部分實現您想要的處理邏輯。

實施觸發器將事件發送到Storm拓撲可能是一個壞主意,除非您沒有其他選擇。

- 邁克爾

+0

謝謝邁克爾..是的,我需要實現隊列..你可以請建議風暴提供的所有東西實現排隊我不想要使用任何其他第三方庫。 – user2435082

+0

據我所知,Storm沒有提供任何排隊機制。 – mvogiatzis