Lineage service configuration
The server receives OpenLineage run events, passes each through a processor, and writes it to one or more sinks. Each stage is pluggable, so events can be transformed or sent to systems beyond the bundled lineage store.
Quick start
-
Send an event. The HTTP source accepts events that follow the OpenLineage API specification.
Send a START run eventcurl -sS -X POST "https://{gravitino_host}/api/lineage" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"eventType": "START",
"eventTime": "2026-01-01T00:00:00.000Z",
"run": {"runId": "0176a8c2-fe01-7439-87e6-56a1a1b4029f"},
"job": {"namespace": "{metalake}", "name": "{job_name}"},
"inputs": [{"namespace": "{metalake}", "name": "{catalog}.{schema}.{table}"}],
"producer": "https://github.com/OpenLineage/OpenLineage/tree/1.0.0/client",
"schemaURL": "https://openlineage.io/spec/1-0-5/OpenLineage.json#/definitions/RunEvent"
}' -
Confirm it arrived. The dataset appears in the lineage view under the metalake's namespace.
Configuration
The chart manages these properties from the values under gravitino.lineage, and turns lineage on
with the bundled Marquez sink by default: source, processorClass, sinks, and
marquez.sinkClass and marquez.url. Set any other property, such as gravitino.lineage.queueCapacity, under gravitino.additionalConfigItems; see Set other server properties.
| Setting | Description | Default |
|---|---|---|
gravitino.lineage.source | Name of the event source | http |
gravitino.lineage.{source}.sourceClass | Class implementing org.apache.gravitino.lineage.source.LineageSource | (none) |
gravitino.lineage.processorClass | Class implementing org.apache.gravitino.lineage.processor.LineageProcessor | org.apache.gravitino.lineage.processor.NoopProcessor |
gravitino.lineage.sinks | Comma-separated sink names | log |
gravitino.lineage.{sink}.sinkClass | Class implementing org.apache.gravitino.lineage.sink.LineageSink | (none) |
gravitino.lineage.queueCapacity | Total queue capacity, divided evenly across sinks since each has its own queue | 10000 |
The default processor passes events through unchanged.
Sinks
Log sink
Writes each event to gravitino_lineage.log, whose location and rotation are set in the server's
Log4j2 configuration. The log is the place to check that events arrive.
Lineage store sink
The chart enables the sinks log,marquez. The marquez sink is the one that feeds the bundled
lineage store, and the chart points it at the in-cluster Marquez API.
| Setting | Description | Default |
|---|---|---|
gravitino.lineage.marquez.sinkClass | com.datastrato.gravitino.lineage.sink.HTTPLineageSink | (none) |
gravitino.lineage.marquez.url | Base URL of the lineage store's API | (none) |
gravitino.lineage.marquez.timeoutInMs | How long to wait for the lineage store, in milliseconds | 10000 |
HTTP sink
Sends each event to any other server that follows the OpenLineage REST specification. The sink's
name is your choice; the examples use http.
| Setting | Description | Default |
|---|---|---|
gravitino.lineage.http.sinkClass | org.apache.gravitino.lineage.sink.LineageHttpSink | (none) |
gravitino.lineage.http.url | Base URL of the receiving server | http://localhost:5000/ |
gravitino.lineage.http.authType | apiKey or none | none |
gravitino.lineage.http.apiKey | API key, when authType is apiKey | (none) |
Add the sink's name to the chart value gravitino.lineage.sinks, after the default log,marquez,
and put the sink's own properties under gravitino.additionalConfigItems.
gravitino:
lineage:
sinks: log,marquez,http
additionalConfigItems:
gravitino.lineage.http.sinkClass: org.apache.gravitino.lineage.sink.LineageHttpSink
gravitino.lineage.http.url: https://{openlineage_host}/
When sinks fall behind
Each sink reads from a queue. When a queue passes 90 percent of its capacity, the server stops
accepting events and the HTTP source answers 429 Too Many Requests, so a producer can back off and
retry rather than lose events silently. A producer that does not retry on 429 drops those events.