簡體   English   中英

在 Flink 中使用 RichMap 比如 Scala MapPartition

[英]Use RichMap in Flink like Scala MapPartition

在 Spark 中,我們有 MapPartition function,它用於對一組條目進行一些初始化,比如一些 db 操作。

現在我想在 Flink 中做同樣的事情。 經過一些研究,我發現我可以使用 RichMap 來實現相同的用途,但它有一個缺點,即該操作只能在流式作業開始時的 open 方法中完成。 我將解釋我的用例,這將闡明情況。

示例:我正在獲取kafka中數百萬用戶的數據,但我只想最終持久化部分用戶的數據。 現在這個用戶列表是動態的並且在數據庫中可用。 我想每 10 分鍾查找一次當前用戶,以便我過濾並僅存儲這些用戶的數據。 在 Spark(MapPartition) 中,它會為每個組執行用戶查找,並且我已配置為每 10 分鍾后從數據庫中獲取用戶。 但是對於使用 RichMap 的 Flink,我只能在工作開始時在打開的 function 中執行此操作。

如何在Flink中進行如下操作?

看來您想要做的是流表連接。 有多種方法可以做到這一點,但似乎最簡單的方法是在此處使用廣播 state 模式。

這個想法是定義自定義DataSource ,定期從 SQL 表中查詢數據(或者更好地使用 CDC),使用該表流作為廣播tableStream並將其與實際用戶 stream 連接。

在連接流的ProcessFunction內部,您將有權訪問廣播的表數據,您可以為收到的每個用戶執行查找並決定如何處理。

暫無
暫無

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

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