[ 
https://issues.apache.org/jira/browse/KAFKA-7653?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16699695#comment-16699695
 ] 

Matthias J. Sax commented on KAFKA-7653:
----------------------------------------

Not sure, what the use case for this would be? Why would you want to use two 
different Serdes for key and value if it's the same data type?

Also, even with different key/value types (for same actually data type) to 
distinguish the serdes, it would still not allow you to to
{code:java}
implicit val keySerde1: Serde[String] = new SerdeImplA[String](... )
implicit val keySerde2: Serde[String] = new SerdeImplB[String](...)

builder.stream[String, Integer]("my-topic") // use SerdeA here
builder.stream[String, Integer]("my-topic") // use SerdeB here{code}
If there are two Serdes for the same data type, it's ambiguous, and user need 
to pass in Serdes explicitly. This seems to ok. Why do you think, that the 
key/value case is different to the example from above? To me, it seems to be 
the same and thus, I don't see a reason why we would need to distinguish 
between key and value in your example?

Thoughts?

> Streams-Scala: Add type level differentiation for Key and Value serdes.
> -----------------------------------------------------------------------
>
>                 Key: KAFKA-7653
>                 URL: https://issues.apache.org/jira/browse/KAFKA-7653
>             Project: Kafka
>          Issue Type: Improvement
>          Components: streams
>            Reporter: Mark Tranter
>            Assignee: Mark Tranter
>            Priority: Minor
>              Labels: scala
>
> Implicit resolution/conversion of Serdes/Consumed etc is a big improvement 
> for the Scala Streams API. However in cases where a user needs to 
> differentiate between Key and Value serializer functionality (i.e. using the 
> Schema Registry), implicit resolution doesn't help and could cause issues. 
> e.g.
> {code:java}
> case class MouseClickEvent(pageId: Long, userId: String)
> builder
>   // Long serde taken from implicit scope configured with
>   // `isKey` = true
>   .stream[Long, MouseClickEvent]("mouse-clicks")
>   .selectKey((_,v) => v.userId)
>   .groupByKey
>   .aggregate(() => 0L, (_: String, mce: MouseClickEvent, count: Long) => 
> count + 1)
>   .toStream
>   // Same Long serde taken from implicit scope configured with
>   // `isKey` = true, even thought the `Long` value in this case
>   // will be the Value
>   .to("mouse-clicks-by-user")
> {code}
> It would be ideal if Key and Value Serde/SerdeWrapper types/type classes 
> could be introduced to overcome this limitation.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to