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

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


The following commit(s) were added to refs/heads/asf-site by this push:
     new 386514122 Rebuild website
386514122 is described below

commit 38651412202a7b00a869fd6c9514c76e8d2301be
Author: Chesnay Schepler <[email protected]>
AuthorDate: Thu Sep 8 19:30:42 2022 +0200

    Rebuild website
---
 content/blog/feed.xml                              | 291 +++++----------------
 content/blog/index.html                            |  41 +--
 content/blog/page10/index.html                     |  36 ++-
 content/blog/page11/index.html                     |  36 ++-
 content/blog/page12/index.html                     |  42 +--
 content/blog/page13/index.html                     |  46 ++--
 content/blog/page14/index.html                     |  42 +--
 content/blog/page15/index.html                     |  40 +--
 content/blog/page16/index.html                     |  40 +--
 content/blog/page17/index.html                     |  40 +--
 content/blog/page18/index.html                     |  40 +--
 content/blog/page19/index.html                     |  40 +--
 content/blog/page2/index.html                      |  39 ++-
 content/blog/page20/index.html                     |  25 ++
 content/blog/page3/index.html                      |  38 +--
 content/blog/page4/index.html                      |  47 ++--
 content/blog/page5/index.html                      |  49 ++--
 content/blog/page6/index.html                      |  42 +--
 content/blog/page7/index.html                      |  40 +--
 content/blog/page8/index.html                      |  45 ++--
 content/blog/page9/index.html                      |  43 ++-
 content/downloads.html                             |  18 +-
 content/index.html                                 |   8 +-
 .../2022/09/08/akka-license-change.html}           | 290 +++++---------------
 content/zh/downloads.html                          |  18 +-
 content/zh/index.html                              |   8 +-
 26 files changed, 660 insertions(+), 784 deletions(-)

diff --git a/content/blog/feed.xml b/content/blog/feed.xml
index 734493400..ed23f2c91 100644
--- a/content/blog/feed.xml
+++ b/content/blog/feed.xml
@@ -6,6 +6,66 @@
 <link>https://flink.apache.org/blog</link>
 <atom:link href="https://flink.apache.org/blog/feed.xml"; rel="self" 
type="application/rss+xml" />
 
+<item>
+<title>Regarding Akka&#39;s licensing change</title>
+<description>&lt;p&gt;On September 7th Lightbend announced a &lt;a 
href=&quot;https://www.lightbend.com/blog/why-we-are-changing-the-license-for-akka&quot;&gt;license
 change&lt;/a&gt; for the Akka project, the TL;DR being that you will need a 
commercial license to use future versions of Akka (2.7+) in production if you 
exceed a certain revenue threshold.&lt;/p&gt;
+
+&lt;p&gt;Within a few hours of the announcement several people reached out to 
the Flink project, worrying about the impact this has on Flink, as we use Akka 
internally.&lt;/p&gt;
+
+&lt;p&gt;The purpose of this blogpost is to clarify our position on the 
matter.&lt;/p&gt;
+
+&lt;p&gt;Please be aware that this topic is still quite fresh, and things are 
subject to change.&lt;br /&gt;
+Should anything significant change we will amend this blogpost and inform you 
via the usual channels.&lt;/p&gt;
+
+&lt;h1 id=&quot;give-me-the-short-version&quot;&gt;Give me the short 
version&lt;/h1&gt;
+
+&lt;p&gt;Flink is not in any immediate danger and we will ensure that users 
are not affected by this change.&lt;/p&gt;
+
+&lt;p&gt;The licensing of Flink will not change; it will stay Apache-licensed 
and will only contain dependencies that are compatible with it.&lt;/p&gt;
+
+&lt;p&gt;We will not use Akka versions with the new license.&lt;/p&gt;
+
+&lt;h1 id=&quot;whats-the-plan-going-forward&quot;&gt;What’s the plan going 
forward?&lt;/h1&gt;
+
+&lt;p&gt;&lt;em&gt;For now&lt;/em&gt;, we’ll stay on Akka 2.6, the current 
latest version that is still available under the original license.
+Historically Akka has been incredibly stable, and combined with our limited 
use of features, we do not expect this to be a problem.&lt;/p&gt;
+
+&lt;p&gt;Meanwhile, we will&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;observe how the situation unfolds (in particular w.r.t. community 
forks)&lt;/li&gt;
+  &lt;li&gt;look into a replacement for Akka.&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;Should a community fork be created (which at this time seems 
possible) we will switch to that fork in all likely-hood for 1.15+.&lt;/p&gt;
+
+&lt;h2 
id=&quot;what-if-a-new-security-vulnerabilities-is-found-in-akka-26&quot;&gt;What
 if a new security vulnerabilities is found in Akka 2.6?&lt;/h2&gt;
+
+&lt;p&gt;That is the big unknown.&lt;/p&gt;
+
+&lt;p&gt;Even though we will be able to upgrade to 2.6.20 (the (apparently) 
last planned release for Akka 2.6) in Flink 1.17, the unfortunate reality is 
that &lt;a 
href=&quot;https://github.com/akka/akka/pull/31561#issuecomment-1239217602&quot;&gt;2.6
 will no longer be supported&lt;/a&gt; from that point onwards.&lt;br /&gt;
+Should a CVE be discovered after that it is unlikely to be fixed in Akka 
2.6.&lt;/p&gt;
+
+&lt;p&gt;We cannot provide a definitive answer as to how that case would be 
handled, as it depends on what the CVE is and/or whether a community fork 
already exists at the time.&lt;/p&gt;
+
+&lt;h1 id=&quot;how-does-flink-use-akka&quot;&gt;How does Flink use 
Akka?&lt;/h1&gt;
+
+&lt;p&gt;Akka is used in the coordination layer of Flink to&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;exchange status messages between processes/components (e.g., 
JobManager and TaskManager),&lt;/li&gt;
+  &lt;li&gt;enforce certain guarantees w.r.t. multi-threading (i.e., only one 
thread can make changes to the internal state of a component)&lt;/li&gt;
+  &lt;li&gt;observe components for unexpected crashes (i.e., notice and handle 
TaskManager thread crashes).&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;What this means is that we are using very few functionalities of 
Akka.&lt;br /&gt;
+Additionally, that we use Akka is an implementation detail that the vast 
majority of Flink code isn’t aware of, meaning that we can replace it with 
something else without having to change Flink significantly.&lt;/p&gt;
+</description>
+<pubDate>Thu, 08 Sep 2022 10:00:00 +0200</pubDate>
+<link>https://flink.apache.org/news/2022/09/08/akka-license-change.html</link>
+<guid isPermaLink="true">/news/2022/09/08/akka-license-change.html</guid>
+</item>
+
 <item>
 <title>Apache Flink Table Store 0.2.0 Release Announcement</title>
 <description>&lt;!-- improve style of tables --&gt;
@@ -19861,236 +19921,5 @@ We encourage you to sign up for the &lt;a 
href=&quot;https://flink.apache.org/co
 <guid isPermaLink="true">/news/2020/02/11/release-1.10.0.html</guid>
 </item>
 
-<item>
-<title>A Guide for Unit Testing in Apache Flink</title>
-<description>&lt;p&gt;Writing unit tests is one of the essential tasks of 
designing a production-grade application. Without tests, a single change in 
code can result in cascades of failure in production. Thus unit tests should be 
written for all types of applications, be it a simple job cleaning data and 
training a model or a complex multi-tenant, real-time data processing system. 
In the following sections, we provide a guide for unit testing of Apache Flink 
applications. 
-Apache Flink provides a robust unit testing framework to make sure your 
applications behave in production as expected during development. You need to 
include the following dependencies to utilize the provided framework.&lt;/p&gt;
-
-&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code 
class=&quot;language-xml&quot;&gt;&lt;span 
class=&quot;nt&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
-  &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.apache.flink&lt;span
 class=&quot;nt&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
-  &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;flink-test-utils_${scala.binary.version}&lt;span
 class=&quot;nt&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
-  &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;${flink.version}&lt;span
 class=&quot;nt&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
-  &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;test&lt;span 
class=&quot;nt&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
-&lt;span class=&quot;nt&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt; 
-&lt;span class=&quot;nt&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
-  &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.apache.flink&lt;span
 class=&quot;nt&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
-  &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;flink-runtime_2.11&lt;span
 class=&quot;nt&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
-  &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.9.0&lt;span 
class=&quot;nt&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
-  &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;test&lt;span 
class=&quot;nt&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
-  &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;classifier&amp;gt;&lt;/span&gt;tests&lt;span 
class=&quot;nt&quot;&gt;&amp;lt;/classifier&amp;gt;&lt;/span&gt;
-&lt;span class=&quot;nt&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
-&lt;span class=&quot;nt&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
-  &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.apache.flink&lt;span
 class=&quot;nt&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
-  &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;flink-streaming-java_2.11&lt;span
 class=&quot;nt&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
-  &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.9.0&lt;span 
class=&quot;nt&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
-  &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;test&lt;span 
class=&quot;nt&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
-  &lt;span 
class=&quot;nt&quot;&gt;&amp;lt;classifier&amp;gt;&lt;/span&gt;tests&lt;span 
class=&quot;nt&quot;&gt;&amp;lt;/classifier&amp;gt;&lt;/span&gt;
-&lt;span 
class=&quot;nt&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
-
-&lt;p&gt;The strategy of writing unit tests differs for various operators. You 
can break down the strategy into the following three buckets:&lt;/p&gt;
-
-&lt;ul&gt;
-  &lt;li&gt;Stateless Operators&lt;/li&gt;
-  &lt;li&gt;Stateful Operators&lt;/li&gt;
-  &lt;li&gt;Timed Process Operators&lt;/li&gt;
-&lt;/ul&gt;
-
-&lt;h1 id=&quot;stateless-operators&quot;&gt;Stateless Operators&lt;/h1&gt;
-
-&lt;p&gt;Writing unit tests for a stateless operator is a breeze. You need to 
follow the basic norm of writing a test case, i.e., create an instance of the 
function class and test the appropriate methods. Let’s take an example of a 
simple &lt;code&gt;Map&lt;/code&gt; operator.&lt;/p&gt;
-
-&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code 
class=&quot;language-java&quot;&gt;&lt;span 
class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span 
class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span 
class=&quot;nc&quot;&gt;MyStatelessMap&lt;/span&gt; &lt;span 
class=&quot;kd&quot;&gt;implements&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;MapFunction&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;String&lt;/span&gt;&lt;span class= [...]
-  &lt;span class=&quot;nd&quot;&gt;@Override&lt;/span&gt;
-  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span 
class=&quot;nf&quot;&gt;map&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;in&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span 
class=&quot;kd&quot;&gt;throws&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;Exception&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;{&lt [...]
-    &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;out&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span 
class=&quot;s&quot;&gt;&amp;quot;hello &amp;quot;&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;in&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;;&lt;/span&gt;
-    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;out&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;;&lt;/span&gt;
-  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-&lt;span 
class=&quot;o&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
-
-&lt;p&gt;The test case for the above operator should look like&lt;/p&gt;
-
-&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code 
class=&quot;language-java&quot;&gt;&lt;span 
class=&quot;nd&quot;&gt;@Test&lt;/span&gt;
-&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span 
class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span 
class=&quot;nf&quot;&gt;testMap&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span 
class=&quot;kd&quot;&gt;throws&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;Exception&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;{&lt;/span&gt;
-  &lt;span class=&quot;n&quot;&gt;MyStatelessMap&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;statelessMap&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span 
class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span 
class=&quot;nf&quot;&gt;MyStatelessMap&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;();&lt;/span&gt;
-  &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;out&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;statelessMap&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;map&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&amp;quot;world&amp;quot;&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;);&lt;/span&gt;
-  &lt;span class=&quot;n&quot;&gt;Assert&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;assertEquals&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&amp;quot;hello world&amp;quot;&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;out&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;);&lt;/span&gt;
-&lt;span 
class=&quot;o&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
-
-&lt;p&gt;Pretty simple, right? Let’s take a look at one for the 
&lt;code&gt;FlatMap&lt;/code&gt; operator.&lt;/p&gt;
-
-&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code 
class=&quot;language-java&quot;&gt;&lt;span 
class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span 
class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span 
class=&quot;nc&quot;&gt;MyStatelessFlatMap&lt;/span&gt; &lt;span 
class=&quot;kd&quot;&gt;implements&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;FlatMapFunction&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;String&lt;/span&gt;&lt;spa [...]
-  &lt;span class=&quot;nd&quot;&gt;@Override&lt;/span&gt;
-  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span 
class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span 
class=&quot;nf&quot;&gt;flatMap&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;in&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;Collector&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;St 
[...]
-    &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;out&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span 
class=&quot;s&quot;&gt;&amp;quot;hello &amp;quot;&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;in&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;;&lt;/span&gt;
-    &lt;span class=&quot;n&quot;&gt;collector&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;collect&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;out&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;);&lt;/span&gt;
-  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-&lt;span 
class=&quot;o&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
-
-&lt;p&gt;&lt;code&gt;FlatMap&lt;/code&gt; operators require a 
&lt;code&gt;Collector&lt;/code&gt; object along with the input. For the test 
case, we have two options:&lt;/p&gt;
-
-&lt;ol&gt;
-  &lt;li&gt;Mock the &lt;code&gt;Collector&lt;/code&gt; object using 
Mockito&lt;/li&gt;
-  &lt;li&gt;Use the &lt;code&gt;ListCollector&lt;/code&gt; provided by 
Flink&lt;/li&gt;
-&lt;/ol&gt;
-
-&lt;p&gt;I prefer the second method as it requires fewer lines of code and is 
suitable for most of the cases.&lt;/p&gt;
-
-&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code 
class=&quot;language-java&quot;&gt;&lt;span 
class=&quot;nd&quot;&gt;@Test&lt;/span&gt;
-&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span 
class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span 
class=&quot;nf&quot;&gt;testFlatMap&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span 
class=&quot;kd&quot;&gt;throws&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;Exception&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;{&lt;/span&gt;
-  &lt;span class=&quot;n&quot;&gt;MyStatelessFlatMap&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;statelessFlatMap&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span 
class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span 
class=&quot;nf&quot;&gt;MyStatelessFlatMap&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;();&lt;/span&gt;
-  &lt;span class=&quot;n&quot;&gt;List&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;String&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;out&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span 
class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;ArrayList&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;lt;&amp;gt;();&lt;/span&gt;
-  &lt;span class=&quot;n&quot;&gt;ListCollector&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;String&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;listCollector&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span 
class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;ListCollector&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;lt;&amp;gt;(&lt;/span&gt [...]
-  &lt;span class=&quot;n&quot;&gt;statelessFlatMap&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;flatMap&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&amp;quot;world&amp;quot;&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;listCollector&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;);&lt;/span&gt;
-  &lt;span class=&quot;n&quot;&gt;Assert&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;assertEquals&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;Lists&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;newArrayList&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&amp;quot;hello world&amp;quot;&lt;/span&gt;&lt;span 
clas [...]
-&lt;span 
class=&quot;o&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
-
-&lt;h1 id=&quot;stateful-operators&quot;&gt;Stateful Operators&lt;/h1&gt;
-
-&lt;p&gt;Writing test cases for stateful operators requires more effort. You 
need to check whether the operator state is updated correctly and if it is 
cleaned up properly along with the output of the operator.&lt;/p&gt;
-
-&lt;p&gt;Let’s take an example of stateful &lt;code&gt;FlatMap&lt;/code&gt; 
function&lt;/p&gt;
-
-&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code 
class=&quot;language-java&quot;&gt;&lt;span 
class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span 
class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span 
class=&quot;nc&quot;&gt;StatefulFlatMap&lt;/span&gt; &lt;span 
class=&quot;kd&quot;&gt;extends&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;RichFlatMapFunction&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;String&lt;/span&gt;&lt;span  [...]
-  &lt;span class=&quot;n&quot;&gt;ValueState&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;String&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;previousInput&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;;&lt;/span&gt;
-
-  &lt;span class=&quot;nd&quot;&gt;@Override&lt;/span&gt;
-  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span 
class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span 
class=&quot;nf&quot;&gt;open&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;Configuration&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;parameters&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span 
class=&quot;kd&quot;&gt;throws&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;Exception&lt;/span&gt; &lt;span class=&quot; [...]
-    &lt;span class=&quot;n&quot;&gt;previousInput&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;getRuntimeContext&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;().&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;getState&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;
-      &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;ValueStateDescriptor&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;String&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&amp;quot;previousInput&amp;quot;&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;Types&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/s [...]
-  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-
-  &lt;span class=&quot;nd&quot;&gt;@Override&lt;/span&gt;
-  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span 
class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span 
class=&quot;nf&quot;&gt;flatMap&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;in&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;Collector&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;St 
[...]
-    &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;out&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span 
class=&quot;s&quot;&gt;&amp;quot;hello &amp;quot;&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;in&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;;&lt;/span&gt;
-    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;previousInput&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;value&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span 
class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;){&lt;/span&gt;
-      &lt;span class=&quot;n&quot;&gt;out&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;out&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span 
class=&quot;s&quot;&gt;&amp;quot; &amp;quot;&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;previousInput&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;o&qu [...]
-    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-    &lt;span class=&quot;n&quot;&gt;previousInput&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;update&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;in&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;);&lt;/span&gt;
-    &lt;span class=&quot;n&quot;&gt;collector&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;collect&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;out&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;);&lt;/span&gt;
-  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-&lt;span 
class=&quot;o&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
-
-&lt;p&gt;The intricate part of writing tests for the above class is to mock 
the configuration as well as the runtime context of the application. Flink 
provides TestHarness classes so that users don’t have to create the mock 
objects themselves. Using the &lt;code&gt;KeyedOperatorHarness&lt;/code&gt;, 
the test looks like:&lt;/p&gt;
-
-&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code 
class=&quot;language-java&quot;&gt;&lt;span 
class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span 
class=&quot;nn&quot;&gt;org.apache.flink.streaming.api.operators.StreamFlatMap&lt;/span&gt;&lt;span
 class=&quot;o&quot;&gt;;&lt;/span&gt;
