This is an automated email from the ASF dual-hosted git repository.

pnowojski pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/flink-web.git

commit de596c53ecfaec5480cab1db7370c9fb5b37bb7a
Author: Piotr Nowojski <[email protected]>
AuthorDate: Wed Jul 7 14:38:36 2021 +0200

    Rebuild website
---
 content/2021/07/07/backpressure.html               | 448 +++++++++++++++++++++
 content/blog/index.html                            |   2 +-
 .../img/blog/2021-07-07-backpressure/animated.png  | Bin 0 -> 847082 bytes
 .../2021-07-07-backpressure/bottleneck-zoom.png    | Bin 0 -> 185048 bytes
 .../2021-07-07-backpressure/simple-example.png     | Bin 0 -> 102308 bytes
 .../2021-07-07-backpressure/sliding-window.png     | Bin 0 -> 22391 bytes
 .../2021-07-07-backpressure/source-task-busy.png   | Bin 0 -> 25852 bytes
 .../img/blog/2021-07-07-backpressure/subtasks.png  | Bin 0 -> 137756 bytes
 content/index.html                                 |   2 +-
 content/zh/index.html                              |   2 +-
 10 files changed, 451 insertions(+), 3 deletions(-)

diff --git a/content/2021/07/07/backpressure.html 
b/content/2021/07/07/backpressure.html
new file mode 100644
index 0000000..1f7f6b4
--- /dev/null
+++ b/content/2021/07/07/backpressure.html
@@ -0,0 +1,448 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <!-- The above 3 meta tags *must* come first in the head; any other head 
content must come *after* these tags -->
+    <title>Apache Flink: How to identify the source of backpressure?</title>
+    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
+    <link rel="icon" href="/favicon.ico" type="image/x-icon">
+
+    <!-- Bootstrap -->
+    <link rel="stylesheet" href="/css/bootstrap.min.css">
+    <link rel="stylesheet" href="/css/flink.css">
+    <link rel="stylesheet" href="/css/syntax.css">
+
+    <!-- Blog RSS feed -->
+    <link href="/blog/feed.xml" rel="alternate" type="application/rss+xml" 
title="Apache Flink Blog: RSS feed" />
+
+    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
+    <!-- We need to load Jquery in the header for custom google analytics 
event tracking-->
+    <script src="/js/jquery.min.js"></script>
+
+    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media 
queries -->
+    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
+    <!--[if lt IE 9]>
+      <script 
src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js";></script>
+      <script 
src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js";></script>
+    <![endif]-->
+  </head>
+  <body>  
+    
+
+    <!-- Main content. -->
+    <div class="container">
+    <div class="row">
+
+      
+     <div id="sidebar" class="col-sm-3">
+        
+
+<!-- Top navbar. -->
+    <nav class="navbar navbar-default">
+        <!-- The logo. -->
+        <div class="navbar-header">
+          <button type="button" class="navbar-toggle collapsed" 
data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+          </button>
+          <div class="navbar-logo">
+            <a href="/">
+              <img alt="Apache Flink" src="/img/flink-header-logo.svg" 
width="147px" height="73px">
+            </a>
+          </div>
+        </div><!-- /.navbar-header -->
+
+        <!-- The navigation links. -->
+        <div class="collapse navbar-collapse" 
id="bs-example-navbar-collapse-1">
+          <ul class="nav navbar-nav navbar-main">
+
+            <!-- First menu section explains visitors what Flink is -->
+
+            <!-- What is Stream Processing? -->
+            <!--
+            <li><a href="/streamprocessing1.html">What is Stream 
Processing?</a></li>
+            -->
+
+            <!-- What is Flink? -->
+            <li><a href="/flink-architecture.html">What is Apache 
Flink?</a></li>
+
+            
+
+            <!-- What is Stateful Functions? -->
+
+            <li><a href="/stateful-functions.html">What is Stateful 
Functions?</a></li>
+
+            <!-- Use cases -->
+            <li><a href="/usecases.html">Use Cases</a></li>
+
+            <!-- Powered by -->
+            <li><a href="/poweredby.html">Powered By</a></li>
+
+
+            &nbsp;
+            <!-- Second menu section aims to support Flink users -->
+
+            <!-- Downloads -->
+            <li><a href="/downloads.html">Downloads</a></li>
+
+            <!-- Getting Started -->
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" 
href="#">Getting Started<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a 
href="https://ci.apache.org/projects/flink/flink-docs-release-1.13//docs/try-flink/local_installation/";
 target="_blank">With Flink <small><span class="glyphicon 
