Skip to main content

StreamApp

A streaming app: a Kafka topic in, an Iceberg table out.

Spec​

FieldTypeRequiredDefaultDescriptionConstraints
spec.enginestringNosparkspark
spec.ownerGroupstring (nullable)NoThe group whose members may see and stop the stream; absent means administrators only.min 1, max 64; pattern ^[A-Za-z0-9][A-Za-z0-9._-]*$
spec.restartPolicystringNoalwaysalways, on-failure
spec.runAsstring (nullable)NoThe ServicePrincipal the job runs as (convention: pipeline-<ownerGroup>).min 1, max 40; pattern ^[a-z0-9][a-z0-9-]*$
spec.sinkobjectYes
spec.sink.catalogstringYesCatalog the sink table lives in; it must let runAs write.min 1, max 63; pattern ^[a-z0-9][a-z0-9-]*$
spec.sink.checkpointPrefixstring (nullable)NoS3 prefix for the checkpoint; absent means checkpoints/<namespace>/<name>.min 1, max 512; pattern ^[A-Za-z0-9][A-Za-z0-9_./-]*$
spec.sink.mergeKeysarray of stringNoColumns of MERGE … ON; 1 to 8, each one an existing column.min 0, max 8
spec.sink.modestringNomergemerge, append
spec.sink.tablestringYesschema.table.min 3, max 128; pattern ^[a-z0-9_]+\.[a-z0-9_]+$
spec.sourceobjectYes
spec.source.connectionRefstring (nullable)NoName of the Connection (type: kafka) whose config.bootstrapServers the job reads. Absent: the platform's own bus, kafka-kafka-bootstrap.<namespace>.svc.cluster.local:9092.min 1, max 63; pattern ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
spec.source.formatstringNojsonjson
spec.source.topicstringYesmin 1, max 249; pattern ^[A-Za-z0-9._-]+$
spec.stoppedbooleanNofalsetrue stops the job and deletes its SparkApplication; the checkpoint is kept, so stopped: false resumes from it. The one verb Nova's page needs.

Status​

FieldTypeRequiredDefaultDescriptionConstraints
status.attemptsinteger (nullable)NoHow many times Spark has submitted the application (SparkApplication.status.executionAttempts); absent until it exists.format int64
status.conditionsarray of objectNo[]
status.conditions[].lastTransitionTimestring (nullable)No
status.conditions[].messagestring (nullable)No
status.conditions[].observedGenerationinteger (nullable)Noformat int64
status.conditions[].reasonstring (nullable)No
status.conditions[].statusstringYes
status.conditions[].typestringYes
status.lastCheckpointAtstring (nullable)No
status.lastErrorstring (nullable)No
status.lastSubmittedAtstring (nullable)NoWhen Spark last submitted the application (RFC 3339), from SparkApplication.status.lastSubmissionAttemptTime.
status.observedGenerationinteger (nullable)Noformat int64
status.phasestringNo""Pending, Running, Failed or Stopped.

Validation rules​

  • a stream needs a topic of 1 to 249 characters: letters, digits, dot, underscore or dash
  • sink.table is schema.table, lower-case letters, digits and underscores
  • sink.mode merge needs mergeKeys; append forbids them