Zum Hauptinhalt springen

plantpulse-messaging (Messaging-Ebene)

Rolle​

Dies ist die Message-Broker-Ebene, die als Nervensystem von PlantPulse fungiert. Sie erfasst Sensordaten aus der industriellen Vor-Ort-Umgebung und leitet Ereignisse zwischen den Modulen weiter. Es gibt zwei Broker: Kafka und HiveMQ (MQTT).

PunktWert
Modulnameplantpulse-messaging
Installationspfad/opt/kopens/plantpulse-platform/plantpulse-messaging/
Datenverzeichnis/data1/pp-data/kafka/kraft_combined_logs
pd-Dienstmessaging — nur auf dem MASTER-Knoten
KontoPP_MQ_USER / PP_MQ_PASSWORD — Kafka und HiveMQ teilen sich denselben Wert
STOMP (ActiveMQ) ist ausgemustert

Mit dem Wechsel des Browser-Echtzeit-Pushs auf SSE wurde der STOMP-Broker aus dem Image entfernt. Die Ports 61000 / 61004 und PP_STOMP_* werden nicht mehr bedient. Entfernen Sie veraltete Firewall-Regeln, falls diese noch vorhanden sind.

Aufbau​

Kafka​

Ein einzelner Broker im KRaft-Modus (ohne ZooKeeper) fungiert gleichzeitig als Controller.

PunktWert
Port9092 (SASL_PLAINTEXT) · 9093 (Controller, intern) · 9094 (SASL_SSL)
AuthentifizierungSASL/PLAIN — statisches JAAS (config/jaas.conf). Konto PP_MQ_USER
WerbeadressePP_KAFKA_ADVERTISED_HOST — wird beim Start auf die Host-Adresse abgeleitet
Topic-PräfixPP_TOPIC_PREFIX (Standard pp)

Der Broker liest genau eine Datei​

plantpulse-messaging/kafka/config/kafka.properties ist die Broker-Konfiguration und wird in /etc/kopens/conf/kafka.properties.template des Hosts gerendert. Die broker.properties · server.properties · controller.properties im selben Verzeichnis sind Beispieldateien, die mit der Apache-Kafka-Distribution ausgeliefert werden und von niemandem gelesen werden. Wundern Sie sich nicht über Werte wie advertised.listeners=PLAINTEXT://localhost:9092 im Container.

Kernzeilen der Vorlage (Platzhalter werden beim Rendern gefüllt):

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 ist ein 1-Stunden-Puffer

Die Standard-Aufbewahrung des Brokers beträgt 1 Stunde. Der Datenspeicher für Daten sind Aster TSDB · Zeitreihen-Engine · Iceberg; Kafka ist nur der Puffer dazwischen. Die Aufbewahrung pro Topic und «wer hat den Wert festgelegt» zeigt pd retention.

Wichtige Topics​

Das Präfix pp (PP_TOPIC_PREFIX) wird vorangestellt. Dies sind die wichtigsten Topics, die vom Plattformcode verwendet werden.

TopicZweck
event · event-rowEreignisbus Server ↔ Engine
pp-tag-pointTag-Wertstrom — muss pro Tag die Option «Kafka-Veröffentlichung» aktiviert haben, um befüllt zu werden
pp-tag-alarm · pp-asset-alarm · pp-asset-eventAlarm · Asset-Ereignisse
pp-asset-data · pp-asset-aggregation · pp-asset-health-statusAsset-Daten und Aggregationen
pp-batchBatch-Jobs
pp-edge-status · pp-opc-status · pp-diagnosticEdge · OPC · Diagnosestatus
pp-domain-changed-eventMetadatenänderungen
pp-production-oee · pp-production-ram · pp-production-emsProduktionskennzahlen

Betriebsbefehle​

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

Um die Werkzeuge der Kafka-Distribution direkt zu verwenden, müssen SASL-Anmeldedaten als Client-Konfigurationsdatei übergeben werden. pd flow · pd node topic übernehmen das, verwenden Sie also zuerst diese.

