Hey Konstantin,

Thanks for the feedback and suggestions. Please see the reply below.

* idleTime: In the meantime, a similar metric "idleTimeMsPerSecond" has
> been introduced in https://issues.apache.org/jira/browse/FLINK-16864. They
> have a similar name, but different definitions of idleness,
> e.g. "idleTimeMsPerSecond" considers the SourceTask idle, when it is
> backpressured. Can we make it clearer that these two metrics mean different
> things?


That is a good point. I did not notice this metric earlier. It seems that
both metrics are useful to the users. One tells them how busy the source is
and how much more throughput the source can handle. The other tells the
users how long since the source has seen the last record, which is useful
for debugging. I'll update the FLIP to make it clear.

  * "current(Fetch)Latency" I am wondering if "eventTimeLag(Before|After)"
> is more descriptive/clear. What do others think?


I am quite open to the ideas on these names. In fact I also feel
"current(Fetch)Latency" are not super intuitive. So it would be great if we
can have better names.

  * Current(Fetch)Latency implies that the timestamps are directly
> extracted in the source connector, right? Will this be the default for
> FLIP-27 sources anyway?


The "currentFetchLatency" will probably be reported by each source
implementation, because the data fetching is done by SplitReaders and there
is no base implementation. The "currentLatency", on the other hand, can be
reported by the SourceReader base implementation. However, since developers
can actually implement their own source connector without using our base
implementation, these metric guidance are still useful for the connector
developers in that case.

* Does FLIP-33 also include the implementation of these metrics (to the
> extent possible) for all connectors currently available in Apache Flink or
> is the "per-connector implementation" out-of-scope?


FLIP-33 itself does not specify any implementation of those metrics. But
the connectors we provide in Apache Flink will follow the guidance of
FLIP-33 to emit those metrics when applicable. Maybe We can have some
public static Strings defined for the metric names to help other connector
developers follow the same guidance. I can also add that to the public
interface section of the FLIP if we decide to do that.

Thanks,

Jiangjie (Becket) Qin

On Tue, Sep 8, 2020 at 9:02 PM Becket Qin <becket....@gmail.com> wrote:

>
>
> On Tue, Sep 8, 2020 at 6:55 PM Konstantin Knauf <kna...@apache.org> wrote:
>
>> Hi Becket,
>>
>> Thank you for picking up this FLIP. I have a few questions:
>>
>> * two thoughts on naming:
>>    * idleTime: In the meantime, a similar metric "idleTimeMsPerSecond" has
>> been introduced in https://issues.apache.org/jira/browse/FLINK-16864.
>> They
>> have a similar name, but different definitions of idleness,
>> e.g. "idleTimeMsPerSecond" considers the SourceTask idle, when it is
>> backpressured. Can we make it clearer that these two metrics mean
>> different
>> things?
>>
>>   * "current(Fetch)Latency" I am wondering if "eventTimeLag(Before|After)"
>> is more descriptive/clear. What do others think?
>>
>>   * Current(Fetch)Latency implies that the timestamps are directly
>> extracted in the source connector, right? Will this be the default for
>> FLIP-27 sources anyway?
>>
>> * Does FLIP-33 also include the implementation of these metrics (to the
>> extent possible) for all connectors currently available in Apache Flink or
>> is the "per-connector implementation" out-of-scope?
>>
>> Thanks,
>>
>> Konstantin
>>
>>
>>
>>
>>
>> On Fri, Sep 4, 2020 at 4:56 PM Becket Qin <becket....@gmail.com> wrote:
>>
>> > Hi all,
>> >
>> > To complete the Source refactoring work, I'd like to revive this
>> > discussion. Since the mail thread has been dormant for more than a year,
>> > just to recap the motivation of the FLIP:
>> >
>> > 1. The FLIP proposes to standardize the connector metrics by giving
>> > guidance on the metric specifications, including the name, type and
>> meaning
>> > of the metrics.
>> > 2. It is OK for a connector to not emit some of the metrics in the
>> metric
>> > guidance, but if a metric of the same semantic is emitted, the
>> > implementation should follow the guidance.
>> > 3. It is OK for a connector to emit more metrics than what are listed in
>> > the FLIP. This includes having an alias for a metric specified in the
>> FLIP.
>> > 4. We will implement some of the metrics out of the box in the default
>> > implementation of FLIP-27, as long as it is applicable.
>> >
>> > The FLIP wiki is following:
>> > https://cwiki.apache.org/confluence/display/FLINK/FLIP-33
>> > %3A+Standardize+Connector+Metrics
>> >
>> > Any thoughts?
>> >
>> > Thanks,
>> >
>> > Jiangjie (Becket) Qin
>> >
>> >
>> > On Fri, Jun 14, 2019 at 2:29 PM Piotr Nowojski <pi...@ververica.com>
>> > wrote:
>> >
>> > > > 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
>> > > >>>>>>>>>>>>>>>>>>>>>>>>
>> > > >>>>>>>>>>>>>>>>>>>>>>>>
>> > > >>>>>>>>>>>>>>>>>>>>>>>>
>> > > >>>>>>>>>>>>>>>>>>>
>> > > >>>>>>>>>>>>>>>>>
>> > > >>>>>>>>>>>>>>>>
>> > > >>>>>>>>>>>>>>>>
>> > > >>>>>>>>>>>>>>>
>> > > >>>>>>>>>>>>>>
>> > > >>>>>>>>>>>>
>> > > >>>>>>>>>>>>
>> > > >>>>>>>>>
>> > > >>>>>>>>>
>> > > >>>>>>>>>
>> > > >>>>>>>
>> > > >>>>>>>
>> > > >>>>>>>
>> > > >>>>>
>> > > >>>>>
>> > > >>
>> > > >>
>> > >
>> > >
>> >
>>
>>
>> --
>>
>> Konstantin Knauf
>>
>> https://twitter.com/snntrable
>>
>> https://github.com/knaufk
>>
>

Reply via email to