Hi Junbo,
What's 0.3.0? Since fluss-rust will be merged into fluss repo, maybe fluss
release-1.0?

Best,
Hongshun

On Fri, Jul 3, 2026 at 11:27 AM Junbo Wang <[email protected]> wrote:

> Thanks Forward and Hongshun for the thoughtful input.
>
> On ForwardXu's question about the target release — I've been thinking a
> bit about the 0.3.0 scope, and would like to share my personal take, mostly
> as a starting point for discussion.
>
> A possible 0.3.0 scope
>
> FIP-40: consolidate fluss-rust into apache/fluss. thanks to Anton for
> already opening the PR-3401 <https://github.com/apache/fluss/pull/3401>
> DataFusion integration adapter (Theme 1), as a fluss-rust submodule.
> Lake + log union read, Paimon-first (Theme 2), as a separate submodule so
> lake-side dependencies stay isolated from the core. S
> erver-side filter pushdown (Theme 3) — would be great to have if capacity
> allows, but I'd suggest keeping it optional rather than a hard requirement
> for 0.3.0.
>
> Gateway — perhaps outside 0.3.0
>
> Once fluss-rust is consolidated into apache/fluss, it might make sense for
> the gateway to live as its own module depending on fluss-rust, rather than
> being tied to the 0.3.0 release train. That would also give the auth/authz
> questions Hongshun raised some room to be designed in a dedicated FIP.
>
> Just my personal thinking — happy to adjust based on what others feel is
> right.
>
>
> Best regards,
> Junbo Wang
>
> > 2026年7月2日 11:47,Forward Xu <[email protected]> 写道:
> >
> > Hi Anton,
> >
> > Thanks for putting this together, and thanks to everyone who landed the
> > previous roadmap. Framing the next phase around "fluss-rust as a
> > first-class analytical query surface" makes a lot of sense to me — it
> > builds naturally on the analytical primitives we just shipped. A few
> > thoughts, roughly following your structure.
> >
> > *Theme 1 — DataFusion integration adapter [MUST-HAVE]* +1. I strongly
> agree
> > it should be an *adapter over the Rust core*, not a bundled engine.
> Keeping
> > fluss-datafusion as a standalone crate exposing TableProvider +
> > CatalogProvider/SchemaProvider keeps the dependency direction clean and
> > lets any DataFusion-based consumer (or the gateway) opt in. Mapping
> > projection/filter/limit pushdown onto the existing access paths (PK
> > equality → lookup, bucket-key prefix → prefix lookup, LIMIT → bounded
> scan,
> > else log scan) is the right approach. One thing worth nailing down early
> is
> > the exactness contract we report back to DataFusion (
> > TableProviderFilterPushDown::Exact vs Inexact), since getting that wrong
> > silently drops or double-applies filters.
> >
> > *Theme 2 — Lake + log union read (Paimon-first) [MUST-HAVE]* +1, and
> > Paimon-first is the right call — reusing paimon-rust by wrapping an
> > existing reader is low-risk, and the lake-snapshot-records-log-offset
> > design gives us a clean stitch point. Starting bounded-batch and
> deferring
> > streaming also de-risks correctness of the log-offset boundary before we
> > add continuous reads. The main correctness edge I'd like to see covered
> is
> > the boundary semantics for PK tables when applying newer log records over
> > the lake snapshot (dedup/ordering at the tiered offset).
> >
> > *Theme 3 — Foundations / server-side filter pushdown [STRETCH]* Agree
> this
> > is a stretch, but it's the item with the highest leverage since it prunes
> > both lake and log scans and unblocks the gateway's filter pushdown.
> > Cross-checking against the Java PredicateConverter semantics is important
> > so both clients behave identically. If capacity allows, I'd lean toward
> > pulling at least the simple value-predicate cases forward, since Themes 1
> > and 4 both benefit.
> >
> > *Theme 4 — Gateway [STRETCH]* The "REST is the no-regret floor, SQL is
> the
> > ceiling deferred until Themes 1–2" framing is a good way to think about
> it.
> > Keeping it a thin, stateless HTTP frontend over the existing client
> > primitives (one endpoint per primitive) sounds right and keeps scope
> > contained.
> >
> > *Open questions*
> >
> >   - *Themes 1–2 must-have, rest stretch — reasonable?* Yes, ordering
> looks
> >   right to me. Nothing obviously missing.
> >   - *Paimon first, Iceberg later?* Agree, provided the union-read path is
> >   written against a lake abstraction so Iceberg/Lance slot in the same
> way
> >   rather than requiring a rewrite.
> >   - *Pin one arrow/DataFusion version across core, union-read/lake, and
> >   DF?* Strong +1 — we should pin a single Arrow/DataFusion version
> >   workspace-wide; version skew between these crates is a common and
> painful
> >   source of breakage.
> >   - *Separate crates: lake kernel, DataFusion adapter, gateway?* +1 to
> >   separate crates. It matches the "adapter, not bundled engine"
> principle and
> >   keeps the DataFusion dependency out of the core for consumers that
> don't
> >   need it.
> >
> > One meta-question: do we have a rough sense of the target release
> (0.3.0?)
> > these must-haves land in, so we can size the Theme 3/4 stretch work
> > accordingly?
> >
> > Thanks again — happy to help on the DataFusion adapter side.
> >
> > Best,
> >
> > ForwardXu
> >
> > Junbo Wang <[email protected]> 于2026年7月1日周三 22:41写道:
> >
> >>> I'd also like us to focus on closing the gap with the Java client on
> >> predicate pushdown.
> >> Agreed — predicate pushdown is a great optimization, and the read path
> >> will benefit significantly from it.
> >>
> >>
> >>
> >> One thing that was missing in upstream paimon-rust was an
> >> object-store-safe existence check in the filesystem catalog. It checked
> >> whether database/table directories “exist”, which works on local
> >> filesystems but can fail on S3/OSS because those directories are just
> >> prefixes, not real objects. I forked it to fix that, so lake reads can
> >> reliably open Paimon tables from object storage.
> >>
> >> Thanks again, Anton, for putting this roadmap together! I think we could
> >> share it at the July 3rd community meeting. I've also been working on
> some
> >> designs around lake kernel read and the Fluss Gateway REST API — happy
> to
> >> discuss those as well if time allows.
> >>
> >>
> >> Best regards,
> >> Junbo Wang
> >>
> >>> 2026年6月25日 07:23,Anton Borisov <[email protected]> 写道:
> >>>
> >>> Hi Yuxia and Junbo,
> >>>
> >>> Yuxia, on PK changelog reads across the bindings: I have already
> >>> prepared record-mode CDC for Rust, Python and C++. It's small, and
> >>> the PK union read in Theme 2 needs it anyway.
> >>>
> >>> Junbo, I looked through your prototype branch. It is clear that a lot
> >>> of Themes 1, 2 and 4 already exist there as working code and it does
> >>> seem to answer two of the open questions: the three-way crate split
> >>> (lake kernel / adapter / gateway), and pinning a single
> Arrow/DataFusion
> >>> version at the workspace level. +1 to both.
> >>>
> >>> Two separate FIPs with detailed design for REST/SQL gateway parts -
> >> makes sense.
> >>>
> >>> One thing I noticed and want to discuss:
> >>> The "lake read" currently depends on a fork of paimon-rust, can you
> share
> >>> what was missing in paimon-rust?
> >>>
> >>> I'd also like us to focus on closing the gap with the Java client on
> >>> predicate pushdown.
> >>> In the interim we can push predicates into the lake (Paimon already
> >>> supports it) and apply them as a filter pass over the real-time log
> >>> tail.
> >>>
> >>> Good to hear you want to drive this forward, given the prototype, that
> >>> makes sense to me. I am happy to review the design and following PRs.
> >>>
> >>> Looking forward to the write-up with your findings.
> >>>
> >>> -- Anton
> >>>
> >>> вт, 23 июн. 2026 г. в 15:10, Junbo Wang <[email protected]>:
> >>>>
> >>>> Thanks Anton for kicking this off — funnily enough, I'd been arriving
> >> at very similar conclusions while prototyping on my side, so let me
> share a
> >> bit of what came out of those experiments.
> >>>>
> >>>>> THEME 1: DATAFUSION INTEGRATION ADAPTER [MUST-HAVE]
> >>>>
> >>>> Agree. Having the DataFusion integration live in fluss-rust would make
> >> it reusable across more downstream projects. One thing we might want to
> >> keep in mind: it would probably be worth aligning the DataFusion and
> Arrow
> >> versions with pg-datafusion so the whole stack stays on a consistent
> set of
> >> versions.
> >>>>
> >>>>> THEME 2: LAKE + LOG UNION READ (PAIMON-FIRST) [MUST-HAVE]
> >>>>
> >>>> Agree. I'd lean toward putting this in a separate fluss-lake module
> >> that exposes a client capable of doing the union read over the lake and
> the
> >> Fluss log. That way the lake-side dependencies stay isolated in their
> own
> >> module and don't bleed into the core fluss-rust code. One thing that
> might
> >> be worth flagging here: the lake side already supports predicate
> pushdown,
> >> while Fluss doesn't yet — so we'd probably think about how the union
> read
> >> handles that asymmetry in the interim.
> >>>>
> >>>> THEME 4: GATEWAY [STRETCH] — A thin HTTP frontend over the client
> >>>>
> >>>> I wonder if we could expand on this one a bit. My suggestion would be
> >> to split the SQL REST surface and the plain REST API into two separate
> >> FIPs. A read/write REST API on its own — somewhat in the spirit of
> >> kafka-rest, covering reads, writes, and metadata management — would
> already
> >> be a quick win for broadening Fluss's data ingestion/access reach, and
> it
> >> doesn't depend on anything else. The SQL REST surface, on the other
> hand,
> >> has to wait on Themes 1–2, so it might make sense to split them and ship
> >> the plain REST API first.
> >>>>
> >>>>
> >>>>
> >>>> Also, it might make sense to have the gateway as a separate crate
> >> inside the Fluss project itself — especially since fluss-rust will be
> >> moving into the Fluss repo anyway.
> >>>>
> >>>> On a personal note, this is something I'm really excited about and
> >> would love to help push forward. I'll share a write-up of what came out
> of
> >> my demo experiments with the community over the next few weeks.
> >>>>
> >>>>
> >>>> Best regards,
> >>>> Junbo Wang
> >>>>
> >>>>> 2026年6月23日 20:55,Yuxia Luo <[email protected]> 写道:
> >>>>>
> >>>>> Thanks for putting this together. +1 on the overall framing. My
> >> answers to the open questions, plus one addition:
> >>>>>
> >>>>> Open questions:
> >>>>> - Themes 1-2 as must-have, rest stretch: agree, the ordering makes
> >> sense to me.
> >>>>> - Paimon first, Iceberg later: +1. Reusing paimon-rust is the
> >> pragmatic path, and the union-read design generalizes to Iceberg the
> same
> >> way later.
> >>>>> - Pin one arrow/DataFusion version across core, union-read/lake, and
> >> DF: yes, we should pin a single version. Letting these drift will cause
> >> painful Arrow type/ABI mismatches across the crate boundary, so a shared
> >> pinned version (bumped deliberately, not per-crate) is worth the
> discipline.
> >>>>> - Separate crates (lake kernel, DataFusion adapter, gateway): +1 on
> >> separate crates. It keeps the dependency surface clean - the adapter and
> >> gateway are optional consumers, and the lake kernel shouldn't drag
> >> DataFusion into anyone who only needs the core read path.
> >>>>>
> >>>>> One addition I'd like to propose for the scope:
> >>>>> PK-table CHANGELOG read, and expose it across the bindings -
> >> specifically C++ and Python - so non-Rust CDC consumers can subscribe.
> >>>>>
> >>>>> On 2026/06/22 14:49:52 Anton Borisov wrote:
> >>>>>> Hi all,
> >>>>>>
> >>>>>> With the previous roadmap wrapping up - complex types
> >>>>>> (Array/Row/Map/nesting), limit and prefix scan, schema-aware KV
> >>>>>> decoding, the metrics framework, and write optimisations, thanks to
> >>>>>> everyone who contributed and reviewed, I'd like to open discussion
> on
> >>>>>> the roadmap.
> >>>>>>
> >>>>>> I propose framing around a single goal: make fluss-rust a
> first-class
> >>>>>> analytical query surface - a Rust-native SQL/DataFrame path over
> Fluss
> >>>>>> (DataFusion, and through it Polars/DuckDB/gateways), reading the
> lake
> >>>>>> tier at scale, built on the analytical primitives we just landed.
> >>>>>>
> >>>>>> As before, I grouped the items into themes with an initial
> must-have /
> >>>>>> stretch positioning. Please push back where you disagree.
> >>>>>>
> >>>>>> THEME 1: DATAFUSION INTEGRATION ADAPTER [MUST-HAVE]
> >>>>>> A standalone fluss-datafusion crate exposing TableProvider + Catalog
> >>>>>> over the existing client, so SELECT ... FROM . works from any
> >>>>>> DataFusion-based engine. It should be framed as an integration
> adapter
> >>>>>> over the Rust core, not a bundled engine. A gateway (FIP-32) or any
> >>>>>> analytical consumer can use it or not.
> >>>>>>
> >>>>>> Scope: TableProvider + CatalogProvider/SchemaProvider backed by the
> >>>>>> metadata path.
> >>>>>>
> >>>>>> Map DataFusion's projection/filter/limit pushdown onto the client's
> >>>>>> existing access paths: a full primary-key equality becomes a
> lookup, a
> >>>>>> bucket-key prefix becomes a prefix lookup, LIMIT becomes a bounded
> >>>>>> scan, otherwise a log scan. Filters an access path fully satisfies
> are
> >>>>>> reported exact, the rest are left for DataFusion to apply
> (server-side
> >>>>>> filter pushdown is Theme 3).
> >>>>>>
> >>>>>> THEME 2: LAKE + LOG UNION READ (PAIMON-FIRST) [MUST-HAVE]
> >>>>>> A client-side read that presents a lake-enabled table as one table.
> >>>>>> Its history is tiered to the lake (Paimon) and recent writes are
> still
> >>>>>> in the Fluss log, the lake snapshot records the log offset it
> covers,
> >>>>>> so we read the lake up to that offset and the Fluss log past it,
> then
> >>>>>> combine.
> >>>>>> Scope:
> >>>>>> - Per bucket: the lake snapshot plus the Fluss log past the tiered
> >> offset.
> >>>>>> - Log tables: concatenate the two. PK tables: apply the newer log
> >>>>>> records to get current state.
> >>>>>> - Paimon first, reusing paimon-rust, Iceberg/Lance later the same
> >>>>>> way. The DataFusion adapter reads lake-enabled tables through this
> >>>>>> path.
> >>>>>> - Bounded batch first, streaming later
> >>>>>>
> >>>>>> Reusing paimon-rust means wrapping an existing reader, so it's
> rather
> >>>>>> feasible and straightforward.
> >>>>>>
> >>>>>> THEME 3: FOUNDATIONS [STRETCH]
> >>>>>> Server-side value-predicate (filter) pushdown. The proto field
> exists,
> >>>>>> but the client currently sends none. This prunes lake/log scans and
> >>>>>> unblocks the gateway's filter pushdown (the open question I raised
> for
> >>>>>> 0.2.0), cross-checked against the Java PredicateConverter semantics.
> >>>>>>
> >>>>>> THEME 4: GATEWAY [STRETCH]
> >>>>>> A thin HTTP frontend over the client we already have  independent of
> >>>>>> Themes 1–3. It's how non-Rust/non-SQL clients (TS/JS, microservices,
> >>>>>> curl) write to Fluss and do simple key access.
> >>>>>> - Write: upsert/append, delete, create/drop tables, metadata. The
> >>>>>> mature client write path essentially.
> >>>>>> - Read: point lookup, prefix lookup, bounded log / CDC poll - one
> >>>>>> endpoint per existing primitive, bounded and stateless.
> >>>>>> The tradeoff: no joins, filters, or aggregations - that's the SQL
> >>>>>> surface, and it needs the adapter and probably will be an ongoing
> >>>>>> effort to optimise later.
> >>>>>> - If Themes 1–2 ship, we unlock SQL frontends on top - PostgreSQL
> >>>>>> via datafusion-postgres, as one example
> >>>>>> In short: REST is the no-regret floor, SQL is the ceiling deferred
> >>>>>> until Themes 1–2.
> >>>>>>
> >>>>>> PARALLEL TRACK: ELIXIR + BINDING EXPOSURE
> >>>>>> Continue Elixir parity and expose newly-landed primitives (prefix
> >>>>>> lookup, etc.) across Python / C++ / Elixir.
> >>>>>>
> >>>>>> GOVERNANCE TRACK
> >>>>>> FIP-40: Consolidate apache/fluss-rust into apache/fluss - PR is
> ready,
> >>>>>> looks pretty good, waiting for a good moment to rebase/merge.
> >>>>>>
> >>>>>> OPEN QUESTIONS
> >>>>>> - Themes 1–2 must-have, the rest stretch. Reasonable? Anything
> >>>>>> missing or mis-ordered?
> >>>>>> - Paimon first, Iceberg later?
> >>>>>> - Pin one arrow/DataFusion version across core, union-read/lake, and
> >> DF?
> >>>>>> - Separate crates: lake kernel, DataFusion adapter, gateway?
> >>>>>>
> >>>>>> Looking forward to feedback.
> >>>>>>
> >>>>>> -- Anton
> >>>>>>
> >>>>
> >>
> >>
>
>

Reply via email to