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)
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>
> >>>
> >>
>
>

Reply via email to