-&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span 
class=&quot;nn&quot;&gt;org.apache.flink.streaming.runtime.streamrecord.StreamRecord&lt;/span&gt;&lt;span
 class=&quot;o&quot;&gt;;&lt;/span&gt;
-&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span 
class=&quot;nn&quot;&gt;org.apache.flink.streaming.util.KeyedOneInputStreamOperatorTestHarness&lt;/span&gt;&lt;span
 class=&quot;o&quot;&gt;;&lt;/span&gt;
-&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span 
class=&quot;nn&quot;&gt;org.apache.flink.streaming.util.OneInputStreamOperatorTestHarness&lt;/span&gt;&lt;span
 class=&quot;o&quot;&gt;;&lt;/span&gt;
-
-&lt;span class=&quot;nd&quot;&gt;@Test&lt;/span&gt;
-&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span 
class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span 
class=&quot;nf&quot;&gt;testFlatMap&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span 
class=&quot;kd&quot;&gt;throws&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;Exception&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;{&lt;/span&gt;
-  &lt;span class=&quot;n&quot;&gt;StatefulFlatMap&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;statefulFlatMap&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span 
class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span 
class=&quot;nf&quot;&gt;StatefulFlatMap&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;();&lt;/span&gt;
-
-  &lt;span class=&quot;c1&quot;&gt;// OneInputStreamOperatorTestHarness takes 
the input and output types as type parameters     &lt;/span&gt;
-  &lt;span 
class=&quot;n&quot;&gt;OneInputStreamOperatorTestHarness&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;String&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;String&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;testHarness&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;=&lt;/span&gt; 
-    &lt;span class=&quot;c1&quot;&gt;// KeyedOneInputStreamOperatorTestHarness 
takes three arguments:&lt;/span&gt;
-    &lt;span class=&quot;c1&quot;&gt;//   Flink operator object, key selector 
and key type&lt;/span&gt;
-    &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;KeyedOneInputStreamOperatorTestHarness&lt;/span&gt;&lt;span
 class=&quot;o&quot;&gt;&amp;lt;&amp;gt;(&lt;/span&gt;
-      &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;StreamFlatMap&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;lt;&amp;gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;statefulFlatMap&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;),&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;x&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span 
class=&quot;s&quot;&gt;&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;,&lt;/spa [...]
-  &lt;span class=&quot;n&quot;&gt;testHarness&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;open&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;();&lt;/span&gt;
-
-  &lt;span class=&quot;c1&quot;&gt;// test first record&lt;/span&gt;
-  &lt;span class=&quot;n&quot;&gt;testHarness&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;processElement&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&amp;quot;world&amp;quot;&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span 
class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;);&lt;/span&gt;
-  &lt;span class=&quot;n&quot;&gt;ValueState&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;String&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;previousInput&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;=&lt;/span&gt; 
-    &lt;span class=&quot;n&quot;&gt;statefulFlatMap&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;getRuntimeContext&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;().&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;getState&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;
-      &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;ValueStateDescriptor&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;lt;&amp;gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&amp;quot;previousInput&amp;quot;&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;Types&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;STRING&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;));&l [...]
-  &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;stateValue&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;previousInput&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;value&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;();&lt;/span&gt;
-  &lt;span class=&quot;n&quot;&gt;Assert&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;assertEquals&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;
-    &lt;span class=&quot;n&quot;&gt;Lists&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;newArrayList&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;StreamRecord&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;lt;&amp;gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&amp;quot;hello world&amp;quot;&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;,&lt;/span&g [...]
-    &lt;span class=&quot;n&quot;&gt;testHarness&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;extractOutputStreamRecords&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;());&lt;/span&gt;
-  &lt;span class=&quot;n&quot;&gt;Assert&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;assertEquals&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&amp;quot;world&amp;quot;&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;stateValue&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;);&lt;/span&gt;
-
-  &lt;span class=&quot;c1&quot;&gt;// test second record&lt;/span&gt;
-  &lt;span class=&quot;n&quot;&gt;testHarness&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;processElement&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&amp;quot;parallel&amp;quot;&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span 
class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;);&lt;/span&gt;
-  &lt;span class=&quot;n&quot;&gt;Assert&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;assertEquals&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;
-    &lt;span class=&quot;n&quot;&gt;Lists&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;newArrayList&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;
-      &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;StreamRecord&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;lt;&amp;gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&amp;quot;hello world&amp;quot;&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span 
class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;),&lt;/span&gt; 
-      &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;StreamRecord&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;lt;&amp;gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&amp;quot;hello parallel 
world&amp;quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; 
&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;)),&lt;/span&gt; 
-    &lt;span class=&quot;n&quot;&gt;testHarness&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;extractOutputStreamRecords&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;());&lt;/span&gt;
-  &lt;span class=&quot;n&quot;&gt;Assert&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;assertEquals&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&amp;quot;parallel&amp;quot;&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;previousInput&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;value&lt;/span&gt;&lt;span class [...]
-&lt;span 
class=&quot;o&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
-
-&lt;p&gt;The test harness provides many helper methods, three of which are 
being used here:&lt;/p&gt;
-
-&lt;ol&gt;
-  &lt;li&gt;&lt;code&gt;open&lt;/code&gt;: calls the open of the 
&lt;code&gt;FlatMap&lt;/code&gt; function with relevant parameters. It also 
initializes the context.&lt;/li&gt;
-  &lt;li&gt;&lt;code&gt;processElement&lt;/code&gt;: allows users to pass an 
input element as well as the timestamp associated with the element.&lt;/li&gt;
-  &lt;li&gt;&lt;code&gt;extractOutputStreamRecords&lt;/code&gt;: gets the 
output records along with their timestamps from the 
&lt;code&gt;Collector&lt;/code&gt;.&lt;/li&gt;
-&lt;/ol&gt;
-
-&lt;p&gt;The test harness simplifies the unit testing for the stateful 
functions to a large extent.&lt;/p&gt;
-
-&lt;p&gt;You might also need to check whether the state value is being set 
correctly. You can get the state value directly from the operator using a 
mechanism similar to the one used while creating the state. This is also 
demonstrated in the previous example.&lt;/p&gt;
-
-&lt;h1 id=&quot;timed-process-operators&quot;&gt;Timed Process 
Operators&lt;/h1&gt;
-
-&lt;p&gt;Writing tests for process functions, that work with time, is quite 
similar to writing tests for stateful functions because you can also use test 
harness.
-However, you need to take care of another aspect, which is providing 
timestamps for events and controlling the current time of the application. By 
setting the current (processing or event) time, you can trigger registered 
timers, which will call the &lt;code&gt;onTimer&lt;/code&gt; method of the 
function&lt;/p&gt;
-
-&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code 
class=&quot;language-java&quot;&gt;&lt;span 
class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span 
class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span 
class=&quot;nc&quot;&gt;MyProcessFunction&lt;/span&gt; &lt;span 
class=&quot;kd&quot;&gt;extends&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;KeyedProcessFunction&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;String&lt;/span&gt;&lt;sp [...]
-  &lt;span class=&quot;nd&quot;&gt;@Override&lt;/span&gt;
-  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span 
class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span 
class=&quot;nf&quot;&gt;processElement&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;in&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;Context&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;o&quot;& [...]
-    &lt;span class=&quot;n&quot;&gt;context&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;timerService&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;().&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;registerProcessingTimeTimer&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;mi&quot;&gt;50&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;);&lt;/span&gt;
-    &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;out&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span 
class=&quot;s&quot;&gt;&amp;quot;hello &amp;quot;&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;in&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;;&lt;/span&gt;
-    &lt;span class=&quot;n&quot;&gt;collector&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;collect&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;out&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;);&lt;/span&gt;
-  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-
-  &lt;span class=&quot;nd&quot;&gt;@Override&lt;/span&gt;
-  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span 
class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span 
class=&quot;nf&quot;&gt;onTimer&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;kt&quot;&gt;long&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;timestamp&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;OnTimerContext&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;ctx&lt;/span&gt;&lt;span class=&quot;o&quot [...]
-    &lt;span class=&quot;n&quot;&gt;out&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;collect&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;String&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;format&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&amp;quot;Timer triggered at timestamp 
%d&amp;quot;&lt;/span&gt;&lt; [...]
-  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-&lt;span 
class=&quot;o&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
-
-&lt;p&gt;We need to test both the methods in the 
&lt;code&gt;KeyedProcessFunction&lt;/code&gt;, i.e., 
&lt;code&gt;processElement&lt;/code&gt; as well as 
&lt;code&gt;onTimer&lt;/code&gt;. Using a test harness, we can control the 
current time of the function. Thus, we can trigger the timer at will rather 
than waiting for a specific time.&lt;/p&gt;
-
-&lt;p&gt;Let’s take a look at the test case&lt;/p&gt;
-
-&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code 
class=&quot;language-java&quot;&gt;&lt;span 
class=&quot;nd&quot;&gt;@Test&lt;/span&gt;
-&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span 
class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span 
class=&quot;nf&quot;&gt;testProcessElement&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span 
class=&quot;kd&quot;&gt;throws&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;Exception&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;{&lt;/span&gt;
-  &lt;span class=&quot;n&quot;&gt;MyProcessFunction&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;myProcessFunction&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span 
class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span 
class=&quot;nf&quot;&gt;MyProcessFunction&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;();&lt;/span&gt;
-  &lt;span 
class=&quot;n&quot;&gt;OneInputStreamOperatorTestHarness&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;String&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;String&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;testHarness&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;=&lt;/span&gt; 
-    &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;KeyedOneInputStreamOperatorTestHarness&lt;/span&gt;&lt;span
 class=&quot;o&quot;&gt;&amp;lt;&amp;gt;(&lt;/span&gt;
-      &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;KeyedProcessOperator&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;lt;&amp;gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;myProcessFunction&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;),&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;x&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span 
class=&quot;s&quot;&gt;&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt; [...]
-
-  &lt;span class=&quot;c1&quot;&gt;// Function time is initialized to 
0&lt;/span&gt;
-  &lt;span class=&quot;n&quot;&gt;testHarness&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;open&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;();&lt;/span&gt;
-  &lt;span class=&quot;n&quot;&gt;testHarness&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;processElement&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&amp;quot;world&amp;quot;&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span 
class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;);&lt;/span&gt;
-
-  &lt;span class=&quot;n&quot;&gt;Assert&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;assertEquals&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;
-    &lt;span class=&quot;n&quot;&gt;Lists&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;newArrayList&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;StreamRecord&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;lt;&amp;gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&amp;quot;hello world&amp;quot;&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;,&lt;/span&g [...]
-    &lt;span class=&quot;n&quot;&gt;testHarness&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;extractOutputStreamRecords&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;());&lt;/span&gt;
-&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-
-&lt;span class=&quot;nd&quot;&gt;@Test&lt;/span&gt;
-&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span 
class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span 
class=&quot;nf&quot;&gt;testOnTimer&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span 
class=&quot;kd&quot;&gt;throws&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;Exception&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;{&lt;/span&gt;
-  &lt;span class=&quot;n&quot;&gt;MyProcessFunction&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;myProcessFunction&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span 
class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span 
class=&quot;nf&quot;&gt;MyProcessFunction&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;();&lt;/span&gt;
-  &lt;span 
class=&quot;n&quot;&gt;OneInputStreamOperatorTestHarness&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;String&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;String&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;testHarness&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;=&lt;/span&gt; 
-    &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;KeyedOneInputStreamOperatorTestHarness&lt;/span&gt;&lt;span
 class=&quot;o&quot;&gt;&amp;lt;&amp;gt;(&lt;/span&gt;
-      &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;KeyedProcessOperator&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;lt;&amp;gt;(&lt;/span&gt;&lt;span 
class=&quot;n&quot;&gt;myProcessFunction&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;),&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;x&lt;/span&gt; &lt;span 
class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span 
class=&quot;s&quot;&gt;&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt; [...]
-
-  &lt;span class=&quot;n&quot;&gt;testHarness&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;open&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;();&lt;/span&gt;
-  &lt;span class=&quot;n&quot;&gt;testHarness&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;processElement&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&amp;quot;world&amp;quot;&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span 
class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;);&lt;/span&gt;
-  &lt;span class=&quot;n&quot;&gt;Assert&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;assertEquals&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;testHarness&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;numProcessingTimeTimers&lt;/span&gt;&lt;span 
class=&quot;o&q [...]
-      
-  &lt;span class=&quot;c1&quot;&gt;// Function time is set to 50&lt;/span&gt;
-  &lt;span class=&quot;n&quot;&gt;testHarness&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;setProcessingTime&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span 
class=&quot;mi&quot;&gt;50&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;);&lt;/span&gt;
-  &lt;span class=&quot;n&quot;&gt;Assert&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;assertEquals&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;
-    &lt;span class=&quot;n&quot;&gt;Lists&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;newArrayList&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;(&lt;/span&gt;
-      &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;StreamRecord&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;lt;&amp;gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&amp;quot;hello world&amp;quot;&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span 
class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;),&lt;/span&gt; 
-      &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span 
class=&quot;n&quot;&gt;StreamRecord&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;&amp;lt;&amp;gt;(&lt;/span&gt;&lt;span 
class=&quot;s&quot;&gt;&amp;quot;Timer triggered at timestamp 
50&amp;quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)),&lt;/span&gt; 
-    &lt;span class=&quot;n&quot;&gt;testHarness&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span 
class=&quot;na&quot;&gt;extractOutputStreamRecords&lt;/span&gt;&lt;span 
class=&quot;o&quot;&gt;());&lt;/span&gt;
-&lt;span 
class=&quot;o&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
-
-&lt;p&gt;The mechanism to test the multi-input stream operators such as 
CoProcess functions is similar to the ones described in this article. You 
should use the TwoInput variant of the harness for these operators, such as 
&lt;code&gt;TwoInputStreamOperatorTestHarness&lt;/code&gt;.&lt;/p&gt;
-
-&lt;h1 id=&quot;summary&quot;&gt;Summary&lt;/h1&gt;
-
-&lt;p&gt;In the previous sections we showcased how unit testing in Apache 
Flink works for stateless, stateful and times-aware-operators. We hope you 
found the steps easy to follow and execute while developing your Flink 
applications. If you have any questions or feedback you can reach out to me 
&lt;a href=&quot;https://www.kharekartik.dev/about/&quot;&gt;here&lt;/a&gt; or 
contact the community on the &lt;a 
href=&quot;https://flink.apache.org/community.html&quot;&gt;Apache Flink user 
mail [...]
-</description>
-<pubDate>Fri, 07 Feb 2020 13:00:00 +0100</pubDate>
-<link>https://flink.apache.org/news/2020/02/07/a-guide-for-unit-testing-in-apache-flink.html</link>
-<guid 
isPermaLink="true">/news/2020/02/07/a-guide-for-unit-testing-in-apache-flink.html</guid>
-</item>
-
 </channel>
 </rss>
