2016-12-07 8 views
0

2つのイベントがFlinkに流入すると、それに続く3つ目のイベント(DataStream APIまたはCEPを使用)の情報を使用して論理的に結合できますか?たとえば、下の例の3番目のイベントを、そのright_idとleft_idに基づいて最初の2つのイベントをリンクするために使用できますか?3番目のイベントに基づいてFlinkで2つのイベントをリンクする

ID: AAAA 
ID: BBBB 
ID: ZZZZ, right_id: AAAA, left_id: BBBB 

答えて

0

これは非常に基本的なCEPの使用例です。コードは次のようになります...

// data stream creation 
DataStream<Event> myStream = ... 

// cep pattern definition 
Pattern<Event, ?> myPattern = Pattern.<Event>begin("first_event") 
       .followedBy("second_event") 
       .followedBy("match_event"); 

// cep pattern stream: apply pattern to stream 
PatternStream<Event> myPatternStream = CEP.pattern(myStream, myPattern); 

// create new data stream from pattern matches 
DataStream<CEPEvent> myCEPEvent = myPatternStream.flatSelect(
       (Map<String, Event> pattern, Collector<CEPEvent> out) -> { 

       // load potential event sequence matches 
       Event first_event = pattern.get("first_event"); 
       Event second_event = pattern.get("second_event"); 
       Event match_event = pattern.get("match_event"); 

       // test event sequences 
       if (match_event.right_id.equals(first_event.ID) 
        && match_event.left_id.equals(second_event.ID) 
       ){out.collect(new CEPEvent("successful cep hit"));} 
      } 
     ); 
関連する問題