簡體   English   中英

如何使用單個 Flink 應用程序提交多個 Flink 作業

[英]How to submit multiple Flink Jobs using Single Flink Application

假設我有一個 Flink 應用程序來過濾、轉換和處理 stream。

如何將此應用程序分成兩個作業並在不使用間歇性存儲的情況下對它們進行黑白通信。

有關數據流,請參閱下圖。

使用案例的原因:

事件大小: 2KB ,事件精簡: 200B ,TPS: 1M

為了有效使用 Java 堆來在任何給定時間存儲更多事件,需要進行轉換。 在單個 TaskManager 上執行所有這三個操作的缺點是也存儲攝取的事件,其中近 80% 的事件是不需要的。

在不同的任務管理器上運行這些作業將在擴展處理 function 方面提供極大的靈活性。

需要幫助來實現這一點,歡迎提出任何建議。 還試圖了解如何通過單個 Flink 應用程序提交多個作業。

在此處輸入圖像描述

幾點:

Flink 1.11 引入的應用模式,允許單個main()方法提交多個作業,但這些作業之間沒有直接通信的機制。 Flink 通過快照實現容錯的方法並沒有擴展到在不止一項工作中管理 state。

假設您可以將作業與套接字接收器和套接字源連接起來。 但是如果你這樣做,你將放棄容錯。

您可以通過配置一個插槽共享組來實現與您所要求的類似的事情,該組將管道的最后階段強制進入它們自己的插槽。 但是,這幾乎可以肯定是一個壞主意,因為它會強制執行 ser/de,否則這可能是不必要的,並且還會導致資源利用率降低。 但它會將這些流水線階段分成另一個 JVM。

如果目標是擁有可單獨部署和獨立擴展的組件,您可以通過使用帶有狀態函數 API的遠程函數來實現。

為了通過您展示的那種 ETL 作業最大化性能(並最小化垃圾收集),如果您利用運算符鏈接和 object 重用,並將所有內容放在一個作業中,您可能會更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM