Thanks Guozhang & Sophie: A2. Will clarify in the KIP A3. Will change back to the deprecated version! A5. Seems like I'm outnumbered... DslStoreSuppliers it is.
Will update the KIP today. - Almog On Thu, Jul 27, 2023 at 12:42 PM Guozhang Wang <guozhang.wang...@gmail.com> wrote: > Yes, that sounds right to me. Thanks Sophie. > > On Thu, Jul 27, 2023 at 12:35 PM Sophie Blee-Goldman > <ableegold...@gmail.com> wrote: > > > > A2: Guozhang, just to close the book on the ListValue store thing, I > fully > > agree it seems like overreach > > to expose/force this on users, especially if it's fully internal today. > But > > just to make sure we're on the same > > page here, you're still ok with this KIP fixing the API gap that exists > > today, in which these stores cannot be > > customized by the user at all? > > > > In other words, after this KIP, the new behavior for the ListValue store > in > > a stream join will be: > > > > S1: First, check if the user passed in a `DSLStoreSuppliers` (or whatever > > the name will be) to the > > StreamJoined config object, and use that to obtain the > > KVStoreSupplier for this ListValue store > > > > S2: If none was provided, check if the user has set a default > > DSLStoreSuppliers via the new config, > > and use that to get the KVStoreSupplier if so > > > > S3: If neither is set, fall back to the original logic as it is today, > > which is to pass in a KVStoreSupplier > > that is hard-coded to be either RocksDB or InMemory, based on what > > is returned for the #persistent > > API by the StreamJoined's WindowStoreSupplier > > > > Does that sound right? We can clarify this further in the KIP if need be > > > > On Thu, Jul 27, 2023 at 10:48 AM Guozhang Wang < > guozhang.wang...@gmail.com> > > wrote: > > > > > Hi all, > > > > > > Like Almog's secretary as well! Just following up on that index: > > > > > > A2: I'm also happy without introducing versioned KV in this KIP as I > > > would envision it to be introduced as new params into the > > > KeyValuePluginParams in the future. And just to clarify on Sophie's > > > previous comment, I think ListStore should not be exposed in this API > > > until we see it as a common usage and hence would want to (again, we > > > need to think very carefully since it would potentially ask all > > > implementers to adopt) move it from the internal category to the > > > public interface category. As for now, I think only having kv / window > > > / session as public store types is fine. > > > > > > A3: Seems I was not making myself very clear at the beginning :P The > > > major thing that I'd actually like to avoid having two configs > > > co-exist for the same function since it will be a confusing learning > > > curve for users, and hence what I was proposing is to just have the > > > newly introduced interface but not introducing a new config, and I > > > realized now that it is actually more aligned with the CUSTOM idea > > > where the ordering would be looking at config first, and then the > > > interface. I blushed as I read Almog likes it.. After thinking about > > > it twice, I'm now a bit leaning towards just deprecating the old > > > config with the new API+config as well. > > > > > > A5: Among the names we have been discussed so far: > > > > > > DslStorePlugin > > > StoreTypeSpec > > > StoreImplSpec > > > DslStoreSuppliers > > > > > > I am in favor of DslStoreSuppliers as well as a restrictiveness on its > > > scope, just to echo Bruno's comments above. > > > > > > > > > > > > Guozhang > > > > > > On Thu, Jul 27, 2023 at 4:15 AM Bruno Cadonna <cado...@apache.org> > wrote: > > > > > > > > Hi, > > > > > > > > A5. I have to admit that > > > > "If we envision extending this beyond just StoreSupplier types, it > could > > > > be a good option." > > > > is scaring me a bit. > > > > I am wondering what would be an example for such an extension? > > > > In general, I would propose to limit the scope of a config. In this > case > > > > the config should provide suppliers for state stores for the DSL. > > > > > > > > BTW, maybe it is a good idea to let DslStorePlugin extend > Configurable. > > > > > > > > Best, > > > > Bruno > > > > > > > > On 7/27/23 2:15 AM, Sophie Blee-Goldman wrote: > > > > > Thanks for the feedback Bruno -- sounds like we're getting close > to a > > > final > > > > > consensus here. > > > > > It sounds like the two main (only?) semi-unresolved questions that > > > still > > > > > have differing > > > > > opinions floating around are whether to deprecate the old config, > and > > > what > > > > > to name the new config > > > > > + interface. > > > > > > > > > > Although I won't personally push back on any of the options listed > > > above, > > > > > here's my final two cents: > > > > > > > > > > A3. I'm still a firm believer in deprecating the old config, and > agree > > > > > wholeheartedly with what Bruno said. > > > > > > > > > > A5. I also wasn't crazy about "Plugin" at first, but I will admit > it's > > > > > grown on me. I think it rubbed me the wrong > > > > > way at first because it's just not part of the standard > vocabulary in > > > > > Streams so far. If we envision extending > > > > > this beyond just StoreSupplier types, it could be a good option. > > > > > DSLStoreSuppliers does make a lot of sense, > > > > > though. > > > > > > > > > > To throw out a few more ideas in case any of them stick, what about > > > > > something like DSLStoreFormat or > > > > > DSLStorageType, or even DSLStorageEngine? Or even DSLStoreFactory > -- > > > the > > > > > Stores class is described as > > > > > a "factory" (though not named so) and, to me, is actually quite > > > comparable > > > > > -- both are providers not of the > > > > > stores themselves, but of the basic building blocks of Stores (eg > > > > > StoreSuppliers) > > > > > > > > > > Ultimately fine with anything though. We should try not to drag out > > > the KIP > > > > > discussion too long once it's down > > > > > to just nits :P > > > > > > > > > > Cheers, > > > > > Sophie > > > > > > > > > > > > > > > > > > > > On Wed, Jul 26, 2023 at 8:04 AM Almog Gavra <almog.ga...@gmail.com > > > > > wrote: > > > > > > > > > >> Thanks for the comments Bruno! > > > > >> > > > > >> A3. Oops... I think I didn't do a great job updating the KIP to > > > reflect > > > > >> Guozhang's suggestion. This seems like the last point of > contention, > > > where > > > > >> we have two options: > > > > >> > > > > >> 1. Deprecate the config entirely and replace IN_MEMORY/ROCKSDB > with > > > > >> implementations of the DslStorePlugin > > > > >> 2. (What's currently in the KIP) Introduce a new config which > > > defaults to > > > > >> DefaultDslStorePlugin and only the DefaultDslStorePlugin will > respect > > > the > > > > >> old default.store.type config > > > > >> > > > > >> I'm happy with either, I'll keep the KIP with (2) for now as that > > > seemed > > > > >> like the result of the previous discussion but I have no problem > > > changing > > > > >> it back to (1) which was the original proposal. > > > > >> > > > > >> A5. I like "DslStorePlugin" because it leaves room for configuring > > > > >> implementations beyond just supplying stores (e.g. we could > introduce > > > a > > > > >> `configure()` method etc...). I'll keep it as is for now (and > change > > > > >> Materialized/Stores API sections - thanks for catching that)! I > don't > > > feel > > > > >> too strongly and wouldn't dig my heels in if most people preferred > > > > >> "DslStoreSuppliers" (I don't love DslStores as it resembles the > Stores > > > > >> class to closely in name and they're a little different). > > > > >> > > > > >> A6. Yup, that's the suggestion. > > > > >> > > > > >> - Almog > > > > >> > > > > >> On Wed, Jul 26, 2023 at 6:38 AM Bruno Cadonna <cado...@apache.org > > > > > wrote: > > > > >> > > > > >>> Hi, > > > > >>> > > > > >>> Sorry for being late to the party! > > > > >>> > > > > >>> A1: I agree with Sophie, Guozhang, and Almog not to block the > KIP on > > > > >>> gaps in the implementation. > > > > >>> > > > > >>> A2: I am happy with not considering anything special w.r.t. > versioned > > > > >>> state stores in this KIP. > > > > >>> > > > > >>> A3: Here I agree with Sophie to deprecate the old config. I would > > > also > > > > >>> not use config value CUSTOM. Having two configs that sometimes > > > depend on > > > > >>> each other to configure one single concept seems confusing to > me. I > > > see > > > > >>> future me looking at default.dsl.store = IN_MEMORY and wondering > why > > > > >>> something is written to disk because I did not check config > > > > >>> dsl.store.plugin.class? > > > > >>> BTW, the KIP in its current version is not clear about whether > > > > >>> default.dsl.store will be deprecated or not. In "Compatibility, > > > > >>> Deprecation, and Migration Plan" it says default.dsl.store will > be > > > > >>> deprecated but in "Configuration" default.dsl.store seems to be > an > > > > >>> essential part of the configuration. > > > > >>> > > > > >>> A4: I agree > > > > >>> > > > > >>> A5: I do not completely like the name "DslStorePlugin". What > about > > > > >>> naming it simply "DslStores" or "DslStoreSuppliers"? If we > decide to > > > > >>> rename we should also rename dsl.store.plugin.class to > > > > >>> dsl.store.suppliers.class or similar. > > > > >>> BTW, I think you missed to rename some occurrences in section > > > > >>> "Materialized API" especially in the code section "Stores.java". > > > > >>> > > > > >>> A6: Actually I am not sure if I completely follow here. Is this > about > > > > >>> the static methods in class Stores? If yes, I agree with Almog to > > > keep > > > > >>> this out of the KIP. > > > > >>> > > > > >>> Best, > > > > >>> Bruno > > > > >>> > > > > >>> On 7/26/23 5:20 AM, Almog Gavra wrote: > > > > >>>> I have updated the KIP with the points as discussed above. > > > @Guozhang, > > > > >> the > > > > >>>> suggested configuration makes it a little more awkward around > the > > > > >>>> Materialized.as and Materialized.withStoreType APIs than it was > > > when we > > > > >>>> were totally deprecating the old configuration. Let me know > what you > > > > >>> think. > > > > >>>> > > > > >>>> I will open the voting tomorrow! Thanks again everyone for the > > > > >>> discussion. > > > > >>>> > > > > >>>> Cheers, > > > > >>>> Almog > > > > >>>> > > > > >>>> On Tue, Jul 25, 2023 at 9:20 AM Almog Gavra < > almog.ga...@gmail.com> > > > > >>> wrote: > > > > >>>> > > > > >>>>> Glad you like my KIP-secretary skills ;) > > > > >>>>> > > > > >>>>> A2. I'm definitely happy to take your suggestion here and not > do > > > > >>> anything > > > > >>>>> special w.r.t. Versioned stores, I think it makes sense > especially > > > if > > > > >> we > > > > >>>>> consider them implementation details of a specific store type. > > > > >>>>> > > > > >>>>> At EOD I'll update the KIP with all of these changes and if the > > > > >>>>> discussion is silent I'll open a vote tomorrow morning. > > > > >>>>> > > > > >>>>> Cheers, > > > > >>>>> Almog > > > > >>>>> > > > > >>>>> On Mon, Jul 24, 2023 at 2:02 PM Sophie Blee-Goldman < > > > > >>>>> ableegold...@gmail.com> wrote: > > > > >>>>> > > > > >>>>>> Awesome summary (seriously) -- would you kindly offer your > > > > >>> organizational > > > > >>>>>> skills to every ongoing KIP from henceforth? We need you :P > > > > >>>>>> > > > > >>>>>> A few answers/comments: > > > > >>>>>> > > > > >>>>>> A2: I think there is a 3rd sub-option here, which is to leave > > > > >>>>>> versioned-ness out of this KIP entirely, return only the > > > > >> non-versioned > > > > >>>>>> stores for now, and then switch over to the versioned stores > > > (only) > > > > >>> when > > > > >>>>>> the time comes to flip the switch on making them the default > > > across > > > > >> the > > > > >>>>>> DSL. This has the advantage of retaining the current > > > > >> behavior/semantics > > > > >>>>>> and > > > > >>>>>> provides a clear way to transition smoothly in the future, > since > > > it > > > > >>> seems > > > > >>>>>> we will want to cut to all versioned state stores rather than > > > offer > > > > >>> users > > > > >>>>>> a > > > > >>>>>> choice between versioned or non-versioned stores going forward > > > > >>> (similar to > > > > >>>>>> how we only offer timestamped stores presently, and have > > > completely > > > > >>>>>> replaced non-timestamped stores in the DSL.) . In both the > > > > >> timestamped > > > > >>> and > > > > >>>>>> versioned cases, the old stores are/will still be available or > > > > >>> accessible > > > > >>>>>> to users via the bare StoreSuppliers, should they somehow > desire > > > or > > > > >>>>>> require > > > > >>>>>> the old store type. Ultimately, I think either this or option > (1) > > > > >>> would be > > > > >>>>>> preferable, though I think it should be up to Matthias or > anyone > > > else > > > > >>>>>> involved in the versioned stores feature to decide which > approach > > > > >> makes > > > > >>>>>> sense in the context of that feature's future plans. > > > > >>>>>> > > > > >>>>>> A3: sounds reasonable to me > > > > >>>>>> > > > > >>>>>> A5: Also sounds fine to me, though I'll let others chime in > > > with/if > > > > >>> they > > > > >>>>>> have an alternative suggestion/preference. I guess the other > > > > >> contender > > > > >>>>>> would be something like DSLStoreImpl or something like that? > > > > >>>>>> > > > > >>>>>> > > > > >>>>>> > > > > >>>>>> On Mon, Jul 24, 2023 at 9:36 AM Almog Gavra < > > > almog.ga...@gmail.com> > > > > >>>>>> wrote: > > > > >>>>>> > > > > >>>>>>> Lots of thoughts! Happy to see the thriving discussion on > this > > > post > > > > >> - > > > > >>>>>> lots > > > > >>>>>>> going on so I'm trying to enumerate them to keep things > organized > > > > >>>>>> (prefix > > > > >>>>>>> "A" for "Almog" so we can use numbers in responses for other > > > things > > > > >>> ;P). > > > > >>>>>>> > > > > >>>>>>> A1. Question around closing implementation gaps (e.g. no > rocks > > > based > > > > >>>>>>> suppression store) > > > > >>>>>>> A2. Specifically how to handle Versioned stores > > > > >>>>>>> A3. Configuration (new config/reuse old one + new one and > > > ordering > > > > >> of > > > > >>>>>>> config resolution) > > > > >>>>>>> A4. Drawing a line between what is implementation detail (not > > > > >> exposed > > > > >>> in > > > > >>>>>>> API) and what is customizable (exposed in API) > > > > >>>>>>> A5. Naming of StoreTypeSpec > > > > >>>>>>> A6. Param classes in StoreBuilders > > > > >>>>>>> > > > > >>>>>>> ------------------------------ > > > > >>>>>>> > > > > >>>>>>> Here are summaries for where it seems each of these stands > > > (trying > > > > >> not > > > > >>>>>> to > > > > >>>>>>> add any additional opinion yet): > > > > >>>>>>> > > > > >>>>>>> A1. Sophie/Guozhang/Me (if I count hah!) seem to agree that > it is > > > > >>> worth > > > > >>>>>>> pushing this KIP through independently of the implementation > > > gaps as > > > > >>> it > > > > >>>>>>> doesn't seem to move the intermediate state further from the > end > > > > >>> state. > > > > >>>>>>> Matthias originally had some concerns. > > > > >>>>>>> > > > > >>>>>>> A2. There's questions around whether versioned stores should > be > > > > >> their > > > > >>>>>> own > > > > >>>>>>> configurable option or whether they are an implementation > detail > > > > >> that > > > > >>>>>> the > > > > >>>>>>> StoreSpec should decide. It seems like the discussion is > > > converging > > > > >>>>>> here, > > > > >>>>>>> this should be an implementation detail. > > > > >>>>>>> > > > > >>>>>>> A3. Matthias/Guozhang prefer adding CUSTOM and then having an > > > > >>> additional > > > > >>>>>>> config to determine the implementation. Sophie prefers > > > deprecating > > > > >> the > > > > >>>>>> old > > > > >>>>>>> config. Guozhang additional suggested flipping the resolution > > > order > > > > >>> such > > > > >>>>>>> that the old config is only respected in a DefaultStoreSpec > > > > >>>>>> implementation. > > > > >>>>>>> > > > > >>>>>>> A4. This KIP (or rather, the discussion on the KIP) blurs the > > > lines > > > > >>>>>> between > > > > >>>>>>> top level store types (KV, windowed, session) and the > underlying > > > > >>>>>>> implementation of them (timestamped, versioned, kv-list). It > > > seems > > > > >>>>>> everyone > > > > >>>>>>> is in alignment to ensure that we keep these two things > separate > > > and > > > > >>>>>> that > > > > >>>>>>> the line is clearly delineated in the text of the KIP. > > > > >>>>>>> > > > > >>>>>>> A5. Guozhang and Sophie agree that the current name > > > StoreTypeSpec is > > > > >>>>>>> misleading, as it's really an implementation spec, not a type > > > > >>>>>>> specification. > > > > >>>>>>> > > > > >>>>>>> A6. Agreement that this is an improvement, Sophie believes > this > > > can > > > > >> be > > > > >>>>>> done > > > > >>>>>>> in a follow up but we should ensure our naming is good here > so > > > > >> there's > > > > >>>>>> no > > > > >>>>>>> conflicts down the line. > > > > >>>>>>> > > > > >>>>>>> --------------------------------- > > > > >>>>>>> > > > > >>>>>>> Ok, phew! Hopefully that covers it all! Now for my thoughts, > > > > >> hopefully > > > > >>>>>>> wrapping up some of these discussions: > > > > >>>>>>> > > > > >>>>>>> A1. @Matthias - are you still hesitant here? What would you > > > need to > > > > >>> be > > > > >>>>>>> convinced here? > > > > >>>>>>> > > > > >>>>>>> A2. Since we are all in agreement that versioned stores > should > > > be an > > > > >>>>>>> implementation detail, we have two options: > > > > >>>>>>> > > > > >>>>>>> (1) we can extend the KVParams to include a parameter that > > > indicates > > > > >>>>>>> whether or not the store should be versioned > > > > >>>>>>> (2) we can introduce a configuration for whether or not to > use a > > > > >>>>>> versioned > > > > >>>>>>> store, and each implementation can choose to read/ignore that > > > config > > > > >>>>>>> > > > > >>>>>>> Any preferences? (1) would align more closely with what we > are > > > doing > > > > >>>>>> today > > > > >>>>>>> (they are a top-level concept in the Stores API). > > > > >>>>>>> > > > > >>>>>>> A3. I like Guozhang's suggestion of making the "primary" > > > > >> configuration > > > > >>>>>> to > > > > >>>>>>> be the new one, and then having a "DefaultStoreTypeSpec" > (using > > > the > > > > >>> old > > > > >>>>>>> naming) which respects the old configuration. That seems to > solve > > > > >>> nearly > > > > >>>>>>> all the concerns (e.g. it'd be easy to see where the enum is > used > > > > >>>>>> because > > > > >>>>>>> it would only be used within that one class instead of > littered > > > > >>>>>> throughout > > > > >>>>>>> the code base). > > > > >>>>>>> > > > > >>>>>>> @Sophie, unless you have objections here I will update the > KIP > > > to do > > > > >>>>>> that. > > > > >>>>>>> > > > > >>>>>>> A4. I will make these changes to the KIP to make it clear. > > > > >>>>>>> > > > > >>>>>>> A5. I will rename it `DslStorePlugin` - any objections to > this > > > name? > > > > >>>>>>> > > > > >>>>>>> A6. Let's punt this ;) I agree with everyone that this would > be a > > > > >>>>>> welcome > > > > >>>>>>> improvement and that this KIP is aligned with moving in that > > > > >>> direction. > > > > >>>>>>> Given how much discussion there was on this KIP, which is > minor > > > > >>>>>> relative to > > > > >>>>>>> making the changes to StoreBuilder API, I'd rather not tie > the > > > two > > > > >>>>>>> together. > > > > >>>>>>> > > > > >>>>>>> Cheers & Thanks everyone for the thoughts! > > > > >>>>>>> - Almog > > > > >>>>>>> > > > > >>>>>>> On Sun, Jul 23, 2023 at 5:15 PM Sophie Blee-Goldman < > > > > >>>>>>> ableegold...@gmail.com> > > > > >>>>>>> wrote: > > > > >>>>>>> > > > > >>>>>>>> Guozhang: > > > > >>>>>>>> > > > > >>>>>>>> On your 2nd point: > > > > >>>>>>>> > > > > >>>>>>>>> "impl types" (in hindsight it may not be a good name) for > > > rocksdb > > > > >> / > > > > >>>>>>>> memory / custom, and we used "store types" for kv / > windowed / > > > > >>>>>> sessioned > > > > >>>>>>>> etc, > > > > >>>>>>>> First off, thanks so much for this clarification -- using > "store > > > > >>> type" > > > > >>>>>>> here > > > > >>>>>>>> was definitely making me uncomfortable as this usually > refers > > > to KV > > > > >>> vs > > > > >>>>>>>> window, etc -- but I just couldn't for the life of me think > of > > > the > > > > >>>>>> right > > > > >>>>>>>> term for rocks vs IM. We should 100% change to something > like > > > > >>>>>>> StoreImplSpec > > > > >>>>>>>> for this kind of interface. > > > > >>>>>>>> > > > > >>>>>>>>> As for list-value store (for stream-stream Join) > > > > >>>>>>>> Again, glad you mentioned this -- I forgot how the extra > > > > >>> stream-stream > > > > >>>>>>> join > > > > >>>>>>>> store is not a "regular" KV Store but rather this special > > > > >> list-value > > > > >>>>>>> store. > > > > >>>>>>>> If we proceed with something like the current approach, > perhaps > > > > >> that > > > > >>>>>>> should > > > > >>>>>>>> be a boolean (or enum) parameter in the KVConfig, similar > to the > > > > >>>>>>>> EmitStrategy? After all, the high-level goal of this KIP is > to > > > be > > > > >>>>>> able to > > > > >>>>>>>> fully customize all DSL state stores, and this is currently > not > > > > >>>>>> possible > > > > >>>>>>>> due to KAFKA-14976 < > > > > >>> https://issues.apache.org/jira/browse/KAFKA-14976 > > > > >>>>>>> . > > > > >>>>>>>> > > > > >>>>>>>> If we expect there to be further customizations like this > going > > > > >>>>>> forward, > > > > >>>>>>>> perhaps we could instead have each of the three StoreConfig > > > classes > > > > >>>>>>> accept > > > > >>>>>>>> a single enum parameter for the "sub-type" (or whatever you > > > want to > > > > >>>>>> call > > > > >>>>>>>> it), which would encompass (and replace) things like the > > > > >> EmitStrategy > > > > >>>>>> as > > > > >>>>>>>> well as the list-value type (we could define one enum for > each > > > > >> Config > > > > >>>>>>> class > > > > >>>>>>>> so there is no accidentally requesting a LIST_VALUE subtype > on a > > > > >>>>>>>> WindowStore). Thoughts? > > > > >>>>>>>> > > > > >>>>>>>> Lastly, regarding 3.b: > > > > >>>>>>>> > > > > >>>>>>>> I love that you brought this up because that is actually > what I > > > > >> first > > > > >>>>>>>> proposed to Almog, ie introducing a param class to clean up > the > > > > >>>>>>>> StoreBuilder API, during our chat that led to this KIP. He > > > pushed > > > > >>>>>> back, > > > > >>>>>>>> claiming (rightly so) that this change would be huge in > scope > > > for a > > > > >>>>>>> purely > > > > >>>>>>>> aesthetic/API change that doesn't add any functionality, and > > > that > > > > >> it > > > > >>>>>>> makes > > > > >>>>>>>> more sense to start with the DSL config since there is a > clear > > > gap > > > > >> in > > > > >>>>>>>> functionality there, particularly when it comes to custom > state > > > > >>> stores > > > > >>>>>>>> (reasons 1 & 3 in the Motivation section). He did agree > that the > > > > >>> param > > > > >>>>>>>> classes were a better API, which is why you see them in this > > > KIP. > > > > >> In > > > > >>>>>>> other > > > > >>>>>>>> words: I fully agree that we should apply this improvement > to > > > the > > > > >>>>>>>> PAPI/StoreBuilder interface as well, but I think that's a > > > distinct > > > > >>>>>>> concept > > > > >>>>>>>> for the time-being and should not block the DSL improvement. > > > > >> Rather, > > > > >>> I > > > > >>>>>>>> consider this KIP as setting the stage for a followup KIP > down > > > the > > > > >>>>>> line > > > > >>>>>>> to > > > > >>>>>>>> clean up the StoreBuilders and bring them in line with the > new > > > > >>>>>>> param/config > > > > >>>>>>>> class approach. > > > > >>>>>>>> > > > > >>>>>>>> That said, A) we should definitely make sure whatever we > > > introduce > > > > >>>>>> here > > > > >>>>>>>> can be extended to the PAPI StoreBuilders in a natural way, > and > > > B) > > > > >> I > > > > >>>>>>> should > > > > >>>>>>>> clarify that I personally would be happy to see this > included in > > > > >> the > > > > >>>>>>>> current KIP, but as Almog's KIP it's up to him to decide > whether > > > > >> he's > > > > >>>>>>>> comfortable expanding the scope like this. If you can > convince > > > him > > > > >>>>>> where > > > > >>>>>>> I > > > > >>>>>>>> could not, more power to you! :P > > > > >>>>>>>> > > > > >>>>>>>> On Sun, Jul 23, 2023 at 4:48 PM Sophie Blee-Goldman < > > > > >>>>>>>> ableegold...@gmail.com> > > > > >>>>>>>> wrote: > > > > >>>>>>>> > > > > >>>>>>>>> Matthias: > > > > >>>>>>>>> > > > > >>>>>>>>> I'm not sure I agree with (or maybe don't follow) this > take: > > > > >>>>>>>>>> > > > > >>>>>>>>>> we need all kind of `StoreTypeSpec` implementations, > > > > >>>>>>>>>> and it might also imply that we need follow up KIPs for > new > > > > >> feature > > > > >>>>>>>>>> (like in-memory versioned store) that might not need a KIP > > > > >>>>>> otherwise. > > > > >>>>>>>>>> > > > > >>>>>>>>> I see this feature as being a nice add-on/convenience API > for > > > any > > > > >>>>>> store > > > > >>>>>>>>> types which have a full DSL implementation. I don't think > it's > > > > >>>>>>>> unreasonable > > > > >>>>>>>>> to just say that this feature is only going to be > available for > > > > >>>>>> store > > > > >>>>>>>> types > > > > >>>>>>>>> that have KV, Window, and Session implementations. I can't > > > think > > > > >> of > > > > >>>>>> any > > > > >>>>>>>>> case besides versioned stores where this would force a KIP > for > > > a > > > > >> new > > > > >>>>>>>>> feature that would not otherwise have to go through a KIP, > and > > > > >> even > > > > >>>>>> for > > > > >>>>>>>>> versioned state stores, the only issue is that the KIP for > that > > > > >> was > > > > >>>>>>>> already > > > > >>>>>>>>> accepted. > > > > >>>>>>>>> > > > > >>>>>>>>> However, I think I agree on your main point -- that things > like > > > > >>>>>>> "regular" > > > > >>>>>>>>> vs timestamped vs versioned are/should be an implementation > > > detail > > > > >>>>>>> that's > > > > >>>>>>>>> hidden from the user. As I noted previously, the current > KIP > > > > >>>>>> actually > > > > >>>>>>>>> greatly improves the situation for timestamped stores, as > this > > > > >>>>>> would be > > > > >>>>>>>>> handled completely transparently by the OOTB > RocksDBStoreSpec. > > > To > > > > >>>>>> me, > > > > >>>>>>>> this > > > > >>>>>>>>> provides a very natural way to let the DSL operators using > the > > > > >>>>>> default > > > > >>>>>>>>> store type/spec to specify which kind of store (eg > > > > >>>>>>>>> versioned/timestamped/etc) it wants, and choose the correct > > > > >>>>>> default. If > > > > >>>>>>>> the > > > > >>>>>>>>> eventual intention is to have versioned state stores > replace > > > > >>>>>>> timestamped > > > > >>>>>>>>> stores as the default in the DSL, then we can simply swap > out > > > the > > > > >>>>>>>> versioned > > > > >>>>>>>>> stores for the timestamped stores in the > RocksDBStoreTypeSpec, > > > > >> when > > > > >>>>>>> that > > > > >>>>>>>>> time comes. Until then, users who want to use the versioned > > > store > > > > >>>>>> will > > > > >>>>>>>> have > > > > >>>>>>>>> to do what they do today, which is individually override > > > operators > > > > >>>>>> via > > > > >>>>>>>>> Materialized/StoreSuppliers. > > > > >>>>>>>>> > > > > >>>>>>>>> All in all, it sounds like we should not offer a versioned > > > store > > > > >>>>>> type > > > > >>>>>>>>> spec, as "versioned" is more akin to "timestamped" than to > a > > > true > > > > >>>>>>>>> difference in underlying store implementation type (eg > rocks vs > > > > >>>>>>>> in-memory). > > > > >>>>>>>>> W.r.t whether to deprecate the old config or introduce a > new > > > > >> CUSTOM > > > > >>>>>>> enum > > > > >>>>>>>>> type, either seems fine to me, and we can go with that > > > alternative > > > > >>>>>>>> instead. > > > > >>>>>>>>> The only other con to this approach that I can think of, > and > > > I'm > > > > >>>>>>> honestly > > > > >>>>>>>>> not sure if this is something users would care about or > only > > > devs, > > > > >>>>>> is > > > > >>>>>>>> that > > > > >>>>>>>>> the advantage to moving rocks and IM to the store type spec > > > > >>>>>> interface > > > > >>>>>>> is > > > > >>>>>>>>> that it helps to keep the relevant logic encapsulated in > one > > > easy > > > > >>>>>> place > > > > >>>>>>>> you > > > > >>>>>>>>> can quickly check to tell what kind of state store is used > > > where. > > > > >> In > > > > >>>>>>> the > > > > >>>>>>>>> current code, I found it extremely annoying and difficult > to > > > track > > > > >>>>>> down > > > > >>>>>>>> all > > > > >>>>>>>>> usages of the StoreType enum to see which actual rocksdb > store > > > was > > > > >>>>>>> being > > > > >>>>>>>>> used where (for example some stores using the > TimeOrderedBuffer > > > > >>>>>>> variants > > > > >>>>>>>> in > > > > >>>>>>>>> some special cases, or to understand whether the DSL was > > > > >> defaulting > > > > >>>>>> to > > > > >>>>>>>>> plain, timestamped, or versioned stores for RocksDB vs > > > InMemory -- > > > > >>>>>> both > > > > >>>>>>>> of > > > > >>>>>>>>> which seem like they could be of interest to a user). This > > > would > > > > >> be > > > > >>>>>>> much > > > > >>>>>>>>> easier if everything was handled in one place, and you can > > > just go > > > > >>>>>> to > > > > >>>>>>> the > > > > >>>>>>>>> (eg) RocksDBStoreTypeSpec and see what it's doing, or find > > > usages > > > > >> of > > > > >>>>>>> the > > > > >>>>>>>>> methods to understand what stores are being handed to > which DSL > > > > >>>>>>>> operators. > > > > >>>>>>>>> > > > > >>>>>>>>> I suppose we could still clean up the API and solve this > > > problem > > > > >> by > > > > >>>>>>>> having > > > > >>>>>>>>> the old (and new) config delegate to a StoreTypeSpec no > matter > > > > >> what, > > > > >>>>>>> but > > > > >>>>>>>>> make RocksDBStoreTypeSpec and InMemoryStoreTypeSpec > internal > > > > >> classes > > > > >>>>>>> that > > > > >>>>>>>>> are simply implementation details of the ROCKSDB vs > IN_MEMORY > > > > >> enums. > > > > >>>>>>>> WDYT? > > > > >>>>>>>>> > > > > >>>>>>>>> > > > > >>>>>>>>> On Sun, Jul 23, 2023 at 11:14 AM Guozhang Wang < > > > > >>>>>>>> guozhang.wang...@gmail.com> > > > > >>>>>>>>> wrote: > > > > >>>>>>>>> > > > > >>>>>>>>>> Thanks everyone for the great discussions so far! I first > saw > > > the > > > > >>>>>> JIRA > > > > >>>>>>>>>> and left some quick thoughts without being aware of the > > > > >>>>>>>>>> already-written KIP (kudos to Almog, very great one) and > the > > > > >>>>>> DISCUSS > > > > >>>>>>>>>> thread here. And I happily find some of my initial > thoughts > > > align > > > > >>>>>> with > > > > >>>>>>>>>> the KIP already :) > > > > >>>>>>>>>> > > > > >>>>>>>>>> Would like to add a bit more of my 2c after reading > through > > > the > > > > >> KIP > > > > >>>>>>>>>> and the thread here: > > > > >>>>>>>>>> > > > > >>>>>>>>>> 1. On the high level, I'm in favor of pushing this KIP > through > > > > >>>>>> without > > > > >>>>>>>>>> waiting on the other gaps to be closed. In my back > pocket's > > > > >>>>>>>>>> "dependency graph" of Kafka Streams roadmap of large > changes > > > or > > > > >>>>>>>>>> feature gaps, the edges of dependencies are defined based > on > > > my > > > > >>>>>>>>>> understanding of whether doing one first would largely > > > > >> complicate / > > > > >>>>>>>>>> negate the effort of the other but not vice versa, in > which > > > case > > > > >> we > > > > >>>>>>>>>> should consider getting the other done first. In this > case, I > > > > >> feel > > > > >>>>>>>>>> such a dependency is not strong enough, so encouraging > the KIP > > > > >>>>>>>>>> contributor to finish what he/she would love to do to > close > > > some > > > > >>>>>> gaps > > > > >>>>>>>>>> early would be higher priorities. I did not see by just > doing > > > > >> this > > > > >>>>>> we > > > > >>>>>>>>>> could end up in a worse intermediate stage yet, but I > could be > > > > >>>>>>>>>> corrected. > > > > >>>>>>>>>> > > > > >>>>>>>>>> 2. Regarding the store types --- gain here I'd like to > just > > > > >> clarify > > > > >>>>>>>>>> the terms a bit since in the past it has some confusions: > we > > > used > > > > >>>>>>>>>> "impl types" (in hindsight it may not be a good name) for > > > > >> rocksdb / > > > > >>>>>>>>>> memory / custom, and we used "store types" for kv / > windowed / > > > > >>>>>>>>>> sessioned etc, as I said in the JIRA I think the current > > > proposal > > > > >>>>>> also > > > > >>>>>>>>>> have a good side effect as quality bar to really enforce > us > > > think > > > > >>>>>>>>>> twice when trying to add more store types in the future > as it > > > > >> will > > > > >>>>>>>>>> impact API instantiations. In the ideal world, I would > > > consider: > > > > >>>>>>>>>> > > > > >>>>>>>>>> * We have (timestamped) kv store, versioned kv store, > window > > > > >> store, > > > > >>>>>>>>>> session store as first-class DSL store types. Some DSL > > > operators > > > > >>>>>> could > > > > >>>>>>>>>> accept multiple store types (e.g. versioned and non > versioned > > > > >>>>>>>>>> kv-store) for semantics / efficiency trade-offs. But I > think > > > we > > > > >>>>>> would > > > > >>>>>>>>>> remove un-timestamped kv stores eventually since that > > > efficiency > > > > >>>>>>>>>> trade-off is so minimal compared to its usage limitations. > > > > >>>>>>>>>> * As for list-value store (for stream-stream Join), > > > > >>>>>> memory-lru-cache > > > > >>>>>>>>>> (for PAPI use only), memory-time-ordered-buffer (for > > > > >> suppression), > > > > >>>>>>>>>> they would not be exposed as DSL first-class store types > in > > > the > > > > >>>>>>>>>> future. Instead, they would be treated as internal used > stores > > > > >>>>>> (e.g. > > > > >>>>>>>>>> list-value store is built on key-value store with > specialized > > > > >> serde > > > > >>>>>>>>>> and putInternal), or continue to be just convenient OOTB > PAPI > > > > >> used > > > > >>>>>>>>>> stores only. > > > > >>>>>>>>>> * As we move on, we will continue to be very, very strict > on > > > what > > > > >>>>>>>>>> would be added as DSL store types (and hence requires > changes > > > to > > > > >>>>>> the > > > > >>>>>>>>>> proposed APIs), what to be added as convenient OOTB PAPI > store > > > > >>>>>> impls > > > > >>>>>>>>>> only, what to be added as internal used store types that > > > should > > > > >>>>>> not be > > > > >>>>>>>>>> exposed to users nor customizable at all. > > > > >>>>>>>>>> > > > > >>>>>>>>>> 3. Some more detailed thoughts below: > > > > >>>>>>>>>> > > > > >>>>>>>>>> 3.a) I originally also think that we can extend the > existing > > > > >>>>>> config, > > > > >>>>>>>>>> rather than replacing it. The difference was that I was > > > thinking > > > > >>>>>> that > > > > >>>>>>>>>> order-wise, the runtime would look at the API first, and > then > > > the > > > > >>>>>>>>>> config, whereas in your rejected alternative it was > looking at > > > > >> the > > > > >>>>>>>>>> config first, and then the API --- that I think is a minor > > > thing > > > > >>>>>> and > > > > >>>>>>>>>> either is fine. I'm in agreement that having two configs > > > would be > > > > >>>>>> more > > > > >>>>>>>>>> confusing to users to learn about their precedence rather > than > > > > >>>>>>>>>> helpful, but if we keep both a config and a public API, > then > > > the > > > > >>>>>>>>>> precedence ordering would not be so confusing as long as > we > > > state > > > > >>>>>> them > > > > >>>>>>>>>> clearly. For example: > > > > >>>>>>>>>> > > > > >>>>>>>>>> * We have DefaultStoreTypeSpec OOTB, in that impl we look > at > > > the > > > > >>>>>>>>>> config only, and would only expect either ROCKS or > MEMORY, and > > > > >>>>>> return > > > > >>>>>>>>>> corresponding OOTB store impls; if any other values > > > configured, > > > > >> we > > > > >>>>>>>>>> error out. > > > > >>>>>>>>>> * Users extend that by having MyStoreTypeSpec, in which > they > > > > >> could > > > > >>>>>> do > > > > >>>>>>>>>> arbituray things without respecting the config at all, > but our > > > > >>>>>>>>>> recommended pattern in docs would still say "look into the > > > > >> config, > > > > >>>>>> if > > > > >>>>>>>>>> it is ROCKS or MEMORY just return fall back to > > > > >>>>>> DefaultStoreTypeSepc; > > > > >>>>>>>>>> otherwise if it's some String you recognize, then return > your > > > > >>>>>>>>>> customized store based on the string value, otherwise > error > > > out". > > > > >>>>>>>>>> > > > > >>>>>>>>>> 3.b) About the struct-like Params classes, I like the > idea a > > > lot > > > > >>>>>> and > > > > >>>>>>>>>> wished we would pursue this in the first place, but if we > > > only do > > > > >>>>>> this > > > > >>>>>>>>>> in Spec it would leave some inconsistencies with the > > > > >> StoreBuilders > > > > >>>>>>>>>> though arguably the latter is only for PAPI. I'm > wondering if > > > we > > > > >>>>>>>>>> should consider including the changes in StoreBuilders > (e.g. > > > > >>>>>>>>>> WindowStoreBuilder(WindowSupplierParams)), and if yes, > maybe > > > we > > > > >>>>>> should > > > > >>>>>>>>>> also consider renaming that e.g. `WindowSupplierParams` to > > > > >>>>>>>>>> `WindowStoreSpecParams` too? For this one I only have a > "weak > > > > >>>>>> feeling" > > > > >>>>>>>>>> so I can be convinced otherwise :P > > > > >>>>>>>>>> > > > > >>>>>>>>>> Thanks, > > > > >>>>>>>>>> Guozhang > > > > >>>>>>>>>> > > > > >>>>>>>>>> > > > > >>>>>>>>>> > > > > >>>>>>>>>> On Sun, Jul 23, 2023 at 9:52 AM Matthias J. Sax < > > > > >> mj...@apache.org> > > > > >>>>>>>> wrote: > > > > >>>>>>>>>>> > > > > >>>>>>>>>>> Thanks for all the input. My intention was not to block > the > > > KIP, > > > > >>>>>> but > > > > >>>>>>>>>>> just to take a step back and try get a holistic picture > and > > > > >>>>>>>> discussion, > > > > >>>>>>>>>>> to explore if there are good/viable alternative designs. > As > > > said > > > > >>>>>>>>>>> originally, I really like to close this gap, and was > always > > > > >> aware > > > > >>>>>>> that > > > > >>>>>>>>>>> the current config is not flexible enough. > > > > >>>>>>>>>>> > > > > >>>>>>>>>>> > > > > >>>>>>>>>>> I guess, my "concern" is that the KIP does increase the > API > > > > >>>>>> surface > > > > >>>>>>>> area > > > > >>>>>>>>>>> significantly, as we need all kind of `StoreTypeSpec` > > > > >>>>>>> implementations, > > > > >>>>>>>>>>> and it might also imply that we need follow up KIPs for > new > > > > >>>>>> feature > > > > >>>>>>>>>>> (like in-memory versioned store) that might not need a > KIP > > > > >>>>>>> otherwise. > > > > >>>>>>>>>>> > > > > >>>>>>>>>>> The second question is if it might make the already > "patchy" > > > > >>>>>>> situation > > > > >>>>>>>>>>> with regard to customization worse. > > > > >>>>>>>>>>> > > > > >>>>>>>>>>> We did de-scope the original KIP-591 for this reason, and > > > given > > > > >>>>>> the > > > > >>>>>>>> new > > > > >>>>>>>>>>> situation of the DSL, it seems that it actually got worse > > > > >>>>>> compared > > > > >>>>>>> to > > > > >>>>>>>>>>> back in the days. > > > > >>>>>>>>>>> > > > > >>>>>>>>>>> Lastly, I hope to make the new versioned stores the > default > > > in > > > > >>>>>> the > > > > >>>>>>> DSL > > > > >>>>>>>>>>> and we did not do it in the previous KIP due to backward > > > > >>>>>>> compatibility > > > > >>>>>>>>>>> issues. Thus, from a DSL point of view, I believe there > > > should > > > > >> be > > > > >>>>>>> only > > > > >>>>>>>>>>> "RocksDB", "InMemory", and "Custom" in an ideal world. > > > > >>>>>> Introducing > > > > >>>>>>> (I > > > > >>>>>>>> am > > > > >>>>>>>>>>> exaggerating to highlight my point) "KvRocksDbSpec", > > > > >>>>>>>>>>> "TimestampeKvRocksDbSpec", "VersionedRocksDbSpec", plus > the > > > > >>>>>>>>>>> corresponding in-memory specs seems to head into the > opposite > > > > >>>>>>>> direction. > > > > >>>>>>>>>>> -- My goal is to give users a handle of the _physical_ > store > > > > >>>>>>> (RocksDB > > > > >>>>>>>> vs > > > > >>>>>>>>>>> InMemory vs Custom) but not the _logical_ stores (plain > kv, > > > > >>>>>> ts-kv, > > > > >>>>>>>>>>> versioned) which is "dictated" by the DSL itself and > should > > > not > > > > >>>>>> be > > > > >>>>>>>>>>> customizable (we are just in a weird intermediate > situation > > > that > > > > >>>>>> we > > > > >>>>>>>> need > > > > >>>>>>>>>>> to clean up, but not "lean into" IMHO). > > > > >>>>>>>>>>> > > > > >>>>>>>>>>> Thus, I am also not sure if adding "VersionedRocksDbSpec" > > > would > > > > >>>>>> be > > > > >>>>>>>> ideal > > > > >>>>>>>>>>> (also, given that it only changes a single store, but > not the > > > > >> two > > > > >>>>>>>>>>> windowed stores)? > > > > >>>>>>>>>>> > > > > >>>>>>>>>>> Furthermore, I actually hope that we could use the new > > > versioned > > > > >>>>>>> store > > > > >>>>>>>>>>> to replace the window- and sessions- stores, and thus to > > > > >> decrease > > > > >>>>>>> the > > > > >>>>>>>>>>> number of required store types. > > > > >>>>>>>>>>> > > > > >>>>>>>>>>> > > > > >>>>>>>>>>> Admittedly, I am talking a lot about a potential future, > but > > > the > > > > >>>>>>> goal > > > > >>>>>>>> is > > > > >>>>>>>>>>> only to explore opportunities to not get into "worse" > > > > >>>>>> intermediate > > > > >>>>>>>>>>> state, that will require a huge deprecation surface area > > > later > > > > >>>>>> on. > > > > >>>>>>> Of > > > > >>>>>>>>>>> course, if there is no better way, and my concerns are > not > > > > >>>>>> shared, I > > > > >>>>>>>> am > > > > >>>>>>>>>>> ok to move forward with the KIP. > > > > >>>>>>>>>>> > > > > >>>>>>>>>>> > > > > >>>>>>>>>>> Bottom line: I would personally prefer to keep the > current > > > > >> config > > > > >>>>>>> and > > > > >>>>>>>>>>> add a `Custom` option to it, plus adding one new config > that > > > > >>>>>> allows > > > > >>>>>>>>>>> people to set their custom `StoreTypeSpec` class. -- I > would > > > not > > > > >>>>>>> add a > > > > >>>>>>>>>>> built-in spec for versioned stores at this point (or any > > > other > > > > >>>>>>>> built-in > > > > >>>>>>>>>>> `StorytypeSpec` implementations). I guess, users could > write > > > a > > > > >>>>>>> custom > > > > >>>>>>>>>>> spec if they want to enable versioned store across the > board > > > for > > > > >>>>>> now > > > > >>>>>>>>>>> (until we make them the default anyway)? > > > > >>>>>>>>>>> > > > > >>>>>>>>>>> > > > > >>>>>>>>>>> Hope my train of thoughts is halfway reasonable and not > > > totally > > > > >>>>>> off > > > > >>>>>>>>>> track? > > > > >>>>>>>>>>> > > > > >>>>>>>>>>> > > > > >>>>>>>>>>> -Matthias > > > > >>>>>>>>>>> > > > > >>>>>>>>>>> On 7/21/23 15:27, Sophie Blee-Goldman wrote: > > > > >>>>>>>>>>>> I agree with everything Almog said above, and will just > add > > > on > > > > >>>>>> to > > > > >>>>>>>> two > > > > >>>>>>>>>>>> points: > > > > >>>>>>>>>>>> > > > > >>>>>>>>>>>> 1. Regarding whether to block this KIP on the > completion of > > > > >>>>>> any or > > > > >>>>>>>> all > > > > >>>>>>>>>>>> future implementations of in-memory version stores (or > > > persist > > > > >>>>>>>>>> suppression > > > > >>>>>>>>>>>> buffers), I feel that would be unfair to this feature > which > > > is > > > > >>>>>>>>>> completely > > > > >>>>>>>>>>>> unrelated to the semantic improvements offered by > versioned > > > > >>>>>> state > > > > >>>>>>>>>> stores. > > > > >>>>>>>>>>>> It seems like the responsibility of those driving the > > > versioned > > > > >>>>>>>> state > > > > >>>>>>>>>>>> stores feature, not Almog/this KIP, to make sure that > those > > > > >>>>>> bases > > > > >>>>>>>> are > > > > >>>>>>>>>>>> covered. Further, if anything, this KIP will help with > the > > > > >>>>>> massive > > > > >>>>>>>>>>>> proliferation of StoreSuppliers on the Stores factory > class, > > > > >>>>>> and > > > > >>>>>>>>>> provide > > > > >>>>>>>>>>>> users with a much easier way to leverage the versioned > > > stores > > > > >>>>>>>> without > > > > >>>>>>>>>>>> having to muck around directly with the StoreSuppliers. > > > > >>>>>>>>>>>> > > > > >>>>>>>>>>>> I also thought about it a bit, and really like Almog's > > > > >>>>>> suggestion > > > > >>>>>>> to > > > > >>>>>>>>>>>> introduce an additional StoreSpec for the Versioned > state > > > > >>>>>> stores. > > > > >>>>>>>>>> Obviously > > > > >>>>>>>>>>>> we can add the RocksDB one to this KIP now, and then as > he > > > > >>>>>>>> mentioned, > > > > >>>>>>>>>>>> there's an easy way to get users onto the > > > IMVersionedStateStore > > > > >>>>>>>> types > > > > >>>>>>>>>> once > > > > >>>>>>>>>>>> they are completed. > > > > >>>>>>>>>>>> > > > > >>>>>>>>>>>> Lastly, on this note, I want to point out how smoothly > this > > > > >>>>>> solved > > > > >>>>>>>> the > > > > >>>>>>>>>>>> issue of timestamped stores, which are intended to be > the > > > DSL > > > > >>>>>>>> default > > > > >>>>>>>>>> but > > > > >>>>>>>>>>>> are only a special case for RocksDB. Right now it can be > > > > >>>>>> confusing > > > > >>>>>>>>>> for a > > > > >>>>>>>>>>>> user scrolling through the endless Stores class and > seeing a > > > > >>>>>>>>>> timestamped > > > > >>>>>>>>>>>> version of the persistent but not in-memory stores. One > > > could > > > > >>>>>>> easily > > > > >>>>>>>>>> assume > > > > >>>>>>>>>>>> there was no timestamped option for IM stores and that > this > > > > >>>>>>> feature > > > > >>>>>>>>>> was > > > > >>>>>>>>>>>> incomplete, if they weren't acutely aware of the > internal > > > > >>>>>>>>>> implementation > > > > >>>>>>>>>>>> details (namely that it's only required for RocksDB for > > > > >>>>>>>> compatibility > > > > >>>>>>>>>>>> reasons). However, with this KIP, all that is handled > > > > >>>>>> completely > > > > >>>>>>>>>>>> transparently to the user, and we the devs, who *are* > aware > > > of > > > > >>>>>> the > > > > >>>>>>>>>> internal > > > > >>>>>>>>>>>> implementation details, are now appropriately the ones > > > > >>>>>> responsible > > > > >>>>>>>> for > > > > >>>>>>>>>>>> handing the correct store type to a particular operator. > > > While > > > > >>>>>>>>>> versioned > > > > >>>>>>>>>>>> state stores may not be completely comparable, > depending on > > > > >>>>>>> whether > > > > >>>>>>>>>> we want > > > > >>>>>>>>>>>> users to remain able to easily choose between using > them or > > > not > > > > >>>>>>> (vs > > > > >>>>>>>>>>>> timestamped which should be used by all), I still feel > this > > > KIP > > > > >>>>>>> is a > > > > >>>>>>>>>> great > > > > >>>>>>>>>>>> step in the right direction that not only should not be > > > > >>>>>> blocked on > > > > >>>>>>>> the > > > > >>>>>>>>>>>> completion of the IM implementations, but in fact should > > > > >>>>>>>> specifically > > > > >>>>>>>>>> be > > > > >>>>>>>>>>>> done first as it enables an easier way to utilize those > IM > > > > >>>>>>> versioned > > > > >>>>>>>>>>>> stores. Just my 2 cents :) > > > > >>>>>>>>>>>> > > > > >>>>>>>>>>>> 2. The idea to expand the existing the config with a > CUSTOM > > > > >>>>>> enum > > > > >>>>>>>>>> without > > > > >>>>>>>>>>>> introducing another config to specify the CUSTOM store > spec > > > > >>>>>> does > > > > >>>>>>> not > > > > >>>>>>>>>> seem > > > > >>>>>>>>>>>> appropriate, or even possible (for the reasons Almog > > > mentioned > > > > >>>>>>>> above > > > > >>>>>>>>>> about > > > > >>>>>>>>>>>> config types, though perhaps there is a way I'm not > > > seeing). I > > > > >>>>>> do > > > > >>>>>>>> not > > > > >>>>>>>>>> buy > > > > >>>>>>>>>>>> the argument that we should optimize the API to make it > easy > > > > >>>>>> for > > > > >>>>>>>>>> users who > > > > >>>>>>>>>>>> just want to switch to all in-memory stores, as I truly > > > believe > > > > >>>>>>> this > > > > >>>>>>>>>> is a > > > > >>>>>>>>>>>> very small fraction of the potential userbase of this > > > feature > > > > >>>>>>>> (anyone > > > > >>>>>>>>>> who's > > > > >>>>>>>>>>>> actually using this should please chime in!). It seems > very > > > > >>>>>> likely > > > > >>>>>>>>>> that the > > > > >>>>>>>>>>>> majority of users of this feature are actually those > with > > > > >>>>>> custom > > > > >>>>>>>> state > > > > >>>>>>>>>>>> stores, as to my knowledge, this has been the case > any/every > > > > >>>>>> time > > > > >>>>>>>> this > > > > >>>>>>>>>>>> feature was requested by users. > > > > >>>>>>>>>>>> > > > > >>>>>>>>>>>> That said, while I don't see any way to get around > > > introducing > > > > >>>>>> a > > > > >>>>>>> new > > > > >>>>>>>>>>>> config, I don't personally have a preference w.r.t > whether > > > to > > > > >>>>>> keep > > > > >>>>>>>>>> around > > > > >>>>>>>>>>>> the old config or deprecate it. I simply don't get the > > > > >>>>>> impression > > > > >>>>>>> it > > > > >>>>>>>>>> is > > > > >>>>>>>>>>>> very heavily used as it stands today, while it only > works > > > for > > > > >>>>>>> those > > > > >>>>>>>>>> who > > > > >>>>>>>>>>>> want all in-memory stores. Again, input from actual > users > > > > >>>>>> would be > > > > >>>>>>>>>> very > > > > >>>>>>>>>>>> valuable here. In the absence of that data, I will just > > > point > > > > >>>>>> to > > > > >>>>>>> the > > > > >>>>>>>>>> fact > > > > >>>>>>>>>>>> that this KIP was proposed by a Streams dev (you :P), > > > > >>>>>> abandoned, > > > > >>>>>>>>>> picked up > > > > >>>>>>>>>>>> by another Streams dev, and finally implemented without > ever > > > > >>>>>>> hearing > > > > >>>>>>>>>> from a > > > > >>>>>>>>>>>> user that they would find this useful. This is not to > > > disparage > > > > >>>>>>> the > > > > >>>>>>>>>>>> original KIP, but just to say again, as I stated back > then, > > > it > > > > >>>>>>>> seemed > > > > >>>>>>>>>> like > > > > >>>>>>>>>>>> a major opportunity loss to leave out custom state > stores > > > > >>>>>>>>>>>> > > > > >>>>>>>>>>>> Cheers, > > > > >>>>>>>>>>>> Sophie > > > > >>>>>>>>>>>> > > > > >>>>>>>>>>>> On Fri, Jul 21, 2023 at 1:52 PM Almog Gavra < > > > > >>>>>>> almog.ga...@gmail.com> > > > > >>>>>>>>>> wrote: > > > > >>>>>>>>>>>> > > > > >>>>>>>>>>>>> Thanks for all the feedback folk! Responses inline. > > > > >>>>>>>>>>>>> > > > > >>>>>>>>>>>>>> Basically, I'm suggesting two things: first, call out > in > > > some > > > > >>>>>>> way > > > > >>>>>>>>>>>>> (perhaps the StoreTypeSpec javadocs) that each > > > StoreTypeSpec > > > > >>>>>> is > > > > >>>>>>>>>> considered > > > > >>>>>>>>>>>>> a public contract in itself and should outline any > semantic > > > > >>>>>>>>>> guarantees it > > > > >>>>>>>>>>>>> does, or does not, make. Second, we should add a note > on > > > > >>>>>> ordering > > > > >>>>>>>>>>>>> guarantees in the two OOTB specs: for RocksDB we assert > > > that > > > > >>>>>>> range > > > > >>>>>>>>>> queries > > > > >>>>>>>>>>>>> will honor serialized byte ordering, whereas the > InMemory > > > > >>>>>> flavor > > > > >>>>>>>>>> gives no > > > > >>>>>>>>>>>>> ordering guarantee whatsoever at this time. > > > > >>>>>>>>>>>>> > > > > >>>>>>>>>>>>> That makes sense to me Sophie! I'll make the changes > to the > > > > >>>>>> KIP. > > > > >>>>>>>> And > > > > >>>>>>>>>> @Colt, > > > > >>>>>>>>>>>>> yes I believe that would be the new javadoc for the > generic > > > > >>>>>>>>>>>>> ReadOnlyKeyValueStore. > > > > >>>>>>>>>>>>> > > > > >>>>>>>>>>>>>> However, I am wondering if we should close others gaps > > > first? > > > > >>>>>>>>>>>>> > > > > >>>>>>>>>>>>> @Matthias, thanks for the review and thoughts! I think > we > > > > >>>>>> should > > > > >>>>>>>>>> separate > > > > >>>>>>>>>>>>> closing other gaps in the product from providing this > as > > > > >>>>>> useful > > > > >>>>>>>>>>>>> functionality to avoid feature creep so long as the API > > > > >>>>>> proposed > > > > >>>>>>>>>> here will > > > > >>>>>>>>>>>>> be suitable for when we want to close those > implementation > > > > >>>>>> gaps! > > > > >>>>>>> My > > > > >>>>>>>>>> general > > > > >>>>>>>>>>>>> proposal is that for things that are not customizable > > > today by > > > > >>>>>>>>>>>>> default.dsl.store they remain not customizable after > this > > > KIP. > > > > >>>>>>> The > > > > >>>>>>>>>> good > > > > >>>>>>>>>>>>> news is, however, that there's no reason why this > cannot be > > > > >>>>>>>> extended > > > > >>>>>>>>>> to > > > > >>>>>>>>>>>>> cover those in the future if we want to - see specifics > > > below. > > > > >>>>>>>>>>>>> > > > > >>>>>>>>>>>>> Comments on the specifics below > > > > >>>>>>>>>>>>> > > > > >>>>>>>>>>>>>> In particular, this holds for the new versioned-store > ... > > > > >>>>>> Should > > > > >>>>>>>>>>>>> versioned stores also be covered by the KIP > > > > >>>>>>>>>>>>> > > > > >>>>>>>>>>>>> Is there a reason why we can't introduce a > > > > >>>>>>>>>> VersionedRocksDBStoreTypeSpec > > > > >>>>>>>>>>>>> and if we ever support an in-memory an equivalent > > > > >>>>>>>>>>>>> VersionedInMemoryRocksDBStoreTypeSpec? If so, then > there > > > would > > > > >>>>>>> not > > > > >>>>>>>>>> need to > > > > >>>>>>>>>>>>> be any additional changes to the API proposed in this > KIP. > > > > >>>>>>>>>>>>> > > > > >>>>>>>>>>>>>> For `suppress()` it's actually other way around we > only > > > have > > > > >>>>>> an > > > > >>>>>>>>>> in-memory > > > > >>>>>>>>>>>>> implementation. Do you aim to allow custom stores for > > > > >>>>>>> `suppress()`, > > > > >>>>>>>>>> too? > > > > >>>>>>>>>>>>> > > > > >>>>>>>>>>>>> We have three options here: > > > > >>>>>>>>>>>>> 1) we can decide to maintain existing behavior and use > the > > > > >>>>>>>> in-memory > > > > >>>>>>>>>>>>> implementation for all stores (not even going through > the > > > API > > > > >>>>>> at > > > > >>>>>>>> all) > > > > >>>>>>>>>>>>> 2a) we can introduce a new parameter to the > KeyValueParams > > > > >>>>>> class > > > > >>>>>>>>>> (boolean > > > > >>>>>>>>>>>>> isTimeOrderedBuffer or something like that) and return > an > > > > >>>>>>> in-memory > > > > >>>>>>>>>> store > > > > >>>>>>>>>>>>> in the implementation of RocksDBStoreTypeSpec (this > > > maintains > > > > >>>>>> the > > > > >>>>>>>>>> existing > > > > >>>>>>>>>>>>> behavior, and would allow us in the future to make the > > > change > > > > >>>>>> to > > > > >>>>>>>>>> return a > > > > >>>>>>>>>>>>> RocksDB store if we ever provide one) > > > > >>>>>>>>>>>>> 2b) same as 2a but we throw an exception if the > requested > > > > >>>>>> store > > > > >>>>>>>> type > > > > >>>>>>>>>> does > > > > >>>>>>>>>>>>> not support that (this is backwards incompatible, and > since > > > > >>>>>>>> ROCKS_DB > > > > >>>>>>>>>> is the > > > > >>>>>>>>>>>>> default we probably shouldn't do this) > > > > >>>>>>>>>>>>> > > > > >>>>>>>>>>>>> My proposal for now is 1) because as of KIP-825 > > > > >>>>>>>>>>>>> EmitStrategy#ON_WINDOW_CLOSE is the preferred way of > > > > >>>>>> suppressing > > > > >>>>>>>> and > > > > >>>>>>>>>> that > > > > >>>>>>>>>>>>> is accounted for in this API already. > > > > >>>>>>>>>>>>> > > > > >>>>>>>>>>>>>> Last, I am not sure if the new parameter replacing the > > > > >>>>>> existing > > > > >>>>>>>> one > > > > >>>>>>>>>> is > > > > >>>>>>>>>>>>> the > > > > >>>>>>>>>>>>> best way to go? > > > > >>>>>>>>>>>>> > > > > >>>>>>>>>>>>> I'm happy either way, just let me know which you > prefer - > > > the > > > > >>>>>>>>>> discussion > > > > >>>>>>>>>>>>> around CUSTOM is in the rejected alternatives but I'm > > > happy to > > > > >>>>>>>>>> differ to > > > > >>>>>>>>>>>>> whatever the project conventions are :) > > > > >>>>>>>>>>>>> > > > > >>>>>>>>>>>>>> If it's matches existing `ROCKS_DB` or `IN_MEMORY` we > just > > > > >>>>>>> process > > > > >>>>>>>>>> it as > > > > >>>>>>>>>>>>> we > > > > >>>>>>>>>>>>> do know, and if know we assume it's a fully qualified > class > > > > >>>>>> name > > > > >>>>>>>> and > > > > >>>>>>>>>> try to > > > > >>>>>>>>>>>>> instantiate it? > > > > >>>>>>>>>>>>> > > > > >>>>>>>>>>>>> Note that there is no functionality for this kind of > thing > > > in > > > > >>>>>>>>>>>>> AbstractConfig (it's either a String validated enum or > a > > > > >>>>>> class) > > > > >>>>>>> so > > > > >>>>>>>>>> this > > > > >>>>>>>>>>>>> would be a departure from convention. Again, I'm happy > to > > > > >>>>>>> implement > > > > >>>>>>>>>> that if > > > > >>>>>>>>>>>>> it's preferred. > > > > >>>>>>>>>>>>> > > > > >>>>>>>>>>>>>> Also wondering how it would related to the existing > > > `Stores` > > > > >>>>>>>>>> factory? > > > > >>>>>>>>>>>>> > > > > >>>>>>>>>>>>> StoreTypeSpec will depend on Stores factory - they're > one > > > > >>>>>> layer > > > > >>>>>>>>>> removed. > > > > >>>>>>>>>>>>> You can imagine that StoreTypeSpec is just a grouping > of > > > > >>>>>> methods > > > > >>>>>>>>>> from the > > > > >>>>>>>>>>>>> Stores factory into a convenient package for default > > > > >>>>>>> configuration > > > > >>>>>>>>>>>>> purposes. > > > > >>>>>>>>>>>>> > > > > >>>>>>>>>>>>> Thanks again for all the detailed thoughts Matthias! > > > > >>>>>>>>>>>>> > > > > >>>>>>>>>>>>> On Fri, Jul 21, 2023 at 11:50 AM Matthias J. Sax < > > > > >>>>>>> mj...@apache.org > > > > >>>>>>>>> > > > > >>>>>>>>>> wrote: > > > > >>>>>>>>>>>>> > > > > >>>>>>>>>>>>>> Thanks for the KIP. Overall I like the idea to close > this > > > > >>>>>> gap. > > > > >>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>> However, I am wondering if we should close others gaps > > > > >>>>>> first? In > > > > >>>>>>>>>>>>>> particular, IIRC, we have a few cases for which we > only > > > have > > > > >>>>>> a > > > > >>>>>>>>>> RocksDB > > > > >>>>>>>>>>>>>> implementation for a store, and thus, adding an > in-memory > > > > >>>>>>> version > > > > >>>>>>>>>> for > > > > >>>>>>>>>>>>>> these stores first, to make the current `IN_MEMORY` > > > parameter > > > > >>>>>>>> work, > > > > >>>>>>>>>>>>>> might be the first step? > > > > >>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>> In particular, this holds for the new versioned-store > > > (but I > > > > >>>>>>>>>> actually > > > > >>>>>>>>>>>>>> believe the is some other internal store with no > in-memory > > > > >>>>>>>>>>>>>> implementation). -- For `suppress()` it's actually > other > > > way > > > > >>>>>>>> around > > > > >>>>>>>>>> we > > > > >>>>>>>>>>>>>> we only have an in-memory implementation. Do you aim > to > > > allow > > > > >>>>>>>> custom > > > > >>>>>>>>>>>>>> stores for `suppress()`, too? > > > > >>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>> Btw: Should versioned stores also be covered by the > KIP > > > (ie, > > > > >>>>>>>>>>>>>> `StoreTypeSpec`)? We did consider to add a new option > > > > >>>>>>> `VERSIONED` > > > > >>>>>>>>>> to the > > > > >>>>>>>>>>>>>> existing `default.dsl.store` config, but opted out for > > > > >>>>>> various > > > > >>>>>>>>>> reasons. > > > > >>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>> Last, I am not sure if the new parameter replacing the > > > > >>>>>> existing > > > > >>>>>>>> one > > > > >>>>>>>>>> is > > > > >>>>>>>>>>>>>> the best way to go? Did you put the idea to add > `CUSTOM` > > > to > > > > >>>>>> the > > > > >>>>>>>>>> existing > > > > >>>>>>>>>>>>>> config into rejected alternative. Personally, I would > > > prefer > > > > >>>>>> to > > > > >>>>>>>> add > > > > >>>>>>>>>>>>>> `CUSTOM` as I would like to optimize to easy of use > for > > > the > > > > >>>>>>>>>> majority of > > > > >>>>>>>>>>>>>> users (which don't implement a custom store), but only > > > > >>>>>> switch to > > > > >>>>>>>>>>>>>> in-memory sometimes. -- As an alternative, you would > also > > > > >>>>>> just > > > > >>>>>>>>>> extend > > > > >>>>>>>>>>>>>> `dsl.default.store` (it's just a String) and allow to > > > pass in > > > > >>>>>>>>>> anything. > > > > >>>>>>>>>>>>>> If it's matches existing `ROCKS_DB` or `IN_MEMORY` we > just > > > > >>>>>>> process > > > > >>>>>>>>>> it as > > > > >>>>>>>>>>>>>> we do know, and if know we assume it's a fully > qualified > > > > >>>>>> class > > > > >>>>>>>> name > > > > >>>>>>>>>> and > > > > >>>>>>>>>>>>>> try to instantiate it? -- Given that we plan to keep > the > > > > >>>>>>>>>> store-enum, is > > > > >>>>>>>>>>>>>> seems cleaner to keep the existing config and keep > both > > > the > > > > >>>>>>> config > > > > >>>>>>>>>> and > > > > >>>>>>>>>>>>>> enum aligned to each other? > > > > >>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>> It's just preliminary thought. I will need to go back > an > > > > >>>>>> take a > > > > >>>>>>>> more > > > > >>>>>>>>>>>>>> detailed look into the code to grok how the propose > > > > >>>>>>>> `StoreTypeSpec` > > > > >>>>>>>>>>>>>> falls into place. Also wondering how it would related > to > > > the > > > > >>>>>>>>>> existing > > > > >>>>>>>>>>>>>> `Stores` factory? > > > > >>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>> -Matthias > > > > >>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>> On 7/21/23 6:45 AM, Colt McNealy wrote: > > > > >>>>>>>>>>>>>>> Sophie— > > > > >>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>> Thanks for chiming in here. +1 to the idea of > specifying > > > the > > > > >>>>>>>>>> ordering > > > > >>>>>>>>>>>>>>> guarantees that we make in the StorageTypeSpec > javadocs. > > > > >>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>> Quick question then. Is the javadoc that says: > > > > >>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>> Order is not guaranteed as bytes lexicographical > > > ordering > > > > >>>>>>> might > > > > >>>>>>>>>> not > > > > >>>>>>>>>>>>>>> represent key order. > > > > >>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>> no longer correct, and should say: > > > > >>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>> Order guarantees depend on the underlying > > > implementation of > > > > >>>>>>> the > > > > >>>>>>>>>>>>>>> ReadOnlyKeyValueStore. For more information, please > > > consult > > > > >>>>>> the > > > > >>>>>>>>>>>>>>> [StorageTypeSpec javadocs](....) > > > > >>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>> Thanks, > > > > >>>>>>>>>>>>>>> Colt McNealy > > > > >>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>> *Founder, LittleHorse.dev* > > > > >>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>> On Thu, Jul 20, 2023 at 9:28 PM Sophie Blee-Goldman < > > > > >>>>>>>>>>>>>> ableegold...@gmail.com> > > > > >>>>>>>>>>>>>>> wrote: > > > > >>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>> Hey Almog, first off, thanks for the KIP! I (and > others) > > > > >>>>>>> raised > > > > >>>>>>>>>>>>> concerns > > > > >>>>>>>>>>>>>>>> over how restrictive the default.dsl.store config > would > > > be > > > > >>>>>> if > > > > >>>>>>>> not > > > > >>>>>>>>>>>>>>>> extendable to custom store types, especially given > that > > > > >>>>>> this > > > > >>>>>>>>>> seems to > > > > >>>>>>>>>>>>> be > > > > >>>>>>>>>>>>>>>> the primary userbase of such a feature. At the time > we > > > > >>>>>> didn't > > > > >>>>>>>>>> really > > > > >>>>>>>>>>>>>> have > > > > >>>>>>>>>>>>>>>> any better ideas for a clean way to achieve that, > but > > > what > > > > >>>>>> you > > > > >>>>>>>>>>>>> proposed > > > > >>>>>>>>>>>>>>>> makes a lot of sense to me. Happy to see a good > > > solution to > > > > >>>>>>>> this, > > > > >>>>>>>>>> and > > > > >>>>>>>>>>>>>>>> hopefully others will share my satisfaction :P > > > > >>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>> I did have one quick piece of feedback which arose > from > > > an > > > > >>>>>>>>>> unrelated > > > > >>>>>>>>>>>>>>>> question posed to the dev mailing list w/ subject > line > > > > >>>>>>>>>>>>>>>> "ReadOnlyKeyValueStore#range() > > > > >>>>>>>>>>>>>>>> Semantics" > > > > >>>>>>>>>>>>>>>> < > > > > >>>>>>>> > > > https://lists.apache.org/thread/jbckmth8d3mcgg0rd670cpvsgwzqlwrm>. > > > > >>>>>>>>>> I > > > > >>>>>>>>>>>>>>>> recommend checking out the full thread for context, > but > > > it > > > > >>>>>>> made > > > > >>>>>>>> me > > > > >>>>>>>>>>>>> think > > > > >>>>>>>>>>>>>>>> about how we can leverage the new StoreTypeSpec > concept > > > as > > > > >>>>>> an > > > > >>>>>>>>>> answer > > > > >>>>>>>>>>>>> to > > > > >>>>>>>>>>>>>> the > > > > >>>>>>>>>>>>>>>> long-standing question in Streams: where can we put > > > > >>>>>> guarantees > > > > >>>>>>>> of > > > > >>>>>>>>>> the > > > > >>>>>>>>>>>>>>>> public contract for RocksDB (or other store > > > > >>>>>> implementations) > > > > >>>>>>>> when > > > > >>>>>>>>>> all > > > > >>>>>>>>>>>>>> the > > > > >>>>>>>>>>>>>>>> RocksDB stuff is technically internal. > > > > >>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>> Basically, I'm suggesting two things: first, call > out in > > > > >>>>>> some > > > > >>>>>>>> way > > > > >>>>>>>>>>>>>> (perhaps > > > > >>>>>>>>>>>>>>>> the StoreTypeSpec javadocs) that each StoreTypeSpec > is > > > > >>>>>>>> considered > > > > >>>>>>>>>> a > > > > >>>>>>>>>>>>>> public > > > > >>>>>>>>>>>>>>>> contract in itself and should outline any semantic > > > > >>>>>> guarantees > > > > >>>>>>> it > > > > >>>>>>>>>> does, > > > > >>>>>>>>>>>>>> or > > > > >>>>>>>>>>>>>>>> does not, make. Second, we should add a note on > ordering > > > > >>>>>>>>>> guarantees in > > > > >>>>>>>>>>>>>> the > > > > >>>>>>>>>>>>>>>> two OOTB specs: for RocksDB we assert that range > queries > > > > >>>>>> will > > > > >>>>>>>>>> honor > > > > >>>>>>>>>>>>>>>> serialized byte ordering, whereas the InMemory > flavor > > > > >>>>>> gives no > > > > >>>>>>>>>>>>> ordering > > > > >>>>>>>>>>>>>>>> guarantee whatsoever at this time. > > > > >>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>> Thoughts? > > > > >>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>> -Sophie > > > > >>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>> On Thu, Jul 20, 2023 at 4:28 PM Almog Gavra < > > > > >>>>>>>>>> almog.ga...@gmail.com> > > > > >>>>>>>>>>>>>> wrote: > > > > >>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>> Hi All, > > > > >>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>> I would like to propose a KIP to expand support for > > > > >>>>>> default > > > > >>>>>>>> store > > > > >>>>>>>>>>>>> types > > > > >>>>>>>>>>>>>>>>> (KIP-591) to encompass custom store > implementations: > > > > >>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>> > > > > >>>>>>>>>>>>> > > > > >>>>>>>>>> > > > > >>>>>>>> > > > > >>>>>>> > > > > >>>>>> > > > > >>> > > > > >> > > > > https://cwiki.apache.org/confluence/display/KAFKA/KIP-954%3A+expand+default+DSL+store+configuration+to+custom+types > > > > >>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>> Looking forward to your feedback! > > > > >>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>> Cheers, > > > > >>>>>>>>>>>>>>>>> Almog > > > > >>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>> > > > > >>>>>>>>>>>>> > > > > >>>>>>>>>>>> > > > > >>>>>>>>>> > > > > >>>>>>>>> > > > > >>>>>>>> > > > > >>>>>>> > > > > >>>>>> > > > > >>>>> > > > > >>>> > > > > >>> > > > > >> > > > > > > > > >