2016-06-09 228 views
0

我正在考慮如何使用Apache Flink作爲我目前正在開發的投票系統。我是一個完全新手Flink和任何幫助將不勝感激。Apache Flink用於實時處理有限流

的要求是:

  • 一些特權的用戶可以在任意的問題開始投票。用戶可以隨時關閉投票。
  • 多達數十萬人可能參加投票
  • 投票計數應在投票開始後立即開始,並且中間結果應隨時間更新,以便它可以顯示給參與者。
  • 當系統在投票結束後結束計數時,應通知參與者最終結果。

在我的理解中,Flink的流處理是針對無限流的實時處理,而批處理是針對有限流的非實時處理。
如何將Flink應用於我的需求,這是一個實時處理有限流?

回答

0

Flink的DataStream API可以毫無問題地處理有限流的事件。 DataStream程序將在流到達結尾時立即終止。

如果您使用SocketTextStreamFunction從套接字讀取文本數據,則可以模擬此行爲。一旦關閉套接字,程序將終止。或者,您也可以從文件中讀取數據,這也是某種有限的流。但是,請記住,不完整的窗口不會自動評估。所以,如果你使用它們,你必須確保你不會丟失窗口中的數據。

+0

我查看了'SocketTextStreamFunction'實現,併爲我的用例提出了下面的策略。你認爲這是要走的路嗎? 1.參與者的每個投票都作爲單個事件發送到我的'SourceFunction'。 2.當主機用戶關閉投票時,在其有效載荷中包含終止信號的特殊事件將發送到我的'SourceFunction',從而導致它退出'run'方法。 3.我的窗口應該有一個額外的觸發器,在接受終止事件時觸發,以免丟失數據。 – kimamula

+0

這聽起來很不錯。如果您使用基於事件時間的窗口,則還可以通過來自源的「Long.MAX_VALUE」發出水印來觸發窗口計算。 –