diff --git a/content/blog/index.html b/content/blog/index.html
index 4b1aa21c1..ad361ee92 100644
--- a/content/blog/index.html
+++ b/content/blog/index.html
@@ -240,6 +240,21 @@
   <div class="col-sm-8">
     <!-- Blog posts -->
     
+    <article>
+      <h2 class="blog-title"><a 
href="/news/2022/09/08/akka-license-change.html">Regarding Akka's licensing 
change</a></h2>
+
+      <p>08 Sep 2022
+       Chesnay Schepler </p>
+
+      <p><p>On September 7th Lightbend announced a <a 
href="https://www.lightbend.com/blog/why-we-are-changing-the-license-for-akka";>license
 change</a> for the Akka project, the TL;DR being that you will need a 
commercial license to use future versions of Akka (2.7+) in production if you 
exceed a certain revenue threshold.</p>
+
+</p>
+
+      <p><a href="/news/2022/09/08/akka-license-change.html">Continue reading 
&raquo;</a></p>
+    </article>
+
+    <hr>
+    
     <article>
       <h2 class="blog-title"><a 
href="/news/2022/08/29/release-table-store-0.2.0.html">Apache Flink Table Store 
0.2.0 Release Announcement</a></h2>
 
@@ -359,22 +374,6 @@
 
     <hr>
     
-    <article>
-      <h2 class="blog-title"><a 
href="/news/2022/06/05/release-kubernetes-operator-1.0.0.html">Apache Flink 
Kubernetes Operator 1.0.0 Release Announcement</a></h2>
-
-      <p>05 Jun 2022
-       Gyula Fora (<a href="https://twitter.com/GyulaFora";>@GyulaFora</a>) 
&amp; Yang Wang </p>
-
-      <p><p>In the last two months since our <a 
href="https://flink.apache.org/news/2022/04/03/release-kubernetes-operator-0.1.0.html";>initial
 preview release</a> the community has been hard at work to stabilize and 
improve the core Flink Kubernetes Operator logic.
-We are now proud to announce the first production ready release of the 
operator project.</p>
-
-</p>
-
-      <p><a 
href="/news/2022/06/05/release-kubernetes-operator-1.0.0.html">Continue reading 
&raquo;</a></p>
-    </article>
-
-    <hr>
-    
 
     <!-- Pagination links -->
     
@@ -407,6 +406,16 @@ We are now proud to announce the first production ready 
release of the operator
 
     <ul id="markdown-toc">
       
+      <li><a href="/news/2022/09/08/akka-license-change.html">Regarding Akka's 
licensing change</a></li>
+
+      
+        
+      
+    
+      
+      
+
+      
       <li><a href="/news/2022/08/29/release-table-store-0.2.0.html">Apache 
Flink Table Store 0.2.0 Release Announcement</a></li>
 
       
diff --git a/content/blog/page10/index.html b/content/blog/page10/index.html
index 8aa307324..21e867415 100644
--- a/content/blog/page10/index.html
+++ b/content/blog/page10/index.html
@@ -240,6 +240,19 @@
   <div class="col-sm-8">
     <!-- Blog posts -->
     
+    <article>
+      <h2 class="blog-title"><a 
href="/news/2020/04/21/memory-management-improvements-flink-1.10.html">Memory 
Management Improvements with Apache Flink 1.10</a></h2>
+
+      <p>21 Apr 2020
+       Andrey Zagrebin </p>
+
+      <p>This post discusses the recent changes to the memory model of the 
Task Managers and configuration options for your Flink applications in Flink 
1.10.</p>
+
+      <p><a 
href="/news/2020/04/21/memory-management-improvements-flink-1.10.html">Continue 
reading &raquo;</a></p>
+    </article>
+
+    <hr>
+    
     <article>
       <h2 class="blog-title"><a 
href="/news/2020/04/15/flink-serialization-tuning-vol-1.html">Flink 
Serialization Tuning Vol. 1: Choosing your Serializer — if you can</a></h2>
 
@@ -364,19 +377,6 @@ This release marks a big milestone: Stateful Functions 2.0 
is not only an API up
 
     <hr>
     
-    <article>
-      <h2 class="blog-title"><a 
href="/news/2020/02/07/a-guide-for-unit-testing-in-apache-flink.html">A Guide 
for Unit Testing in Apache Flink</a></h2>
-
-      <p>07 Feb 2020
-       Kartik Khare (<a 
href="https://twitter.com/khare_khote";>@khare_khote</a>)</p>
-
-      <p>This post provides a detailed guide for unit testing of Apache Flink 
applications.</p>
-
-      <p><a 
href="/news/2020/02/07/a-guide-for-unit-testing-in-apache-flink.html">Continue 
reading &raquo;</a></p>
-    </article>
-
-    <hr>
-    
 
     <!-- Pagination links -->
     
@@ -409,6 +409,16 @@ This release marks a big milestone: Stateful Functions 2.0 
is not only an API up
 
     <ul id="markdown-toc">
       
+      <li><a href="/news/2022/09/08/akka-license-change.html">Regarding Akka's 
licensing change</a></li>
+
+      
+        
+      
+    
+      
+      
+
+      
       <li><a href="/news/2022/08/29/release-table-store-0.2.0.html">Apache 
Flink Table Store 0.2.0 Release Announcement</a></li>
 
       
diff --git a/content/blog/page11/index.html b/content/blog/page11/index.html
index f27e58f25..3fa16908b 100644
--- a/content/blog/page11/index.html
+++ b/content/blog/page11/index.html
@@ -240,6 +240,19 @@
   <div class="col-sm-8">
     <!-- Blog posts -->
     
+    <article>
+      <h2 class="blog-title"><a 
href="/news/2020/02/07/a-guide-for-unit-testing-in-apache-flink.html">A Guide 
for Unit Testing in Apache Flink</a></h2>
+
+      <p>07 Feb 2020
+       Kartik Khare (<a 
href="https://twitter.com/khare_khote";>@khare_khote</a>)</p>
+
+      <p>This post provides a detailed guide for unit testing of Apache Flink 
applications.</p>
+
+      <p><a 
href="/news/2020/02/07/a-guide-for-unit-testing-in-apache-flink.html">Continue 
reading &raquo;</a></p>
+    </article>
+
+    <hr>
+    
     <article>
       <h2 class="blog-title"><a 
href="/news/2020/01/30/release-1.9.2.html">Apache Flink 1.9.2 Released</a></h2>
 
@@ -365,19 +378,6 @@
 
     <hr>
     
-    <article>
-      <h2 class="blog-title"><a 
href="/news/2019/09/10/community-update.html">Flink Community Update - 
September'19</a></h2>
-
-      <p>10 Sep 2019
-       Marta Paes (<a href="https://twitter.com/morsapaes";>@morsapaes</a>)</p>
-
-      <p>This has been an exciting, fast-paced year for the Apache Flink 
community. But with over 10k messages across the mailing lists, 3k Jira tickets 
and 2k pull requests, it is not easy to keep up with the latest state of the 
project. Plus everything happening around it. With that in mind, we want to 
bring back regular community updates to the Flink blog.</p>
-
-      <p><a href="/news/2019/09/10/community-update.html">Continue reading 
&raquo;</a></p>
-    </article>
-
-    <hr>
-    
 
     <!-- Pagination links -->
     
@@ -410,6 +410,16 @@
 
     <ul id="markdown-toc">
       
+      <li><a href="/news/2022/09/08/akka-license-change.html">Regarding Akka's 
licensing change</a></li>
+
+      
+        
+      
+    
+      
+      
+
+      
       <li><a href="/news/2022/08/29/release-table-store-0.2.0.html">Apache 
Flink Table Store 0.2.0 Release Announcement</a></li>
 
       
diff --git a/content/blog/page12/index.html b/content/blog/page12/index.html
index dad067b3e..85d94a9bb 100644
--- a/content/blog/page12/index.html
+++ b/content/blog/page12/index.html
@@ -240,6 +240,19 @@
   <div class="col-sm-8">
     <!-- Blog posts -->
     
+    <article>
+      <h2 class="blog-title"><a 
href="/news/2019/09/10/community-update.html">Flink Community Update - 
September'19</a></h2>
+
+      <p>10 Sep 2019
+       Marta Paes (<a href="https://twitter.com/morsapaes";>@morsapaes</a>)</p>
+
+      <p>This has been an exciting, fast-paced year for the Apache Flink 
community. But with over 10k messages across the mailing lists, 3k Jira tickets 
and 2k pull requests, it is not easy to keep up with the latest state of the 
project. Plus everything happening around it. With that in mind, we want to 
bring back regular community updates to the Flink blog.</p>
+
+      <p><a href="/news/2019/09/10/community-update.html">Continue reading 
&raquo;</a></p>
+    </article>
+
+    <hr>
+    
     <article>
       <h2 class="blog-title"><a 
