Sounds good! @Lucia when you have a moment can you update the KIP with the new proposal, including the details that Matthias pointed out in his last response? After that's done I think you can go ahead and call for a vote whenever you're ready!
On Sat, Mar 16, 2024 at 7:35 PM Matthias J. Sax <mj...@apache.org> wrote: > Thanks for the summary. Sounds right to me. That is what I would propose. > > As you pointed out, we of course still need to support the current > confis, and we should log a warning when in use (even if the new one is > in use IMHO) -- but that's more an implementation detail. > > I agree that the new config should take preference in case both are > specified. This should be pointed out in the KIP, as it's an important > contract the user needs to understand. > > > -Matthias > > On 3/14/24 6:18 PM, Sophie Blee-Goldman wrote: > >> > >> Should we change it do `.serializer` and `.deserialize`? > > > > That's a good point -- if we're going to split this up by defining the > > config > > in both the TimeWindowedSerializer and TimeWindowedDeserializer, > > then it makes perfect sense to go a step further and actually define > > only the relevant de/serializer class instead of the full serde > > > > Just to put this all together, it sounds like the proposal is to: > > > > 1) Deprecate both these configs where they appear in StreamsConfig > > (as per the original plan in the KIP, just reiterating it here) > > > > 2) Don't "define" either config in any specific client's Config class, > > but just define a String variable with the config name in the relevant > > de/serializer class, and maybe point people to it in the docs somewhere > > > > 3) We would add three new public String variables for three different > > configs across two classes, specifically: > > > > In TimeWindowedSerializer: > > - define a constant for "windowed.inner.serializer.class" > > In TimeWindowedDeserializer: > > - define a constant for "windowed.inner.deserializer.class" > > - define a constant for "window.size.ms" > > > > 4) Lastly, we would update the windowed de/serializer implementations > > to check for the new configs (ie "windowed.inner.de/serializer.class") > > and use the provided de/serializer class, if one was given. If the new > > configs are not present, they would fall back to the original/current > > logic (ie that based on the old "windowed.inner.serde.class" config) > > > > I think that's everything. Does this sound about right for where we want > > to go with these configs? > > > > On Thu, Mar 14, 2024 at 4:58 PM Matthias J. Sax <mj...@apache.org> > wrote: > > > >>>> By "don't add them" do you just mean we would not have any actual > >>>> variables defined anywhere for these configs (eg WINDOW_SIZE_MS) > >>>> and simply document -- somewhere -- that one can use the string > >>>> "window.size.ms" when configuring a command-line client with a > >>>> windowed serde? > >> > >> Yes. That's the idea. > >> > >> > >> > >>> I assume you aren't proposing > >>>> to remove the ability to use and understand this config from the > >>>> implementations themselves, but correct me if that's wrong. > >> > >> No, that would effectively break what we fixed with the original KIP :) > >> > >> > >> > >>>> Are there any other configs in similar situations that we could look > >>>> to for precedent? > >> > >> Not aware of any others, either. > >> > >> > >> > >>>> If these are truly the first/only of their kind, I would vote to just > >> stick > >>>> them in the appropriate class. As for which class to put them in, I > >>>> think I'm convinced that "window.size.ms" should only go in the > >>>> TimeWindowedDeserializer rather than sticking them both in the > >>>> TimeWindowedSerde as I originally suggested. However, I would > >>>> even go a step further and not place the "inner.window.class.serde" > >>>> in the TimeWindowedSerde class either. To me, it actually makes > >>>> the most sense to define it in both the TimeWindowedSerializer > >>>> and the TimeWindowedDeserializer. > >> > >> Not sure either. What you propose is fine with me. However, I am > >> wondering about the config names... Why is it `serde` for this case? > >> Should we change it do `.serializer` and `.deserialize`? > >> > >> > >> > >> -Matthias > >> > >> > >> On 3/13/24 8:19 PM, Sophie Blee-Goldman wrote: > >>> By "don't add them" do you just mean we would not have any actual > >>> variables defined anywhere for these configs (eg WINDOW_SIZE_MS) > >>> and simply document -- somewhere -- that one can use the string > >>> "window.size.ms" when configuring a command-line client with a > >>> windowed serde? Or something else? I assume you aren't proposing > >>> to remove the ability to use and understand this config from the > >>> implementations themselves, but correct me if that's wrong. > >>> > >>> Are there any other configs in similar situations that we could look > >>> to for precedent? I personally am not aware of any but by definition > >>> I suppose these would be hard to discover unless you were actively > >>> looking for them, so I'm wondering if there might be other "shadow > >>> configs" elsewhere in the code base. > >>> > >>> If these are truly the first/only of their kind, I would vote to just > >> stick > >>> them in the appropriate class. As for which class to put them in, I > >>> think I'm convinced that "window.size.ms" should only go in the > >>> TimeWindowedDeserializer rather than sticking them both in the > >>> TimeWindowedSerde as I originally suggested. However, I would > >>> even go a step further and not place the "inner.window.class.serde" > >>> in the TimeWindowedSerde class either. To me, it actually makes > >>> the most sense to define it in both the TimeWindowedSerializer > >>> and the TimeWindowedDeserializer. > >>> > >>> The reason being that, as discussed above, the only use case for > >>> these configs would be in the console consumer/producer which > >>> only uses the Serializer or Deserializer, and would never actually > >>> be used by/in Streams where we use the Serde version. And while > >>> defining the "inner.window.class.serde" in two places might seem > >>> redundant, this would mean that all the configs needed to properly > >>> configure the specific class being used by the particular kind of > >>> consumer client -- that is, Deserializer for a console consumer and > >>> Serializer for a console producer -- would be located in that exact > >>> class. I assume this would make them much easier to discover > >>> and be used than having to search for configs defined in classes > >>> you don't even need for the console client, like the Serde form > >>> > >>> Just my two cents -- happy to hear other opinions on this > >>> > >>> On Mon, Mar 11, 2024 at 6:58 PM Matthias J. Sax <mj...@apache.org> > >> wrote: > >>> > >>>> Yes, it's used inside `TimeWindowedSerializer` and actually also > inside > >>>> `TimeWindowDeserializer`. > >>>> > >>>> However, it does IMHO not change that we should remove it from > >>>> `StreamsConfig` because both configs are not intended to be used in > Java > >>>> code... If one writes Java code, they should use > >>>> > >>>> new TimeWindowedSerializer(Serializer) > >>>> new TimeWindowDeserializer(Deserializer, Long) > >>>> new TimeWindowSerdes(Serde, Long) > >>>> > >>>> and thus they don't need either config. > >>>> > >>>> The configs are only needed for command line tool, that create the > >>>> (de)serializer via reflection using the default constructor. > >>>> > >>>> Does this make sense? > >>>> > >>>> > >>>> > >>>> The only open question is really, if and where to add them... Strictly > >>>> speaking, we don't need either config as public variable as nobody > >>>> should use them in Java code. To me, it just feels right/better do > make > >>>> them public for documentation purpose that these configs exists? > >>>> > >>>> `inner.window.class.serde` has "serde" in it's name, so we could add > it > >>>> to `TimeWindowSerdes`? For `window.size.ms`, it's only used by the > >>>> deserialize to maybe add it there? Just some ideas. -- Or we sidestep > >>>> this question and just don't add them; also fine with me. > >>>> > >>>> > >>>> -Matthias > >>>> > >>>> On 3/11/24 10:53 AM, Lucia Cerchie wrote: > >>>>> PS-- I was re-reading the PR that originated this discussion and > >> realized > >>>>> that `window.inner.serde.class` is used here > >>>>> < > >>>> > >> > https://github.com/a0x8o/kafka/blob/master/streams/src/main/java/org/apache/kafka/streams/kstream/TimeWindowedSerializer.java#L44 > >>>>> > >>>>> in KStreams. This goes against removing it, yes? > >>>>> > >>>>> On Mon, Mar 11, 2024 at 10:40 AM Lucia Cerchie < > lcerc...@confluent.io> > >>>>> wrote: > >>>>> > >>>>>> Sophie, I'll add a paragraph about removing > >> `windowed.inner.serde.class` > >>>>>> to the KIP. I'll also add putting it in the `TimeWindowedSerde` > class > >>>> with > >>>>>> some add'tl guidance on the docs addition. > >>>>>> > >>>>>> Also, I double-checked setting window.size.ms on the client and it > >>>>>> doesn't throw an error at all, in response to Matthias's question. > >>>> Changing > >>>>>> the KIP in response to that. > >>>>>> > >>>>>> On Sun, Mar 10, 2024 at 6:04 PM Sophie Blee-Goldman < > >>>> sop...@responsive.dev> > >>>>>> wrote: > >>>>>> > >>>>>>> Thanks for responding Matthias -- you got there first, but I was > >> going > >>>> to > >>>>>>> say exactly the same thing as in your most reply. In other words, I > >> see > >>>>>>> the > >>>>>>> `windowed.inner.serde.class` as being in the same boat as the ` > >>>>>>> window.size.ms` config, so whatever we do with one we should do > for > >>>> the > >>>>>>> other. > >>>>>>> > >>>>>>> I do agree with removing these from StreamsConfig, but defining > them > >> in > >>>>>>> ConsumerConfig feels weird as well. There's really no great answer > >>>> here. > >>>>>>> > >>>>>>> My only concern about adding it to the corresponding > >>>>>>> serde/serializer/deserializer class is that it might be difficult > for > >>>>>>> people to find them. I generally assume that people tend not to > look > >> at > >>>>>>> the > >>>>>>> serde/serializer/deserializer classes/implementations. But maybe in > >>>> this > >>>>>>> case, someone who actually needed these configs would be likely to > be > >>>>>>> motivated enough to find them by looking at the class? And with > >>>> sufficient > >>>>>>> documentation, it's likely not a problem. So, I'm +1 on putting it > >> into > >>>>>>> the > >>>>>>> TimeWindowedSerde class > >>>>>>> > >>>>>>> (I would personally stick them into the serde class, rather than > the > >>>>>>> serializer and/or deserializer, but I could be convinced either > way) > >>>>>>> > >>>>>>> On Fri, Mar 1, 2024 at 3:00 PM Matthias J. Sax <mj...@apache.org> > >>>> wrote: > >>>>>>> > >>>>>>>> One more thought after I did some more digging on the related PR. > >>>>>>>> > >>>>>>>> Should we do the same thing for `windowed.inner.serde.class`? > >>>>>>>> > >>>>>>>> > >>>>>>>> Both config belong to windowed serdes (which KS provide) but the > KS > >>>> code > >>>>>>>> itself does never use them (and in fact, disallows to use them and > >>>> would > >>>>>>>> throw an error is used). Both are intended for plain consumer use > >>>> cases > >>>>>>>> for which the window serdes are used. > >>>>>>>> > >>>>>>>> The question to me is, should we add them back somewhere else? It > >> does > >>>>>>>> not really belong into `ConsumerConfig` either, but maybe we could > >> add > >>>>>>>> them to the corresponding serde or (de)serialize classes? > >>>>>>>> > >>>>>>>> > >>>>>>>> -Matthias > >>>>>>>> > >>>>>>>> > >>>>>>>> On 2/21/24 2:41 PM, Matthias J. Sax wrote: > >>>>>>>>> Thanks for the KIP. Sounds like a nice cleanup. > >>>>>>>>> > >>>>>>>>>> window.size.ms is not a true KafkaStreams config, and results > in > >>>> an > >>>>>>>>>> error when set from a KStreams application > >>>>>>>>> > >>>>>>>>> What error? > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> Given that the configs is used by `TimeWindowedDeserializer` I am > >>>>>>>>> wondering if we should additionally add > >>>>>>>>> > >>>>>>>>> public class TimeWindowedDeserializer { > >>>>>>>>> > >>>>>>>>> public static final String WINDOW_SIZE_MS_CONFIG = " > >>>>>>> window.size.ms > >>>>>>>> "; > >>>>>>>>> } > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> -Matthias > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> On 2/15/24 6:32 AM, Lucia Cerchie wrote: > >>>>>>>>>> Hey everyone, > >>>>>>>>>> > >>>>>>>>>> I'd like to discuss KIP-1020 > >>>>>>>>>> < > >>>>>>>> > >>>>>>> > >>>> > >> > https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=290982804 > >>>>>>>>> , > >>>>>>>>>> which would move to deprecate `window.size.ms` in > `StreamsConfig` > >>>>>>>> since ` > >>>>>>>>>> window.size.ms` is a client config. > >>>>>>>>>> > >>>>>>>>>> Thanks in advance! > >>>>>>>>>> > >>>>>>>>>> Lucia Cerchie > >>>>>>>>>> > >>>>>>>> > >>>>>>> > >>>>>> > >>>>>> > >>>>>> -- > >>>>>> > >>>>>> [image: Confluent] <https://www.confluent.io> > >>>>>> Lucia Cerchie > >>>>>> Developer Advocate > >>>>>> Follow us: [image: Blog] > >>>>>> < > >>>> > >> > https://www.confluent.io/blog?utm_source=footer&utm_medium=email&utm_campaign=ch.email-signature_type.community_content.blog > >>>>> [image: > >>>>>> Twitter] <https://twitter.com/ConfluentInc>[image: Slack] > >>>>>> <https://slackpass.io/confluentcommunity>[image: YouTube] > >>>>>> <https://youtube.com/confluent> > >>>>>> > >>>>>> [image: Try Confluent Cloud for Free] > >>>>>> < > >>>> > >> > https://www.confluent.io/get-started?utm_campaign=tm.fm-apac_cd.inbound&utm_source=gmail&utm_medium=organic > >>>>> > >>>>>> > >>>>> > >>>>> > >>>> > >>> > >> > > >