fluss-go

module
v0.1.0-beta.9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 1, 2026 License: Apache-2.0

README

fluss-go

Public beta Go client for Apache Fluss 0.9.1-incubating.

Go Reference

Development and review follow the project coding guidelines.

The current release is v0.1.0-beta.9. It is suitable for compatibility testing and application evaluation against the pinned Fluss 0.9.1 target, but it does not yet provide a stable v1 API or a production support commitment.

The public API will follow the package separation used by franz-go while remaining centered on the Apache Fluss table model:

  • pkg/fmsg: Fluss wire requests, responses, API keys, and versions.
  • pkg/fgo: data client for log and primary-key table operations.
  • pkg/fadm: administrative client for databases, tables, partitions, and clusters.

Install

go get github.com/pletorco/fluss-go@v0.1.0-beta.9

The API is experimental before v1. Pin a release in production rather than tracking a branch or an unversioned revision.

Remote-storage and observability adapters are separately versioned Go modules. Importing only pkg/fgo, pkg/fadm, or pkg/fmsg does not add cloud or OpenTelemetry SDKs to the root module graph. Install an adapter at the same release version when it is needed, for example:

go get github.com/pletorco/fluss-go/adapters/s3@v0.1.0-beta.9

Quick Start

Open one shared client and close it after all writers, scanners, lookup clients, and administrative clients have stopped:

ctx := context.Background()
client, err := fgo.Open(
	ctx,
	fgo.WithSeedBrokers("localhost:9123"),
	fgo.WithClientIdentity("example", "1.0.0"),
)
if err != nil {
	log.Fatal(err)
}
defer func() {
	if err := client.Close(); err != nil {
		log.Printf("close Fluss client: %v", err)
	}
}()

table, err := client.OpenTable(ctx, fgo.TablePath{
	Database: "fluss",
	Table:    "events",
})
if err != nil {
	log.Fatal(err)
}
log.Printf("opened table %s with %d buckets", table.Path, table.BucketCount)

fgo.Client owns negotiated coordinator and tablet connections. Create fadm.Client, data writers, scanners, and lookup clients from this shared client instead of opening a transport for each operation.

Fluss 0.9.1 Feature Matrix

This matrix is the source of truth for public capability claims. A feature is only marked complete after its implementation and verification evidence are updated here. Protocol-message coverage is not end-user feature parity.

Area Status Evidence and scope
fmsg public API registry and protobuf messages Implemented Generated from the pinned Fluss 0.9.1 protocol; includes API/version and server-error registries.
Protocol framing and request correlation Implemented internal/transport has bounded framing, context-aware writes, exactly-once completion, cancellation, and protocol tests.
Client bootstrap, TLS, SASL and connection pooling Implemented pkg/fgo negotiates versions, authenticates each managed connection, supports native Fluss plaintext/SASL listeners and infrastructure-terminated TLS, bounds retries to safe reads, and emits bounded-cardinality MetricsObserver events. Fluss 0.9.1 has no native TLS listener.
Coordinator/tablet metadata and partition routing Implemented Metadata refreshes are coalesced, stale leaders are rerouted once, ResolveTableBuckets returns stable bucket snapshots, and opt-in dynamic partition creation supports partitioned writers.
Table, schema, logical-type and record models Implemented pkg/fgo/model.go and pkg/fgo/records.go model Fluss 0.9.1 tables, load authoritative schemas through OpenTable, and resolve historical record schemas through a bounded client cache.
Arrow schema and record batches Supported Full Fluss logical schema conversion plus v0/v1 Arrow log batches with NONE, LZ4, and ZSTD IPC compression; decoded records use explicit Release ownership.
Row, key, KV and log record-batch codecs Supported Compacted/indexed rows, nested values, projected rows, v0/v1 lookup keys, KV batches, and row/Arrow log batches are covered by pinned Java 0.9.1 fixtures.
Log append writers Supported LogWriter provides row and Arrow appends; auto, Arrow, indexed, and compacted formats; hash/sticky/round-robin assignment; bounded batching and per-bucket concurrency; idempotent sequences; Flush; and deterministic Close.
Log scanners Supported LogScanner provides explicit/earliest/latest/timestamp subscriptions, schema-aware projection, row limits, exclusive stopping offsets, remote-log merging, Wakeup, partial bucket errors, and row or Arrow polling.
Current-state and snapshot batch scans Supported ResolveTableBuckets, NewBatchScanner, and NewSnapshotBatchScanner provide bounded current-state and pluggable immutable snapshot reads with projection and explicit result ownership.
Primary-key writers Supported KVWriter provides full and projected upsert, delete, Fluss hash routing, merge-engine or overwrite modes, idempotent per-bucket sequences, bounded batching and per-bucket concurrency, partial results, and deterministic lifecycle operations.
Point and prefix lookups Supported LookupClient validates keys, batches compatible concurrent calls by bucket, preserves caller cancellation and input association, bounds queue/delay/concurrency/retries, resolves historical schemas, supports leading-key prefixes, and can atomically insert missing rows without unsafe retries.
Typed data APIs Supported Generic wrappers cover log and KV writers, point and prefix lookup, log scans, current-state scans, and snapshot scans through explicit application codecs.
Remote storage adapters Supported Pluggable complete-object or streaming range readers compose remote logs and snapshots with bounded retries, object/aggregate/active byte limits, ordered prefetch, and cancellation cleanup. Local files are built in; optional adapters cover S3, OSS, and application-owned HDFS clients.
Native lake formats Not bundled fadm.LakeSnapshot exposes the Fluss 0.9.1 snapshot ID and bucket offsets, but Iceberg, Lance, and Paimon planning and decoding remain application-owned. The reviewed no-implementation decision prevents local format, filesystem, or credential reimplementation.
Filesystem security-token refresh Supported The client acquires, clones, refreshes, revokes, and safely publishes filesystem tokens through optional providers and receivers without exposing token bytes.
Core fadm catalog client Supported pkg/fadm shares the fgo connection pool and implements database, table, schema, alter, partition, and per-bucket offset operations.
Advanced fadm operations Supported ACL, cluster config, server discovery and tags, rebalance, producer-offset, KV snapshot acquire/renew/release, filesystem token, lake snapshot, and per-bucket table statistics APIs from Fluss 0.9.1.
Live Fluss 0.9.1 compatibility Verified task test:integration runs Java-compatible golden fixtures and live plaintext, SASL PLAIN, TLS-terminated, multi-tablet, catalog, log, KV, lookup, prefix-lookup, schema-evolution, and leader-failover checks against digest-pinned images.

