Runink Quickstart
Runink Quickstart
π Runink Quickstart: CDM Trade Pipeline
This example shows how to define, test, apply, and run a declarative data pipeline using Runink.
Environment scenario
%% Mermaid Diagram: Runink Architecture (Blueprint View) flowchart TD subgraph Developer_Client["π Developer / Client"] Developer["Developer"] end subgraph Global_Control_Plane["π§ Runink Global Control Plane (HA Setup)"] GlobalAPI["API Server x3 - AuthN/AuthZ - Herd Routing - TLS gRPC"] HerdDirectory["Herd Directory - Maps Herds to Raft Groups - Metadata Routing"] end subgraph Finance_Herd["π¦ Finance Herd Partition"] FinanceScheduler["Finance Scheduler (Leader) - DAG Planning - Placement Decisions"] FinanceBarn["Finance Barn (KV Store) - BadgerDB (Local)"] FinanceGovernance["Finance Governance Service - Lineage - Quality - Contracts"] FinanceSecrets["Finance Secrets Manager - Raft-backed Secret Storage"] FinanceRaft["Finance Raft Group (5 Nodes) (etcd-io/raft)"] end subgraph Analytics_Herd["π Analytics Herd Partition"] AnalyticsScheduler["Analytics Scheduler (Leader) - DAG Planning - Placement Decisions"] AnalyticsBarn["Analytics Barn (KV Store) - BadgerDB (Local)"] AnalyticsGovernance["Analytics Governance Service - Lineage - Quality - Contracts"] AnalyticsSecrets["Analytics Secrets Manager - Raft-backed Secret Storage"] AnalyticsRaft["Analytics Raft Group (5 Nodes) (etcd-io/raft)"] end subgraph Worker_Cluster["π§± Worker Nodes Cluster"] RuniAgent["Runi Agent x100 - Node Registration - Slice Management - Metrics Collection"] RuniSlice["Runi Slice (Ephemeral Container) - Herd Namespaced - Config Loaded - Secrets Injected"] end Developer --> | CLI/API Requests | GlobalAPI GlobalAPI --> | Resolve Herd Assignment | HerdDirectory GlobalAPI --> | Finance Pipelines | FinanceScheduler GlobalAPI --> | Analytics Pipelines | AnalyticsScheduler FinanceScheduler --> | DAG and Placement Reads | FinanceBarn FinanceGovernance --> | Metadata/Lineage Writes | FinanceBarn FinanceSecrets --> | Secrets CRUD | FinanceBarn FinanceBarn --> | Log Replication | FinanceRaft AnalyticsScheduler --> | DAG and Placement Reads | AnalyticsBarn AnalyticsGovernance --> | Metadata/Lineage Writes | AnalyticsBarn AnalyticsSecrets --> | Secrets CRUD | AnalyticsBarn AnalyticsBarn --> | Log Replication | AnalyticsRaft FinanceScheduler --> | Dispatch Finance Slices | RuniAgent AnalyticsScheduler --> | Dispatch Analytics Slices | RuniAgent RuniAgent --> | Launch with Herd Isolation | RuniSlice RuniAgent --> | Fetch Finance Secrets | FinanceSecrets RuniAgent --> | Fetch Analytics Secrets | AnalyticsSecrets RuniSlice --> | Emit Lineage Events | FinanceGovernance RuniSlice --> | Emit Lineage Events | AnalyticsGovernance RuniSlice --> | Expose Service Port | RuniAgent RuniAgent --> | Port-Forwarded Access | Developer
π οΈ Prerequisites
Ensure you have:
- A
.dsl
scenario:features/cdm_trade/trade_cdm.dsl
- A Go contract file:
contracts/trade_cdm_multi.go
- Golden test files:
golden/cdm_trade/
- Sample input data:
golden/cdm_trade/input.json
Our example presents the following:
flowchart TD A["Kafka (raw)"] --> B["DecodeCDMEvents"] B --> C["sf:control.decoded_cdm_events"] B --> D["ValidateLifecycle"] D -->|if !valid| E["sf:control.invalid_cdm_events"] D -->|if valid| F["TagWithFDC3Context"] F --> G["sf:cdm.validated_trade_events"]
π‘ Example Flow
# Create a secure namespace (herd)
runi herd init finance
runi compile --scenario features/payment.dsl --herd finance --contract contracts/payment.go --out dags/payment.go
runi run --dag dags/payment.go
π§ͺ Test Your Pipelines
runi audit --scenario features/payment.dsl --contract contracts/payment.go --golden tests/input.json
runi synth --scenario features/payment.dsl --contract contracts/payment.go --golden tests/input.json
runi fetch --scenario features/example.dsl --golden tests/input.json --output table.sql --show
π Inspect Pipeline Execution
After running, inspect the pipeline using:
runi status --run-id RUN-20240424-XYZ --herd finance
Example Output
run_id: RUN-20240424-XYZ
herd: finance
status: completed
steps:
- DecodeCDMEvents:
processed: 2
output: sf://control.decoded_cdm_events
- ValidateLifecycle:
passed: 1
failed: 1
output:
- valid β sf://cdm.validated_trade_events
- invalid β sf://control.invalid_cdm_events
- TagWithFDC3Context:
enriched: 1
context_prefix: fdc3.instrumentView:
lineage:
contract_hash: a9cd23fβ¦
contract_version: v3
created_by: service-account:etl-runner
π Follow-Up Commands
runi lineage --run-id RUN-20240424-XYZ
runi logs --run-id RUN-20240424-XYZ
runi publish --herd finance --scenario features/cdm_trade/cdm_trade.dsl
Runink makes secure, declarative data orchestration easy β every pipeline is testable, auditable, and reproducible.