Hi, Matthias,

It's not directly mentioned in the KIP, but I added all missing Java
serdes. I mentioned it in the pull request description:
https://github.com/apache/kafka/pull/8955

And also, this KIP originally was based on a pull request where I added
missing java serdes :) https://github.com/apache/kafka/pull/8049

-Yuriy

On Fri, Jul 10, 2020 at 3:36 AM Matthias J. Sax <mj...@apache.org> wrote:

> Yuriy,
>
> thanks for the KIP update. I have one follow up thought: I checked what
> default Serdes we offer in the Java class
>
>  `org.apache.kafka.common.serialization.Serdes`
>
> and I think it would be good if we could close the gap between the Java
> and Scala code and add the missing Java Serdes in Scala, too.
>
> It seems we are missing `Short` (Java and Scala), `Void`, `UUID`, and
> `ByterBuffer`.
>
> Can we add those in addition?
>
>
> -Matthias
>
> On 7/8/20 6:45 AM, John Roesler wrote:
> > Hi Yuriy,
> >
> > Once it seems like there’s general agreement in the discussion, you can
> start a voting thread. You can find examples on the mailing list of what to
> say in the first message. It’s basically just a message with the subject
> line changed from “[DISCUSS]...” to “[VOTE]...”, and then stating that
> you’d like to start the vote. It’s nice to link to the kip document again.
> >
> > The rules for the vote are at the top of the “Kafka Improvement Process”
> page, but you basically need 3 binding +1 votes and no binding -1 votes.
> You also need to wait at least three days from when you start the vote
> before you can declare it accepted. There’s no upper time limit.
> >
> > If you’re unsure of who has a binding vote, it’s just the people listed
> on the Apache Kafka Committers page.
> >
> > If people are slow to vote, feel free to keep bumping the thread, just
> like with the discussion.
> >
> > Thanks again for getting involved!
> > -John
> >
> > On Tue, Jul 7, 2020, at 01:51, Yuriy Badalyantc wrote:
> >> So, what's next? It's my first KIP and I'm not familiar with all
> processes.
> >>
> >> -Yuriy
> >>
> >> On Mon, Jul 6, 2020 at 1:32 AM John Roesler <vvcep...@apache.org>
> wrote:
> >>
> >>> Hi Yuriy,
> >>>
> >>> Thanks for the update! It looks good to me.
> >>>
> >>> Thanks,
> >>> John
> >>>
> >>> On Sun, Jul 5, 2020, at 03:27, Yuriy Badalyantc wrote:
> >>>> Hi John.
> >>>>
> >>>> I updated the KIP. An old proposed implementation is now in the
> rejected
> >>>> alternatives.
> >>>>
> >>>> - Yuriy
> >>>>
> >>>> On Sun, Jul 5, 2020 at 12:03 AM John Roesler <vvcep...@apache.org>
> >>> wrote:
> >>>>
> >>>>> Hi Yuriy,
> >>>>>
> >>>>> I agree, we can keep them separate. I just wanted to make you aware
> of
> >>> it.
> >>>>>
> >>>>> Thanks for the PR, it looks the way I expected.
> >>>>>
> >>>>> I just read over the KIP document again. I think it needs to be
> >>> updated to
> >>>>> the current proposal, and then we’ll be able to start the vote.
> >>>>>
> >>>>> Thanks,
> >>>>> John
> >>>>>
> >>>>> On Tue, Jun 30, 2020, at 04:58, Yuriy Badalyantc wrote:
> >>>>>> Hi everybody!
> >>>>>>
> >>>>>> Looks like a discussion about KIP-513 could take a while. I think we
> >>>>> should
> >>>>>> move forward with KIP-616 without waiting for KIP-513.
> >>>>>>
> >>>>>> I created a new pull request for KIP-616:
> >>>>>> https://github.com/apache/kafka/pull/8955. It contains a new
> >>>>>> `org.apache.kafka.streams.scala.serialization.Serdes` object without
> >>> name
> >>>>>> clash. An old one was marked as deprecated. This change is backward
> >>>>>> compatible and it could be merged in any further release.
> >>>>>>
> >>>>>> On Wed, Jun 3, 2020 at 12:41 PM Yuriy Badalyantc <lmne...@gmail.com
> >
> >>>>> wrote:
> >>>>>>
> >>>>>>> Hi, John
> >>>>>>>
> >>>>>>> Thanks for pointing that out. I expressed my thoughts about
> >>> KIP-513 and
> >>>>>>> its connection to KIP-616 in the KIP-513 mail list.
> >>>>>>>
> >>>>>>> - Yuriy
> >>>>>>>
> >>>>>>> On Sun, May 31, 2020 at 1:26 AM John Roesler <vvcep...@apache.org>
> >>>>> wrote:
> >>>>>>>
> >>>>>>>> Hi Yuriy,
> >>>>>>>>
> >>>>>>>> I was just looking back at KIP-513, and I’m wondering if there’s
> >>> any
> >>>>>>>> overlap we should consider here, or if they are just orthogonal.
> >>>>>>>>
> >>>>>>>> Thanks,
> >>>>>>>> -John
> >>>>>>>>
> >>>>>>>> On Thu, May 28, 2020, at 21:36, Yuriy Badalyantc wrote:
> >>>>>>>>> At the current moment, I think John's plan is better than the
> >>>>> original
> >>>>>>>> plan
> >>>>>>>>> described in the KIP. I think we should create a new `Serdes` in
> >>>>> another
> >>>>>>>>> package. The old one will be deprecated.
> >>>>>>>>>
> >>>>>>>>> - Yuriy
> >>>>>>>>>
> >>>>>>>>> On Fri, May 29, 2020 at 8:58 AM John Roesler <
> >>> vvcep...@apache.org>
> >>>>>>>> wrote:
> >>>>>>>>>
> >>>>>>>>>> Thanks, Matthias,
> >>>>>>>>>>
> >>>>>>>>>> If we go with the approach Yuriy and I agreed on, to
> >>> deprecate and
> >>>>>>>> replace
> >>>>>>>>>> the whole class and not just a few of the methods, then the
> >>>>> timeline
> >>>>>>>> is
> >>>>>>>>>> less of a concern. Under that plan, Yuriy can just write the
> >>> new
> >>>>> class
> >>>>>>>>>> exactly the way he wants and people can cleanly swap over to
> >>> the
> >>>>> new
> >>>>>>>>>> pattern when they are ready.
> >>>>>>>>>>
> >>>>>>>>>> The timeline was more significant if we were just going to
> >>>>> deprecate
> >>>>>>>> some
> >>>>>>>>>> methods and add new methods to the existing class. That plan
> >>>>> requires
> >>>>>>>> two
> >>>>>>>>>> implementation phases, where we first deprecate the existing
> >>>>> methods
> >>>>>>>> and
> >>>>>>>>>> later swap the implicits at the same time we remove the
> >>> deprecated
> >>>>>>>> members.
> >>>>>>>>>> Aside from the complexity of that approach, it’s not a
> >>> breakage
> >>>>> free
> >>>>>>>> path,
> >>>>>>>>>> as some users would be forced to continue using the deprecated
> >>>>> members
> >>>>>>>>>> until a future release drops them, breaking their source
> >>> code, and
> >>>>>>>> only
> >>>>>>>>>> then can they update their code.
> >>>>>>>>>>
> >>>>>>>>>> That wouldn’t be the end of the world, and we’ve had to do the
> >>>>> same
> >>>>>>>> thing
> >>>>>>>>>> in the past with the implicit conversations, but this is a
> >>> much
> >>>>> wider
> >>>>>>>>>> scope, since it’s all the serdes. I’m happy with the new plan,
> >>>>> since
> >>>>>>>> it’s
> >>>>>>>>>> not only one step, but also it provides everyone a
> >>> breakage-free
> >>>>> path.
> >>>>>>>>>>
> >>>>>>>>>> We can still consider dropping the deprecated class in 3.0; I
> >>> just
> >>>>>>>> wanted
> >>>>>>>>>> to clarify how the timeline issue has changed.
> >>>>>>>>>>
> >>>>>>>>>> Thanks,
> >>>>>>>>>> John
> >>>>>>>>>>
> >>>>>>>>>> On Thu, May 28, 2020, at 20:34, Matthias J. Sax wrote:
> >>>>>>>>>>> I am not a Scale person, so I cannot really contribute much.
> >>>>>>>> However for
> >>>>>>>>>>> the deprecation period, if we get the change into 2.7, it
> >>> might
> >>>>> be
> >>>>>>>> ok to
> >>>>>>>>>>> remove the deprecated classed in 3.0.
> >>>>>>>>>>>
> >>>>>>>>>>> It would only be one minor release in between what is a
> >>> little
> >>>>> bit
> >>>>>>>> short
> >>>>>>>>>>> (we usually prefer at least two minor released, better
> >>> three),
> >>>>> but
> >>>>>>>> if we
> >>>>>>>>>>> have a good reason for it, it might be ok.
> >>>>>>>>>>>
> >>>>>>>>>>> If we cannot remove it in 3.0, it seems there would be a
> >>> 4.0 in
> >>>>>>>> about a
> >>>>>>>>>>> year(?) when ZK removal is finished and we can remove the
> >>>>> deprecated
> >>>>>>>>>>> code than.
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> -Matthias
> >>>>>>>>>>>
> >>>>>>>>>>> On 5/28/20 7:39 AM, John Roesler wrote:
> >>>>>>>>>>>> Hi Yuriy,
> >>>>>>>>>>>>
> >>>>>>>>>>>> Sounds good to me! I had a feeling we were bringing
> >>> different
> >>>>>>>> context
> >>>>>>>>>>>> to the discussion; thanks for sticking with the
> >>> conversation
> >>>>>>>> until we
> >>>>>>>>>> got
> >>>>>>>>>>>> it hashed out.
> >>>>>>>>>>>>
> >>>>>>>>>>>> I'm glad you prefer Serde*s*, since having multiple
> >>> different
> >>>>>>>> classes
> >>>>>>>>>> with
> >>>>>>>>>>>> the same name leads to all kinds of trouble. "Serdes"
> >>> seems
> >>>>>>>> relatively
> >>>>>>>>>>>> safe because people in the Scala lib won't be using the
> >>> Java
> >>>>>>>> Serdes
> >>>>>>>>>> class,
> >>>>>>>>>>>> and they won't be using the deprecated and non-deprecated
> >>> one
> >>>>> at
> >>>>>>>> the
> >>>>>>>>>>>> same time.
> >>>>>>>>>>>>
> >>>>>>>>>>>> Thank again,
> >>>>>>>>>>>> -John
> >>>>>>>>>>>>
> >>>>>>>>>>>> On Thu, May 28, 2020, at 02:21, Yuriy Badalyantc wrote:
> >>>>>>>>>>>>> Ok, I understood you, John. I wasn't sure about kafka
> >>>>> deprecation
> >>>>>>>>>> policy
> >>>>>>>>>>>>> and thought that the full cycle could be done with 2.7
> >>>>> version.
> >>>>>>>>>> Waiting for
> >>>>>>>>>>>>> 3.0 is too much, I agree with it.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> So, I think creating one more `Serdes` in another
> >>> package is
> >>>>> our
> >>>>>>>> way.
> >>>>>>>>>> I
> >>>>>>>>>>>>> suggest one of the following:
> >>>>>>>>>>>>> 1. `org.apache.kafka.streams.scala.serde.Serdes`
> >>>>>>>>>>>>> 2. `org.apache.kafka.streams.scala.serialization.Serdes`
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> About `Serde` vs `Serdes`. I'm strongly against `Serde`
> >>>>> because
> >>>>>>>> it
> >>>>>>>>>> would
> >>>>>>>>>>>>> lead to a new name clash with the
> >>>>>>>>>>>>> `org.apache.kafka.common.serialization.Serde`.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> - Yuriy
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> On Thu, May 28, 2020 at 11:12 AM John Roesler <
> >>>>>>>> vvcep...@apache.org>
> >>>>>>>>>> wrote:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>> Hi Yuriy,
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Thanks for the clarification.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> I guess my concern is twofold:
> >>>>>>>>>>>>>> 1. We typically leave deprecated methods in place for at
> >>>>> least a
> >>>>>>>>>> major
> >>>>>>>>>>>>>> release cycle before removing them, so it would seem
> >>> abrupt
> >>>>> to
> >>>>>>>> have a
> >>>>>>>>>>>>>> deprecation period of only one minor release. If we
> >>> follow
> >>>>> the
> >>>>>>>> same
> >>>>>>>>>> pattern
> >>>>>>>>>>>>>> here, it would take over a year to finish this KIP.
> >>>>>>>>>>>>>> 2. It doesn’t seem like there is a nonbreaking
> >>> deprecation
> >>>>> path
> >>>>>>>> at
> >>>>>>>>>> all if
> >>>>>>>>>>>>>> people enumerate their imports (if they don’t use a
> >>>>> wildcard).
> >>>>>>>> In
> >>>>>>>>>> that
> >>>>>>>>>>>>>> case, they would have no path to implicitly use the
> >>> newly
> >>>>> named
> >>>>>>>>>> serdes, and
> >>>>>>>>>>>>>> therefore they would have no way to avoid continuing to
> >>> use
> >>>>> the
> >>>>>>>>>> deprecated
> >>>>>>>>>>>>>> ones.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Since you mentioned that your reason is mainly the
> >>>>> preference
> >>>>>>>> for
> >>>>>>>>>> the name
> >>>>>>>>>>>>>> “Serde” or “Serdes”, can we explore just using one of
> >>> those?
> >>>>>>>> Would
> >>>>>>>>>> it cause
> >>>>>>>>>>>>>> some kind of conflict to use
> >>>>>>>> org.apache.kafka.streams.scala.Serde or
> >>>>>>>>>> to use
> >>>>>>>>>>>>>> Serdes in a different package, like
> >>>>>>>>>>>>>> org.apache.kafka.streams.scala.implicit.Serdes?
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> I empathize with this desire. I faced the same dilemma
> >>> when
> >>>>> I
> >>>>>>>> wanted
> >>>>>>>>>> to
> >>>>>>>>>>>>>> replace Processor but keep the class name in KIP-478. I
> >>>>> wound up
> >>>>>>>>>> creating a
> >>>>>>>>>>>>>> new package for the new Processor.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Thanks,
> >>>>>>>>>>>>>> John
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> On Wed, May 27, 2020, at 22:20, Yuriy Badalyantc wrote:
> >>>>>>>>>>>>>>> Hi John,
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> I'm stick with the
> >>> `org.apache.kafka.streams.scala.Serdes`
> >>>>>>>> because
> >>>>>>>>>> it's
> >>>>>>>>>>>>>>> sort of conventional in the scala community. If you
> >>> have a
> >>>>>>>> typeclass
> >>>>>>>>>>>>>> `Foo`,
> >>>>>>>>>>>>>>> you probably will search `Foo` related stuff in the
> >>> `Foo`
> >>>>> or
> >>>>>>>> maybe
> >>>>>>>>>> `Foos`
> >>>>>>>>>>>>>>> (plural). All other places are far less discoverable
> >>> for
> >>>>> the
> >>>>>>>>>> developers.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> I agree that the migration path is a bit complex for
> >>> such
> >>>>>>>> change.
> >>>>>>>>>> But I
> >>>>>>>>>>>>>>> think it's more important to provide good developer
> >>>>> experience
> >>>>>>>> than
> >>>>>>>>>> to
> >>>>>>>>>>>>>>> simplify migration. Also, I think it's debatable which
> >>>>>>>> migration
> >>>>>>>>>> path is
> >>>>>>>>>>>>>>> better for library users. If we would create, for
> >>> example,
> >>>>>>>>>> `Serdes2`,
> >>>>>>>>>>>>>>> library users will have to modify their code if they
> >>> used
> >>>>> any
> >>>>>>>> part
> >>>>>>>>>> of the
> >>>>>>>>>>>>>>> old `Serde`. With my approach, most of the old code
> >>> will
> >>>>> still
> >>>>>>>> work
> >>>>>>>>>>>>>> without
> >>>>>>>>>>>>>>> changes. Only explicit usage of implicits will need to
> >>> be
> >>>>> fixed
> >>>>>>>>>> (because
> >>>>>>>>>>>>>>> names will be changed, and old names will be
> >>> deprecated).
> >>>>>>>> Wildcard
> >>>>>>>>>>>>>> imports
> >>>>>>>>>>>>>>> will work without changes and will not lead to a name
> >>>>> clash.
> >>>>>>>>>> Moreover,
> >>>>>>>>>>>>>> many
> >>>>>>>>>>>>>>> users may not notice name clash problems. And with my
> >>>>> migration
> >>>>>>>>>> path,
> >>>>>>>>>>>>>> they
> >>>>>>>>>>>>>>> will not notice any changes at all.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> - Yuriy
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> On Thu, May 28, 2020 at 7:48 AM John Roesler <
> >>>>>>>> vvcep...@apache.org>
> >>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Hi Yuriy,
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Thanks for the reply. I guess I've been out of the
> >>> Scala
> >>>>> game
> >>>>>>>> for a
> >>>>>>>>>>>>>>>> while; all this summoner business is totally new to
> >>> me.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> I think I followed the rationale you provided, but I
> >>> still
> >>>>>>>> don't
> >>>>>>>>>> see
> >>>>>>>>>>>>>>>> why you can't implement your whole plan in a new
> >>> class.
> >>>>> What
> >>>>>>>>>>>>>>>> is special about the existing Serdes class?
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Thanks,
> >>>>>>>>>>>>>>>> -John
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> On Tue, May 19, 2020, at 01:18, Yuriy Badalyantc
> >>> wrote:
> >>>>>>>>>>>>>>>>> Hi John,
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Your suggestion looks interesting. I think it's
> >>>>> technically
> >>>>>>>>>> doable.
> >>>>>>>>>>>>>> But
> >>>>>>>>>>>>>>>> I'm
> >>>>>>>>>>>>>>>>> not sure that this is the better solution. I will
> >>> try to
> >>>>>>>> explain.
> >>>>>>>>>>>>>> From
> >>>>>>>>>>>>>>>> the
> >>>>>>>>>>>>>>>>> scala developers' perspective, `Serde` looks really
> >>> like
> >>>>> a
> >>>>>>>>>> typeclass.
> >>>>>>>>>>>>>>>>> Typical typeclass in pure scala will look like this:
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> ```
> >>>>>>>>>>>>>>>>> trait Serde[A] {
> >>>>>>>>>>>>>>>>>   def serialize(data: A): Array[Byte]
> >>>>>>>>>>>>>>>>>   def deserialize(data: Array[Byte]): A
> >>>>>>>>>>>>>>>>> }
> >>>>>>>>>>>>>>>>> object Serde extends DefaultSerdes {
> >>>>>>>>>>>>>>>>>   // "summoner" function. With this I can write
> >>>>> `Serde[A]`
> >>>>>>>> and
> >>>>>>>>>> this
> >>>>>>>>>>>>>> serde
> >>>>>>>>>>>>>>>>> will be implicitly summonned.
> >>>>>>>>>>>>>>>>>   def apply[A](implicit ev: Serde[A]): Serde[A] = ev
> >>>>>>>>>>>>>>>>> }
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> trait DefaultSerdes {
> >>>>>>>>>>>>>>>>>   // default instances here
> >>>>>>>>>>>>>>>>> }
> >>>>>>>>>>>>>>>>> ```
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Usage example (note, that there are no wildcards
> >>> imports
> >>>>>>>> here):
> >>>>>>>>>>>>>>>>> ```
> >>>>>>>>>>>>>>>>> object Main extends App {
> >>>>>>>>>>>>>>>>>   import Serde // not wildcard import
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>   // explicit summonning:
> >>>>>>>>>>>>>>>>>   val stringSerde = Serde[String] // using summoner
> >>>>>>>>>>>>>>>>>   stringSerde.serialize(???)
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>   // implicit summonning
> >>>>>>>>>>>>>>>>>   def serialize[A: Serde](a: A) = {
> >>>>>>>>>>>>>>>>>     Serde[A].serialize(a) // summoner again
> >>>>>>>>>>>>>>>>>   }
> >>>>>>>>>>>>>>>>>   serialize("foo")
> >>>>>>>>>>>>>>>>> }
> >>>>>>>>>>>>>>>>> ```
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Examples are pretty silly, but I just want to show
> >>> common
> >>>>>>>>>> patterns of
> >>>>>>>>>>>>>>>>> working with typeclasses in scala. All default
> >>> instances
> >>>>> in
> >>>>>>>> the
> >>>>>>>>>> usage
> >>>>>>>>>>>>>>>>> examples are found using implicits searching
> >>> mechanism.
> >>>>> Scala
> >>>>>>>>>>>>>> compiler
> >>>>>>>>>>>>>>>>> searches implicits in a lot of places. Including
> >>>>> companion
> >>>>>>>>>> objects.
> >>>>>>>>>>>>>> In my
> >>>>>>>>>>>>>>>>> examples compiler will found `Serde[String]`
> >>> instance in
> >>>>> the
> >>>>>>>>>>>>>> companion
> >>>>>>>>>>>>>>>>> object of `Serde` typeclass.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Also, I want to pay attention to the summoner
> >>> function.
> >>>>> It
> >>>>>>>> makes
> >>>>>>>>>>>>>> usage of
> >>>>>>>>>>>>>>>>> typeclasses very neat and clear.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> The example above was the example of the perfect
> >>> solution
> >>>>>>>> for the
> >>>>>>>>>>>>>> scala
> >>>>>>>>>>>>>>>>> developers. But this solution requires to create
> >>> separate
> >>>>>>>> `Serde`
> >>>>>>>>>>>>>>>>> typeclass, to make all this implicit searching stuff
> >>>>> works. I
> >>>>>>>>>> don't
> >>>>>>>>>>>>>> think
> >>>>>>>>>>>>>>>>> that it worth it, because a lot of code should be
> >>>>>>>> reimplemented
> >>>>>>>>>> using
> >>>>>>>>>>>>>>>> this
> >>>>>>>>>>>>>>>>> new typeclass. But the main point of my example is to
> >>>>> show
> >>>>>>>> the
> >>>>>>>>>>>>>> perfect
> >>>>>>>>>>>>>>>>> solution. And I think we should strive to provide
> >>>>> developer
> >>>>>>>>>>>>>> experience
> >>>>>>>>>>>>>>>>> close to this.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> It's a bit out of the scope of my KIP, but I have a
> >>> plan
> >>>>> to
> >>>>>>>> make
> >>>>>>>>>>>>>>>>> `org.apache.kafka.streams.scala.Serdes` more closer
> >>> to
> >>>>> the
> >>>>>>>>>> solution
> >>>>>>>>>>>>>>>> above.
> >>>>>>>>>>>>>>>>> It could be done in 2 steps:
> >>>>>>>>>>>>>>>>> 1. Fix implicit names.
> >>>>>>>>>>>>>>>>> 2. Add summoner function.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> And with this scala developers will be able to write
> >>>>> almost
> >>>>>>>> the
> >>>>>>>>>> same
> >>>>>>>>>>>>>> code
> >>>>>>>>>>>>>>>>> as in the example above:
> >>>>>>>>>>>>>>>>> ```
> >>>>>>>>>>>>>>>>> object Main extends App {
> >>>>>>>>>>>>>>>>>   import org.apache.kafka.streams.scala.Serdes // not
> >>>>>>>> wildcard
> >>>>>>>>>> import
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>   val stringSerde = Serdes[String]
> >>>>>>>>>>>>>>>>>   stringSerde.serialize(???)
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>   def serialize[A: Serde](a: A) = {
> >>>>>>>>>>>>>>>>>     Serdes[A].serialize(a)
> >>>>>>>>>>>>>>>>>   }
> >>>>>>>>>>>>>>>>>   serialize("foo")
> >>>>>>>>>>>>>>>>> }
> >>>>>>>>>>>>>>>>> ```
> >>>>>>>>>>>>>>>>> Of course, wildcard import will still work.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Other names will make this new entity (containing
> >>> default
> >>>>>>>>>> implicits)
> >>>>>>>>>>>>>> less
> >>>>>>>>>>>>>>>>> discoverable. And summoner usage, in this case, will
> >>> look
> >>>>>>>> weird:
> >>>>>>>>>>>>>>>>> ```
> >>>>>>>>>>>>>>>>> object Main extends App {
> >>>>>>>>>>>>>>>>>   import
> >>> org.apache.kafka.streams.scala.DefaultSerdes //
> >>>>> not
> >>>>>>>>>> wildcard
> >>>>>>>>>>>>>>>> import
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>   val stringSerde = DefaultSerdes[String]
> >>>>>>>>>>>>>>>>>   stringSerde.serialize(???)
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>   def serialize[A: Serde](a: A) = {
> >>>>>>>>>>>>>>>>>     DefaultSerdes[A].serialize(a)
> >>>>>>>>>>>>>>>>>   }
> >>>>>>>>>>>>>>>>>   serialize("foo")
> >>>>>>>>>>>>>>>>> }
> >>>>>>>>>>>>>>>>> ```
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> So, I think it's more important to provide a solid
> >>> and
> >>>>>>>> familiar
> >>>>>>>>>>>>>> developer
> >>>>>>>>>>>>>>>>> experience for the scala developer. And renaming (or
> >>>>>>>> creating a
> >>>>>>>>>> new
> >>>>>>>>>>>>>>>>> version) of `Serdes` will not help here.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> -Yuriy
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> On Tue, May 19, 2020 at 11:56 AM John Roesler <
> >>>>>>>>>> vvcep...@apache.org>
> >>>>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> Hi Yuriy,
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> Thanks so much for the KIP! I didn’t anticipate the
> >>>>> problem
> >>>>>>>> you
> >>>>>>>>>>>>>> laid
> >>>>>>>>>>>>>>>> out
> >>>>>>>>>>>>>>>>>> in the KIP, but I find it very plausible.
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> Thanks for pushing back on the “convention” and
> >>> raising
> >>>>> the
> >>>>>>>>>> issue,
> >>>>>>>>>>>>>> and
> >>>>>>>>>>>>>>>>>> also volunteering a solution!
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> I’m wondering if we can “fix” it in one shot by just
> >>>>>>>> deprecating
> >>>>>>>>>>>>>> the
> >>>>>>>>>>>>>>>> whole
> >>>>>>>>>>>>>>>>>> Serdes class and replacing it with a new one
> >>> containing
> >>>>> the
> >>>>>>>> defs
> >>>>>>>>>>>>>> you
> >>>>>>>>>>>>>>>>>> proposed. Then, people could just switch their
> >>> import to
> >>>>>>>> the new
> >>>>>>>>>>>>>> one.
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> Of course the new class needs to have a different
> >>> name,
> >>>>>>>> which is
> >>>>>>>>>>>>>>>> always a
> >>>>>>>>>>>>>>>>>> challenge in situations like this, so I might just
> >>>>> throw out
> >>>>>>>>>>>>>>>> ImplicitSerdes
> >>>>>>>>>>>>>>>>>> as an option.
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> Do you think this would work?
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> Thanks again,
> >>>>>>>>>>>>>>>>>> John
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> On Mon, May 18, 2020, at 23:35, Yuriy Badalyantc
> >>> wrote:
> >>>>>>>>>>>>>>>>>>> Hi,
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> I would like to propose KIP-616 to fix naming
> >>> clash in
> >>>>> the
> >>>>>>>> kafka
> >>>>>>>>>>>>>>>>>>> streams scala API:
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>
> >>>>>
> >>>
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-616%3A+Rename+implicit+Serdes+instances+in+kafka-streams-scala
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> Looking forward to your feedback.
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> -Yuriy
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> Attachments:
> >>>>>>>>>>> * signature.asc
> >>>>>>>>>>
> >>>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>
> >>>>
> >>>
> >>
>
>

Reply via email to