Thanks!!

On Mon, Jan 9, 2017 at 12:18 PM, Eno Thereska <eno.there...@gmail.com>
wrote:

> Sure, updated the KIP for both.
>
> Thanks
> Eno
> > On 9 Jan 2017, at 19:23, Guozhang Wang <wangg...@gmail.com> wrote:
> >
> > Thanks Eno, a couple of follow-up comments:
> >
> > 1. About `sensor()` functions, could we rename them to `addSensor()` to
> be
> > consistent with other APIs? Also do we want to still add the "String
> > scopeName, String entityName, String operationName" parameters to enforce
> > the naming hierarchy or just let users to freely define their own Sensor
> > name?
> >
> > 2. About `removeSensor`: for users to remove their registered sensors,
> the
> > sensor name may not be known beforehand if they called `addLatencySensor`
> > etc where the sensor name is internally created, plus they may need to
> > remember the `Sensor` objects anyways in order to call its `recordXX()`
> > functions, so would it be better to change the parameter to just `Sensor`
> > instead of `String`?
> >
> >
> > Guozhang
> >
> >
> >
> >
> >
> > On Mon, Jan 9, 2017 at 10:13 AM, Eno Thereska <eno.there...@gmail.com>
> > wrote:
> >
> >> One hopefully final update to the KIP to re-add two methods for generic
> >> sensor creation. Also the interface should have been marked unstable
> from
> >> the beginning, so did that now.
> >>
> >> Thanks, and please vote if you haven't done so. The above changes
> >> shouldn't trigger a re-vote since they are more conservative than what
> was
> >> before.
> >> Eno
> >>> On 9 Jan 2017, at 10:31, Eno Thereska <eno.there...@gmail.com> wrote:
> >>>
> >>> Thanks Ismael, Damian, I have updated KIP to go with the conservative
> >> option.
> >>>
> >>> Eno
> >>>> On 9 Jan 2017, at 09:44, Ismael Juma <ism...@juma.me.uk> wrote:
> >>>>
> >>>> Thanks Eno.
> >>>>
> >>>> It is indeed a good point about additional classes that users would
> >> have to
> >>>> be able to construct in order to add metrics to a sensor. We have
> >> generally
> >>>> assumed those classes to be internal and have queued one of them
> >>>> (SimpleRate) for removal (KAFKA-4178). They are simple for the most
> >> part,
> >>>> as you said.
> >>>>
> >>>> Exposing the metrics (maybe call it simply `metrics` since that's the
> >> name
> >>>> we use in the consumer and producer instead of `readOnlyRegistry`?) is
> >> fine
> >>>> by me as the conservative option.
> >>>>
> >>>> If we think that access to the full registry is really important and
> >> others
> >>>> are fine with the current `Metrics` API, I won't stand in the way
> >> though.
> >>>>
> >>>> Ismael
> >>>>
> >>>> On Sun, Jan 8, 2017 at 8:45 PM, Eno Thereska <eno.there...@gmail.com>
> >> wrote:
> >>>>
> >>>>> I can see the point that all of a sudden exposing the internal
> Metrics
> >>>>> class might be too big a bite to take in this KIP, since the Metrics
> >> class
> >>>>> might have to be cleaned up further. I was perhaps naively assuming
> >> it's
> >>>>> good since it has been reviewed when it was first introduced into
> >> Kafka.
> >>>>> Furthermore, that class brings in a whole bunch of other stuff, such
> as
> >>>>> Min/Avg. They are all simple things, but others might argue
> >> differently.
> >>>>>
> >>>>> An intermediate alternative would be to not expose the Metrics class
> >> for
> >>>>> now. Users can still get a read-only Map of all the streams metrics,
> as
> >>>>> they do in the Producer/Consumer classes. Furthermore, we already
> have
> >>>>> helper functions to help users add throughput and latency metrics and
> >> that
> >>>>> could be a good enough step for now. So:
> >>>>>
> >>>>> - Metrics registry()
> >>>>> + public Map<MetricName, ? extends Metric> readOnlyRegistry()
> >>>>>
> >>>>> Ideally either vote on the previous approach or add a note to this
> >> discuss
> >>>>> thread please since we're getting close to the feature freeze
> deadline.
> >>>>>
> >>>>> Thanks
> >>>>> Eno
> >>>>>
> >>>>>> On 8 Jan 2017, at 15:06, Eno Thereska <eno.there...@gmail.com>
> wrote:
> >>>>>>
> >>>>>> Ismael,
> >>>>>>
> >>>>>> Based on the streams user demand for registering their sensors and
> >>>>> metrics we decided to expose the metrics registry. I'm not a fan of
> >>>>> replicating a ton of code and add yet another layer/interface that
> >> does the
> >>>>> same thing that the existing Metrics class and I think the methods
> are
> >>>>> pretty basic (e.g., we do need 'removeSensor').
> >>>>>>
> >>>>>> I can look into a subsequent JIRA to fix style issues such as your
> >> point
> >>>>> 4 (remove 'get') directly on the Metrics class.
> >>>>>>
> >>>>>> Thanks
> >>>>>> Eno
> >>>>>>
> >>>>>>
> >>>>>>> On 8 Jan 2017, at 14:42, Ismael Juma <ism...@juma.me.uk> wrote:
> >>>>>>>
> >>>>>>> Thanks for updating the KIP to include the Metrics API that we are
> >> now
> >>>>>>> exposing, very helpful! Looking at it, do we really want to expose
> >> it to
> >>>>>>> users? The API seems to have grown organically (as an internal API)
> >> and
> >>>>>>> doesn't look particularly user-friendly to me. Questions I have:
> >>>>>>>
> >>>>>>> 1. `metricName` and `sensor` have a huge number of overloads. We
> >> usually
> >>>>>>> try to avoid that in public APIs by using a class that encapsulates
> >> the
> >>>>>>> parameters. Also, `inactiveSensorExpirationTimeSeconds` doesn't
> make
> >>>>> sense
> >>>>>>> for clients since the thread that purges inactive sensors is only
> >>>>> enabled
> >>>>>>> in the broker.
> >>>>>>> 2. Do we want to expose `removeSensor`?
> >>>>>>> 3. Do we want to expose `addReporter`?
> >>>>>>> 4. We typically have methods without `get` as accessors, but here
> we
> >>>>> have
> >>>>>>> `getSensor` for the accessor and `sensor` is really
> >> `getOrCreateSensor`.
> >>>>>>> Maybe it's justified based the typical usage (but it would be good
> to
> >>>>>>> confirm)?
> >>>>>>> 5. I didn't understand the comment about why an interface wouldn't
> >>>>> work. If
> >>>>>>> it's a MetricsRegistry interface, it could live in the clients
> module
> >>>>>>> (outside Streams as you said), but that is not necessarily an issue
> >> as
> >>>>> far
> >>>>>>> as I can see.
> >>>>>>>
> >>>>>>> Thanks,
> >>>>>>> Ismael
> >>>>>>>
> >>>>>>> P.S. Here's the list of methods grouped and without javadoc to make
> >> it
> >>>>>>> easier to see what I mean:
> >>>>>>>
> >>>>>>> //metricName overloads
> >>>>>>> public MetricName metricName(String name, String group, String
> >>>>> description,
> >>>>>>> Map<String, String> tags);
> >>>>>>> public MetricName metricName(String name, String group, String
> >>>>> description);
> >>>>>>> public MetricName metricName(String name, String group);
> >>>>>>> public MetricName metricName(String name, String group, String
> >>>>> description,
> >>>>>>> String... keyValue);
> >>>>>>> public MetricName metricName(String name, String group, Map<String,
> >>>>> String>
> >>>>>>> tags);
> >>>>>>>
> >>>>>>> //sensor overloads
> >>>>>>> public Sensor sensor(String name);
> >>>>>>> public Sensor sensor(String name, Sensor.RecordLevel recordLevel);
> >>>>>>> public Sensor sensor(String name, Sensor... parents);
> >>>>>>> public Sensor sensor(String name, Sensor.RecordLevel recordLevel,
> >>>>> Sensor...
> >>>>>>> parents);
> >>>>>>> public synchronized Sensor sensor(String name, MetricConfig config,
> >>>>>>> Sensor... parents);
> >>>>>>> public synchronized Sensor sensor(String name, MetricConfig config,
> >>>>>>> Sensor.RecordLevel recordLevel, Sensor... parents);
> >>>>>>> public synchronized Sensor sensor(String name, MetricConfig config,
> >>>>>>> Sensor.RecordLevel recordLevel, Sensor... parents);
> >>>>>>> public synchronized Sensor sensor(String name, MetricConfig config,
> >> long
> >>>>>>> inactiveSensorExpirationTimeSeconds, Sensor.RecordLevel
> recordLevel,
> >>>>>>> Sensor... parents);
> >>>>>>>
> >>>>>>> public MetricConfig config();
> >>>>>>>
> >>>>>>> public Sensor getSensor(String name);
> >>>>>>>
> >>>>>>> public void removeSensor(String name);
> >>>>>>>
> >>>>>>> public void addMetric(MetricName metricName, Measurable
> measurable);
> >>>>>>> public synchronized void addMetric(MetricName metricName,
> >> MetricConfig
> >>>>>>> config, Measurable measurable);
> >>>>>>> public synchronized KafkaMetric removeMetric(MetricName
> metricName);
> >>>>>>>
> >>>>>>> public synchronized void addReporter(MetricsReporter reporter);
> >>>>>>>
> >>>>>>> public Map<MetricName, KafkaMetric> metrics();
> >>>>>>>
> >>>>>>> public KafkaMetric metric(MetricName metricName);
> >>>>>>>
> >>>>>>> On Sat, Jan 7, 2017 at 12:15 AM, Eno Thereska <
> >> eno.there...@gmail.com>
> >>>>>>> wrote:
> >>>>>>>
> >>>>>>>> Ok, I'll list all the methods in the Metrics class for completion.
> >> An
> >>>>>>>> interface won't work since it will have to reside outside of
> streams
> >>>>>>>> unfortunately.
> >>>>>>>>
> >>>>>>>> Thanks
> >>>>>>>> Eno
> >>>>>>>>> On 6 Jan 2017, at 23:54, Ismael Juma <ism...@juma.me.uk> wrote:
> >>>>>>>>>
> >>>>>>>>> Hi Guozhang,
> >>>>>>>>>
> >>>>>>>>> I understand the requirement and I don't have an issue with that.
> >> My
> >>>>>>>> point
> >>>>>>>>> is that the `Metrics` registry API is becoming public via this
> KIP
> >> so
> >>>>> we
> >>>>>>>>> should ensure that it's suitable. It may make sense to introduce
> an
> >>>>>>>>> interface (say MetricsRegistry) that exposes a reasonable subset
> >> (do
> >>>>> we
> >>>>>>>>> want to expose `removeSensor` for example?). This is relatively
> >>>>>>>>> straightforward and little additional code.
> >>>>>>>>>
> >>>>>>>>> Ismael
> >>>>>>>>>
> >>>>>>>>> On Fri, Jan 6, 2017 at 11:29 PM, Guozhang Wang <
> wangg...@gmail.com
> >>>
> >>>>>>>> wrote:
> >>>>>>>>>
> >>>>>>>>>> Unlike Producer and Consumer, Streams users may likely to add
> >> their
> >>>>> own
> >>>>>>>>>> sensors depending on their apps and that is the main reason we
> >> added
> >>>>>>>>>> facilities to let them register customized "throughput"
> "latency"
> >> and
> >>>>>>>> any
> >>>>>>>>>> generic sensors.
> >>>>>>>>>>
> >>>>>>>>>> I think Eno has thought about just adding an API in
> >> StreamsMetrics to
> >>>>>>>>>> register any sensors, which will be directly translated into a
> >>>>>>>>>> `metrics.sensor` call. In the end he decided to just expose the
> >>>>> registry
> >>>>>>>>>> itself since the functions itself seem just like duplicating the
> >> same
> >>>>>>>>>> `sensor` functions in `Metrics`.
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> Guozhang
> >>>>>>>>>>
> >>>>>>>>>> On Fri, Jan 6, 2017 at 2:16 PM, Ismael Juma <ism...@juma.me.uk>
> >>>>> wrote:
> >>>>>>>>>>
> >>>>>>>>>>> Thanks for the explanation Eno. The KIP did mention that the
> >> metrics
> >>>>>>>>>>> registry would be exposed, yes. What is missing is that the
> >>>>> registry is
> >>>>>>>>>> not
> >>>>>>>>>>> currently exposed by anything else. Traditionally, we list all
> >>>>> public
> >>>>>>>>>> APIs
> >>>>>>>>>>> created by a KIP, which is effectively true for the registry in
> >> this
> >>>>>>>>>> case.
> >>>>>>>>>>> Did we consider using an interface instead of the concrete
> >> class? It
> >>>>>>>>>> seems
> >>>>>>>>>>> that a lot of these things were discussed in the PR, so it
> would
> >> be
> >>>>>>>> good
> >>>>>>>>>> to
> >>>>>>>>>>> have a summary in the KIP too.
> >>>>>>>>>>>
> >>>>>>>>>>> Ismael
> >>>>>>>>>>>
> >>>>>>>>>>> On Fri, Jan 6, 2017 at 9:10 PM, Eno Thereska <
> >>>>> eno.there...@gmail.com>
> >>>>>>>>>>> wrote:
> >>>>>>>>>>>
> >>>>>>>>>>>> So the KIP proposes exposing the metrics registry (second
> >> paragraph
> >>>>>>>>>> under
> >>>>>>>>>>>> motivation). The community has indicated that they would like
> >> to 1.
> >>>>>>>>>>> access
> >>>>>>>>>>>> all the metrics and 2. register their own. We provide some
> >> helper
> >>>>>>>>>>>> interfaces for them to register throughput and latency
> metrics,
> >> but
> >>>>>>>>>>>> ultimately we felt it's best for them to have access to the
> full
> >>>>>>>>>> registry
> >>>>>>>>>>>> as well. This is because application code is now intertwined
> >> with
> >>>>> the
> >>>>>>>>>>>> streams library and we don't want to limit the kinds of
> metrics
> >>>>> they
> >>>>>>>>>>> might
> >>>>>>>>>>>> want to register, nor do we necessarily want to provide yet
> >> another
> >>>>>>>>>>> wrapper
> >>>>>>>>>>>> around Metrics.
> >>>>>>>>>>>>
> >>>>>>>>>>>> Thanks,
> >>>>>>>>>>>> Eno
> >>>>>>>>>>>>
> >>>>>>>>>>>>> On 6 Jan 2017, at 20:34, Ismael Juma <ism...@juma.me.uk>
> >> wrote:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Thanks for the KIP. Sounds useful. One thing that wasn't made
> >>>>> clear
> >>>>>>>>>> is
> >>>>>>>>>>>> that
> >>>>>>>>>>>>> we are exposing `Metrics` as a public class for the first
> time.
> >>>>>>>>>> Neither
> >>>>>>>>>>>> the
> >>>>>>>>>>>>> consumer or producer expose it at the moment. Do we want to
> >> expose
> >>>>>>>>>> the
> >>>>>>>>>>>>> whole class or would it be better to expose a more limited
> >>>>> interface?
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Ismael
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> On Sat, Dec 31, 2016 at 4:26 AM, Aarti Gupta <
> >>>>> aartigup...@gmail.com>
> >>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>> Hi all,
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> I would like to start the discussion on KIP-104: Granular
> >> Sensors
> >>>>>>>>>> for
> >>>>>>>>>>>>>> Streams
> >>>>>>>>>>>>>> <https://cwiki.apache.org/confluence/display/KAFKA/KIP-
> >>>>>>>>>>>>>> 104%3A+Granular+Sensors+for+Streams?src=
> contextnavchildmode>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> *https://cwiki.apache.org/confluence/pages/viewpage.
> >>>>>>>>>>>> action?pageId=67636480
> >>>>>>>>>>>>>> <https://cwiki.apache.org/confluence/pages/viewpage.
> >>>>>>>>>>>> action?pageId=67636480
> >>>>>>>>>>>>>>> *
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Looking forward to your feedback.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Thanks,
> >>>>>>>>>>>>>> Aarti and Eno
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> --
> >>>>>>>>>> -- Guozhang
> >>>>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>
> >>>>>
> >>>>>
> >>>
> >>
> >>
> >
> >
> > --
> > -- Guozhang
>
>


-- 
-- Guozhang

Reply via email to