Thanks for the details Colin and Andy.

My indent was not to block the KIP, but it seems to be a fair question
to ask.

I talked to Ismael offline about it and understand his reasoning better
now. If we don't deprecate `abstract AdminClient` class, it seems
reasonable to not deprecate the corresponding factory methods either.


+1 (binding) on the current proposal



-Matthias

On 7/3/19 5:03 AM, Andy Coates wrote:
> Matthias,
> 
> I was referring to platforms such as spark or flink that support multiple
> versions of the Kafka clients. Ismael mentioned this higher up on the
> thread.
> 
> I'd prefer this KIP didn't get held up over somewhat unrelated change, i.e.
> should the factory method be on the interface or utility class.  Surely,
> now would be a great time to change this if we wanted, but we can also
> change this later if we need to.  In the interest of moving forward, can I
> propose we leave the factory methods as they are in the KIP?
> 
> Thanks,
> 
> Andy
> 
> On Tue, 2 Jul 2019 at 17:14, Colin McCabe <cmcc...@apache.org> wrote:
> 
>> On Tue, Jul 2, 2019, at 09:14, Colin McCabe wrote:
>>> On Mon, Jul 1, 2019, at 23:30, Matthias J. Sax wrote:
>>>> Not sure, if I understand the argument?
>>>>
>>>> Why would anyone need to support multiple client side versions?
>>>> Clients/brokers are forward/backward compatible anyway.
>>>
>>> When you're using many different libraries, it is helpful if they don't
>>> impose tight constraints on what versions their dependencies are.
>>> Otherwise you can easily get in a situation where the constraints can't
>>> be satisfied.
>>>
>>>>
>>>> Also, if one really supports multiple client side versions, won't they
>>>> use multiple shaded dependencies for different versions?
>>>
>>> Shading the Kafka client doesn't really work, because of how we use
>> reflection.
>>>
>>>>
>>>> Last, it's possible to suppress warnings (at least in Java).
>>>
>>> But not in Scala.  So that does not help (for example), Scala users.
>>
>> I meant to write "Spark users" here.
>>
>> C.
>>
>>>
>>> I agree that in general we should be using deprecation when
>>> appropriate, regardless of the potential annoyances to users.  But I'm
>>> not sure deprecating this method is really worth it.
>>>
>>> best,
>>> Colin
>>>
>>>
>>>>
>>>> Can you elaborate?
>>>>
>>>> IMHO, just adding a statement to JavaDocs is a little weak, and at some
>>>> point, we need to deprecate those methods anyway if we ever want to
>>>> remove them. The earlier we deprecate them, the earlier we can remove
>> them.
>>>>
>>>>
>>>> -Matthias
>>>>
>>>> On 7/1/19 4:22 AM, Andy Coates wrote:
>>>>> Done. I've not deprecated the factory methods on the AdminClient for
>> the
>>>>> same reason the AdminClient itself is not deprecated, i.e. this
>> would cause
>>>>> unavoidable warnings for libraries / platforms that support multiple
>>>>> versions of Kafka. However, I think we add a note to the Java docs of
>>>>> `AdminClient` to indicate that its use, going forward, is
>> discouraged in
>>>>> favour of the new `Admin` interface and explain why its not  been
>>>>> deprecated, but that it may/will be removed in a future version.
>>>>>
>>>>> Regarding factory methods on interfaces: there seems to be some
>> difference
>>>>> of opinion here. I'm not sure of the best approach to revolve this.
>> At the
>>>>> moment the KIP has factory methods on the new `Admin` interface,
>> rather
>>>>> than some utility class. I prefer the utility class, but this isn't
>> inline
>>>>> with the patterns in the code base and some of the core team have
>> expressed
>>>>> they'd prefer to continue to have the factory methods on the
>> interface.
>>>>> I'm happy with this if others are.
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Andy
>>>>>
>>>>> On Thu, 27 Jun 2019 at 23:21, Matthias J. Sax <matth...@confluent.io>
>> wrote:
>>>>>
>>>>>> @Andy:
>>>>>>
>>>>>> What about the factory methods of `AdminClient` class? Should they
>> be
>>>>>> deprecated?
>>>>>>
>>>>>> One nit about the KIP: can you maybe insert "code blocks" to
>> highlight
>>>>>> the API changes? Code blocks would simplify to read the KIP a lot.
>>>>>>
>>>>>>
>>>>>> -Matthias
>>>>>>
>>>>>> On 6/26/19 6:56 AM, Ryanne Dolan wrote:
>>>>>>> +1 (non-binding)
>>>>>>>
>>>>>>> Thanks.
>>>>>>> Ryanne
>>>>>>>
>>>>>>> On Tue, Jun 25, 2019 at 10:21 PM Satish Duggana <
>>>>>> satish.dugg...@gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> +1 (non-binding)
>>>>>>>>
>>>>>>>> On Wed, Jun 26, 2019 at 8:37 AM Satish Duggana <
>>>>>> satish.dugg...@gmail.com>
>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>> +1 Matthias/Andy.
>>>>>>>>> IMHO, interface is about the contract, it should not have/expose
>> any
>>>>>>>>> implementation. I am fine with either way as it is more of taste
>> or
>>>>>>>>> preference.
>>>>>>>>>
>>>>>>>>> Agree with Ismael/Colin/Ryanne on not deprecating for good
>> reasons.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Mon, Jun 24, 2019 at 8:33 PM Andy Coates <a...@confluent.io>
>> wrote:
>>>>>>>>>>
>>>>>>>>>> I agree Matthias.
>>>>>>>>>>
>>>>>>>>>> (In Scala, such factory methods are on a companion object. As
>> Java
>>>>>>>> doesn't
>>>>>>>>>> have the concept of a companion object, an equivalent would be a
>>>>>>>> utility
>>>>>>>>>> class with a similar name...)
>>>>>>>>>>
>>>>>>>>>> However, I'll update the KIP to include the factory method on
>> the
>>>>>>>> interface.
>>>>>>>>>>
>>>>>>>>>> On Fri, 21 Jun 2019 at 23:40, Matthias J. Sax <
>> matth...@confluent.io>
>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>> I still think, that an interface does not need to know
>> anything about
>>>>>>>>>>> its implementation. But I am also fine if we add a factory
>> method to
>>>>>>>> the
>>>>>>>>>>> new interface if that is preferred by most people.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> -Matthias
>>>>>>>>>>>
>>>>>>>>>>> On 6/21/19 7:10 AM, Ismael Juma wrote:
>>>>>>>>>>>> This is even more reason not to deprecate immediately, there
>> is
>>>>>>>> very
>>>>>>>>>>> little
>>>>>>>>>>>> maintenance cost for us. We should be mindful that many of our
>>>>>>>> users (eg
>>>>>>>>>>>> Spark, Flink, etc.) typically allow users to specify the kafka
>>>>>>>> clients
>>>>>>>>>>>> version and hence avoid using new classes/interfaces for some
>>>>>>>> time. They
>>>>>>>>>>>> would get a bunch of warnings they cannot do anything about
>> apart
>>>>>>>> from
>>>>>>>>>>>> suppressing.
>>>>>>>>>>>>
>>>>>>>>>>>> Ismael
>>>>>>>>>>>>
>>>>>>>>>>>> On Fri, Jun 21, 2019 at 4:00 AM Andy Coates <
>> a...@confluent.io>
>>>>>>>> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Hi Ismael,
>>>>>>>>>>>>>
>>>>>>>>>>>>> I’m happy enough to not deprecate the existing `AdminClient`
>>>>>>>> class as
>>>>>>>>>>> part
>>>>>>>>>>>>> of this change.
>>>>>>>>>>>>>
>>>>>>>>>>>>> However, note that, the class will likely be empty, i.e. all
>>>>>>>> methods and
>>>>>>>>>>>>> implementations will be inherited from the interface:
>>>>>>>>>>>>>
>>>>>>>>>>>>> public abstract class AdminClient implements Admin {
>>>>>>>>>>>>> }
>>>>>>>>>>>>>
>>>>>>>>>>>>> Not marking it as deprecated has the benefit that users
>> won’t see
>>>>>>>> any
>>>>>>>>>>>>> deprecation warnings on the next release. Conversely,
>> deprecating
>>>>>>>> it
>>>>>>>>>>> will
>>>>>>>>>>>>> mean we can choose to remove this, now pointless class, in
>> the
>>>>>>>> future
>>>>>>>>>>> if we
>>>>>>>>>>>>> choose.
>>>>>>>>>>>>>
>>>>>>>>>>>>> That’s my thinking for deprecation, but as I’ve said I’m
>> happy
>>>>>>>> either
>>>>>>>>>>> way.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Andy
>>>>>>>>>>>>>
>>>>>>>>>>>>>> On 18 Jun 2019, at 16:09, Ismael Juma <ism...@juma.me.uk>
>> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I agree with Ryanne, I think we should avoid deprecating
>>>>>>>> AdminClient
>>>>>>>>>>> and
>>>>>>>>>>>>>> causing so much churn for users who don't actually care
>> about
>>>>>>>> this
>>>>>>>>>>> niche
>>>>>>>>>>>>>> use case.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Ismael
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Tue, Jun 18, 2019 at 6:43 AM Andy Coates <
>> a...@confluent.io>
>>>>>>>> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Hi Ryanne,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> If we don't change the client code, then everywhere will
>> still
>>>>>>>> expect
>>>>>>>>>>>>>>> subclasses of `AdminClient`, so the interface will be of no
>>>>>>>> use, i.e.
>>>>>>>>>>> I
>>>>>>>>>>>>>>> can't write a class that implements the new interface and
>> pass
>>>>>>>> it to
>>>>>>>>>>> the
>>>>>>>>>>>>>>> client code.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Andy
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On Mon, 17 Jun 2019 at 19:01, Ryanne Dolan <
>>>>>>>> ryannedo...@gmail.com>
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Andy, while I agree that the new interface is useful, I'm
>> not
>>>>>>>>>>> convinced
>>>>>>>>>>>>>>>> adding an interface requires deprecating AdminClient and
>>>>>>>> changing so
>>>>>>>>>>>>> much
>>>>>>>>>>>>>>>> client code. Why not just add the Admin interface, have
>>>>>>>> AdminClient
>>>>>>>>>>>>>>>> implement it, and have done?
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Ryanne
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On Mon, Jun 17, 2019 at 12:09 PM Andy Coates <
>>>>>>>> a...@confluent.io>
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Hi all,
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> I think I've addressed all concerns. Let me know if I've
>>>>>>>> not.  Can I
>>>>>>>>>>>>>>> call
>>>>>>>>>>>>>>>>> another round of votes please?
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Andy
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Fri, 14 Jun 2019 at 04:55, Satish Duggana <
>>>>>>>>>>>>> satish.dugg...@gmail.com
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Hi Andy,
>>>>>>>>>>>>>>>>>> Thanks for the KIP. This is a good change and it gives
>> the
>>>>>>>> user a
>>>>>>>>>>>>>>>> better
>>>>>>>>>>>>>>>>>> handle on Admin client usage. I agree with the proposal
>>>>>>>> except the
>>>>>>>>>>>>>>> new
>>>>>>>>>>>>>>>>>> `Admin` interface having all the methods from
>> `AdminClient`
>>>>>>>>>>> abstract
>>>>>>>>>>>>>>>>> class.
>>>>>>>>>>>>>>>>>> It should be kept clean having only the admin
>> operations as
>>>>>>>> methods
>>>>>>>>>>>>>>>> from
>>>>>>>>>>>>>>>>>> KafkaClient abstract class but not the factory methods
>> as
>>>>>>>> mentioned
>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>> earlier mail.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> I know about dynamic proxies(which were widely used in
>>>>>>>> RMI/EJB
>>>>>>>>>>>>>>> world).
>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>> am
>>>>>>>>>>>>>>>>>> curious about the usecase using dynamic proxies with
>> Admin
>>>>>>>> client
>>>>>>>>>>>>>>>>>> interface. Dynamic proxy can have performance penalty
>> if it
>>>>>>>> is used
>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>> critical path. Is that the primary motivation for
>> creating
>>>>>>>> the KIP?
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>>> Satish.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> On Wed, Jun 12, 2019 at 8:43 PM Andy Coates <
>>>>>>>> a...@confluent.io>
>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> I'm not married to that part.  That was only done to
>> keep
>>>>>>>> it more
>>>>>>>>>>>>>>> or
>>>>>>>>>>>>>>>>> less
>>>>>>>>>>>>>>>>>>> inline with what's already there, (an abstract class
>> that
>>>>>>>> has a
>>>>>>>>>>>>>>>> factory
>>>>>>>>>>>>>>>>>>> method that returns a subclass.... sounds like the same
>>>>>>>>>>>>>>> anti-pattern
>>>>>>>>>>>>>>>>> ;))
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> An alternative would to have an `AdminClients` utility
>>>>>>>> class to
>>>>>>>>>>>>>>>> create
>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>> admin client.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> On Mon, 10 Jun 2019 at 19:31, Matthias J. Sax <
>>>>>>>>>>>>>>> matth...@confluent.io
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Hmmm...
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> So the new interface, returns an instance of a class
>> that
>>>>>>>>>>>>>>>> implements
>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>> interface. This sounds a little bit like an
>> anti-pattern?
>>>>>>>>>>>>>>> Shouldn't
>>>>>>>>>>>>>>>>>>>> interfaces actually not know anything about classes
>> that
>>>>>>>>>>>>>>> implement
>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>> interface?
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> -Matthias
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> On 6/10/19 11:22 AM, Andy Coates wrote:
>>>>>>>>>>>>>>>>>>>>> `AdminClient` would be deprecated purely because it
>> would
>>>>>>>> no
>>>>>>>>>>>>>>>> longer
>>>>>>>>>>>>>>>>>>> serve
>>>>>>>>>>>>>>>>>>>>> any purpose and would be virtually empty, getting
>> all of
>>>>>>>> its
>>>>>>>>>>>>>>>>>>>> implementation
>>>>>>>>>>>>>>>>>>>>> from the new interfar. It would be nice to remove
>> this
>>>>>>>> from the
>>>>>>>>>>>>>>>> API
>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>> next major version bump, hence the need to deprecate.
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> `AdminClient.create()` would return what it does
>> today,
>>>>>>>> (so
>>>>>>>>>>>>>>> not a
>>>>>>>>>>>>>>>>>>>> breaking
>>>>>>>>>>>>>>>>>>>>> change).
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> On Tue, 4 Jun 2019 at 22:24, Ryanne Dolan <
>>>>>>>>>>>>>>> ryannedo...@gmail.com
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> The existing `AdminClient` will be marked as
>> deprecated.
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> What's the reasoning behind this? I'm fine with the
>> other
>>>>>>>>>>>>>>>> changes,
>>>>>>>>>>>>>>>>>> but
>>>>>>>>>>>>>>>>>>>>>> would prefer to keep the existing public API intact
>> if
>>>>>>>> it's
>>>>>>>>>>>>>>> not
>>>>>>>>>>>>>>>>>>> hurting
>>>>>>>>>>>>>>>>>>>>>> anything.
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Also, what will AdminClient.create() return? Would
>> it be
>>>>>>>> a
>>>>>>>>>>>>>>>>> breaking
>>>>>>>>>>>>>>>>>>>> change?
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Ryanne
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> On Tue, Jun 4, 2019, 11:17 AM Andy Coates <
>>>>>>>> a...@confluent.io>
>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> Hi folks
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> As there's been no chatter on this KIP I'm
>> assuming it's
>>>>>>>>>>>>>>>>>>>> non-contentious,
>>>>>>>>>>>>>>>>>>>>>>> (or just boring), hence I'd like to call a vote for
>>>>>>>> KIP-476:
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>
>>>>>>
>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-476%3A+Add+Java+AdminClient+Interface
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> Andy
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>
>>>>
>>>> Attachments:
>>>> * signature.asc
>>>
>>
> 

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to