跳到主要内容

plantpulse-messaging(消息层)

作用​

作为 PlantPulse 的神经系统的消息代理层。它负责采集来自工业现场的传感器数据,并在模块之间传递事件。共有两个代理——Kafka 和 HiveMQ (MQTT)。

项目值
模块名plantpulse-messaging
安装路径/opt/kopens/plantpulse-platform/plantpulse-messaging/
数据位置/data1/pp-data/kafka/kraft_combined_logs
pd 服务messaging — 仅 MASTER 节点
账户PP_MQ_USER / PP_MQ_PASSWORD — Kafka 和 HiveMQ 共享同一个值
STOMP (ActiveMQ) 已退役

随着浏览器实时推送改为 SSE,STOMP 代理已从架构中移除。61000 / 61004 端口和 PP_STOMP_* 不再提供服务。如果旧防火墙规则中仍有残留,请清理。

架构​

Kafka​

以 KRaft 模式(无 ZooKeeper)运行的单个代理同时兼任控制器。

项目值
端口9092 (SASL_PLAINTEXT) · 9093 (controller, 内部) · 9094 (SASL_SSL)
认证SASL/PLAIN — 静态 JAAS (config/jaas.conf)。账户 PP_MQ_USER
广播地址PP_KAFKA_ADVERTISED_HOST — 启动时根据主机地址生成
主题前缀PP_TOPIC_PREFIX (默认 pp)

代理只读取一个文件​

plantpulse-messaging/kafka/config/kafka.properties 是代理配置,由主机的 /etc/kopens/conf/kafka.properties.template 渲染生成。同一目录下的 broker.properties · server.properties · controller.properties 是 Apache Kafka 发行版自带的示例文件,没有人会读取。如果在容器内看到 advertised.listeners=PLAINTEXT://localhost:9092 这样的值,不要惊讶。

模板中的关键行(占位符在渲染时填充):

process.roles=broker,controller
listeners=SASL_PLAINTEXT://0.0.0.0:${PP_KAFKA_PORT},CONTROLLER://0.0.0.0:${PP_KAFKA_CONTROLLER_PORT:9093},SASL_SSL://0.0.0.0:${PP_KAFKA_TLS_PORT}
advertised.listeners=SASL_PLAINTEXT://${PP_KAFKA_ADVERTISED_HOST}:${PP_KAFKA_PORT},…
sasl.enabled.mechanisms=PLAIN
allow.everyone.if.no.acl.found=false

log.dirs=${PP_DATA_DIR}/kafka/kraft_combined_logs
log.retention.ms=3600000 # 1시간 — 버퍼이지 보관소가 아닙니다
log.segment.bytes=10485760 # 10MB
num.partitions=4
default.replication.factor=1 # 단일 브로커
message.max.bytes=157286400
auto.create.topics.enable=true
Kafka 是 1 小时缓冲区

代理的默认保留时间为 1 小时。数据的长期存储由 Aster TSDB · 时序引擎 · Iceberg 负责,Kafka 则充当它们之间的缓冲区。主题级别的保留时间以及«谁决定了这个值»由 pd retention 显示。

主要主题​

会添加前缀 pp (PP_TOPIC_PREFIX)。以下是平台代码使用的代表性主题。

主题用途
event · event-row服务器 ↔ 引擎事件总线
pp-tag-point标签值流 — 需要为每个标签开启«Kafka 发布»才会填充
pp-tag-alarm · pp-asset-alarm · pp-asset-event报警 · 资产事件
pp-asset-data · pp-asset-aggregation · pp-asset-health-status资产数据和聚合
pp-batch批处理作业
pp-edge-status · pp-opc-status · pp-diagnostic边缘 · OPC · 诊断状态
pp-domain-changed-event元数据变更
pp-production-oee · pp-production-ram · pp-production-ems生产指标

运维命令​

docker exec plantpulse-datalake pd status messaging # UP (advertised <address>:9092 answered ApiVersions)
docker exec plantpulse-datalake pd flow # 컨슈머 그룹별 lag
docker exec plantpulse-datalake pd node topic # 토픽 "event" describe (비밀번호 자동 주입)
docker exec plantpulse-datalake pd retention # 토픽별 보존과 세그먼트 크기
docker exec plantpulse-datalake pd restart messaging

若要直接使用 Kafka 发行版的工具,需要将 SASL 凭据作为客户端配置文件传入。pd flow · pd node topic 可以替代这项操作,请优先使用它们。

9092 端口开放不代表就绪

代理会在启用请求处理之前约 10 秒就开放 9092 端口。因此,pd 的健康检查不是检查端口,而是检查«向广播地址发送 ApiVersions 请求并收到响应»。启动后立即执行的 DOWN (port 9092 is bound but … did not answer) 请在 30 秒后重试。

调优要点​

全部在 /etc/kopens/conf/kafka.properties.template 中修改,并通过 restart-datalake.sh 生效。

项目默认备注
log.retention.ms1 小时如果消费端可能长时间停滞,则增加此值。磁盘占用会相应增加
num.partitions4新主题的分区数。需与消费者线程数匹配
num.io.threads · num.network.threads8 · 3若使用 NVMe,则 io 可提升至 16
message.max.bytes150MB为大型消息(文件队列)而设置得较大

HiveMQ (MQTT)​

轻量级 IoT 设备 · 传感器和 Edge 代理接入的标准 MQTT 代理(Community Edition)。

项目值
端口1883 (明文) · 1884 (TLS) — 由代理容器发布到主机并转发至数据湖
认证username / password — 安全扩展读取 conf/auth.properties
账户PP_MQ_USER / PP_MQ_PASSWORD (与 Kafka 相同)
配置mqtt/conf/config.xml ← /etc/kopens/conf/hivemq.xml.template

TLS 监听器使用平台公共 keystore (/var/security/plantpulse/master/master.keystore.jks),不要求客户端证书 (NONE)。

# 외부에서 발행 · 구독 (디버깅)
mosquitto_pub -h <server-ip> -p 1883 -u mq -P '<PP_MQ_PASSWORD>' -t test/topic -m "hello"
mosquitto_sub -h <server-ip> -p 1883 -u mq -P '<PP_MQ_PASSWORD>' -t 'test/#'

日志​

docker exec plantpulse-datalake pd logs --lines 100 messaging
代理文件
Kafkaplantpulse-messaging/kafka/logs/
HiveMQplantpulse-messaging/mqtt/logs/hivemq.log (event.log 是按消息的审计日志,因此 pd logs 故意省略)

常见问题​

症状原因处理
其他机器的客户端在 bootstrap 后断开连接广播地址是容器内部地址节点文件 PP_MASTER_IP → 修改配置的方法
pd status messaging 是 DOWN (advertises 127.0.0.1…)节点文件中没有地址同上。与渲染 exit 8 的原因相同
消费者 lag 增加消费者处理慢 · 停滞pd flow 中的 MEMB · LAG, 消费者容器日志
磁盘已满增加了保留时间但消费者停止pd retention 的 kafka 表, log.retention.ms
MQTT TLS 握手失败证书过期 · SAN 缺失安全设置 — plantpulse-certs 会重新签发
轮换后只有 Kafka 认证失败PP_MQ_PASSWORD 是两个代理共用的使用 passwd.sh PP_MQ_PASSWORD 同时更新两者 → 密码

安全 / 外部暴露​

端口推荐
9092 (Kafka SASL 明文)仅私有网络
9094 (Kafka SASL_SSL)外部暴露时使用
1883 (MQTT 明文)仅私有网络
1884 (MQTT TLS)外部暴露时使用

相关文档​