跳到主要内容
版本:Next

Top-level configuration

An ArkFlow configuration describes the engine: logging, the health-check / control-plane server, the list of streams to run, and optional streaming jobs executed by the unified kernel. The file format is selected by extension — .yaml/.yml, .json, or .toml are all accepted.

logging:
level: info

health_check:
enabled: true
address: "127.0.0.1:8080"

streams:
- id: orders
input:
type: memory # any registered input — see the component pages
pipeline:
processors: [] # optional processors
output:
type: drop # any registered output

jobs: [] # optional declarative streaming jobs, see "job" below

Top-level fields

FieldTypeRequiredDefaultDescription
streamsarray<stream>yes*Streams to run.
jobsarray<job>no[]Declarative streaming jobs (DAG + time + state + checkpoint) run by the unified kernel.
loggingobjectnosee belowLogging configuration.
health_checkobjectnosee belowHealth-check and control-plane server.

* Both streams and jobs default to empty lists; a jobs-only configuration is valid (declare streams: [] or omit it).

logging

FieldTypeRequiredDefaultDescription
levelstringnoinfoLog level: debug, info, warn, error.
file_pathstringnoWrite logs to this file instead of stdout.
formatstringnoplainLog format: plain or json.

health_check

Runs an HTTP server with /health, /readiness, and /liveness endpoints (useful for Kubernetes). The same server also hosts the optional control-plane API and the Hub agent when hub_url is set (see Control plane).

FieldTypeRequiredDefaultDescription
enabledbooleannotrueStart the health-check / control-plane server.
addressstringno127.0.0.1:8080Listen address.
health_pathstringno/healthOverall health endpoint path.
readiness_pathstringno/readinessReadiness endpoint path.
liveness_pathstringno/livenessLiveness endpoint path.
api_prefixstringno/api/v1Prefix for the versioned control-plane API.
api_tokenstringnoOptional Bearer token protecting control-plane operations and configuration.
cors_originsarray<string>no[]Browser origins allowed to call the control API. Empty denies cross-origin calls.
hub_urlstringnoHub URL for compute-node agent mode. Absent ⇒ standalone mode.
node_idstringnoStable identity this process reports to its Hub.
node_tokenstringnoShared node registration credential. Never included in reports.
agent_lease_ttl_msintegerno15000Lease duration (ms) a compute node advertises to its Hub.
agent_session_ttl_msintegerno3600000Hard lifetime (ms) of a Hub-issued agent session credential; the Agent re-registers transparently when it elapses.
data_portintegernoData-plane listen port for cross-node shuffle. When absent the node runs without a network data plane and never advertises the network_shuffle capability. Set together with data_host on every node participating in a split placement.
data_hoststringnoRoutable host peers use to reach this node's data plane (e.g. a LAN IP). Required together with data_port for split placement.
observabilityobjectnosee belowProcess-level Prometheus metrics and health probes (see Observability).

health_check.observability

Exports process-level observability endpoints. They stay available even when health_check.enabled is false — a pure data-plane deployment (no control-plane API, no Hub) still exposes metrics and probes. The listener binds loopback by default; for production, set an explicit address or rely on host/firewall policy. When the control-plane server is enabled, its router serves the same endpoints and no second listener is started.

FieldTypeRequiredDefaultDescription
enabledbooleannotrueStart the observability listener (unless the control-plane server already serves the endpoints).
addressstringno127.0.0.1:8081Listen address.
metrics_pathstringno/metricsPrometheus exposition endpoint (format 0.0.4).
ready_pathstringno/readyReadiness probe: success once the engine finished starting the configured Streams and Jobs.
live_pathstringno/liveLiveness probe: success while the process is running.

Standalone Hub startup safety

The standalone arkflow-server control plane is fail-closed by default. Set ARKFLOW_HUB_STORAGE to a durable SQLite path, ARKFLOW_OPERATOR_TOKEN for operator APIs, and ARKFLOW_NODE_TOKEN for Agent registration before binding the Hub beyond loopback. For explicitly local development only, set ARKFLOW_HUB_INSECURE_LOCAL=1 while keeping ARKFLOW_HUB_ADDRESS on a loopback address; this permits volatile state and omitted credentials. The Hub restores durable state before binding its listener, so a recovery error leaves the server unavailable rather than serving a partial view.

备注

