Sounds good!
On Tue, May 14, 2019 at 9:21 AM Development <d...@yeralin.net> wrote: > > Hey, > > I think it the proposal is finalized, no one raised any concerns. Shall we > call it for a [VOTE]? > > Best, > Daniyar Yeralin > > > On May 10, 2019, at 10:17 AM, John Roesler <j...@confluent.io> wrote: > > > > Good observation, Daniyar. > > > > Maybe we should just not implement support for serdeFrom. > > > > We can always add it later, but I think you're right, we need some > > kind of more sophisticated support, or at least a second argument for > > the inner class. > > > > For now, it seems like most use cases would be satisfied without > > serdeFrom(...List...) > > > > -John > > > > On Fri, May 10, 2019 at 8:57 AM Development <d...@yeralin.net> wrote: > >> > >> Hi, > >> > >> I was trying to add some test cases for the list serde, and it led me to > >> this class `org.apache.kafka.common.serialization.SerializationTest`. I > >> saw that it relies on method > >> `org.apache.kafka.common.serialization.serdeFrom(Class<T> type)` > >> > >> Now, I’m not sure how to adapt List<T> serde for this method, since it > >> will be a “nested class”. What is the best approach in this case? > >> > >> I remember that in Jackson for example, one uses a TypeFactory, and > >> constructs “collectionType” of two classes. For example, > >> `constructCollectionType(List.class, String.class).getClass()`. I don’t > >> think it applies here. > >> > >> Any ideas? > >> > >> Best, > >> Daniyar Yeralin > >> > >>> On May 9, 2019, at 2:10 PM, Development <d...@yeralin.net> wrote: > >>> > >>> Hey Sophie, > >>> > >>> Thank you for your input. I think I’d rather finish this KIP as is, and > >>> then open a new one for the Collections (if everyone agrees). I don’t > >>> want to extend the current KIP-466, since most of the work is already > >>> done for it. > >>> > >>> Meanwhile, I’ll start adding some test cases for this new list serde > >>> since this discussion seems to be approaching its logical end. > >>> > >>> Best, > >>> Daniyar Yeralin > >>> > >>>> On May 9, 2019, at 1:35 PM, Sophie Blee-Goldman <sop...@confluent.io> > >>>> wrote: > >>>> > >>>> Good point about serdes for other Collections. On the one hand I'd guess > >>>> that non-List Collections are probably relatively rare in practice (if > >>>> anyone disagrees please correct me!) but on the other hand, a) even if > >>>> just > >>>> a small number of people benefit I think it's worth the extra effort and > >>>> b) > >>>> if we do end up needing/wanting them in the future it would save us a KIP > >>>> to just add them now. Personally I feel it would make sense to expand the > >>>> scope of this KIP a bit to include all Collections as a logical unit, but > >>>> the ROI could be low.. > >>>> > >>>> (I know of at least one instance in the unit tests where a Set serde > >>>> could > >>>> be useful, and there may be more) > >>>> > >>>> On Thu, May 9, 2019 at 7:27 AM Development <d...@yeralin.net> wrote: > >>>> > >>>>> Hey, > >>>>> > >>>>> I don’t see any replies. Seems like this proposal can be finalized and > >>>>> called for a vote? > >>>>> > >>>>> Also I’ve been thinking. Do we need more serdes for other Collections? > >>>>> Like queue or set for example > >>>>> > >>>>> Best, > >>>>> Daniyar Yeralin > >>>>> > >>>>>> On May 8, 2019, at 2:28 PM, John Roesler <j...@confluent.io> wrote: > >>>>>> > >>>>>> Hi Daniyar, > >>>>>> > >>>>>> No worries about the procedural stuff. Prior experience with KIPs is > >>>>>> not required :) > >>>>>> > >>>>>> I was just trying to help you propose this stuff in a way that the > >>>>>> others will find easy to review. > >>>>>> > >>>>>> Thanks for updating the KIP. Thanks to the others for helping out with > >>>>>> the syntax. > >>>>>> > >>>>>> Given these updates, I'm curious if anyone else has feedback about > >>>>>> this proposal. Personally, I think it sounds fine! > >>>>>> > >>>>>> -John > >>>>>> > >>>>>> On Wed, May 8, 2019 at 1:01 PM Development <d...@yeralin.net> wrote: > >>>>>>> > >>>>>>> Hey, > >>>>>>> > >>>>>>> That worked! I certainly lack Java generics knowledge. Thanks for the > >>>>> snippet. I’ll update KIP again. > >>>>>>> > >>>>>>> Best, > >>>>>>> Daniyar Yeralin > >>>>>>> > >>>>>>>> On May 8, 2019, at 1:39 PM, Chris Egerton <chr...@confluent.io> > >>>>>>>> wrote: > >>>>>>>> > >>>>>>>> Hi Daniyar, > >>>>>>>> > >>>>>>>> I think you may want to tweak your syntax a little: > >>>>>>>> > >>>>>>>> public static <T> Serde<List<T>> List(Serde<T> innerSerde) { > >>>>>>>> return new ListSerde<T>(innerSerde); > >>>>>>>> } > >>>>>>>> > >>>>>>>> Does that work? > >>>>>>>> > >>>>>>>> Cheers, > >>>>>>>> > >>>>>>>> Chris > >>>>>>>> > >>>>>>>> On Wed, May 8, 2019 at 10:29 AM Development <d...@yeralin.net > >>>>>>>> <mailto: > >>>>> d...@yeralin.net>> wrote: > >>>>>>>> Hi John, > >>>>>>>> > >>>>>>>> I updated JIRA and KIP. > >>>>>>>> > >>>>>>>> I didn’t know about the process, and created PR before I knew about > >>>>> KIPs :) > >>>>>>>> > >>>>>>>> As per static declaration, I don’t think Java allows that: > >>>>>>>> > >>>>>>>> > >>>>>>>> Best, > >>>>>>>> Daniyar Yeralin > >>>>>>>> > >>>>>>>>> On May 7, 2019, at 2:22 PM, John Roesler <j...@confluent.io <mailto: > >>>>> j...@confluent.io>> wrote: > >>>>>>>>> > >>>>>>>>> Thanks for that update. Do you mind making changes primarily on the > >>>>>>>>> KIP document ? ( > >>>>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-466%3A+Add+support+for+List%3CT%3E+serialization+and+deserialization > >>>>> < > >>>>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-466%3A+Add+support+for+List%3CT%3E+serialization+and+deserialization > >>>>>> ) > >>>>>>>>> > >>>>>>>>> This is the design document that we have to agree on and vote for, > >>>>>>>>> the > >>>>>>>>> PR comes later. It can be nice to have an implementation to look at, > >>>>>>>>> but the KIP is the main artifact for this discussion. > >>>>>>>>> > >>>>>>>>> With this in mind, it will help get more reviewers to look at it if > >>>>>>>>> you can tidy up the KIP document so that it stands on its own. > >>>>>>>>> People > >>>>>>>>> shouldn't have to look at any other document to understand the > >>>>>>>>> motivation of the proposal, and they shouldn't have to look at a PR > >>>>>>>>> to > >>>>>>>>> see what the public API will look like. If it helps, you can take a > >>>>>>>>> look at some other recent KIPs. > >>>>>>>>> > >>>>>>>>> Given that the list serde needs an inner serde, I agree you can't > >>>>>>>>> have > >>>>>>>>> a zero-argument static factory method for it, but it seems you could > >>>>>>>>> still have a static method: > >>>>>>>>> `public static Serde<List<T>> List(Serde<T> innerSerde)`. > >>>>>>>>> > >>>>>>>>> Thoughts? > >>>>>>>>> > >>>>>>>>> On Tue, May 7, 2019 at 12:18 PM Development <d...@yeralin.net > >>>>>>>>> <mailto: > >>>>> d...@yeralin.net>> wrote: > >>>>>>>>>> > >>>>>>>>>> Absolutely agree. Already pushed another commit to remove > >>>>>>>>>> comparator > >>>>> argument: https://github.com/apache/kafka/pull/6592 < > >>>>> https://github.com/apache/kafka/pull/6592> < > >>>>> https://github.com/apache/kafka/pull/6592 < > >>>>> https://github.com/apache/kafka/pull/6592>> > >>>>>>>>>> > >>>>>>>>>> Thank you for your input John! I really appreciate it. > >>>>>>>>>> > >>>>>>>>>> What about this point I made: > >>>>>>>>>> > >>>>>>>>>> 1. Since type for List serde needs to be declared before hand, I > >>>>> could not create a static method for List Serde under > >>>>> org.apache.kafka.common.serialization.Serdes. I addressed it in the KIP: > >>>>>>>>>> P.S. Static method corresponding to ListSerde under > >>>>> org.apache.kafka.common.serialization.Serdes (something like static > >>>>> public > >>>>> Serde<List<T>> List() {...} > >>>>> inorg.apache.kafka.common.serialization.Serdes) > >>>>> class cannot be added because type needs to be defined beforehand. > >>>>> That's > >>>>> why one needs to create List Serde in the following fashion: > >>>>>>>>>> new Serdes.ListSerde<String>(Serdes.String(), > >>>>> Comparator.comparing(String::length)); > >>>>>>>>>> (can possibly be simplified by declaring import static > >>>>> org.apache.kafka.common.serialization.Serdes.ListSerde) > >>>>>>>>>> > >>>>>>>>>>> On May 7, 2019, at 11:50 AM, John Roesler <j...@confluent.io > >>>>> <mailto:j...@confluent.io>> wrote: > >>>>>>>>>>> > >>>>>>>>>>> Thanks for the reply Daniyar, > >>>>>>>>>>> > >>>>>>>>>>> That makes much more sense! I thought I must be missing something, > >>>>> but I > >>>>>>>>>>> couldn't for the life of me figure it out. > >>>>>>>>>>> > >>>>>>>>>>> What do you think about just taking an argument, instead of for a > >>>>>>>>>>> Comparator, for the Serde of the inner type? That way, the user > >>>>>>>>>>> can > >>>>> control > >>>>>>>>>>> how exactly the inner data gets serialized, while also bounding > >>>>>>>>>>> the > >>>>> generic > >>>>>>>>>>> parameter properly. As for the order, since the list is already > >>>>>>>>>>> in a > >>>>>>>>>>> specific order, which the user themselves controls, it doesn't > >>>>>>>>>>> seem > >>>>>>>>>>> strictly necessary to offer an option to sort the data during > >>>>> serialization. > >>>>>>>>>>> > >>>>>>>>>>> Thanks, > >>>>>>>>>>> -John > >>>>>>>>>>> > >>>>>>>>>>> On Mon, May 6, 2019 at 8:47 PM Development <d...@yeralin.net > >>>>> <mailto:d...@yeralin.net>> wrote: > >>>>>>>>>>> > >>>>>>>>>>>> Hi John, > >>>>>>>>>>>> > >>>>>>>>>>>> I’m really sorry for the confusion. I cloned that JIRA ticket > >>>>>>>>>>>> from > >>>>> an old > >>>>>>>>>>>> one about introducing UUID Serde, and I guess was too hasty while > >>>>> editing > >>>>>>>>>>>> the copy to notice the mistake. Just edited the ticket. Sorry for > >>>>> any > >>>>>>>>>>>> inconvenience . > >>>>>>>>>>>> > >>>>>>>>>>>> As per comparator, I agree. Let’s make user be responsible for > >>>>>>>>>>>> implementing comparable interface. I was just thinking to make > >>>>>>>>>>>> the > >>>>> serde a > >>>>>>>>>>>> little more flexible (i.e. let user decide in which order records > >>>>> is going > >>>>>>>>>>>> to be inserted into a change log topic). > >>>>>>>>>>>> > >>>>>>>>>>>> Thank you! > >>>>>>>>>>>> > >>>>>>>>>>>> Best, > >>>>>>>>>>>> Daniyar Yeralin > >>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>>>> On May 6, 2019, at 5:37 PM, John Roesler <j...@confluent.io > >>>>> <mailto:j...@confluent.io>> wrote: > >>>>>>>>>>>>> > >>>>>>>>>>>>> Hi Daniyar, > >>>>>>>>>>>>> > >>>>>>>>>>>>> Thanks for the proposal! > >>>>>>>>>>>>> > >>>>>>>>>>>>> If I understand the point about the comparator, is it just to > >>>>> capture the > >>>>>>>>>>>>> generic type parameter? If so, then anything that implements a > >>>>> known > >>>>>>>>>>>>> interface would work just as well, right? I've been considering > >>>>> adding > >>>>>>>>>>>>> something like the Jackson TypeReference (or similar classes in > >>>>> many > >>>>>>>>>>>> other > >>>>>>>>>>>>> projects). Would this be a good time to do it? > >>>>>>>>>>>>> > >>>>>>>>>>>>> Note that it's not necessary to actually require that the > >>>>> captured type > >>>>>>>>>>>> is > >>>>>>>>>>>>> Comparable (as this proposal currently does), it's just a way to > >>>>> make > >>>>>>>>>>>> sure > >>>>>>>>>>>>> there is some method that makes use of the generic type > >>>>> parameter, to > >>>>>>>>>>>> force > >>>>>>>>>>>>> the compiler to capture the type. > >>>>>>>>>>>>> > >>>>>>>>>>>>> Just to make sure I understand the motivation... You expressed a > >>>>> desire > >>>>>>>>>>>> to > >>>>>>>>>>>>> be able to serialize UUIDs, which I didn't follow, since there > >>>>>>>>>>>>> is > >>>>> a > >>>>>>>>>>>>> built-in UUID serde: > >>>>> org.apache.kafka.common.serialization.Serdes#UUID, > >>>>>>>>>>>> and > >>>>>>>>>>>>> also, a UUID isn't a List. Did you mean that you need to use > >>>>> *lists of* > >>>>>>>>>>>>> UUIDs? > >>>>>>>>>>>>> > >>>>>>>>>>>>> Thanks, > >>>>>>>>>>>>> -John > >>>>>>>>>>>>> > >>>>>>>>>>>>> On Mon, May 6, 2019 at 11:49 AM Development <d...@yeralin.net > >>>>> <mailto:d...@yeralin.net>> wrote: > >>>>>>>>>>>>> > >>>>>>>>>>>>>> Hello, > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> Starting a discussion for KIP-466 adding support for List > >>>>>>>>>>>>>> Serde. > >>>>> PR is > >>>>>>>>>>>>>> created under https://github.com/apache/kafka/pull/6592 < > >>>>> https://github.com/apache/kafka/pull/6592> < > >>>>>>>>>>>>>> https://github.com/apache/kafka/pull/6592 < > >>>>> https://github.com/apache/kafka/pull/6592>> > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> There are two topics I would like to discuss: > >>>>>>>>>>>>>> 1. Since type for List serve needs to be declared before hand, > >>>>>>>>>>>>>> I > >>>>> could > >>>>>>>>>>>> not > >>>>>>>>>>>>>> create a static method for List Serde under > >>>>>>>>>>>>>> org.apache.kafka.common.serialization.Serdes. I addressed it in > >>>>> the KIP: > >>>>>>>>>>>>>> P.S. Static method corresponding to ListSerde under > >>>>>>>>>>>>>> org.apache.kafka.common.serialization.Serdes (something like > >>>>> static > >>>>>>>>>>>> public > >>>>>>>>>>>>>> Serde<List<T>> List() {...} > >>>>>>>>>>>> inorg.apache.kafka.common.serialization.Serdes) > >>>>>>>>>>>>>> class cannot be added because type needs to be defined > >>>>> beforehand. > >>>>>>>>>>>> That's > >>>>>>>>>>>>>> why one needs to create List Serde in the following fashion: > >>>>>>>>>>>>>> new Serdes.ListSerde<String>(Serdes.String(), > >>>>>>>>>>>>>> Comparator.comparing(String::length)); > >>>>>>>>>>>>>> (can possibly be simplified by declaring import static > >>>>>>>>>>>>>> org.apache.kafka.common.serialization.Serdes.ListSerde) > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> 2. @miguno Michael G. Noll <https://github.com/miguno < > >>>>> https://github.com/miguno>> is questioning > >>>>>>>>>>>>>> whether I need to pass a comparator to ListDeserializer. This > >>>>> certainly > >>>>>>>>>>>> is > >>>>>>>>>>>>>> not required. Feel free to add your input: > >>>>>>>>>>>>>> https://github.com/apache/kafka/pull/6592#discussion_r281152067 > >>>>> <https://github.com/apache/kafka/pull/6592#discussion_r281152067> > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> Thank you! > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> Best, > >>>>>>>>>>>>>> Daniyar Yeralin > >>>>>>>>>>>>>> > >>>>>>>>>>>>>>> On May 6, 2019, at 11:59 AM, Daniyar Yeralin (JIRA) < > >>>>> j...@apache.org <mailto:j...@apache.org>> > >>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Daniyar Yeralin created KAFKA-8326: > >>>>>>>>>>>>>>> -------------------------------------- > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Summary: Add List<T> Serde > >>>>>>>>>>>>>>> Key: KAFKA-8326 > >>>>>>>>>>>>>>> URL: > >>>>> https://issues.apache.org/jira/browse/KAFKA-8326 < > >>>>> https://issues.apache.org/jira/browse/KAFKA-8326> > >>>>>>>>>>>>>>> Project: Kafka > >>>>>>>>>>>>>>> Issue Type: Improvement > >>>>>>>>>>>>>>> Components: clients, streams > >>>>>>>>>>>>>>> Reporter: Daniyar Yeralin > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> I propose adding serializers and deserializers for the > >>>>> java.util.List > >>>>>>>>>>>>>> class. > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> I have many use cases where I want to set the key of a Kafka > >>>>> message to > >>>>>>>>>>>>>> be a UUID. Currently, I need to turn UUIDs into strings or byte > >>>>> arrays > >>>>>>>>>>>> and > >>>>>>>>>>>>>> use their associated Serdes, but it would be more convenient to > >>>>>>>>>>>> serialize > >>>>>>>>>>>>>> and deserialize UUIDs directly. > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> I believe there are many use cases where one would want to > >>>>>>>>>>>>>>> have > >>>>> a List > >>>>>>>>>>>>>> serde. Ex. [ > >>>>>>>>>>>>>> > >>>>>>>>>>>> > >>>>> https://stackoverflow.com/questions/41427174/aggregate-java-objects-in-a-list-with-kafka-streams-dsl-windows > >>>>> < > >>>>> https://stackoverflow.com/questions/41427174/aggregate-java-objects-in-a-list-with-kafka-streams-dsl-windows > >>>>>> > >>>>>>>>>>>> ], > >>>>>>>>>>>>>> [ > >>>>>>>>>>>>>> > >>>>>>>>>>>> > >>>>> https://stackoverflow.com/questions/46365884/issue-with-arraylist-serde-in-kafka-streams-api > >>>>> < > >>>>> https://stackoverflow.com/questions/46365884/issue-with-arraylist-serde-in-kafka-streams-api > >>>>>> > >>>>>>>>>>>>>> ] > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> KIP Link: [ > >>>>>>>>>>>>>> > >>>>>>>>>>>> > >>>>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-466%3A+Add+support+for+List%3CT%3E+serialization+and+deserialization > >>>>> < > >>>>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-466%3A+Add+support+for+List%3CT%3E+serialization+and+deserialization > >>>>>> > >>>>>>>>>>>>>> ] > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> -- > >>>>>>>>>>>>>>> This message was sent by Atlassian JIRA > >>>>>>>>>>>>>>> (v7.6.3#76005) > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>> > >>>>>>>> > >>>>>>> > >>>>> > >>>>> > >>> > >> >