Offener Port 9092 bedeutet nicht, dass er bereit ist

Der Broker öffnet Port 9092 etwa 10 Sekunden bevor er die Verarbeitung von Anfragen aktiviert. Deshalb prüft der Health-Check von pd nicht den Port, sondern ob eine ApiVersions-Anfrage an die Werbeadresse gesendet und beantwortet wird. Führen Sie DOWN (port 9092 is bound but … did not answer) direkt nach dem Start erneut nach 30 Sekunden aus.

Tuning-Punkte​

Alles wird in /etc/kopens/conf/kafka.properties.template geändert und mit restart-datalake.sh angewendet.

PunktStandardAnmerkung
log.retention.ms1 StundeErhöhen, wenn Konsumenten längere Zeit ausfallen können. Belegt entsprechend mehr Plattenplatz
num.partitions4Anzahl der Partitionen für neue Topics. Auf Anzahl der Consumer-Threads abstimmen
num.io.threads · num.network.threads8 · 3Bei NVMe kann io auf 16 erhöht werden
message.max.bytes150 MBGroßzügig dimensioniert für große Nachrichten (Datei-Warteschlangen)

HiveMQ (MQTT)​

Dies ist der Standard-MQTT-Broker für leichte IoT-Geräte · Sensoren und den Edge-Agenten (Community Edition).

PunktWert
Port1883 (Klartext) · 1884 (TLS) — der Proxy-Container veröffentlicht diese auf dem Host und leitet an das Data Lake weiter
AuthentifizierungBenutzername / Passwort — die Sicherheitserweiterung liest conf/auth.properties
KontoPP_MQ_USER / PP_MQ_PASSWORD (gleicher Wert wie bei Kafka)
Konfigurationmqtt/conf/config.xml ← /etc/kopens/conf/hivemq.xml.template

Der TLS-Listener verwendet den plattformweiten Keystore (/var/security/plantpulse/master/master.keystore.jks) und verlangt keine Client-Zertifikate (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/#'

Protokolle​

docker exec plantpulse-datalake pd logs --lines 100 messaging
BrokerDatei
Kafkaplantpulse-messaging/kafka/logs/
HiveMQplantpulse-messaging/mqtt/logs/hivemq.log (event.log ist ein nachrichtenweises Audit-Protokoll, daher wird pd logs bewusst ausgelassen)

Häufig auftretende Probleme​

SymptomUrsacheMaßnahme
Client von anderem Gerät wird nach Bootstrap getrenntWerbeadresse ist die Container-interne AdresseKnotendatei PP_MASTER_IP → Konfiguration ändern
pd status messaging ist DOWN (advertises 127.0.0.1…)Keine Adresse in der KnotendateiGleiche Maßnahme. Gleiche Ursache wie Render-Exit-Code 8
Consumer-Lag steigtKonsument langsam · gestopptpd flow von MEMB · LAG, Consumer-Container-Logs
Festplatte vollAufbewahrung erhöht, aber Konsument gestopptkafka-Tabelle in pd retention, log.retention.ms
MQTT-TLS-Handshake fehlgeschlagenZertifikat abgelaufen · SAN fehltSicherheitseinstellungen — plantpulse-certs stellt neu aus
Nur Kafka schlägt nach Rotation fehlPP_MQ_PASSWORD ist für beide Broker gemeinsampasswd.sh PP_MQ_PASSWORD für beide zusammen → Passwörter

Sicherheit / Externe Exposition​

PortEmpfehlung
9092 (Kafka SASL Klartext)Nur privates Netzwerk
9094 (Kafka SASL_SSL)Bei externer Exposition verwenden
1883 (MQTT Klartext)Nur privates Netzwerk
1884 (MQTT TLS)Bei externer Exposition verwenden

Verwandte Dokumente​