Hi Tom 
My initial thought was that the constructor with config and delegator would be 
for testing while the one with config is the one that will be used by MM2. 
I can removed one of them and keep only one.

Sent from my iPhone

> On 22 Jun 2022, at 08:15, Tom Bentley <tbent...@redhat.com> wrote:
> 
> Hi Omnia,
> 
> Thanks for those answers. I'm a bit confused by the changes you've made for
> 1 though. It's MM2 that's going to instantiate the class named in
> forwarding.admin.class, so it's MM2 that needs to know the constructor
> signature. The easiest way of doing this is to specify the signature as
> part of the contract for forwarding.admin.class. But ForwardingAdmin now
> has two constructors, which is confusing for someone who wants to subclass
> it. Surely only one is needed? It would also be a good idea to show the
> documentation that forward.admin.class will have.
> 
> Kind regards,
> 
> Tom
> 
>> On Tue, 21 Jun 2022 at 17:06, Omnia Ibrahim <o.g.h.ibra...@gmail.com> wrote:
>> 
>> Hi Tom
>> 
>>> 1. I assume there's an undocumented requirement in the KIP that whatever
>>> class is named for forwarding.admin.class it has a public single argument
>>> constructor that takes an Admin instance?
>>> 
>> you are right, I updated the KIP to reflect the missing one.
>> 3. What if the implementation needs to distinguish between creating ACLs on
>> the source cluster and creating them on the destination cluster? E.g. the
>> one should be done one way, but the other using a different mechanism?
>> Users will need to define 2 implementations, one for source and another for
>> target and configure each using <cluster_alias>.forwarding.admin.class. for
>> example
>> - target.forwarding.admin.class = TargetAdmin
>> - source.forwarding.admin.class = SourceAdmin
>> 
>>> On Tue, Jun 21, 2022 at 2:14 PM Tom Bentley <tbent...@redhat.com> wrote:
>>> 
>>> Hi Omnia,
>>> 
>>> Thanks for the KIP! I'm sorry for the delay in this response. I have a
>> few
>>> questions:
>>> 
>>> 1. I assume there's an undocumented requirement in the KIP that whatever
>>> class is named for forwarding.admin.class it has a public single argument
>>> constructor that takes an Admin instance?
>>> 2. If 1 is correct then what about an implementation that requires extra
>>> configuration, e.g. for whatever infra-as-code API it needs to use
>> (instead
>>> of using an Admin instance directly) how does it learn about that
>> non-Kafka
>>> config when it's only receiving an Admin instance?
>>> 3. What if the implementation needs to distinguish between creating ACLs
>> on
>>> the source cluster and creating them on the destination cluster? E.g. the
>>> one should be done one way, but the other using a different mechanism?
>>> 
>>> Kind regards,
>>> 
>>> Tom
>>> 
>>> 
>>> On Mon, 20 Jun 2022 at 17:13, Omnia Ibrahim <o.g.h.ibra...@gmail.com>
>>> wrote:
>>> 
>>>> Hi Chris, sorry for the late reply.
>>>> ..Hi,
>>>> 
>>>>> 1. I might be missing something, but can you give a concrete Java
>>> example
>>>>> of how the proposed ForwardingAdmin class is more convenient than
>>>>> subclassing the KafkaAdminClient class? AFAICT the two would be
>>> virtually
>>>>> identical.
>>>> 
>>>> I might be misunderstanding exactly how that class will be used;
>>>>> I'm envisioning it as the pluggable class that users will implement
>> for
>>>>> custom administration logic and specify as the value for the
>>>>> "forwarding.admin.class" (or "<cluster>.forwarding.admin.class")
>>>> property,
>>>>> and that it will be instantiated with a KafkaAdminClient instance
>> that
>>>> can
>>>>> be used to get the same logic that MM2 provides today. In the case
>> you
>>>>> mentioned (KafkaAdminClient for read/describe, custom Admin for
>>>>> create/update), I'd imagine one could override the createTopics,
>>>>> deleteTopics, createAcls, deleteAcls (maybe?), alterConfigs (maybe?),
>>>> etc.
>>>>> methods, and then leave other methods such as listTopics,
>>> describeTopics,
>>>>> describeCluster, etc. as they are.
>>>>> 
>>>> The Forwarding decorator is one alternative for inheritance so you are
>>>> right to say that they look identical. However, I would like to point
>> out
>>>> few points
>>>> 1. that Kafka codebase has few wrappers or decorators around
>> AdminClient
>>>> instead of inheritance so using decorator over inheritance isn't new
>>>> proposal for example
>>>> 
>>>>   - -
>>> `org.apache.kafka.streams.processor.internals.InternalTopicManager`
>>>>   which has AdminClient as parameter instead of inheatance
>>>>   - - `org.apache.kafka.connect.util.SharedTopicAdmin` and
>>>>   `org.apache.kafka.connect.util.TopicAdmin` don't inherit
>>>> KafkaAdminClient
>>>>   instead initialize KafkaAdminClient.
>>>> 
>>>> 2. Using ForwardingAdmin will make it easier to test which methods use
>>>> KafkaAdminClient and which don't this make the test for any customized
>>>> implementation easier. We can't have this with inheatcancs
>>>> 3. Inhearting KafkaAdminClient has the following limitation
>>>>       a. KafkaAdminClient doesn't have a public default constructor,
>> so
>>>> isn't gonna be easy to have contractor that initialize both
>>>> KafkaAdminClient (to be used for read/describe/list) and customized
>>>> fedrated client (to be used for create/update). (Note I don't want to
>>> touch
>>>> anything in KafkaAdminClient code base to change that)
>>>>      b. the only way to initialize instance is by
>> using`createInternal`
>>>> which is static and can't be overridden to include creating customized
>>>> fedrated client. This is the method used by `Admin.create` to
>>>> initialize `KafkaAdminClient`in
>>>> most MM2 and Kafka codebase.
>>>> 
>>>> 3. KIP-158 deals with the topics that source connectors write to, not
>> the
>>>>> internal topics used by the Connect framework. IIUC this includes the
>>>>> topics that MM2 mirrors. I think it's still fine if we want to leave
>>>>> support for this out and say that this KIP only addresses code that
>>> lives
>>>>> inside the connect/mirror (and possibly connect/mirror-client?)
>>> modules,
>>>> I
>>>>> just want to make sure that whatever behavior we settle on is
>> specified
>>>>> clearly in the KIP and user-facing documentation.
>>>> 
>>>> MM2 deals with a large number of topics, creating the topic if not
>>>> existing, adding new partitions if the number of partitions increases
>> and
>>>> syncing configs and ACLs, so while KIP-158 can stop the source connect
>>> from
>>>> creating a topic, this wouldn't be a great solution for MM2 when it
>> runs
>>> on
>>>> a large scale as this will add too much operation headache on the teams
>>>> that run MM2 to create/update large number of topics manually. Also, it
>>>> prevents teams from enabling MM2 to sync configs and ACLs as this still
>>>> will be at odds with the federated solution.
>>>> 
>>>> 4. That's fine 👍 Just out of curiosity, is the motivation for this
>>>>> decision to simplify the implementation? I can imagine it'd be easier
>>> to
>>>>> modify the MM2 codebase exclusively and not have to worry about
>>> touching
>>>>> the Connect framework as well given the possibility for unintended
>>>>> consequences for other connectors with the latter.
>>>> 
>>>> The motivation of the KIP is to have the option to let MM2 create
>>> topics,
>>>> add partitions, and sync configs and ACLs without being at odds with
>>>> federated or capacity solutions when it runs on a large scale instead
>> of
>>>> just turning the admin client off.
>>>> 
>>>>> Wondering if there's a
>>>>> distinction on the feature front as well that makes MM2 internal
>> topics
>>>>> different from Connect internal topics.
>>>> 
>>>> 
>>>> The only diff here is the MM2 call TopicManager directly to create
>> these
>>>> topics.
>>>> 
>>>> 
>>>> Thanks
>>>> Omnia
>>>> 
>>>> 
>>>> On Tue, Jun 7, 2022 at 5:05 AM Chris Egerton <fearthecel...@gmail.com>
>>>> wrote:
>>>> 
>>>>> Hi Omnia,
>>>>> 
>>>>> 1. I might be missing something, but can you give a concrete Java
>>> example
>>>>> of how the proposed ForwardingAdmin class is more convenient than
>>>>> subclassing the KafkaAdminClient class? AFAICT the two would be
>>> virtually
>>>>> identical. I might be misunderstanding exactly how that class will be
>>>> used;
>>>>> I'm envisioning it as the pluggable class that users will implement
>> for
>>>>> custom administration logic and specify as the value for the
>>>>> "forwarding.admin.class" (or "<cluster>.forwarding.admin.class")
>>>> property,
>>>>> and that it will be instantiated with a KafkaAdminClient instance
>> that
>>>> can
>>>>> be used to get the same logic that MM2 provides today. In the case
>> you
>>>>> mentioned (KafkaAdminClient for read/describe, custom Admin for
>>>>> create/update), I'd imagine one could override the createTopics,
>>>>> deleteTopics, createAcls, deleteAcls (maybe?), alterConfigs (maybe?),
>>>> etc.
>>>>> methods, and then leave other methods such as listTopics,
>>> describeTopics,
>>>>> describeCluster, etc. as they are.
>>>>> 
>>>>> 3. KIP-158 deals with the topics that source connectors write to, not
>>> the
>>>>> internal topics used by the Connect framework. IIUC this includes the
>>>>> topics that MM2 mirrors. I think it's still fine if we want to leave
>>>>> support for this out and say that this KIP only addresses code that
>>> lives
>>>>> inside the connect/mirror (and possibly connect/mirror-client?)
>>> modules,
>>>> I
>>>>> just want to make sure that whatever behavior we settle on is
>> specified
>>>>> clearly in the KIP and user-facing documentation.
>>>>> 
>>>>> 4. That's fine 👍 Just out of curiosity, is the motivation for this
>>>>> decision to simplify the implementation? I can imagine it'd be easier
>>> to
>>>>> modify the MM2 codebase exclusively and not have to worry about
>>> touching
>>>>> the Connect framework as well given the possibility for unintended
>>>>> consequences for other connectors with the latter. Wondering if
>>> there's a
>>>>> distinction on the feature front as well that makes MM2 internal
>> topics
>>>>> different from Connect internal topics.
>>>>> 
>>>>> Cheers,
>>>>> 
>>>>> Chris
>>>>> 
>>>>> On Mon, Jun 6, 2022 at 6:36 AM Omnia Ibrahim <
>> o.g.h.ibra...@gmail.com>
>>>>> wrote:
>>>>> 
>>>>>> Hi Chris, Thanks for having the time to look into this.
>>>>>> 
>>>>>> 1. Is the introduction of the new "ForwardingAdmin" class
>> necessary,
>>> or
>>>>> can
>>>>>>> the same behavior can be achieved by subclassing the existing
>>>>>>> KafkaAdminClient class?
>>>>>> 
>>>>>> forwarding decorators give more flexibility than the inheritance,
>> in
>>>> this
>>>>>> case, ForwardingAdmin gives the ability to use the default
>>>>> KafkaAdminClient
>>>>>> for reading/describing resources and at the same time configure
>>> another
>>>>>> client to connect to the federated solution to create and update
>>>>> resources.
>>>>>> Using forwarding seems cleaner and more flexible for this use case
>>> than
>>>>>> inheritance.
>>>>>> 
>>>>>> 2. Would it be just as accurate to name the new Mirror Maker 2
>>> property
>>>>>>> "admin.class" instead of "forwarding.admin.class"? I think
>> brevity
>>>> may
>>>>>> work
>>>>>>> in our favor here
>>>>>>> 
>>>>>> I don't mind renaming it to "admin.class" if this is better.
>>>>>> 
>>>>>> 3. Would the admin class specified by the user also take effect for
>>>>> KIP-158
>>>>>>> [1] style automatic topic creation? (Forgive me if this isn't
>>>>> applicable
>>>>>>> for Mirror Maker 2; I'm asking solely based on the knowledge that
>>> MM2
>>>>> can
>>>>>>> be run as a source connector and has its own source task class
>>> [2].)
>>>>>> 
>>>>>> No this only control creating/updating mirrored topics and MM2
>>> internal
>>>>>> topics. And not going to affect connect runtime's internal topics
>>> that
>>>>> are
>>>>>> needed by connect cluster that runs MM2.
>>>>>> 
>>>>>> 4. Would the admin class specified by the user also take effect for
>>>>>>> internal topics created by the Connect framework (i.e., the
>> statue,
>>>>>> config,
>>>>>>> and offsets topics)?
>>>>>> 
>>>>>> No this wouldn't address connect as connect "realtime" uses
>>> TopicAdmin
>>>>> to
>>>>>> manage topics needed for KafkaOffsetBackingStore,
>>>> KafkaStatusBackingStore
>>>>>> and KafkaConfigBackingStore directly. These 3 topics aren't a huge
>>>>> concern
>>>>>> for MM2 as they are a small set of topics and can be created
>> up-front
>>>> as
>>>>> a
>>>>>> one-time job. However, the main concern of the KIP is addressing
>> the
>>>>>> mirrored topics, synced configs, synced ACLs and the internal
>> topics
>>> of
>>>>> MM2
>>>>>> which are needed for MM2 features like heartbeat and offset mapping
>>>>> between
>>>>>> Kafka clusters.
>>>>>> 
>>>>>> The KIP states that Mirror Maker 2 will "Use
>>>>>>> ForwardingAdmin in MirrorUtils instead of TopicAdmin to create
>>>> internal
>>>>>>> compacted topics", but IIUC these topics (the ones created with
>> the
>>>>>>> MirrorUtils class) are Mirror Maker 2-specific and different from
>>> the
>>>>>>> Connect framework's internal topics.
>>>>>> 
>>>>>> MM2 has been using 2 patterns to create topics
>>>>>> 1- Use AdminClient directly to create/update mirrored topics and
>>> their
>>>>> ACLs
>>>>>> 2- Use TopicAdmin in MirrorUtils to create MM2 internal topics
>> which
>>>> are
>>>>>> heartbeat, mm2-offset-syncs.<cluster_alias>.internal and
>>>>>> <cluster_alias>.checkpoints.internal
>>>>>> 
>>>>>> This KIP will only replace AdminClient and TopicAdmin in the MM2
>>>> codebase
>>>>>> by ForwardingAdmin and not connect related topics.
>>>>>> As Colin mentioned before we can have a feature KIP where we use
>>>>>> ForwardingAdmin outside MM2 but this is not addressed in this KIP.
>>>>>> 
>>>>>> Hope this answered your questions.
>>>>>> 
>>>>>> Best
>>>>>> Omnia
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> On Wed, Jun 1, 2022 at 2:14 AM Chris Egerton <
>>> fearthecel...@gmail.com>
>>>>>> wrote:
>>>>>> 
>>>>>>> Hi Omnia,
>>>>>>> 
>>>>>>> Thank you for your patience with this KIP! I have a few quick
>>>> thoughts:
>>>>>>> 
>>>>>>> 1. Is the introduction of the new "ForwardingAdmin" class
>>> necessary,
>>>> or
>>>>>> can
>>>>>>> the same behavior can be achieved by subclassing the existing
>>>>>>> KafkaAdminClient class?
>>>>>>> 
>>>>>>> 2. Would it be just as accurate to name the new Mirror Maker 2
>>>> property
>>>>>>> "admin.class" instead of "forwarding.admin.class"? I think
>> brevity
>>>> may
>>>>>> work
>>>>>>> in our favor here
>>>>>>> 
>>>>>>> 3. Would the admin class specified by the user also take effect
>> for
>>>>>> KIP-158
>>>>>>> [1] style automatic topic creation? (Forgive me if this isn't
>>>>> applicable
>>>>>>> for Mirror Maker 2; I'm asking solely based on the knowledge that
>>> MM2
>>>>> can
>>>>>>> be run as a source connector and has its own source task class
>>> [2].)
>>>>>>> 
>>>>>>> 4. Would the admin class specified by the user also take effect
>> for
>>>>>>> internal topics created by the Connect framework (i.e., the
>> statue,
>>>>>> config,
>>>>>>> and offsets topics)? The KIP states that Mirror Maker 2 will "Use
>>>>>>> ForwardingAdmin in MirrorUtils instead of TopicAdmin to create
>>>> internal
>>>>>>> compacted topics", but IIUC these topics (the ones created with
>> the
>>>>>>> MirrorUtils class) are Mirror Maker 2-specific and different from
>>> the
>>>>>>> Connect framework's internal topics.
>>>>>>> 
>>>>>>> [1] -
>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>> 
>>>> 
>>> 
>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-158%3A+Kafka+Connect+should+allow+source+connectors+to+set+topic-specific+settings+for+new+topics
>>>>>>> [2] -
>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>> 
>>>> 
>>> 
>> https://github.com/apache/kafka/blob/4c9eeef5b2dff9a4f0977fbc5ac7eaaf930d0d0e/connect/mirror/src/main/java/org/apache/kafka/connect/mirror/MirrorSourceTask.java
>>>>>>> 
>>>>>>> Cheers,
>>>>>>> 
>>>>>>> Chris
>>>>>>> 
>>>>>>> On Wed, May 25, 2022 at 5:26 AM Omnia Ibrahim <
>>>> o.g.h.ibra...@gmail.com
>>>>>> 
>>>>>>> wrote:
>>>>>>> 
>>>>>>>> Hi everyone, If there's no major concern anymore, I'll start
>> the
>>>>>>>> voting process.
>>>>>>>> 
>>>>>>>> On Fri, May 20, 2022 at 5:58 PM Omnia Ibrahim <
>>>>> o.g.h.ibra...@gmail.com
>>>>>>> 
>>>>>>>> wrote:
>>>>>>>> 
>>>>>>>>> Hi Colin,
>>>>>>>>> 
>>>>>>>>>> Thanks for the clarification. I agree it's reasonable for
>>> people
>>>>> to
>>>>>>> want
>>>>>>>>> to use their own implementations of Admin. And we could have
>> a
>>>>> config
>>>>>>> for
>>>>>>>>> this, so that it becomes pluggable (possibly in other places
>>> than
>>>>>>>>> MirrorMaker, although we don't have to do that in this KIP).
>>>>>>>>>> 
>>>>>>>>> Allowing people to plug custom implementation of Admin in
>> other
>>>>>> places
>>>>>>>>> sounds like a neat idea indeed. It can be nice addition for
>>>>> example `
>>>>>>>>> org.apache.kafka.connect.util.SharedTopicAdmin` in Connect to
>>> use
>>>>>>> custom
>>>>>>>>> Admin as well. But agree no need to have it in this KIP.
>>>>>>>>>> We could even try to make this easier on developers. For
>>>> example,
>>>>> we
>>>>>>>>> could provide a public ForwardingAdmin class that forwards
>> all
>>>>>> requests
>>>>>>>> to
>>>>>>>>> the regular KafkaAdminClient. Then, people could make their
>>>> custom
>>>>>>> class
>>>>>>>>> inherit from ForwardingAdmin and override >just the specific
>>>>> methods
>>>>>>> that
>>>>>>>>> they wanted to override. So they don't have to implement all
>>> the
>>>>>>> methods,
>>>>>>>>> but just the ones that are different for them.
>>>>>>>>>> 
>>>>>>>>>> I just wanted to make sure we weren't creating a second
>> Admin
>>>>> client
>>>>>>>>> interface -- I think that would really be hard for us to
>>> support
>>>>>>>> long-term.
>>>>>>>>> 
>>>>>>>>> Forwarding would defiantly make it easier. I have updated the
>>> KIP
>>>>> to
>>>>>>>>> introduce ForwardingAdmin as well.
>>>>>>>>> 
>>>>>>>>> regards,
>>>>>>>>> Omnia
>>>>>>>>> 
>>>>>>>>> On Mon, May 16, 2022 at 9:31 PM Colin McCabe <
>>> cmcc...@apache.org
>>>>> 
>>>>>>> wrote:
>>>>>>>>> 
>>>>>>>>>> On Mon, May 16, 2022, at 10:24, Omnia Ibrahim wrote:
>>>>>>>>>>> Hi Colin,
>>>>>>>>>>> 
>>>>>>>>>>> Thanks for your reply.
>>>>>>>>>>> 
>>>>>>>>>>> This KIP doesn’t aim to solve any security concerns, but
>>>> rather
>>>>> a
>>>>>>>>>> conflict
>>>>>>>>>>> of responsibilities within any Kafka ecosystem that
>> includes
>>>> MM2
>>>>>> and
>>>>>>>> any
>>>>>>>>>>> resource management solution. I’m not sure that was clear,
>>> so
>>>>> I’m
>>>>>>>>>> concerned
>>>>>>>>>>> about the motivation for your suggestion to close this
>> KIP.
>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> Hi Omnia,
>>>>>>>>>> 
>>>>>>>>>> Thanks for the clarification. I agree it's reasonable for
>>> people
>>>>> to
>>>>>>> want
>>>>>>>>>> to use their own implementations of Admin. And we could
>> have a
>>>>>> config
>>>>>>>> for
>>>>>>>>>> this, so that it becomes pluggable (possibly in other places
>>>> than
>>>>>>>>>> MirrorMaker, although we don't have to do that in this KIP).
>>>>>>>>>> 
>>>>>>>>>> We could even try to make this easier on developers. For
>>>> example,
>>>>> we
>>>>>>>>>> could provide a public ForwardingAdmin class that forwards
>> all
>>>>>>> requests
>>>>>>>> to
>>>>>>>>>> the regular KafkaAdminClient. Then, people could make their
>>>> custom
>>>>>>> class
>>>>>>>>>> inherit from ForwardingAdmin and override just the specific
>>>>> methods
>>>>>>> that
>>>>>>>>>> they wanted to override. So they don't have to implement all
>>> the
>>>>>>>> methods,
>>>>>>>>>> but just the ones that are different for them.
>>>>>>>>>> 
>>>>>>>>>> I just wanted to make sure we weren't creating a second
>> Admin
>>>>> client
>>>>>>>>>> interface -- I think that would really be hard for us to
>>> support
>>>>>>>> long-term.
>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> It is generally accepted that resource management should
>> be
>>>>>>>> centralized,
>>>>>>>>>>> especially on the scale of mirroring N number of clusters.
>>> The
>>>>>> point
>>>>>>>> of
>>>>>>>>>>> this KIP is that any sort of topic management / federate
>>>>> solution
>>>>>> /
>>>>>>>>>>> up-front capacity planning system will be at odds with MM2
>>> if
>>>>> MM2
>>>>>>>> keeps
>>>>>>>>>>> using the Admin client directly.
>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> Thanks for the explanation. That makes sense.
>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> I understand your concern that the interface proposed in
>> the
>>>>> first
>>>>>>>>>> approach
>>>>>>>>>>> may become too similar to the existing Admin interface.
>> I’ll
>>>>>> update
>>>>>>>> the
>>>>>>>>>>> proposal by moving Ryanne’s previous suggestion to re-use
>>> the
>>>>>> Admin
>>>>>>>>>>> interface and add configuration to accept a custom
>>>>> implementation.
>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> +1.
>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> If you still feel this KIP should be closed but can
>>> understand
>>>>> its
>>>>>>>>>>> motivation I can close this one and create a new one.
>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> I think it's reasonable to keep this one open and make the
>>>> changes
>>>>>> you
>>>>>>>>>> talked about above.
>>>>>>>>>> 
>>>>>>>>>> regards,
>>>>>>>>>> Colin
>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> Thanks,
>>>>>>>>>>> Omnia
>>>>>>>>>>> 
>>>>>>>>>>> On Fri, May 13, 2022 at 6:10 PM Colin McCabe <
>>>>> cmcc...@apache.org>
>>>>>>>>>> wrote:
>>>>>>>>>>> 
>>>>>>>>>>>> On Wed, May 11, 2022, at 15:07, Omnia Ibrahim wrote:
>>>>>>>>>>>>> Hi Colin,
>>>>>>>>>>>>> I don't mind the idea of MM2 users implementing the
>>>>> AdminClient
>>>>>>>>>>>> interface.
>>>>>>>>>>>>> However, there're two disadvantages to this.
>>>>>>>>>>>>> 
>>>>>>>>>>>>>   1. Having around 70 methods definitions to have
>>>>>>> "NotImplemented"
>>>>>>>>>> is
>>>>>>>>>>>> one
>>>>>>>>>>>>>   downside, and keep up with these if the AdminClient
>>>>>> interface
>>>>>>>>>> changes.
>>>>>>>>>>>>>   2. It makes it hard to list what admin functionality
>>> MM2
>>>>>> uses
>>>>>>> as
>>>>>>>>>> MM2
>>>>>>>>>>>>>   interactions with AdminClient in the codebase are in
>>>> many
>>>>>>>> places.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> I guess it's OK for MM2 users who want to build their
>>> admin
>>>>>>> client
>>>>>>>> to
>>>>>>>>>>>> carry
>>>>>>>>>>>>> this burden, as I explained in my previous response to
>>> the
>>>>>>>> discussion
>>>>>>>>>>>>> thread. And we can do some cleanup to the codebase to
>>> have
>>>>> all
>>>>>>>> Admin
>>>>>>>>>>>>> interactions in MM2 in a utils class or something like
>>> that
>>>>> to
>>>>>>> make
>>>>>>>>>> it
>>>>>>>>>>>>> easier to navigate what MM2 needs from the Admin
>>> interface.
>>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> Hi Omnia,
>>>>>>>>>>>> 
>>>>>>>>>>>> Anyone who wants to extend Kafka with proprietary tooling
>>>> does
>>>>>> need
>>>>>>>> to
>>>>>>>>>>>> keep up with the Kafka API. We have done everything we
>> can
>>> to
>>>>>> make
>>>>>>>> this
>>>>>>>>>>>> easier. We rigorously define what the API is through the
>>> KIP
>>>>>>> process,
>>>>>>>>>> and
>>>>>>>>>>>> make it possible to extend by making it an interface
>> rather
>>>>> than
>>>>>>>>>> concrete
>>>>>>>>>>>> class. We also have a pretty lengthy deprecation process
>>> for
>>>>>> these
>>>>>>>>>> APIs.
>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Maybe I'm misunderstanding the use-case you're
>> describing
>>>>> here.
>>>>>>> But
>>>>>>>>>> it
>>>>>>>>>>>>>> seems to me that if you create a proxy that has the
>>>> ability
>>>>> to
>>>>>>> do
>>>>>>>>>> any
>>>>>>>>>>>> admin
>>>>>>>>>>>>>> operation, and give MM2 access to that proxy, the
>>> security
>>>>>> model
>>>>>>>> is
>>>>>>>>>> the
>>>>>>>>>>>>>> same as just giving MM2 admin access. (Or it may be
>>> worse
>>>> if
>>>>>> the
>>>>>>>>>>>> sysadmin
>>>>>>>>>>>>>> doesn't know what this proxy is doing, and doesn't
>> lock
>>> it
>>>>>>>> down...)
>>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> MM2 runs with the assumption that it has
>>>>>>>>>>>>> 
>>>>>>>>>>>>>   - "CREATE" ACLs for topics on the source clusters to
>>>>> create
>>>>>>>>>>>> `heartbeat`
>>>>>>>>>>>>>   topics.
>>>>>>>>>>>>>   - "CREATE"  and "ALTER" ACLs to create topics, add
>>>>>> partitions,
>>>>>>>>>> update
>>>>>>>>>>>>>   topics' config and topics' ACLs (in future, will
>> also
>>>>>> include
>>>>>>>>>> group
>>>>>>>>>>>> ACLS as
>>>>>>>>>>>>>   Mikael mentioned before in the thread) on the
>>>> destination
>>>>>>>>>> clusters.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Most organisations have some resource management or
>>>> federated
>>>>>>>>>> solutions
>>>>>>>>>>>>> (some would even have a budget system as part of these
>>>>> systems)
>>>>>>> to
>>>>>>>>>> manage
>>>>>>>>>>>>> Kafka resources, and these systems are usually the only
>>>>>>> application
>>>>>>>>>>>> allowed
>>>>>>>>>>>>> to initializing a client with "CREATE" and "ALTER"
>> ACLs.
>>>> They
>>>>>>> don't
>>>>>>>>>> grant
>>>>>>>>>>>>> these ACLs to any other teams/groups/applications to
>>> create
>>>>>> such
>>>>>>> a
>>>>>>>>>> client
>>>>>>>>>>>>> outside these systems, so assuming MM2 can bypass these
>>>>> systems
>>>>>>> and
>>>>>>>>>> use
>>>>>>>>>>>> the
>>>>>>>>>>>>> AdminClient directly to create/update resources isn't
>>>> valid.
>>>>>> This
>>>>>>>> is
>>>>>>>>>> the
>>>>>>>>>>>>> primary concern here.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> The KIP is trying to give MM2 more flexibility to allow
>>>>>>>>>> organisations to
>>>>>>>>>>>>> integrate MM2 with their resource management system as
>>> they
>>>>> see
>>>>>>> fit
>>>>>>>>>>>> without
>>>>>>>>>>>>> forcing them to disable most MM2 features.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Hope this make sense and clear it up.
>>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> The point I was trying to make is that there is no
>>> additional
>>>>>>>> security
>>>>>>>>>>>> here. If you have some agent that has all the
>> permissions,
>>>> and
>>>>>> MM2
>>>>>>>> can
>>>>>>>>>> talk
>>>>>>>>>>>> to that agent and tell it what to do, then that is
>>> equivalent
>>>>> to
>>>>>>> just
>>>>>>>>>>>> giving MM2 all the permissions. So while there may be
>> other
>>>>>> reasons
>>>>>>>> to
>>>>>>>>>> use
>>>>>>>>>>>> this kind of agent-based architecture, added security
>> isn't
>>>>> one.
>>>>>>>>>>>> 
>>>>>>>>>>>> In any case, I think we should close this KIP since we
>>>> already
>>>>>> have
>>>>>>>> an
>>>>>>>>>>>> Admin API. There isn't a need to create a public API for
>>>> admin
>>>>>>>>>> operations.
>>>>>>>>>>>> 
>>>>>>>>>>>> best,
>>>>>>>>>>>> Colin
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> On Wed, May 11, 2022 at 9:09 PM Colin McCabe <
>>>>>> cmcc...@apache.org
>>>>>>>> 
>>>>>>>>>> wrote:
>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Hi Omnia Ibrahim,
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> I'm sorry, but I am -1 on adding competing Admin
>>>> interfaces.
>>>>>>> This
>>>>>>>>>> would
>>>>>>>>>>>>>> create confusion and a heavier maintenance burden for
>>> the
>>>>>>> project.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Since the org.apache.kafka.clients.admin.Admin
>> interface
>>>> is
>>>>> a
>>>>>>> Java
>>>>>>>>>>>>>> interface, any third-party software that wants to
>> insert
>>>> its
>>>>>> own
>>>>>>>>>>>>>> implementation of the interface can do so already.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> A KIP to make the Admin class used pluggable for MM2
>>> would
>>>>> be
>>>>>>>>>>>> reasonable.
>>>>>>>>>>>>>> Adding a competing admin API is not.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> It's true that there are many Admin methods, but you
>> do
>>>> not
>>>>>> need
>>>>>>>> to
>>>>>>>>>>>>>> implement all of them -- just the ones that
>> MirrorMaker
>>>>> uses.
>>>>>>> The
>>>>>>>>>> other
>>>>>>>>>>>>>> ones can throw a NotImplementedException or similar.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> The current approach also assumes that the user
>>> running
>>>>> MM2
>>>>>>> has
>>>>>>>>>> the
>>>>>>>>>>>>>> Admin right to
>>>>>>>>>>>>>>> create/update topics, which is only valid if the
>> user
>>>> who
>>>>>> runs
>>>>>>>> MM2
>>>>>>>>>>>> also
>>>>>>>>>>>>>> manages both
>>>>>>>>>>>>>>> source and destination clusters.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Maybe I'm misunderstanding the use-case you're
>>> describing
>>>>>> here.
>>>>>>>> But
>>>>>>>>>> it
>>>>>>>>>>>>>> seems to me that if you create a proxy that has the
>>>> ability
>>>>> to
>>>>>>> do
>>>>>>>>>> any
>>>>>>>>>>>> admin
>>>>>>>>>>>>>> operation, and give MM2 access to that proxy, the
>>> security
>>>>>> model
>>>>>>>> is
>>>>>>>>>> the
>>>>>>>>>>>>>> same as just giving MM2 admin access. (Or it may be
>>> worse
>>>> if
>>>>>> the
>>>>>>>>>>>> sysadmin
>>>>>>>>>>>>>> doesn't know what this proxy is doing, and doesn't
>> lock
>>> it
>>>>>>>> down...)
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> best,
>>>>>>>>>>>>>> Colin
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> On Mon, May 9, 2022, at 13:21, Omnia Ibrahim wrote:
>>>>>>>>>>>>>>> Hi, I gave the KIP another look after talking to
>> some
>>>>> people
>>>>>>> at
>>>>>>>>>> the
>>>>>>>>>>>> Kafka
>>>>>>>>>>>>>>> Summit in London. And I would like to clear up the
>>>>>> motivation
>>>>>>> of
>>>>>>>>>> this
>>>>>>>>>>>>>> KIP.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> At the moment, MM2 has some opinionated decisions
>> that
>>>> are
>>>>>>>>>> creating
>>>>>>>>>>>>>> issues
>>>>>>>>>>>>>>> for teams that use IaC, federated solutions or have
>> a
>>>>>>>>>> capacity/budget
>>>>>>>>>>>>>>> planning system for Kafka destination clusters. To
>>>> explain
>>>>>> it
>>>>>>>>>> better,
>>>>>>>>>>>>>> let's
>>>>>>>>>>>>>>> assume we have MM2 with the following configurations
>>> to
>>>>>>>> highlight
>>>>>>>>>>>> these
>>>>>>>>>>>>>>> problems.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> ```
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> topics = .*
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> refresh.topics.enabled = true
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> sync.topic.configs.enabled = true
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> sync.topic.acls.enabled = true
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> // Maybe in futrue we can have
>>> sync.group.acls.enabled =
>>>>>> true
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> ```
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> These configurations allow us to run MM2 with the
>>> value
>>>> of
>>>>>> its
>>>>>>>>>> full
>>>>>>>>>>>>>>> features. However, there are two main concerns when
>> we
>>>> run
>>>>>> on
>>>>>>> a
>>>>>>>>>> scale
>>>>>>>>>>>>>> with
>>>>>>>>>>>>>>> these configs:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 1. *Capacity/Budgeting Planning:*
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Functionality or features that impact capacity
>>> planning
>>>>>> using
>>>>>>>> MM2
>>>>>>>>>> are:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>   1. MM2 automatically creates topics (breaking the
>>>> rule
>>>>> of
>>>>>>>>>>>>>>>   `auto.create.topics.enable=false`) and creates
>>> topic
>>>>>>>>>> partitions on
>>>>>>>>>>>>>>>   destination clusters if the number of partitions
>>>>>> increases
>>>>>>> on
>>>>>>>>>> the
>>>>>>>>>>>>>> source.
>>>>>>>>>>>>>>>   In the previous example, this functionality will
>>>> apply
>>>>> to
>>>>>>> any
>>>>>>>>>> topic
>>>>>>>>>>>>>> that
>>>>>>>>>>>>>>>   matches the regex of the `topics` config.
>>>>>>>>>>>>>>>   2. Sync topic configs include configurations that
>>>>> impact
>>>>>>>>>> capacity
>>>>>>>>>>>>>> like `
>>>>>>>>>>>>>>>   retention.ms` and `retention.bytes`.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> These 2 points lead to adding new untracked capacity
>>> to
>>>>>>>>>> destination
>>>>>>>>>>>>>>> clusters without a way to count for them up-front or
>>>>>> safeguard
>>>>>>>> the
>>>>>>>>>>>>>> cluster.
>>>>>>>>>>>>>>> The team that runs the cluster will only see the
>>>> capacity
>>>>>>> issue
>>>>>>>>>> when
>>>>>>>>>>>>>> their
>>>>>>>>>>>>>>> disk usage hits the threshold for their alerts. The
>>> desk
>>>>>>>> capacity
>>>>>>>>>>>> issue
>>>>>>>>>>>>>> can
>>>>>>>>>>>>>>> be avoided if MM2 is flexible enough to
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>   - have a way for teams that run their ecosystem
>> to
>>>> have
>>>>>> MM2
>>>>>>>>>> behave
>>>>>>>>>>>>>>>   within their system.
>>>>>>>>>>>>>>>   - disable the auto-creation and avoid syncing
>>> configs
>>>>>> that
>>>>>>>>>> impact
>>>>>>>>>>>>>>>   capacity
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 2. *Provisioning conflict:*
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> In the previous MM2 configurations; we ended up with
>>>>>> conflict
>>>>>>> as
>>>>>>>>>> MM2
>>>>>>>>>>>> used
>>>>>>>>>>>>>>> `AdminClient` directly to perform the following
>>>>>> functionality
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>   -  Create a Kafka topic (no way to disable this
>> at
>>>> the
>>>>>>>> moment)
>>>>>>>>>>>>>>>   -  Add new Kafka partitions (no way to disable
>> this
>>>> at
>>>>>> the
>>>>>>>>>> moment)
>>>>>>>>>>>>>>>   -  Sync Kafka Topic configurations (can be
>>> disabled,
>>>>> but
>>>>>>> then
>>>>>>>>>> this
>>>>>>>>>>>>>>>   reduces the value of MM2 potential for users)
>>>>>>>>>>>>>>>   -  Sync Kafka topic's ACLs (can be disabled, but
>>> this
>>>>>>> reduces
>>>>>>>>>> the
>>>>>>>>>>>>>> users'
>>>>>>>>>>>>>>>   value). Disabling this feature also means that
>>> users
>>>>> must
>>>>>>>>>> ensure
>>>>>>>>>>>> they
>>>>>>>>>>>>>> have
>>>>>>>>>>>>>>>   the right ACLs to the mirrored topics on the
>>>>> destination
>>>>>>>>>> cluster
>>>>>>>>>>>>>> before
>>>>>>>>>>>>>>>   switching their consumers, especially when MM2 is
>>>> used
>>>>>> for
>>>>>>>>>> disaster
>>>>>>>>>>>>>>>   recovery. It may lead to extra downtime for them.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> All these functionalities are using AdminClient;
>> which
>>>>>> causes
>>>>>>> an
>>>>>>>>>> issue
>>>>>>>>>>>>>> with
>>>>>>>>>>>>>>> teams that
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>   - Manage their Kafka resources using tools like
>>>>> Strimizi
>>>>>> or
>>>>>>>>>> custom
>>>>>>>>>>>>>>>   federated solutions. For example, Strimizi's
>>>>> UserOperator
>>>>>>>>>> doesn't
>>>>>>>>>>>>>> sync the
>>>>>>>>>>>>>>>   topic ACLs when MM2 is enabled. Strimzi
>>> documentation
>>>>>>>> mentions
>>>>>>>>>> that
>>>>>>>>>>>>>> users
>>>>>>>>>>>>>>>   must to disable MM2 `sync.topic.acls.enabled` if
>>> they
>>>>> use
>>>>>>>>>>>>>> `UserOperator`.
>>>>>>>>>>>>>>>   On the other hand, Strimizi's TopicOperator
>> doesn't
>>>>> have
>>>>>>> the
>>>>>>>>>> same
>>>>>>>>>>>>>> issue
>>>>>>>>>>>>>>>   because it has a bi-directional reconciliation
>>>> process
>>>>>> that
>>>>>>>>>> watches
>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>   topics state on the Kafka cluster and updates
>>>>> KafkaTopic
>>>>>>>>>> resources
>>>>>>>>>>>> for
>>>>>>>>>>>>>>>   Strimzi. This design works fine with Kafka MM2
>> for
>>>>> Topics
>>>>>>> but
>>>>>>>>>> not
>>>>>>>>>>>> for
>>>>>>>>>>>>>>>   syncing ACLs. Strimizi TopicOperator also doesn't
>>>> have
>>>>> a
>>>>>>> way
>>>>>>>> to
>>>>>>>>>>>> stop
>>>>>>>>>>>>>>>   syncing config that impact capacity for example
>>>>> retention
>>>>>>>>>> configs.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>   - Teams that run MM2 but don't own the
>> destination
>>>>>> cluster.
>>>>>>>> In
>>>>>>>>>> this
>>>>>>>>>>>>>>>   case, these teams don't have Admin access, but
>> they
>>>> may
>>>>>>> have
>>>>>>>>>> Kafka
>>>>>>>>>>>>>>>   management solutions, such as yahoo/CMAK or an
>>>> in-house
>>>>>>>>>> solution.
>>>>>>>>>>>> For
>>>>>>>>>>>>>> such
>>>>>>>>>>>>>>>   a tool as CMAK, these teams can update/create
>>>> resources
>>>>>>> using
>>>>>>>>>> CMAK
>>>>>>>>>>>>>> REST API.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> The Proposed KIP gives users the flexibility to
>>>> integrate
>>>>>> MM2
>>>>>>>>>> within
>>>>>>>>>>>>>> their
>>>>>>>>>>>>>>> ecosystem without disabling any MM2 features. We can
>>>>> achieve
>>>>>>>> this
>>>>>>>>>>>>>>> flexibility with one of the following solutions.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>   1. Introduce a new interface that hides Admin
>>>>>> interactions
>>>>>>> in
>>>>>>>>>> one
>>>>>>>>>>>>>> place.
>>>>>>>>>>>>>>>   Then users can provide their way of resource
>>>>> management.
>>>>>> As
>>>>>>>>>> well as
>>>>>>>>>>>>>> clean
>>>>>>>>>>>>>>>   up the MM2 code by having one place that manages
>>> the
>>>>>>>>>> resources, as
>>>>>>>>>>>> at
>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>   moment, MM2 usage of AdminClient is all over the
>>>> code.
>>>>>>>>>>>>>>>   2. The second solution could be to add only a new
>>>>> config
>>>>>>> that
>>>>>>>>>>>> allows
>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>   users to override AdminClient with another
>>>>> implementation
>>>>>>> of
>>>>>>>>>> the
>>>>>>>>>>>>>>>   AdminClient interface, as Ryanne suggested
>> before.
>>>> The
>>>>>>>>>> downside is
>>>>>>>>>>>>>> that
>>>>>>>>>>>>>>>   AdminClient is enormous and constantly under
>>>>> development,
>>>>>>> so
>>>>>>>>>> any
>>>>>>>>>>>>>> users who
>>>>>>>>>>>>>>>   opt-in for custom implementation will need to
>> carry
>>>>> this
>>>>>>>>>> burden.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> I favour the first solution as it will make it
>> either
>>>>> later
>>>>>> to
>>>>>>>>>> add any
>>>>>>>>>>>>>> new
>>>>>>>>>>>>>>> feature related to resource management. But don't
>> mind
>>>> if
>>>>>>> others
>>>>>>>>>> think
>>>>>>>>>>>>>> that
>>>>>>>>>>>>>>> the second solution is easier for MM2 design.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> *Note*: There are two possible future KIPs following
>>>> this
>>>>>> KIP
>>>>>>> to
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>   1. Add config to disable MM2 from auto creating
>> or
>>>>> adding
>>>>>>> new
>>>>>>>>>> topic
>>>>>>>>>>>>>>>   partitions.
>>>>>>>>>>>>>>>   2. Add a way to exclude a specific topic's
>>>>> configuration
>>>>>>> from
>>>>>>>>>> being
>>>>>>>>>>>>>>>   synced.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> I hope this clears up the problem better. Please let
>>> me
>>>>> know
>>>>>>>> what
>>>>>>>>>> do
>>>>>>>>>>>> you
>>>>>>>>>>>>>>> think.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> On Mon, Feb 7, 2022 at 3:26 PM Omnia Ibrahim <
>>>>>>>>>> o.g.h.ibra...@gmail.com
>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Hi Mickael. Thanks for the feedback. I address some
>>> of
>>>>> your
>>>>>>>>>> points
>>>>>>>>>>>>>> below.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> *> This seems to address a relatively advanced and
>>>>> specific
>>>>>>> use
>>>>>>>>>> case*
>>>>>>>>>>>>>>>> The main point of the KIP is that MM2 is making a
>>>> massive
>>>>>>>>>> assumption
>>>>>>>>>>>>>> that
>>>>>>>>>>>>>>>> it has the right to alter/create resources. This
>>>>> assumption
>>>>>>>> isn't
>>>>>>>>>>>> valid
>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>> the world of Infra-as-Code, federated solutions and
>>>>>>> popularity
>>>>>>>>>> of OS
>>>>>>>>>>>>>> Kafka
>>>>>>>>>>>>>>>> Kubernetes operators; these infra/resource
>> management
>>>>>>> solutions
>>>>>>>>>>>> aren't
>>>>>>>>>>>>>>>> advanced use-cases anymore nowadays. These concerns
>>> had
>>>>>> been
>>>>>>>>>> raised
>>>>>>>>>>>> in
>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>> past, especially regarding the assumption that MM2
>>> can
>>>>>> create
>>>>>>>>>> topics
>>>>>>>>>>>> on
>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>> destination cluster. For example,
>>>>>>>>>>>>>>>> https://issues.apache.org/jira/browse/KAFKA-12753
>>> and
>>>>>>>>>>>>>>>> 
>>>>>>>> 
>> https://www.mail-archive.com/dev@kafka.apache.org/msg119340.html
>>>>>>>>>> .
>>>>>>>>>>>>>>>> The primary motivation is giving some power to data
>>>>>>>>>>>>>>>> platform/infrastructure team to make MM2 part of
>>> their
>>>>>>> internal
>>>>>>>>>> Kafka
>>>>>>>>>>>>>>>> ecosystem without dropping the main features that
>>> make
>>>>> MM2
>>>>>>>>>> valuable,
>>>>>>>>>>>>>> like
>>>>>>>>>>>>>>>> syncing topic configs. For example, if someone uses
>>> any
>>>>> OS
>>>>>>>> Kafka
>>>>>>>>>> k8s
>>>>>>>>>>>>>>>> operator, they can implement the class to interact
>>> with
>>>>> the
>>>>>>> k8s
>>>>>>>>>>>>>> operator to
>>>>>>>>>>>>>>>> create these resources.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> *> My initial concern is this may make it hard to
>>>> evolve
>>>>>>>>>> MirrorMaker
>>>>>>>>>>>> as
>>>>>>>>>>>>>>>> we'll likely need to update this new interface if
>> new
>>>>>>> features
>>>>>>>>>> are
>>>>>>>>>>>>>> added.*
>>>>>>>>>>>>>>>> I agree it's a disadvantage to adding a new
>> interface
>>>>>> however
>>>>>>>>>> adding
>>>>>>>>>>>>>> more
>>>>>>>>>>>>>>>> admin interactions from MM2 to alter/create
>> resources
>>>> and
>>>>>>>> access
>>>>>>>>>> will
>>>>>>>>>>>>>> feed
>>>>>>>>>>>>>>>> the main issue as I mentioned above with the
>>> popularity
>>>>> of
>>>>>>> IaC
>>>>>>>>>> and
>>>>>>>>>>>>>>>> federated solutions; most data
>>> platform/infrastructure
>>>>>> teams
>>>>>>>> will
>>>>>>>>>>>> endup
>>>>>>>>>>>>>>>> disabling these new features.
>>>>>>>>>>>>>>>> Also, at the moment, most MM2 interactions with the
>>>> admin
>>>>>>>> client
>>>>>>>>>> are
>>>>>>>>>>>>>>>> scattered across the codebase so having one place
>>> where
>>>>> all
>>>>>>>> admin
>>>>>>>>>>>>>>>> interactions are listed isn't a bad thing.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> *> For example if we wanted to sync group ACLs.*
>>>>>>>>>>>>>>>> As I mentioned before, altering any resource's
>>>>>> configurations
>>>>>>>>>> with
>>>>>>>>>>>> MM2
>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>> the one main concern for any data
>>>> platform/infrastructure
>>>>>>> team
>>>>>>>>>> that
>>>>>>>>>>>>>> wants
>>>>>>>>>>>>>>>> to have control over their clusters and use MM2. So
>>> the
>>>>>> main
>>>>>>>>>> question
>>>>>>>>>>>>>> with
>>>>>>>>>>>>>>>> adding any new altering feature like sync group
>> ACLs
>>>> will
>>>>>>> raise
>>>>>>>>>> the
>>>>>>>>>>>> same
>>>>>>>>>>>>>>>> question of how many teams will actually enable
>> this
>>>>>> feature.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> *>Regarding the proposed API, I have a few
>>> suggestions:
>>>>>> -
>>>>>>> What
>>>>>>>>>> about
>>>>>>>>>>>>>>>> using configure() instead of the constructor to
>> pass
>>>> the
>>>>>>>>>>>>> configuration,
>>>>>>>>>>>>>>>> especially as it's implementing Configurable >-
>> It's
>>>> not
>>>>>>> clear
>>>>>>>>>> what
>>>>>>>>>>>> all
>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>> arguments of createTopicPartitions()>are. What's
>> the
>>>>>>> difference
>>>>>>>>>>>> between
>>>>>>>>>>>>>>>> partitionCounts and newPartitions?>Should we have
>>>>> separate
>>>>>>>>>> methods
>>>>>>>>>>>> for
>>>>>>>>>>>>>>>> creating topics and partitions? >- Do we really
>> need
>>>>>>>>>>>>>>>> createCompactedTopic()? >- Instead of
>>>>> updateTopicConfigs()
>>>>>>> and
>>>>>>>>>>>>>> updateAcls()
>>>>>>>>>>>>>>>> should we use the >"alter" prefix to stay
>> consistent
>>>> with
>>>>>>>> Admin?*
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> These are good suggestions that will update the KIP
>>> to
>>>>>>> address
>>>>>>>>>> these.
>>>>>>>>>>>>>>>> Regarding the `createCompactedTopic` MM2 is using
>>> this
>>>>>> method
>>>>>>>> to
>>>>>>>>>>>> create
>>>>>>>>>>>>>>>> internal topics.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Thanks
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> On Wed, Jan 26, 2022 at 1:55 PM Mickael Maison <
>>>>>>>>>>>>>> mickael.mai...@gmail.com>
>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Hi Omnia,
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Thanks for the KIP, sorry for taking so long to
>>>> comment.
>>>>>>> I've
>>>>>>>>>> only
>>>>>>>>>>>> had
>>>>>>>>>>>>>>>>> time to take a quick look so far.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> This seems to address a relatively advanced and
>>>> specific
>>>>>> use
>>>>>>>>>> case.
>>>>>>>>>>>> My
>>>>>>>>>>>>>>>>> initial concern is this may make it hard to evolve
>>>>>>> MirrorMaker
>>>>>>>>>> as
>>>>>>>>>>>>>>>>> we'll likely need to update this new interface if
>>> new
>>>>>>> features
>>>>>>>>>> are
>>>>>>>>>>>>>>>>> added. For example if we wanted to sync group
>> ACLs.
>>>>>>>>>>>>>>>>> I'm wondering if it's something you've thought
>>> about.
>>>>> I'm
>>>>>>> not
>>>>>>>>>> saying
>>>>>>>>>>>>>>>>> it's a blocker but we have to weigh the pros and
>>> cons
>>>>> when
>>>>>>>>>>>> introducing
>>>>>>>>>>>>>>>>> new features.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Regarding the proposed API, I have a few
>>> suggestions:
>>>>>>>>>>>>>>>>> - What about using configure() instead of the
>>>>> constructor
>>>>>> to
>>>>>>>>>> pass
>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>> configuration, especially as it's implementing
>>>>>> Configurable
>>>>>>>>>>>>>>>>> - It's not clear what all the arguments of
>>>>>>>>>> createTopicPartitions()
>>>>>>>>>>>>>>>>> are. What's the difference between partitionCounts
>>> and
>>>>>>>>>>>> newPartitions?
>>>>>>>>>>>>>>>>> Should we have separate methods for creating
>> topics
>>>> and
>>>>>>>>>> partitions?
>>>>>>>>>>>>>>>>> - Do we really need createCompactedTopic()?
>>>>>>>>>>>>>>>>> - Instead of updateTopicConfigs() and updateAcls()
>>>>> should
>>>>>> we
>>>>>>>>>> use the
>>>>>>>>>>>>>>>>> "alter" prefix to stay consistent with Admin?
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>> Mickael
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> On Wed, Jan 26, 2022 at 11:26 AM Omnia Ibrahim <
>>>>>>>>>>>>>> o.g.h.ibra...@gmail.com>
>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>>>>> If there are no more concerns regarding the
>>> proposal
>>>>>> can I
>>>>>>>> get
>>>>>>>>>>>> some
>>>>>>>>>>>>>>>>> votes on the KIP here
>>>>>>>>>>>>>>>>> 
>>>>>>>>>> 
>>>> https://lists.apache.org/thread/950lpxjb5kbjm8qdszlpxm9h4j4sfyjx
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Thanks
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> On Wed, Oct 27, 2021 at 3:54 PM Ryanne Dolan <
>>>>>>>>>>>> ryannedo...@gmail.com>
>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Well I'm convinced! Thanks for looking into it.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Ryanne
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> On Wed, Oct 27, 2021, 8:49 AM Omnia Ibrahim <
>>>>>>>>>>>>>> o.g.h.ibra...@gmail.com>
>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> I checked the difference between the number
>> of
>>>>>> methods
>>>>>>> in
>>>>>>>>>> the
>>>>>>>>>>>>>> Admin
>>>>>>>>>>>>>>>>>>>> interface and the number of methods MM2
>> invokes
>>>>> from
>>>>>>>>>> Admin, and
>>>>>>>>>>>>>> this
>>>>>>>>>>>>>>>>> diff
>>>>>>>>>>>>>>>>>>>> is enormous (it's more than 70 methods).
>>>>>>>>>>>>>>>>>>>> As far as I can see, the following methods
>> MM2
>>>>>> depends
>>>>>>> on
>>>>>>>>>> (in
>>>>>>>>>>>>>>>>>>>> MirrorSourceConnector, MirrorMaker,
>>>>>>> MirrorCheckpointTask
>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>>> MirrorCheckpointConnector), this will leave
>> 73
>>>>>> methods
>>>>>>> on
>>>>>>>>>> the
>>>>>>>>>>>>>> Admin
>>>>>>>>>>>>>>>>>>>> interface that customer will need to return
>>> dummy
>>>>>> data
>>>>>>>> for,
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>   1. create(conf)
>>>>>>>>>>>>>>>>>>>>   2. close
>>>>>>>>>>>>>>>>>>>>   3. listTopics()
>>>>>>>>>>>>>>>>>>>>   4. createTopics(newTopics,
>>>> createTopicsOptions)
>>>>>>>>>>>>>>>>>>>>   5. createPartitions(newPartitions)
>>>>>>>>>>>>>>>>>>>>   6. alterConfigs(configs)  // this method
>> is
>>>>> marked
>>>>>>> for
>>>>>>>>>>>>>>>>> deprecation in
>>>>>>>>>>>>>>>>>>>>   Admin and the ConfigResource MM2 use is
>> only
>>>>> TOPIC
>>>>>>>>>>>>>>>>>>>>   7. createAcls(aclBindings) // the list of
>>>>> bindings
>>>>>>>>>> always
>>>>>>>>>>>>>>>>> filtered by
>>>>>>>>>>>>>>>>>>>>   TOPIC
>>>>>>>>>>>>>>>>>>>>   8. describeAcls(aclBindingFilter) //
>> filter
>>> is
>>>>>>> always
>>>>>>>>>>>>>>>>> ANY_TOPIC_ACL
>>>>>>>>>>>>>>>>>>>>   9. describeConfigs(configResources) //
>>> Always
>>>>> for
>>>>>>>> TOPIC
>>>>>>>>>>>>>> resources
>>>>>>>>>>>>>>>>>>>>   10. listConsumerGroupOffsets(groupId)
>>>>>>>>>>>>>>>>>>>>   11. listConsumerGroups()
>>>>>>>>>>>>>>>>>>>>   12. alterConsumerGroupOffsets(groupId,
>>>> offsets)
>>>>>>>>>>>>>>>>>>>>   13. describeCluster() // this is invoked
>>> from
>>>>>>>>>>>>>>>>>>>> ConnectUtils.lookupKafkaClusterId(conf),
>>>>>>>>>>>>>>>>>>>>   but MM2 isn't the one that initialize the
>>>>>>> AdminClient
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> Going with the Admin interface in practice
>> will
>>>>> make
>>>>>>> any
>>>>>>>>>> custom
>>>>>>>>>>>>>> Admin
>>>>>>>>>>>>>>>>>>>> implementation humongous even for a fringe
>> use
>>>> case
>>>>>>>>>> because of
>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>> number
>>>>>>>>>>>>>>>>>>>> of methods that need to return dummy data,
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> I am still leaning toward a new interface as
>> it
>>>>>>> abstract
>>>>>>>>>> all
>>>>>>>>>>>> MM2's
>>>>>>>>>>>>>>>>>>>> interaction with Kafka Resources in one
>> place;
>>>> this
>>>>>>> makes
>>>>>>>>>> it
>>>>>>>>>>>>>> easier
>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>> maintain and make it easier for the use cases
>>>> where
>>>>>>>>>> customers
>>>>>>>>>>>>>> wish to
>>>>>>>>>>>>>>>>>>>> provide a different method to handle
>> resources.
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> Omnia
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> On Tue, Oct 26, 2021 at 4:10 PM Ryanne Dolan
>> <
>>>>>>>>>>>>>> ryannedo...@gmail.com>
>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> I like the idea of failing-fast whenever a
>>>> custom
>>>>>>> impl
>>>>>>>> is
>>>>>>>>>>>>>>>>> provided, but I
>>>>>>>>>>>>>>>>>>>>> suppose that that could be done for Admin
>> as
>>>>> well.
>>>>>> I
>>>>>>>>>> agree
>>>>>>>>>>>> your
>>>>>>>>>>>>>>>>> proposal
>>>>>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>>>> more ergonomic, but maybe it's okay to
>> have a
>>>>>> little
>>>>>>>>>>>> friction in
>>>>>>>>>>>>>>>>> such
>>>>>>>>>>>>>>>>>>>>> fringe use-cases.
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> Ryanne
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> On Tue, Oct 26, 2021, 6:23 AM Omnia
>> Ibrahim <
>>>>>>>>>>>>>>>>> o.g.h.ibra...@gmail.com>
>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> Hey Ryanne, Thanks fo the quick feedback.
>>>>>>>>>>>>>>>>>>>>>> Using the Admin interface would make
>>>> everything
>>>>>>>>>> easier, as
>>>>>>>>>>>> MM2
>>>>>>>>>>>>>>>>> will
>>>>>>>>>>>>>>>>>>>> need
>>>>>>>>>>>>>>>>>>>>>> only to configure the classpath for the
>> new
>>>>>>>>>> implementation
>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>> use it
>>>>>>>>>>>>>>>>>>>>>> instead of AdminClient.
>>>>>>>>>>>>>>>>>>>>>> However, I have two concerns
>>>>>>>>>>>>>>>>>>>>>> 1. The Admin interface is enormous, and
>> the
>>>> MM2
>>>>>>> users
>>>>>>>>>> will
>>>>>>>>>>>>>> need
>>>>>>>>>>>>>>>>> to know
>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>> list of methods MM2 depends on and
>> override
>>>>> these
>>>>>>>> only
>>>>>>>>>>>>>> instead of
>>>>>>>>>>>>>>>>>>>>>> implementing the whole Admin interface.
>>>>>>>>>>>>>>>>>>>>>> 2. MM2 users will need keep an eye on any
>>>>> changes
>>>>>>> to
>>>>>>>>>> Admin
>>>>>>>>>>>>>>>>> interface
>>>>>>>>>>>>>>>>>>>> that
>>>>>>>>>>>>>>>>>>>>>> impact MM2 for example deprecating
>> methods.
>>>>>>>>>>>>>>>>>>>>>> Am not sure if adding these concerns on
>> the
>>>>> users
>>>>>>> is
>>>>>>>>>>>>>> acceptable
>>>>>>>>>>>>>>>>> or not.
>>>>>>>>>>>>>>>>>>>>>> One solution to address these concerns
>>> could
>>>> be
>>>>>>>> adding
>>>>>>>>>> some
>>>>>>>>>>>>>>>>> checks to
>>>>>>>>>>>>>>>>>>>>> make
>>>>>>>>>>>>>>>>>>>>>> sure the methods MM2 uses from the Admin
>>>>>> interface
>>>>>>>>>> exists
>>>>>>>>>>>> to
>>>>>>>>>>>>>> fail
>>>>>>>>>>>>>>>>>>>> faster.
>>>>>>>>>>>>>>>>>>>>>> What do you think
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> Omnia
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> On Mon, Oct 25, 2021 at 11:24 PM Ryanne
>>>> Dolan <
>>>>>>>>>>>>>>>>> ryannedo...@gmail.com>
>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> Thanks Omnia, neat idea. I wonder if we
>>>> could
>>>>>> use
>>>>>>>> the
>>>>>>>>>>>>>> existing
>>>>>>>>>>>>>>>>> Admin
>>>>>>>>>>>>>>>>>>>>>>> interface instead of defining a new
>> one?
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> Ryanne
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> On Mon, Oct 25, 2021, 12:54 PM Omnia
>>>> Ibrahim
>>>>> <
>>>>>>>>>>>>>>>>>>>> o.g.h.ibra...@gmail.com>
>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> Hey everyone,
>>>>>>>>>>>>>>>>>>>>>>>> Please take a look at KIP-787
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>> 
>>>> 
>>> 
>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-787%3A+MM2+Interface+to+manage+Kafka+resources
>>>>>>>>>>>>>>>>>>>>>>>> <
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>> 
>>>> 
>>> 
>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-787%3A+MM2+Interface+to+manage+Kafka+resources
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> Thanks for the feedback and support
>>>>>>>>>>>>>>>>>>>>>>>> Omnia
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>> 
>>>> 
>>> 
>> 

Reply via email to