跳到主要内容

运营

CEP 是 pd 的 cep 服务之一 — API · 控制台 · 引擎处于同一进程中。

项目值
端口7400 (HTTP) · 7401 (TLS)
pd 服务cep — 仅限 MASTER
配置plantpulse-cep.properties (已渲染)
规则 · 事件类型PostgreSQL datalake DB
输入 · 输出Valkey
docker exec plantpulse-datalake pd status cep
docker exec plantpulse-datalake pd restart cep
docker exec plantpulse-datalake pd logs --lines 200 cep

启动在哪个后端 — 一行日志即是答案​

CEP input path: aster.
ingest.rate_1m 不是证据

无论在哪个引擎上启动,流入量都会增加。「正在运行」与「什么在运行」是不同的问题。

选择后端的方法和切换顺序请参阅 后端。

读取注册结果​

语句被注册,且注册具有结果。

curl -fsS -H "X-API-Key: ${PP_CEP_API_KEY}" http://127.0.0.1:7400/api/v1/eql/registration
结果含义
ACTIVE已启动的后端已接收并正在运行
REJECTED已保存但不运行。随附令牌说明是由哪项配置导致
REJECTED 不是«缺陷»而是列表

该数值不一定必须为 0 才正常。被拒绝的语句是下一步操作的输入 — 例如去掉相关配置重新编写、更换后端或请求该功能。

关键在于并非静默处理。拒绝记录会被保存、命名并可查询。

可移植性另行询问。

curl -fsS -H "X-API-Key: ${PP_CEP_API_KEY}" http://127.0.0.1:7400/api/v1/eql/portability

主要 API​

路径功能
POST /api/v1/eql/deploy语句注册
POST /api/v1/eql/validate仅判定
DELETE /api/v1/eql/undeploy/{id}注销注册
GET /api/v1/eql/registration注册结果表 (ACTIVE / REJECTED)
GET /api/v1/eql/portability可移植性
GET /api/v1/eql/metrics/snapshot · /metrics/engine按语句计算的匹配率 · 输出率,引擎指标
GET·POST·PUT·DELETE /api/v1/event-types事件类型注册
GET·POST·DELETE /api/v1/keysAPI 密钥
GET /api/health匿名就绪检查 (readiness) — 引擎 · 缓存 · 架构 (schema)
语句指标为匹配率和输出率

服务器统计每条语句的匹配与输出,并通过上述两个端点输出。无论在哪个后端启动,结果均一致。

不输出每条语句的 CPU · 墙钟时间 (wall-clock time) — 将无法测量的数值输出为 0 会被误读为「快速」。

规则的正本 — 意图在 DB,事实在引擎​

问题正本
「应该有哪些规则」cep_statement (datalake DB)
「正在运行哪些规则」已启动的引擎自身
CREATE TABLE IF NOT EXISTS cep_statement (
statement_name VARCHAR(200) NOT NULL,
eql TEXT NOT NULL,
updated_at_ms BIGINT NOT NULL DEFAULT 0,
updated_by VARCHAR(64) NOT NULL DEFAULT '',
CONSTRAINT cep_statement_pkey PRIMARY KEY (statement_name)
);

一条语句对应一行,注册即写入,注销即删除。

技术组件不读取业务表

CEP 是规则引擎而非资产管理系统。因此,它将«应该运行什么»记录在自己的表中。

缺失 enabled 列是刻意设计

停止运行的唯一信号是不存在该行,而这正是注销操作创建的状态。永远为真的列会被误读为不存在的开关。

statement_name 作为主键也是出于此考虑 — 拒绝并解决同一个名称拥有两个正文的情况。

updated_at_ms · updated_by 不被代码读取 — 仅供故障期间坐在 psql 前的人员使用。

三张表(cep_statement · cep_event_type · cep_api_key)在 CEP 启动时由其自行创建。 全部采用«若存在则保留»的形式,因此同样适用于已有数值的安装环境。

输入 — Valkey 流 (Stream)​

配置默认值
流前缀PP:CEP-IN-STREAM
分片数16 (cep.stream.shard_count)
单次读取数量1000
TLS关闭 — 数值来自 cache.ssl.enabled
tls 默认值为«关闭»是基于实测结果

Platform Valkey 配置中没有 TLS 端口声明,使用明文提供服务。

🔴 若该值错误,不会触发明显的失败。 尝试使用 TLS 连接明文服务器会导致握手超时 (handshake timeout),这会被误读为网络故障而非配置问题。

失败或积压的事件将保存在死信队列 (dead letter) 中 — 请勿将其改为静默丢弃。

输出 — 每条语句对应一个主题 (Topic)​

结果将发送至每个语句名称对应的唯一 Valkey 主题中。

  • 若订阅者为 0,仅记录日志。 由于发布操作在没有订阅者时也能成功,因此此处是结果静默消失的地方。
  • 重新部署时,请在停止消费者之后清空注册表。若顺序相反,每次重新部署都会堆积死信。

时区​

层级值决定方
传输 (wire)epoch ms无时区。 在任何 PP_TZ 中数值均相同
窗口边界语句 > PP_TZ > 拒绝WINDOW TUMBLING … AT TIME ZONE

注册响应中将包含实际使用的时区及其来源 — 以便后续追溯「是哪个零点」。

若 JVM 时区不一致则拒绝

不进行推测选择。静默选择的时区会导致每个部署主机产生不同的答案。

配置值​

键默认值说明
cep.backendaster后端 — aster · flink。若不配置,则启动为 aster。其他值(包括 esper · siddhi 等旧值)会导致启动停止并提示名称
cep.modenative若为 portable,则询问基准后端 (Aster CEP)
cep.stream.shard_count16输入分片
cep.consumer.thread_count16消费者线程
cep.api.max_eql_text_length100000语句长度上限
cep.storage.ttl_seconds864000 (10天)运营指标保留周期
cep.api.key管理 API 的 X-API-Key
cep.web.user · cep.web.password控制台登录 — 若为空则关闭控制台

更改数值的流程请参阅 更改配置方法,密钥轮转请参阅 更改密码 · API 密钥。

在容器内部修改的配置将在重启后消失

正本是部署时渲染的模板。

相关文档​