Hi Arseniy, At some point (before I joined), it was decided that clients would be written in Java for a few reasons:
1. It's easier to maintain binary compatibility 2. Calling Java from Scala is easier than calling Scala from Java (without extra effort) 3. A single artifact instead of one artifact per Scala version supported 4. There are a larger number of Java users than Scala users Since the plan is for most tools to be a thin wrapper over the Java clients, it seems sensible for such tools not to bring unnecessary dependencies. Ismael On Wed, Aug 2, 2017 at 9:28 AM, Arseniy Tashoyan <tasho...@gmail.com> wrote: > Hi Paolo, > > I doubt that rewriting in Java makes value by itself. What is the reason of > redoing the things that are already done? The switching to new API can be > done without the switching to another language. Less new code - less new > bugs. > In some cases, Scala may be more convenient than Java. For example, one can > find Scala collections more handy than Java collections. Just select a > language that gives necessary tools. > > Arseniy > > 2017-08-01 17:30 GMT+03:00 Paolo Patierno <ppatie...@live.com>: > > > Hi Tom, > > > > > > thanks for your reply. I think that you are right and what you have > > proposed should be the way to go. > > > > > > Until today I have been working on refactoring the TopicCommand tool in > > Java using the AdminClient getting rid of the Zookeeper usage in only > "one > > step" and maybe it's wrong. > > > > I'd like to have some input from committers as well to be sure that the > > way is good about how handling such use cases. > > > > > > Thanks, > > > > > > Paolo Patierno > > Senior Software Engineer (IoT) @ Red Hat > > Microsoft MVP on Windows Embedded & IoT > > Microsoft Azure Advisor > > > > Twitter : @ppatierno<http://twitter.com/ppatierno> > > Linkedin : paolopatierno<http://it.linkedin.com/in/paolopatierno> > > Blog : DevExperience<http://paolopatierno.wordpress.com/> > > > > > > ________________________________ > > From: Tom Bentley <t.j.bent...@gmail.com> > > Sent: Friday, July 28, 2017 10:36 AM > > To: dev@kafka.apache.org > > Subject: Re: Command tools : from Scala to Java, from Zookeeper utils to > > Admin Client API > > > > Hi Paolo, > > > > Replies in line... > > > > On 28 July 2017 at 11:14, Paolo Patierno <ppatie...@live.com> wrote: > > > > > Hi committers, > > > > > > in my understanding there is the common idea to move all tools from > Scala > > > to Java and then using the new Admin Client API instead of using the > > > Zookeeper connection. > > > > > > Regarding this subject I started to work on refactoring the > TopicCommand > > > tool but with two steps at same time : > > > > > > > > > * re-writing it in Java > > > * removing --zookeeper option (so no Zookeeper connection) and > adding > > > --broker-list option (so using the Admin Client API) > > > > > > Of course, such option substitution is a breaking change for the tool > > (and > > > the users who are using it). > > > In such a scenario, the two steps path should be needed : first > > > deprecation, then removal (for the --zookeeper option) > > > > > > > A change to tools (and their options) requires a KIP. There's no > > fundamental reason why both couldn't be supported during a transition > > period. So I doubt a KIP that didn't propose a transition period would > get > > passed. > > > > > > It seems that in the "deprecation" phase we have two possible solutions : > > > > > > > > > 1. Adding Admin Client API to the Scala tools and so the > --broker-list > > > option and a warning on --zookeeper for deprecation > > > 2. Rewriting the tool in Java using the Admin Client API (so > > > --broker-list) but at same time providing --zookeeper as well (so > > Zookeeper > > > connection) > > > > > > With the solution 2) we have the advantage to have the tool already in > > > Java when the --zookeeper option will be removed in a next step. In any > > > case we have to write the part related to use the Admin Client API so > it > > > make more sense to me option 2) porting the Zookeeper needed code from > > > Scala to Java (then removing it in the next phase). > > > > > > Is my understanding right on how we have to handle deprecation and > > removal > > > for something that is a breaking change ? > > > Or this case is something "special" and we can live with a new Java > based > > > tool without zookeeper but with Admin Client API at same time ? > > > > > > Of course having both Admin Client API and Zookeeper utils working at > the > > > same time in the tools means more complexity in the code but it's > > something > > > that could be factorized. > > > > > > > I think the right thing to do would be: > > > > 1. deprecate the old option, adding support for the replacement option > > (using the AdminClient). Keep the code in scala. All this is in one KIP. > > 2. Remove the old option (needs a KIP) > > 3. Rewrite the tool in Java. > > > > Parts 2 and 3 could be done at the same time. I don't believe part 3 > needs > > a KIP if it were a drop-in replacement. > > > > The reason I think this is the right way to proceed is: > > > > * It gives users a transition period to learn about the new option, and > > replace any tooling of their own. > > * By keeping the tool in scala you get to release your new AdminClient > API > > and get to iron out all the creases while users still have the > --zookeeper > > option as a fallback. > > * Then when you know the AdminClient API works in the field you have a > > straight porting job to do, and you have less code to port because you > > don't have to port the code to support --zookeeper. > > > > But I'm fairly new here, so maybe a committer will chime in an correct me > > where I'm wrong! > > > > Cheers, > > > > Tom > > >