Zum Hauptinhalt springen

plantpulse-messaging (Messaging-Schicht)

Rolle

Die Message-Broker-Schicht, die als Nervensystem von PlantPulse fungiert. Sie erfasst Sensordaten aus der Industrieanlage und vermittelt Ereignisse zwischen Modulen. Es gibt zwei Broker — Kafka und HiveMQ (MQTT).

ElementWert
Modulnameplantpulse-messaging
Installationspfad/opt/kopens/plantpulse-platform/plantpulse-messaging/
Datenspeicherort/data1/pp-data/kafka/kraft_combined_logs
pd Servicemessaging — nur auf MASTER-Knoten
BenutzerkontoPP_MQ_USER / PP_MQ_PASSWORDKafka und HiveMQ teilen denselben Wert
STOMP (ActiveMQ) ist veraltet

Mit der Umstellung von Browser-Echtzeit-Push auf SSE wurde der STOMP-Broker aus dem Image entfernt. Die Ports 61000 / 61004 und PP_STOMP_* werden nicht mehr bereitgestellt. Wenn sie noch in alten Firewall-Regeln vorhanden sind, sollten Sie diese bereinigen.

Architektur

Kafka

Ein einzelner Broker im KRaft-Modus (ohne ZooKeeper), der auch als Controller fungiert.

ElementWert
Port9092 (SASL_PLAINTEXT) · 9093 (Controller, intern) · 9094 (SASL_SSL)
AuthentifizierungSASL/PLAIN — statische JAAS (config/jaas.conf). Benutzerkonto PP_MQ_USER
Advertised AddressPP_KAFKA_ADVERTISED_HOST — wird beim Start durch die Host-Adresse ermittelt
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 aus /etc/kopens/conf/kafka.properties.template auf dem Host rendert. Die Dateien broker.properties · server.properties · controller.properties im selben Verzeichnis sind Beispieldateien der Apache-Kafka-Distribution und werden von niemand gelesen. Wundern Sie sich nicht, wenn Sie in den Logs des Containers Werte wie advertised.listeners=PLAINTEXT://localhost:9092 sehen.

Die entscheidenden Zeilen 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. Die tatsächliche Datenspeicherung erfolgt in Cassandra · Zeitreihen-Engine · Iceberg; Kafka ist nur der Puffer dazwischen. Die Aufbewahrungsdauer pro Topic und «wer hat das festgelegt» zeigt pd retention.

Wichtige Topics

Der Präfix pp (PP_TOPIC_PREFIX) wird vorangestellt. Im Folgenden sind die repräsentativen Topics aufgeführt, die vom Plattform-Code verwendet werden.

TopicZweck
event · event-rowServer ↔ Engine Event Bus
pp-tag-pointTag-Wert-Stream — wird nur gefüllt, wenn «Kafka Publishing» pro Tag aktiviert ist
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 · Diagnose-Status
pp-domain-changed-eventMetadatenänderungen
pp-production-oee · pp-production-ram · pp-production-emsProduktionskennzahlen

Operationsbefehle

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 Tools der Kafka-Distribution direkt zu verwenden, müssen SASL-Anmeldedaten als Client-Konfigurationsdatei übergeben werden. pd flow · pd node topic erledigen dies für Sie — verwenden Sie diese zuerst.

9092 offen heißt nicht, dass der Broker bereit ist

Der Broker öffnet Port 9092 etwa 10 Sekunden vor dem Aktivieren der Anfrageverarbeitung. Daher prüft der Healthcheck in pd nicht den Port, sondern «ob eine ApiVersions-Anfrage an die advertised Address eine Antwort erhält». Versuchen Sie DOWN (port 9092 is bound but … did not answer) 30 Sekunden nach dem Start erneut.

Tuning-Punkte

Alle Einstellungen befinden sich in /etc/kopens/conf/kafka.properties.template und werden mit restart-datalake.sh angewendet.

ElementStandardHinweise
log.retention.ms1 StundeVerlängern Sie dies, wenn Consumer längere Zeit pausieren können. Dies verbraucht entsprechend mehr Speicherplatz
num.partitions4Anzahl der Partitionen für neue Topics. Passen Sie dies an die Anzahl der Consumer-Threads an
num.io.threads · num.network.threads8 · 3Bei NVMe bis zu 16 für io
message.max.bytes150 MBGroßzügig für große Nachrichten (Datei-Warteschlangen)

HiveMQ (MQTT)

Ein Standard-MQTT-Broker (Community Edition), mit dem leichte IoT-Geräte · Sensoren und Edge-Agenten verbunden sind.

ElementWert
Port1883 (Klartext) · 1884 (TLS) — ein Proxy-Container macht diese auf dem Host verfügbar und leitet an den Datalake weiter
AuthentifizierungBenutzername / Passwort — die Security Extension liest conf/auth.properties
BenutzerkontoPP_MQ_USER / PP_MQ_PASSWORD (gleicher Wert wie Kafka)
Konfigurationmqtt/conf/config.xml/etc/kopens/conf/hivemq.xml.template

Der TLS-Listener verwendet den öffentlichen Keystore der Plattform (/var/security/plantpulse/master/master.keystore.jks) und erfordert 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 Audit-Log auf Nachrichtenebene, das pd logs absichtlich ausschließt)

Häufig auftretende Probleme

SymptomUrsacheMaßnahme
Clients von anderen Hosts trennen sich nach BootstrapAdvertised Address ist interne Container-AdresseKnotendatei PP_MASTER_IPWie Sie die Einstellungen ändern
pd status messaging ist DOWN (advertises 127.0.0.1…)Knotendatei enthält keine AdresseGleiche Maßnahme. Gleiche Ursache wie Render Exit 8
Consumer-Lag nimmt zuConsumer ist langsam · pausiertpd flow Tabelle MEMB · LAG, Consumer-Container-Protokolle
Speicherplatz vollAufbewahrung erhöht, aber Consumer stoppenTabelle Kafka in pd retention, log.retention.ms
MQTT TLS Handshake schlägt fehlZertifikat abgelaufen · SAN fehltSicherheitseinstellungenplantpulse-certs gibt neu aus
Nach Rotation nur Kafka-Authentifizierung fehlgeschlagenPP_MQ_PASSWORD ist gemeinsam für beide BrokerMit passwd.sh PP_MQ_PASSWORD beide zusammen aktualisieren → 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 Dokumentation