glyphicon-new-window"></span></small></a></li>
+                <li><a 
href="https://ci.apache.org/projects/flink/flink-statefun-docs-release-3.0/getting-started/project-setup.html";
 target="_blank">With Flink Stateful Functions <small><span class="glyphicon 
glyphicon-new-window"></span></small></a></li>
+                <li><a href="/training.html">Training Course</a></li>
+              </ul>
+            </li>
+
+            <!-- Documentation -->
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" 
href="#">Documentation<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a 
href="https://ci.apache.org/projects/flink/flink-docs-release-1.13"; 
target="_blank">Flink 1.13 (Latest stable release) <small><span 
class="glyphicon glyphicon-new-window"></span></small></a></li>
+                <li><a 
href="https://ci.apache.org/projects/flink/flink-docs-master"; 
target="_blank">Flink Master (Latest Snapshot) <small><span class="glyphicon 
glyphicon-new-window"></span></small></a></li>
+                <li><a 
href="https://ci.apache.org/projects/flink/flink-statefun-docs-release-3.0"; 
target="_blank">Flink Stateful Functions 3.0 (Latest stable release) 
<small><span class="glyphicon glyphicon-new-window"></span></small></a></li>
+                <li><a 
href="https://ci.apache.org/projects/flink/flink-statefun-docs-master"; 
target="_blank">Flink Stateful Functions Master (Latest Snapshot) <small><span 
class="glyphicon glyphicon-new-window"></span></small></a></li>
+              </ul>
+            </li>
+
+            <!-- getting help -->
+            <li><a href="/gettinghelp.html">Getting Help</a></li>
+
+            <!-- Blog -->
+            <li><a href="/blog/"><b>Flink Blog</b></a></li>
+
+
+            <!-- Flink-packages -->
+            <li>
+              <a href="https://flink-packages.org"; 
target="_blank">flink-packages.org <small><span class="glyphicon 
glyphicon-new-window"></span></small></a>
+            </li>
+            &nbsp;
+
+            <!-- Third menu section aim to support community and contributors 
-->
+
+            <!-- Community -->
+            <li><a href="/community.html">Community &amp; Project Info</a></li>
+
+            <!-- Roadmap -->
+            <li><a href="/roadmap.html">Roadmap</a></li>
+
+            <!-- Contribute -->
+            <li><a href="/contributing/how-to-contribute.html">How to 
Contribute</a></li>
+            
+
+            <!-- GitHub -->
+            <li>
+              <a href="https://github.com/apache/flink"; target="_blank">Flink 
on GitHub <small><span class="glyphicon 
glyphicon-new-window"></span></small></a>
+            </li>
+
+            &nbsp;
+
+            <!-- Language Switcher -->
+            <li>
+              
+                
+                  <a href="/zh/2021/07/07/backpressure.html">中文版</a>
+                
+              
+            </li>
+
+          </ul>
+
+          <style>
+            .smalllinks:link {
+              display: inline-block !important; background: none; padding-top: 
0px; padding-bottom: 0px; padding-right: 0px; min-width: 75px;
+            }
+          </style>
+
+          <ul class="nav navbar-nav navbar-bottom">
+          <hr />
+
+            <!-- Twitter -->
+            <li><a href="https://twitter.com/apacheflink"; 
target="_blank">@ApacheFlink <small><span class="glyphicon 
glyphicon-new-window"></span></small></a></li>
+
+            <!-- Visualizer -->
+            <li class=" hidden-md hidden-sm"><a href="/visualizer/" 
target="_blank">Plan Visualizer <small><span class="glyphicon 
glyphicon-new-window"></span></small></a></li>
+
+            <li >
+                  <a href="/security.html">Flink Security</a>
+            </li>
+
+          <hr />
+
+            <li><a href="https://apache.org"; target="_blank">Apache Software 
Foundation <small><span class="glyphicon 
glyphicon-new-window"></span></small></a></li>
+
+            <li>
+
+              <a class="smalllinks" href="https://www.apache.org/licenses/"; 
target="_blank">License</a> <small><span class="glyphicon 
glyphicon-new-window"></span></small>
+
+              <a class="smalllinks" href="https://www.apache.org/security/"; 
target="_blank">Security</a> <small><span class="glyphicon 
glyphicon-new-window"></span></small>
+
+              <a class="smalllinks" 
href="https://www.apache.org/foundation/sponsorship.html"; 
target="_blank">Donate</a> <small><span class="glyphicon 
glyphicon-new-window"></span></small>
+
+              <a class="smalllinks" 
href="https://www.apache.org/foundation/thanks.html"; target="_blank">Thanks</a> 
<small><span class="glyphicon glyphicon-new-window"></span></small>
+            </li>
+
+          </ul>
+        </div><!-- /.navbar-collapse -->
+    </nav>
+
+      </div>
+      <div class="col-sm-9">
+      <div class="row-fluid">
+  <div class="col-sm-12">
+    <div class="row">
+      <h1>How to identify the source of backpressure?</h1>
+      <p><i></i></p>
+
+      <article>
+        <p>07 Jul 2021 Piotr Nowojski (<a 
href="https://twitter.com/PiotrNowojski";>@PiotrNowojski</a>)</p>
+
+<div class="page-toc">
+<ul id="markdown-toc">
+  <li><a href="#what-is-backpressure" 
id="markdown-toc-what-is-backpressure">What is backpressure?</a>    <ul>
+      <li><a href="#why-should-i-care-about-backpressure" 
id="markdown-toc-why-should-i-care-about-backpressure">Why should I care about 
backpressure?</a></li>
+      <li><a href="#why-shouldnt-i-care-about-backpressure" 
id="markdown-toc-why-shouldnt-i-care-about-backpressure">Why shouldn’t I care 
about backpressure?</a></li>
+    </ul>
+  </li>
+  <li><a href="#how-to-detect-and-track-down-the-source-of-backpressure" 
id="markdown-toc-how-to-detect-and-track-down-the-source-of-backpressure">How 
to detect and track down the source of backpressure?</a>    <ul>
+      <li><a href="#what-are-those-numbers" 
id="markdown-toc-what-are-those-numbers">What are those numbers?</a></li>
+      <li><a href="#varying-load" id="markdown-toc-varying-load">Varying 
load</a></li>
+    </ul>
+  </li>
+  <li><a href="#what-can-i-do-with-backpressure" 
id="markdown-toc-what-can-i-do-with-backpressure">What can I do with 
backpressure?</a></li>
+</ul>
+
+</div>
+
+<div class="row front-graphic">
+  <img src="/img/blog/2021-07-07-backpressure/animated.png" alt="Backpressure 
monitoring in the web UI" />
+       <p class="align-center">Backpressure monitoring in the web UI</p>
+</div>
+
+<p>The backpressure topic was tackled from different angles over the last 
couple of years. However, when it comes 
+to identifying and analyzing sources of backpressure, things have changed 
quite a bit in the recent Flink releases 
+(especially with new additions to metrics and the web UI in Flink 1.13). This 
post will try to clarify some of 
+these changes and go into more detail about how to track down the source of 
backpressure, but first…</p>
+
+<h2 id="what-is-backpressure">What is backpressure?</h2>
+
+<p>This has been explained very well in an old, but still accurate, <a 
href="https://www.ververica.com/blog/how-flink-handles-backpressure";>post by 
Ufuk Celebi</a>.
+I highly recommend reading it if you are not familiar with this concept. For a 
much deeper and low-level understanding of
+the topic and how Flink’s network stack works, there is a more <a 
href="https://alibabacloud.com/blog/analysis-of-network-flow-control-and-back-pressure-flink-advanced-tutorials_596632";>advanced
 explanation available here</a>.</p>