href="/news/2019/08/22/release-1.9.0.html">Apache Flink 1.9.0 Release 
Announcement</a></h2>
 
@@ -364,25 +377,6 @@
 
     <hr>
     
-    <article>
-      <h2 class="blog-title"><a 
href="/news/2019/04/09/release-1.8.0.html">Apache Flink 1.8.0 Release 
Announcement</a></h2>
-
-      <p>09 Apr 2019
-       Aljoscha Krettek (<a 
href="https://twitter.com/aljoscha";>@aljoscha</a>)</p>
-
-      <p><p>The Apache Flink community is pleased to announce Apache Flink 
1.8.0.  The
-latest release includes more than 420 resolved issues and some exciting
-additions to Flink that we describe in the following sections of this post.
-Please check the <a 
href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315522&amp;version=12344274";>complete
 changelog</a>
-for more details.</p>
-
-</p>
-
-      <p><a href="/news/2019/04/09/release-1.8.0.html">Continue reading 
&raquo;</a></p>
-    </article>
-
-    <hr>
-    
 
     <!-- Pagination links -->
     
@@ -415,6 +409,16 @@ for more details.</p>
 
     <ul id="markdown-toc">
       
+      <li><a href="/news/2022/09/08/akka-license-change.html">Regarding Akka's 
licensing change</a></li>
+
+      
+        
+      
+    
+      
+      
+
+      
       <li><a href="/news/2022/08/29/release-table-store-0.2.0.html">Apache 
Flink Table Store 0.2.0 Release Announcement</a></li>
 
       
diff --git a/content/blog/page13/index.html b/content/blog/page13/index.html
index 05297c597..a16e1a626 100644
--- a/content/blog/page13/index.html
+++ b/content/blog/page13/index.html
@@ -240,6 +240,25 @@
   <div class="col-sm-8">
     <!-- Blog posts -->
     
+    <article>
+      <h2 class="blog-title"><a 
href="/news/2019/04/09/release-1.8.0.html">Apache Flink 1.8.0 Release 
Announcement</a></h2>
+
+      <p>09 Apr 2019
+       Aljoscha Krettek (<a 
href="https://twitter.com/aljoscha";>@aljoscha</a>)</p>
+
+      <p><p>The Apache Flink community is pleased to announce Apache Flink 
1.8.0.  The
+latest release includes more than 420 resolved issues and some exciting
+additions to Flink that we describe in the following sections of this post.
+Please check the <a 
href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315522&amp;version=12344274";>complete
 changelog</a>
+for more details.</p>
+
+</p>
+
+      <p><a href="/news/2019/04/09/release-1.8.0.html">Continue reading 
&raquo;</a></p>
+    </article>
+
+    <hr>
+    
     <article>
       <h2 class="blog-title"><a 
href="/features/2019/03/11/prometheus-monitoring.html">Flink and Prometheus: 
Cloud-native monitoring of streaming applications</a></h2>
 
@@ -367,23 +386,6 @@
 
     <hr>
     
-    <article>
-      <h2 class="blog-title"><a 
href="/news/2018/11/30/release-1.7.0.html">Apache Flink 1.7.0 Release 
Announcement</a></h2>
-
-      <p>30 Nov 2018
-       Till Rohrmann (<a href="https://twitter.com/stsffap";>@stsffap</a>)</p>
-
-      <p><p>The Apache Flink community is pleased to announce Apache Flink 
1.7.0. 
-The latest release includes more than 420 resolved issues and some exciting 
additions to Flink that we describe in the following sections of this post. 
-Please check the <a 
href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315522&amp;version=12343585";>complete
 changelog</a> for more details.</p>
-
-</p>
-
-      <p><a href="/news/2018/11/30/release-1.7.0.html">Continue reading 
&raquo;</a></p>
-    </article>
-
-    <hr>
-    
 
     <!-- Pagination links -->
     
@@ -416,6 +418,16 @@ Please check the <a 
href="https://issues.apache.org/jira/secure/ReleaseNote.jspa
 
     <ul id="markdown-toc">
       
+      <li><a href="/news/2022/09/08/akka-license-change.html">Regarding Akka's 
licensing change</a></li>
+
+      
+        
+      
+    
+      
+      
+
+      
       <li><a href="/news/2022/08/29/release-table-store-0.2.0.html">Apache 
Flink Table Store 0.2.0 Release Announcement</a></li>
 
       
diff --git a/content/blog/page14/index.html b/content/blog/page14/index.html
index 19875e612..c586cae6b 100644
--- a/content/blog/page14/index.html
+++ b/content/blog/page14/index.html
@@ -240,6 +240,23 @@
   <div class="col-sm-8">
     <!-- Blog posts -->
     
+    <article>
+      <h2 class="blog-title"><a 
href="/news/2018/11/30/release-1.7.0.html">Apache Flink 1.7.0 Release 
Announcement</a></h2>
+
+      <p>30 Nov 2018
+       Till Rohrmann (<a href="https://twitter.com/stsffap";>@stsffap</a>)</p>
+
+      <p><p>The Apache Flink community is pleased to announce Apache Flink 
1.7.0. 
+The latest release includes more than 420 resolved issues and some exciting 
additions to Flink that we describe in the following sections of this post. 
+Please check the <a 
href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315522&amp;version=12343585";>complete
 changelog</a> for more details.</p>
+
+</p>
+
+      <p><a href="/news/2018/11/30/release-1.7.0.html">Continue reading 
&raquo;</a></p>
+    </article>
+
+    <hr>
+    
     <article>
       <h2 class="blog-title"><a 
href="/news/2018/10/29/release-1.6.2.html">Apache Flink 1.6.2 Released</a></h2>
 
@@ -375,21 +392,6 @@
 
     <hr>
     
-    <article>
-      <h2 class="blog-title"><a 
href="/news/2018/03/15/release-1.3.3.html">Apache Flink 1.3.3 Released</a></h2>
-
-      <p>15 Mar 2018
-      </p>
-
-      <p><p>The Apache Flink community released the third bugfix version of 
the Apache Flink 1.3 series.</p>
-
-</p>
-
-      <p><a href="/news/2018/03/15/release-1.3.3.html">Continue reading 
&raquo;</a></p>
-    </article>
-
-    <hr>
-    
 
     <!-- Pagination links -->
     
@@ -422,6 +424,16 @@
 
     <ul id="markdown-toc">
       
+      <li><a href="/news/2022/09/08/akka-license-change.html">Regarding Akka's 
licensing change</a></li>
+
+      
+        
+      
+    
+      
+      
+
+      
       <li><a href="/news/2022/08/29/release-table-store-0.2.0.html">Apache 
Flink Table Store 0.2.0 Release Announcement</a></li>
 
       
diff --git a/content/blog/page15/index.html b/content/blog/page15/index.html
index 6170f63e1..6c91cd731 100644
--- a/content/blog/page15/index.html
+++ b/content/blog/page15/index.html
@@ -240,6 +240,21 @@
   <div class="col-sm-8">
     <!-- Blog posts -->
     
+    <article>
+      <h2 class="blog-title"><a 
href="/news/2018/03/15/release-1.3.3.html">Apache Flink 1.3.3 Released</a></h2>
+
+      <p>15 Mar 2018
+      </p>
+
+      <p><p>The Apache Flink community released the third bugfix version of 
the Apache Flink 1.3 series.</p>
+
+</p>
+
+      <p><a href="/news/2018/03/15/release-1.3.3.html">Continue reading 
&raquo;</a></p>
+    </article>
+
+    <hr>
+    
     <article>
       <h2 class="blog-title"><a 
href="/news/2018/03/08/release-1.4.2.html">Apache Flink 1.4.2 Released</a></h2>
 
@@ -372,21 +387,6 @@ what’s coming in Flink 1.4.0 as well as a preview of what 
the Flink community
 
     <hr>
     
-    <article>
-      <h2 class="blog-title"><a 
href="/news/2017/06/23/release-1.3.1.html">Apache Flink 1.3.1 Released</a></h2>
-
-      <p>23 Jun 2017
-      </p>
-
-      <p><p>The Apache Flink community released the first bugfix version of 
the Apache Flink 1.3 series.</p>
-
-</p>
-
-      <p><a href="/news/2017/06/23/release-1.3.1.html">Continue reading 
&raquo;</a></p>
-    </article>
-
-    <hr>
-    
 
     <!-- Pagination links -->
     
@@ -419,6 +419,16 @@ what’s coming in Flink 1.4.0 as well as a preview of what 
the Flink community
 
     <ul id="markdown-toc">
       
+      <li><a href="/news/2022/09/08/akka-license-change.html">Regarding Akka's 
licensing change</a></li>
+
+      
+        
+      
+    
+      
+      
+
+      
       <li><a href="/news/2022/08/29/release-table-store-0.2.0.html">Apache 
Flink Table Store 0.2.0 Release Announcement</a></li>
 
       
diff --git a/content/blog/page16/index.html b/content/blog/page16/index.html
index f52b7e35e..f56a2d557 100644
--- a/content/blog/page16/index.html
+++ b/content/blog/page16/index.html
@@ -240,6 +240,21 @@
   <div class="col-sm-8">
     <!-- Blog posts -->
     
+    <article>
+      <h2 class="blog-title"><a 
href="/news/2017/06/23/release-1.3.1.html">Apache Flink 1.3.1 Released</a></h2>
+
+      <p>23 Jun 2017
+      </p>
+
+      <p><p>The Apache Flink community released the first bugfix version of 
the Apache Flink 1.3 series.</p>
+
+</p>
+
+      <p><a href="/news/2017/06/23/release-1.3.1.html">Continue reading 
&raquo;</a></p>
+    </article>
+
+    <hr>
+    
     <article>
       <h2 class="blog-title"><a 
href="/news/2017/06/01/release-1.3.0.html">Apache Flink 1.3.0 Release 
Announcement</a></h2>
 
@@ -368,21 +383,6 @@
 
     <hr>
     
-    <article>
-      <h2 class="blog-title"><a 
href="/news/2016/10/12/release-1.1.3.html">Apache Flink 1.1.3 Released</a></h2>
-
-      <p>12 Oct 2016
-      </p>
-
-      <p><p>The Apache Flink community released the next bugfix version of the 
Apache Flink 1.1. series.</p>
-
-</p>
-
-      <p><a href="/news/2016/10/12/release-1.1.3.html">Continue reading 
&raquo;</a></p>
-    </article>
-
-    <hr>
-    
 
     <!-- Pagination links -->
     
@@ -415,6 +415,16 @@
 
     <ul id="markdown-toc">
       
+      <li><a href="/news/2022/09/08/akka-license-change.html">Regarding Akka's 
licensing change</a></li>
+
+      
+        
+      
+    
+      
+      
+
+      
       <li><a href="/news/2022/08/29/release-table-store-0.2.0.html">Apache 
Flink Table Store 0.2.0 Release Announcement</a></li>
 
       
diff --git a/content/blog/page17/index.html b/content/blog/page17/index.html
index bd72b47b8..35f1d8d6a 100644
--- a/content/blog/page17/index.html
+++ b/content/blog/page17/index.html
@@ -240,6 +240,21 @@
   <div class="col-sm-8">
     <!-- Blog posts -->
     
+    <article>
+      <h2 class="blog-title"><a 
href="/news/2016/10/12/release-1.1.3.html">Apache Flink 1.1.3 Released</a></h2>
+
+      <p>12 Oct 2016
+      </p>
+
+      <p><p>The Apache Flink community released the next bugfix version of the 
Apache Flink 1.1. series.</p>
+
+</p>
+
+      <p><a href="/news/2016/10/12/release-1.1.3.html">Continue reading 
&raquo;</a></p>
+    </article>
+
+    <hr>
+    
     <article>
       <h2 class="blog-title"><a 
href="/news/2016/09/05/release-1.1.2.html">Apache Flink 1.1.2 Released</a></h2>
 
@@ -372,21 +387,6 @@
 
     <hr>
     
-    <article>
-      <h2 class="blog-title"><a 
href="/news/2016/04/06/release-1.0.1.html">Flink 1.0.1 Released</a></h2>
-
-      <p>06 Apr 2016
-      </p>
-
-      <p><p>Today, the Flink community released Flink version 
<strong>1.0.1</strong>, the first bugfix release of the 1.0 series.</p>
-
-</p>
-
-      <p><a href="/news/2016/04/06/release-1.0.1.html">Continue reading 
&raquo;</a></p>
-    </article>
-
-    <hr>
-    
 
     <!-- Pagination links -->
     
@@ -419,6 +419,16 @@
 
     <ul id="markdown-toc">
       
+      <li><a href="/news/2022/09/08/akka-license-change.html">Regarding Akka's 
licensing change</a></li>
+
+      
+        
+      
+    
+      
+      
+
+      
       <li><a href="/news/2022/08/29/release-table-store-0.2.0.html">Apache 
Flink Table Store 0.2.0 Release Announcement</a></li>
 
       
diff --git a/content/blog/page18/index.html b/content/blog/page18/index.html
index 4f756ebc6..ad36ce8fc 100644
--- a/content/blog/page18/index.html
+++ b/content/blog/page18/index.html
@@ -240,6 +240,21 @@
   <div class="col-sm-8">
     <!-- Blog posts -->
     
