Hi Shengkai,

+1 for the naming suggestions makes sense

Cheers
Gyula

On Wed, Jul 8, 2026 at 5:26 AM Shengkai Fang <[email protected]> wrote:

> Hi Gyula,
>
> +1 to adding field names to a new RowDataSerializerSnapshot version.
>
> Persisting the names in a new snapshot version sounds like the cleanest
> solution for this use case.
>
> +1 also to keeping the operator-level keyed-state table while adding
> flattened tables for list/map states.
>
> BTW, I think we should use the state name as the user-facing part of the
> per-keyed-state table name. State names are what users specify in
> StateDescriptor and are usually the most meaningful identifier when
> debugging state. Since state names are only unique within an operator, the
> physical table name may still need an operator uid/hash prefix or a
> collision-handling rule, but the state name should be visible in the table
> name.
>
> For example:
>
> - operator table:
>   uid_<operator_uid>_keyed(key, value_state, list_state, map_state)
>
> - flattened list state table:
>   uid_<operator_uid>_<state_name>_list(key, index, value)
>
> - flattened map state table:
>   uid_<operator_uid>_<state_name>_map(key, map_key, value)
>
> Best,
> Shengkai
>
> Roman Khachatryan <[email protected]> 于2026年7月8日周三 03:39写道:
>
> > > 1. The catalog built on the regular state processor api (and therefore
> > > flink state restore) capabilities has limited scope to detect exactly
> > what
> > > happens when a state is no longer there. This will probably lead to
> read
> > > errors/not found exceptions etc, some of which happens in code that is
> a
> > > bit tricky to control this way. Let's see how well this works in
> practice
> > > and error handling can always be improved in general. This is not part
> of
> > > the catalog design itself.
> >
> > Makes sense. I think this can also be an extension.
> > To clarify the ownership/pinning follow-up idea: it could use FS
> mechanisms
> > rather than HA (ZK/etcd).  For example, a separate file
> > with the lowest checkpoint that Flink should keep, protected by CAS and
> > limited to a specified TTL.
> >
> > > 2. The proposal in it's current form includes a global state metadata
> > view
> > > based on the existing metadata information ([1]) and based on
> Shengkai's
> > > feedback a per operator granular metadata table/view that would expose
> > > information of individual states. I don't see where file level
> > information
> > > fits into this but if you have a good way / idea how to represent this
> as
> > a
> > > table this can definitely be a future extension/addition
> >
> > I was thinking about something like:
> >
> > USE `00000000000000000000/chk-42`;
> > SELECT *
> > FROM state_handles;
> >
> > -- id    type                                 parent    path
> >       size         timestamp             operator/state/subtask_index
> >              local_path  key_range
> > -- 0     FileStateHandle                      -
>  s3://.../_metadata
> >       0.8Kb        2026-07-02T22:56:30   -
> >               -           -
> > -- 1     IncrementalRemoteKeyedStateHandle    0
> >      -            2026-07-02T22:56:14
> > uid_transaction_aggregator_keyed/users#0        -           0 .. 127
> > -- 2     FileStateHandle                      1
> > s3://.../xxxx-xxxx...    5.4Mb        2026-07-02T22:56:12   -
> >                                 000034.SST  -
> > -- 3     FileStateHandle                      1
> > s3://.../yyyy-yyyy...    872Kb        2026-07-02T22:56:12   -
> >                                 000035.SST  -
> > -- 4     IncrementalRemoteKeyedStateHandle    0
> >      -            2026-07-02T22:56:24
> > uid_transaction_aggregator_keyed/users#1        -           128 .. 255
> > -- 5     ByteStreamStateHandle                4
> >      2Kb          2026-07-02T22:56:24   -
> >             000001.SST  -
> >
> > The idea is to represent CompletedCheckpoint as a DAG so that it maps
> > directly to the layout of the object in-memory.
> >
> > > 3. Did not think about this but if this becomes a requirement we could
> > add
> > > a flag to enable metadata only in the catalog.
> >
> > For our use-case (multi-tenant cloud environment), separate access models
> > for
> > data and metadata are very likely a must have because of the security
> > concerns:
> > - internally, the operators should have access to metadata, but not to
> the
> > customer data
> > - externally, the users should have access to their data but not to the
> > metadata
> >
> > 5, 6. Thanks! :)
> >
> > 7. Yes, this should be available since metadata V4.
> >
> > Regards,
> > Roman
> >
> >
> > On Tue, Jul 7, 2026 at 9:56 AM Gyula Fóra <[email protected]> wrote:
> >
> > > Hey Shengkai!
> > >
> > > Thanks for the questions, you hit on some very good practical points.
> Let
> > > me provide my answers below, in the meantime I have already updated the
> > > FLIP to include some of your suggestions :)
> > >
> > > 1. How would schema inference work for RowDataSerializer?
> > >
> > > That's a good observation, I did not notice this. Probably the simplest
> > > solution would be to introduce a new version in the
> > > RowDataSerializerSnapshot and include the names for this use-case.
> > > This would not really impact checkpointing times/performance but would
> > > allow a straightforward mapping for sql states.
> > >
> > > If we feel that this is too much internal change, then we could also
> keep
> > > it as is for now using simply f0, f1...
> > >
> > > 2. Is one keyed-state table per operator the right abstraction?
> > >
> > > This is a very good point and something that has bothered me as well
> > from a
> > > design perspective. There is no single good abstraction here because
> > there
> > > are completely different use cases.
> > > When you just want to look into the state for a single / multiple keys
> > and
> > > you mostly have simple value list states, the single table
> representation
> > > is superior from both query syntax and performance perspective. It
> avoids
> > > JOINS and maps to the simple mental model that for a certain key you
> have
> > > state x,y,z. Due to this straightforward mental model I still think
> this
> > is
> > > the good default representation. With projection pushdown, it's easy to
> > > select one/several specific columns without reading / touching any
> other.
> > >
> > > The big issue is however with large collection states that simply
> cannot
> > be
> > > represented within a single row. This happens very often and is one of
> > the
> > > main reasons someone would even use a list state (if they understand
> how
> > > they work internally, but not all users do...). Large map, window, list
> > > states won't work in the simple row model and are completely
> impractical.
> > >
> > > Based on this, my recommendation would be to keep all keyed states in a
> > > single table as per the original proposal (one column per keyed state)
> > but
> > > also add an extra table per list / map state with the flattened schema.
> > > So if the operator has a value and list state, then there would be 2
> > > tables. One with both states as columns (as per original design) + 1
> > > flattened list state table (key, index, value) or for map states (key,
> > > map_key, value).
> > >
> > > This way we cover both use cases naturally. I am also open to making
> this
> > > configurable on the catalog level.
> > >
> > > I have added this to the FLIP
> > >
> > > 3. Could you clarify the assumption of "reading state without user
> > > classes"?
> > >
> > > Turns out from an implementation perspective it's not too bad and
> > pojo/avro
> > > state schemas can be inferred quite naturally for most cases. However
> if
> > > the user indeed provides the user jar on the classpath then the whole
> > > schema resolution will become even simpler because then we do not need
> > any
> > > custom inference. For our own use-cases and in general I would not like
> > to
> > > assume that user classes will be easily available or that a catalog
> will
> > > represent mostly a single application. On the contrary the way We
> intend
> > to
> > > use this, is definitely mostly without userjars and to represent
> multiple
> > > applications at the same time.
> > >
> > > 4. Could StateCatalog expose more fine-grained metadata?
> > >
> > > I think this is a very good idea. I have updated the FLIP to include an
> > > operator level metadata table as well (one for each operator). I would
> > love
> > > to include everything that you suggested, I think the practical limit
> is
> > > what kind of information is part of the checkpoint and what isn't .
> This
> > > also ties to some questions Roman had about more detailed metadata.
> Makes
> > > sense
> > >
> > > Cheers
> > > Gyula
> > >
> > >
> > > On Tue, Jul 7, 2026 at 4:59 AM Shengkai Fang <[email protected]>
> wrote:
> > >
> > > > Hi Gyula,
> > > >
> > > > Thanks for the FLIP. I like the direction of making
> > savepoint/checkpoint
> > > > state discoverable and queryable from SQL. I have a few questions and
> > > > concerns about the proposed abstraction.
> > > >
> > > > 1. How would schema inference work for RowDataSerializer?
> > > >
> > > > From the current RowDataSerializer snapshot, it looks like the
> snapshot
> > > > persists the LogicalType[] and nested serializer snapshots, so the
> > field
> > > > types can be restored. However, the top-level RowDataSerializer
> > > constructed
> > > > from a RowType seems to store only the child LogicalTypes, not the
> > > RowType
> > > > field names. Would StateCatalog expose generated names such as f0/f1,
> > or
> > > is
> > > > there another source for recovering the original field names?
> > > >
> > > > 2. Is one keyed-state table per operator the right abstraction?
> > > >
> > > > I wonder whether one table per named keyed state would be a better
> base
> > > > abstraction, with an optional operator-level wide view on top. In
> > > > particular, MapState can contain an unbounded or highly variable
> number
> > > of
> > > > entries per state key. Exposing it as a MAP<K,V> column may require
> > fully
> > > > deserializing the map for a key into heap. A normalized table shape
> > such
> > > > as:
> > > >
> > > >   (state_key, map_key, map_value)
> > > >
> > > > seems more scalable and SQL-friendly for MapState. Similarly,
> > > > ValueState/ListState/MapState have different natural table shapes, so
> > > tying
> > > > the physical table boundary to the operator may be too coarse.
> > > >
> > > > 3. Could you clarify the assumption of "reading state without user
> > > > classes"?
> > > >
> > > > This is a very attractive goal, but it also seems to introduce
> > > substantial
> > > > complexity for POJOs, Avro SpecificRecord, subclasses, and custom
> > > > serializers. If StateCatalog is positioned as a
> > > job-level/application-level
> > > > catalog, would requiring the job jar or user artifacts be acceptable
> > as a
> > > > first step? That might simplify the design while still covering many
> > > > operational/debugging use cases.
> > > >
> > > > 4. Could StateCatalog expose more fine-grained metadata?
> > > >
> > > > For debugging state, it would be useful to expose state-level
> metadata
> > > such
> > > > as state name, state type, serializer snapshot/serializer class, TTL
> > > > configuration, namespace/window information where applicable, backend
> > > state
> > > > type, and possibly whether a state can be read lazily/streamingly.
> > > >
> > > > Best,
> > > > Shengkai
> > > >
> > > > Roman Khachatryan <[email protected]> 于2026年7月7日周二 08:44写道:
> > > >
> > > > > Hi Gyula,
> > > > >
> > > > > Thanks for the proposal, this looks very useful! A few questions
> and
> > > > > comments:
> > > > >
> > > > > 1. Following up on Han's question about checkpoint retention: I
> > > > understand
> > > > > external coordination is out of scope for now, but could the
> catalog
> > at
> > > > > least detect that a checkpoint was subsumed/deleted mid-query and
> > fail
> > > > with
> > > > > a clear error, rather than a low-level file-not-found? And do you
> see
> > > > > ownership/pinning as a possible follow-up FLIP once checkpoint
> > reading
> > > > > picks up adoption?
> > > > > 2. Does the proposal allow querying file-level metadata (file size,
> > > > > creation date, etc.)? This would be useful for debugging
> > > > compaction-related
> > > > > issues.
> > > > > 3. If yes, could data and metadata queries have separate access
> > modes?
> > > In
> > > > > many environments access to data is much stricter than access to
> > > > metadata,
> > > > > so being able to grant metadata-only access to the catalog would
> > > broaden
> > > > > where it can be deployed.
> > > > > 4. Just to confirm: incremental checkpoints are expected to work
> > > through
> > > > > the regular restore mechanisms, given sufficient retention?
> > > > > 5. +1 on bringing non-keyed state into scope — a concrete use case:
> > > > > inspecting Kafka transaction state (currently stored in non-keyed
> > > > operator
> > > > > state) would be very valuable for debugging EOS issues.
> > > > > 6. Could you explain why timers are not supported? They live in
> keyed
> > > > state
> > > > > and the state processor API can read registered timers, so I'm
> > > wondering
> > > > > whether this is a fundamental limitation or just table-mapping
> scope.
> > > > > 7. Does the proposal allow querying checkpoint metadata (such as
> > > > > SharingFilesStrategy, isSavepoint, etc.)? This could be useful for
> > > > > debugging CLAIM mode issues.
> > > > >
> > > > >
> > > > > Regards,
> > > > > Roman
> > > > >
> > > > >
> > > > > On Mon, Jul 6, 2026 at 1:02 PM Gyula Fóra <[email protected]>
> > > wrote:
> > > > >
> > > > > > Hi Zakelly!
> > > > > >
> > > > > > That's a good point and we have to ensure that it works. In
> theory
> > > SQL
> > > > > > related states are relatively easy to cover and represent. The
> > > RowData
> > > > > > state would be mapped directly to ROW<...> similar to other pojo
> > key
> > > > > > states.
> > > > > >
> > > > > > Cheers
> > > > > > Gyula
> > > > > >
> > > > > > On Sun, Jul 5, 2026 at 4:03 PM Zakelly Lan <
> [email protected]>
> > > > > wrote:
> > > > > >
> > > > > > > Hi Gyula,
> > > > > > >
> > > > > > > Thanks for driving this, it's a nice addition and I fully
> support
> > > it.
> > > > > One
> > > > > > > thing to make sure:
> > > > > > >
> > > > > > > For the state generated by some Flink SQL jobs, does the
> > > StateCatalog
> > > > > > infer
> > > > > > > this internal `RowData` structure and expose it as a SQL
> > `ROW<...>`
> > > > > type?
> > > > > > > For example, a regular streaming join side may be stored as a
> > state
> > > > > such
> > > > > > as
> > > > > > > `left-records` / `right-records`, whose value or map key/value
> > > > > contains a
> > > > > > > `RowData` for the original input row.
> > > > > > >
> > > > > > >
> > > > > > > Best,
> > > > > > > Zakelly
> > > > > > >
> > > > > > > On Fri, Jul 3, 2026 at 4:13 PM Dennis-Mircea Ciupitu <
> > > > > > > [email protected]> wrote:
> > > > > > >
> > > > > > > > Hi Gyula,
> > > > > > > >
> > > > > > > > Thanks for the detailed answers. This addresses my questions
> > well
> > > > and
> > > > > > the
> > > > > > > > direction sounds great.
> > > > > > > >
> > > > > > > > +1 (non-binding) from my side.
> > > > > > > >
> > > > > > > > Best regards,
> > > > > > > > Dennis
> > > > > > > >
> > > > > > > >
> > > > > > > > On Thu, Jul 2, 2026 at 3:26 PM Gyula Fóra <
> > [email protected]>
> > > > > > wrote:
> > > > > > > >
> > > > > > > > > Hi Dennis!
> > > > > > > > >
> > > > > > > > > Thank you for the questions. Much recent work in the state
> > > > > connector
> > > > > > > api
> > > > > > > > > has been done basically towards this type of nice
> cataloging
> > > and
> > > > > > > flexible
> > > > > > > > > access. There are a few holes and things that have to be
> > > changed,
> > > > > not
> > > > > > > > > everything is enumerated in the FLIP but we have to have an
> > > open
> > > > > mind
> > > > > > > and
> > > > > > > > > make all necessary changes as you said to make this truly
> > nice
> > > > and
> > > > > > > > > comprehensive as much as possible. Most state processor
> apis
> > > are
> > > > > > marked
> > > > > > > > > experimental so we can be flexible within reason :)
> > > > > > > > >
> > > > > > > > > Now to the concrete questions:
> > > > > > > > >
> > > > > > > > > 1. Non-keyed state support / scope
> > > > > > > > > I think non-keyed states should definitely be in the scope
> of
> > > the
> > > > > > FLIP
> > > > > > > in
> > > > > > > > > terms of design , and my intention was not to exclude them
> I
> > > just
> > > > > > > focused
> > > > > > > > > on the keyed state as that is readily available in our
> > > prototype
> > > > > > > > > implementation (without much changes to the existing
> > > > connectors). I
> > > > > > > will
> > > > > > > > > try to update the FLIP to include non-keyed states more in
> > > detail
> > > > > > but I
> > > > > > > > > think the case is pretty straightforward. From a table
> > > > > representation
> > > > > > > > > perspective, they can follow a similar pattern such as:
> > > > > > > > > uid_opUID_statename_broadcast  , uid_opUID_statename_list
> . A
> > > > > > > > corresponding
> > > > > > > > > SQL connector can easily be added to support these based on
> > the
> > > > > > > existing
> > > > > > > > > datastream connector. I will make sure to add separate
> > tickets
> > > > for
> > > > > > > these
> > > > > > > > > types of states once the FLIP is accepted and this work can
> > > very
> > > > > > easily
> > > > > > > > be
> > > > > > > > > parallelized across different state types within the
> existing
> > > > > catalog
> > > > > > > > > frameworks. This way keyed/non-keyed states will live
> > directly
> > > > > > together
> > > > > > > > in
> > > > > > > > > a single catalog/db.
> > > > > > > > >
> > > > > > > > > In the future we can even go a step further and include
> > > connector
> > > > > > > > specific
> > > > > > > > > state views such as kafka offsets etc with custom connector
> > > > > specific
> > > > > > > > > plugins
> > > > > > > > >
> > > > > > > > > 2/3. Serializer transparency and robustness
> > > > > > > > > From a practical standpoint both generated (synthetic)
> > > > serializers
> > > > > > and
> > > > > > > > > custom classes / kryo and pluggable logic could work but
> the
> > > > whole
> > > > > > > > catalog
> > > > > > > > > concepts requires a certain behaviour to be useful. The
> > catalog
> > > > > would
> > > > > > > > point
> > > > > > > > > to savepoint directories and discover all state in it
> > > > (potentially
> > > > > > from
> > > > > > > > > multiple jobs). Configuration has to be done in a generic
> > way,
> > > I
> > > > > > don't
> > > > > > > > see
> > > > > > > > > a problem with introducing configs for specifying custom
> > > > > > > > > serializers/factories either generically for certain
> specific
> > > > > > classes.
> > > > > > > In
> > > > > > > > > most cases however this won't be necessary as the state
> > > snapshot
> > > > > > itself
> > > > > > > > > usually has a reference (classname) of the original user
> > > classes.
> > > > > If
> > > > > > > the
> > > > > > > > > catalog process has access to those classes it will use
> that
> > > > > > directly,
> > > > > > > or
> > > > > > > > > other confugred serializers, and only if not available fall
> > > back
> > > > to
> > > > > > > > > generating serializers for POJO/TUPLE types. There is
> > > obviously a
> > > > > > limit
> > > > > > > > to
> > > > > > > > > what is possible here initially, Kryo being one exception
> > where
> > > > you
> > > > > > > > either
> > > > > > > > > have the class or not.
> > > > > > > > >
> > > > > > > > > I would like to however point out that we do not have to
> > > support
> > > > > > > > everything
> > > > > > > > > initially, we can start with what is currently available,
> use
> > > the
> > > > > > > > classpath
> > > > > > > > > / generated serializers and as we develop we will find the
> > > limits
> > > > > of
> > > > > > > this
> > > > > > > > > approach and then can extend with configuration as it feels
> > > > natural
> > > > > > > > instead
> > > > > > > > > of trying to create a super complex initial solution. But I
> > > > > > definitely
> > > > > > > > > agree that we should support custom serializer already
> > > specified
> > > > in
> > > > > > the
> > > > > > > > > config that is otherwise used by flink for the jobs (but I
> > > think
> > > > > this
> > > > > > > > > should more or less work out of the box).
> > > > > > > > >
> > > > > > > > > 4. The metadata view is currently reused based on the
> > existing
> > > > > table
> > > > > > > > valued
> > > > > > > > > function. Let's take this as a followup under this umbrella
> > to
> > > > > > improve
> > > > > > > /
> > > > > > > > > extend the metadata view. I don't think we need a separate
> > FLIP
> > > > but
> > > > > > it
> > > > > > > > also
> > > > > > > > > feels out of scope here.
> > > > > > > > >
> > > > > > > > > Cheers
> > > > > > > > > Gyula
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > On Thu, Jul 2, 2026 at 1:02 PM Dennis-Mircea Ciupitu <
> > > > > > > > > [email protected]> wrote:
> > > > > > > > >
> > > > > > > > > > Hi all,
> > > > > > > > > >
> > > > > > > > > > Thank you for driving this. Being able to discover
> > > > > > > > savepoints/checkpoints
> > > > > > > > > > and query their state as SQL tables without shipping the
> > > > original
> > > > > > > user
> > > > > > > > > > classes is a genuinely valuable addition, and it's nice
> > that
> > > it
> > > > > > > builds
> > > > > > > > on
> > > > > > > > > > the existing state-table connector and savepoint_metadata
> > > work
> > > > > > rather
> > > > > > > > > than
> > > > > > > > > > starting from scratch.
> > > > > > > > > >
> > > > > > > > > > A few points and questions, mostly around scope and the
> > > > > serializer
> > > > > > > > story:
> > > > > > > > > >
> > > > > > > > > >    1. Non-keyed state and the DataStream path.
> > > > > > > > > >       - The FLIP scopes out BroadcastState, operator
> > > ListState
> > > > > and
> > > > > > > > > >       UnionState because "no readily available Table API
> > > > > connectors
> > > > > > > > exist
> > > > > > > > > > for
> > > > > > > > > >       these state types." That's a fair characterization
> of
> > > the
> > > > > > Table
> > > > > > > > > > layer, but
> > > > > > > > > >       the state-processor DataStream API already reads
> all
> > > > three
> > > > > > > today
> > > > > > > > > >       (SavepointReader#readBroadcastState /
> > #readUnionState /
> > > > > > > > > > #readListState). So
> > > > > > > > > >       the limitation is really in the keyed-only SQL
> > mapping
> > > > > > > > > > (KeyedStateReader
> > > > > > > > > >       runs inside a keyed backend), not in the snapshots
> > > > > > themselves.
> > > > > > > > > >       - Is the keyed-only scope a deliberate
> > UX/table-mapping
> > > > > > > decision,
> > > > > > > > > or
> > > > > > > > > >       would a DataStream-backed reader be considered so
> the
> > > > > catalog
> > > > > > > > isn't
> > > > > > > > > >       strictly less capable than the API it extends? Even
> > if
> > > > > > > non-keyed
> > > > > > > > > > contents
> > > > > > > > > >       stay out of scope initially, it would be good to
> > frame
> > > > this
> > > > > > > > > > explicitly as a
> > > > > > > > > >       Table-mapping constraint rather than a general one.
> > > > > > > > > >    2. Serializer transparency - the "no user classes"
> > premise
> > > > vs.
> > > > > > > > custom
> > > > > > > > > >    serializers.
> > > > > > > > > >       - The design relies on Flink's transparent
> serializer
> > > > > formats
> > > > > > > to
> > > > > > > > > >       decode state without user dependencies, which is
> > great
> > > > for
> > > > > > > > > > POJO/Avro/basic
> > > > > > > > > >       types. But two serialization efforts point the
> other
> > > way:
> > > > > > > > FLIP-398
> > > > > > > > > > [1]
> > > > > > > > > >       (released) already lets users configure serializers
> > per
> > > > > type
> > > > > > > via
> > > > > > > > > >       pipeline.serialization-config, and FLIP-538 [2] (in
> > > > > > discussion)
> > > > > > > > > adds
> > > > > > > > > >       pluggable custom generic-type serializers (e.g.
> > Apache
> > > > > Fory)
> > > > > > > and
> > > > > > > > > > promotes
> > > > > > > > > >       TypeSerializer/TypeSerializerSnapshot to @Public.
> As
> > > > > FLIP-538
> > > > > > > > > > itself notes,
> > > > > > > > > >       state written with a custom serializer becomes
> > > dependent
> > > > on
> > > > > > > that
> > > > > > > > > > serializer
> > > > > > > > > >       to decode - external tooling without it cannot read
> > > those
> > > > > > > bytes.
> > > > > > > > > >       - Could we make the deserialization side pluggable
> > and
> > > > > > > > > config-driven,
> > > > > > > > > >       mirroring FLIP-398's serialization-config, with a
> > > > graceful
> > > > > > > > fallback
> > > > > > > > > > (e.g.
> > > > > > > > > >       expose the raw bytes / skip the column) when a
> format
> > > > isn't
> > > > > > > > > > transparently
> > > > > > > > > >       decodable? There already seems to be a seam for
> this
> > > > > > > > > >       (SavepointTypeInformationFactory), and making it a
> > > > > > first-class,
> > > > > > > > > >       config-selectable option would keep the catalog
> > > > > > > > forward-compatible
> > > > > > > > > as
> > > > > > > > > >       serialization support grows.
> > > > > > > > > >    3. Robustness of the transparent decoding path.
> > > > > > > > > >       - Related to (2): reconstructing values by
> mirroring
> > > the
> > > > > > binary
> > > > > > > > > >       layout (PojoToRowDataDeserializer) is the most
> > powerful
> > > > but
> > > > > > > also
> > > > > > > > > the
> > > > > > > > > > most
> > > > > > > > > >       fragile part of the design. How is it expected to
> > > behave
> > > > > > across
> > > > > > > > > > serializer
> > > > > > > > > >       schema evolution / state migration (a serializer
> > > snapshot
> > > > > > that
> > > > > > > > > > differs from
> > > > > > > > > >       the writer's), Kryo-fallback fields, nested/generic
> > > > types,
> > > > > > and
> > > > > > > > > > nullability?
> > > > > > > > > >       - It would help to spell out the supported matrix
> and
> > > the
> > > > > > > failure
> > > > > > > > > >       mode (hard error vs. degrade to raw bytes) up
> front,
> > > > since
> > > > > > this
> > > > > > > > > > is exactly
> > > > > > > > > >       where "read without the user classes" is most
> likely
> > to
> > > > > break
> > > > > > > in
> > > > > > > > > > practice.
> > > > > > > > > >    4. Observability / summary reporting.
> > > > > > > > > >       - The metadata view is a great start. Two small
> asks:
> > > > > > > > > >          - per-subtask (or per-key-group) size
> granularity
> > in
> > > > > > > addition
> > > > > > > > to
> > > > > > > > > >          per-operator, since skew is usually what you are
> > > > chasing
> > > > > > on
> > > > > > > > > > large state;
> > > > > > > > > >          - optionally rounding out the size breakdown
> with
> > > > > > > managed/raw
> > > > > > > > > >          operator state and channel state sizes for a
> full
> > > > > picture
> > > > > > > > > (noting
> > > > > > > > > > the
> > > > > > > > > >          latter are in-flight / unaligned-checkpoint
> > buffers
> > > > > rather
> > > > > > > > > > than user state).
> > > > > > > > > >       - A prominent upfront summary of the largest
> > operators
> > > /
> > > > > > state
> > > > > > > is
> > > > > > > > > >       often what users want before drilling in.
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > Best regards,
> > > > > > > > > > Dennis
> > > > > > > > > >
> > > > > > > > > > [1]
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> https://cwiki.apache.org/confluence/spaces/FLINK/pages/282102217/FLIP-398+Improve+Serialization+Configuration+And+Usage+In+Flink
> > > > > > > > > > [2]
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> https://cwiki.apache.org/confluence/spaces/FLINK/pages/373886828/FLIP-538+Support+Custom+Generic+Type+Serializer
> > > > > > > > > >
> > > > > > > > > > On Mon, Jun 29, 2026 at 12:53 PM Gyula Fóra <
> > > [email protected]
> > > > >
> > > > > > > wrote:
> > > > > > > > > >
> > > > > > > > > > > Hi Flink Devs!
> > > > > > > > > > >
> > > > > > > > > > > I would like to start the discussion about FLIP-599:
> > State
> > > > > > Catalog
> > > > > > > > [1]
> > > > > > > > > > >
> > > > > > > > > > > State and stateful processing has always been one of
> the
> > > most
> > > > > > > > > fundamental
> > > > > > > > > > > features of Flink and a major contributor to its
> success
> > > and
> > > > > > global
> > > > > > > > > > > adoption.
> > > > > > > > > > >
> > > > > > > > > > > Over the years several apis and methods have been
> > developed
> > > > to
> > > > > > > > address
> > > > > > > > > > the
> > > > > > > > > > > need for external access and analytics such as the
> state
> > > > > > processor
> > > > > > > > > > > datastream / java apis, the since deprecated queryable
> > > state
> > > > > > > > > abstractions
> > > > > > > > > > > and more recently a number of table / SQL api
> connectors
> > to
> > > > > > access
> > > > > > > > > state
> > > > > > > > > > > metadata and keyed states in a somewhat limited way.
> > > > > > > > > > >
> > > > > > > > > > > Extending the current capabilities of the
> > > state-process-api,
> > > > > this
> > > > > > > > FLIP
> > > > > > > > > > aims
> > > > > > > > > > > to lift state processing,  analytics and observability
> > to a
> > > > new
> > > > > > > level
> > > > > > > > > by
> > > > > > > > > > > introducing the State Catalog.
> > > > > > > > > > >
> > > > > > > > > > > State Catalog is a Flink SQL Catalog implementation
> that
> > > > allows
> > > > > > > > > > discovering
> > > > > > > > > > > savepoints/checkpoints and mapping their state
> > > automatically
> > > > to
> > > > > > SQL
> > > > > > > > > > tables.
> > > > > > > > > > > The tables are derived for the different operators and
> > > their
> > > > > > keyed
> > > > > > > > > states
> > > > > > > > > > > with schema matching the state structure. Most
> > importantly
> > > it
> > > > > > > > supports
> > > > > > > > > > > reading POJO / Avro and other structured and basic type
> > > > states
> > > > > > > > without
> > > > > > > > > > the
> > > > > > > > > > > original user classes (dependencies) by relying on
> > Flink's
> > > > > > > > transparent
> > > > > > > > > > and
> > > > > > > > > > > efficiently structured serializer formats.
> > > > > > > > > > >
> > > > > > > > > > > We have a fully functional prototype implementation
> > > developed
> > > > > > with
> > > > > > > > > Gabor
> > > > > > > > > > > Somogyi that we will be happy to share if the community
> > > > accepts
> > > > > > the
> > > > > > > > > > > proposal!
> > > > > > > > > > >
> > > > > > > > > > > Looking forward to your feedback and suggestions!
> > > > > > > > > > >
> > > > > > > > > > > Gyula
> > > > > > > > > > >
> > > > > > > > > > > [1]
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> https://cwiki.apache.org/confluence/spaces/FLINK/pages/438009922/FLIP-599+State+Catalog
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>

Reply via email to