+
+<p>At a high level, backpressure happens if some operator(s) in the Job Graph 
cannot process records at the
+same rate as they are received. This fills up the input buffers of the subtask 
that is running this slow operator.
+Once the input buffers are full, backpressure propagates to the output buffers 
of the upstream subtasks.
+Once those are filled up, the upstream subtasks are also forced to slow down 
their records’ processing
+rate to match the processing rate of the operator causing this bottleneck down 
the stream. Backpressure
+further propagates up the stream until it reaches the source operators.</p>
+
+<p>As long as the load and available resources are static and none of the 
operators produce short bursts of
+data (like windowing operators), those input/output buffers should only be in 
one of two states: almost empty
+or almost full. If the downstream operator or subtask is able to keep up with 
the influx of data, the
+buffers will be empty. If not, then the buffers will be full [<sup>1</sup>]. 
In fact, checking the buffers’ usage metrics
+was the basis of the previously recommended way on how to detect and analyze 
backpressure described <a 
href="https://flink.apache.org/2019/07/23/flink-network-stack-2.html#backpressure";>a
 couple
+of years back by Nico Kruber</a>.
+As I mentioned in the beginning, Flink now offers much better tools to do the 
same job, but before we get to that,
+there are two questions worth asking.</p>
+
+<h3 id="why-should-i-care-about-backpressure">Why should I care about 
backpressure?</h3>
+
+<p>Backpressure is an indicator that your machines or operators are 
overloaded. The buildup of backpressure
+directly affects the end-to-end latency of the system, as records are waiting 
longer in the queues before
+being processed. Secondly, aligned checkpointing takes longer with 
backpressure, while unaligned checkpoints
+will be larger (you can read more about aligned and unaligned checkpoints <a 
href="https://ci.apache.org/projects/flink/flink-docs-release-1.13/docs/concepts/stateful-stream-processing/#checkpointing";>in
 the documentation</a>.
+If you are struggling with checkpoint barriers propagation times, taking care 
of backpressure would most
+likely help to solve the problem. Lastly, you might just want to optimize your 
job in order to reduce
+the costs of running the job.</p>
+
+<p>In order to address the problem for all cases, one needs to be aware of it, 
then locate and analyze it.</p>
+
+<h3 id="why-shouldnt-i-care-about-backpressure">Why shouldn’t I care about 
backpressure?</h3>
+
+<p>Frankly, you do not  always have to care about the presence of 
backpressure. Almost by definition, lack
+of backpressure means that your cluster is at least ever so slightly 
underutilized and over-provisioned.
+If you want to minimize idling resources, you probably can not avoid incurring 
some backpressure. This
+is especially true for batch processing.</p>
+
+<h2 id="how-to-detect-and-track-down-the-source-of-backpressure">How to detect 
and track down the source of backpressure?</h2>
+
+<p>One way to detect backpressure is to use <a 
href="https://ci.apache.org/projects/flink/flink-docs-release-1.13/docs/ops/metrics/#system-metrics";>metrics</a>,
+however, in Flink 1.13 it’s no longer necessary to dig so deep. In most cases, 
it should be enough to just
+look at the job graph in the Web UI.</p>
+
+<div class="row front-graphic">
+  <img src="/img/blog/2021-07-07-backpressure/simple-example.png" />
+</div>
+
+<p>The first thing to note in the example above is that different tasks have 
different colors. Those colors
+represent a combination of two factors: under how much backpressure this task 
is and how busy it is. Idling
+tasks will be blue, fully busy tasks will be red hot, and fully backpressured 
tasks will be black. Anything
+in between will be a combination/shade of those three colors. With this 
knowledge, one can easily spot the
+backpressured tasks (black). The busiest (red) task downstream of the 
backpressured tasks will most likely
+be the source of the backpressure (the bottleneck).</p>
+
+<p>If you click on one particular task and go into the “BackPressure” tab you 
will be able to further dissect
+the problem and check what is the busy/backpressured/idle status of every 
subtask in that task. For example,
+this is especially handy if there is a data skew and not all subtasks are 
equally utilized.</p>
+
+<div class="row front-graphic">
+  <img src="/img/blog/2021-07-07-backpressure/subtasks.png" alt="Backpressure 
among subtasks" />
+       <p class="align-center">Backpressure among subtasks</p>
+</div>
+
+<p>In the above example, we can clearly see which subtasks are idling, which 
are backpressured, and that
+none of them are busy. And frankly, in a nutshell, that should be enough to 
quickly understand what is
+happening with your Job :) However, there are a couple of more details worth 
explaining.</p>
+
+<h3 id="what-are-those-numbers">What are those numbers?</h3>
+
+<p>If you are curious how it works underneath, we can go a little deeper. At 
the base of this new mechanism
+we have three <a 
href="https://ci.apache.org/projects/flink/flink-docs-release-1.13/docs/ops/metrics/#io";>new
 metrics</a>