+    <article>
+      <h2 class="blog-title"><a 
href="/news/2016/04/06/release-1.0.1.html">Flink 1.0.1 Released</a></h2>
+
+      <p>06 Apr 2016
+      </p>
+
+      <p><p>Today, the Flink community released Flink version 
<strong>1.0.1</strong>, the first bugfix release of the 1.0 series.</p>
+
+</p>
+
+      <p><a href="/news/2016/04/06/release-1.0.1.html">Continue reading 
&raquo;</a></p>
+    </article>
+
+    <hr>
+    
     <article>
       <h2 class="blog-title"><a 
href="/news/2016/03/08/release-1.0.0.html">Announcing Apache Flink 
1.0.0</a></h2>
 
@@ -373,21 +388,6 @@ Apache Flink started.</p>
 
     <hr>
     
-    <article>
-      <h2 class="blog-title"><a 
href="/news/2015/09/01/release-0.9.1.html">Apache Flink 0.9.1 available</a></h2>
-
-      <p>01 Sep 2015
-      </p>
-
-      <p><p>The Flink community is happy to announce that Flink 0.9.1 is now 
available.</p>
-
-</p>
-
-      <p><a href="/news/2015/09/01/release-0.9.1.html">Continue reading 
&raquo;</a></p>
-    </article>
-
-    <hr>
-    
 
     <!-- Pagination links -->
     
@@ -420,6 +420,16 @@ Apache Flink started.</p>
 
     <ul id="markdown-toc">
       
+      <li><a href="/news/2022/09/08/akka-license-change.html">Regarding Akka's 
licensing change</a></li>
+
+      
+        
+      
+    
+      
+      
+
+      
       <li><a href="/news/2022/08/29/release-table-store-0.2.0.html">Apache 
Flink Table Store 0.2.0 Release Announcement</a></li>
 
       
diff --git a/content/blog/page19/index.html b/content/blog/page19/index.html
index faca4b115..255d21c73 100644
--- a/content/blog/page19/index.html
+++ b/content/blog/page19/index.html
@@ -240,6 +240,21 @@
   <div class="col-sm-8">
     <!-- Blog posts -->
     
+    <article>
+      <h2 class="blog-title"><a 
href="/news/2015/09/01/release-0.9.1.html">Apache Flink 0.9.1 available</a></h2>
+
+      <p>01 Sep 2015
+      </p>
+
+      <p><p>The Flink community is happy to announce that Flink 0.9.1 is now 
available.</p>
+
+</p>
+
+      <p><a href="/news/2015/09/01/release-0.9.1.html">Continue reading 
&raquo;</a></p>
+    </article>
+
+    <hr>
+    
     <article>
       <h2 class="blog-title"><a 
href="/news/2015/08/24/introducing-flink-gelly.html">Introducing Gelly: Graph 
Processing with Apache Flink</a></h2>
 
@@ -385,21 +400,6 @@ and offers a new API including definition of flexible 
windows.</p>
 
     <hr>
     
-    <article>
-      <h2 class="blog-title"><a 
href="/news/2015/02/04/january-in-flink.html">January 2015 in the Flink 
community</a></h2>
-
-      <p>04 Feb 2015
-      </p>
-
-      <p><p>Happy 2015! Here is a (hopefully digestible) summary of what 
happened last month in the Flink community.</p>
-
-</p>
-
-      <p><a href="/news/2015/02/04/january-in-flink.html">Continue reading 
&raquo;</a></p>
-    </article>
-
-    <hr>
-    
 
     <!-- Pagination links -->
     
@@ -432,6 +432,16 @@ and offers a new API including definition of flexible 
windows.</p>
 
     <ul id="markdown-toc">
       
+      <li><a href="/news/2022/09/08/akka-license-change.html">Regarding Akka's 
licensing change</a></li>
+
+      
+        
+      
+    
+      
+      
+
+      
       <li><a href="/news/2022/08/29/release-table-store-0.2.0.html">Apache 
Flink Table Store 0.2.0 Release Announcement</a></li>
 
       
diff --git a/content/blog/page2/index.html b/content/blog/page2/index.html
index 1609a5cff..30c2a2df1 100644
--- a/content/blog/page2/index.html
+++ b/content/blog/page2/index.html
@@ -240,6 +240,22 @@
   <div class="col-sm-8">
     <!-- Blog posts -->
     
+    <article>
+      <h2 class="blog-title"><a 
href="/news/2022/06/05/release-kubernetes-operator-1.0.0.html">Apache Flink 
Kubernetes Operator 1.0.0 Release Announcement</a></h2>
+
+      <p>05 Jun 2022
+       Gyula Fora (<a href="https://twitter.com/GyulaFora";>@GyulaFora</a>) 
&amp; Yang Wang </p>
+
+      <p><p>In the last two months since our <a 
href="https://flink.apache.org/news/2022/04/03/release-kubernetes-operator-0.1.0.html";>initial
 preview release</a> the community has been hard at work to stabilize and 
improve the core Flink Kubernetes Operator logic.
+We are now proud to announce the first production ready release of the 
operator project.</p>
+
+</p>
+
+      <p><a 
href="/news/2022/06/05/release-kubernetes-operator-1.0.0.html">Continue reading 
&raquo;</a></p>
+    </article>
+
+    <hr>
+    
     <article>
       <h2 class="blog-title"><a 
href="/2022/05/30/changelog-state-backend.html">Improving speed and stability 
of checkpointing with generic log-based incremental checkpoints</a></h2>
 
@@ -368,19 +384,6 @@ exciting changes.</p>
 
     <hr>
     
-    <article>
-      <h2 class="blog-title"><a 
href="/news/2022/03/11/release-1.14.4.html">Apache Flink 1.14.4 Release 
Announcement</a></h2>
-
-      <p>11 Mar 2022
-       Konstantin Knauf (<a 
href="https://twitter.com/snntrable";>@snntrable</a>)</p>
-
-      <p>The Apache Flink Community is please to announce another bug fix 
release for Flink 1.14.</p>
-
-      <p><a href="/news/2022/03/11/release-1.14.4.html">Continue reading 
&raquo;</a></p>
-    </article>
-
-    <hr>
-    
 
     <!-- Pagination links -->
     
@@ -413,6 +416,16 @@ exciting changes.</p>
 
     <ul id="markdown-toc">
       
+      <li><a href="/news/2022/09/08/akka-license-change.html">Regarding Akka's 
licensing change</a></li>
+
+      
+        
+      
+    
+      
+      
+
+      
       <li><a href="/news/2022/08/29/release-table-store-0.2.0.html">Apache 
Flink Table Store 0.2.0 Release Announcement</a></li>
 
       
diff --git a/content/blog/page20/index.html b/content/blog/page20/index.html
index 3a76b93f7..b110dce1e 100644
--- a/content/blog/page20/index.html
+++ b/content/blog/page20/index.html
@@ -240,6 +240,21 @@
   <div class="col-sm-8">
     <!-- Blog posts -->
     
+    <article>
+      <h2 class="blog-title"><a 
href="/news/2015/02/04/january-in-flink.html">January 2015 in the Flink 
community</a></h2>
+
+      <p>04 Feb 2015
+      </p>
+
+      <p><p>Happy 2015! Here is a (hopefully digestible) summary of what 
happened last month in the Flink community.</p>
+
+</p>
+
+      <p><a href="/news/2015/02/04/january-in-flink.html">Continue reading 
&raquo;</a></p>
+    </article>
+
+    <hr>
+    
     <article>
       <h2 class="blog-title"><a 
href="/news/2015/01/21/release-0.8.html">Apache Flink 0.8.0 available</a></h2>
 
@@ -380,6 +395,16 @@ academic and open source project that Flink originates 
from.</p>
 
     <ul id="markdown-toc">
       
+      <li><a href="/news/2022/09/08/akka-license-change.html">Regarding Akka's 
licensing change</a></li>
+
+      
+        
+      
+    
+      
+      
+
+      
       <li><a href="/news/2022/08/29/release-table-store-0.2.0.html">Apache 
Flink Table Store 0.2.0 Release Announcement</a></li>
 
       
diff --git a/content/blog/page3/index.html b/content/blog/page3/index.html
index 7f3eb03c8..6cb91bf84 100644
--- a/content/blog/page3/index.html
+++ b/content/blog/page3/index.html
@@ -240,6 +240,19 @@
   <div class="col-sm-8">
     <!-- Blog posts -->
     
+    <article>
+      <h2 class="blog-title"><a 
href="/news/2022/03/11/release-1.14.4.html">Apache Flink 1.14.4 Release 
Announcement</a></h2>
+
+      <p>11 Mar 2022
+       Konstantin Knauf (<a 
href="https://twitter.com/snntrable";>@snntrable</a>)</p>
+
+      <p>The Apache Flink Community is please to announce another bug fix 
release for Flink 1.14.</p>
+
+      <p><a href="/news/2022/03/11/release-1.14.4.html">Continue reading 
&raquo;</a></p>
+    </article>
+
+    <hr>
+    
     <article>
       <h2 class="blog-title"><a href="/2022/02/22/scala-free.html">Scala Free 
in One Fifteen</a></h2>
 
@@ -362,21 +375,6 @@ This new release brings various improvements to the 
StateFun runtime, a leaner w
 
     <hr>
     
-    <article>
-      <h2 class="blog-title"><a 
href="/news/2021/12/16/log4j-patch-releases.html">Apache Flink Log4j emergency 
releases</a></h2>
-
-      <p>16 Dec 2021
-       Chesnay Schepler </p>
-
-      <p><p>The Apache Flink community has released emergency bugfix versions 
of Apache Flink for the 1.11, 1.12, 1.13 and 1.14 series.</p>
-
-</p>
-
-      <p><a href="/news/2021/12/16/log4j-patch-releases.html">Continue reading 
&raquo;</a></p>
-    </article>
-
-    <hr>
-    
 
     <!-- Pagination links -->
     
@@ -409,6 +407,16 @@ This new release brings various improvements to the 
StateFun runtime, a leaner w
 
     <ul id="markdown-toc">
       
+      <li><a href="/news/2022/09/08/akka-license-change.html">Regarding Akka's 
licensing change</a></li>
+
+      
+        
+      
+    
+      
+      
+
+      
       <li><a href="/news/2022/08/29/release-table-store-0.2.0.html">Apache 
Flink Table Store 0.2.0 Release Announcement</a></li>
 
       
diff --git a/content/blog/page4/index.html b/content/blog/page4/index.html
index 1725db903..79c2bd2e8 100644
--- a/content/blog/page4/index.html
+++ b/content/blog/page4/index.html
@@ -240,6 +240,21 @@
   <div class="col-sm-8">
     <!-- Blog posts -->
     
+    <article>
+      <h2 class="blog-title"><a 
href="/news/2021/12/16/log4j-patch-releases.html">Apache Flink Log4j emergency 
releases</a></h2>
+
+      <p>16 Dec 2021
+       Chesnay Schepler </p>
+
+      <p><p>The Apache Flink community has released emergency bugfix versions 
of Apache Flink for the 1.11, 1.12, 1.13 and 1.14 series.</p>
+
+</p>
+
+      <p><a href="/news/2021/12/16/log4j-patch-releases.html">Continue reading 
&raquo;</a></p>
+    </article>
+
+    <hr>
+    
     <article>
       <h2 class="blog-title"><a href="/2021/12/10/log4j-cve.html">Advise on 
Apache Log4j Zero Day (CVE-2021-44228)</a></h2>
 
@@ -366,28 +381,6 @@ This new release brings various improvements to the 
StateFun runtime, a leaner w
 
     <hr>
     
-    <article>
-      <h2 class="blog-title"><a 
href="/news/2021/08/31/release-1.14.0-rc0.html">Help us stabilize Apache Flink 
1.14.0 RC0</a></h2>
-
-      <p>31 Aug 2021
-       Johannes Moser </p>
-
-      <p><div class="note">
-  <h5>Hint</h5>
-  <p>
-    Update 29th of September: Today 
-    <a 
href="https://flink.apache.org/news/2021/09/29/release-1.14.0.html";>Apache 
Flink 1.14</a>
-    has been released. For sure we'd still like to hear your feedback.
-  </p>
-</div>
-
-</p>
-
-      <p><a href="/news/2021/08/31/release-1.14.0-rc0.html">Continue reading 
&raquo;</a></p>
-    </article>
-
-    <hr>
-    
 
     <!-- Pagination links -->
     
@@ -420,6 +413,16 @@ This new release brings various improvements to the 
StateFun runtime, a leaner w
 
     <ul id="markdown-toc">
       
+      <li><a href="/news/2022/09/08/akka-license-change.html">Regarding Akka's 
licensing change</a></li>
+
+      
+        
+      
+    
+      
+      
+
+      
       <li><a href="/news/2022/08/29/release-table-store-0.2.0.html">Apache 
Flink Table Store 0.2.0 Release Announcement</a></li>
 
       
diff --git a/content/blog/page5/index.html b/content/blog/page5/index.html
index 40c1cf8be..9a6b4b888 100644
--- a/content/blog/page5/index.html
+++ b/content/blog/page5/index.html
@@ -240,6 +240,28 @@
   <div class="col-sm-8">
     <!-- Blog posts -->
     
+    <article>
+      <h2 class="blog-title"><a 
href="/news/2021/08/31/release-1.14.0-rc0.html">Help us stabilize Apache Flink 
1.14.0 RC0</a></h2>
+
+      <p>31 Aug 2021
+       Johannes Moser </p>
+
+      <p><div class="note">
+  <h5>Hint</h5>
+  <p>
+    Update 29th of September: Today 
+    <a 
href="https://flink.apache.org/news/2021/09/29/release-1.14.0.html";>Apache 
Flink 1.14</a>
+    has been released. For sure we'd still like to hear your feedback.
+  </p>
+</div>
+
+</p>
+
+      <p><a href="/news/2021/08/31/release-1.14.0-rc0.html">Continue reading 
&raquo;</a></p>
+    </article>
+
+    <hr>
+    
     <article>
       <h2 class="blog-title"><a 
