Hi all,

I'd like to reboot the discussion on KIP-891:
https://cwiki.apache.org/confluence/display/KAFKA/KIP-891%3A+Running+multiple+versions+of+Connector+plugins

I've made some changes, most notably:

1. Specifying versions for all plugins in Connector configs
(converters, header converters, transforms, and predicates) not just
connectors & tasks
2. Specifying a range of versions instead of an exact match
3. New metrics to observe what versions are in-use

Thanks to Snehashis for the original KIP idea!

Thanks,
Greg

On Tue, Jan 2, 2024 at 11:49 AM Greg Harris <greg.har...@aiven.io> wrote:
>
> Hi Snehashis,
>
> Thank you for the KIP! This is something I've wanted for a long time.
>
> I know the discussion has gone cold, are you still interested in
> pursuing this feature? I'll make time to review the KIP if you are
> still accepting comments.
>
> Thanks,
> Greg
>
> On Tue, Nov 22, 2022 at 12:29 PM Snehashis <snehashisp1...@gmail.com> wrote:
> >
> > Thanks for the points Sagar.
> >
> > > 1) Should we update the GET /connectors endpoint to include the version of
> > > the plugin that is running? It could be useful to figure out the version
> > of
> > > the plugin or I am assuming it gets returned by the expand=info call?
> >
> > I think this is good to have and possible future enhancement. The version
> > info will be present in the config of the connector if the user has
> > specified the version. Otherwise it is the latest version which the user
> > can find out from the connector-plugin endpoint. The information can be
> > introduced to the response of the GET /connectors endpoint itself, however
> > the most ideal way of doing this would be to get the currently running
> > instance of the connector and get the version directly from there. This is
> > slightly tricky as the connector could be running in a different node.
> > One way to do this would be to persist the version information in the
> > status backing store during instantiation of the connector. It requires
> > some more thought and since the version is part of the configs if provided
> > and evident otherwise, I have not included it in this KIP.
> >
> > > 2) I am not aware of this and hence asking, can 2 connectors with
> > different
> > > versions have the same name? Does the plugin isolation allow this? This
> > > could have a bearing when using the lifecycle endpoints for connectors
> > like
> > > DELETE etc.
> >
> > All connectors in a cluster need to have uniquire connector names
> > regardless of what version of the plugin the connector is running
> > underneath. This is something enforced by the connect runtime itself. All
> > connect CRUD operations are keyed on the connector name so there will not
> > be an issue.
> >
> > Regards
> > Snehashis
> >
> > On Tue, Nov 22, 2022 at 3:16 PM Sagar <sagarmeansoc...@gmail.com> wrote:
> >
> > > Hey Snehashsih,
> > >
> > > Thanks for the KIP. It looks like a very useful feature. Couple of
> > > small-ish points, let me know what you think:
> > >
> > > 1) Should we update the GET /connectors endpoint to include the version of
> > > the plugin that is running? It could be useful to figure out the version 
> > > of
> > > the plugin or I am assuming it gets returned by the expand=info call?
> > > 2) I am not aware of this and hence asking, can 2 connectors with 
> > > different
> > > versions have the same name? Does the plugin isolation allow this? This
> > > could have a bearing when using the lifecycle endpoints for connectors 
> > > like
> > > DELETE etc.
> > >
> > > Thanks!
> > > Sagar.
> > >
> > >
> > > On Tue, Nov 22, 2022 at 2:10 PM Ashwin <apan...@confluent.io.invalid>
> > > wrote:
> > >
> > > > Hi Snehasis,
> > > >
> > > > > IIUC (please correct me if I am wrong here), what you highlighted
> > > above,
> > > > is
> > > > a versioning scheme for a connector config for the same connector (and
> > > not
> > > > different versions of a connector plugin).
> > > >
> > > > Sorry for not being more precise in my wording -  I meant registering
> > > > versions of schema for connector config.
> > > >
> > > > Let's take the example of a fictional connector which uses a fictional
> > > AWS
> > > > service.
> > > >
> > > > Fictional Connector Config schema version:2.0
> > > > ---
> > > > {
> > > >   "$schema": "http://json-schema.org/draft-04/schema#";,
> > > >   "type": "object",
> > > >   "properties": {
> > > >     "name": {
> > > >       "type": "string"
> > > >     },
> > > >     "schema_version": {
> > > >       "type": "string"
> > > >     },
> > > >     "aws_access_key": {
> > > >       "type": "string"
> > > >     },
> > > >     "aws_secret_key": {
> > > >       "type": "string"
> > > >     }
> > > >   },
> > > >   "required": [
> > > >     "name",
> > > >     "schema_version",
> > > >     "aws_access_key",
> > > >     "aws_secret_key"
> > > >   ]
> > > > }
> > > >
> > > > Fictional Connector config schema version:3.0
> > > > ---
> > > > {
> > > >   "$schema": "http://json-schema.org/draft-04/schema#";,
> > > >   "type": "object",
> > > >   "properties": {
> > > >     "name": {
> > > >       "type": "string"
> > > >     },
> > > >     "schema_version": {
> > > >       "type": "string"
> > > >     },
> > > >     "iam_role": {
> > > >       "type": "string"
> > > >     }
> > > >   },
> > > >   "required": [
> > > >     "name",
> > > >     "schema_version",
> > > >     "iam_role"
> > > >   ]
> > > > }
> > > >
> > > > The connector which supports Fictional config schema 2.0  will validate
> > > the
> > > > access key and secret key.
> > > > Whereas a connector which supports config with schema version 3.0 will
> > > only
> > > > validate the IAM role.
> > > >
> > > > This is the alternative which I wanted to suggest. Each plugin will
> > > > register the schema versions of connector config which it supports.
> > > >
> > > > The plugin paths may be optionally different i.e  we don't have to
> > > > mandatorily add a new plugin path to support a new schema version.
> > > >
> > > > Thanks,
> > > > Ashwin
> > > >
> > > > On Tue, Nov 22, 2022 at 12:47 PM Snehashis <snehashisp1...@gmail.com>
> > > > wrote:
> > > >
> > > > > Thanks for the input Ashwin.
> > > > >
> > > > > > 1. Can you elaborate on the rejected alternatives ? Suppose 
> > > > > > connector
> > > > > > config is versioned and has a schema. Then a single plugin (whose
> > > > > > dependencies have not changed) can handle multiple config versions
> > > for
> > > > > the
> > > > > > same connector class.
> > > > >
> > > > > IIUC (please correct me if I am wrong here), what you highlighted
> > > above,
> > > > is
> > > > > a versioning scheme for a connector config for the same connector (and
> > > > not
> > > > > different versions of a connector plugin). That is a somewhat
> > > tangential
> > > > > problem. While it is definitely a useful feature to have, like a log 
> > > > > to
> > > > > check what changes were made over time to the config which might make
> > > it
> > > > > easier to do rollbacks, it is not the focus here. Here by version we
> > > mean
> > > > > to say what underlying version of the plugin should the given
> > > > configuration
> > > > > of the connector use. Perhaps it is better to change the name of the
> > > > > parameter from connector.version to connector.plugin.version or
> > > > > plugin.version if it was confusing. wdyt?
> > > > >
> > > > > >  2. Any plans to support assisted migration e.g if a user invokes
> > > "POST
> > > > > > connector/config?migrate=latest", the latest version __attempts__ to
> > > > > > transform the existing config to the newer version. This would
> > > require
> > > > > > adding a method like "boolean migrate(Version fromVersion)" to the
> > > > > > connector interface.
> > > > >
> > > > > This is an enhancement we can think of doing in future. Users can
> > > simply
> > > > do
> > > > > a PUT call with the updated config which has the updated version
> > > number.
> > > > > The assisted mode could be handy as the user does not need to know the
> > > > > config but beyond this it does not seem to justify its existence.
> > > > >
> > > > > Regards
> > > > > Snehashis
> > > > >
> > > > > On Tue, Nov 22, 2022 at 10:50 AM Ashwin <apan...@confluent.io.invalid>
> > > > > wrote:
> > > > >
> > > > > > Hi Snehasis,
> > > > > >
> > > > > > This is a really useful feature and thanks for initiating this
> > > > > discussion.
> > > > > >
> > > > > > I had the following questions -
> > > > > >
> > > > > >
> > > > > > 1. Can you elaborate on the rejected alternatives ? Suppose 
> > > > > > connector
> > > > > > config is versioned and has a schema. Then a single plugin (whose
> > > > > > dependencies have not changed) can handle multiple config versions
> > > for
> > > > > the
> > > > > > same connector class.
> > > > > >
> > > > > > 2. Any plans to support assisted migration e.g if a user invokes
> > > "POST
> > > > > > connector/config?migrate=latest", the latest version __attempts__ to
> > > > > > transform the existing config to the newer version. This would
> > > require
> > > > > > adding a method like "boolean migrate(Version fromVersion)" to the
> > > > > > connector interface.
> > > > > >
> > > > > > Thanks,
> > > > > > Ashwin
> > > > > >
> > > > > > On Mon, Nov 21, 2022 at 2:27 PM Snehashis <snehashisp1...@gmail.com>
> > > > > > wrote:
> > > > > >
> > > > > > > Hi all,
> > > > > > >
> > > > > > > I'd like to start a discussion thread on KIP-891: Running multiple
> > > > > > versions
> > > > > > > of a connector.
> > > > > > >
> > > > > > > The KIP aims to add the ability for the connect runtime to run
> > > > multiple
> > > > > > > versions of a connector.
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > > https://cwiki.apache.org/confluence/display/KAFKA/KIP-891%3A+Running+multiple+versions+of+a+connector
> > > > > > >
> > > > > > > Please take a look and let me know what you think.
> > > > > > >
> > > > > > > Thank you
> > > > > > > Snehashis Pal
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >

Reply via email to