Thanks for the great suggestion and the great discussion. Generally big +1
to this effort.
Some thoughts from my side:

*## Backwards Compatibility*

I think we should really strive to make this non breaking. Maybe we have
new classes / interfaces for StateBackends and CheckpointStorage and let
the existing State Backend classes implement both (and deprecate them)?

In the past, I have gotten some harsh comments from users about breaking
long-time effectively stable APIs, so let's try hard to avoid this (unless
it makes things impossible).

*## Naming*

HashMapStateBackend sounds good to me

Could we rename the SnapshotStorage to CheckpointStorage? Or converge all
methods around "Snapshot"?
I think we already have some confusion from mixing the terms checkpoint and
snapshot and should converge in either direction.
I am slightly leaning towards converging around checkpoints, because that's
the most commonly known term among users as far as I can tell.
Checkpoints are Snapshots. But one could also just call them Checkpoints
and let Savepoints be special Checkpoints.

*## Integrated State / Storage Backends*

There is an idea floating around now and then about a Cassandra backend (or
other K/V store) where the state index and durable location are tightly
intertwined.
However, I think this would not contradict, because it might just mean that
the checkpoint storage is used less (maybe only for savepoints, or for
WALs).

*## Future Fault Tolerance Ideas*

I think this conflicts with none of the future fault tolerance ideas I am
involved with.
Similar to the above, there is always some checkpoint storage involved, for
example for savepoints or for backup/consolidation, so no problem.


Best,
Stephan

On Wed, Sep 16, 2020 at 5:11 PM Aljoscha Krettek <aljos...@apache.org>
wrote:

