2017-08-10 46 views
0

我很好奇如何決定如何爲運行在Google Dataflow平臺上的Apache Beam管道提供資源。我已經構建了一個流式管道(Beam Java 2.0.0),它接受一個PubSub JSON字符串,將其轉換爲BQ TableRow,然後將其路由到正確的表。管道內還有兩個變換,一個每分鐘有一個5分鐘的滑動窗口,另一個窗口的固定持續時間爲1分鐘。您如何確定在Google Dataflow流式管道中提供多少資源?

對於某些上下文,每個傳入消息都是大約1KB JSON字符串,並且在極端高峯時,管道將在一秒內收到250,000條消息。在關閉之前,我的滑動時間窗口可能會增長到500萬個/分鐘(最壞的情況,但這就是我們的計劃)。我們典型的峯值流量使用量約爲75k信息/秒。但是,90%的時間我們的流水線只能處理30條消息/秒。

我們在啓用了自動擴展功能的情況下運行數據流,默認情況下,Google爲流式管道提供了4個CPU,15GB和420GB * max_number的工作人員。在設置10個最大工作人員的情況下,我們將每月支付4.2TB的磁盤使用費用。這似乎有點矯枉過正,但我​​不知道應該看什麼數據來驗證我的理論。

我一直在想的是改用2個CPU和7.5 GB內存,每個工作人員使用20GB的SSD,並將最大工人數設置爲50.在此配置下,我們至少有4個工人。

我的遊戲摘要:
- 您如何確定流式管道所需的CPU,RAM和磁盤空間?
- 您如何確定管道應提供SSD資源而不是標準硬驅動器?
- 我可以通過哪些度量指標來衡量我的管道性能?

回答

2

由於流水線差別很大,因此沒有多種用途來說明有多少工人以及要使用多大的磁盤大小。有幾種方法可以很好地工作:

  1. 數據流的水平縮放非常接近線性。這意味着 ,如果您運行採樣管道(例如,通過採樣10%的輸入流量),您可以非常快速地估計管道需要的全部資源,而不會過多付款。您可以判斷流水線是否與輸入「保持一致」,系統延遲是否保持低位,並且數據水印會繼續前進。然後,您可以使用此策略估算您的管線在峯值輸入速率下需要的最大工人數量。讓我們撥打這個號碼m
  2. 做完上面的,然後你可以依靠autoscaling,將其具有的maxNumWorkers標誌多項k*m其中k將有效地決定您的管道可以從峯值負載積壓趕上。例如,在k=1管線只能跟上峯值負荷,因此高峯負荷積壓可能永遠不會消耗,或等待非高峯負荷消耗。在k=2管道可以處理2倍的峯值負載,所以它會趕上更快。當然,這是在積壓期間您願意支付多少資源以及您願意忍受多少追趕延遲的權衡。
  3. 自動調節還將確保管道在非高峯負載期間縮減,以便您不會在非高峯時段支付所有資源。

其他一些注意事項:

  • 流媒體數據流往往與4名CPU工人對2組CPU的工人有更好的表現。這是因爲每個工作者都有一些開銷,並且針對4個CPU工作者優化的工作並行度進行了某些調整。
  • SSD在使用數據流時應該已經默認啓用,因爲SSD極大地提高了寫入吞吐量並帶來了更好的性能。
相關問題