Hi Piotr,

That's great to know. Chances are that we will need to revisit the
convention list and adjust them accordingly when FLIP-27 is ready, At that
point we can mark some of the metrics as available by default for
connectors implementing the new interface.

Thanks,

Jiangjie (Becket) Qin

On Thu, Jun 13, 2019 at 3:51 PM Piotr Nowojski <pi...@ververica.com> wrote:

> Thanks for driving this. I’ve just noticed one small thing. With new
> SourceReader interface Flink will be able to provide `idleTime` metric
> automatically.
>
> Piotrek
>
> > On 13 Jun 2019, at 03:30, Becket Qin <becket....@gmail.com> wrote:
> >
> > Thanks all for the feedback and discussion.
> >
> > Since there wasn't any concern raised, I've started the voting thread for
> > this FLIP, but please feel free to continue the discussion here if you
> > think something still needs to be addressed.
> >
> > Thanks,
> >
> > Jiangjie (Becket) Qin
> >
> >
> >
> > On Mon, Jun 10, 2019 at 9:10 AM Becket Qin <becket....@gmail.com> wrote:
> >
> >> Hi Piotr,
> >>
> >> Thanks for the comments. Yes, you are right. Users will have to look at
> >> other metrics to decide whether the pipeline is healthy or not in the
> first
> >> place before they can use the time-based metric to fix the bottleneck.
> >>
> >> I agree that once we have FLIP-27 ready, some of the metrics can just be
> >> reported by the abstract implementation.
> >>
> >> I've updated FLIP-33 wiki page to add the pendingBytes and
> pendingRecords
> >> metric. Please let me know if you have any concern over the updated
> metric
> >> convention proposal.
> >>
> >> @Chesnay Schepler <ches...@apache.org> @Stephan Ewen
> >> <step...@ververica.com> will you also have time to take a look at the
> >> proposed metric convention? If there is no further concern I'll start a
> >> voting thread for this FLIP in two days.
> >>
> >> Thanks,
> >>
> >> Jiangjie (Becket) Qin
> >>
> >>
> >>
> >> On Wed, Jun 5, 2019 at 6:54 PM Piotr Nowojski <pi...@ververica.com>
> wrote:
> >>
> >>> Hi Becket,
> >>>
> >>> Thanks for the answer :)
> >>>
> >>>> By time-based metric, I meant the portion of time spent on producing
> the
> >>>> record to downstream. For example, a source connector can report that
> >>> it's
> >>>> spending 80% of time to emit record to downstream processing pipeline.
> >>> In
> >>>> another case, a sink connector may report that its spending 30% of
> time
> >>>> producing the records to the external system.
> >>>>
> >>>> This is in some sense equivalent to the buffer usage metric:
> >>>
> >>>>  - 80% of time spent on emitting records to downstream ---> downstream
> >>>> node is bottleneck ---> output buffer is probably full.
> >>>>  - 30% of time spent on emitting records to downstream ---> downstream
> >>>> node is not bottleneck ---> output buffer is probably not full.
> >>>
> >>> If by “time spent on emitting records to downstream” you understand
> >>> “waiting on back pressure”, then I see your point. And I agree that
> some
> >>> kind of ratio/time based metric gives you more information. However
> under
> >>> “time spent on emitting records to downstream” might be hidden the
> >>> following (extreme) situation:
> >>>
> >>> 1. Job is barely able to handle influx of records, there is 99%
> >>> CPU/resource usage in the cluster, but nobody is
> >>> bottlenecked/backpressured, all output buffers are empty, everybody is
> >>> waiting in 1% of it’s time for more records to process.
> >>> 2. 80% time can still be spent on "down stream operators”, because they
> >>> are the CPU intensive operations, but this doesn’t mean that
> increasing the
> >>> parallelism down the stream will help with anything there. To the
> contrary,
> >>> increasing parallelism of the source operator might help to increase
> >>> resource utilisation up to 100%.
> >>>
> >>> However, this “time based/ratio” approach can be extended to in/output
> >>> buffer usage. Besides collecting an information that input/output
> buffer is
> >>> full/empty, we can probe profile how often are buffer empty/full. If
> output
> >>> buffer is full 1% of times, there is almost no back pressure. If it’s
> full
> >>> 80% of times, there is some back pressure, if it’s full 99.9% of times,
> >>> there is huge back pressure.
> >>>
> >>> Now for autoscaling you could compare the input & output buffers fill
> >>> ratio:
> >>>
> >>> 1. Both are high, the source of bottleneck is down the stream
> >>> 2. Output is low, input is high, this is the bottleneck and the higher
> >>> the difference, the bigger source of bottleneck is this is
> operator/task
> >>> 3. Output is high, input is low - there was some load spike that we are
> >>> currently finishing to process
> >>>
> >>>
> >>>
> >>> But long story short, we are probably diverging from the topic of this
> >>> discussion, and we can discuss this at some later point.
> >>>
> >>> For now, for sources:
> >>>
> >>> as I wrote before, +1 for:
> >>> - pending.bytes, Gauge
> >>> - pending.messages, Gauge
> >>>
> >>> When we will be developing/discussing SourceReader from FLIP-27 we
> might
> >>> then add:
> >>>
> >>> - in-memory.buffer.usage (0 - 100%)
> >>>
> >>> Which will be estimated automatically by Flink while user will be able
> to
> >>> override/provide better estimation.
> >>>
> >>> Piotrek
> >>>
> >>>> On 5 Jun 2019, at 05:42, Becket Qin <becket....@gmail.com> wrote:
> >>>>
> >>>> Hi Piotr,
> >>>>
> >>>> Thanks for the explanation. Please see some clarifications below.
> >>>>
> >>>> By time-based metric, I meant the portion of time spent on producing
> the
> >>>> record to downstream. For example, a source connector can report that
> >>> it's
> >>>> spending 80% of time to emit record to downstream processing pipeline.
> >>> In
> >>>> another case, a sink connector may report that its spending 30% of
> time
> >>>> producing the records to the external system.
> >>>>
> >>>> This is in some sense equivalent to the buffer usage metric:
> >>>>  - 80% of time spent on emitting records to downstream ---> downstream
> >>>> node is bottleneck ---> output buffer is probably full.
> >>>>  - 30% of time spent on emitting records to downstream ---> downstream
> >>>> node is not bottleneck ---> output buffer is probably not full.
> >>>>
> >>>> However, the time-based metric has a few advantages that the buffer
> >>> usage
> >>>> metric may not have.
> >>>>
> >>>> 1.  Buffer usage metric may not be applicable to all the connector
> >>>> implementations, while reporting time-based metric are always doable.
> >>>> Some source connectors may not have any input buffer, or they may use
> >>> some
> >>>> third party library that does not expose the input buffer at all.
> >>>> Similarly, for sink connectors, the implementation may not have any
> >>> output
> >>>> buffer, or the third party library does not expose such buffer.
> >>>>
> >>>> 2. Although both type of metrics can detect bottleneck, time-based
> >>> metrics
> >>>> can be used to generate a more informed action to remove the
> bottleneck.
> >>>> For example, when the downstream is bottleneck, the output buffer
> usage
> >>>> metric is likely to be 100%, and the input buffer usage might be 0%.
> >>> That
> >>>> means we don't know what is the suitable parallelism to lift the
> >>>> bottleneck. The time-based metric, on the other hand, would give
> useful
> >>>> information, e.g. if 80% of time was spent on emitting records, we can
> >>>> roughly increase the downstream node parallelism by 4 times.
> >>>>
> >>>> Admittedly, the time-based metrics are more expensive than buffer
> >>> usage. So
> >>>> we may have to do some sampling to reduce the cost. But in general,
> >>> using
> >>>> time-based metrics seems worth adding.
> >>>>
> >>>> That being said, I don't think buffer usage metric and time-based
> >>> metrics
> >>>> are mutually exclusive. We can probably have both. It is just that in
> >>>> practice, features like auto-scaling might prefer time-based metrics
> for
> >>>> the reason stated above.
> >>>>
> >>>>> 1. Define the metrics that would allow us to manually detect
> >>> bottlenecks.
> >>>> As I wrote, we already have them in most of the places, except of
> >>>> sources/sinks.
> >>>>> 2. Use those metrics, to automatically detect bottlenecks. Currently
> we
> >>>> are only automatically detecting back pressure and reporting it to the
> >>> user
> >>>> in web UI (is it exposed as a metric at all?). Detecting the root
> cause
> >>> of
> >>>> the back pressure (bottleneck) is one step further.
> >>>>> 3. Use the knowledge about where exactly the bottleneck is located,
> to
> >>>> try to do something with it.
> >>>>
> >>>> As explained above, I think time-based metric also addresses item 1
> and
> >>>> item 2.
> >>>>
> >>>> Any thoughts?
> >>>>
> >>>> Thanks,
> >>>>
> >>>> Jiangjie (Becket) Qin
> >>>>
> >>>>
> >>>>
> >>>> On Mon, Jun 3, 2019 at 4:14 PM Piotr Nowojski <pi...@ververica.com>
> >>> wrote:
> >>>>
> >>>>> Hi again :)
> >>>>>
> >>>>>> - pending.bytes, Gauge
> >>>>>> - pending.messages, Gauge
> >>>>>
> >>>>>
> >>>>> +1
> >>>>>
> >>>>> And true, instead of overloading one of the metric it is better when
> >>> user
> >>>>> can choose to provide only one of them.
> >>>>>
> >>>>> Re 2:
> >>>>>
> >>>>>> If I understand correctly, this metric along with the pending
> mesages
> >>> /
> >>>>>> bytes would answer the questions of:
> >>>>>
> >>>>>> - Does the connector consume fast enough? Lagging behind + empty
> >>> buffer
> >>>>> =
> >>>>>> cannot consume fast enough.
> >>>>>> - Does the connector emit fast enough? Lagging behind + full buffer
> =
> >>>>>> cannot emit fast enough, i.e. the Flink pipeline is slow.
> >>>>>
> >>>>> Yes, exactly. This can also be used to support decisions like
> changing
> >>> the
> >>>>> parallelism of the sources and/or down stream operators.
> >>>>>
> >>>>> I’m not sure if I understand your proposal with time based
> >>> measurements.
> >>>>> Maybe I’m missing something, but I do not see how measuring time
> alone
> >>>>> could answer the problem: where is the bottleneck. Time spent on the
> >>>>> next/emit might be short or long (depending on how heavy to process
> the
> >>>>> record is) and the source can still be bottlenecked/back pressured or
> >>> not.
> >>>>> Usually the easiest and the most reliable way how to detect
> >>> bottlenecks is
> >>>>> by checking usage of input & output buffers, since when input buffer
> is
> >>>>> full while output buffer is empty, that’s the definition of a
> >>> bottleneck.
> >>>>> Also this is usually very easy and cheap to measure (it works
> >>> effectively
> >>>>> the same way as current’s Flink back pressure monitoring, but more
> >>> cleanly,
> >>>>> without probing thread’s stack traces).
> >>>>>
> >>>>> Also keep in mind that we are already using the buffer usage metrics
> >>> for
> >>>>> detecting the bottlenecks in Flink’s internal network exchanges
> (manual
> >>>>> work). That’s the reason why I wanted to extend this to
> sources/sinks,
> >>>>> since they are currently our blind spot.
> >>>>>
> >>>>>> One feature we are currently working on to scale Flink automatically
> >>>>> relies
> >>>>>> on some metrics answering the same question
> >>>>>
> >>>>> That would be very helpful feature. I think in order to achieve that
> we
> >>>>> would need to:
> >>>>> 1. Define the metrics that would allow us to manually detect
> >>> bottlenecks.
> >>>>> As I wrote, we already have them in most of the places, except of
> >>>>> sources/sinks.
> >>>>> 2. Use those metrics, to automatically detect bottlenecks. Currently
> we
> >>>>> are only automatically detecting back pressure and reporting it to
> the
> >>> user
> >>>>> in web UI (is it exposed as a metric at all?). Detecting the root
> >>> cause of
> >>>>> the back pressure (bottleneck) is one step further.
> >>>>> 3. Use the knowledge about where exactly the bottleneck is located,
> to
> >>> try
> >>>>> to do something with it.
> >>>>>
> >>>>> I think you are aiming for point 3., but before we reach it, we are
> >>> still
> >>>>> missing 1. & 2. Also even if we have 3., there is a value in 1 & 2
> for
> >>>>> manual analysis/dashboards.
> >>>>>
> >>>>> However, having the knowledge of where the bottleneck is, doesn’t
> >>>>> necessarily mean that we know what we can do about it. For example
> >>>>> increasing parallelism might or might not help with anything (data
> >>> skew,
> >>>>> bottleneck on some resource that does not scale), but this remark
> >>> applies
> >>>>> always, regardless of the way how did we detect the bottleneck.
> >>>>>
> >>>>> Piotrek
> >>>>>
> >>>>>> On 3 Jun 2019, at 06:16, Becket Qin <becket....@gmail.com> wrote:
> >>>>>>
> >>>>>> Hi Piotr,
> >>>>>>
> >>>>>> Thanks for the suggestion. Some thoughts below:
> >>>>>>
> >>>>>> Re 1: The pending messages / bytes.
> >>>>>> I completely agree these are very useful metrics and we should
> expect
> >>> the
> >>>>>> connector to report. WRT the way to expose them, it seems more
> >>> consistent
> >>>>>> to add two metrics instead of adding a method (unless there are
> other
> >>> use
> >>>>>> cases other than metric reporting). So we can add the following two
> >>>>> metrics.
> >>>>>> - pending.bytes, Gauge
> >>>>>> - pending.messages, Gauge
> >>>>>> Applicable connectors can choose to report them. These two metrics
> >>> along
> >>>>>> with latency should be sufficient for users to understand the
> progress
> >>>>> of a
> >>>>>> connector.
> >>>>>>
> >>>>>>
> >>>>>> Re 2: Number of buffered data in-memory of the connector
> >>>>>> If I understand correctly, this metric along with the pending
> mesages
> >>> /
> >>>>>> bytes would answer the questions of:
> >>>>>> - Does the connector consume fast enough? Lagging behind + empty
> >>> buffer
> >>>>> =
> >>>>>> cannot consume fast enough.
> >>>>>> - Does the connector emit fast enough? Lagging behind + full buffer
> =
> >>>>>> cannot emit fast enough, i.e. the Flink pipeline is slow.
> >>>>>>
> >>>>>> One feature we are currently working on to scale Flink automatically
> >>>>> relies
> >>>>>> on some metrics answering the same question, more specifically, we
> are
> >>>>>> profiling the time spent on .next() method (time to consume) and the
> >>> time
> >>>>>> spent on .collect() method (time to emit / process). One advantage
> of
> >>>>> such
> >>>>>> method level time cost allows us to calculate the parallelism
> >>> required to
> >>>>>> keep up in case their is a lag.
> >>>>>>
> >>>>>> However, one concern I have regarding such metric is that they are
> >>>>>> implementation specific. Either profiling on the method time, or
> >>>>> reporting
> >>>>>> buffer usage assumes the connector are implemented in such a way. A
> >>>>>> slightly better solution might be have the following metric:
> >>>>>>
> >>>>>>   - EmitTimeRatio (or FetchTimeRatio): The time spent on emitting
> >>>>>> records / Total time elapsed.
> >>>>>>
> >>>>>> This assumes that the source connectors have to emit the records to
> >>> the
> >>>>>> downstream at some point. The emission may take some time ( e.g. go
> >>>>> through
> >>>>>> chained operators). And the rest of the time are spent to prepare
> the
> >>>>>> record to emit, including time for consuming and format conversion,
> >>> etc.
> >>>>>> Ideally, we'd like to see the time spent on record fetch and emit to
> >>> be
> >>>>>> about the same, so no one is bottleneck for the other.
> >>>>>>
> >>>>>> The downside of these time based metrics is additional overhead to
> get
> >>>>> the
> >>>>>> time, therefore sampling might be needed. But in practice I feel
> such
> >>>>> time
> >>>>>> based metric might be more useful if we want to take action.
> >>>>>>
> >>>>>>
> >>>>>> I think we should absolutely add metrics in (1) to the metric
> >>> convention.
> >>>>>> We could also add the metrics mentioned in (2) if we reach consensus
> >>> on
> >>>>>> that. What do you think?
> >>>>>>
> >>>>>> Thanks,
> >>>>>>
> >>>>>> Jiangjie (Becket) Qin
> >>>>>>
> >>>>>>
> >>>>>> On Fri, May 31, 2019 at 4:26 PM Piotr Nowojski <pi...@ververica.com
> >
> >>>>> wrote:
> >>>>>>
> >>>>>>> Hey Becket,
> >>>>>>>
> >>>>>>> Re 1a) and 1b) +1 from my side.
> >>>>>>>
> >>>>>>> I’ve discussed this issue:
> >>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> 2. It would be nice to have metrics, that allow us to check the
> >>> cause
> >>>>>>> of
> >>>>>>>>>> back pressure:
> >>>>>>>>>> a) for sources, length of input queue (in bytes? Or boolean
> >>>>>>>>>> hasSomethingl/isEmpty)
> >>>>>>>>>> b) for sinks, length of output queue (in bytes? Or boolean
> >>>>>>>>>> hasSomething/isEmpty)
> >>>>>>>
> >>>>>>> With Nico at some lengths and he also saw the benefits of them. We
> >>> also
> >>>>>>> have more concrete proposal for that.
> >>>>>>>
> >>>>>>> Actually there are two really useful metrics, that we are missing
> >>>>>>> currently:
> >>>>>>>
> >>>>>>> 1. Number of data/records/bytes in the backlog to process. For
> >>> example
> >>>>>>> remaining number of bytes in unread files. Or pending data in Kafka
> >>>>> topics.
> >>>>>>> 2. Number of buffered data in-memory of the connector, that are
> >>> waiting
> >>>>> to
> >>>>>>> be processed pushed to Flink pipeline.
> >>>>>>>
> >>>>>>> Re 1:
> >>>>>>> This would have to be a metric provided directly by a connector. It
> >>>>> could
> >>>>>>> be an undefined `int`:
> >>>>>>>
> >>>>>>> `int backlog` - estimate of pending work.
> >>>>>>>
> >>>>>>> “Undefined” meaning that it would be up to a connector to decided
> >>>>> whether
> >>>>>>> it’s measured in bytes, records, pending files or whatever it is
> >>>>> possible
> >>>>>>> to provide by the connector. This is because I assume not every
> >>>>> connector
> >>>>>>> can provide exact number and for some of them it might be
> impossible
> >>> to
> >>>>>>> provide records number of bytes count.
> >>>>>>>
> >>>>>>> Re 2:
> >>>>>>> This metric could be either provided by a connector, or calculated
> >>>>> crudely
> >>>>>>> by Flink:
> >>>>>>>
> >>>>>>> `float bufferUsage` - value from [0.0, 1.0] range
> >>>>>>>
> >>>>>>> Percentage of used in memory buffers, like in Kafka’s handover.
> >>>>>>>
> >>>>>>> It could be crudely implemented by Flink with FLIP-27
> >>>>>>> SourceReader#isAvailable. If SourceReader is not available reported
> >>>>>>> `bufferUsage` could be 0.0. If it is available, it could be 1.0. I
> >>> think
> >>>>>>> this would be a good enough estimation for most of the use cases
> >>> (that
> >>>>>>> could be overloaded and implemented better if desired). Especially
> >>>>> since we
> >>>>>>> are reporting only probed values: if probed values are almost
> always
> >>>>> “1.0”,
> >>>>>>> it would mean that we have a back pressure. If they are almost
> always
> >>>>>>> “0.0”, there is probably no back pressure at the sources.
> >>>>>>>
> >>>>>>> What do you think about this?
> >>>>>>>
> >>>>>>> Piotrek
> >>>>>>>
> >>>>>>>> On 30 May 2019, at 11:41, Becket Qin <becket....@gmail.com>
> wrote:
> >>>>>>>>
> >>>>>>>> Hi all,
> >>>>>>>>
> >>>>>>>> Thanks a lot for all the feedback and comments. I'd like to
> continue
> >>>>> the
> >>>>>>>> discussion on this FLIP.
> >>>>>>>>
> >>>>>>>> I updated the FLIP-33 wiki to remove all the histogram metrics
> from
> >>> the
> >>>>>>>> first version of metric convention due to the performance concern.
> >>> The
> >>>>>>> plan
> >>>>>>>> is to introduce them later when we have a mechanism to opt in/out
> >>>>>>> metrics.
> >>>>>>>> At that point, users can decide whether they want to pay the cost
> to
> >>>>> get
> >>>>>>>> the metric or not.
> >>>>>>>>
> >>>>>>>> As Stephan suggested, for this FLIP, let's first try to agree on
> the
> >>>>>>> small
> >>>>>>>> list of conventional metrics that connectors should follow.
> >>>>>>>> Just to be clear, the purpose of the convention is not to enforce
> >>> every
> >>>>>>>> connector to report all these metrics, but to provide a guidance
> in
> >>>>> case
> >>>>>>>> these metrics are reported by some connectors.
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> @ Stephan & Chesnay,
> >>>>>>>>
> >>>>>>>> Regarding the duplication of `RecordsIn` metric in operator / task
> >>>>>>>> IOMetricGroups, from what I understand, for source operator, it is
> >>>>>>> actually
> >>>>>>>> the SourceFunction that reports the operator level
> >>>>>>>> RecordsIn/RecordsInPerSecond metric. So they are essentially the
> >>> same
> >>>>>>>> metric in the operator level IOMetricGroup. Similarly for the Sink
> >>>>>>>> operator, the operator level RecordsOut/RecordsOutPerSecond
> metrics
> >>> are
> >>>>>>>> also reported by the Sink function. I marked them as existing in
> the
> >>>>>>>> FLIP-33 wiki page. Please let me know if I misunderstood.
> >>>>>>>>
> >>>>>>>> Thanks,
> >>>>>>>>
> >>>>>>>> Jiangjie (Becket) Qin
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> On Thu, May 30, 2019 at 5:16 PM Becket Qin <becket....@gmail.com>
> >>>>> wrote:
> >>>>>>>>
> >>>>>>>>> Hi Piotr,
> >>>>>>>>>
> >>>>>>>>> Thanks a lot for the feedback.
> >>>>>>>>>
> >>>>>>>>> 1a) I guess you are referring to the part that "original system
> >>>>> specific
> >>>>>>>>> metrics should also be reported". The performance impact depends
> on
> >>>>> the
> >>>>>>>>> implementation. An efficient implementation would only record the
> >>>>> metric
> >>>>>>>>> once, but report them with two different metric names. This is
> >>>>> unlikely
> >>>>>>> to
> >>>>>>>>> hurt performance.
> >>>>>>>>>
> >>>>>>>>> 1b) Yes, I agree that we should avoid adding overhead to the
> >>> critical
> >>>>>>> path
> >>>>>>>>> by all means. This is sometimes a tradeoff, running blindly
> without
> >>>>> any
> >>>>>>>>> metric gives best performance, but sometimes might be frustrating
> >>> when
> >>>>>>> we
> >>>>>>>>> debug some issues.
> >>>>>>>>>
> >>>>>>>>> 2. The metrics are indeed very useful. Are they supposed to be
> >>>>> reported
> >>>>>>> by
> >>>>>>>>> the connectors or Flink itself? At this point FLIP-33 is more
> >>> focused
> >>>>> on
> >>>>>>>>> provide a guidance to the connector authors on the metrics
> >>> reporting.
> >>>>>>> That
> >>>>>>>>> said, after FLIP-27, I think we should absolutely report these
> >>> metrics
> >>>>>>> in
> >>>>>>>>> the abstract implementation. In any case, the metric convention
> in
> >>>>> this
> >>>>>>>>> list are expected to evolve over time.
> >>>>>>>>>
> >>>>>>>>> Thanks,
> >>>>>>>>>
> >>>>>>>>> Jiangjie (Becket) Qin
> >>>>>>>>>
> >>>>>>>>> On Tue, May 28, 2019 at 6:24 PM Piotr Nowojski <
> >>> pi...@ververica.com>
> >>>>>>>>> wrote:
> >>>>>>>>>
> >>>>>>>>>> Hi,
> >>>>>>>>>>
> >>>>>>>>>> Thanks for the proposal and driving the effort here Becket :)
> I’ve
> >>>>> read
> >>>>>>>>>> through the FLIP-33 [1], and here are couple of my thoughts.
> >>>>>>>>>>
> >>>>>>>>>> Big +1 for standardising the metric names between connectors, it
> >>> will
> >>>>>>>>>> definitely help us and users a lot.
> >>>>>>>>>>
> >>>>>>>>>> Issues/questions/things to discuss that I’ve thought of:
> >>>>>>>>>>
> >>>>>>>>>> 1a. If we are about to duplicate some metrics, can this become a
> >>>>>>>>>> performance issue?
> >>>>>>>>>> 1b. Generally speaking, we should make sure that collecting
> those
> >>>>>>> metrics
> >>>>>>>>>> is as non intrusive as possible, especially that they will need
> >>> to be
> >>>>>>>>>> updated once per record. (They might be collected more rarely
> with
> >>>>> some
> >>>>>>>>>> overhead, but the hot path of updating it per record will need
> to
> >>> be
> >>>>> as
> >>>>>>>>>> quick as possible). That includes both avoiding heavy
> computation
> >>> on
> >>>>>>> per
> >>>>>>>>>> record path: histograms?, measuring time for time based metrics
> >>> (per
> >>>>>>>>>> second) (System.currentTimeMillis() depending on the
> >>> implementation
> >>>>> can
> >>>>>>>>>> invoke a system call)
> >>>>>>>>>>
> >>>>>>>>>> 2. It would be nice to have metrics, that allow us to check the
> >>> cause
> >>>>>>> of
> >>>>>>>>>> back pressure:
> >>>>>>>>>> a) for sources, length of input queue (in bytes? Or boolean
> >>>>>>>>>> hasSomethingl/isEmpty)
> >>>>>>>>>> b) for sinks, length of output queue (in bytes? Or boolean
> >>>>>>>>>> hasSomething/isEmpty)
> >>>>>>>>>>
> >>>>>>>>>> a) is useful in a scenario when we are processing backlog of
> >>> records,
> >>>>>>> all
> >>>>>>>>>> of the internal Flink’s input/output network buffers are empty,
> >>> and
> >>>>> we
> >>>>>>> want
> >>>>>>>>>> to check whether the external source system is the bottleneck
> >>>>> (source’s
> >>>>>>>>>> input queue will be empty), or if the Flink’s connector is the
> >>>>>>> bottleneck
> >>>>>>>>>> (source’s input queues will be full).
> >>>>>>>>>> b) similar story. Backlog of records, but this time all of the
> >>>>> internal
> >>>>>>>>>> Flink’s input/ouput network buffers are full, and we want o
> check
> >>>>>>> whether
> >>>>>>>>>> the external sink system is the bottleneck (sink output queues
> are
> >>>>>>> full),
> >>>>>>>>>> or if the Flink’s connector is the bottleneck (sink’s output
> >>> queues
> >>>>>>> will be
> >>>>>>>>>> empty)
> >>>>>>>>>>
> >>>>>>>>>> It might be sometimes difficult to provide those metrics, so
> they
> >>>>> could
> >>>>>>>>>> be optional, but if we could provide them, it would be really
> >>>>> helpful.
> >>>>>>>>>>
> >>>>>>>>>> Piotrek
> >>>>>>>>>>
> >>>>>>>>>> [1]
> >>>>>>>>>>
> >>>>>>>
> >>>>>
> >>>
> https://cwiki.apache.org/confluence/display/FLINK/FLIP-33:+Standardize+Connector+Metrics
> >>>>>>>>>> <
> >>>>>>>>>>
> >>>>>>>
> >>>>>
> >>>
> https://cwiki.apache.org/confluence/display/FLINK/FLIP-33:+Standardize+Connector+Metrics
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>> On 24 Apr 2019, at 13:28, Stephan Ewen <se...@apache.org>
> wrote:
> >>>>>>>>>>>
> >>>>>>>>>>> I think this sounds reasonable.
> >>>>>>>>>>>
> >>>>>>>>>>> Let's keep the "reconfiguration without stopping the job" out
> of
> >>>>> this,
> >>>>>>>>>>> because that would be a super big effort and if we approach
> that,
> >>>>> then
> >>>>>>>>>> in
> >>>>>>>>>>> more generic way rather than specific to connector metrics.
> >>>>>>>>>>>
> >>>>>>>>>>> I would suggest to look at the following things before starting
> >>> with
> >>>>>>> any
> >>>>>>>>>>> implementation work:
> >>>>>>>>>>>
> >>>>>>>>>>> - Try and find a committer to support this, otherwise it will
> be
> >>>>> hard
> >>>>>>>>>> to
> >>>>>>>>>>> make progress
> >>>>>>>>>>> - Start with defining a smaller set of "core metrics" and
> extend
> >>> the
> >>>>>>>>>> set
> >>>>>>>>>>> later. I think that is easier than now blocking on reaching
> >>>>> consensus
> >>>>>>>>>> on a
> >>>>>>>>>>> large group of metrics.
> >>>>>>>>>>> - Find a solution to the problem Chesnay mentioned, that the
> >>>>> "records
> >>>>>>>>>> in"
> >>>>>>>>>>> metric is somehow overloaded and exists already in the IO
> Metric
> >>>>>>> group.
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> On Mon, Mar 25, 2019 at 7:16 AM Becket Qin <
> becket....@gmail.com
> >>>>
> >>>>>>>>>> wrote:
> >>>>>>>>>>>
> >>>>>>>>>>>> Hi Stephan,
> >>>>>>>>>>>>
> >>>>>>>>>>>> Thanks a lot for the feedback. All makes sense.
> >>>>>>>>>>>>
> >>>>>>>>>>>> It is a good suggestion to simply have an onRecord(numBytes,
> >>>>>>> eventTime)
> >>>>>>>>>>>> method for connector writers. It should meet most of the
> >>>>>>> requirements,
> >>>>>>>>>>>> individual
> >>>>>>>>>>>>
> >>>>>>>>>>>> The configurable metrics feature is something really useful,
> >>>>>>>>>> especially if
> >>>>>>>>>>>> we can somehow make it dynamically configurable without
> stopping
> >>>>> the
> >>>>>>>>>> jobs.
> >>>>>>>>>>>> It might be better to make it a separate discussion because it
> >>> is a
> >>>>>>>>>> more
> >>>>>>>>>>>> generic feature instead of only for connectors.
> >>>>>>>>>>>>
> >>>>>>>>>>>> So in order to make some progress, in this FLIP we can limit
> the
> >>>>>>>>>> discussion
> >>>>>>>>>>>> scope to the connector related items:
> >>>>>>>>>>>>
> >>>>>>>>>>>> - the standard connector metric names and types.
> >>>>>>>>>>>> - the abstract ConnectorMetricHandler interface
> >>>>>>>>>>>>
> >>>>>>>>>>>> I'll start a separate thread to discuss other general metric
> >>>>> related
> >>>>>>>>>>>> enhancement items including:
> >>>>>>>>>>>>
> >>>>>>>>>>>> - optional metrics
> >>>>>>>>>>>> - dynamic metric configuration
> >>>>>>>>>>>> - potential combination with rate limiter
> >>>>>>>>>>>>
> >>>>>>>>>>>> Does this plan sound reasonable?
> >>>>>>>>>>>>
> >>>>>>>>>>>> Thanks,
> >>>>>>>>>>>>
> >>>>>>>>>>>> Jiangjie (Becket) Qin
> >>>>>>>>>>>>
> >>>>>>>>>>>> On Sat, Mar 23, 2019 at 5:53 AM Stephan Ewen <
> se...@apache.org>
> >>>>>>> wrote:
> >>>>>>>>>>>>
> >>>>>>>>>>>>> Ignoring for a moment implementation details, this connector
> >>>>> metrics
> >>>>>>>>>> work
> >>>>>>>>>>>>> is a really good thing to do, in my opinion
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> The questions "oh, my job seems to be doing nothing, I am
> >>> looking
> >>>>> at
> >>>>>>>>>> the
> >>>>>>>>>>>> UI
> >>>>>>>>>>>>> and the 'records in' value is still zero" is in the top three
> >>>>>>> support
> >>>>>>>>>>>>> questions I have been asked personally.
> >>>>>>>>>>>>> Introspection into "how far is the consumer lagging behind"
> >>> (event
> >>>>>>>>>> time
> >>>>>>>>>>>>> fetch latency) came up many times as well.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> So big +1 to solving this problem.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> About the exact design - I would try to go for the following
> >>>>>>>>>> properties:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> - keep complexity of of connectors. Ideally the metrics
> handler
> >>>>> has
> >>>>>>> a
> >>>>>>>>>>>>> single onRecord(numBytes, eventTime) method or so, and
> >>> everything
> >>>>>>>>>> else is
> >>>>>>>>>>>>> internal to the handler. That makes it dead simple for the
> >>>>>>> connector.
> >>>>>>>>>> We
> >>>>>>>>>>>>> can also think of an extensive scheme for connector specific
> >>>>>>> metrics.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> - make it configurable on the job it cluster level which
> >>> metrics
> >>>>> the
> >>>>>>>>>>>>> handler internally creates when that method is invoked.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> What do you think?
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Best,
> >>>>>>>>>>>>> Stephan
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> On Thu, Mar 21, 2019 at 10:42 AM Chesnay Schepler <
> >>>>>>> ches...@apache.org
> >>>>>>>>>>>
> >>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>> As I said before, I believe this to be over-engineered and
> >>> have
> >>>>> no
> >>>>>>>>>>>>>> interest in this implementation.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> There are conceptual issues like defining a duplicate
> >>>>>>>>>>>> numBytesIn(PerSec)
> >>>>>>>>>>>>>> metric that already exists for each operator.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> On 21.03.2019 06:13, Becket Qin wrote:
> >>>>>>>>>>>>>>> A few updates to the thread. I uploaded a patch[1] as a
> >>> complete
> >>>>>>>>>>>>>>> example of how users can use the metrics in the future.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Some thoughts below after taking a look at the
> >>>>> AbstractMetricGroup
> >>>>>>>>>>>> and
> >>>>>>>>>>>>>>> its subclasses.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> This patch intends to provide convenience for Flink
> connector
> >>>>>>>>>>>>>>> implementations to follow metrics standards proposed in
> >>> FLIP-33.
> >>>>>>> It
> >>>>>>>>>>>>>>> also try to enhance the metric management in general way to
> >>> help
> >>>>>>>>>>>> users
> >>>>>>>>>>>>>>> with:
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> 1. metric definition
> >>>>>>>>>>>>>>> 2. metric dependencies check
> >>>>>>>>>>>>>>> 3. metric validation
> >>>>>>>>>>>>>>> 4. metric control (turn on / off particular metrics)
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> This patch wraps |MetricGroup| to extend the functionality
> of
> >>>>>>>>>>>>>>> |AbstractMetricGroup| and its subclasses. The
> >>>>>>>>>>>>>>> |AbstractMetricGroup| mainly focus on the metric group
> >>>>> hierarchy,
> >>>>>>>>>> but
> >>>>>>>>>>>>>>> does not really manage the metrics other than keeping them
> >>> in a
> >>>>>>> Map.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Ideally we should only have one entry point for the
> metrics.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Right now the entry point is |AbstractMetricGroup|.
> However,
> >>>>>>> besides
> >>>>>>>>>>>>>>> the missing functionality mentioned above,
> >>> |AbstractMetricGroup|
> >>>>>>>>>>>> seems
> >>>>>>>>>>>>>>> deeply rooted in Flink runtime. We could extract it out to
> >>>>>>>>>>>>>>> flink-metrics in order to use it for generic purpose. There
> >>> will
> >>>>>>> be
> >>>>>>>>>>>>>>> some work, though.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Another approach is to make |AbstractMetrics| in this patch
> >>> as
> >>>>> the
> >>>>>>>>>>>>>>> metric entry point. It wraps metric group and provides the
> >>>>> missing
> >>>>>>>>>>>>>>> functionalities. Then we can roll out this pattern to
> runtime
> >>>>>>>>>>>>>>> components gradually as well.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> My first thought is that the latter approach gives a more
> >>> smooth
> >>>>>>>>>>>>>>> migration. But I am also OK with doing a refactoring on the
> >>>>>>>>>>>>>>> |AbstractMetricGroup| family.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Thanks,
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Jiangjie (Becket) Qin
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> [1] https://github.com/becketqin/flink/pull/1
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> On Mon, Feb 25, 2019 at 2:32 PM Becket Qin <
> >>>>> becket....@gmail.com
> >>>>>>>>>>>>>>> <mailto:becket....@gmail.com>> wrote:
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Hi Chesnay,
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> It might be easier to discuss some implementation details
> in
> >>>>> the
> >>>>>>>>>>>>>>> PR review instead of in the FLIP discussion thread. I have
> a
> >>>>>>>>>>>> patch
> >>>>>>>>>>>>>>> for Kafka connectors ready but haven't submitted the PR
> yet.
> >>>>>>>>>>>>>>> Hopefully that will help explain a bit more.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> ** Re: metric type binding
> >>>>>>>>>>>>>>> This is a valid point that worths discussing. If I
> understand
> >>>>>>>>>>>>>>> correctly, there are two points:
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> 1. Metric type / interface does not matter as long as the
> >>>>> metric
> >>>>>>>>>>>>>>> semantic is clearly defined.
> >>>>>>>>>>>>>>> Conceptually speaking, I agree that as long as the metric
> >>>>>>>>>>>> semantic
> >>>>>>>>>>>>>>> is defined, metric type does not matter. To some extent,
> >>> Gauge
> >>>>> /
> >>>>>>>>>>>>>>> Counter / Meter / Histogram themselves can be think of as
> >>> some
> >>>>>>>>>>>>>>> well-recognized semantics, if you wish. In Flink, these
> >>> metric
> >>>>>>>>>>>>>>> semantics have their associated interface classes. In
> >>> practice,
> >>>>>>>>>>>>>>> such semantic to interface binding seems necessary for
> >>>>> different
> >>>>>>>>>>>>>>> components to communicate.  Simply standardize the semantic
> >>> of
> >>>>>>>>>>>> the
> >>>>>>>>>>>>>>> connector metrics seems not sufficient for people to build
> >>>>>>>>>>>>>>> ecosystem on top of. At the end of the day, we still need
> to
> >>>>>>> have
> >>>>>>>>>>>>>>> some embodiment of the metric semantics that people can
> >>> program
> >>>>>>>>>>>>>>> against.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> 2. Sometimes the same metric semantic can be exposed using
> >>>>>>>>>>>>>>> different metric types / interfaces.
> >>>>>>>>>>>>>>> This is a good point. Counter and Gauge-as-a-Counter are
> >>> pretty
> >>>>>>>>>>>>>>> much interchangeable. This is more of a trade-off between
> the
> >>>>>>>>>>>> user
> >>>>>>>>>>>>>>> experience of metric producers and consumers. The metric
> >>>>>>>>>>>> producers
> >>>>>>>>>>>>>>> want to use Counter or Gauge depending on whether the
> counter
> >>>>> is
> >>>>>>>>>>>>>>> already tracked in code, while ideally the metric consumers
> >>>>> only
> >>>>>>>>>>>>>>> want to see a single metric type for each metric. I am
> >>> leaning
> >>>>>>>>>>>>>>> towards to make the metric producers happy, i.e. allow
> Gauge
> >>> /
> >>>>>>>>>>>>>>> Counter metric type, and the the metric consumers handle
> the
> >>>>>>> type
> >>>>>>>>>>>>>>> variation. The reason is that in practice, there might be
> >>> more
> >>>>>>>>>>>>>>> connector implementations than metric reporter
> >>> implementations.
> >>>>>>>>>>>> We
> >>>>>>>>>>>>>>> could also provide some helper method to facilitate reading
> >>>>> from
> >>>>>>>>>>>>>>> such variable metric type.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Just some quick replies to the comments around
> implementation
> >>>>>>>>>>>>>> details.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>    4) single place where metrics are registered except
> >>>>>>>>>>>>>>>    connector-specific
> >>>>>>>>>>>>>>>    ones (which we can't really avoid).
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Register connector specific ones in a single place is
> >>> actually
> >>>>>>>>>>>>>>> something that I want to achieve.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>    2) I'm talking about time-series databases like
> >>> Prometheus.
> >>>>>>>>>>>> We
> >>>>>>>>>>>>>>>    would
> >>>>>>>>>>>>>>>    only have a gauge metric exposing the last
> >>>>>>> fetchTime/emitTime
> >>>>>>>>>>>>>>>    that is
> >>>>>>>>>>>>>>>    regularly reported to the backend (Prometheus), where a
> >>>>> user
> >>>>>>>>>>>>>>>    could build
> >>>>>>>>>>>>>>>    a histogram of his choosing when/if he wants it.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Not sure if such downsampling works. As an example, if a
> user
> >>>>>>>>>>>>>>> complains that there are some intermittent latency spikes
> >>>>> (maybe
> >>>>>>>>>>>> a
> >>>>>>>>>>>>>>> few records in 10 seconds) in their processing system.
> >>> Having a
> >>>>>>>>>>>>>>> Gauge sampling instantaneous latency seems unlikely useful.
> >>>>>>>>>>>>>>> However by looking at actual 99.9 percentile latency might
> >>>>> help.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Thanks,
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Jiangjie (Becket) Qin
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> On Fri, Feb 22, 2019 at 9:30 PM Chesnay Schepler
> >>>>>>>>>>>>>>> <ches...@apache.org <mailto:ches...@apache.org>> wrote:
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>    Re: over complication of implementation.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>    I think I get understand better know what you're
> shooting
> >>>>>>>>>>>> for,
> >>>>>>>>>>>>>>>    effectively something like the OperatorIOMetricGroup.
> >>>>>>>>>>>>>>>    But still, re-define setupConnectorMetrics() to accept a
> >>>>> set
> >>>>>>>>>>>>>>>    of flags
> >>>>>>>>>>>>>>>    for counters/meters(ans _possibly_ histograms) along
> >>> with a
> >>>>>>>>>>>>>>>    set of
> >>>>>>>>>>>>>>>    well-defined Optional<Gauge<?>>, and return the group.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>    Solves all issues as far as i can tell:
> >>>>>>>>>>>>>>>    1) no metrics must be created manually (except Gauges,
> >>>>> which
> >>>>>>>>>>>>> are
> >>>>>>>>>>>>>>>    effectively just Suppliers and you can't get around
> >>> this),
> >>>>>>>>>>>>>>>    2) additional metrics can be registered on the returned
> >>>>>>>>>>>> group,
> >>>>>>>>>>>>>>>    3) see 1),
> >>>>>>>>>>>>>>>    4) single place where metrics are registered except
> >>>>>>>>>>>>>>>    connector-specific
> >>>>>>>>>>>>>>>    ones (which we can't really avoid).
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>    Re: Histogram
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>    1) As an example, whether "numRecordsIn" is exposed as a
> >>>>>>>>>>>>>>>    Counter or a
> >>>>>>>>>>>>>>>    Gauge should be irrelevant. So far we're using the
> metric
> >>>>>>>>>>>> type
> >>>>>>>>>>>>>>>    that is
> >>>>>>>>>>>>>>>    the most convenient at exposing a given value. If there
> >>> is
> >>>>>>>>>>>>>>>    some backing
> >>>>>>>>>>>>>>>    data-structure that we want to expose some data from we
> >>>>>>>>>>>>>>>    typically opt
> >>>>>>>>>>>>>>>    for a Gauge, as otherwise we're just mucking around with
> >>>>> the
> >>>>>>>>>>>>>>>    Meter/Counter API to get it to match. Similarly, if we
> >>> want
> >>>>>>>>>>>> to
> >>>>>>>>>>>>>>>    count
> >>>>>>>>>>>>>>>    something but no current count exists we typically added
> >>> a
> >>>>>>>>>>>>>>>    Counter.
> >>>>>>>>>>>>>>>    That's why attaching semantics to metric types makes
> >>> little
> >>>>>>>>>>>>>>>    sense (but
> >>>>>>>>>>>>>>>    unfortunately several reporters already do it); for
> >>>>>>>>>>>>>>>    counters/meters
> >>>>>>>>>>>>>>>    certainly, but the majority of metrics are gauges.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>    2) I'm talking about time-series databases like
> >>> Prometheus.
> >>>>>>>>>>>> We
> >>>>>>>>>>>>>>>    would
> >>>>>>>>>>>>>>>    only have a gauge metric exposing the last
> >>>>>>> fetchTime/emitTime
> >>>>>>>>>>>>>>>    that is
> >>>>>>>>>>>>>>>    regularly reported to the backend (Prometheus), where a
> >>>>> user
> >>>>>>>>>>>>>>>    could build
> >>>>>>>>>>>>>>>    a histogram of his choosing when/if he wants it.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>    On 22.02.2019 13:57, Becket Qin wrote:
> >>>>>>>>>>>>>>>> Hi Chesnay,
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Thanks for the explanation.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> ** Re: FLIP
> >>>>>>>>>>>>>>>> I might have misunderstood this, but it seems that "major
> >>>>>>>>>>>>>>>    changes" are well
> >>>>>>>>>>>>>>>> defined in FLIP. The full contents is following:
> >>>>>>>>>>>>>>>> What is considered a "major change" that needs a FLIP?
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Any of the following should be considered a major change:
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> - Any major new feature, subsystem, or piece of
> >>>>>>>>>>>>>>>    functionality
> >>>>>>>>>>>>>>>> - *Any change that impacts the public interfaces of the
> >>>>>>>>>>>>>>>    project*
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> What are the "public interfaces" of the project?
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> *All of the following are public interfaces *that people
> >>>>>>>>>>>>>>>    build around:
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> - DataStream and DataSet API, including classes related
> >>>>>>>>>>>>>>>    to that, such as
> >>>>>>>>>>>>>>>> StreamExecutionEnvironment
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> - Classes marked with the @Public annotation
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> - On-disk binary formats, such as
> >>>>>>>>>>>> checkpoints/savepoints
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> - User-facing scripts/command-line tools, i.e.
> >>>>>>>>>>>>>>>    bin/flink, Yarn scripts,
> >>>>>>>>>>>>>>>> Mesos scripts
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> - Configuration settings
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> - *Exposed monitoring information*
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> So any monitoring information change is considered as
> >>>>>>>>>>>> public
> >>>>>>>>>>>>>>>    interface, and
> >>>>>>>>>>>>>>>> any public interface change is considered as a "major
> >>>>>>>>>>>>> change".
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> ** Re: over complication of implementation.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Although this is more of implementation details that is
> not
> >>>>>>>>>>>>>>>    covered by the
> >>>>>>>>>>>>>>>> FLIP. But it may be worth discussing.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> First of all, I completely agree that we should use the
> >>>>>>>>>>>>>>>    simplest way to
> >>>>>>>>>>>>>>>> achieve our goal. To me the goal is the following:
> >>>>>>>>>>>>>>>> 1. Clear connector conventions and interfaces.
> >>>>>>>>>>>>>>>> 2. The easiness of creating a connector.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Both of them are important to the prosperity of the
> >>>>>>>>>>>>>>>    connector ecosystem. So
> >>>>>>>>>>>>>>>> I'd rather abstract as much as possible on our side to
> make
> >>>>>>>>>>>>>>>    the connector
> >>>>>>>>>>>>>>>> developer's work lighter. Given this goal, a static util
> >>>>>>>>>>>>>>>    method approach
> >>>>>>>>>>>>>>>> might have a few drawbacks:
> >>>>>>>>>>>>>>>> 1. Users still have to construct the metrics by
> themselves.
> >>>>>>>>>>>>>>>    (And note that
> >>>>>>>>>>>>>>>> this might be erroneous by itself. For example, a customer
> >>>>>>>>>>>>>>>    wrapper around
> >>>>>>>>>>>>>>>> dropwizard meter maybe used instead of MeterView).
> >>>>>>>>>>>>>>>> 2. When connector specific metrics are added, it is
> >>>>>>>>>>>>>>>    difficult to enforce
> >>>>>>>>>>>>>>>> the scope to be the same as standard metrics.
> >>>>>>>>>>>>>>>> 3. It seems that a method proliferation is inevitable if
> we
> >>>>>>>>>>>>>>>    want to apply
> >>>>>>>>>>>>>>>> sanity checks. e.g. The metric of numBytesIn was not
> >>>>>>>>>>>>>>>    registered for a meter.
> >>>>>>>>>>>>>>>> 4. Metrics are still defined in random places and hard to
> >>>>>>>>>>>>>> track.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> The current PR I had was inspired by the Config system in
> >>>>>>>>>>>>>>>    Kafka, which I
> >>>>>>>>>>>>>>>> found pretty handy. In fact it is not only used by Kafka
> >>>>>>>>>>>>>>>    itself but even
> >>>>>>>>>>>>>>>> some other projects that depend on Kafka. I am not saying
> >>>>>>>>>>>>>>>    this approach is
> >>>>>>>>>>>>>>>> perfect. But I think it worths to save the work for
> >>>>>>>>>>>>>>>    connector writers and
> >>>>>>>>>>>>>>>> encourage more systematic implementation. That being said,
> >>>>>>>>>>>> I
> >>>>>>>>>>>>>>>    am fully open
> >>>>>>>>>>>>>>>> to suggestions.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Re: Histogram
> >>>>>>>>>>>>>>>> I think there are two orthogonal questions around those
> >>>>>>>>>>>>>> metrics:
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> 1. Regardless of the metric type, by just looking at the
> >>>>>>>>>>>>>>>    meaning of a
> >>>>>>>>>>>>>>>> metric, is generic to all connectors? If the answer is
> yes,
> >>>>>>>>>>>>>>>    we should
> >>>>>>>>>>>>>>>> include the metric into the convention. No matter whether
> >>>>>>>>>>>> we
> >>>>>>>>>>>>>>>    include it
> >>>>>>>>>>>>>>>> into the convention or not, some connector implementations
> >>>>>>>>>>>>>>>    will emit such
> >>>>>>>>>>>>>>>> metric. It is better to have a convention than letting
> each
> >>>>>>>>>>>>>>>    connector do
> >>>>>>>>>>>>>>>> random things.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> 2. If a standard metric is a histogram, what should we do?
> >>>>>>>>>>>>>>>> I agree that we should make it clear that using histograms
> >>>>>>>>>>>>>>>    will have
> >>>>>>>>>>>>>>>> performance risk. But I do see histogram is useful in some
> >>>>>>>>>>>>>>>    fine-granularity
> >>>>>>>>>>>>>>>> debugging where one do not have the luxury to stop the
> >>>>>>>>>>>>>>>    system and inject
> >>>>>>>>>>>>>>>> more inspection code. So the workaround I am thinking is
> to
> >>>>>>>>>>>>>>>    provide some
> >>>>>>>>>>>>>>>> implementation suggestions. Assume later on we have a
> >>>>>>>>>>>>>>>    mechanism of
> >>>>>>>>>>>>>>>> selective metrics. In the abstract metrics class we can
> >>>>>>>>>>>>>>>    disable those
> >>>>>>>>>>>>>>>> metrics by default individual connector writers does not
> >>>>>>>>>>>>>>>    have to do
> >>>>>>>>>>>>>>>> anything (this is another advantage of having an
> >>>>>>>>>>>>>>>    AbstractMetrics instead of
> >>>>>>>>>>>>>>>> static util methods.)
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> I am not sure I fully understand the histogram in the
> >>>>>>>>>>>>>>>    backend approach. Can
> >>>>>>>>>>>>>>>> you explain a bit more? Do you mean emitting the raw data,
> >>>>>>>>>>>>>>>    e.g. fetchTime
> >>>>>>>>>>>>>>>> and emitTime with each record and let the histogram
> >>>>>>>>>>>>>>>    computation happen in
> >>>>>>>>>>>>>>>> the background? Or let the processing thread putting the
> >>>>>>>>>>>>>>>    values into a
> >>>>>>>>>>>>>>>> queue and have a separate thread polling from the queue
> and
> >>>>>>>>>>>>>>>    add them into
> >>>>>>>>>>>>>>>> the histogram?
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Thanks,
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Jiangjie (Becket) Qin
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> On Fri, Feb 22, 2019 at 4:34 PM Chesnay Schepler
> >>>>>>>>>>>>>>>    <ches...@apache.org <mailto:ches...@apache.org>> wrote:
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Re: Flip
> >>>>>>>>>>>>>>>>> The very first line under both the main header and
> Purpose
> >>>>>>>>>>>>>>>    section
> >>>>>>>>>>>>>>>>> describe Flips as "major changes", which this isn't.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Re: complication
> >>>>>>>>>>>>>>>>> I'm not arguing against standardization, but again an
> >>>>>>>>>>>>>>>    over-complicated
> >>>>>>>>>>>>>>>>> implementation when a static utility method would be
> >>>>>>>>>>>>>>>    sufficient.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> public static void setupConnectorMetrics(
> >>>>>>>>>>>>>>>>> MetricGroup operatorMetricGroup,
> >>>>>>>>>>>>>>>>> String connectorName,
> >>>>>>>>>>>>>>>>> Optional<Gauge<Long>> numRecordsIn,
> >>>>>>>>>>>>>>>>> ...)
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> This gives you all you need:
> >>>>>>>>>>>>>>>>> * a well-defined set of metrics for a connector to opt-in
> >>>>>>>>>>>>>>>>> * standardized naming schemes for scope and individual
> >>>>>>>>>>>>> metrics
> >>>>>>>>>>>>>>>>> * standardize metric types (although personally I'm not
> >>>>>>>>>>>>>>>    interested in that
> >>>>>>>>>>>>>>>>> since metric types should be considered syntactic sugar)
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Re: Configurable Histogram
> >>>>>>>>>>>>>>>>> If anything they _must_ be turned off by default, but the
> >>>>>>>>>>>>>>>    metric system is
> >>>>>>>>>>>>>>>>> already exposing so many options that I'm not too keen on
> >>>>>>>>>>>>>>>    adding even more.
> >>>>>>>>>>>>>>>>> You have also only addressed my first argument against
> >>>>>>>>>>>>>>>    histograms
> >>>>>>>>>>>>>>>>> (performance), the second one still stands (calculate
> >>>>>>>>>>>>>>>    histogram in metric
> >>>>>>>>>>>>>>>>> backends instead).
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> On 21.02.2019 16:27, Becket Qin wrote:
> >>>>>>>>>>>>>>>>>> Hi Chesnay,
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> Thanks for the comments. I think this is worthy of a
> FLIP
> >>>>>>>>>>>>>>>    because it is
> >>>>>>>>>>>>>>>>>> public API. According to the FLIP description a FlIP is
> >>>>>>>>>>>>>>>    required in case
> >>>>>>>>>>>>>>>>> of:
> >>>>>>>>>>>>>>>>>> - Any change that impacts the public interfaces of
> >>>>>>>>>>>>>>>    the project
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> and the following entry is found in the definition of
> >>>>>>>>>>>>>>>    "public interface".
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> - Exposed monitoring information
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> Metrics are critical to any production system. So a
> clear
> >>>>>>>>>>>>>>>    metric
> >>>>>>>>>>>>>>>>> definition
> >>>>>>>>>>>>>>>>>> is important for any serious users. For an organization
> >>>>>>>>>>>>>>>    with large Flink
> >>>>>>>>>>>>>>>>>> installation, change in metrics means great amount of
> >>>>>>>>>>>>>>>    work. So such
> >>>>>>>>>>>>>>>>> changes
> >>>>>>>>>>>>>>>>>> do need to be fully discussed and documented.
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> ** Re: Histogram.
> >>>>>>>>>>>>>>>>>> We can discuss whether there is a better way to expose
> >>>>>>>>>>>>>>>    metrics that are
> >>>>>>>>>>>>>>>>>> suitable for histograms. My micro-benchmark on various
> >>>>>>>>>>>>>>>    histogram
> >>>>>>>>>>>>>>>>>> implementations also indicates that they are
> >>>>>>>>>>>> significantly
> >>>>>>>>>>>>>>>    slower than
> >>>>>>>>>>>>>>>>>> other metric types. But I don't think that means never
> >>>>>>>>>>>> use
> >>>>>>>>>>>>>>>    histogram, but
> >>>>>>>>>>>>>>>>>> means use it with caution. For example, we can suggest
> >>>>>>>>>>>> the
> >>>>>>>>>>>>>>>>> implementations
> >>>>>>>>>>>>>>>>>> to turn them off by default and only turn it on for a
> >>>>>>>>>>>>>>>    small amount of
> >>>>>>>>>>>>>>>>> time
> >>>>>>>>>>>>>>>>>> when performing some micro-debugging.
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> ** Re: complication:
> >>>>>>>>>>>>>>>>>> Connector conventions are essential for Flink ecosystem.
> >>>>>>>>>>>>>>>    Flink connectors
> >>>>>>>>>>>>>>>>>> pool is probably the most important part of Flink, just
> >>>>>>>>>>>>>>>    like any other
> >>>>>>>>>>>>>>>>> data
> >>>>>>>>>>>>>>>>>> system. Clear conventions of connectors will help build
> >>>>>>>>>>>>>>>    Flink ecosystem
> >>>>>>>>>>>>>>>>> in
> >>>>>>>>>>>>>>>>>> a more organic way.
> >>>>>>>>>>>>>>>>>> Take the metrics convention as an example, imagine
> >>>>>>>>>>>> someone
> >>>>>>>>>>>>>>>    has developed
> >>>>>>>>>>>>>>>>> a
> >>>>>>>>>>>>>>>>>> Flink connector for System foo, and another developer
> may
> >>>>>>>>>>>>>>>    have developed
> >>>>>>>>>>>>>>>>> a
> >>>>>>>>>>>>>>>>>> monitoring and diagnostic framework for Flink which
> >>>>>>>>>>>>>>>    analyzes the Flink
> >>>>>>>>>>>>>>>>> job
> >>>>>>>>>>>>>>>>>> performance based on metrics. With a clear metric
> >>>>>>>>>>>>>>>    convention, those two
> >>>>>>>>>>>>>>>>>> projects could be developed independently. Once users
> put
> >>>>>>>>>>>>>>>    them together,
> >>>>>>>>>>>>>>>>>> it would work without additional modifications. This
> >>>>>>>>>>>>>>>    cannot be easily
> >>>>>>>>>>>>>>>>>> achieved by just defining a few constants.
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> ** Re: selective metrics:
> >>>>>>>>>>>>>>>>>> Sure, we can discuss that in a separate thread.
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> @Dawid
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> ** Re: latency / fetchedLatency
> >>>>>>>>>>>>>>>>>> The primary purpose of establish such a convention is to
> >>>>>>>>>>>>>>>    help developers
> >>>>>>>>>>>>>>>>>> write connectors in a more compatible way. The
> convention
> >>>>>>>>>>>>>>>    is supposed to
> >>>>>>>>>>>>>>>>> be
> >>>>>>>>>>>>>>>>>> defined more proactively. So when look at the
> convention,
> >>>>>>>>>>>>>>>    it seems more
> >>>>>>>>>>>>>>>>>> important to see if the concept is applicable to
> >>>>>>>>>>>>>>>    connectors in general.
> >>>>>>>>>>>>>>>>> It
> >>>>>>>>>>>>>>>>>> might be true so far only Kafka connector reports
> >>>>>>>>>>>> latency.
> >>>>>>>>>>>>>>>    But there
> >>>>>>>>>>>>>>>>> might
> >>>>>>>>>>>>>>>>>> be hundreds of other connector implementations in the
> >>>>>>>>>>>>>>>    Flink ecosystem,
> >>>>>>>>>>>>>>>>>> though not in the Flink repo, and some of them also
> emits
> >>>>>>>>>>>>>>>    latency. I
> >>>>>>>>>>>>>>>>> think
> >>>>>>>>>>>>>>>>>> a lot of other sources actually also has an append
> >>>>>>>>>>>>>>>    timestamp. e.g.
> >>>>>>>>>>>>>>>>> database
> >>>>>>>>>>>>>>>>>> bin logs and some K-V stores. So I wouldn't be surprised
> >>>>>>>>>>>>>>>    if some database
> >>>>>>>>>>>>>>>>>> connector can also emit latency metrics.
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> Thanks,
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> Jiangjie (Becket) Qin
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> On Thu, Feb 21, 2019 at 10:14 PM Chesnay Schepler
> >>>>>>>>>>>>>>>    <ches...@apache.org <mailto:ches...@apache.org>>
> >>>>>>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> Regarding 2) It doesn't make sense to investigate this
> >>>>>>>>>>>> as
> >>>>>>>>>>>>>>>    part of this
> >>>>>>>>>>>>>>>>>>> FLIP. This is something that could be of interest for
> >>>>>>>>>>>> the
> >>>>>>>>>>>>>>>    entire metric
> >>>>>>>>>>>>>>>>>>> system, and should be designed for as such.
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> Regarding the proposal as a whole:
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> Histogram metrics shall not be added to the core of
> >>>>>>>>>>>>>>>    Flink. They are
> >>>>>>>>>>>>>>>>>>> significantly more expensive than other metrics, and
> >>>>>>>>>>>>>>>    calculating
> >>>>>>>>>>>>>>>>>>> histograms in the application is regarded as an
> >>>>>>>>>>>>>>>    anti-pattern by several
> >>>>>>>>>>>>>>>>>>> metric backends, who instead recommend to expose the
> raw
> >>>>>>>>>>>>>>>    data and
> >>>>>>>>>>>>>>>>>>> calculate the histogram in the backend.
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> Second, this seems overly complicated. Given that we
> >>>>>>>>>>>>>>>    already established
> >>>>>>>>>>>>>>>>>>> that not all connectors will export all metrics we are
> >>>>>>>>>>>>>>>    effectively
> >>>>>>>>>>>>>>>>>>> reducing this down to a consistent naming scheme. We
> >>>>>>>>>>>>>>>    don't need anything
> >>>>>>>>>>>>>>>>>>> sophisticated for that; basically just a few constants
> >>>>>>>>>>>>>>>    that all
> >>>>>>>>>>>>>>>>>>> connectors use.
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> I'm not convinced that this is worthy of a FLIP.
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> On 21.02.2019 14:26, Dawid Wysakowicz wrote:
> >>>>>>>>>>>>>>>>>>>> Hi,
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> Ad 1. In general I undestand and I agree. But those
> >>>>>>>>>>>>>>>    particular metrics
> >>>>>>>>>>>>>>>>>>>> (latency, fetchLatency), right now would only be
> >>>>>>>>>>>>>>>    reported if user uses
> >>>>>>>>>>>>>>>>>>>> KafkaConsumer with internal timestampAssigner with
> >>>>>>>>>>>>>>>    StreamCharacteristic
> >>>>>>>>>>>>>>>>>>>> set to EventTime, right? That sounds like a very
> >>>>>>>>>>>>>>>    specific case. I am
> >>>>>>>>>>>>>>>>> not
> >>>>>>>>>>>>>>>>>>>> sure if we should introduce a generic metric that will
> >>>>>>>>>>>> be
> >>>>>>>>>>>>>>>>>>>> disabled/absent for most of implementations.
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> Ad.2 That sounds like an orthogonal issue, that might
> >>>>>>>>>>>>>>>    make sense to
> >>>>>>>>>>>>>>>>>>>> investigate in the future.
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> Best,
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> Dawid
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> On 21/02/2019 13:20, Becket Qin wrote:
> >>>>>>>>>>>>>>>>>>>>> Hi Dawid,
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>> Thanks for the feedback. That makes sense to me.
> There
> >>>>>>>>>>>>>>>    are two cases
> >>>>>>>>>>>>>>>>> to
> >>>>>>>>>>>>>>>>>>> be
> >>>>>>>>>>>>>>>>>>>>> addressed.
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>> 1. The metrics are supposed to be a guidance. It is
> >>>>>>>>>>>>>>>    likely that a
> >>>>>>>>>>>>>>>>>>> connector
> >>>>>>>>>>>>>>>>>>>>> only supports some but not all of the metrics. In
> that
> >>>>>>>>>>>>>>>    case, each
> >>>>>>>>>>>>>>>>>>> connector
> >>>>>>>>>>>>>>>>>>>>> implementation should have the freedom to decide
> which
> >>>>>>>>>>>>>>>    metrics are
> >>>>>>>>>>>>>>>>>>>>> reported. For the metrics that are supported, the
> >>>>>>>>>>>>>>>    guidance should be
> >>>>>>>>>>>>>>>>>>>>> followed.
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>> 2. Sometimes users may want to disable certain
> metrics
> >>>>>>>>>>>>>>>    for some reason
> >>>>>>>>>>>>>>>>>>>>> (e.g. performance / reprocessing of data). A generic
> >>>>>>>>>>>>>>>    mechanism should
> >>>>>>>>>>>>>>>>> be
> >>>>>>>>>>>>>>>>>>>>> provided to allow user choose which metrics are
> >>>>>>>>>>>>>>>    reported. This
> >>>>>>>>>>>>>>>>> mechanism
> >>>>>>>>>>>>>>>>>>>>> should also be honored by the connector
> >>>>>>>>>>>> implementations.
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>> Does this sound reasonable to you?
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>> Thanks,
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>> Jiangjie (Becket) Qin
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>> On Thu, Feb 21, 2019 at 4:22 PM Dawid Wysakowicz <
> >>>>>>>>>>>>>>>>>>> dwysakow...@apache.org <mailto:dwysakow...@apache.org
> >>
> >>>>>>>>>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>> Hi,
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>> Generally I like the idea of having a unified,
> >>>>>>>>>>>>>>>    standard set of
> >>>>>>>>>>>>>>>>> metrics
> >>>>>>>>>>>>>>>>>>> for
> >>>>>>>>>>>>>>>>>>>>>> all connectors. I have some slight concerns about
> >>>>>>>>>>>>>>>    fetchLatency and
> >>>>>>>>>>>>>>>>>>>>>> latency though. They are computed based on EventTime
> >>>>>>>>>>>>>>>    which is not a
> >>>>>>>>>>>>>>>>>>> purely
> >>>>>>>>>>>>>>>>>>>>>> technical feature. It depends often on some business
> >>>>>>>>>>>>>>>    logic, might be
> >>>>>>>>>>>>>>>>>>> absent
> >>>>>>>>>>>>>>>>>>>>>> or defined after source. Those metrics could also
> >>>>>>>>>>>>>>>    behave in a weird
> >>>>>>>>>>>>>>>>>>> way in
> >>>>>>>>>>>>>>>>>>>>>> case of replaying backlog. Therefore I am not sure
> if
> >>>>>>>>>>>>>>>    we should
> >>>>>>>>>>>>>>>>> include
> >>>>>>>>>>>>>>>>>>>>>> those metrics by default. Maybe we could at least
> >>>>>>>>>>>>>>>    introduce a feature
> >>>>>>>>>>>>>>>>>>>>>> switch for them? What do you think?
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>> Best,
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>> Dawid
> >>>>>>>>>>>>>>>>>>>>>> On 21/02/2019 03:13, Becket Qin wrote:
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>> Bump. If there is no objections to the proposed
> >>>>>>>>>>>>>>>    metrics. I'll start a
> >>>>>>>>>>>>>>>>>>>>>> voting thread later toady.
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>> Thanks,
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>> Jiangjie (Becket) Qin
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>> On Mon, Feb 11, 2019 at 8:17 PM Becket Qin
> >>>>>>>>>>>>>>>    <becket....@gmail.com <mailto:becket....@gmail.com>> <
> >>>>>>>>>>>>>>>>>>> becket....@gmail.com <mailto:becket....@gmail.com>>
> >>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>>>>>>> Hi folks,
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>> I would like to start the FLIP discussion thread
> >>>>>>>>>>>> about
> >>>>>>>>>>>>>>>    standardize
> >>>>>>>>>>>>>>>>> the
> >>>>>>>>>>>>>>>>>>>>>> connector metrics.
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>> In short, we would like to provide a convention of
> >>>>>>>>>>>>>>>    Flink connector
> >>>>>>>>>>>>>>>>>>>>>> metrics. It will help simplify the monitoring and
> >>>>>>>>>>>>>>>    alerting on Flink
> >>>>>>>>>>>>>>>>>>> jobs.
> >>>>>>>>>>>>>>>>>>>>>> The FLIP link is following:
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>
> >>>>>
> >>>
> https://cwiki.apache.org/confluence/display/FLINK/FLIP-33%3A+Standardize+Connector+Metrics
> >>>>>>>>>>>>>>>>>>>>>> Thanks,
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>> Jiangjie (Becket) Qin
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>
> >>>
>
>

Reply via email to