Migration from Classic
This guide walks through migrating from UMH Classic to UMH Core. The key changes involve data contracts, configuration syntax, and architectural improvements.
Migration Strategy
The recommended approach is side-by-side deployment to minimize risk:
Deploy Core next to Classic - Point a Bridge at the Classic UNS topics
Cut over producers/consumers gradually
Shut down Classic pods once data is verified
Key Changes from Classic to Core
Data Contract Migration
Core Change: _historian
→ _raw
_historian
→ _raw
UMH Classic (Deprecated):
UMH Core (Current):
Configuration Changes
Bridge Configuration
UMH Classic:
UMH Core:
Key Differences
Data Contracts
_historian
only
_raw
+ explicit contracts
Configuration
Direct Benthos config
Embedded within Bridges/Flows
Output
Direct Kafka
UNS output (abstracts Kafka)
Location
Manual topic construction
Automatic hierarchical path construction (supports ISA-95, KKS, or custom naming)
Data Modeling
Single payload format
Structured models + contracts
Database Integration
Automatic with _historian
Manual with specific contracts
Important: No Default Database Integration
⚠️ Breaking Change: UMH Core has no default data contract that automatically writes to TimescaleDB.
UMH Classic:
UMH Core:
Migration Impact:
_raw
data contracts do NOT automatically save to TimescaleDBYou must create explicit database sink flows for any data you want persisted
This provides more control but requires manual configuration
Exporting Benthos Configurations
Export your existing Benthos configs from Classic:
Extract the Benthos pipeline section and paste it into Core's config.yaml → dataFlow:
section.
What to Migrate
Benthos pipelines
Individual pods
config.yaml → dataFlow
Export configs from ConfigMaps
Node-RED flows
Node-RED pod
External container
Run separately, connect via MQTT/HTTP
Grafana dashboards
Bundled Grafana
External Grafana
Point at TimescaleDB
TimescaleDB
TimescaleDB pod
External database
Use Bridge to forward data
3. Verify Migration
Check topic creation: Ensure new
_raw
topics are being createdValidate consumers: Confirm all consumers are receiving data from
_raw
topicsMonitor metrics: Watch for any data loss or processing errors
Test integrations: Verify external systems still receive expected data
Side-by-Side Deployment
Run Core alongside Classic during transition:
Getting Help
Next Steps
After completing the basic migration:
Tag Groups Migration
UMH Classic (Tag Groups in Payload):
UMH Core (Virtual Paths in Topics):
Migration Benefits:
Granular subscriptions: Subscribe to just
pos.*
for positioning dataIndependent scaling: Different retention for different sensor groups
Type safety: Each topic has explicit schema validation
Cross-site consistency: Same virtual path structure across all CNCs
Migration Steps:
Identify tag groups in Classic payloads (nested JSON objects)
Create data models with folder structures matching groups
Define stream processors to map raw inputs to virtual paths
Update consumers to subscribe to specific virtual path patterns
Last updated