メインコンテンツまでスキップ

バックエンド

EQL を実行する実装体は2つあり、ランタイムで動作するのは常に1つです。

バックエンド役割時期
Aster CEP基本・基準実装一般的なインストール
Flinkオラクル — 運用には使用しません同一文の回答を照合する用途

選択基準はインストール規模です。一般的なインストールは Aster CEP であり、大量ストリーミング用の枠組みが Flink です。ただし、現在は運用に投入しません。

«基準実装» という言葉の意味

Aster CEP が言語を定義するわけではありません。 言語の範囲は共通 IR が決定し、Aster CEP はそれを最も広く実行する実装です。Flink で不可能だからといって、言語から機能を削除することはありません。

Aster CEP はどのようなエンジンか

Aster CEP は KOPENS がソースレベルで開発・維持している CEP エンジンです。SQL:2016 MATCH_RECOGNIZE の連続量化子(* + ? {n,m})をエンジン内で実装し、期待値は Flink 2.3.0 と照合しました。

選択方法 — 1行で設定します​

plantpulse-cep.properties の1行でプランナーとランタイムを同時に選択します。

cep.backend=aster # aster | flink
値意味
aster基本 — Aster CEP
flinkオラクル — 運用には使用しません
設定なしaster として表示されます
誤字がある場合、「デフォルト値にフォールバック」せず、名前を提示してブートを停止します

静かにデフォルト値へ移行すると、運用者が選択したものと実際に動作しているものが異なり、その差は結果に異常が出るまで表面化しません。

cep.backend=esper も同様です。この値は存在しません。アップグレードノートを参照してください。

cep.mode — 移植性を«問う»方法​

#cep.mode=native # native | portable. 설정하지 않으면 native
モード登録条件
native (基本)ブートしたバックエンドが受け入れれば登録されます。そのエンジン固有の機能を使用しても構いません
portableブートしたバックエンドおよび移植可能セットのバックエンドも受け入れる必要があります

移植可能セットは Aster CEP のみです(Flink はオラクルであるためセット外です)。したがって、Aster CEP でブートしたインストールでは portable が他に問う場所はなく、native と同様になります。

宣言ではなく«登録時点で問います»

どの文が移植可能であるかをテーブルで宣言して保持しません。そのバックエンドのプランナーに実際に問い合わせます。 宣言は古くなりますが、質問は古くなりません。

拒否された場合は、どのバックエンドがどの構成のために拒否したのかが共に記録されます。

portable は問い合わせるプランナーがビルドに含まれている必要があります

含まれていない場合、ゲートは**「持っているもので代用して計測する」のではなく、動作自体を拒否します。** 不完全に計測された移植性は、計測しないよりも悪影響を及ぼします。

何がどこで動作するか — 能力マトリクス​

2つのバックエンドの回答は生成物として管理されます。ゴールデンコーパスを両方のプランナーに投入して作成した表であり、セルが移動したコミットがその表も同時に移動させなければ通過しません。

Aster CEP (基準)Flink (オラクル)
言語が実際に 127件中 ✓10653

読み方:

記号意味
✓プランナーが計画を提示しました (Aster CEP は実際のエンジンがコンパイルまで)
✗ トークン名前を提示して拒否しました
—言語が実装できませんでした — エンジンの回答ではありません
«—» と «✗» を同じセルに入れないでください

— は言語がその構成を知らないという意味であり、✗ は言語は知っているがこのエンジンでは動作させられないという意味です。運用者が行うべき対応が異なります。前者は文を書き直す必要があり、後者はその構成を外す必要があります。

2つのバックエンドで差異が出る代表的な箇所​

構成Aster CEPFlink
pattern[...]✅一部
不在パターン not X for 30 min✅❌
MATCH_RECOGNIZE 基本形✅✅
〃 SKIP PAST LAST ROW❌✅
〃 交替 A | B · PERMUTE❌✅
JOIN✅❌
DISTINCT✅ (条件付き)❌
ORDER BY · LIMIT✅❌
単項 NOT✅❌
INSERT INTO✅❌
WINDOW TUMBLING … ALIGN TO FIRST EVENT✅❌
WINDOW SLIDING✅❌

全表は製品リポジトリの能力マトリクスが正本です。上記は頻出する箇所のみを抽出したものです。

cep.flink.reconciler.enabled=false
cep.flink.router.enabled=false
オンにしたまま他のバックエンドでブートすると «二重発行» されます

実際に発生した不具合です。Aster CEP で起動した際にこれらがオンになっており、同じ文が2つのエンジンで動作し、結果が2回出力されました。

現在は、ブートしたバックエンドが Flink でない場合は無視され、ログに一度名前が記録されます。 それでも値自体を整理しておく方が望ましいです。無視されるという事実を後任者が知らない可能性があるためです。

関連文書​