Documentation

Community

  • Read SUPPORT.md before opening a usage question or bug report.
  • Use the structured issue forms for bugs, feature proposals, documentation improvements, and questions.
  • Follow CONTRIBUTING.md for branch, test, commit, and pull request requirements.
  • Report suspected vulnerabilities privately according to SECURITY.md.
  • Participation is governed by CODE_OF_CONDUCT.md.

Development

This project uses Task v3.51.1 as its command entry point. Run task --list to see available checks; task verify runs formatting, generation verification, static analysis, unit and golden tests, bounded fuzz smoke tests, race tests, per-file coverage checks, and security gates.

The checked-in go.work joins the root module and the four adapter modules for repository development. Published applications should select only the modules they import; the workspace file is not part of module resolution for users.

Documentation changes use task docs:check. Edit compile-checked snippet sources under internal/docexamples and run task docs:snippets:sync to update their Markdown fences.

Protocol generation requires protoc v3.21.12. Local security scans require Trivy v0.72.0. Integration and reliability tests require Docker, Docker Compose, and OpenSSL; the tasks create and remove isolated clusters. The module recommends Go 1.26.5 so the Go command can automatically avoid known standard-library vulnerabilities; set GOTOOLCHAIN=local only when intentionally testing another supported, patched Go release.

Compatibility Matrix

Component Supported versions
Apache Fluss 0.9.1-incubating at commit 6bf969f71af8d6f9cc37383ab89ae46a58b0e227 only
Go 1.25.12 or newer in the 1.25 series; 1.26.5 or newer in the 1.26 series; module language baseline 1.25.0
Task 3.51.1
protoc 3.21.12
Trivy 0.72.0

Later Fluss versions are unsupported until their protocol inputs, golden fixtures, and live compatibility suite are explicitly added to this matrix.

Security findings block merges. Exceptions follow the documented, time-limited approval process.

fluss-go is licensed under the Apache License 2.0. See LICENSE and NOTICE.

Directories

Path Synopsis
adapters
hdfs module
oss module
otel module
s3 module
cmd
doccheck command
Command doccheck verifies consumer-facing Go documentation.
Command doccheck verifies consumer-facing Go documentation.
mdcheck command
Command mdcheck verifies local Markdown links and synchronized Go snippets.
Command mdcheck verifies local Markdown links and synchronized Go snippets.
protocolgen command
Command protocolgen generates protocol metadata from pinned Apache Fluss inputs.
Command protocolgen generates protocol metadata from pinned Apache Fluss inputs.
internal
storageadapter
Package storageadapter contains protocol-neutral validation shared by optional remote-object adapters.
Package storageadapter contains protocol-neutral validation shared by optional remote-object adapters.
transport
Package transport implements the bounded Fluss RPC connection.
Package transport implements the bounded Fluss RPC connection.
pkg
fadm
Package fadm provides Apache Fluss 0.9.1 administrative operations.
Package fadm provides Apache Fluss 0.9.1 administrative operations.
fgo
Package fgo provides the Apache Fluss 0.9.1 data client.
Package fgo provides the Apache Fluss 0.9.1 data client.
fmsg
Package fmsg contains the Apache Fluss 0.9.1 wire messages and protocol registry.
Package fmsg contains the Apache Fluss 0.9.1 wire messages and protocol registry.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL