본문으로 건너뛰기

백엔드

EQL 을 실행하는 구현체는 둘이고, 런타임에 도는 것은 언제나 하나입니다.

백엔드자리언제
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 과 대조했습니다.

고르는 법 — 한 줄입니다​

plantpulse-cep.properties 의 한 줄이 플래너와 런타임을 같이 고릅니다.

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 은 물어볼 플래너가 빌드에 있어야 합니다

없으면 게이트가 「가진 것으로 대신 재는」 대신 아예 돌기를 거부합니다. 반쯤 잰 이식성은 안 잰 것보다 나쁩니다.

무엇이 어디서 도나 — 능력 행렬​

두 백엔드의 답은 생성물로 관리됩니다. 골든 코퍼스를 두 플래너에 전부 넣어 만든 표이고, 셀이 움직인 커밋이 그 표도 같이 옮겨야 통과합니다.

Aster CEP (기준)Flink (오라클)
언어가 실은 127건 중 ✓10653

읽는 법:

기호뜻
✓플래너가 계획을 냈습니다 (Aster CEP 는 진짜 엔진이 컴파일까지)
✗ 토큰이름을 대며 거절했습니다
—언어가 못 실었습니다 — 엔진의 답이 아닙니다
«—» 와 «✗» 를 같은 칸에 넣지 마십시오

— 는 언어가 그 구성을 모른다는 뜻이고, ✗ 는 언어는 아는데 이 엔진이 못 돌린다는 뜻입니다. 운영자가 할 일이 다릅니다 — 앞은 문장을 다시 써야 하고, 뒤는 그 구성을 빼야 합니다.

두 백엔드가 갈리는 대표적인 자리​

구성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 로 띄웠는데 이 둘이 켜져 있어 같은 문장이 두 엔진에서 돌고 결과가 두 번 나갔습니다.

지금은 부팅 백엔드가 Flink 가 아니면 무시되고 로그에 한 번 이름이 찍힙니다. 그래도 값 자체를 정리해 두는 편이 낫습니다 — 무시된다는 사실을 다음 사람이 모릅니다.

관련 문서​