+that are exposed and calculated by each subtask:
+- <code>idleTimeMsPerSecond</code>
+- <code>busyTimeMsPerSecond</code>
+- <code>backPressuredTimeMsPerSecond</code>
+Each of them measures the average time in milliseconds per second that the 
subtask spent being idle,
+busy, or backpressured respectively. Apart from some rounding errors they 
should complement each other and
+add up to 1000ms/s. In essence, they are quite similar to, for example, CPU 
usage metrics.</p>
+
+<p>Another important detail is that they are being averaged over a short 
period of time (a couple of seconds)
+and they take into account everything that is happening inside the subtask’s 
thread: operators, functions,
+timers, checkpointing, records serialization/deserialization, network stack, 
and other Flink internal
+overheads. A <code>WindowOperator</code> that is busy firing timers and 
producing results will be reported as busy or backpressured.
+A function doing some expensive computation in 
<code>CheckpointedFunction#snapshotState</code> call, for instance flushing
+internal buffers, will also be reported as busy.</p>
+
+<p>One limitation, however, is that <code>busyTimeMsPerSecond</code> and 
<code>idleTimeMsPerSecond</code> metrics are oblivious
+to anything that is happening in separate threads, outside of the main 
subtask’s execution loop.
+Fortunately, this is only relevant for two cases:
+- Custom threads that you manually spawn in your operators (a discouraged 
practice).
+- Old-style sources that implement the deprecated <code>SourceFunction</code> 
interface. Such sources will report <code>NaN</code>/<code>N/A</code>
+as the value for busyTimeMsPerSecond. For more information on the topic of 
Data Sources please
+<a 
href="https://ci.apache.org/projects/flink/flink-docs-release-1.13/docs/dev/datastream/sources/";>take
 a look here</a>.</p>