href="/news/2021/08/09/release-1.11.4.html">Apache Flink 1.11.4 
Released</a></h2>
 
@@ -369,23 +391,6 @@
 
     <hr>
     
-    <article>
-      <h2 class="blog-title"><a 
href="/news/2021/04/15/release-statefun-3.0.0.html">Stateful Functions 3.0.0: 
Remote Functions Front and Center</a></h2>
-
-      <p>15 Apr 2021
-       Igal Shilman (<a 
href="https://twitter.com/IgalShilman";>@IgalShilman</a>) &amp; Tzu-Li (Gordon) 
Tai (<a href="https://twitter.com/tzulitai";>@tzulitai</a>)</p>
-
-      <p><p>The Apache Flink community is happy to announce the release of 
Stateful Functions (StateFun) 3.0.0!
-Stateful Functions is a cross-platform stack for building Stateful Serverless 
applications, making it radically simpler
-to develop scalable, consistent, and elastic distributed applications.</p>
-
-</p>
-
-      <p><a href="/news/2021/04/15/release-statefun-3.0.0.html">Continue 
reading &raquo;</a></p>
-    </article>
-
-    <hr>
-    
 
     <!-- Pagination links -->
     
@@ -418,6 +423,16 @@ to develop scalable, consistent, and elastic distributed 
applications.</p>
 
     <ul id="markdown-toc">
       
+      <li><a href="/news/2022/09/08/akka-license-change.html">Regarding Akka's 
licensing change</a></li>
+
+      
+        
+      
+    
+      
+      
+
+      
       <li><a href="/news/2022/08/29/release-table-store-0.2.0.html">Apache 
Flink Table Store 0.2.0 Release Announcement</a></li>
 
       
diff --git a/content/blog/page6/index.html b/content/blog/page6/index.html
index 9d5b8249b..00d524523 100644
--- a/content/blog/page6/index.html
+++ b/content/blog/page6/index.html
@@ -240,6 +240,23 @@
   <div class="col-sm-8">
     <!-- Blog posts -->
     
+    <article>
+      <h2 class="blog-title"><a 
href="/news/2021/04/15/release-statefun-3.0.0.html">Stateful Functions 3.0.0: 
Remote Functions Front and Center</a></h2>
+
+      <p>15 Apr 2021
+       Igal Shilman (<a 
href="https://twitter.com/IgalShilman";>@IgalShilman</a>) &amp; Tzu-Li (Gordon) 
Tai (<a href="https://twitter.com/tzulitai";>@tzulitai</a>)</p>
+
+      <p><p>The Apache Flink community is happy to announce the release of 
Stateful Functions (StateFun) 3.0.0!
+Stateful Functions is a cross-platform stack for building Stateful Serverless 
applications, making it radically simpler
+to develop scalable, consistent, and elastic distributed applications.</p>
+
+</p>
+
+      <p><a href="/news/2021/04/15/release-statefun-3.0.0.html">Continue 
reading &raquo;</a></p>
+    </article>
+
+    <hr>
+    
     <article>
       <h2 class="blog-title"><a href="/2021/03/11/batch-execution-mode.html">A 
Rundown of Batch Execution Mode in the DataStream API</a></h2>
 
@@ -365,21 +382,6 @@
 
     <hr>
     
-    <article>
-      <h2 class="blog-title"><a 
href="/news/2020/12/18/release-1.11.3.html">Apache Flink 1.11.3 
Released</a></h2>
-
-      <p>18 Dec 2020
-       Xintong Song </p>
-
-      <p><p>The Apache Flink community released the third bugfix version of 
the Apache Flink 1.11 series.</p>
-
-</p>
-
-      <p><a href="/news/2020/12/18/release-1.11.3.html">Continue reading 
&raquo;</a></p>
-    </article>
-
-    <hr>
-    
 
     <!-- Pagination links -->
     
@@ -412,6 +414,16 @@
 
     <ul id="markdown-toc">
       
+      <li><a href="/news/2022/09/08/akka-license-change.html">Regarding Akka's 
licensing change</a></li>
+
+      
+        
+      
+    
+      
+      
+
+      
       <li><a href="/news/2022/08/29/release-table-store-0.2.0.html">Apache 
Flink Table Store 0.2.0 Release Announcement</a></li>
 
       
diff --git a/content/blog/page7/index.html b/content/blog/page7/index.html
index 312eb3e2f..1faf89114 100644
--- a/content/blog/page7/index.html
+++ b/content/blog/page7/index.html
@@ -240,6 +240,21 @@
   <div class="col-sm-8">
     <!-- Blog posts -->
     
+    <article>
+      <h2 class="blog-title"><a 
href="/news/2020/12/18/release-1.11.3.html">Apache Flink 1.11.3 
Released</a></h2>
+
+      <p>18 Dec 2020
+       Xintong Song </p>
+
+      <p><p>The Apache Flink community released the third bugfix version of 
the Apache Flink 1.11 series.</p>
+
+</p>
+
+      <p><a href="/news/2020/12/18/release-1.11.3.html">Continue reading 
&raquo;</a></p>
+    </article>
+
+    <hr>
+    
     <article>
       <h2 class="blog-title"><a 
href="/2020/12/15/pipelined-region-sheduling.html">Improvements in task 
scheduling for batch workloads in Apache Flink 1.12</a></h2>
 
@@ -367,21 +382,6 @@ as well as increased observability for operational 
purposes.</p>
 
     <hr>
     
-    <article>
-      <h2 class="blog-title"><a 
href="/news/2020/08/25/release-1.10.2.html">Apache Flink 1.10.2 
Released</a></h2>
-
-      <p>25 Aug 2020
-       Zhu Zhu (<a href="https://twitter.com/zhuzhv";>@zhuzhv</a>)</p>
-
-      <p><p>The Apache Flink community released the second bugfix version of 
the Apache Flink 1.10 series.</p>
-
-</p>
-
-      <p><a href="/news/2020/08/25/release-1.10.2.html">Continue reading 
&raquo;</a></p>
-    </article>
-
-    <hr>
-    
 
     <!-- Pagination links -->
     
@@ -414,6 +414,16 @@ as well as increased observability for operational 
purposes.</p>
 
     <ul id="markdown-toc">
       
+      <li><a href="/news/2022/09/08/akka-license-change.html">Regarding Akka's 
licensing change</a></li>
+
+      
+        
+      
+    
+      
+      
+
+      
       <li><a href="/news/2022/08/29/release-table-store-0.2.0.html">Apache 
Flink Table Store 0.2.0 Release Announcement</a></li>
 
       
diff --git a/content/blog/page8/index.html b/content/blog/page8/index.html
index f9f11f43f..466f03bef 100644
--- a/content/blog/page8/index.html
+++ b/content/blog/page8/index.html
@@ -240,6 +240,21 @@
   <div class="col-sm-8">
     <!-- Blog posts -->
     
+    <article>
+      <h2 class="blog-title"><a 
href="/news/2020/08/25/release-1.10.2.html">Apache Flink 1.10.2 
Released</a></h2>
+
+      <p>25 Aug 2020
+       Zhu Zhu (<a href="https://twitter.com/zhuzhv";>@zhuzhv</a>)</p>
+
+      <p><p>The Apache Flink community released the second bugfix version of 
the Apache Flink 1.10 series.</p>
+
+</p>
+
+      <p><a href="/news/2020/08/25/release-1.10.2.html">Continue reading 
&raquo;</a></p>
+    </article>
+
+    <hr>
+    
     <article>
       <h2 class="blog-title"><a href="/news/2020/08/20/flink-docker.html">The 
State of Flink on Docker</a></h2>
 
@@ -363,26 +378,6 @@
 
     <hr>
     
-    <article>
-      <h2 class="blog-title"><a 
href="/news/2020/07/14/application-mode.html">Application Deployment in Flink: 
Current State and the new Application Mode</a></h2>
-
-      <p>14 Jul 2020
-       Kostas Kloudas (<a 
href="https://twitter.com/kkloudas";>@kkloudas</a>)</p>
-
-      <p><p>With the rise of stream processing and real-time analytics as a 
critical tool for modern 
-businesses, an increasing number of organizations build platforms with Apache 
Flink at their
-core and offer it internally as a service. Many talks with related topics from 
companies 
-like <a href="https://www.youtube.com/watch?v=VX3S9POGAdU";>Uber</a>, <a 
href="https://www.youtube.com/watch?v=VX3S9POGAdU";>Netflix</a>
-and <a href="https://www.youtube.com/watch?v=cH9UdK0yYjc";>Alibaba</a> in the 
latest editions of Flink Forward further 
-illustrate this trend.</p>
-
-</p>
-
-      <p><a href="/news/2020/07/14/application-mode.html">Continue reading 
&raquo;</a></p>
-    </article>
-
-    <hr>
-    
 
     <!-- Pagination links -->
     
@@ -415,6 +410,16 @@ illustrate this trend.</p>
 
     <ul id="markdown-toc">
       
+      <li><a href="/news/2022/09/08/akka-license-change.html">Regarding Akka's 
licensing change</a></li>
+
+      
+        
+      
+    
+      
+      
+
+      
       <li><a href="/news/2022/08/29/release-table-store-0.2.0.html">Apache 
Flink Table Store 0.2.0 Release Announcement</a></li>
 
       
diff --git a/content/blog/page9/index.html b/content/blog/page9/index.html
index d2e612262..280207d4c 100644
--- a/content/blog/page9/index.html
+++ b/content/blog/page9/index.html
@@ -240,6 +240,26 @@
   <div class="col-sm-8">
     <!-- Blog posts -->
     
+    <article>
+      <h2 class="blog-title"><a 
href="/news/2020/07/14/application-mode.html">Application Deployment in Flink: 
Current State and the new Application Mode</a></h2>
+
+      <p>14 Jul 2020
+       Kostas Kloudas (<a 
href="https://twitter.com/kkloudas";>@kkloudas</a>)</p>
+
+      <p><p>With the rise of stream processing and real-time analytics as a 
critical tool for modern 
+businesses, an increasing number of organizations build platforms with Apache 
Flink at their
+core and offer it internally as a service. Many talks with related topics from 
companies 
+like <a href="https://www.youtube.com/watch?v=VX3S9POGAdU";>Uber</a>, <a 
href="https://www.youtube.com/watch?v=VX3S9POGAdU";>Netflix</a>
+and <a href="https://www.youtube.com/watch?v=cH9UdK0yYjc";>Alibaba</a> in the 
latest editions of Flink Forward further 
+illustrate this trend.</p>
+
+</p>
+
+      <p><a href="/news/2020/07/14/application-mode.html">Continue reading 
&raquo;</a></p>
+    </article>
+
+    <hr>
+    
     <article>
       <h2 class="blog-title"><a 
href="/news/2020/07/06/release-1.11.0.html">Apache Flink 1.11.0 Release 
Announcement</a></h2>
 
@@ -370,19 +390,6 @@ and provide a tutorial for running Streaming ETL with 
Flink on Zeppelin.</p>
 
     <hr>
     
-    <article>
-      <h2 class="blog-title"><a 
href="/news/2020/04/21/memory-management-improvements-flink-1.10.html">Memory 
Management Improvements with Apache Flink 1.10</a></h2>
-
-      <p>21 Apr 2020
-       Andrey Zagrebin </p>
-
-      <p>This post discusses the recent changes to the memory model of the 
Task Managers and configuration options for your Flink applications in Flink 
1.10.</p>
-
-      <p><a 
href="/news/2020/04/21/memory-management-improvements-flink-1.10.html">Continue 
reading &raquo;</a></p>
-    </article>
-
-    <hr>
-    
 
     <!-- Pagination links -->
     
@@ -415,6 +422,16 @@ and provide a tutorial for running Streaming ETL with 
Flink on Zeppelin.</p>
 
     <ul id="markdown-toc">
       
+      <li><a href="/news/2022/09/08/akka-license-change.html">Regarding Akka's 
licensing change</a></li>
+
+      
+        
+      
+    
+      
+      
+
+      
       <li><a href="/news/2022/08/29/release-table-store-0.2.0.html">Apache 
Flink Table Store 0.2.0 Release Announcement</a></li>
 
       
diff --git a/content/downloads.html b/content/downloads.html
index fbae13732..7986b18a8 100644
--- a/content/downloads.html
+++ b/content/downloads.html
@@ -454,7 +454,7 @@ main Flink release:</p>
 <p>You can add the following dependencies to your <code>pom.xml</code> to 
include Apache Flink in your project. These dependencies include a local 
execution environment and thus support local testing.</p>
 
 <ul>
-  <li><strong>Scala API</strong>: To use the Scala API, replace the 
<code>flink-java</code> artifact id with <code>flink-scala_2.11</code> and 
<code>flink-streaming-java_2.11</code> with 
<code>flink-streaming-scala_2.11</code>.</li>
+  <li><strong>Scala API</strong>: To use the Scala API, replace the 
<code>flink-java</code> artifact id with <code>flink-scala_2.12</code> and 
<code>flink-streaming-java</code> with 
<code>flink-streaming-scala_2.12</code>.</li>
 </ul>
 
 <div class="highlight"><pre><code class="language-xml"><span 
class="nt">&lt;dependency&gt;</span>
@@ -464,12 +464,12 @@ main Flink release:</p>
 <span class="nt">&lt;/dependency&gt;</span>
 <span class="nt">&lt;dependency&gt;</span>
   <span class="nt">&lt;groupId&gt;</span>org.apache.flink<span 
class="nt">&lt;/groupId&gt;</span>
-  <span class="nt">&lt;artifactId&gt;</span>flink-streaming-java_2.11<span 
class="nt">&lt;/artifactId&gt;</span>
+  <span class="nt">&lt;artifactId&gt;</span>flink-streaming-java<span 
class="nt">&lt;/artifactId&gt;</span>
   <span class="nt">&lt;version&gt;</span>1.15.2<span 
