Hey All I have opened the initial PR for the StateCatalog implementation: https://github.com/apache/flink/pull/28837
I know that this is an unusually large PR, but I think it represents a somewhat complete key feature set that we are covering here instead of breaking it up into functionally unusable bits. Once we have agreed and merged this, I will follow up with opening PRs for the windowed and non-keyed state support. I have completed all the implementation but including those in the initial PR would be totally unreviewable. Cheers Gyula On Fri, Jul 10, 2026 at 10:50 PM Weiqing Yang <[email protected]> wrote: > Thanks Gyula. Agreed, decoupling name storage from the schema-evolution > enable/disable logic is the right move. > > > +1 on splitting the unconditional name storage into its own JIRA and doing > it independently. I've filed FLINK-40120 > <https://issues.apache.org/jira/browse/FLINK-40120> for it. The change is > self-contained and both the catalog and schema evolution need it, so it's > better as a shared capability than owned by either FLIP. Happy to take a > first cut. I've left the exact scope for us to confirm on the ticket (e.g., > whether the catalog needs names only from RowData state or something more > general) so we can keep this thread focused on the FLIP-599 proposal. > > > On not baking config into the snapshot: agreed. I had floated a toggle flag > in the snapshot, but you're right that the opt-in shouldn't be persisted; > it should be decided at restore. FLIP-527 doesn't persist it today: it > reads the option once at serializer construction (which runs at restore), > and that read determines whether field names get written. The compatibility > check then keys off name-presence, since it can't read the job config > directly. Making names unconditional removes that implicit signal, so we'll > need another way to carry the restore-time opt-in to the check. I'll > explore the cleanest option (an in-memory flag on the serializer, or > passing the job config into the check as you suggest) and follow up. > > > Glad to pair on the JIRA! > > > Cheers, > > Weiqing > > > On Fri, Jul 10, 2026 at 5:42 AM Gyula Fóra <[email protected]> wrote: > > > Hi Devs! > > > > Thank you all for the thoughtful comments, I have tried to incorporate > most > > of the larger design additions and changes to the FLIP document. > > I have also extended with a bit more details and included a high level > > design to represent window operator state (along the same core principles > > as we had the keyed states) > > > > Overall I feel a strong general consensus about the feature and key > design > > principles. Given the scope and somewhat experimental nature of it, I > > expect to make some significant iterations over the coming months to > > converge to a good solution but we definitely have a really solid > starting > > point. > > > > Unless there is further significant feedback, I will start the vote at > the > > beginning of next week. > > > > Cheers > > Gyula > > > > > > On Fri, Jul 10, 2026 at 6:58 AM <[email protected]> wrote: > > > > > Hi Weiqing! > > > > > > Thanks for flagging this, I wasn’t aware of the other discussion > details! > > > > > > First of all I agree that we have to decouple the storage of the names > in > > > the snapshot from the schema evolution enabled/disabled logic . > > > > > > Given the obvious need for names by multiple flips and the > > straightforward > > > change , I think we can actually separate this into a jira and > implement > > it > > > already independently. > > > > > > A small note on the schema evolution and maybe I need to review the > > design > > > and comment on the other FLIP, but it would be best to avoid baking > > config > > > logic into the snapshot itself and maybe providing access to the job > > config > > > during the state restore is a cleaner overall approach? > > > > > > Cheers > > > Gyula > > > > > > Sent from my iPhone > > > > > > > On 9 Jul 2026, at 22:23, Weiqing Yang <[email protected]> > > wrote: > > > > > > > > Hi Gyula, > > > > > > > > Thanks for putting this FLIP together. I'm very supportive of the > goals > > > of > > > > FLIP-599. A robust State Catalog is a fantastic step forward for > state > > > > observability and management. > > > > > > > > You and Shengkai landed on bumping RowDataSerializerSnapshot to > include > > > > field names to support the catalog's schema inference. I agree with > the > > > > direction, and FLIP-527 (State Schema Evolution for RowData) [1], > which > > > I'm > > > > driving, proposes the exact same version bump. I wanted to flag a > > design > > > > overlap early, while both FLIPs are still in DISCUSS, so we can align > > our > > > > approaches. > > > > > > > > When implementing FLIP-527, one option is that the presence of these > > > field > > > > names acts as the explicit opt-in signal for schema evolution. The > > > feature > > > > is off by default, the serializer is built with names only when it's > > > > enabled, and the compatibility/migration logic keys off whether those > > > names > > > > are present. > > > > > > > > The catch with that approach is a coupling worth designing around. > For > > > the > > > > catalog to recover real names on jobs that never enabled schema > > > evolution, > > > > those names would need to be written regardless of the evolution > > opt-in. > > > > But if name presence is what signals the opt-in, then writing names > by > > > > default would flip the gate on for jobs that never asked, and trigger > > > > migration logic they didn't opt into. Since we're still discussing > the > > > > high-level architecture for both FLIPs, this looks very solvable. We > > just > > > > need to decouple the "names persisted" metadata from the "evolution > > > > permitted" signal, perhaps by introducing an explicit toggle flag in > > the > > > > snapshot format rather than relying solely on name presence. That's > the > > > > direction I'd favor for FLIP-527 as well. > > > > > > > > Getting this right while both FLIPs are in DISCUSS means whichever > > lands > > > > first can establish a format that serves both the catalog's metadata > > > needs > > > > and the migration's safety requirements. Looking forward to your > > thoughts > > > > on how best to converge these designs. > > > > > > > > Best, > > > > Weiqing > > > > > > > > [1] > > > > > > > > > > https://cwiki.apache.org/confluence/spaces/FLINK/pages/353601981/FLIP-527+State+Schema+Evolution+for+RowData > > > > > > > > > > > >> On Wed, Jul 8, 2026 at 6:41 AM Jingsong Li <[email protected]> > > > wrote: > > > >> > > > >> Hi Gyula, > > > >> > > > >> Thanks for your response. > > > >> > > > >> Sounds good to me. > > > >> > > > >> Best, > > > >> Jingsong > > > >> > > > >>> On Wed, Jul 8, 2026 at 5:38 PM Gyula Fóra <[email protected]> > > > wrote: > > > >>> > > > >>> Hi Jingsong! > > > >>> > > > >>> Thanks for the feedback. > > > >>> I totally agree with you that the current design is going to be > most > > > >> useful > > > >>> for datastream / user defined operators and may surface some > > "strange" > > > or > > > >>> slightly unexpected internals to the users for SQL jobs and SQL > > > >> operators. > > > >>> > > > >>> Big +1 for the idea that we should add operator specific views > later > > to > > > >>> expose some important sql operator internals in a more human > readable > > > >>> format. And I also completely agree that this is out of scope for > the > > > >>> initial V1 version.Based on the interest I see on this FLIP I think > > > there > > > >>> will be a demand for a lot of similar extension capabilities once > we > > > get > > > >>> the initial physical/raw state view version out. > > > >>> > > > >>> Regarding the documentation requirements for transparency, this is > a > > > very > > > >>> important point and I couldn't agree more. In addition I think we > > will > > > >> have > > > >>> to clearly document and treat the contents of the state catalog as > > > fully > > > >>> experimental initially. With the great variety of internal > > > >> representations > > > >>> and use-cases surrounding Flink states, it's impossible to get this > > > right > > > >>> on the first try and our goal should be to iterate on this over a > few > > > >> flink > > > >>> minor versions. > > > >>> > > > >>> So specifically: > > > >>> 1. The physical state representation of SQL and other built in > > > operators > > > >>> is a Flink internal and not part of the public api. Therefore the > > > >> structure > > > >>> / schema of these tables are subject to change without notice > across > > > >> Flink > > > >>> versions. > > > >>> 2. The StateCatalog itself including configuration, operator/state > to > > > >>> table mapping, metadata views, etc. are all initially experimental > > and > > > >>> provide no backward compatibility guarantees and can change without > > > >> notice > > > >>> initially. > > > >>> > > > >>> I think 1. will stay like this for the foreseeable future , we do > not > > > >> want > > > >>> to make internal implementations as part of the public api. We > should > > > aim > > > >>> to stabilize 2. and make it part of the public api eventually, and > > the > > > >>> views on the internal operators could hopefully become part of 2 as > > > well. > > > >>> > > > >>> Cheers > > > >>> Gyula > > > >>> > > > >>> On Wed, Jul 8, 2026 at 2:55 AM Jingsong Li <[email protected] > > > > > >> wrote: > > > >>> > > > >>>> Hi Gyula and all, > > > >>>> > > > >>>> Thanks for driving this FLIP. I like the overall direction and > think > > > >> making > > > >>>> savepoint/checkpoint state discoverable and queryable from SQL > would > > > be > > > >>>> very > > > >>>> useful. > > > >>>> > > > >>>> I have one concern/question around how the catalog presents state > > from > > > >> SQL > > > >>>> operators. > > > >>>> > > > >>>> For many SQL operators, the internal state layout can be quite > > > >> different > > > >>>> from > > > >>>> the logical SQL model. For example, streaming joins, window > > > >> aggregations, > > > >>>> deduplication, TopN/rank, and other optimized operators may > maintain > > > >>>> multiple > > > >>>> internal states, timers, namespaces, accumulators, or > > > >> optimization-specific > > > >>>> auxiliary structures. If these are exposed directly as SQL tables, > > the > > > >>>> result > > > >>>> may be difficult for users to understand. It may also accidentally > > > >> make an > > > >>>> internal state layout look like a stable user-facing contract, > even > > > >> though > > > >>>> it > > > >>>> can change with planner/runtime optimizations or Flink versions. > > > >>>> > > > >>>> Would it make sense to explicitly distinguish two levels in the > > FLIP? > > > >>>> > > > >>>> 1. Physical/raw state views > > > >>>> > > > >>>> These are generic views derived from checkpoint/savepoint metadata > > and > > > >>>> serializer snapshots. They expose the actual operator UID, state > > name, > > > >>>> state > > > >>>> type, key/namespace/value schema, serializer information, etc. I > > think > > > >>>> this is > > > >>>> a very reasonable scope for the first version, especially for > > > >> debugging, > > > >>>> observability, migration, and advanced operational use cases. > > > >>>> > > > >>>> However, it would be good to document that these tables represent > > > >> Flink's > > > >>>> physical state layout and should not be treated as stable logical > > SQL > > > >>>> tables. > > > >>>> > > > >>>> 2. Optional logical/operator-aware views > > > >>>> > > > >>>> For some common SQL/runtime operators, we could later add > > > >> operator-specific > > > >>>> views or descriptors that explain the state in terms of operator > > > >> semantics. > > > >>>> For example, a join operator could expose left-side rows, > right-side > > > >> rows, > > > >>>> and > > > >>>> timers in a more understandable way; a window aggregate could > expose > > > >> window > > > >>>> accumulators and timer/namespace metadata. > > > >>>> > > > >>>> I do not think this needs to be part of the initial > implementation, > > > but > > > >>>> making > > > >>>> the distinction explicit would help set the right expectations and > > > >> avoid > > > >>>> over-promising what automatic state-to-table mapping can provide. > > > >>>> > > > >>>> So my suggestion is that V1 focuses on the generic physical/raw > > state > > > >> view, > > > >>>> with clear metadata and documentation, while leaving > > > >> logical/operator-aware > > > >>>> views as a possible extension. > > > >>>> > > > >>>> Best, > > > >>>> Jingsong > > > >>>> > > > >>>> On Wed, Jul 8, 2026 at 3:39 AM Roman Khachatryan < > [email protected]> > > > >> wrote: > > > >>>>> > > > >>>>>> 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 > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>> > > > >>>>>>> > > > >>>>>> > > > >>>> > > > >> > > > > > >
