Hi, Yuxia.
Thanks for your comments.
#1. Good catch! I've consolidated the four legacy scan methods into a
single scan(**kw) entry point. By passing different keyword arguments users
can obtain all four original behaviors.
#2. Thanks for the suggestion.

yuxia <[email protected]> 于2025年8月12日周二 15:12写道:

> Thanks Jim for driving this work. Provide Python client on Rust binding is
> nice idea. Some comments on the Python api design:
>
> 1: In LogScanner, there're two methods with same name, def
> scan_earliest(self, end_timestamp: long) -> ScanResult:, def
> scan_earliest(self) -> ScanResult:
> But IIUC, python doesn't support method override, so two methods with same
> name but different parameters won't work.
>
> 2: I'd suggest to rename `pollBatch` in BatchScanner to `poll_batch` to
> align the naming style.
>
>
>
> Best regards,
> Yuxia
>
> ----- 原始邮件 -----
> 发件人: "Jark Wu" <[email protected]>
> 收件人: "dev" <[email protected]>
> 发送时间: 星期二, 2025年 8 月 12日 上午 11:32:53
> 主题: [SPAM]Re: [DISCUSS] FIP-11: Fluss Python binding on Fluss Rust
>
> Thanks Jim for proposing the python and rust client.
>
> The overall design looks good to me. +1 for Rust bindings (via PyO3 or
> similar) over solutions like Py4J or a separate Python-native
> implementation.
>
> This aligns with the current industry standard for high-performance Python
> integrations, like Lance, Iceberg, and DeltaLake. Leveraging Rust bindings
> will not only deliver better performance but also allow us to maximize code
> reuse from the existing Rust client, reducing maintenance overhead and
> ensuring consistency across language interfaces.
>
> Regarding the FIP, I have some following comments:
>
> 1. Could you clarify the intended scope of this FIP? Specifically, does it
> include integration with PyArrow, Pandas, and DuckDB? The example shows
> DuckDB integration, but it’s also listed under Future Work.
>
> 2. What's the semantics of AppendWriter#write_arrow? Is it a blocking API
> or a non-blocking API? If it is a non-blocking API, can we have something
> like Java CompletableFuture as the return type to allow users when the call
> is successful?
>
> 3. What's the behavior of LogScanner#scan_earliest? Does it load all data
> into client memory upfront and return a fully materialized ScanResult, or
> does it support streaming semantics, fetching data incrementally to reduce
> memory pressure?
>
> 4. What's the interface of `fluss.Config`? The config = fluss.Config("
> 127.0.0.1:9123", 30) in the example confuses me about what the parameters
> mean?
>
>
> Best,
> Jark
>
>
>
> On Fri, 8 Aug 2025 at 20:03, Jim Hu <[email protected]> wrote:
>
> > Hi Fluss community,
> > I’d like to kick off the public discussion on FIP-11¹, which proposes a
> > thin PyO3 wrapper around the existing Rust client so that Python users
> can
> > read/write Fluss without spinning up a JVM.
> >
> >    - Goal: Java-SDK parity (streaming & batch reads/writes, DDL, point
> >    queries) but 100 % Pythonic.
> >    - Implementation: PyO3 bridge compiled to a native .so/.pyd;
> zero-copy,
> >    lock-free, no sockets, no JVM start-up cost.
> >    - Repository: fluss-rust/bindings/python.
> >
> > I’ve prototyped a minimal PoC at naivedogger/Fluss-Python-Client at
> > python-client
> > <https://github.com/naivedogger/Fluss-Python-Client/tree/python-client>
> > Looking forward to your thoughts.
> > Best regards,
> > Jim
> > [1]
> >
> >
> https://cwiki.apache.org/confluence/display/FLUSS/FIP-11%3A+Fluss+Python+binding+on+Fluss+Rust
> >
>

Reply via email to