+
+<div class="row front-graphic">
+  <img src="/img/blog/2021-07-07-backpressure/source-task-busy.png" 
alt="Old-style sources do not report busy time" />
+       <p class="align-center">Old-style sources do not report busy time</p>
+</div>
+
+<p>In order to present those raw numbers in the web UI, those metrics need to 
be aggregated from all subtasks
+(on the job graph we are showing only tasks). This is why the web UI presents 
the maximal value from all
+subtasks of a given task and why the aggregated maximal values of busy and 
backpressured may not add up to 100%.
+One subtask can be backpressured at 60%, while another can be busy at 60%.  
This can result in a task that
+is both backpressured and busy at 60%.</p>
+
+<h3 id="varying-load">Varying load</h3>
+
+<p>There is one more thing. Do you remember that those metrics are measured 
and averaged over a couple of seconds?
+Keep this in mind when analyzing jobs or tasks with varying load, such as 
(sub)tasks containing a <code>WindowOperator</code>
+that is firing periodically. Both the subtask with a constant load of 50% and 
the subtask that alternates every
+second between being fully busy and fully idle will be reporting the same 
value of <code>busyTimeMsPerSecond</code>
+of 500ms/s.</p>
+
+<p>Furthermore, varying load and especially firing windows can move the 
bottleneck to a different place in
+the job graph:</p>
+
+<div class="row front-graphic">
+  <img src="/img/blog/2021-07-07-backpressure/bottleneck-zoom.png" 
alt="Bottleneck alternating between two tasks" />
+       <p class="align-center">Bottleneck alternating between two tasks</p>
+</div>
+
+<div class="row front-graphic">
+  <img src="/img/blog/2021-07-07-backpressure/sliding-window.png" 
alt="SlidingWindowOperator" />
+       <p class="align-center">SlidingWindowOperator</p>
+</div>
+
+<p>In this particular example, <code>SlidingWindowOperator</code> was the 
bottleneck as long as it was accumulating records.
+However, as soon as it starts to fire its windows (once every 10 seconds), the 
downstream task
+<code>SlidingWindowCheckMapper -&gt; Sink: SlidingWindowCheckPrintSink</code> 
becomes the bottleneck and <code>SlidingWindowOperator</code>
+gets backpressured. As those busy/backpressured/idle metrics are averaging 
time over a couple of seconds,
+this subtlety is not immediately visible and has to be read between the lines. 
On top of that, the web UI
+is updating its state only once every 10 seconds, which makes spotting more 
frequent changes a bit more difficult.</p>
+
+<h2 id="what-can-i-do-with-backpressure">What can I do with backpressure?</h2>
+
+<p>In general this is a complex topic that is worthy of a dedicated blog post. 
It was, to a certain extent,
+addressed in <a 
href="https://flink.apache.org/2019/07/23/flink-network-stack-2.html#:~:text=this%20is%20unnecessary.-,What%20to%20do%20with%20Backpressure%3F,-Assuming%20that%20you";>previous
 blog posts</a>.
