MonoTS Edge-to-Cloud Streams Reference
In MonoTS, a Stream is the core mechanism for reliable edge-to-cloud data synchronization. Using standard SQL, you can push time-series CDC (Change Data Capture) from a local table to Kafka, Delta Lake, or the filesystem — without external sync middleware.
1. Synchronization guarantees
Understand these guarantees before you configure a stream:
| Guarantee | Meaning |
|---|---|
| Server-driven push | The MonoTS process embeds the sync engine and actively pushes data to the sink |
| Automatic checkpoints | Sync offsets are recorded automatically; after outages or restarts, sync resumes from the last checkpoint |
| At-least-once delivery | Data is not lost under network jitter, but rare duplicates may appear — design downstream consumers for idempotency |
One stream captures exactly one source table.
2. Stream management SQL
Managing streams is similar to managing tables.
CREATE STREAM
Define and start a sync task from a local table to an external sink. Connection parameters go in the WITH clause.
CREATE STREAM [IF NOT EXISTS] <stream_name> WITH (
'property_key' = 'property_value',
...
);
SHOW STREAMS / SHOW STREAM / SHOW STREAM STATUS
-- List all streams
SHOW STREAMS;
-- Show configuration for one stream
SHOW STREAM sync_to_kafka_01;
-- Runtime status (offset, phase, errors, …)
SHOW STREAM STATUS FOR sync_to_kafka_01;
Useful status fields include:
phase— lifecycle state (inactive,syncingbatch,syncinglog,active,completed,failed, …)batch_files_done/ totals — historical backfill progressacked_lsn— highest LSN acknowledged by the sink
DROP STREAM
Dropping a stream does not delete local table data or downstream cloud data — it only stops the sync process and removes the stream definition.
DROP STREAM sync_to_kafka_01;
3. Global properties
All sink types share these base properties:
| Key | Required | Values / notes |
|---|---|---|
source.table | Yes | Local table to sync (one table per stream) |
sink.type | Yes | kafka, delta, or filesystem |
cdc.mode | No | batch — sealed / historical Parquet only (default for Delta & filesystem). hybrid — historical export, then live WAL tailing (default for Kafka) |
cdc.auto_end | No | true / false (default). If true, the stream ends after the current historical export finishes (one-shot backup) |
Legacy flat keys such as sink.path may still work for compatibility. Prefer prefixed keys like sink.delta.path.
4. Sink configuration and examples
4.1 Apache Kafka
Push edge rows as JSON into Kafka — good for low-latency streaming, pipelines, and real-time alerting.
| Setting | Value |
|---|---|
Default cdc.mode | hybrid |
| Format | JSON only today |
| Property | Description |
|---|---|
sink.kafka.brokers | Kafka brokers, e.g. 192.168.1.100:9092,192.168.1.101:9092 |
sink.kafka.topic | Destination topic |
CREATE STREAM kafka_metrics_sync WITH (
'sink.type' = 'kafka',
'source.table' = 'edge_metrics',
'sink.kafka.brokers' = '192.168.1.100:9092,192.168.1.101:9092',
'sink.kafka.topic' = 'edge-telemetry-live',
'cdc.mode' = 'hybrid'
);
5. Operations notes
FLUSH for batch modes
In batch mode, only sealed Parquet SSTs are exported. Rows still in the memtable are not synced until flush (automatic size threshold or manual):
INSERT INTO edge_metrics (time, device_id, temperature)
VALUES (1718000000000, 'sensor-1', 21.5);
FLUSH TABLE edge_metrics;
Typical lifecycle
SHOW STREAMS;
SHOW STREAM STATUS FOR kafka_metrics_sync;
DROP STREAM kafka_metrics_sync;
Related docs
- Edge-to-Cloud Sync Guide — architecture patterns and resilience behavior
- SQL Reference — local DDL / DML / SELECT
- 5-Minute Edge Quick Start — create a local table first