88fantasy opened a new issue, #12204:
URL: https://github.com/apache/seatunnel/issues/12204

   Title: [Feature][Core] Add the seatunnel-lineage / 
seatunnel-lineage-openlineage modules and openlineage_* options
   
   Body:
   
   Part of the umbrella #1. This issue tracks the shared, engine-agnostic half 
of table-level lineage reporting: two new modules and the configuration surface 
both engines will use. No engine wiring here — see #3 (Zeta) and #4 (Flink).
   
   ### What's needed
   
   - `seatunnel-lineage`: configuration resolution with job/environment/cluster 
precedence, the `LineageEvent`/`LineageDataset`/`LineageEventType` model, 
dataset naming per the OpenLineage naming spec, and a `LineageBackend` SPI 
(`ServiceLoader`-based, not SeaTunnel's existing `EventHandler` SPI — that one 
broadcasts to a shared event stream that already has a default subscriber, 
which would leak custom lineage properties into unrelated logs).
   - `seatunnel-lineage-openlineage`: the default `LineageBackend` — 
OpenLineage 1.29.0 model classes (`io.openlineage:openlineage-java`, model 
classes only) plus a hand-written `httpclient 4.5.13`-based transport.
   - 11 new `env {}` options, all prefixed `openlineage_` 
(`openlineage_enabled`, `_transport`, `_url`, `_namespace`, `_auth_token`, 
`_timeout_ms`, `_retry_times`, `_run_facet`, `_run_properties`, 
`_heartbeat_min_interval_ms`, `_producer`). All optional; `openlineage_enabled` 
defaults to `false`.
   
   ### Notable constraints this issue needs to satisfy
   
   - **Token handling**: `openlineage_auth_token` must be rejected if it 
appears in a job's `env {}` block. Job configuration can be persisted to disk 
or serialized into a Flink `JobGraph` (which lands in HA storage / the 
BlobServer) — the token may only come from a process environment variable or 
cluster-level configuration, resolved at execution time, never at parse time.
   - **Serialization safety**: SeaTunnel's existing shaded `ObjectMapper` 
cannot be reused to serialize OpenLineage's model classes — they rely on 
`@JsonAnyGetter` for custom facet properties, and the shaded Jackson silently 
produces a corrupted event (the facet gets wrapped in a literal 
`additionalProperties` key instead of having its properties inlined) with no 
error raised. The new modules therefore ship their own unshaded Jackson, 
isolated by module boundary.
   - **Dependency footprint**: pulling in `openlineage-java` unfiltered adds 
~13 redundant transitive jars and a 
`commons-logging`/`org.slf4j:jcl-over-slf4j` duplicate-class conflict. Needs 4 
explicit Maven `<exclusion>`s (`httpclient5`, `micrometer-core`, 
`commons-logging`, `commons-lang3`) while keeping the YAML/Jackson dependencies 
OpenLineage's own static initializers need.
   - **License/dependency bookkeeping**: register the new runtime jar in 
`tools/dependencies/known-dependencies.txt` and 
`seatunnel-dist/release-docs/LICENSE`; make sure `httpcore` doesn't end up at 
two different versions in the distribution (pin to the version the rest of the 
repo already ships).
   
   ### Backward compatibility
   
   Purely additive. No existing option, module, or SPI is touched.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to