Skip to content

clink v0.7.0 - the qualification release

Choose a tag to compare

@orhaugh orhaugh released this 20 Aug 10:44
· 138 commits to main since this release

The qualification release. The centre of gravity across 318 commits is one question: do the guarantees hold when processes die at the worst possible instant? The answer is now published evidence rather than an architecture claim.

Highlights

QUAL-01: Kafka exactly-once, qualified and published. A windowed aggregation from Kafka through the transactional sink ran two hours on a multi-host rig under continuous fault injection - kills armed inside the two-phase-commit protocol's own windows, coordinator SIGKILLs, broker restarts and outages, network partitions - and an independent seeded oracle judged 755/755 windows byte-exact: zero missing, zero duplicates, zero foreign. Full report: https://orhaugh.github.io/clink/qualification/qual-01-kafka-exactly-once/

The exactly-once machinery behind it. Commit-confirmed restores, prepared-transaction resume over the Kafka wire protocol (SASL/PLAIN, SCRAM-SHA-256 with server verification, TLS), durable commit receipts with replay suppression, in-doubt resolution with receipt materialisation and unresolved-orphan markers, and the sink's pre-fence describe - which refuses to open a producer while its predecessor's transaction is unknowable.

Hot rescale. An eligible operator's parallelism changes as an in-place cutover at a checkpoint barrier; only the rescaled operator's subtasks cycle. Graceful stop-at-savepoint lands alongside.

Production-hardening round closed (F1-F101) - per-operator key-group slices, real TTL on collection/CEP state, SQL refusing clauses it used to silently drop, protocol-corrupt receives failing loudly, and more.

Compatibility made explicit. Wire protocol v2 negotiated (v1 peers retained for rolling upgrades); snapshot format version enforced; frozen-bytes fixtures pin each encoding; plugin ABI v1 unchanged. No REST API breaks.

Observability. Real OTLP export (metrics + lifecycle spans), checkpoint staleness, per-job state size, a shipped Grafana dashboard and alert runbook.

Testing surface. Source/sink contract suites where a capability claim is a test obligation, libFuzzer targets whose findings become regression tests, and the SQL differential oracle.

Full changelog: https://github.com/orhaugh/clink/blob/main/CHANGELOG.md

Artifacts

  • Python wheel pyclink-0.7.0 (attached; sha256 8072195032778fdc7205f6032eaf7d50597c7cff53ee04e80e7187a1d4cff084)
  • Runtime image ghcr.io/orhaugh/clink-runtime:0.7.0
  • Linux SDK clink-0.7.0-linux-x86_64-ubuntu24.04.tar.gz (relocatable, attached by release-binaries.yml)