class="nt">&lt;/version&gt;</span>
 <span class="nt">&lt;/dependency&gt;</span>
 <span class="nt">&lt;dependency&gt;</span>
   <span class="nt">&lt;groupId&gt;</span>org.apache.flink<span 
class="nt">&lt;/groupId&gt;</span>
-  <span class="nt">&lt;artifactId&gt;</span>flink-clients_2.11<span 
class="nt">&lt;/artifactId&gt;</span>
+  <span class="nt">&lt;artifactId&gt;</span>flink-clients<span 
class="nt">&lt;/artifactId&gt;</span>
   <span class="nt">&lt;version&gt;</span>1.15.2<span 
class="nt">&lt;/version&gt;</span>
 <span class="nt">&lt;/dependency&gt;</span></code></pre></div>
 
@@ -497,26 +497,26 @@ The <code>statefun-flink-harness</code> dependency 
includes a local execution en
 
 <div class="highlight"><pre><code class="language-xml"><span 
class="nt">&lt;dependency&gt;</span>
   <span class="nt">&lt;groupId&gt;</span>org.apache.flink<span 
class="nt">&lt;/groupId&gt;</span>
-  <span class="nt">&lt;artifactId&gt;</span>flink-ml-core_2.12<span 
class="nt">&lt;/artifactId&gt;</span>
+  <span class="nt">&lt;artifactId&gt;</span>flink-ml-core<span 
class="nt">&lt;/artifactId&gt;</span>
   <span class="nt">&lt;version&gt;</span>2.1.0<span 
class="nt">&lt;/version&gt;</span>
 <span class="nt">&lt;/dependency&gt;</span>
 <span class="nt">&lt;dependency&gt;</span>
   <span class="nt">&lt;groupId&gt;</span>org.apache.flink<span 
class="nt">&lt;/groupId&gt;</span>
-  <span class="nt">&lt;artifactId&gt;</span>flink-ml-iteration_2.12<span 
class="nt">&lt;/artifactId&gt;</span>
+  <span class="nt">&lt;artifactId&gt;</span>flink-ml-iteration<span 
class="nt">&lt;/artifactId&gt;</span>
   <span class="nt">&lt;version&gt;</span>2.1.0<span 
class="nt">&lt;/version&gt;</span>
 <span class="nt">&lt;/dependency&gt;</span>
 <span class="nt">&lt;dependency&gt;</span>
   <span class="nt">&lt;groupId&gt;</span>org.apache.flink<span 
class="nt">&lt;/groupId&gt;</span>
-  <span class="nt">&lt;artifactId&gt;</span>flink-ml-lib_2.12<span 
class="nt">&lt;/artifactId&gt;</span>
+  <span class="nt">&lt;artifactId&gt;</span>flink-ml-lib<span 
class="nt">&lt;/artifactId&gt;</span>
   <span class="nt">&lt;version&gt;</span>2.1.0<span 
class="nt">&lt;/version&gt;</span>
 <span class="nt">&lt;/dependency&gt;</span></code></pre></div>
 
 <p>Advanced users could only import a minimal set of Flink ML dependencies for 
their target use-cases:</p>
 
 <ul>
-  <li>Use artifact <code>flink-ml-core_2.12</code> in order to develop custom 
ML algorithms.</li>
-  <li>Use artifacts <code>flink-ml-core_2.12</code> and 
<code>flink-ml-iteration_2.12</code> in order to develop custom ML algorithms 
which require iteration.</li>
-  <li>Use artifact <code>flink-ml-lib_2.12</code> in order to use the 
off-the-shelf ML algorithms from Flink ML.</li>
+  <li>Use artifact <code>flink-ml-core</code> in order to develop custom ML 
algorithms.</li>
+  <li>Use artifacts <code>flink-ml-core</code> and 
<code>flink-ml-iteration</code> in order to develop custom ML algorithms which 
require iteration.</li>
+  <li>Use artifact <code>flink-ml-lib</code> in order to use the off-the-shelf 
ML algorithms from Flink ML.</li>
 </ul>
 
 <h3 id="apache-flink-kubernetes-operator">Apache Flink Kubernetes Operator</h3>
diff --git a/content/index.html b/content/index.html
index 4de500f51..9a1ae57f2 100644
--- a/content/index.html
+++ b/content/index.html
@@ -405,6 +405,11 @@
 
   <dl>
       
+        <dt> <a href="/news/2022/09/08/akka-license-change.html">Regarding 
Akka's licensing change</a></dt>
+        <dd><p>On September 7th Lightbend announced a <a 
href="https://www.lightbend.com/blog/why-we-are-changing-the-license-for-akka";>license
 change</a> for the Akka project, the TL;DR being that you will need a 
commercial license to use future versions of Akka (2.7+) in production if you 
exceed a certain revenue threshold.</p>
+
+</dd>
+      
         <dt> <a href="/news/2022/08/29/release-table-store-0.2.0.html">Apache 
Flink Table Store 0.2.0 Release Announcement</a></dt>
         <dd>The Apache Flink Community is pleased to announce the release for 
Flink Table Store 0.2.0! This version complements the ecosystem and is an 
available version!</dd>
       
@@ -418,9 +423,6 @@
       
         <dt> <a href="/news/2022/07/12/release-ml-2.1.0.html">Apache Flink ML 
2.1.0 Release Announcement</a></dt>
         <dd>The Apache Flink community is excited to announce the release of 
Flink ML 2.1.0! This release focuses on improving Flink ML's infrastructure, 
such as Python SDK, memory management, and benchmark framework, to facilitate 
the development of performant, memory-safe, and easy-to-use algorithm 
libraries. We validated the enhanced infrastructure via benchmarks and 
confirmed that Flink ML can meet or exceed the performance of selected 
algorithms from alternative popular ML libraries [...]
-      
-        <dt> <a href="/2022/07/11/final-checkpoint-part2.html">FLIP-147: 
Support Checkpoints After Tasks Finished - Part Two</a></dt>
-        <dd>This post presents more details on the changes on the checkpoint 
procedure and task finish process made by the final checkpoint mechanism.</dd>
     
   </dl>
 
diff --git a/content/index.html 
b/content/news/2022/09/08/akka-license-change.html
similarity index 60%
copy from content/index.html
copy to content/news/2022/09/08/akka-license-change.html
index 4de500f51..20f65411e 100644
--- a/content/index.html
+++ b/content/news/2022/09/08/akka-license-change.html
@@ -5,7 +5,7 @@
     <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: Stateful Computations over Data Streams</title>
+    <title>Apache Flink: Regarding Akka's licensing change</title>
     <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
     <link rel="icon" href="/favicon.ico" type="image/x-icon">
 
@@ -153,7 +153,7 @@
             <li><a href="/gettinghelp.html">Getting Help</a></li>
 
             <!-- Blog -->
-            <li><a href="/blog/"><b>Flink Blog</b></a></li>
+            <li class="active"><a href="/blog/"><b>Flink Blog</b></a></li>
 
 
             <!-- Flink-packages -->
@@ -185,7 +185,8 @@
             <li>
               
                 
-                  <a href="/zh/">中文版</a>
+                  <!-- link to the Chinese home page when current is blog page 
-->
+                  <a href="/zh">中文版</a>
                 
               
             </li>
@@ -233,259 +234,86 @@
       </div>
       <div class="col-sm-9">
       <div class="row-fluid">
-
   <div class="col-sm-12">
-    <p class="lead">
-      <strong>Apache Flink<sup>®</sup> — Stateful Computations over Data 
Streams</strong>
-    </p>
-  </div>
+    <div class="row">
+      <h1>Regarding Akka's licensing change</h1>
+      <p><i></i></p>
 
-<div class="col-sm-12">
-  <hr />
-</div>
+      <article>
+        <p>08 Sep 2022 Chesnay Schepler </p>
 
-</div>
+<p>On September 7th Lightbend announced a <a 
href="https://www.lightbend.com/blog/why-we-are-changing-the-license-for-akka";>license
 change</a> for the Akka project, the TL;DR being that you will need a 
commercial license to use future versions of Akka (2.7+) in production if you 
exceed a certain revenue threshold.</p>
 
-<!-- High-level architecture figure -->
+<p>Within a few hours of the announcement several people reached out to the 
Flink project, worrying about the impact this has on Flink, as we use Akka 
internally.</p>
 
-<div class="row front-graphic">
-  <hr />
-  <img src="/img/flink-home-graphic.png" width="800px" />
-</div>
+<p>The purpose of this blogpost is to clarify our position on the matter.</p>
 
-<!-- Feature grid -->
+<p>Please be aware that this topic is still quite fresh, and things are 
subject to change.<br />
+Should anything significant change we will amend this blogpost and inform you 
via the usual channels.</p>
 
-<!--
-<div class="row">
-  <div class="col-sm-12">
-    <hr />
-    <h2><a href="/features.html">Features</a></h2>
-  </div>
-</div>
--->
-<div class="row">
-  <div class="col-sm-4">
-    <div class="panel panel-default">
-      <div class="panel-heading">
-        <span class="glyphicon glyphicon-th"></span> <b>All streaming use 
cases</b>
-      </div>
-      <div class="panel-body">
-        <ul style="font-size: small;">
-          <li>Event-driven Applications</li>
-          <li>Stream &amp; Batch Analytics</li>
-          <li>Data Pipelines &amp; ETL</li>
-        </ul>
-        <a href="/usecases.html">Learn more</a>
-      </div>
-    </div>
-  </div>
-  <div class="col-sm-4">
-    <div class="panel panel-default">
-      <div class="panel-heading">
-        <span class="glyphicon glyphicon-ok"></span> <b>Guaranteed 
correctness</b>
-      </div>
-      <div class="panel-body">
-        <ul style="font-size: small;">
-          <li>Exactly-once state consistency</li>
-          <li>Event-time processing</li>
-          <li>Sophisticated late data handling</li>
-        </ul>
-        <a 
href="/flink-applications.html#building-blocks-for-streaming-applications">Learn
 more</a>
-      </div>
-    </div>
-  </div>
-  <div class="col-sm-4">
-    <div class="panel panel-default">
-      <div class="panel-heading">
-        <span class="glyphicon glyphicon glyphicon-sort-by-attributes"></span> 
<b>Layered APIs</b>
-      </div>
-      <div class="panel-body">
-        <ul style="font-size: small;">
-          <li>SQL on Stream &amp; Batch Data</li>
-          <li>DataStream API &amp; DataSet API</li>
-          <li>ProcessFunction (Time &amp; State)</li>
-        </ul>
-        <a href="/flink-applications.html#layered-apis">Learn more</a>
-      </div>
-    </div>
-  </div>
-</div>
-<div class="row">
-  <div class="col-sm-4">
-    <div class="panel panel-default">
-      <div class="panel-heading">
-        <span class="glyphicon glyphicon-dashboard"></span> <b>Operational 
Focus</b>
-      </div>
-      <div class="panel-body">
-        <ul style="font-size: small;">
-          <li>Flexible deployment</li>
-          <li>High-availability setup</li>
-          <li>Savepoints</li>
-        </ul>
-        <a href="/flink-operations.html">Learn more</a>
-      </div>
-    </div>
-  </div>
-  <div class="col-sm-4">
-    <div class="panel panel-default">
-      <div class="panel-heading">
-        <span class="glyphicon glyphicon-fullscreen"></span> <b>Scales to any 
use case</b>
-      </div>
-      <div class="panel-body">
-        <ul style="font-size: small;">
-          <li>Scale-out architecture</li>
-          <li>Support for very large state</li>
-          <li>Incremental checkpointing</li>
-        </ul>
-        <a href="/flink-architecture.html#run-applications-at-any-scale">Learn 
more</a>
-      </div>
-    </div>
-  </div>
-  <div class="col-sm-4">
-    <div class="panel panel-default">
-      <div class="panel-heading">
-        <span class="glyphicon glyphicon-flash"></span> <b>Excellent 
Performance</b>
-      </div>
-      <div class="panel-body">
-        <ul style="font-size: small;">
-          <li>Low latency</li>
-          <li>High throughput</li>
-          <li>In-Memory computing</li>
-        </ul>
-        <a 
href="/flink-architecture.html#leverage-in-memory-performance">Learn more</a>
-      </div>
-    </div>
-  </div>
-</div>
+<h1 id="give-me-the-short-version">Give me the short version</h1>
 
-<!-- Events section -->
-<div class="row">
+<p>Flink is not in any immediate danger and we will ensure that users are not 
affected by this change.</p>
 
-<div class="col-sm-12">
-  <hr />
-</div>
+<p>The licensing of Flink will not change; it will stay Apache-licensed and 
will only contain dependencies that are compatible with it.</p>
 
-<div class="col-sm-3">
+<p>We will not use Akka versions with the new license.</p>
 
-  <h2><a>Upcoming Events</a></h2>
+<h1 id="whats-the-plan-going-forward">What’s the plan going forward?</h1>
 
-</div>
-<div class="col-sm-9">
-  <!-- Flink Forward -->
-  <a href="https://flink-forward.org"; target="_blank">
-    <img style="width: 180px; padding-right: 10px" 
src="/img/flink-forward.png" alt="Flink Forward" />
-  </a>
-  <!-- ApacheCon -->
-  <a href="https://www.apache.org/events/current-event"; target="_blank">
-    <img style="width: 200px; padding-right: 10px" 
src="https://www.apache.org/events/current-event-234x60.png"; alt="ApacheCon" />
-  </a>
-    <!-- Flink Forward Asia -->
-    <a href="https://flink-forward.org.cn/"; target="_blank">
-      <img style="width: 230px" src="/img/flink-forward-asia.png" alt="Flink 
Forward Asia" />
-    </a>
-</div>
+<p><em>For now</em>, we’ll stay on Akka 2.6, the current latest version that 
is still available under the original license.
+Historically Akka has been incredibly stable, and combined with our limited 
use of features, we do not expect this to be a problem.</p>
 