When the control-plane server is enabled, /ready and /live are also mounted on the server address next to the legacy /health, /readiness, and /liveness endpoints (which keep their original semantics).

stream

Each entry in streams is one independent processing pipeline. Stream fields are documented in depth in the Components section; the shape is:

FieldTypeRequiredDefaultDescription
idstringnostream-<index>Stable stream identifier (must be unique; used for WAL identity and Hub reporting).
inputobjectyesInput component (source).
pipelineobjectyesProcessor pipeline.
outputobjectyesOutput component (sink).
error_outputobjectnoOutput that receives batches a processor failed on.
bufferobjectnoBuffer / windowing strategy between input and processors.
durabilityobjectnoPer-stream WAL durability (see Delivery semantics).
stateobjectnoState contract for legacy windows. Declare durability: ephemeral for a non-recoverable window, or use a jobs entry with checkpoints for durable state.
temporaryarray<object>noTemporary storage tables for joins.

pipeline

FieldTypeRequiredDefaultDescription
thread_numintegerno1Number of processor worker tasks.
processorsarray<object>yesOrdered list of processor components.

job

Each entry in jobs is a declarative streaming job: an operator DAG with explicit event-time, state, checkpoint, and recovery settings. Jobs run locally through the same unified kernel as streams, and the same job shape is what the Hub distributes to compute nodes (see Distributed jobs).

jobs:
- id: local-job
version: 1
parallelism: 1
max_parallelism: 128
operators:
- { id: source, kind: source }
- { id: sink, kind: sink }
edges:
- { id: e1, from: source, to: sink, partitioned: true }
sources:
- operator_id: source
input_type: generate
config: { type: generate, context: '{"value": 1}', interval: 1s, batch_size: 10 }
time:
mode: processing_time
sinks:
- operator_id: sink
output_type: stdout
recovery: latest_checkpoint
FieldTypeRequiredDefaultDescription
idstringyesStable job identifier; must be unique across jobs.
versionintegeryesJob version; state-format compatibility on recovery is evaluated against it.
parallelismintegerno1Default task parallelism.
max_parallelismintegerno128Upper bound used for key-group partitioning.
operatorsarray<object>yesDAG nodes: id, kind (source, map, filter, aggregate, window, sink, udf); join is reserved but rejected until a distributed multi-input runtime exists.
edgesarray<object>no[]DAG edges: id, from, to, partitioned (key-group routing instead of same-subtask).
sourcesarray<object>no[]Attach a component input to a source operator: operator_id, input_type, config, time.
sinksarray<object>no[]Attach a component output to a sink operator: operator_id, output_type, config.
stateobjectnobackend (e.g. embedded_kv), durability (durable by default or explicit ephemeral), optional stable root (or ARKFLOW_STATE_ROOT), namespace, ttl_ms, format_version, max_pending_transactions (positive; default 4096; raise it when a window sees very high per-window key cardinality, since one transaction is held per open window group or unacknowledged output), optional positive max_bytes live-state budget. Required by stateful operators; durable state also requires checkpoint.
checkpointobjectnointerval_ms, retention, object_store_uri (e.g. file://... or s3://...).
recoverystringnolatest_checkpointlatest_checkpoint, latest_savepoint, or fail.

time (source event-time declaration)

FieldTypeRequiredDefaultDescription
modestringyesevent_time or processing_time.
timestamp_fieldstringnoField read as the event timestamp when mode: event_time.
watermarkobjectnostrategy (bounded_out_of_orderness (default) or monotonous), out_of_orderness_ms, idle_timeout_ms.
allowed_lateness_msintegerno0How far past the watermark late events are still accepted.
late_event_policystringnodropWhat happens to late events: drop, route, or update.
late_event_routestringnoOperator receiving routed late events when the policy is route.
备注

Intermediate operator kinds (map, filter, aggregate, window, join, udf) are primarily produced by the streaming SQL compiler and the console DAG orchestrator today. Always run --validate before deploying: it performs the same deep build checks as startup and rejects unsupported operators or state backends explicitly. ./target/release/arkflow schema emits the authoritative JSON Schema, including the jobs fields, for editor completion.

Validate before running

Always validate a config first:

./target/release/arkflow --config config.yaml --validate

Or emit the full JSON Schema and point your editor at it for field-level completion:

./target/release/arkflow schema > arkflow.schema.json

A pre-generated schema ships with the documentation at /config-schema.json; see IDE auto-completion for editor setup.