Indeed, it is a bit tricky to understand the relation between
floatingBuffersUsage, exclusiveBuffersUsage. I am reading again that
table on (https://flink.apache.org/2019/07/23/flink-network-stack-2.html)
but I guess I can rely on the latency metric that I implemented on my
operator (not the default latency tracking from Flink).

Thanks for the insight points!
Felipe
--
-- Felipe Gutierrez
-- skype: felipe.o.gutierrez
-- https://felipeogutierrez.blogspot.com

On Sat, Mar 7, 2020 at 4:36 PM Zhijiang <wangzhijiang...@aliyun.com> wrote:
>
> Thanks for the feedback Felipe!
> Regarding with your below concern:
>
> > Although I think it is better to use outPoolUsage and inPoolUsage according 
> > to [1]. However, in your opinion is it better (faster to see) to use 
> > inputQueueLength and
> > outputQueueLength or outPoolUsage and inPoolUsage to monitor a consequence 
> > of backpressure? I mean, is there a faster way to show that the latency 
> > increased due to
> > backpressure? Maybe if I create my own metric on my own operator or udf?
>
> The blog [1] already gave a great explanation of network stack for users in 
> general and I also have the consensus on this issue.
> In particular,I can provide some further notes for your understanding.
>
> 1. It is not easy for users to get the precise total amount of input & output 
> buffers, so we are not aware of whether the input & output buffers are 
> exhausted and backpressure is happened from the metrics of 
> input&outputQueueLength. In contrast, we can know easily that input & 
> outputPoolUsage should both reach 100% once backpressure happening.
>
> 2. The inputPoolUsage has the different semantic from release-1.9. Before 1.9 
> this metric is only for measuring the usage of floating buffers. But from 1.9 
> it also covers the usage of exclusive buffers. That means from 1.9 you might 
> see the inputPoolUsage far from 100% when backpressure happens especially in 
> the data skew case, but the inputFloatingBufferUsage should be 100% instead.
>
> 3. The latency marker provided by flink framework is emitted to a random 
> channel (non-broadcast) every time because of performance concern. So it is 
> hard to say whether it is measuring the heavy-load channel or lightweight 
> channel in short while, especially in data skew scenario.
>
> 4. In theory the latency should be increased along with the trend of 
> increased input&outputQueueLength and input&outputPoolUsage. All of them 
> should be proportional to have the same trend in most cases.
>
> Best,
> Zhijiang
>
>
>
> ------------------------------------------------------------------
> From:Felipe Gutierrez <felipe.o.gutier...@gmail.com>
> Send Time:2020 Mar. 7 (Sat.) 18:49
> To:Arvid Heise <ar...@ververica.com>
> Cc:Zhijiang <wangzhijiang...@aliyun.com>; user <user@flink.apache.org>
> Subject:Re: Backpressure and 99th percentile latency
>
> Hi,
> I implemented my own histogram metric on my operator to measure the
> latency. The latency is following the throughput at the same pace now.
> The figures are attached.
>
> Best,
> Felipe
>
> --
> -- Felipe Gutierrez
> -- skype: felipe.o.gutierrez
> -- https://felipeogutierrez.blogspot.com
>
> On Fri, Mar 6, 2020 at 9:38 AM Felipe Gutierrez
> <felipe.o.gutier...@gmail.com> wrote:
> >
> > Thanks for the clarified answer @Zhijiang, I am gonna monitor
> > inputQueueLength and outputQueueLength to check some relation with
> > backpressure. Although I think it is better to use outPoolUsage and
> > inPoolUsage according to [1].
> > However, in your opinion is it better (faster to see) to use
> > inputQueueLength and outputQueueLength or outPoolUsage and inPoolUsage
> > to monitor a consequence of backpressure? I mean, is there a faster
> > way to show that the latency increased due to backpressure? Maybe if I
> > create my own metric on my own operator or udf?
> >
> > Thanks @Arvid. In the end I want to be able to hold SLAs. For me, the
> > SLA would be the minimum latency. If I understood correctly, in the
> > time that I started to have backpressure the latency track metrics are
> > not a very precise indication of how much backpressure my application
> > is suffering. It just indicates that there is backpressure.
> > What would you say that is more less precise metric to tune the
> > throughput in order to not have backpressure. Something like, if I
> > have 50,000 milliseconds of latency and the normal latency is 150
> > milliseconds, the throughput has to decrease by a factor of 50,000/150
> > times.
> >
> > Just a note. I am not changing the throughput of the sources yet. I am
> > changing the size of the window without restart the job. But I guess
> > they have the same meaning for this question.
> >
> > [1] https://flink.apache.org/2019/07/23/flink-network-stack-2.html
> >
> > --
> > -- Felipe Gutierrez
> > -- skype: felipe.o.gutierrez
> > -- https://felipeogutierrez.blogspot.com
> >
> > --
> > -- Felipe Gutierrez
> > -- skype: felipe.o.gutierrez
> > -- https://felipeogutierrez.blogspot.com
> >
> >
> > On Fri, Mar 6, 2020 at 8:17 AM Arvid Heise <ar...@ververica.com> wrote:
> > >
> > > Hi Felipe,
> > >
> > > latency under backpressure has to be carefully interpreted. Latency's 
> > > semantics actually require that the data source is read in a timely 
> > > manner; that is, there is no bottleneck in your pipeline where data is 
> > > piling up.
> > >
> > > Thus, to measure latency in experiments you must ensure that the current 
> > > throughput is below the maximum throughput, for example by gradually 
> > > increasing the throughput with a generating source or through some 
> > > throttles on the external source. Until you reach the maximum throughput, 
> > > latencies semantics is exactly like you expect it. Everything after that 
> > > is more or less just reciprocal to backpressure.
> > >
> > > If you go away from the theoretical consideration and look at actual 
> > > setups, you can easily see why this distinction makes sense: if you have 
> > > a low-latency application, you are doomed if you have backpressure 
> > > (cannot hold SLAs). You would immediately rescale if you see signs of 
> > > backpressure (or even earlier). Then, latency always has the desired 
> > > semantics.
> > >
> > > On Fri, Mar 6, 2020 at 5:55 AM Zhijiang <wangzhijiang...@aliyun.com> 
> > > wrote:
> > >>
> > >> Hi Felipe,
> > >>
> > >> Try to answer your below questions.
> > >>
> > >> > I understand that I am tracking latency every 10 seconds for each 
> > >> > physical instance operator. Is that right?
> > >>
> > >> Generally right. The latency marker is emitted from source and flow 
> > >> through all the intermediate operators until sink. This interval 
> > >> controls the emitting frequency of source.
> > >>
> > >> > The backpressure goes away but the 99th percentile latency is still 
> > >> > the same. Why? Does it have no relation with each other?
> > >>
> > >> The latency might be influenced by buffer flush timeout, network 
> > >> transport and load, etc.  In the case of backpressure, there are huge 
> > >> in-flight data accumulated in network wire, so the latency marker is 
> > >> queuing to wait for network transport which might bring obvious delay. 
> > >> Even the latency marker can not be emitted in time from source because 
> > >> of no available buffers temporarily.
> > >>
> > >> After the backpressure goes away, that does not mean there are no 
> > >> accumulated buffers on network wire, just not reaching the degree of 
> > >> backpressure. So the latency marker still needs to be queued with 
> > >> accumulated buffers on the wire. And it might take some time to digest 
> > >> the previous accumulated buffers completed to relax the latency. I guess 
> > >> it might be your case. You can monitor the metrics of "inputQueueLength" 
> > >> and "outputQueueLength" for confirming the status. Anyway, the answer is 
> > >> yes that it has relation with backpressure, but might have some delay to 
> > >> see the changes obviously.
> > >>
> > >> >In the end I left the experiment for more than 2 hours running and only 
> > >> >after about 1,5 hour the 99th percentile latency got down to 
> > >> >milliseconds. Is that normal?
> > >>
> > >> I guess it is normal as mentioned above.  After there are no accumulated 
> > >> buffers in network stack completely without backpressure, it should go 
> > >> down to milliseconds.
> > >>
> > >> Best,
> > >> Zhijiang
> > >>
> > >> ------------------------------------------------------------------
> > >> From:Felipe Gutierrez <felipe.o.gutier...@gmail.com>
> > >> Send Time:2020 Mar. 6 (Fri.) 05:04
> > >> To:user <user@flink.apache.org>
> > >> Subject:Backpressure and 99th percentile latency
> > >>
> > >> Hi,
> > >>
> > >> I am a bit confused about the topic of tracking latency in Flink [1]. It 
> > >> says if I use the latency track I am measuring the Flinkā€™s network stack 
> > >> but application code latencies also can influence it. For instance, if I 
> > >> am using the metrics.latency.granularity: operator (default) and 
> > >> setLatencyTrackingInterval(10000). I understand that I am tracking 
> > >> latency every 10 seconds for each physical instance operator. Is that 
> > >> right?
> > >>
> > >> In my application, I am tracking the latency of all aggregators. When I 
> > >> have a high workload and I can see backpressure from the flink UI the 
> > >> 99th percentile latency is 13, 25, 21, and 25 seconds. Then I set my 
> > >> aggregator to have a larger window. The backpressure goes away but the 
> > >> 99th percentile latency is still the same. Why? Does it have no relation 
> > >> with each other?
> > >>
> > >> In the end I left the experiment for more than 2 hours running and only 
> > >> after about 1,5 hour the 99th percentile latency got down to 
> > >> milliseconds. Is that normal? Please see the figure attached.
> > >>
> > >> [1] 
> > >> https://flink.apache.org/2019/07/23/flink-network-stack-2.html#latency-tracking
> > >>
> > >> Thanks,
> > >> Felipe
> > >> --
> > >> -- Felipe Gutierrez
> > >> -- skype: felipe.o.gutierrez
> > >> -- https://felipeogutierrez.blogspot.com
> > >>
> > >>
>
>

Reply via email to