Based on this discussion I have a question .. For the actual implementation we need to have a PR on https://github.com/apache/kafka and the new library will be in the package structure org.apache.kafka.streams.scala. My question is, is this PR part of the KIP ? Or we work on the PR once the KIP is accepted ..
regards. On Mon, Mar 19, 2018 at 11:28 PM, Debasish Ghosh < debasish.gh...@lightbend.com> wrote: > Thanks Guozhang for the comments .. we will start working on them .. > > regards. > > On Mon, Mar 19, 2018 at 11:02 PM, Guozhang Wang <wangg...@gmail.com> > wrote: > >> And one more comment about the type safety: >> >> 7. I'm in favor of the approach of enforcing type safety at compile time, >> since with Scala's strong typing system I think it makes more sense to get >> rid of config-based serde specifications that can cause runtime error in >> the Scala wrapper. >> >> >> Guozhang >> >> >> On Mon, Mar 19, 2018 at 10:28 AM, Guozhang Wang <wangg...@gmail.com> >> wrote: >> >> > Hello Debasish, >> > >> > Thanks for the KIP. Here are some comments: >> > >> > 1. About the naming: I'd also vote for option 2 and enforce users to >> > rename when import since this scenario seems rare to me. >> > >> > 2. About the dependency: since this KIP can only be merged as early as >> > 1.2, it means that for users who wants to use this artifact, say for >> > version 1.2, she would need to bring in "kafka-streams" version 1.2. In >> > addition, if we change the Java API in the future versions we'd also >> need >> > to update the Scala wrapper at the same version as well, so in other >> words >> > "kafka-streams-scala" version X have to be with "kafka-streams" version >> X >> > anyways. So I'd suggest we remove the version number in >> "kafka-streams-scala >> > only depends on the Scala standard library and Kafka Streams" as it may >> > be confusing to readers. >> > >> > 3. For the KIP discussion, it need be based on the proposed state of >> this >> > project in AK. More specifically, for the groupId in maven / gradle, it >> > need to be "org.apache.kafka"; for the version, it need to be Kafka >> release >> > versions, e.g. 1.2.0. >> > >> > 4. In "New or Changed Public Interfaces" section, it does not mention >> the >> > serde classes like "DefaultSerdes", but I think they should also be >> > considered public APIs as users would most likely import these in her >> > implementation. >> > >> > 5. Could you also list the changes you'd propose to made to build.gradle >> > in kafka for adding this artifact? More details will help readers to >> better >> > understand your proposal. >> > >> > 6. I think it'd will be good to have a WordCount example code as part of >> > this KIP, to illustrate how to code in this Scala wrapper, e.g. in >> > o.a.k.scala.examples. But for this class we probably do not need to >> have a >> > separate artifact for it as we did in kafka-streams-examples. >> > >> > >> > Guozhang >> > >> > >> > On Mon, Mar 19, 2018 at 9:16 AM, Ted Yu <yuzhih...@gmail.com> wrote: >> > >> >> I agree with Sean on name unification. >> >> >> >> +1 to option 2. >> >> >> >> On Mon, Mar 19, 2018 at 7:23 AM, Sean Glover < >> sean.glo...@lightbend.com> >> >> wrote: >> >> >> >> > Type names: I vote for option 2. The user must explicitly add a >> >> dependency >> >> > to this library and the wrapper types are in a different package. It >> >> seems >> >> > reasonable to expect them to do an import rename if there's a need to >> >> drop >> >> > down to the Java API. >> >> > >> >> > Test Utils: The test utils in kafka-streams-scala are nice and lean, >> but >> >> > I'm not sure if it provides much more value than other options that >> >> exist >> >> > in the community. There's an embedded Kafka/ZK project >> implementation >> >> for >> >> > ScalaTest that's popular and active: manub/scalatest-embedded-kakfa. >> >> It >> >> > implies you must also use ScalaTest, which I acknowledge isn't >> >> everyone's >> >> > first choice for Scala test framework, but it probably is one of, if >> not >> >> > the most, popular library. It includes a DSL for Kafka Streams >> too. If >> >> > this KIP is accepted then perhaps a PR to that project could be made >> to >> >> > support the new wrapper implementations. >> >> > >> >> > https://github.com/manub/scalatest-embedded-kafka# >> >> > scalatest-embedded-kafka-streams >> >> > >> >> > Sean >> >> > >> >> > On Sun, Mar 18, 2018 at 4:05 AM, Debasish Ghosh < >> >> > debasish.gh...@lightbend.com> wrote: >> >> > >> >> > > > >> >> > > > > Should this be 1.2 (maybe it's even better to not put any >> >> version at >> >> > > > all) >> >> > > >> >> > > >> >> > > Actually wanted to emphasize that the support is from 1.0.0 >> onwards .. >> >> > > Should we make that explicit ? Like .. >> >> > > >> >> > > kafka-streams-scala only depends on the Scala standard library and >> >> Kafka >> >> > > > Streams 1.0.0+. >> >> > > >> >> > > >> >> > > In 1.1 release, we add a new module `kafka-streams-test-utils` to >> >> > simplify >> >> > > > testing for Kafka Streams applications. Are those test utils >> >> suitable >> >> > for >> >> > > > Scala users or should we add Scala wrappers for those, too? >> >> > > >> >> > > >> >> > > I will check up and let you know .. >> >> > > >> >> > > Also I am not clear about the decision on renaming of Scala >> >> abstractions. >> >> > > Can we have a consensus on this ? Here's the summary .. >> >> > > >> >> > > *Option 1:* Keep names separate (KStream for Java class, KStreamS >> for >> >> > > Scala). No renaming of imports required. >> >> > > *Option 2:* Unify names (KStream for Java and Scala class names). >> No >> >> > > conflict since they will reside in different packages. But if we >> need >> >> to >> >> > > use both abstractions, renaming of imports are required. But again, >> >> this >> >> > > may not be a too frequent use case. >> >> > > >> >> > > Suggestions ? >> >> > > >> >> > > regards. >> >> > > >> >> > > On Sat, Mar 17, 2018 at 3:07 AM, Matthias J. Sax < >> >> matth...@confluent.io> >> >> > > wrote: >> >> > > >> >> > > > Thanks a lot for the KIP! Two questions: >> >> > > > >> >> > > > 1) the KIP states: >> >> > > > >> >> > > > > kafka-streams-scala only depends on the Scala standard library >> and >> >> > > Kafka >> >> > > > Streams 1.0.0. >> >> > > > >> >> > > > Should this be 1.2 (maybe it's even better to not put any >> version >> >> at >> >> > > all) >> >> > > > >> >> > > > >> >> > > > 2) In 1.1 release, we add a new module >> `kafka-streams-test-utils` to >> >> > > > simplify testing for Kafka Streams applications. Are those test >> >> utils >> >> > > > suitable for Scala users or should we add Scala wrappers for >> those, >> >> > too? >> >> > > > >> >> > > > >> >> > > > -Matthias >> >> > > > >> >> > > > >> >> > > > On 3/16/18 11:10 AM, Ted Yu wrote: >> >> > > > > Import renames seem to be fine. >> >> > > > > >> >> > > > > The class names with trailing 'S' look clean. >> >> > > > > >> >> > > > > Cheers >> >> > > > > >> >> > > > > On Fri, Mar 16, 2018 at 11:04 AM, Ismael Juma < >> ism...@juma.me.uk> >> >> > > wrote: >> >> > > > > >> >> > > > >> If this is rare (as it sounds), relying on import renames >> seems >> >> fine >> >> > > to >> >> > > > me. >> >> > > > >> Let's see what others think. >> >> > > > >> >> >> > > > >> Ismael >> >> > > > >> >> >> > > > >> On Fri, Mar 16, 2018 at 10:51 AM, Debasish Ghosh < >> >> > > > >> debasish.gh...@lightbend.com> wrote: >> >> > > > >> >> >> > > > >>> I am not sure if this is practical or not. But theoretically >> a >> >> user >> >> > > may >> >> > > > >>> want to extract the unsafe Java abstraction from the Scala >> ones >> >> and >> >> > > use >> >> > > > >>> Java APIs on them .. e.g. >> >> > > > >>> >> >> > > > >>> val userClicksStream: KStreamS[String, Long] = >> >> > > > >>> builder.stream(userClicksTopic) // Scala abstraction >> >> > > > >>> >> >> > > > >>> val jStream: KStream[String, Long] = userClicksStream.inner >> // >> >> > > > publishes >> >> > > > >>> the underlying Java abstraction >> >> > > > >>> >> >> > > > >>> //.. work with Java, may be pass to some function written in >> >> Java >> >> > > > >>> >> >> > > > >>> I do realize this is somewhat of a convoluted use case and >> may >> >> not >> >> > be >> >> > > > >>> practically useful .. >> >> > > > >>> >> >> > > > >>> Otherwise we can very well work on the suggested approach of >> >> > unifying >> >> > > > the >> >> > > > >>> names .. >> >> > > > >>> >> >> > > > >>> regards. >> >> > > > >>> >> >> > > > >>> >> >> > > > >>> >> >> > > > >>> On Fri, Mar 16, 2018 at 10:28 PM, Ismael Juma < >> >> ism...@juma.me.uk> >> >> > > > wrote: >> >> > > > >>> >> >> > > > >>>> What does "mixed mode application" mean? What are the cases >> >> where >> >> > a >> >> > > > >> user >> >> > > > >>>> would want to use both APIs? I think that would help >> understand >> >> > the >> >> > > > >>>> reasoning. >> >> > > > >>>> >> >> > > > >>>> Thanks, >> >> > > > >>>> Ismael >> >> > > > >>>> >> >> > > > >>>> On Fri, Mar 16, 2018 at 8:48 AM, Debasish Ghosh < >> >> > > > >>>> debasish.gh...@lightbend.com> wrote: >> >> > > > >>>> >> >> > > > >>>>> Hi Damian - >> >> > > > >>>>> >> >> > > > >>>>> We could. But in case the user wants to use both Scala and >> >> Java >> >> > > APIs >> >> > > > >>> (may >> >> > > > >>>>> be for some mixed mode application), won't that be >> confusing ? >> >> > She >> >> > > > >> will >> >> > > > >>>>> have to do something like .. >> >> > > > >>>>> >> >> > > > >>>>> import o.a.k.s.scala.{KStream => KStreamS} >> >> > > > >>>>> >> >> > > > >>>>> to rename Scala imports or the other way round for imported >> >> Java >> >> > > > >>> classes. >> >> > > > >>>>> >> >> > > > >>>>> regards. >> >> > > > >>>>> >> >> > > > >>>>> >> >> > > > >>>>> >> >> > > > >>>>> On Fri, Mar 16, 2018 at 9:07 PM, Damian Guy < >> >> > damian....@gmail.com> >> >> > > > >>>> wrote: >> >> > > > >>>>> >> >> > > > >>>>>> Hi Debasish, >> >> > > > >>>>>> >> >> > > > >>>>>> Thanks for the KIP - will be a great addition to streams. >> >> I've >> >> > > only >> >> > > > >>>> had a >> >> > > > >>>>>> quick scan, but seeing as the Scala classes are going to >> be >> >> in >> >> > > > >> their >> >> > > > >>>> own >> >> > > > >>>>>> package could we drop the S at the end of the class names? >> >> > > > >>>>>> >> >> > > > >>>>>> Thanks, >> >> > > > >>>>>> Damian >> >> > > > >>>>>> >> >> > > > >>>>>> >> >> > > > >>>>>> On Fri, 16 Mar 2018 at 15:25 Debasish Ghosh < >> >> > > > >>>>> debasish.gh...@lightbend.com> >> >> > > > >>>>>> wrote: >> >> > > > >>>>>> >> >> > > > >>>>>>> Hi - >> >> > > > >>>>>>> >> >> > > > >>>>>>> A new KIP, KIP-270 is up for discussion: >> >> > > > >>>>>>> >> >> > > > >>>>>>> https://cwiki.apache.org/confluence/display/KAFKA/KIP- >> >> > > > >>>>>> 270+-+A+Scala+Wrapper+Library+for+Kafka+Streams >> >> > > > >>>>>>> >> >> > > > >>>>>>> The relevant JIRA issue: https://issues.apache.org/ >> >> > > > >>>>>> jira/browse/KAFKA-6670 >> >> > > > >>>>>>> >> >> > > > >>>>>>> The library as proposed in the KIP has been implemented >> at >> >> > > > >>>>>>> https://github.com/lightbend/kafka-streams-scala and the >> >> > current >> >> > > > >>>>> release >> >> > > > >>>>>>> is >> >> > > > >>>>>>> 0.2.0 ( >> >> > > > >>>>>>> https://github.com/lightbend/k >> afka-streams-scala/releases/ >> >> > > > >>> tag/v0.2.0 >> >> > > > >>>> ). >> >> > > > >>>>>>> We at Lightbend has been using it since quite some time >> now. >> >> > > > >>>>>>> >> >> > > > >>>>>>> regards. >> >> > > > >>>>>>> >> >> > > > >>>>>>> -- >> >> > > > >>>>>>> Debasish Ghosh >> >> > > > >>>>>>> Principal Engineer >> >> > > > >>>>>>> >> >> > > > >>>>>>> Twitter: @debasishg >> >> > > > >>>>>>> Blog: http://debasishg.blogspot.com >> >> > > > >>>>>>> Code: https://github.com/debasishg >> >> > > > >>>>>>> >> >> > > > >>>>>> >> >> > > > >>>>> >> >> > > > >>>>> >> >> > > > >>>>> >> >> > > > >>>>> -- >> >> > > > >>>>> Debasish Ghosh >> >> > > > >>>>> Principal Engineer >> >> > > > >>>>> >> >> > > > >>>>> Twitter: @debasishg >> >> > > > >>>>> Blog: http://debasishg.blogspot.com >> >> > > > >>>>> Code: https://github.com/debasishg >> >> > > > >>>>> >> >> > > > >>>> >> >> > > > >>> >> >> > > > >>> >> >> > > > >>> >> >> > > > >>> -- >> >> > > > >>> Debasish Ghosh >> >> > > > >>> Principal Engineer >> >> > > > >>> >> >> > > > >>> Twitter: @debasishg >> >> > > > >>> Blog: http://debasishg.blogspot.com >> >> > > > >>> Code: https://github.com/debasishg >> >> > > > >>> >> >> > > > >> >> >> > > > > >> >> > > > >> >> > > > >> >> > > >> >> > > >> >> > > -- >> >> > > Debasish Ghosh >> >> > > Principal Engineer >> >> > > >> >> > > Twitter: @debasishg >> >> > > Blog: http://debasishg.blogspot.com >> >> > > Code: https://github.com/debasishg >> >> > > >> >> > >> >> > >> >> > >> >> > -- >> >> > Senior Software Engineer, Lightbend, Inc. >> >> > >> >> > <http://lightbend.com> >> >> > >> >> > @seg1o <https://twitter.com/seg1o>, in/seanaglover >> >> > <https://www.linkedin.com/in/seanaglover/> >> >> > >> >> >> > >> > >> > >> > -- >> > -- Guozhang >> > >> >> >> >> -- >> -- Guozhang >> > > > > -- > Debasish Ghosh > Principal Engineer > > Twitter: @debasishg > Blog: http://debasishg.blogspot.com > Code: https://github.com/debasishg > > > > -- Debasish Ghosh Principal Engineer Twitter: @debasishg Blog: http://debasishg.blogspot.com Code: https://github.com/debasishg