Zum Hauptinhalt springen

CEP-Überblick

CEP(Complex Event Processing) ist eine Schicht, die in einem Strom von Ereignissen sofort entscheidet, «was gerade passiert». Es wird nicht erst gespeichert und dann abgefragt, sondern die Entscheidung erfolgt während des Datenflusses.

„Wenn ein Alarm mit einer Schwere von 3 oder höher auftritt und innerhalb von 10 Sekunden an derselben Anlage erneut ein Alarm mit einer Schwere von 4 oder höher auftritt, dann erfolgt eine Eskalation“ — „Wenn ein Alarm auftritt, aber innerhalb von 30 Minuten keine Aufhebung eingeht, wird er als nicht aufgehoben markiert“

Regeln werden in EQL(PlantPulse CEP SQL) geschrieben.

Die Sprache steht an erster Stelle, die Engine führt sie nur aus​

EQL 문장
│
▼
의미 분석 ─────────► 판정 셋: SUPPORTED · UNSUPPORTED · UNPARSEABLE
│
▼
공통 IR (엔진 독립)
│
┌─────┴─────┐
▼ ▼
Aster CEP Flink
(기본) (오라클 — 운영에 쓰지 않습니다)
SpracheEQL 1.0 — SQL-92 Core + Streaming-Erweiterungen
Standard-BackendAster CEP — KOPENS Eigenentwicklung (dynamische Regelbereitstellung)
FlinkIst ein Orakel — Es dient dazu, dieselben Anweisungen zusammen mit Aster CEP einzugeben und die Antworten abzugleichen. Es wird nicht im Betrieb eingesetzt
Die Engine, die zur Laufzeit läuft, ist «immer nur eine»

Beim Booten wird eine Engine ausgewählt; es gibt kein Routing pro Anweisung und kein Fallback.

Wenn beide gleichzeitig laufen würden, ginge die Information verloren, «welche Engine dieses Ergebnis geliefert hat», und dieselbe Eingabe würde doppelt veröffentlicht — ein Defekt, der bereits in der Praxis aufgetreten ist. Die differenzielle Ausführung erfolgt in der CI, im Betrieb laufen niemals zwei Engines gleichzeitig.

Kein Fallback bedeutet «kein Ausweichziel»

Anweisungen, die das gebootete Backend nicht lesen kann, wird die Registrierung selbst verweigert. Sie werden zwar gespeichert, aber als REJECTED markiert und nicht stillschweigend an eine andere Engine übergeben.

Eine Ablehnung nennt immer den Namen — sie gibt per Token an, welche Konfiguration blockiert wurde. Würde sie stillschweigig ignoriert, würde die Anweisung geplant, bereitgestellt und eine plausible, aber falsche Antwort liefern.

Was EQL ist und was nicht​

  • Es ist kein Kompatibilitätsprojekt für andere Produkte. Nicht alle Sprachen anderer CEP-Produkte werden implementiert. Aber Anweisungen, die heute aktiv laufen, müssen auch weiterhin laufen.
  • Es ist kein Synonym für Flink SQL. Die Basis ist SQL-92, und es werden nur die für das Streaming notwendigen Erweiterungen vorgenommen.
  • Das Backend bestimmt nicht die Sprache. Die Sprache existiert zuerst, und das Backend führt sie aus.
PlantPulse CEP SQL (EQL)
│
├── SQL-92 SELECT · FROM · WHERE · JOIN · GROUP BY
│ (+ HAVING · ORDER BY · LIMIT · DISTINCT · CASE · CAST)
│
└── CEP 확장 WINDOW · OUTPUT … EVERY · INSERT INTO · 스트림 필터
MATCH_RECOGNIZE · pattern[...] · 부재 패턴

Erweiterungen werden nur für Dinge vorgenommen, die nicht im Standard enthalten sind. Dinge, die durch den Standard ausgedrückt werden können, werden nicht durch neue Keywords ersetzt.

Datenflussweg​

  • Die Eingabe erfolgt über Valkey-Streams mit dem Standardpräfix PP:CEP-IN-STREAM und 16 Shards.
  • Die Ausgabe erfolgt über ein Valkey-Topic pro Anweisung.
  • Die Referenz für Regeln und Ereignistypen liegt in PostgreSQL (cep_statement · cep_event_type).

Die ersten 10 Minuten​

# 1. 어느 백엔드로 떴나 — 판정 지표는 «로그 한 줄» 입니다
docker exec plantpulse-datalake sh -c 'grep "CEP input path" /opt/kopens/.../system.log | tail -1'
# CEP input path: aster.

# 2. 서버가 살아 있나 (익명 readiness)
curl -fsS http://127.0.0.1:7400/api/health

# 3. 문장이 몇 개 등록됐고 몇 개가 거부됐나
curl -fsS -H "X-API-Key: ${PP_CEP_API_KEY}" http://127.0.0.1:7400/api/v1/eql/registration

# 4. 이 문장들이 다른 백엔드에서도 도나
curl -fsS -H "X-API-Key: ${PP_CEP_API_KEY}" http://127.0.0.1:7400/api/v1/eql/portability
ingest.rate_1m ist kein Beweis

Unabhängig davon, welche Engine läuft, steigt das Zuflussvolumen. Welches Backend läuft, beantwortet eine einzige Zeile im Boot-Log.

Registrieren Sie zuerst die Ereignistypen

Anweisungen über nicht registrierte Typen werden kompiliert, bereitgestellt und laufen, werden aber niemals einen Treffer erzielen. Daher wird die Registrierung zum Zeitpunkt der Bereitstellung verweigert → Ereignistyp registrieren

Aufbau dieses Abschnitts​

SeiteWann ansehen
EQL-SpracheBeim Schreiben von Anweisungen — Klauseln · Fenster · Aggregationen · Muster und ausführbare Beispiele
BackendsWelche Engine gestartet werden soll und wie die Portabilität mit cep.mode gehandhabt wird
Ereignistyp registrierungWenn ein neues Ereignis zum ersten Mal in CEP eingeführt wird
BetriebEin- und Ausschalten · Auslesen der Registrierungsergebnisse · Ein-/Ausgabe-Verträge
Limits und Ablehnungs-TokenWenn eine Registrierung verweigert wurde, finden Sie die entsprechende Zeile hier

Verwandte Dokumente​