簡體   English   中英

在flink集群中創建大量作業是一種好習慣嗎?

[英]Is it a good practice to create lots of jobs in a flink cluster?

我打算用flink流創建一個規則引擎。

執行有一些要求:

  • 必須從kafka讀取要對規則集執行的所有事件。
  • 所有規則必須在有限的時間內執行。

問題是可以在運行時添加規則,因此我不能簡單地創建大量作業來處理所有傳入消息,因為我有可能超過允許執行規則的最大時間。

我保證可以在時間限制內執行單個規則。

所以我想知道按規則創建一份工作並在新規則到來時增加更多工作是一個好習慣嗎? (這可能是一百條規則)。

我有直覺認為這不是解決問題的方法,但解釋原因並不合理。

第二種方法是維護一個隊列(例如在zookeeper中),以便跟蹤哪個規則已針對哪個事件執行。 所以每項工作的工作只包括:

  • 選擇隊列中的規則
  • 對事件執行它
  • 再次執行此操作,直到針對該事件執行了所有規則

如果要動態調整程序邏輯,可以使用co-flatmap運算符。 co-flatmap運算符有兩個輸入,一個是正常事件輸入,另一個是規則輸入。 在內部,您將存儲規則並將其應用於來自其他輸入的傳入事件。

以下可能如下所示:

DataStream<Input> input = ...
DataStream<Rule> rules = ...

input
  .connect(rules)
  .keyBy(keySelector1, keySelector2)
  .flatMap(new MyCoFlatMap());

public static class MyCoFlatMap implements CoFlatMapFunction<Input, Rule, Output> {

    @Override
    public void flatMap1(Input input, Collector<Output> collector) throws Exception {
        // process input
    }

    @Override
    public void flatMap2(Rule rule, Collector<Output> collector) throws Exception {
        // store rules
    }
}

暫無
暫無

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

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