Very nice proposal, Magesh. I like the approach and the new concepts and
interfaces, but I do have a few comments/suggestions about some specific

   1. In the "Motivation" section, perhaps it makes sense to briefly
   describe one or two somewhat concrete examples of how this is useful.
   2. Maybe in the "Public Interfaces" section you could briefly describe
   each of the interfaces, what they represent, and which are implemented by
   the framework vs implemented by an extension. I think it'd help to explain
   that only the `ConnectRestPlugin` needs to be implemented, and the rest
   will be provided by the framework. I know the next section goes into it a
   bit, but it'd be useful in this section when first talking about the new
   3. Also in the "Public Interfaces" section: I don't think we should
   introduce a "rest.plugins" configuration property. Instead, can we not just
   instantiate and call all of the ConnectRestPlugins that we find on the
   plugin path? Besides, it seems too close to the `plugin.path` configuration
   4. Why would the implementation register Connect resources *after* the
   plugins, if Jersey currently registers only the first one? The "Rejected
   Alternatives" mentions why, but this section should be explicit about why.
   For example, "The plugin's would be registered in the
   RestServer.start(Herder herder) method before registering the default
   Connect resources, which ensures that plugins cannot remove Connect
   5. "Hence, it is recommended that the plugins don't re-register the
   default Connect Resources. This could potentially lead to unexpected
   errors." First, we should not say "recommended" and should just say plugins
   should not register any resources that conflict with the built-in Connect
   resources. Second, if the worker does find conflicts, can we just remove
   them before adding the built-in Connect resources?
   6. Is it possible for implementations to check whether resources already
   exist before registering their own? If so, we should recommend that
   implementations do this and log any problems.
   7. We should be explicit that the "Service Provider" is Java's Service
   Provider API. We also need to be explicit that an implementation must
   provide a `META-INF/services/org.apache.kafka.connect.ConnectRestPlugin`
   file (or whatever the package name of the `ConnectRestPlugin` will be) with
   the fully-qualified name of the implementation class(es).
   8. The example should include the META-INF file required by the Service
   Provider API.

Again, overall this is really great!

Best regards,


On Wed, Apr 11, 2018 at 12:14 AM, Magesh Nandakumar <>

> Hi,
> We have posted KIP-285: Connect Rest Extension Plugin to add the ability to
> provide Rest Extensions to Connect Rest API.
> 285%3A+Connect+Rest+Extension+Plugin
> Please take a look. Your feedback is appreciated.
> Thanks,
> Magesh

Reply via email to