Hi Ron,

Thank you for the detailed and constructive feedback on the FLIP. These are
all excellent points.

I have updated the FLIP's Confluence page, but I'd like to respond to each
of your questions here as well.

1. On the Default Freshness Value and Configuration

I agree that 3 minutes is a more sensible and safer default than 1 minute.
To address this, I've updated the FLIP to include a new configuration
option, materialized-table.default-freshness, with a default value of 3 min.
This provides the best of both worlds: a safer default for everyone and the
flexibility for administrators to configure it.

2. On the IntervalFreshness API Change (String to int)

The FLIP now clarifies that we will use a non-breaking, "deprecate and add"
strategy. We will keep the existing String getInterval() method but mark it
as @Deprecated, and a new, type-safe int getIntervalInt() method will be
added. This ensures existing code continues to compile and function while
encouraging new development to use the safer method. I have updated the
FLIP (Section 3.2) to make this explicit.

3. On the Scope and Discovery of MaterializedTableEnricher

To keep the initial scope of this FLIP focused and deliverable, I've
proposed that the framework will directly use the
DefaultMaterializedTableEnricher for now. This provides a complete, working
feature out of the box. The mechanism for discovering and configuring
*custom* enrichers (e.g., via a service loader or environment
configuration) is a crucial topic, but I believe it warrants its own
dedicated discussion in a follow-up FLIP. This allows us to land this
improvement pragmatically.

4. On RefreshContext

You're right, the FLIP was missing the concrete design for this. I have
updated the FLIP to include the full class definition for RefreshContext in
the "Public Interfaces" section (now Section 3.6). It provides the enricher
with the resolved freshness, logical refresh mode, and the freshness
threshold from the configuration.

Thanks again for helping to improve the proposal. Please let me know if
these updates and the revised FLIP address your questions.

Best,

Ramin

On Thu, Oct 9, 2025 at 5:34 AM Ron Liu <[email protected]> wrote:

> Hi, Ramin
>
> Thanks for initiating this FLIP., This proposal can lower the threshold of
> using Materialized Table, +1.
>
> I read through the FLIP, and I have the following questions:
>
> 1. Regarding the default freshness default value, you mentioned that it is
> 1min, how is this value determined? In continuous mode, we will convert
> freshness to checkpoint interval, in our internal best practice, the
> checkpoint interval is usually 3min.
> In addition, for data lake scenarios such as stream writing paimon, it is
> more reasonable to set the checkpoint interval to 3min. In our internal
> best practice, the checkpoint interval is usually 3min.
> I think this default value needs to be discussed, or similar to
> `materialized-table.refresh-mode.freshness-threshold`, we also provide an
> option and provide a default value, which can be configured by the user.
>
> 2. You mentioned that to improve IntervalFreshness, change the current
> string type to int for `interval`?  The `getInterval()` public method is
> already used by Paimon and other external systems, if we change the return
> value type, it will cause incompatible behavior.
>
> 3. About `MaterializedTableEnricher` interface, how to pass the
> user-defined implementation to the framework, i.e., how the framework
> perceives it? Also, does the scope of this interface support customization
> at the table level, or the Catalog level? Or Service level?
>
> 4. Regarding RefreshContext, can you give a concrete design of the
> interface and what information it will provide to
> MaterializedTableEnricher?
>
>
> Best,
> Ron
>
> Ramin Gharib <[email protected]> 于2025年10月6日周一 20:19写道:
>
> > Hi everyone,
> >
> > I would like to start a discussion on FLIP-551 [1], which proposes making
> > the FRESHNESS clause optional for Materialized Tables.
> >
> > The goal is to simplify the user experience for common streaming cases
> and
> > to enable more powerful, platform-level default logic.
> >
> > The proposal achieves this by:
> >
> >    1.
> >
> >    Making the FRESHNESS DDL clause optional, falling back to a sensible
> >    default of 1 minute.
> >    2.
> >
> >    Introducing a new, MaterializedTableEnricher interface for custom
> logic
> >    to resolve the final Freshness and RefreshMode into the
> >    ResolvedCatalogMaterializedTable when they are omitted.
> >
> > This change reduces boilerplate for users while providing a clean
> extension
> > point for advanced use cases. The complete architectural details and API
> > are in the FLIP.
> >
> > I'm looking forward to hearing your feedback.
> >
> > [1]
> >
> >
> https://cwiki.apache.org/confluence/display/FLINK/FLIP-551%3A+Make+FRESHNESS+Optional+for+Materialized+Tables
> >
> > Thanks,
> >
> > Ramin
> >
>

Reply via email to