> I think the mentioned settings should be in the state backend. They
> configure how a certain backend writes to a snapshot storage, but it’s
> still the backend that has the logic and decides.
>
> I think it's a good point, though, to be conscious about those settings.
> I'm sure we can figure out the details during implementation, though.
>
> Best,
> Aljoscha
>
> On 16.09.20 16:54, Seth Wiesman wrote:
> > Hi Congxian,
> >
> > There is an allusion to those configs in the wiki but let me better spell
> > out my thinking. The flink-conf configurations will not change and I
> > believe the java code switches should remain on the state backend
> objects.
> >
> > We are of course not fully disentangling state backends from snapshots
> and
> > these configurations affect how your state backend runs in production. I
> > believe users would find it strange to have configurations like
> > `state.backend.rocksdb.checkpoint.transfer.thred.num` not be part of the
> > EmbeddedRocksdbStateBackend but somewhere else. This then leads to the
> > question, is it better to split configurations between multiple places or
> > not. Users appreciate consistency, and so having all the configurations
> on
> > the state backend objects makes them more discoverable and your
> application
> > easier to reason about.
> >
> > Additionally, I view these as advanced configurations. My hope is most
> > users can simply use the no-arg constructor for a state backend in
> > production. If a user is changing the number of rocksdb transfer threads
> or
> > disabling async checkpoints, they likely know what they are doing.
> >
> > Please let me know if you have any concerns or would like to cancel the
> > vote.
> >
> > Seth
> >
> > On Wed, Sep 16, 2020 at 12:37 AM Congxian Qiu <qcx978132...@gmail.com>
> > wrote:
> >
> >> Sorry for jump late in.
> >>
> >> I like the separation here, this separation makes more user friendly
> now.
> >>
> >> I just wonder how the configuration such as 'state.backend.incremental',
> >> 'state.backend.async' and
> >> `state.backend.rocksdb.checkpoint.transfer.thred.num` will be configured
> >> after the separation, I think these configurations are more related to
> >> snapshots (maybe a little strange to configure these on statebackend
> side).
> >> did not see this on the FLIP wiki currently.
> >>
> >> Best,
> >> Congxian
> >>
> >>
> >> Seth Wiesman <sjwies...@gmail.com> 于2020年9月15日周二 下午9:51写道:
> >>
> >>> Sounds good to me. I'll update the FLIP.
> >>>
> >>> On Tue, Sep 15, 2020 at 8:35 AM Dawid Wysakowicz <
> dwysakow...@apache.org
> >>>
> >>> wrote:
> >>>
> >>>> There is a good number of precedents that introduced backwards
> >>>> incompatible changes to that interface (which is PublicEvolving btw).
> >> We
> >>>> introduced a couple of additional arguments to the
> >>>> createKeyedStateBackend method and later on removed the methods with
> >>>> default implementation for backwards compatibility. I want to
> introduce
> >>>> a backward incompatible change in FLIP-140 (replace the
> >>>> AbstractKeyedStateBackend with an interface). From my perspective we
> >>>> should just do these changes. The impact should be minimal.
> >>>>
> >>>> Best,
> >>>>
> >>>> Dawid
> >>>>
> >>>>
> >>>> On 15/09/2020 15:20, Seth Wiesman wrote:
> >>>>> Hey Dawid,
> >>>>>
> >>>>> I didn't want to break compatibility but if there is precedent and
> >>>> everyone
> >>>>> is ok with it then I'm +1.
> >>>>>
> >>>>> Seth
> >>>>>
> >>>>> On Tue, Sep 15, 2020 at 2:22 AM Dawid Wysakowicz <
> >>> dwysakow...@apache.org
> >>>>>
> >>>>> wrote:
> >>>>>
> >>>>>> Sorry for joining so late.
> >>>>>>
> >>>>>> Generally speaking I like this idea very much!
> >>>>>>
> >>>>>> I have one idea about the StateBackend interface. Could we instead
> >> of
> >>>>>> adding a flag method boolean isLegacyStateBackend remove the
> >>>>>> checkpointstorage related methods from StateBackend right away? The
> >>>>>> old/legacy implementations could then implement both StateBackend
> >> and
> >>>>>> SnapshotStorage. In turn in the method env.setStateBackend we could
> >>> do:
> >>>>>>
> >>>>>> setStateBackend(StateBackend backend) {
> >>>>>>
> >>>>>>      this.stateBackend = backend;
> >>>>>>
> >>>>>>      if (backend instanceof SnapshotStorage) {
> >>>>>>
> >>>>>>           this.setSnapshotStorage(backend);
> >>>>>>
> >>>>>>      }
> >>>>>>
> >>>>>> }
> >>>>>>
> >>>>>> This has the benefit that we could already get rid off the methods
> >>> from
> >>>>>> StateBackend which would be problematic in the new implementations
> >>> (such
> >>>>>> as e.g. HashMapStateBackend - what would you return there? null?). I
> >>>>>> know this would break the interface, but StateBackend is actually
> >>> quite
> >>>>>> internal, we did it quite freely in the past, and I don't think
> >> there
> >>>>>> are many custom state implementation in the wild. And even if there
> >>> are
> >>>>>> some the workaround is as easy as simply adding implements
> >>>> SnapshotStorage.
> >>>>>>
> >>>>>> Best,
> >>>>>>
> >>>>>> Dawid
> >>>>>>
> >>>>>> On 11/09/2020 16:48, Aljoscha Krettek wrote:
> >>>>>>> I could try and come up with a longer name if you need it ... ;-)
> >>>>>>>
> >>>>>>> Aljoscha
> >>>>>>>
> >>>>>>> On 11.09.20 16:25, Seth Wiesman wrote:
> >>>>>>>> Having thought about it more, HashMapStateBackend has won me over.
> >>>> I'll
> >>>>>>>> update the FLIP. If there aren't any more comments I'll open it up
> >>> for
> >>>>>>>> voting on monday.
> >>>>>>>>
> >>>>>>>> Seth
> >>>>>>>>
> >>>>>>>> On Wed, Sep 9, 2020 at 9:09 AM Seth Wiesman <sjwies...@gmail.com>
> >>>>>> wrote:
> >>>>>>>>> @Yun yes, this is really about making CheckpointStorage an
> >>> orthogonal
> >>>>>>>>> concept. I think we can remain pragmatic and keep state-backend
> >>>>>>>>> specific
> >>>>>>>>> configurations (async, incremental, etc) in the state backend
> >>>>>>>>> themselves. I
> >>>>>>>>> view these as more advanced configurations and by the time
> >> someone
> >>> is
> >>>>>>>>> changing the defaults they likely understand what is going on. My
> >>>>>>>>> goal is
> >>>>>>>>> to help on-board users and so long as each state backend has a
> >>> no-arg
> >>>>>>>>> default constructor that works for many users I think we've
> >>> achieved
> >>>>>>>>> that
> >>>>>>>>> goal.
> >>>>>>>>>
> >>>>>>>>> Regarding the checkpoint coordinator, that makes sense but I will
> >>>>>>>>> consider
> >>>>>>>>> out of the scope of this FLIP. I want to focus on simplifying
> >> APIs.
> >>>>>>>>>
> >>>>>>>>> @Aljoscha Krettek <aljos...@apache.org>
> >>>>>>>>>
> >>>>>>>>> My feeling is that state backends and checkpointing are going to
> >> be
> >>>>>>>>> integral to Flink for many years, regardless or other
> >> enhancements
> >>>>>>>>> so this
> >>>>>>>>> change is still valuable.
> >>>>>>>>>
> >>>>>>>>> Since this is a FLIP about improving the user api I'm happy to
> >>>> bikeshed
> >>>>>>>>> the names a little more than normal. HashMap makes sense, my
> >> other
> >>>>>>>>> thought
> >>>>>>>>> was InMemory.
> >>>>>>>>>
> >>>>>>>>> Seth
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> On Wed, Sep 9, 2020 at 8:04 AM Aljoscha Krettek <
> >>> aljos...@apache.org
> >>>>>
> >>>>>>>>> wrote:
> >>>>>>>>>
> >>>>>>>>>> I like it a lot!
> >>>>>>>>>>
> >>>>>>>>>> I think it makes sense to clean this up despite the planned new
> >>>>>>>>>> fault-tolerance mechanisms. In the future, users will decide
> >> which
> >>>>>>>>>> mechanism to use and I can imagine that a lot of them will keep
> >>>> using
> >>>>>>>>>> the current mechanism for quite a while to come. But I'm happy
> >> to
> >>>>>>>>>> yield
> >>>>>>>>>> to Stephan's opinion here, he knows more about the progress of
> >>> that
> >>>>>>>>>> work.
> >>>>>>>>>>
> >>>>>>>>>> The one nitpick I have is about naming: will users understand
> >>>>>>>>>> OnHeapStateBackend? I mean, do they know what on-heap/off-heap
> >>>>>>>>>> memory is
> >>>>>>>>>> and the tradeoffs? An alternative could be HashMapStateBackend,
> >>>>>>>>>> because
> >>>>>>>>>> that's essentially what it is. I wouldn't block anything on
> >> this,
> >>>>>>>>>> though.
> >>>>>>>>>>
> >>>>>>>>>> Aljoscha
> >>>>>>>>>>
> >>>>>>>>>> On 09.09.20 10:05, Konstantin Knauf wrote:
> >>>>>>>>>>> Thanks for the initiative. Big +1. Would be interested to hear
> >> if
> >>>> the
> >>>>>>>>>>> proposed interfaces still make sense in the face of the new
> >>>>>>>>>> fault-tolerance
> >>>>>>>>>>> work that is planned. Stephan/Piotr will know.
> >>>>>>>>>>>
> >>>>>>>>>>> On Tue, Sep 8, 2020 at 7:05 PM Seth Wiesman <
> >> sjwies...@gmail.com
> >>>>
> >>>>>>>>>> wrote:
> >>>>>>>>>>>> Hi Devs,
> >>>>>>>>>>>>
> >>>>>>>>>>>> I'd like to propose an update to how state backends and
> >>> checkpoint
> >>>>>>>>>> storage
> >>>>>>>>>>>> are configured to help users better understand Flink.
> >>>>>>>>>>>>
> >>>>>>>>>>>> Apache Flink's durability story is a mystery to many users.
> >> One
> >>>>>>>>>>>> of the
> >>>>>>>>>> most
> >>>>>>>>>>>> common recurring questions from users comes from not
> >>>>>>>>>>>> understanding the
> >>>>>>>>>>>> relationship between state, state backends, and snapshots.
> >> Some
> >>>>>>>>>>>> of this
> >>>>>>>>>>>> confusion can be abated with learning material but the
> >> question
> >>>>>>>>>>>> is so
> >>>>>>>>>>>> pervasive that we believe Flink’s user APIs should be better
> >>>>>>>>>> communicate
> >>>>>>>>>>>> what different components are responsible for.
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>
> >>>>
> >>>
> >>
> https://cwiki.apache.org/confluence/display/FLINK/FLIP-142%3A+Disentangle+StateBackends+from+Checkpointing
> >>>>>>>>>>>>
> >>>>>>>>>>>> I look forward to a healthy discussion.
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> Seth
> >>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>
> >>>>
> >>>>
> >>>
> >>
> >
>
>

Reply via email to