Hi Mickael,

Thanks for the KIP.
The motivation and solution makes sense to me.

Just one question:
If we could extend `closable` for Converter plugin, why don't we do that
for the "Unsupported Plugins" without close method?
I don't say we must do that in this KIP, but maybe you could add the reason
in the "rejected alternatives".

Thanks.
Luke

On Thu, Jan 25, 2024 at 3:46 PM Slathia p <slat...@votecgroup.com> wrote:

> Hi Team,
>
>
>
> Greetings,
>
>
>
> Apologies for the delay in reply as I was down with flu.
>
>
>
> We actually reached out to you for IT/ SAP/ Oracle/ Infor / Microsoft
> “VOTEC IT SERVICE PARTNERSHIP”  “IT SERVICE OUTSOURCING” “ “PARTNER SERVICE
> SUBCONTRACTING”
>
>
>
> We have very attractive newly introduce reasonably price PARTNER IT
> SERVICE ODC SUBCONTRACTING MODEL in USA, Philippines, India and Singapore
> etc with White Label Model.
>
>
>
> Our LOW COST IT SERVICE ODC MODEL eliminate the cost of expensive employee
> payroll, Help partner to get profit more than 50% on each project.. ..We
> really mean it.
>
>
>
> We are already working with platinum partner like NTT DATA, NEC Singapore,
> Deloitte, Hitachi consulting. ACCENTURE, Abeam Singapore etc.
>
>
>
> Are u keen to understand VOTEC IT SERVICE MODEL PARTNERSHIP offerings?
>
>
>
> Let us know your availability this week OR Next week?? We can arrange
> discussion with Partner Manager.
> > On 01/25/2024 9:56 AM +08 Tom Bentley <tbent...@redhat.com> wrote:
> >
> >
> > Hi Mickael,
> >
> > Thanks for the KIP! I can tell a lot of thought went into this. I have a
> > few comments, but they're all pretty trivial and aimed at making the
> > correct use of this API clearer to implementors.
> >
> > 1. Configurable and Reconfigurable both use a verb in the imperative mood
> > for their method name. Monitorable doesn't, which initially seemed a bit
> > inconsistent to me, but I think your intention is to allow plugins to
> > merely retain a reference to the PluginMetrics, and allow registering
> > metrics at any later point? If that's the case you could add something
> like
> > "Plugins can register and unregister metrics using the given
> PluginMetrics
> > at any point in their lifecycle prior to their close method being called"
> > to the javadoc to make clear how this can be used.
> > 2. I assume PluginMetrics will be thread-safe? We should document that as
> > part of the contract.
> > 3. I don't think IAE is quite right for duplicate metrics. In this case
> the
> > arguments themselves are fine, it's the current state of the
> PluginMetrics
> > which causes the problem. If the earlier point about plugins being
> allowed
> > to register and unregister metrics at any point is correct then this
> > exception could be thrown after configuration time. That being the case I
> > think a new exception type might be clearer.
> > 4. You define some semantics for PluginMetrics.close(): It might be a
> good
> > idea to override the inherited method and add that as javadoc.
> > 5. You say "It will be the responsibility of the plugin that creates
> > metrics to call close() of the PluginMetrics instance they were given to
> > remove their metrics." But you don't provide any guidance to users about
> > when they need to do this. I guess that they should be doing this in
> their
> > plugin's close method (and that's why you're only adding Monitorable to
> > plugins which implement Closeable and AutoCloseable), but if that's the
> > case then let's say so in the Javadoc.
> >
> > Thanks again,
> >
> > Tom
> >
> > On Wed, 13 Dec 2023 at 06:09, Mickael Maison <mickael.mai...@gmail.com>
> > wrote:
> >
> > > Hi,
> > >
> > > I've not received any feedback since I updated the KIP.
> > > I'll wait a few more days and if there's no further feedback I'll
> start a
> > > vote.
> > >
> > > Thanks,
> > > Mickael
> > >
> > > On Tue, Nov 7, 2023 at 6:29 PM Mickael Maison <
> mickael.mai...@gmail.com>
> > > wrote:
> > > >
> > > > Hi,
> > > >
> > > > A bit later than initially planned I finally restarted looking at
> this
> > > KIP.
> > > >
> > > > I made a few significant changes to the proposed APIs.
> > > > I considered Chris' idea of automatically removing metrics but
> decided
> > > > to leave that responsibility to the plugins. All plugins that will
> > > > support this feature have close/stop methods and will need to close
> > > > their PluginMetrics instance. This simplifies the required changes a
> > > > lot and I think it's not a big ask on users implementing plugins.
> > > >
> > > > Thanks,
> > > > Mickael
> > > >
> > > > On Tue, May 30, 2023 at 11:32 AM Mickael Maison
> > > > <mickael.mai...@gmail.com> wrote:
> > > > >
> > > > > Hi Jorge,
> > > > >
> > > > > There are a few issues with the current proposal. Once 3.5 is out,
> I
> > > > > plan to start looking at this again.
> > > > >
> > > > > Thanks,
> > > > > Mickael
> > > > >
> > > > > On Mon, May 15, 2023 at 3:19 PM Jorge Esteban Quilcate Otoya
> > > > > <quilcate.jo...@gmail.com> wrote:
> > > > > >
> > > > > > Hi Mickael,
> > > > > >
> > > > > > Just to check the status of this KIP as it looks very useful. I
> can
> > > see how
> > > > > > new Tiered Storage interfaces and plugins may benefit from this.
> > > > > >
> > > > > > Cheers,
> > > > > > Jorge.
> > > > > >
> > > > > > On Mon, 6 Feb 2023 at 23:00, Chris Egerton
> <chr...@aiven.io.invalid>
> > > wrote:
> > > > > >
> > > > > > > Hi Mickael,
> > > > > > >
> > > > > > > I agree that adding a getter method for Monitorable isn't
> great. A
> > > few
> > > > > > > alternatives come to mind:
> > > > > > >
> > > > > > > 1. Introduce a new ConfiguredInstance<T> (name subject to
> change)
> > > interface
> > > > > > > that wraps an instance of type T, but also contains a getter
> > > method for any
> > > > > > > PluginMetrics instances that the plugin was instantiated with
> > > (which may
> > > > > > > return null either if no PluginMetrics instance could be
> created
> > > for the
> > > > > > > plugin, or if it did not implement the Monitorable interface).
> > > This can be
> > > > > > > the return type of the new
> AbstractConfig::getConfiguredInstance
> > > variants.
> > > > > > > It would give us room to move forward with other
> > > plugin-for-your-plugin
> > > > > > > style interfaces without cluttering things up with getter
> methods.
> > > We could
> > > > > > > even add a close method to this interface which would handle
> > > cleanup of all
> > > > > > > extra resources allocated for the plugin by the runtime, and
> even
> > > possibly
> > > > > > > the plugin itself.
> > > > > > >
> > > > > > > 2. Break out the instantiation logic into two separate steps.
> The
> > > first
> > > > > > > step, creating a PluginMetrics instance, can be either private
> or
> > > public
> > > > > > > API. The second step, providing that PluginMetrics instance to
> a
> > > > > > > newly-created object, can be achieved with a small tweak of the
> > > proposed
> > > > > > > new methods for the AbstractConfig class; instead of accepting
> a
> > > Metrics
> > > > > > > instance, they would now accept a PluginMetrics instance. For
> the
> > > first
> > > > > > > step, we might even introduce a new CloseablePluginMetrics
> > > interface which
> > > > > > > would be the return type of whatever method we use to create
> the
> > > > > > > PluginMetrics instance. We can track that
> CloseablePluginMetrics
> > > instance
> > > > > > > in tandem with the plugin it applies to, and close it when
> we're
> > > done with
> > > > > > > the plugin.
> > > > > > >
> > > > > > > I know that this adds some complexity to the API design and
> some
> > > > > > > bookkeeping responsibilities for our implementation, but I
> can't
> > > shake the
> > > > > > > feeling that if we don't feel comfortable taking on the
> > > responsibility to
> > > > > > > clean up these resources ourselves, it's not really fair to ask
> > > users to
> > > > > > > handle it for us instead. And with the case of Connect,
> sometimes
> > > Connector
> > > > > > > or Task instances that are scheduled for shutdown block for a
> > > while, at
> > > > > > > which point we abandon them and bring up new instances in their
> > > place; it'd
> > > > > > > be nice to have a way to forcibly clear out all the metrics
> > > allocated by
> > > > > > > that Connector or Task instance before bringing up a new one,
> in
> > > order to
> > > > > > > prevent issues due to naming conflicts.
> > > > > > >
> > > > > > > Regardless, and whether or not it ends up being relevant to
> this
> > > KIP, I'd
> > > > > > > love to see a new Converter::close method. It's irked me for
> quite
> > > a while
> > > > > > > that we don't have one already.
> > > > > > >
> > > > > > > Cheers,
> > > > > > >
> > > > > > > Chris
> > > > > > >
> > > > > > > On Mon, Feb 6, 2023 at 1:50 PM Mickael Maison <
> > > mickael.mai...@gmail.com>
> > > > > > > wrote:
> > > > > > >
> > > > > > > > Hi Chris,
> > > > > > > >
> > > > > > > > I envisioned plugins to be responsible for closing the
> > > PluginMetrics
> > > > > > > > instance. This is mostly important for Connect connector
> plugins
> > > as
> > > > > > > > they can be closed while the runtime keeps running (and
> keeps its
> > > > > > > > Metrics instance). As far as I can tell, other plugins should
> > > only be
> > > > > > > > closed when their runtime closes, so we should not be leaking
> > > metrics
> > > > > > > > even if those don't explicitly call close().
> > > > > > > >
> > > > > > > > For Connect plugin, as you said, it would be nice to
> > > automatically
> > > > > > > > close their associated PluginMetrics rather than relying on
> user
> > > > > > > > logic. The issue is that with the current API there's no way
> to
> > > > > > > > retrieve the PluginMetrics instance once it's passed to the
> > > plugin.
> > > > > > > > I'm not super keen on having a getter method on the
> Monitorable
> > > > > > > > interface and tracking PluginMetrics instances associated
> with
> > > each
> > > > > > > > plugin would require a lot of changes. I just noticed
> Converter
> > > does
> > > > > > > > not have a close() method so it's problematic for that type
> of
> > > plugin.
> > > > > > > > The other Connect plugins all have close() or stop()
> methods. I
> > > wonder
> > > > > > > > if the simplest is to make Converter extend Closeable. WDYT?
> > > > > > > >
> > > > > > > > Thanks,
> > > > > > > > Mickael
> > > > > > > >
> > > > > > > > On Mon, Feb 6, 2023 at 6:39 PM Mickael Maison <
> > > mickael.mai...@gmail.com>
> > > > > > > > wrote:
> > > > > > > > >
> > > > > > > > > Hi Yash,
> > > > > > > > >
> > > > > > > > > I added a sentence to the sensor() method mentioning the
> > > sensor name
> > > > > > > > > must only be unique per plugin. Regarding having getters
> for
> > > sensors
> > > > > > > > > and metrics I considered this not strictly necessary as I
> > > expect the
> > > > > > > > > metrics logic in most plugins to be relatively simple. If
> you
> > > have a
> > > > > > > > > use case that would benefit from these methods, let me
> know I
> > > will
> > > > > > > > > reconsider.
> > > > > > > > >
> > > > > > > > > Thanks,
> > > > > > > > > Mickael
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > On Fri, Feb 3, 2023 at 9:16 AM Yash Mayya <
> > > yash.ma...@gmail.com>
> > > > > > > wrote:
> > > > > > > > > >
> > > > > > > > > > Hi Mickael,
> > > > > > > > > >
> > > > > > > > > > Thanks for the updates.
> > > > > > > > > >
> > > > > > > > > > > the PluginMetrics implementation will append a
> > > > > > > > > > > suffix to sensor names to unique identify
> > > > > > > > > > > the plugin (based on the class name and tags).
> > > > > > > > > >
> > > > > > > > > > Can we call this out explicitly in the KIP, since it is
> > > important to
> > > > > > > > avoid
> > > > > > > > > > clashes in sensor naming? Also, should we allow plugins
> to
> > > retrieve
> > > > > > > > sensors
> > > > > > > > > > from `PluginMetrics` if we can check / verify that they
> own
> > > the
> > > > > > > sensor
> > > > > > > > > > (based on the suffix)?
> > > > > > > > > >
> > > > > > > > > > Other than the above minor points, this looks good to me
> now!
> > > > > > > > > >
> > > > > > > > > > Thanks,
> > > > > > > > > > Yash
> > > > > > > > > >
> > > > > > > > > > On Fri, Feb 3, 2023 at 2:29 AM Chris Egerton
> > > <chr...@aiven.io.invalid
> > > > > > > >
> > > > > > > > > > wrote:
> > > > > > > > > >
> > > > > > > > > > > Hi Mickael,
> > > > > > > > > > >
> > > > > > > > > > > This is looking great. I have one small question left
> but
> > > I do not
> > > > > > > > consider
> > > > > > > > > > > it a blocker.
> > > > > > > > > > >
> > > > > > > > > > > What is the intended use case for
> PluginMetrics::close? To
> > > me at
> > > > > > > > least, it
> > > > > > > > > > > implies that plugin developers will be responsible for
> > > invoking
> > > > > > > that
> > > > > > > > method
> > > > > > > > > > > themselves in order to clean up metrics that they've
> > > created, but
> > > > > > > > wouldn't
> > > > > > > > > > > we want the runtime (i.e., KafkaProducer class, Connect
> > > framework,
> > > > > > > > etc.) to
> > > > > > > > > > > handle that automatically when the resource that the
> > > plugin applies
> > > > > > > > to is
> > > > > > > > > > > closed?
> > > > > > > > > > >
> > > > > > > > > > > Cheers,
> > > > > > > > > > >
> > > > > > > > > > > Chris
> > > > > > > > > > >
> > > > > > > > > > > On Thu, Jan 26, 2023 at 10:22 AM Mickael Maison <
> > > > > > > > mickael.mai...@gmail.com>
> > > > > > > > > > > wrote:
> > > > > > > > > > >
> > > > > > > > > > > > Hi Yash,
> > > > > > > > > > > >
> > > > > > > > > > > > 1) To avoid conflicts with other sensors, the
> > > PluginMetrics
> > > > > > > > > > > > implementation will append a suffix to sensor names
> to
> > > unique
> > > > > > > > identify
> > > > > > > > > > > > the plugin (based on the class name and tags). Also I
> > > changed the
> > > > > > > > > > > > semantics of the sensor() method to only create
> sensors
> > > > > > > > (originally it
> > > > > > > > > > > > was get or create). If a sensor with the same name
> > > already
> > > > > > > exists,
> > > > > > > > the
> > > > > > > > > > > > method will throw.
> > > > > > > > > > > > 2) Tags will be automatically added to metrics and
> > > sensors to
> > > > > > > > unique
> > > > > > > > > > > > identify the plugin. For Connect plugins, the
> connector
> > > name,
> > > > > > > task
> > > > > > > > id
> > > > > > > > > > > > and alias can be added if available. The class
> > > implementing
> > > > > > > > > > > > PluginMetrics will be similar to ConnectMetrics, as
> in
> > > it will
> > > > > > > > provide
> > > > > > > > > > > > a simplified API wrapping Metrics. I'm planning to
> use
> > > > > > > > PluginMetrics
> > > > > > > > > > > > for Connect plugin too and should not need to
> interact
> > > with
> > > > > > > > > > > > ConnectMetrics.
> > > > > > > > > > > > 3) Right, I fixed the last rejected alternative.
> > > > > > > > > > > >
> > > > > > > > > > > > Thanks,
> > > > > > > > > > > > Mickael
> > > > > > > > > > > >
> > > > > > > > > > > > On Thu, Jan 26, 2023 at 4:04 PM Mickael Maison <
> > > > > > > > mickael.mai...@gmail.com
> > > > > > > > > > > >
> > > > > > > > > > > > wrote:
> > > > > > > > > > > > >
> > > > > > > > > > > > > Hi Federico,
> > > > > > > > > > > > >
> > > > > > > > > > > > > - The metricName() method does not register
> anything,
> > > it just
> > > > > > > > builds a
> > > > > > > > > > > > > MetricName instance which is just a container
> holding
> > > a name,
> > > > > > > > group,
> > > > > > > > > > > > > description and tags for a metric. Each time it is
> > > called, it
> > > > > > > > returns
> > > > > > > > > > > > > a new instance. If called with the same arguments,
> the
> > > returned
> > > > > > > > value
> > > > > > > > > > > > > will be equal.
> > > > > > > > > > > > > - Initially I just copied the API of Metrics. I
> made
> > > some small
> > > > > > > > > > > > > changes so the metric and sensor methods are a bit
> > > more similar
> > > > > > > > > > > > > - Good catch! I fixed the example.
> > > > > > > > > > > > >
> > > > > > > > > > > > > Thanks,
> > > > > > > > > > > > > Mickael
> > > > > > > > > > > > >
> > > > > > > > > > > > >
> > > > > > > > > > > > > On Thu, Jan 26, 2023 at 3:54 PM Mickael Maison <
> > > > > > > > > > > mickael.mai...@gmail.com>
> > > > > > > > > > > > wrote:
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > Hi Chris,
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > 1) I updated the KIP to only mention the
> interface.
> > > > > > > > > > > > > > 2) This was a mistake. I've added
> ReplicationPolicy
> > > to the
> > > > > > > > list of
> > > > > > > > > > > > plugins.
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > Thanks,
> > > > > > > > > > > > > > Mickael
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > On Tue, Jan 24, 2023 at 11:16 AM Yash Mayya <
> > > > > > > > yash.ma...@gmail.com>
> > > > > > > > > > > > wrote:
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > Hi Mickael,
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > Thanks for the updated KIP, this is looking
> really
> > > good! I
> > > > > > > > had a
> > > > > > > > > > > > couple
> > > > > > > > > > > > > > > more questions -
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > 1) Sensor names need to be unique across all
> > > groups for a
> > > > > > > > `Metrics`
> > > > > > > > > > > > > > > instance. How are we planning to avoid naming
> > > clashes (both
> > > > > > > > between
> > > > > > > > > > > > > > > different plugins as well as with pre-defined
> > > sensors)?
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > 2) Connect has a `ConnectMetrics` wrapper
> around
> > > `Metrics`
> > > > > > > > via
> > > > > > > > > > > which
> > > > > > > > > > > > > > > rebalance / worker / connector / task metrics
> are
> > > recorded.
> > > > > > > > Could
> > > > > > > > > > > you
> > > > > > > > > > > > > > > please elaborate in the KIP how the plugin
> metrics
> > > for
> > > > > > > > connectors /
> > > > > > > > > > > > tasks
> > > > > > > > > > > > > > > will inter-operate with this?
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > Another minor point is that the third rejected
> > > alternative
> > > > > > > > appears
> > > > > > > > > > > > to be an
> > > > > > > > > > > > > > > incomplete sentence?
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > Thanks,
> > > > > > > > > > > > > > > Yash
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > On Fri, Jan 13, 2023 at 10:56 PM Mickael
> Maison <
> > > > > > > > > > > > mickael.mai...@gmail.com>
> > > > > > > > > > > > > > > wrote:
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > Hi,
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > I've updated the KIP based on the feedback.
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > Now instead of receiving a Metrics instance,
> > > plugins get
> > > > > > > > access
> > > > > > > > > > > to
> > > > > > > > > > > > > > > > PluginMetrics that exposes a much smaller
> API.
> > > I've
> > > > > > > > removed the
> > > > > > > > > > > > > > > > special handling for connectors and tasks and
> > > they must
> > > > > > > now
> > > > > > > > > > > > implement
> > > > > > > > > > > > > > > > the Monitorable interface as well to use this
> > > feature.
> > > > > > > > Finally
> > > > > > > > > > > the
> > > > > > > > > > > > > > > > goal is to allow all plugins (apart from
> metrics
> > > > > > > > reporters) to
> > > > > > > > > > > use
> > > > > > > > > > > > > > > > this feature. I've listed them all (there are
> > > over 30
> > > > > > > > pluggable
> > > > > > > > > > > > APIs)
> > > > > > > > > > > > > > > > but I've not added the list in the KIP. The
> > > reason is
> > > > > > > that
> > > > > > > > new
> > > > > > > > > > > > plugins
> > > > > > > > > > > > > > > > could be added in the future and instead I'll
> > > focus on
> > > > > > > > adding
> > > > > > > > > > > > support
> > > > > > > > > > > > > > > > in all the place that instantiate classes.
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > Thanks,
> > > > > > > > > > > > > > > > Mickael
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > On Tue, Jan 10, 2023 at 7:00 PM Mickael
> Maison <
> > > > > > > > > > > > mickael.mai...@gmail.com>
> > > > > > > > > > > > > > > > wrote:
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > Hi Chris/Yash,
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > Thanks for taking a look and providing
> > > feedback.
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > 1) Yes you're right, when using
> incompatible
> > > version,
> > > > > > > > metrics()
> > > > > > > > > > > > would
> > > > > > > > > > > > > > > > > trigger NoSuchMethodError. I thought using
> the
> > > context
> > > > > > > > to pass
> > > > > > > > > > > > the
> > > > > > > > > > > > > > > > > Metrics object would be more idiomatic for
> > > Connect but
> > > > > > > > maybe
> > > > > > > > > > > > > > > > > implementing Monitorable would be simpler.
> It
> > > would
> > > > > > > also
> > > > > > > > allow
> > > > > > > > > > > > other
> > > > > > > > > > > > > > > > > Connect plugins (transformations,
> converters,
> > > etc) to
> > > > > > > > register
> > > > > > > > > > > > > > > > > metrics. So I'll make that change.
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > 2) As mentioned in the rejected
> alternatives, I
> > > > > > > > considered
> > > > > > > > > > > > having a
> > > > > > > > > > > > > > > > > PluginMetrics class/interface with a
> limited
> > > API. But
> > > > > > > > since
> > > > > > > > > > > > Metrics is
> > > > > > > > > > > > > > > > > part of the public API, I thought it would
> be
> > > simpler
> > > > > > > to
> > > > > > > > reuse
> > > > > > > > > > > > it.
> > > > > > > > > > > > > > > > > That said you bring interesting points so I
> > > took
> > > > > > > another
> > > > > > > > look
> > > > > > > > > > > > today.
> > > > > > > > > > > > > > > > > It's true that the Metrics API is pretty
> > > complex and
> > > > > > > most
> > > > > > > > > > > > methods are
> > > > > > > > > > > > > > > > > useless for plugin authors. I'd expect most
> > > use cases
> > > > > > > > only need
> > > > > > > > > > > > one
> > > > > > > > > > > > > > > > > addMetric and one sensor methods. Rather
> than
> > > > > > > subclassing
> > > > > > > > > > > > Metrics, I
> > > > > > > > > > > > > > > > > think a delegate/forwarding pattern might
> work
> > > well
> > > > > > > > here. A
> > > > > > > > > > > > > > > > > PluginMetric class would forward its
> method to
> > > the
> > > > > > > > Metrics
> > > > > > > > > > > > instance
> > > > > > > > > > > > > > > > > and could perform some basic validations
> such
> > > as only
> > > > > > > > letting
> > > > > > > > > > > > plugins
> > > > > > > > > > > > > > > > > delete metrics they created, or
> automatically
> > > injecting
> > > > > > > > tags
> > > > > > > > > > > > with the
> > > > > > > > > > > > > > > > > class name for example.
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > 3) Between the clients, brokers, streams
> and
> > > connect,
> > > > > > > > Kafka has
> > > > > > > > > > > > quite
> > > > > > > > > > > > > > > > > a lot! In practice I think registering
> metrics
> > > should
> > > > > > > be
> > > > > > > > > > > > beneficial
> > > > > > > > > > > > > > > > > for all plugins, I think the only exception
> > > would be
> > > > > > > > metrics
> > > > > > > > > > > > reporters
> > > > > > > > > > > > > > > > > (which are instantiated before the Metrics
> > > object).
> > > > > > > I'll
> > > > > > > > try to
> > > > > > > > > > > > build
> > > > > > > > > > > > > > > > > a list of all plugin types and add that to
> the
> > > KIP.
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > Thanks,
> > > > > > > > > > > > > > > > > Mickael
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > On Tue, Dec 27, 2022 at 4:54 PM Chris
> Egerton
> > > > > > > > > > > > <chr...@aiven.io.invalid>
> > > > > > > > > > > > > > > > wrote:
> > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > Hi Yash,
> > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > Yes, a default no-op is exactly what I
> had
> > > in mind
> > > > > > > > should the
> > > > > > > > > > > > > > > > Connector and
> > > > > > > > > > > > > > > > > > Task classes implement the Monitorable
> > > interface.
> > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > Cheers,
> > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > Chris
> > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > On Tue, Dec 20, 2022 at 2:46 AM Yash
> Mayya <
> > > > > > > > > > > > yash.ma...@gmail.com>
> > > > > > > > > > > > > > > > wrote:
> > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > Hi Mickael,
> > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > Thanks for creating this KIP, this
> will be
> > > a super
> > > > > > > > useful
> > > > > > > > > > > > feature to
> > > > > > > > > > > > > > > > > > > enhance existing connectors in the
> Kafka
> > > Connect
> > > > > > > > ecosystem.
> > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > I have some similar concerns to the
> ones
> > > that Chris
> > > > > > > > has
> > > > > > > > > > > > outlined
> > > > > > > > > > > > > > > > above,
> > > > > > > > > > > > > > > > > > > especially with regard to directly
> exposing
> > > > > > > Connect's
> > > > > > > > > > > > Metrics object
> > > > > > > > > > > > > > > > to
> > > > > > > > > > > > > > > > > > > plugins. I believe it would be a lot
> > > friendlier to
> > > > > > > > > > > > developers if we
> > > > > > > > > > > > > > > > instead
> > > > > > > > > > > > > > > > > > > exposed wrapper methods in the context
> > > classes -
> > > > > > > > such as
> > > > > > > > > > > one
> > > > > > > > > > > > for
> > > > > > > > > > > > > > > > > > > registering a new metric, one for
> > > recording metric
> > > > > > > > values
> > > > > > > > > > > > and so on.
> > > > > > > > > > > > > > > > This
> > > > > > > > > > > > > > > > > > > would also have the added benefit of
> > > minimizing the
> > > > > > > > surface
> > > > > > > > > > > > area for
> > > > > > > > > > > > > > > > > > > potential misuse by custom plugins.
> > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > for connectors and tasks they should
> > > handle the
> > > > > > > > > > > > > > > > > > > > metrics() method returning null when
> > > deployed on
> > > > > > > > > > > > > > > > > > > > an older runtime.
> > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > I believe this won't be the case, and
> > > instead
> > > > > > > > they'll need
> > > > > > > > > > > > to handle
> > > > > > > > > > > > > > > > a
> > > > > > > > > > > > > > > > > > > `NoSuchMethodError` right? This is
> similar
> > > to
> > > > > > > > previous KIPs
> > > > > > > > > > > > that
> > > > > > > > > > > > > > > > added
> > > > > > > > > > > > > > > > > > > methods to connector context classes
> and
> > > will arise
> > > > > > > > due to
> > > > > > > > > > > an
> > > > > > > > > > > > > > > > > > > incompatibility between the
> `connect-api`
> > > > > > > dependency
> > > > > > > > that a
> > > > > > > > > > > > plugin
> > > > > > > > > > > > > > > > will be
> > > > > > > > > > > > > > > > > > > compiled against versus what it will
> > > actually get
> > > > > > > at
> > > > > > > > > > > runtime.
> > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > Hi Chris,
> > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > WDYT about having the Connector and
> Task
> > > classes
> > > > > > > > > > > > > > > > > > > > implement the Monitorable interface,
> > > both for
> > > > > > > > > > > > > > > > > > > > consistency's sake, and to prevent
> > > classloading
> > > > > > > > > > > > > > > > > > > > headaches?
> > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > Are you suggesting that the framework
> > > should
> > > > > > > > configure
> > > > > > > > > > > > connectors /
> > > > > > > > > > > > > > > > tasks
> > > > > > > > > > > > > > > > > > > with a Metrics instance during their
> > > startup rather
> > > > > > > > than
> > > > > > > > > > > the
> > > > > > > > > > > > > > > > connector /
> > > > > > > > > > > > > > > > > > > task asking the framework to provide
> one?
> > > In this
> > > > > > > > case, I'm
> > > > > > > > > > > > guessing
> > > > > > > > > > > > > > > > you're
> > > > > > > > > > > > > > > > > > > envisioning a default no-op
> implementation
> > > for the
> > > > > > > > metrics
> > > > > > > > > > > > > > > > configuration
> > > > > > > > > > > > > > > > > > > method rather than the framework
> having to
> > > handle
> > > > > > > > the case
> > > > > > > > > > > > where the
> > > > > > > > > > > > > > > > > > > connector was compiled against an older
> > > version of
> > > > > > > > Connect
> > > > > > > > > > > > right?
> > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > Thanks,
> > > > > > > > > > > > > > > > > > > Yash
> > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > On Wed, Nov 30, 2022 at 1:38 AM Chris
> > > Egerton
> > > > > > > > > > > > > > > > <chr...@aiven.io.invalid>
> > > > > > > > > > > > > > > > > > > wrote:
> > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > Hi Mickael,
> > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > Thanks for the KIP! This seems
> > > especially useful
> > > > > > > to
> > > > > > > > > > > reduce
> > > > > > > > > > > > the
> > > > > > > > > > > > > > > > > > > > implementation cost and divergence in
> > > behavior
> > > > > > > for
> > > > > > > > > > > > connectors that
> > > > > > > > > > > > > > > > choose
> > > > > > > > > > > > > > > > > > > > to publish their own metrics.
> > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > My initial thoughts:
> > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > 1. Are you certain that the default
> > > > > > > implementation
> > > > > > > > of the
> > > > > > > > > > > > "metrics"
> > > > > > > > > > > > > > > > > > > method
> > > > > > > > > > > > > > > > > > > > for the various connector/task
> context
> > > classes
> > > > > > > > will be
> > > > > > > > > > > > used on
> > > > > > > > > > > > > > > > older
> > > > > > > > > > > > > > > > > > > > versions of the Connect runtime? My
> > > understanding
> > > > > > > > was
> > > > > > > > > > > that
> > > > > > > > > > > > a
> > > > > > > > > > > > > > > > > > > > NoSuchMethodError (or some similar
> > > classloading
> > > > > > > > > > > exception)
> > > > > > > > > > > > would be
> > > > > > > > > > > > > > > > > > > thrown
> > > > > > > > > > > > > > > > > > > > in that case. If that turns out to be
> > > true, WDYT
> > > > > > > > about
> > > > > > > > > > > > having the
> > > > > > > > > > > > > > > > > > > Connector
> > > > > > > > > > > > > > > > > > > > and Task classes implement the
> > > Monitorable
> > > > > > > > interface,
> > > > > > > > > > > both
> > > > > > > > > > > > for
> > > > > > > > > > > > > > > > > > > > consistency's sake, and to prevent
> > > classloading
> > > > > > > > > > > headaches?
> > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > 2. Although I agree that
> administrators
> > > should be
> > > > > > > > careful
> > > > > > > > > > > > about
> > > > > > > > > > > > > > > > which
> > > > > > > > > > > > > > > > > > > > plugins they run on their clients,
> > > Connect
> > > > > > > > clusters,
> > > > > > > > > > > etc.,
> > > > > > > > > > > > I
> > > > > > > > > > > > > > > > wonder if
> > > > > > > > > > > > > > > > > > > > there might still be value in
> wrapping
> > > the
> > > > > > > Metrics
> > > > > > > > class
> > > > > > > > > > > > behind a
> > > > > > > > > > > > > > > > new
> > > > > > > > > > > > > > > > > > > > interface, for a few reasons:
> > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > >   a. Developers and administrators
> may
> > > still make
> > > > > > > > > > > > mistakes, and if
> > > > > > > > > > > > > > > > we can
> > > > > > > > > > > > > > > > > > > > reduce the blast radius by preventing
> > > plugins
> > > > > > > > from, e.g.,
> > > > > > > > > > > > closing
> > > > > > > > > > > > > > > > the
> > > > > > > > > > > > > > > > > > > > Metrics instance we give them, it
> may be
> > > worth
> > > > > > > it.
> > > > > > > > This
> > > > > > > > > > > > could also
> > > > > > > > > > > > > > > > be
> > > > > > > > > > > > > > > > > > > > accomplished by forbidding plugins
> from
> > > invoking
> > > > > > > > these
> > > > > > > > > > > > methods, and
> > > > > > > > > > > > > > > > > > > giving
> > > > > > > > > > > > > > > > > > > > them a subclass of Metrics that
> throws
> > > > > > > > > > > > > > > > UnsupportedOperationException from
> > > > > > > > > > > > > > > > > > > > these methods.
> > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > >   b. If we don't know of any
> reasonable
> > > use cases
> > > > > > > > for
> > > > > > > > > > > > closing the
> > > > > > > > > > > > > > > > > > > instance,
> > > > > > > > > > > > > > > > > > > > adding new reporters, removing
> metrics,
> > > etc., it
> > > > > > > > can make
> > > > > > > > > > > > the API
> > > > > > > > > > > > > > > > cleaner
> > > > > > > > > > > > > > > > > > > > and easier for developers to grok if
> > > they don't
> > > > > > > > even have
> > > > > > > > > > > > the
> > > > > > > > > > > > > > > > option to
> > > > > > > > > > > > > > > > > > > do
> > > > > > > > > > > > > > > > > > > > any of those things.
> > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > >   c. Interoperability between plugins
> > > that
> > > > > > > > implement
> > > > > > > > > > > > Monitorable
> > > > > > > > > > > > > > > > and
> > > > > > > > > > > > > > > > > > > their
> > > > > > > > > > > > > > > > > > > > runtime becomes complicated. For
> > > example, a
> > > > > > > > connector may
> > > > > > > > > > > > be built
> > > > > > > > > > > > > > > > > > > against
> > > > > > > > > > > > > > > > > > > > a version of Kafka that introduces
> new
> > > methods
> > > > > > > for
> > > > > > > > the
> > > > > > > > > > > > Metrics
> > > > > > > > > > > > > > > > class,
> > > > > > > > > > > > > > > > > > > which
> > > > > > > > > > > > > > > > > > > > introduces risks of incompatibility
> if
> > > its
> > > > > > > > developer
> > > > > > > > > > > > chooses to
> > > > > > > > > > > > > > > > take
> > > > > > > > > > > > > > > > > > > > advantage of these methods without
> > > realizing that
> > > > > > > > they
> > > > > > > > > > > > will not be
> > > > > > > > > > > > > > > > > > > > available on Connect runtimes built
> > > against an
> > > > > > > > older
> > > > > > > > > > > > version of
> > > > > > > > > > > > > > > > Kafka.
> > > > > > > > > > > > > > > > > > > With
> > > > > > > > > > > > > > > > > > > > a wrapper interface, we at least
> have a
> > > chance to
> > > > > > > > isolate
> > > > > > > > > > > > these
> > > > > > > > > > > > > > > > issues so
> > > > > > > > > > > > > > > > > > > > that the Metrics class can be
> expanded
> > > without
> > > > > > > > adding
> > > > > > > > > > > > footguns for
> > > > > > > > > > > > > > > > > > > plugins
> > > > > > > > > > > > > > > > > > > > that implement Monitorable, and to
> call
> > > out
> > > > > > > > potential
> > > > > > > > > > > > compatibility
> > > > > > > > > > > > > > > > > > > > problems in documentation more
> clearly
> > > if/when we
> > > > > > > > do
> > > > > > > > > > > > expand the
> > > > > > > > > > > > > > > > wrapper
> > > > > > > > > > > > > > > > > > > > interface.
> > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > 3. It'd be nice to see a list of
> exactly
> > > which
> > > > > > > > plugins
> > > > > > > > > > > > will be
> > > > > > > > > > > > > > > > able to
> > > > > > > > > > > > > > > > > > > take
> > > > > > > > > > > > > > > > > > > > advantage of the new Monitorable
> > > interface.
> > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > Looking forward to your thoughts!
> > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > Cheers,
> > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > Chris
> > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > On Mon, Nov 7, 2022 at 11:42 AM
> Mickael
> > > Maison <
> > > > > > > > > > > > > > > > mickael.mai...@gmail.com
> > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > wrote:
> > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > > Hi,
> > > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > > I have opened KIP-877 to make it
> easy
> > > for
> > > > > > > > plugins and
> > > > > > > > > > > > connectors
> > > > > > > > > > > > > > > > to
> > > > > > > > > > > > > > > > > > > > > register their own metrics:
> > > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > >
> > > > > > >
> > >
> https://eu01.z.antigena.com/l/9lWv8kbU9CKs2LajwgfKF~yMNQVM7rWRxYmYVNrHU_2nQbisTiXYZdowNfQ-NcgF1uai2lk-sv6hJASnbdr_gqVwyVae_~y-~oq5yQFgO_-IHD3UGDn3lsIyauAG2tG6giPJH-9yCYg3Hwe26sm7nep258qB6SNXRwpaVxbU3SaVTybfLQVvTn_uUlHKMhmVnpnc1dUnusK6x4j8JPPQQ1Ce~rrg-nsSLouHHMf0ewmpsFNy4BcbMaqHd4Y
> > > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > > Let me know if you have any
> feedback or
> > > > > > > > suggestions.
> > > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > > Thanks,
> > > > > > > > > > > > > > > > > > > > > Mickael
> > > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > >
> > > > > > >
> > >
> > >
>
>

Reply via email to