+In short, there are two high-level ways of dealing with backpressure. Either 
add more resources (more machines,
+faster CPU, more RAM, better network, using SSDs…) or optimize usage of the 
resources you already have
+(optimize the code, tune the configuration, avoid data skew). In either case, 
you first need to analyze
+what is causing backpressure by:
+1. Identifying the presence of backpressure.
+2. Locating which subtask(s) or machines are causing it.
+3. Digging deeper into what part of the code is causing it and which resource 
is scarce.</p>
+
+<p>Backpressure monitoring improvements and metrics can help you with the 
first two points. To tackle the
+last one, profiling the code can be the way to go. To help with profiling, 
also starting from Flink 1.13,
+<a href="http://www.brendangregg.com/flamegraphs.html";>Flame Graphs</a> are <a 
href="https://ci.apache.org/projects/flink/flink-docs-release-1.13/docs/ops/debugging/flame_graphs/";>integrated
 into Flink’s web UI</a>.
+Flame Graphs is a well known profiling tool and visualization technique and I 
encourage you to give it a try.</p>
+
+<p>But keep in mind that after locating where the bottleneck is, you can 
analyze it the same way you would
+any other non-distributed application (by checking resource utilization, 
attaching a profiler, etc).
+Usually there is no silver bullet for problems like this. You can try to scale 
up but sometimes it might
+not be easy or practical to do.</p>
+
+<p>Anyway… The aforementioned improvements to backpressure monitoring allow us 
to easily detect the source of backpressure,
+and Flame Graphs can help us to analyze why a particular subtask is causing 
problems. Together those two
+features should make the previously quite tedious process of debugging and 
performance analysis of Flink
+jobs that much easier! Please upgrade to Flink 1.13.x and try them out!</p>
+
+<p>[<sup>1</sup>] There is a third possibility. In a rare case when network 
exchange is actually the bottleneck in your job,
+the downstream task will have empty input buffers, while upstream output 
buffers will be full. <a class="anchor" id="1"></a></p>
+
+      </article>
+    </div>
+
+    <div class="row">
+      <div id="disqus_thread"></div>
+      <script type="text/javascript">
+        /* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE 
* * */
+        var disqus_shortname = 'stratosphere-eu'; // required: replace example 
with your forum shortname
+
+        /* * * DON'T EDIT BELOW THIS LINE * * */
+        (function() {
+            var dsq = document.createElement('script'); dsq.type = 
'text/javascript'; dsq.async = true;
+            dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
+             (document.getElementsByTagName('head')[0] || 
document.getElementsByTagName('body')[0]).appendChild(dsq);
+        })();
+      </script>
+    </div>
+  </div>
+</div>
+      </div>
+    </div>
+
+    <hr />
+
+    <div class="row">
+      <div class="footer text-center col-sm-12">
+        <p>Copyright © 2014-2021 <a href="http://apache.org";>The Apache 
Software Foundation</a>. All Rights Reserved.</p>
+        <p>Apache Flink, Flink®, Apache®, the squirrel logo, and the Apache 
feather logo are either registered trademarks or trademarks of The Apache 
Software Foundation.</p>
+        <p><a href="/privacy-policy.html">Privacy Policy</a> &middot; <a 
href="/blog/feed.xml">RSS feed</a></p>
+      </div>
+    </div>
+    </div><!-- /.container -->
+
+    <!-- Include all compiled plugins (below), or include individual files as 
needed -->
+    <script src="/js/jquery.matchHeight-min.js"></script>
+    <script src="/js/bootstrap.min.js"></script>
+    <script src="/js/codetabs.js"></script>
+    <script src="/js/stickysidebar.js"></script>
+
+    <!-- Google Analytics -->
+    <script>
+      
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+      (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new 
Date();a=s.createElement(o),
+      
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+      
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+      ga('create', 'UA-52545728-1', 'auto');
+      ga('send', 'pageview');
+    </script>
+  </body>
+</html>
diff --git a/content/blog/index.html b/content/blog/index.html
index 2531f3e..067b4b1 100644
--- a/content/blog/index.html
+++ b/content/blog/index.html
@@ -206,7 +206,7 @@
       <p>07 Jul 2021
        Piotr Nowojski (<a 
href="https://twitter.com/PiotrNowojski";>@PiotrNowojski</a>)</p>
 
-      <p>Apache Flink 1.13 introduced a couple of important changes in the 
area of backpressure monitoring and performance analysing of Flink Jobs. This 
blog post aims to introduce those changes and explain how to use them.</p>
+      <p>Apache Flink 1.13 introduced a couple of important changes in the 
area of backpressure monitoring and performance analysis of Flink Jobs. This 
blog post aims to introduce those changes and explain how to use them.</p>
 
       <p><a href="/2021/07/07/backpressure.html">Continue reading 
&raquo;</a></p>
     </article>
diff --git a/content/img/blog/2021-07-07-backpressure/animated.png 
b/content/img/blog/2021-07-07-backpressure/animated.png
new file mode 100644
index 0000000..40ea809
Binary files /dev/null and 
b/content/img/blog/2021-07-07-backpressure/animated.png differ
diff --git a/content/img/blog/2021-07-07-backpressure/bottleneck-zoom.png 
b/content/img/blog/2021-07-07-backpressure/bottleneck-zoom.png
new file mode 100644
index 0000000..b4e5b80
Binary files /dev/null and 
b/content/img/blog/2021-07-07-backpressure/bottleneck-zoom.png differ
diff --git a/content/img/blog/2021-07-07-backpressure/simple-example.png 
b/content/img/blog/2021-07-07-backpressure/simple-example.png
new file mode 100644
index 0000000..fceccb3
Binary files /dev/null and 
b/content/img/blog/2021-07-07-backpressure/simple-example.png differ
diff --git a/content/img/blog/2021-07-07-backpressure/sliding-window.png 
b/content/img/blog/2021-07-07-backpressure/sliding-window.png
new file mode 100644
index 0000000..dcd3240
Binary files /dev/null and 
b/content/img/blog/2021-07-07-backpressure/sliding-window.png differ
diff --git a/content/img/blog/2021-07-07-backpressure/source-task-busy.png 
b/content/img/blog/2021-07-07-backpressure/source-task-busy.png
new file mode 100644
index 0000000..8f72b54
Binary files /dev/null and 
b/content/img/blog/2021-07-07-backpressure/source-task-busy.png differ
diff --git a/content/img/blog/2021-07-07-backpressure/subtasks.png 
b/content/img/blog/2021-07-07-backpressure/subtasks.png
new file mode 100644
index 0000000..bf6ede6
Binary files /dev/null and 
b/content/img/blog/2021-07-07-backpressure/subtasks.png differ
diff --git a/content/index.html b/content/index.html
index fbc42c6..1260e15 100644
--- a/content/index.html
+++ b/content/index.html
@@ -578,7 +578,7 @@
   <dl>
       
         <dt> <a href="/2021/07/07/backpressure.html">How to identify the 
source of backpressure?</a></dt>
-        <dd>Apache Flink 1.13 introduced a couple of important changes in the 
area of backpressure monitoring and performance analysing of Flink Jobs. This 
blog post aims to introduce those changes and explain how to use them.</dd>
+        <dd>Apache Flink 1.13 introduced a couple of important changes in the 
area of backpressure monitoring and performance analysis of Flink Jobs. This 
blog post aims to introduce those changes and explain how to use them.</dd>
       
         <dt> <a href="/news/2021/05/28/release-1.13.1.html">Apache Flink 
1.13.1 Released</a></dt>
         <dd><p>The Apache Flink community released the first bugfix version of 
the Apache Flink 1.13 series.</p>
diff --git a/content/zh/index.html b/content/zh/index.html
index 3296781..b109d1d 100644
--- a/content/zh/index.html
+++ b/content/zh/index.html
@@ -571,7 +571,7 @@
   <dl>
       
         <dt> <a href="/2021/07/07/backpressure.html">How to identify the 
source of backpressure?</a></dt>
-        <dd>Apache Flink 1.13 introduced a couple of important changes in the 
area of backpressure monitoring and performance analysing of Flink Jobs. This 
blog post aims to introduce those changes and explain how to use them.</dd>
+        <dd>Apache Flink 1.13 introduced a couple of important changes in the 
area of backpressure monitoring and performance analysis of Flink Jobs. This 
blog post aims to introduce those changes and explain how to use them.</dd>
       
         <dt> <a href="/news/2021/05/28/release-1.13.1.html">Apache Flink 
1.13.1 Released</a></dt>
         <dd><p>The Apache Flink community released the first bugfix version of 
the Apache Flink 1.13 series.</p>

Reply via email to