-</div>
+<p>Meanwhile, we will</p>
 
-<!-- Updates section -->
+<ul>
+  <li>observe how the situation unfolds (in particular w.r.t. community 
forks)</li>
+  <li>look into a replacement for Akka.</li>
+</ul>
 
-<div class="row">
+<p>Should a community fork be created (which at this time seems possible) we 
will switch to that fork in all likely-hood for 1.15+.</p>
 
-<div class="col-sm-12">
-  <hr />
-</div>
+<h2 id="what-if-a-new-security-vulnerabilities-is-found-in-akka-26">What if a 
new security vulnerabilities is found in Akka 2.6?</h2>
 
-<div class="col-sm-3">
+<p>That is the big unknown.</p>
 
-  <h2><a href="/blog">Latest Blog Posts</a></h2>
+<p>Even though we will be able to upgrade to 2.6.20 (the (apparently) last 
planned release for Akka 2.6) in Flink 1.17, the unfortunate reality is that <a 
href="https://github.com/akka/akka/pull/31561#issuecomment-1239217602";>2.6 will 
no longer be supported</a> from that point onwards.<br />
+Should a CVE be discovered after that it is unlikely to be fixed in Akka 
2.6.</p>
 
-</div>
+<p>We cannot provide a definitive answer as to how that case would be handled, 
as it depends on what the CVE is and/or whether a community fork already exists 
at the time.</p>
 
-<div class="col-sm-9">
+<h1 id="how-does-flink-use-akka">How does Flink use Akka?</h1>
 
-  <dl>
-      
-        <dt> <a href="/news/2022/08/29/release-table-store-0.2.0.html">Apache 
Flink Table Store 0.2.0 Release Announcement</a></dt>
-        <dd>The Apache Flink Community is pleased to announce the release for 
Flink Table Store 0.2.0! This version complements the ecosystem and is an 
available version!</dd>
-      
-        <dt> <a href="/news/2022/08/25/release-1.15.2.html">Apache Flink 
1.15.2 Release Announcement</a></dt>
-        <dd>The Apache Flink Community is pleased to announce a bug fix 
release for Flink 1.15.</dd>
-      
-        <dt> <a 
href="/news/2022/07/25/release-kubernetes-operator-1.1.0.html">Apache Flink 
Kubernetes Operator 1.1.0 Release Announcement</a></dt>
-        <dd><p>The community has continued to work hard on improving the Flink 
Kubernetes Operator capabilities since our <a 
href="https://flink.apache.org/news/2022/06/05/release-kubernetes-operator-1.0.0.html";>first
 production ready release</a> we launched about two months ago.</p>
+<p>Akka is used in the coordination layer of Flink to</p>
 
-</dd>
-      
-        <dt> <a href="/news/2022/07/12/release-ml-2.1.0.html">Apache Flink ML 
2.1.0 Release Announcement</a></dt>
-        <dd>The Apache Flink community is excited to announce the release of 
Flink ML 2.1.0! This release focuses on improving Flink ML's infrastructure, 
such as Python SDK, memory management, and benchmark framework, to facilitate 
the development of performant, memory-safe, and easy-to-use algorithm 
libraries. We validated the enhanced infrastructure via benchmarks and 
confirmed that Flink ML can meet or exceed the performance of selected 
algorithms from alternative popular ML libraries [...]
-      
-        <dt> <a href="/2022/07/11/final-checkpoint-part2.html">FLIP-147: 
Support Checkpoints After Tasks Finished - Part Two</a></dt>
-        <dd>This post presents more details on the changes on the checkpoint 
procedure and task finish process made by the final checkpoint mechanism.</dd>
-    
-  </dl>
+<ul>
+  <li>exchange status messages between processes/components (e.g., JobManager 
and TaskManager),</li>
+  <li>enforce certain guarantees w.r.t. multi-threading (i.e., only one thread 
can make changes to the internal state of a component)</li>
+  <li>observe components for unexpected crashes (i.e., notice and handle 
TaskManager thread crashes).</li>
+</ul>
 
-</div>
+<p>What this means is that we are using very few functionalities of Akka.<br />
+Additionally, that we use Akka is an implementation detail that the vast 
majority of Flink code isn’t aware of, meaning that we can replace it with 
something else without having to change Flink significantly.</p>
 
-<!-- Scripts section -->
-
-<script type="text/javascript" src="/js/jquery.jcarousel.min.js"></script>
-
-<script type="text/javascript">
-
-  $(window).load(function(){
-   $(function() {
-        var jcarousel = $('.jcarousel');
-
-        jcarousel
-            .on('jcarousel:reload jcarousel:create', function () {
-                var carousel = $(this),
-                    width = carousel.innerWidth();
-
-                if (width >= 600) {
-                    width = width / 4;
-                } else if (width >= 350) {
-                    width = width / 3;
-                }
-
-                carousel.jcarousel('items').css('width', Math.ceil(width) + 
'px');
-            })
-            .jcarousel({
-                wrap: 'circular',
-                autostart: true
-            });
-
-        $('.jcarousel-control-prev')
-            .jcarouselControl({
-                target: '-=1'
-            });
-
-        $('.jcarousel-control-next')
-            .jcarouselControl({
-                target: '+=1'
-            });
-
-        $('.jcarousel-pagination')
-            .on('jcarouselpagination:active', 'a', function() {
-                $(this).addClass('active');
-            })
-            .on('jcarouselpagination:inactive', 'a', function() {
-                $(this).removeClass('active');
-            })
-            .on('click', function(e) {
-                e.preventDefault();
-            })
-            .jcarouselPagination({
-                perPage: 1,
-                item: function(page) {
-                    return '<a href="#' + page + '">' + page + '</a>';
-                }
-            });
-    });
-  });
-
-</script>
-</div>
+      </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>
 
diff --git a/content/zh/downloads.html b/content/zh/downloads.html
index 667d1a67f..0d4078552 100644
--- a/content/zh/downloads.html
+++ b/content/zh/downloads.html
@@ -419,7 +419,7 @@ 
flink-docs-release-1.14/release-notes/flink-1.14.html">Flink 1.14 的发布说
 <p>你只要将以下依赖项添加到 <code>pom.xml</code> 中,就能在项目中引入 Apache Flink 
。这些依赖项包含了本地执行环境,因此支持本地测试。</p>
 
 <ul>
-  <li><strong>Scala API</strong>: 为了使用 Scala API,将 <code>flink-java</code> 的 
artifact id 替换为 <code>flink-scala_2.11</code>,同时将 
<code>flink-streaming-java_2.11</code> 替换为 
<code>flink-streaming-scala_2.11</code>。</li>
+  <li><strong>Scala API</strong>: 为了使用 Scala API,将 <code>flink-java</code> 的 
artifact id 替换为 <code>flink-scala_2.12</code>,同时将 
<code>flink-streaming-java</code> 替换为 
<code>flink-streaming-scala_2.12</code>。</li>
 </ul>
 
 <div class="highlight"><pre><code class="language-xml"><span 
class="nt">&lt;dependency&gt;</span>
@@ -429,12 +429,12 @@ 
flink-docs-release-1.14/release-notes/flink-1.14.html">Flink 1.14 的发布说
 <span class="nt">&lt;/dependency&gt;</span>
 <span class="nt">&lt;dependency&gt;</span>
   <span class="nt">&lt;groupId&gt;</span>org.apache.flink<span 
class="nt">&lt;/groupId&gt;</span>
-  <span class="nt">&lt;artifactId&gt;</span>flink-streaming-java_2.11<span 
class="nt">&lt;/artifactId&gt;</span>
+  <span class="nt">&lt;artifactId&gt;</span>flink-streaming-java<span 
class="nt">&lt;/artifactId&gt;</span>
   <span class="nt">&lt;version&gt;</span>1.15.2<span 
class="nt">&lt;/version&gt;</span>
 <span class="nt">&lt;/dependency&gt;</span>
 <span class="nt">&lt;dependency&gt;</span>
   <span class="nt">&lt;groupId&gt;</span>org.apache.flink<span 
class="nt">&lt;/groupId&gt;</span>
-  <span class="nt">&lt;artifactId&gt;</span>flink-clients_2.11<span 
class="nt">&lt;/artifactId&gt;</span>
+  <span class="nt">&lt;artifactId&gt;</span>flink-clients<span 
class="nt">&lt;/artifactId&gt;</span>
   <span class="nt">&lt;version&gt;</span>1.15.2<span 
class="nt">&lt;/version&gt;</span>
 <span class="nt">&lt;/dependency&gt;</span></code></pre></div>
 
@@ -461,26 +461,26 @@ 
flink-docs-release-1.14/release-notes/flink-1.14.html">Flink 1.14 的发布说
 
 <div class="highlight"><pre><code class="language-xml"><span 
class="nt">&lt;dependency&gt;</span>
   <span class="nt">&lt;groupId&gt;</span>org.apache.flink<span 
class="nt">&lt;/groupId&gt;</span>
-  <span class="nt">&lt;artifactId&gt;</span>flink-ml-core_2.12<span 
class="nt">&lt;/artifactId&gt;</span>
+  <span class="nt">&lt;artifactId&gt;</span>flink-ml-core<span 
class="nt">&lt;/artifactId&gt;</span>
   <span class="nt">&lt;version&gt;</span>2.1.0<span 
class="nt">&lt;/version&gt;</span>
 <span class="nt">&lt;/dependency&gt;</span>
 <span class="nt">&lt;dependency&gt;</span>
   <span class="nt">&lt;groupId&gt;</span>org.apache.flink<span 
class="nt">&lt;/groupId&gt;</span>
-  <span class="nt">&lt;artifactId&gt;</span>flink-ml-iteration_2.12<span 
class="nt">&lt;/artifactId&gt;</span>
+  <span class="nt">&lt;artifactId&gt;</span>flink-ml-iteration<span 
class="nt">&lt;/artifactId&gt;</span>
   <span class="nt">&lt;version&gt;</span>2.1.0<span 
class="nt">&lt;/version&gt;</span>
 <span class="nt">&lt;/dependency&gt;</span>
 <span class="nt">&lt;dependency&gt;</span>
   <span class="nt">&lt;groupId&gt;</span>org.apache.flink<span 
class="nt">&lt;/groupId&gt;</span>
-  <span class="nt">&lt;artifactId&gt;</span>flink-ml-lib_2.12<span 
class="nt">&lt;/artifactId&gt;</span>
+  <span class="nt">&lt;artifactId&gt;</span>flink-ml-lib<span 
class="nt">&lt;/artifactId&gt;</span>
   <span class="nt">&lt;version&gt;</span>2.1.0<span 
class="nt">&lt;/version&gt;</span>
 <span class="nt">&lt;/dependency&gt;</span></code></pre></div>
 
 <p>高级用户可以根据使用场景来只包含最小集合的依赖:</p>
 
 <ul>
-  <li>依赖组件 <code>flink-ml-core_2.12</code> 来开发不使用迭代的自定义机器学习算法。</li>
-  <li>依赖组件 <code>flink-ml-core_2.12</code> 与 
<code>flink-ml-iteration_2.12</code> 来开发使用迭代的自定义机器学习算法。</li>
-  <li>依赖组件 <code>flink-ml-lib_2.12</code> 来使用 Flink ML 提供的机器学习算法。</li>
+  <li>依赖组件 <code>flink-ml-core</code> 来开发不使用迭代的自定义机器学习算法。</li>
+  <li>依赖组件 <code>flink-ml-core</code> 与 <code>flink-ml-iteration</code> 
来开发使用迭代的自定义机器学习算法。</li>
+  <li>依赖组件 <code>flink-ml-lib</code> 来使用 Flink ML 提供的机器学习算法。</li>
 </ul>
 
 <h2 id="section-4">旧版本的更新策略</h2>
diff --git a/content/zh/index.html b/content/zh/index.html
index c56ce9aae..466f75ea4 100644
--- a/content/zh/index.html
+++ b/content/zh/index.html
@@ -402,6 +402,11 @@
 
   <dl>
       
+        <dt> <a href="/news/2022/09/08/akka-license-change.html">Regarding 
Akka's licensing change</a></dt>
+        <dd><p>On September 7th Lightbend announced a <a 
href="https://www.lightbend.com/blog/why-we-are-changing-the-license-for-akka";>license
 change</a> for the Akka project, the TL;DR being that you will need a 
commercial license to use future versions of Akka (2.7+) in production if you 
exceed a certain revenue threshold.</p>
+
+</dd>
+      
         <dt> <a href="/news/2022/08/29/release-table-store-0.2.0.html">Apache 
Flink Table Store 0.2.0 Release Announcement</a></dt>
         <dd>The Apache Flink Community is pleased to announce the release for 
Flink Table Store 0.2.0! This version complements the ecosystem and is an 
available version!</dd>
       
@@ -415,9 +420,6 @@
       
         <dt> <a href="/news/2022/07/12/release-ml-2.1.0.html">Apache Flink ML 
2.1.0 Release Announcement</a></dt>
         <dd>The Apache Flink community is excited to announce the release of 
Flink ML 2.1.0! This release focuses on improving Flink ML's infrastructure, 
such as Python SDK, memory management, and benchmark framework, to facilitate 
the development of performant, memory-safe, and easy-to-use algorithm 
libraries. We validated the enhanced infrastructure via benchmarks and 
confirmed that Flink ML can meet or exceed the performance of selected 
algorithms from alternative popular ML libraries [...]
-      
-        <dt> <a href="/2022/07/11/final-checkpoint-part2.html">FLIP-147: 
Support Checkpoints After Tasks Finished - Part Two</a></dt>
-        <dd>This post presents more details on the changes on the checkpoint 
procedure and task finish process made by the final checkpoint mechanism.</dd>
     
   </dl>
 

Reply via email to