Configuration
Pipeline YAML sections, edge attributes, variable substitution, and the Runtime config.
Top-level sections
Three-section topology
Nodes are organized by section; edges declared on the downstream side via from:
sources:
ingest:
decoder: json
kafka: { brokers: ["${KAFKA_BROKERS}"], topics: [orders] }
transforms:
enrich:
from: [ingest] # unconditional edge
script: |
payload.total = payload.price * payload.qty
sinks:
eu-out:
from: { enrich: { when: 'meta.region == "eu"' } } # conditional edge
kafka: { topic: orders-eu }
Edge attributes
Attributes on from elements:
Variable substitution
${VAR} — environment variable (unset = error)${?VAR} — optional (unset = omit key)${constants.name} — pipeline constant- Applies to all string values
Built-in plugins
Sources
Sinks
Codecs
Job pipeline example
apiVersion: eventboat/v3
kind: Pipeline
metadata: { name: nightly-sync }
run:
mode: job
schedule: "0 1 * * *"
overlap: skip
catchup_window: 2h
skip_if_successful: true
retention: { history: 90d }
parameters:
from: { type: string, default: cursor }
to: { type: string, default: now }
sources:
pull:
sql:
driver: mysql
query: |
SELECT * FROM orders
WHERE updated_at >= :from AND updated_at < :to
args: { from: "${parameters.from}", to: "${parameters.to}" }
cursor: { column: updated_at }
pagination: { key: [updated_at, id], page_size: 5000 }
transforms:
enrich:
from: [pull]
script: |
payload.source_system = constants.source_system
sinks:
out:
from: [enrich]
kafka: { brokers: ["${KAFKA_BROKERS}"], topic: orders-sync }