Absolutely agree. Already pushed another commit to remove comparator argument: 
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> 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> 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> 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> 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>
>>>> 
>>>> 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> 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
>>>> 
>>>> Thank you!
>>>> 
>>>> Best,
>>>> Daniyar Yeralin
>>>> 
>>>>> On May 6, 2019, at 11:59 AM, Daniyar Yeralin (JIRA) <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
>>>>>           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/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
>>>> ]
>>>>> 
>>>>> 
>>>>> 
>>>>> --
>>>>> This message was sent by Atlassian JIRA
>>>>> (v7.6.3#76005)
>>>> 
>>>> 
>> 
>> 

Reply via email to