> we will need to revisit the convention list and adjust them accordingly when 
> FLIP-27 is ready


Yes, this sounds good :)

Piotrek

> On 13 Jun 2019, at 13:35, Becket Qin <becket....@gmail.com> wrote:
> 
> 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