As you say "hierarchy" I read this really as "class hierarchy". For this
case, I think that we need to do it differently.

I agree to this part:

  KeySerde extends Serde
  ValueSerde extends Serde

However,

  KeySerializer extends KeySerde (etc)

does not make sense IMHO, because a `KeySerializer` is no a special
KeySerde; it's only a serializer but it's not a deserializer.

In fact the hierarchy goes the other direction:

  Serde extends Serializerd, Deserializer


Atm, a Serde is just a "container" for serializers and desrialzier though.


-Matthias



On 6/2/20 10:40 PM, Yuriy Badalyantc wrote:
> Hi.
> 
> I'm the author of the KIP-616. I got acquainted with the KIP-513 and I
> think overall it's a good idea. But I think workaround only on the scala
> side is not enough. We could consider moving a bit further and change serde
> hierarchy on the java side to something like this:
> 
> KeySerializer-----↘
>                    KeySerde---↘
> KeyDeserializer---↗            ↓
>                                Serde
> ValueSerializer---↘            ↑
>                    ValueSerde-↗
> ValueDeserializer-↗
> 
> I understand that this is a bit too revolutionary, but I think this is the
> right direction.
> 
> Regarding KIP-616 and KIP-513 connection. It's hard to say at the current
> moment how should we implement these kips: together or separately. It looks
> like there is no consensus on the implementation details for these kips.
> 
> If we decided to create a new `KeySerde` and `ValueSerde` on the scala side
> (current plan without my proposal above), we could use their companions for
> default instances. In this case, it looks like we don't need to do KIP-616.
> But what about backward compatibility? What should we do with
> `org.apache.kafka.streams.scala.Serdes`? Deprecate it?
> 
> - Yuriy
> 
> On Sun, May 31, 2020 at 1:24 AM John Roesler <vvcep...@apache.org> wrote:
> 
>> Hi Mykhailo,
>>
>> Wow, I really dropped the ball here. I have just looked over your KIP
>> again, and now I see how you don’t need to change every dsl method, only
>> Consumed, Materialized, etc.
>>
>> I think this would be a good addition. Yuriy has just proposed KIP-616 to
>> fix some other problems with the implicit serdes. I’m wondering if these
>> two kips have any joint opportunities we should consider, or if it’s better
>> to continue to consider them separately.
>>
>> Thanks,
>> John
>>
>> On Wed, Jan 22, 2020, at 16:18, Михаил Ерёменко wrote:
>>> Hi, John!
>>>
>>> Sorry for the late reply. I am not really familiar with this mail list
>>> discussions, so I have not seen your mails.
>>>
>>> Regarding your question:
>>>>   I guess what
>>>   I'm struggling with is why you actually want to have different key and
>>>   serdes for the same type
>>>
>>> I think good example will be (and it is actually what we do in ours
>>> project) using confluent schema registry in conjunction with kafka
>>> streams. Some models can be used as keys as well as values. When we
>>> define schema registry compatible serde, we have to specify is it for
>>> key or not. We can of course create two serdes for the same model, but
>>> in this case implicit semantic will not work because scala doesn’t know
>>> which implicit to pick. And things become even more complicated in case
>>> if you will try to derive your serdes (we derive serdes in ours
>>> project).
>>>
>>> One more thing:
>>>> every method in the streams-scala DSL.
>>>
>>> So far we've just changed
>>> org.apache.kafka.streams.scala.ImplicitConversions and
>>> org.apache.kafka.streams.scala.kstream.Materialized and it works for
>>> us. Also we did introduce default serdes for primitive types.
>>>
>>> Regards,
>>> Mykhailo
>>
> 

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to