beam-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From git-site-r...@apache.org
Subject [beam] branch asf-site updated: Publishing website 2021/06/10 00:01:35 at commit 0b369a5
Date Thu, 10 Jun 2021 00:02:14 GMT
This is an automated email from the ASF dual-hosted git repository.

git-site-role pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/beam.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new c6f4a99  Publishing website 2021/06/10 00:01:35 at commit 0b369a5
c6f4a99 is described below

commit c6f4a992cd60793b07e90433e1ae39806f31ab5f
Author: jenkins <builds@apache.org>
AuthorDate: Thu Jun 10 00:01:36 2021 +0000

    Publishing website 2021/06/10 00:01:35 at commit 0b369a5
---
 website/generated-content/.htaccess                |   2 +-
 .../blog/added-apex-runner/index.html              |   6 +-
 .../blog/adding-data-sources-to-sql/index.html     |   6 +-
 .../generated-content/blog/beam-2.10.0/index.html  |   6 +-
 .../generated-content/blog/beam-2.11.0/index.html  |   6 +-
 .../generated-content/blog/beam-2.12.0/index.html  |   6 +-
 .../generated-content/blog/beam-2.13.0/index.html  |   6 +-
 .../generated-content/blog/beam-2.14.0/index.html  |   6 +-
 .../generated-content/blog/beam-2.15.0/index.html  |   6 +-
 .../generated-content/blog/beam-2.16.0/index.html  |   6 +-
 .../generated-content/blog/beam-2.17.0/index.html  |   6 +-
 .../generated-content/blog/beam-2.18.0/index.html  |   6 +-
 .../generated-content/blog/beam-2.19.0/index.html  |   6 +-
 .../generated-content/blog/beam-2.20.0/index.html  |   6 +-
 .../generated-content/blog/beam-2.21.0/index.html  |   6 +-
 .../generated-content/blog/beam-2.22.0/index.html  |   6 +-
 .../generated-content/blog/beam-2.23.0/index.html  |   6 +-
 .../generated-content/blog/beam-2.24.0/index.html  |   6 +-
 .../generated-content/blog/beam-2.25.0/index.html  |   6 +-
 .../generated-content/blog/beam-2.26.0/index.html  |   6 +-
 .../generated-content/blog/beam-2.27.0/index.html  |   6 +-
 .../generated-content/blog/beam-2.28.0/index.html  |   6 +-
 .../generated-content/blog/beam-2.29.0/index.html  |   6 +-
 .../generated-content/blog/beam-2.3.0/index.html   |   6 +-
 .../blog/{beam-2.22.0 => beam-2.30.0}/index.html   |  27 +-
 .../generated-content/blog/beam-2.5.0/index.html   |   6 +-
 .../generated-content/blog/beam-2.6.0/index.html   |   6 +-
 .../generated-content/blog/beam-2.7.0/index.html   |   6 +-
 .../generated-content/blog/beam-2.8.0/index.html   |   6 +-
 .../generated-content/blog/beam-2.9.0/index.html   |   6 +-
 .../blog/beam-a-look-back/index.html               |   6 +-
 .../blog/beam-first-stable-release/index.html      |   6 +-
 .../blog/beam-graduates/index.html                 |   6 +-
 .../blog/beam-has-a-logo/index.html                |   6 +-
 .../blog/beam-kata-release/index.html              |   6 +-
 .../blog/beam-katas-kotlin-release/index.html      |   6 +-
 .../generated-content/blog/beam-kotlin/index.html  |   6 +-
 .../blog/beam-summit-aftermath/index.html          |   6 +-
 .../blog/beam-summit-digital-2020/index.html       |   6 +-
 .../blog/beam-summit-europe-2019/index.html        |   6 +-
 .../blog/beam-summit-europe/index.html             |   6 +-
 .../blog/beam-summit-site/index.html               |   6 +-
 .../blog/capability-matrix/index.html              |   6 +-
 .../dataframe-api-preview-available/index.html     |   6 +-
 .../blog/first-release/index.html                  |   6 +-
 .../blog/flink-batch-runner-milestone/index.html   |   6 +-
 .../blog/graduation-media-recap/index.html         |   6 +-
 website/generated-content/blog/gsoc-19/index.html  |   6 +-
 website/generated-content/blog/index.html          |   2 +-
 website/generated-content/blog/index.xml           | 598 +++------------------
 .../blog/kafka-to-pubsub-example/index.html        |   6 +-
 .../blog/looping-timers/index.html                 |   6 +-
 .../blog/pattern-match-beam-sql/index.html         |   6 +-
 .../blog/presentation-materials/index.html         |   6 +-
 .../blog/python-improved-annotations/index.html    |   6 +-
 .../index.html                                     |   6 +-
 .../blog/python-sdk-now-public/index.html          |   6 +-
 .../blog/python-sdk-release/index.html             |   6 +-
 .../blog/python-typing/index.html                  |   6 +-
 .../review-input-streaming-connectors/index.html   |  10 +-
 .../blog/season-of-docs/index.html                 |   6 +-
 .../generated-content/blog/six-months/index.html   |   6 +-
 .../blog/splitatfraction-method/index.html         |   6 +-
 .../blog/splittable-do-fn-is-available/index.html  |   6 +-
 .../blog/splittable-do-fn/index.html               |  16 +-
 .../blog/stateful-processing/index.html            |   6 +-
 .../blog/strata-hadoop-world-and-beam/index.html   |   6 +-
 .../generated-content/blog/test-stream/index.html  |   8 +-
 .../blog/timely-processing/index.html              |   6 +-
 .../blog/validate-beam-release/index.html          |   6 +-
 .../where-is-my-pcollection-dot-map/index.html     |   6 +-
 .../generated-content/categories/blog/index.xml    | 598 +++------------------
 website/generated-content/categories/index.xml     |   2 +-
 website/generated-content/contribute/index.xml     |   4 +-
 .../contribute/ptransform-style-guide/index.html   |   2 +-
 .../dsls/dataframes/overview/index.html            |   2 +-
 .../sql/calcite/aggregate-functions/index.html     |   2 +-
 .../dsls/sql/calcite/data-types/index.html         |   2 +-
 .../dsls/sql/calcite/lexical-structure/index.html  |   2 +-
 .../dsls/sql/calcite/overview/index.html           |   2 +-
 .../dsls/sql/calcite/query-syntax/index.html       |   2 +-
 .../dsls/sql/calcite/scalar-functions/index.html   |   2 +-
 .../extensions/create-external-table/index.html    |   2 +-
 .../dsls/sql/extensions/joins/index.html           |   2 +-
 .../dsls/sql/extensions/set/index.html             |   2 +-
 .../extensions/user-defined-functions/index.html   |   2 +-
 .../extensions/windowing-and-triggering/index.html |   2 +-
 .../documentation/dsls/sql/overview/index.html     |   4 +-
 .../documentation/dsls/sql/shell/index.html        |   2 +-
 .../documentation/dsls/sql/walkthrough/index.html  |   8 +-
 .../sql/zetasql/aggregate-functions/index.html     |   2 +-
 .../sql/zetasql/conditional-expressions/index.html |   2 +-
 .../dsls/sql/zetasql/conversion-rules/index.html   |   2 +-
 .../dsls/sql/zetasql/data-types/index.html         |   2 +-
 .../dsls/sql/zetasql/lexical/index.html            |   2 +-
 .../dsls/sql/zetasql/math-functions/index.html     |   2 +-
 .../dsls/sql/zetasql/operators/index.html          |   2 +-
 .../dsls/sql/zetasql/overview/index.html           |   2 +-
 .../dsls/sql/zetasql/query-syntax/index.html       |   2 +-
 .../dsls/sql/zetasql/string-functions/index.html   |   2 +-
 .../dsls/sql/zetasql/syntax/index.html             |   2 +-
 website/generated-content/documentation/index.xml  |  46 +-
 .../io/built-in/google-bigquery/index.html         |  16 +-
 .../documentation/io/built-in/parquet/index.html   |   4 +-
 .../io/developing-io-python/index.html             |   6 +-
 .../pipelines/test-your-pipeline/index.html        |   4 +-
 .../documentation/programming-guide/index.html     |  14 +-
 .../documentation/runners/dataflow/index.html      |   6 +-
 .../documentation/runners/direct/index.html        |  10 +-
 .../documentation/runners/flink/index.html         |   6 +-
 .../documentation/runners/jstorm/index.html        |   2 +-
 .../documentation/runners/mapreduce/index.html     |   2 +-
 .../documentation/runners/samza/index.html         |   2 +-
 .../documentation/runners/spark/index.html         |   2 +-
 .../sdks/feature-comparison/index.html             |   2 +-
 .../documentation/sdks/go/index.html               |   2 +-
 .../sdks/java-dependencies/index.html              |   4 +-
 .../documentation/sdks/java-extensions/index.html  |   2 +-
 .../documentation/sdks/java-thirdparty/index.html  |   2 +-
 .../documentation/sdks/java/euphoria/index.html    |   2 +-
 .../documentation/sdks/java/index.html             |   2 +-
 .../sdks/java/testing/nexmark/index.html           |   6 +-
 .../sdks/python-dependencies/index.html            |   4 +-
 .../sdks/python-pipeline-dependencies/index.html   |   2 +-
 .../documentation/sdks/python-streaming/index.html |   2 +-
 .../sdks/python-type-safety/index.html             |   2 +-
 .../documentation/sdks/python/index.html           |   2 +-
 website/generated-content/feed.xml                 | 136 +++--
 .../get-started/downloads/index.html               |  17 +-
 website/generated-content/get-started/index.xml    |  24 +-
 .../get-started/quickstart-java/index.html         |   4 +-
 .../get-started/wordcount-example/index.html       |   4 +-
 website/generated-content/index.html               |   2 +-
 website/generated-content/sitemap.xml              |   2 +-
 134 files changed, 449 insertions(+), 1607 deletions(-)

diff --git a/website/generated-content/.htaccess b/website/generated-content/.htaccess
index 5603ec3..0aaa235 100644
--- a/website/generated-content/.htaccess
+++ b/website/generated-content/.htaccess
@@ -21,6 +21,6 @@ RewriteRule ^(.*)$ https://beam.apache.org/$1 [L,R=301]
 # The following redirect maintains the previously supported URLs.
 RedirectMatch permanent "/documentation/sdks/(javadoc|pydoc)(.*)" "https://beam.apache.org/releases/$1$2"
 # Keep this updated to point to the current release.
-RedirectMatch "/releases/([^/]+)/current(.*)" "https://beam.apache.org/releases/$1/2.29.0$2"
+RedirectMatch "/releases/([^/]+)/current(.*)" "https://beam.apache.org/releases/$1/2.30.0$2"
 
 RedirectMatch "/contribute/design-documents" "https://cwiki.apache.org/confluence/display/BEAM/Design+Documents"
diff --git a/website/generated-content/blog/added-apex-runner/index.html b/website/generated-content/blog/added-apex-runner/index.html
index 71b355d..a0f35c8 100644
--- a/website/generated-content/blog/added-apex-runner/index.html
+++ b/website/generated-content/blog/added-apex-runner/index.html
@@ -18,11 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="body__contained center no__padding content-up"><article class=post itemscope itemtype=http://schema.org/BlogPosting><div class=post-content><div class=post-info><p>blog</p><p>2017/01/09</p></div><header class=post-header><h2 itemprop="name headline">Release 0.4.0 adds a runner for Apache Apex</h1><div class=post-info><span>Thomas Weise [<a href=https://twitter.com/thweise>@thweise</a>]</span></div></header><div clas [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="body__contained center no__padding content-up"><article class=post itemscope itemtype=http://schema.org/BlogPosting><div class=post-content><div class=post-info><p>blog</p><p>2017/01/09</p></div><header class=post-header><h2 itemprop="name headline">Release 0.4.0 adds a runner for Apache Apex</h1><div class=post-info><span>Thomas Weise [<a href=https://twitter.com/thweise>@thweise</a>]</span></div></header><div clas [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/adding-data-sources-to-sql/index.html b/website/generated-content/blog/adding-data-sources-to-sql/index.html
index 9ff87e9..cbcbd83 100644
--- a/website/generated-content/blog/adding-data-sources-to-sql/index.html
+++ b/website/generated-content/blog/adding-data-sources-to-sql/index.html
@@ -132,11 +132,7 @@ us make sure that we&rsquo;re providing the timestamp for each row properly:</p>
 +---------------------+--------------+
 5 rows selected (10.142 seconds)
 </code></pre><p>And voilà! We can start playing with some interesting streaming queries to our
-sequence generator.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/02/22</p></div> [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+sequence generator.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p> [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-2.10.0/index.html b/website/generated-content/blog/beam-2.10.0/index.html
index f666492..5999ba0 100644
--- a/website/generated-content/blog/beam-2.10.0/index.html
+++ b/website/generated-content/blog/beam-2.10.0/index.html
@@ -36,11 +36,7 @@ Markwick, Pablo Estrada, Prem Kumar Karunakaran, Reuven Lax, robbe, Robbe
 Sneyders, Robert Bradshaw, Robert Burke, Ruoyun Huang, Ryan Williams, Sam
 Whittle, Scott Wegner, Slava Chernyak, Theodore Siu, Thomas Weise, Udi Meiri,
 <a href=mailto:vaclav.plajt@gmail.com>vaclav.plajt@gmail.com</a>, Valentyn Tymofieiev, Won Wook SONG, Wout Scheepers,
-Xinyu Liu, Yueyang Qiu, Zhuo Peng</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/0 [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+Xinyu Liu, Yueyang Qiu, Zhuo Peng</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"> [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-2.11.0/index.html b/website/generated-content/blog/beam-2.11.0/index.html
index 815c051..007b9a7 100644
--- a/website/generated-content/blog/beam-2.11.0/index.html
+++ b/website/generated-content/blog/beam-2.11.0/index.html
@@ -31,11 +31,7 @@ Maximilian Michels, Melissa Pashniak, Michael Luckey, Michal Walenia, Mike Peder
 Mikhail Gryzykhin, Niel Markwick, Pablo Estrada, Pascal Gula, Reuven Lax, Robbe Sneyders,
 Robert Bradshaw, Robert Burke, Rui Wang, Ruoyun Huang, Ryan Williams, Sam Rohde, Sam Whittle,
 Scott Wegner, Tanay Tummalapalli, Thomas Weise, Tianyang Hu, Tyler Akidau, Udi Meiri,
-Valentyn Tymofieiev, Xinyu Liu, Xu Mingmin, Łukasz Gajowy.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div class="post-info post-categ [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+Valentyn Tymofieiev, Xinyu Liu, Xu Mingmin, Łukasz Gajowy.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class=" [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-2.12.0/index.html b/website/generated-content/blog/beam-2.12.0/index.html
index f840632..04eb40c 100644
--- a/website/generated-content/blog/beam-2.12.0/index.html
+++ b/website/generated-content/blog/beam-2.12.0/index.html
@@ -37,11 +37,7 @@ Mikhail Gryzykhin, Niel Markwick, Pablo Estrada, Radoslaw Stankiewicz,
 Reuven Lax, Robbe Sneyders, Robert Bradshaw, Robert Burke, Rui Wang,
 Ruoyun Huang, Ryan Williams, Slava Chernyak, Shahar Frank, Sunil Pedapudi,
 Thomas Weise, Tim Robertson, Tanay Tummalapalli, Udi Meiri,
-Valentyn Tymofieiev, Xinyu Liu, Yifan Zou, Yueyang Qiu</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div class="post-info post-category" [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+Valentyn Tymofieiev, Xinyu Liu, Yifan Zou, Yueyang Qiu</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-2.13.0/index.html b/website/generated-content/blog/beam-2.13.0/index.html
index c1a9119..e017930 100644
--- a/website/generated-content/blog/beam-2.13.0/index.html
+++ b/website/generated-content/blog/beam-2.13.0/index.html
@@ -34,11 +34,7 @@ Pablo Estrada, Pranay Nanda, Reuven Lax, Richard Moorhead, Robbe Sneyders,
 Robert Bradshaw, Robert Burke, Roman van der Krogt, rosetn, Rui Wang, Ryan Yuan,
 Sam Whittle, sudhan499, Sylwester Kardziejonek, Ted, Thomas Weise, Tim Robertson,
 ttanay, tvalentyn, Udi Meiri, Valentyn Tymofieiev, Xinyu Liu, Yifan Zou,
-yoshiki.obata, Yueyang Qiu</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/02/22</p [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+yoshiki.obata, Yueyang Qiu</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-2.14.0/index.html b/website/generated-content/blog/beam-2.14.0/index.html
index 95939715..9dafb16 100644
--- a/website/generated-content/blog/beam-2.14.0/index.html
+++ b/website/generated-content/blog/beam-2.14.0/index.html
@@ -40,11 +40,7 @@ Peter Backx, Rakesh Kumar, Rasmi Elasmar, Reuven Lax, Reza Rokni, Robbe Sneyders
 Robert Bradshaw, Robert Burke, Rose Nguyen, Rui Wang, Ruoyun Huang,
 Shoaib Zafar, Slava Chernyak, Steve Niemitz, Tanay Tummalapalli, Thomas Weise,
 Tim Robertson, Tim van der Lippe, Udi Meiri, Valentyn Tymofieiev, Varun Dhussa,
-Viktor Gerdin, Yichi Zhang, Yifan Mai, Yifan Zou, Yueyang Qiu.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div class="post-info post-c [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+Viktor Gerdin, Yichi Zhang, Yifan Mai, Yifan Zou, Yueyang Qiu.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div cla [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-2.15.0/index.html b/website/generated-content/blog/beam-2.15.0/index.html
index 692813f..cff7d27 100644
--- a/website/generated-content/blog/beam-2.15.0/index.html
+++ b/website/generated-content/blog/beam-2.15.0/index.html
@@ -35,11 +35,7 @@ Pablo Estrada, Paul King, Paul Suganthan, Raheel Khan, Rakesh Kumar,
 Reza Rokni, Robert Bradshaw, Robert Burke, rosetn, Rui Wang, Ryan Skraba, RyanSkraba,
 Sahith Nallapareddy, Sam Rohde, Sam Whittle, Steve Niemitz, Tanay Tummalapalli, Thomas Weise,
 Tianyang Hu, ttanay, tvalentyn, Udi Meiri, Valentyn Tymofieiev, Wout Scheepers,
-yanzhi, Yekut, Yichi Zhang, Yifan Zou, yoshiki.obata, Yueyang Qiu, Yunqing Zhou</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div class= [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+yanzhi, Yekut, Yichi Zhang, Yifan Zou, yoshiki.obata, Yueyang Qiu, Yunqing Zhou</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categor [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-2.16.0/index.html b/website/generated-content/blog/beam-2.16.0/index.html
index bf88ade..962751c 100644
--- a/website/generated-content/blog/beam-2.16.0/index.html
+++ b/website/generated-content/blog/beam-2.16.0/index.html
@@ -37,11 +37,7 @@ Salman Raza, Sam Rohde, Saul Chavez, Shoaib, Shoaib Zafar, Slava Chernyak, Tanay
 Thinh Ha, Thomas Weise, Tianzi Cai, Tim van der Lippe, Tomer Zeltzer, Tudor Marian,
 Udi Meiri, Valentyn Tymofieiev, Yichi Zhang, Yifan Zou, Yueyang Qiu, gxercavins,
 jesusrv1103, lostluck, matt-darwin, mrociorg, ostrokach, parahul, rahul8383, rosetn,
-sunjincheng121, the1plummie, ttanay, tvalentyn, venn001, yoshiki.obata, Łukasz Gajowy</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div  [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+sunjincheng121, the1plummie, ttanay, tvalentyn, venn001, yoshiki.obata, Łukasz Gajowy</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-c [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-2.17.0/index.html b/website/generated-content/blog/beam-2.17.0/index.html
index b1dbcbc..73c409d 100644
--- a/website/generated-content/blog/beam-2.17.0/index.html
+++ b/website/generated-content/blog/beam-2.17.0/index.html
@@ -38,11 +38,7 @@ Nasyrov, Reuven Lax, Robert Bradshaw, Robert Burke, Rui Wang, Ruslan Altynnikov,
 Ryan Skraba, Salman Raza, Saul Chavez, Sebastian Jambor, sunjincheng121, Tatu
 Saloranta, tchiarato, Thomas Weise, Tomo Suzuki, Tudor Marian, tvalentyn, Udi
 Meiri, Valentyn Tymofieiev, Viola Lyu, Vishwas, Yichi Zhang, Yifan Zou, Yueyang
-Qiu, Łukasz Gajowy</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/02/22</p></div>< [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+Qiu, Łukasz Gajowy</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2 [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-2.18.0/index.html b/website/generated-content/blog/beam-2.18.0/index.html
index b7224e9..4f9f7fc 100644
--- a/website/generated-content/blog/beam-2.18.0/index.html
+++ b/website/generated-content/blog/beam-2.18.0/index.html
@@ -22,11 +22,7 @@ function openMenu(){addPlaceholder();blockScroll();}</script><div class="body__c
 &
 Ahmet Altay</span></div></header><div class="arrow-list header-top-margin" itemprop=articleBody><p>We are happy to present the new 2.18.0 release of Beam. This release includes both improvements and new functionality.
 See the <a href=/get-started/downloads/#2180-2020-01-23>download page</a> for this release.</p><p>For more information on changes in 2.18.0, check out the
-<a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?version=12346383&projectId=12319527">detailed release notes</a>.</p><h2 id=highlights>Highlights</h2><ul><li><a href=https://issues.apache.org/jira/browse/BEAM-8470>BEAM-8470</a> - Create a new Spark runner based on Spark Structured streaming framework</li></ul><h3 id=ios>I/Os</h3><ul><li><a href=https://issues.apache.org/jira/browse/BEAM-7636>BEAM-7636</a> - Added SqsIO v2 support.</li><li><a href=https://issues.apache.org/ [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+<a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?version=12346383&projectId=12319527">detailed release notes</a>.</p><h2 id=highlights>Highlights</h2><ul><li><a href=https://issues.apache.org/jira/browse/BEAM-8470>BEAM-8470</a> - Create a new Spark runner based on Spark Structured streaming framework</li></ul><h3 id=ios>I/Os</h3><ul><li><a href=https://issues.apache.org/jira/browse/BEAM-7636>BEAM-7636</a> - Added SqsIO v2 support.</li><li><a href=https://issues.apache.org/ [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-2.19.0/index.html b/website/generated-content/blog/beam-2.19.0/index.html
index c78b196..de835b4 100644
--- a/website/generated-content/blog/beam-2.19.0/index.html
+++ b/website/generated-content/blog/beam-2.19.0/index.html
@@ -25,11 +25,7 @@ See the <a href=/get-started/downloads/#2190-2020-02-04>download page</a> for th
 <a href=https://issues.apache.org/jira/browse/BEAM-8623>BEAM-8623</a>,
 <a href=https://issues.apache.org/jira/browse/BEAM-7949>BEAM-7949</a>,
 <a href=https://issues.apache.org/jira/browse/BEAM-8935>BEAM-8935</a>,
-<a href=https://issues.apache.org/jira/browse/BEAM-8816>BEAM-8816</a></li></ul><h3 id=ios>I/Os</h3><ul><li><a href=https://issues.apache.org/jira/browse/BEAM-1440>BEAM-1440</a> Create a BigQuery source (that implements iobase.BoundedSource) for Python SDK</li><li><a href=https://issues.apache.org/jira/browse/BEAM-2572>BEAM-2572</a> Implement an S3 filesystem for Python SDK</li><li><a href=https://issues.apache.org/jira/browse/BEAM-5192>BEAM-5192</a> Support Elasticsearch 7.x</li><li><a h [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+<a href=https://issues.apache.org/jira/browse/BEAM-8816>BEAM-8816</a></li></ul><h3 id=ios>I/Os</h3><ul><li><a href=https://issues.apache.org/jira/browse/BEAM-1440>BEAM-1440</a> Create a BigQuery source (that implements iobase.BoundedSource) for Python SDK</li><li><a href=https://issues.apache.org/jira/browse/BEAM-2572>BEAM-2572</a> Implement an S3 filesystem for Python SDK</li><li><a href=https://issues.apache.org/jira/browse/BEAM-5192>BEAM-5192</a> Support Elasticsearch 7.x</li><li><a h [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-2.20.0/index.html b/website/generated-content/blog/beam-2.20.0/index.html
index 71ba3d1..b20b53b 100644
--- a/website/generated-content/blog/beam-2.20.0/index.html
+++ b/website/generated-content/blog/beam-2.20.0/index.html
@@ -26,11 +26,7 @@ See the <a href=/get-started/downloads/#2190-2020-02-04>download page</a> for th
 , Kengo Seki, Kenneth Jung, Kenneth Knowles, Kyle Weaver, Kyle Winkelman, Lukas Drbal, Marek Simunek, Mark Liu, Maximilian Michels, Melissa Pashniak
 , Michael Luckey, Michal Walenia, Mike Pedersen, Mikhail Gryzykhin, Niel Markwick, Pablo Estrada, Pascal Gula, Rehman Murad Ali, Reuven Lax, Rob, Robbe Sneyders
 , Robert Bradshaw, Robert Burke, Rui Wang, Ruoyun Huang, Ryan Williams, Sam Rohde, Sam Whittle, Scott Wegner, Shoaib Zafar, Thomas Weise, Tianyang Hu, Tyler Akidau
-, Udi Meiri, Valentyn Tymofieiev, Xinyu Liu, XuMingmin, ttanay, tvalentyn, Łukasz Gajowy</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><d [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+, Udi Meiri, Valentyn Tymofieiev, Xinyu Liu, XuMingmin, ttanay, tvalentyn, Łukasz Gajowy</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ dat [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-2.21.0/index.html b/website/generated-content/blog/beam-2.21.0/index.html
index 10bd60d..678a0c5 100644
--- a/website/generated-content/blog/beam-2.21.0/index.html
+++ b/website/generated-content/blog/beam-2.21.0/index.html
@@ -53,11 +53,7 @@ see <a href=https://cloud.google.com/bigquery/docs/loading-data-cloud-storage-av
 (<a href=https://issues.apache.org/jira/browse/BEAM-9634>BEAM-9634</a>)</p></li><li><p><code>docker-pull-licenses</code> tag was introduced. Licenses/notices of third party dependencies will be added to the docker images when <code>docker-pull-licenses</code> was set.
 The files are added to <code>/opt/apache/beam/third_party_licenses/</code>.
 By default, no licenses/notices are added to the docker images. (<a href=https://issues.apache.org/jira/browse/BEAM-9136>BEAM-9136</a>)</p></li></ul><h2 id=breaking-changes>Breaking Changes</h2><ul><li>Dataflow runner now requires the <code>--region</code> option to be set, unless a default value is set in the environment (<a href=https://issues.apache.org/jira/browse/BEAM-9199>BEAM-9199</a>). See <a href=https://cloud.google.com/dataflow/docs/concepts/regional-endpoints>here</a> for mor [...]
-Schema Options, it will be removed in version <code>2.23.0</code>. (<a href=https://issues.apache.org/jira/browse/BEAM-9704>BEAM-9704</a>)</li><li>The <code>--zone</code> option in the Dataflow runner is now deprecated. Please use <code>--worker_zone</code> instead. (<a href=https://issues.apache.org/jira/browse/BEAM-9716>BEAM-9716</a>)</li></ul><h2 id=list-of-contributors>List of Contributors</h2><p>According to git shortlog, the following people contributed to the 2.21.0 release. Thank [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+Schema Options, it will be removed in version <code>2.23.0</code>. (<a href=https://issues.apache.org/jira/browse/BEAM-9704>BEAM-9704</a>)</li><li>The <code>--zone</code> option in the Dataflow runner is now deprecated. Please use <code>--worker_zone</code> instead. (<a href=https://issues.apache.org/jira/browse/BEAM-9716>BEAM-9716</a>)</li></ul><h2 id=list-of-contributors>List of Contributors</h2><p>According to git shortlog, the following people contributed to the 2.21.0 release. Thank [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-2.22.0/index.html b/website/generated-content/blog/beam-2.22.0/index.html
index a456aaa..d8448a0 100644
--- a/website/generated-content/blog/beam-2.22.0/index.html
+++ b/website/generated-content/blog/beam-2.22.0/index.html
@@ -21,11 +21,7 @@ function blockScroll(){$("body").toggleClass("fixedPosition");}
 function openMenu(){addPlaceholder();blockScroll();}</script><div class="body__contained center no__padding content-up"><article class=post itemscope itemtype=http://schema.org/BlogPosting><div class=post-content><div class=post-info><p>blog</p><p>2020/06/08</p></div><header class=post-header><h2 itemprop="name headline">Apache Beam 2.22.0</h1><div class=post-info><span>Brian Hulette [<a href=https://twitter.com/BrianHulette>@BrianHulette</a>]</span></div></header><div class="arrow-list  [...]
 See the <a href=/get-started/downloads/#2220-2020-06-08>download page</a> for this release.</p><p>For more information on changes in 2.22.0, check out the
 <a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12319527&version=12347144">detailed release notes</a>.</p><h2 id=ios>I/Os</h2><ul><li>Basic Kafka read/write support for DataflowRunner (Python) (<a href=https://issues.apache.org/jira/browse/BEAM-8019>BEAM-8019</a>).</li><li>Sources and sinks for Google Healthcare APIs (Java)(<a href=https://issues.apache.org/jira/browse/BEAM-9468>BEAM-9468</a>).</li></ul><h2 id=new-features--improvements>New Features / Improvemen [...]
-(<a href=https://issues.apache.org/jira/browse/BEAM-9646>BEAM-9646</a>)</li></ul><h2 id=breaking-changes>Breaking Changes</h2><ul><li>The Python SDK now requires <code>--job_endpoint</code> to be set when using <code>--runner=PortableRunner</code> (<a href=https://issues.apache.org/jira/browse/BEAM-9860>BEAM-9860</a>). Users seeking the old default behavior should set <code>--runner=FlinkRunner</code> instead.</li></ul><h2 id=list-of-contributors>List of Contributors</h2><p>According to  [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+(<a href=https://issues.apache.org/jira/browse/BEAM-9646>BEAM-9646</a>)</li></ul><h2 id=breaking-changes>Breaking Changes</h2><ul><li>The Python SDK now requires <code>--job_endpoint</code> to be set when using <code>--runner=PortableRunner</code> (<a href=https://issues.apache.org/jira/browse/BEAM-9860>BEAM-9860</a>). Users seeking the old default behavior should set <code>--runner=FlinkRunner</code> instead.</li></ul><h2 id=list-of-contributors>List of Contributors</h2><p>According to  [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-2.23.0/index.html b/website/generated-content/blog/beam-2.23.0/index.html
index 9914322..2fc4fc6 100644
--- a/website/generated-content/blog/beam-2.23.0/index.html
+++ b/website/generated-content/blog/beam-2.23.0/index.html
@@ -29,11 +29,7 @@ Previously nulls could only be represented with explicit null values, as in
 <code>{"foo": "bar", "baz": null}</code>, whereas an implicit null like <code>{"foo": "bar"}</code> would raise an
 exception. Now both JSON strings will yield the same result by default. This behavior can be
 overridden with <code>RowJson.RowJsonDeserializer#withNullBehavior</code>.</li><li>Fixed a bug in <code>GroupIntoBatches</code> experimental transform in Python to actually group batches by key.
-This changes the output type for this transform (<a href=https://issues.apache.org/jira/browse/BEAM-6696>BEAM-6696</a>).</li></ul><h2 id=deprecations>Deprecations</h2><ul><li>Remove Gearpump runner. (<a href=https://issues.apache.org/jira/browse/BEAM-9999>BEAM-9999</a>)</li><li>Remove Apex runner. (<a href=https://issues.apache.org/jira/browse/BEAM-9999>BEAM-9999</a>)</li><li>RedisIO.readAll() is deprecated and will be removed in 2 versions, users must use RedisIO.readKeyPatterns() as a  [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+This changes the output type for this transform (<a href=https://issues.apache.org/jira/browse/BEAM-6696>BEAM-6696</a>).</li></ul><h2 id=deprecations>Deprecations</h2><ul><li>Remove Gearpump runner. (<a href=https://issues.apache.org/jira/browse/BEAM-9999>BEAM-9999</a>)</li><li>Remove Apex runner. (<a href=https://issues.apache.org/jira/browse/BEAM-9999>BEAM-9999</a>)</li><li>RedisIO.readAll() is deprecated and will be removed in 2 versions, users must use RedisIO.readKeyPatterns() as a  [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-2.24.0/index.html b/website/generated-content/blog/beam-2.24.0/index.html
index e7c93ad..df883c2 100644
--- a/website/generated-content/blog/beam-2.24.0/index.html
+++ b/website/generated-content/blog/beam-2.24.0/index.html
@@ -41,11 +41,7 @@ Robert Bradshaw, Robert Burke, Robin Qiu, Rui Wang, Saavan Nanavati, sabhyankar,
 Scott Lukas, Siddhartha Thota, Simone Primarosa, Sławomir Andrian,
 Steve Niemitz, Tobiasz Kędzierski, Tomo Suzuki, Tyson Hamilton, Udi Meiri,
 Valentyn Tymofieiev, viktorjonsson, Xinyu Liu, Yichi Zhang, Yixing Zhang, yoshiki.obata,
-Yueyang Qiu, zijiesong</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/02/22</p></d [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+Yueyang Qiu, zijiesong</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p> [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-2.25.0/index.html b/website/generated-content/blog/beam-2.25.0/index.html
index dd5548c..db0a2b6 100644
--- a/website/generated-content/blog/beam-2.25.0/index.html
+++ b/website/generated-content/blog/beam-2.25.0/index.html
@@ -40,11 +40,7 @@ Saavan Nanavati, Sam Bourne, Sam Rohde, Sam Whittle, Sergiy Kolesnikov, Sindy Li
 Niemitz, Terry Xian, Thomas Weise, Tobiasz Kędzierski, Truc Le, Tyson Hamilton, Udi Meiri, Valentyn
 Tymofieiev, Yichi Zhang, Yifan Mai, Yueyang Qiu, annaqin418, danielxjd, dennis, dp, fuyuwei,
 lostluck, nehsyc, odeshpande, odidev, pulasthi, purbanow, rworley-monster, sclukas77, terryxian78,
-tvalentyn, yoshiki.obata</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/02/22</p>< [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+tvalentyn, yoshiki.obata</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</ [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-2.26.0/index.html b/website/generated-content/blog/beam-2.26.0/index.html
index e8bb65c..8678aeb 100644
--- a/website/generated-content/blog/beam-2.26.0/index.html
+++ b/website/generated-content/blog/beam-2.26.0/index.html
@@ -34,11 +34,7 @@ Romain Manni-Bucau, Rui Wang, rworley-monster, Sam Rohde, Sam Whittle, shollyman
 Simone Primarosa, Siyuan Chen, Steve Niemitz, Steven van Rossum, sychen, Teodor Spæren,
 Tim Clemons, Tim Robertson, Tobiasz Kędzierski, tszerszen, Tudor Marian, tvalentyn,
 Tyson Hamilton, Udi Meiri, Vasu Gupta, xasm83, Yichi Zhang, yichuan66, Yifan Mai,
-yoshiki.obata, Yueyang Qiu, yukihira1992</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+yoshiki.obata, Yueyang Qiu, yukihira1992</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-cat [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-2.27.0/index.html b/website/generated-content/blog/beam-2.27.0/index.html
index 5a9d553..595db73 100644
--- a/website/generated-content/blog/beam-2.27.0/index.html
+++ b/website/generated-content/blog/beam-2.27.0/index.html
@@ -36,11 +36,7 @@ Pawel Pasterz, Piotr Szuberski, purbanow, Reuven Lax, rHermes,
 Robert Bradshaw, Robert Burke, Rui Wang, Sam Rohde, Sam Whittle,
 Siyuan Chen, Tim Robertson, Tobiasz Kędzierski, tszerszen,
 Valentyn Tymofieiev, Tyson Hamilton, Udi Meiri, vachan-shetty, Xinyu Liu,
-Yichi Zhang, Yifan Mai, yoshiki.obata, Yueyang Qiu</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div class="post-info post-category"><p> [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+Yichi Zhang, Yifan Mai, yoshiki.obata, Yueyang Qiu</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-inf [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-2.28.0/index.html b/website/generated-content/blog/beam-2.28.0/index.html
index b50bb04..ed0d2f2 100644
--- a/website/generated-content/blog/beam-2.28.0/index.html
+++ b/website/generated-content/blog/beam-2.28.0/index.html
@@ -35,11 +35,7 @@ Nelson Osacky, Niel Markwick, Ning Kang, omarismail94, Pablo Estrada, Piotr Szub
 ramazan-yapparov, Reuven Lax, Reza Rokni, rHermes, Robert Bradshaw, Robert Burke, Robert Gruener,
 Romster, Rui Wang, Sam Whittle, shehzaadn-vd, Siyuan Chen, Sonam Ramchand, Tobiasz Kędzierski,
 Tomo Suzuki, tszerszen, tvalentyn, Tyson Hamilton, Udi Meiri, Xinbin Huang, Yichi Zhang,
-Yifan Mai, yoshiki.obata, Yueyang Qiu, Yusaku Matsuki</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div class="post-info post-category"> [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+Yifan Mai, yoshiki.obata, Yueyang Qiu, Yusaku Matsuki</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post- [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-2.29.0/index.html b/website/generated-content/blog/beam-2.29.0/index.html
index 4aa02ee..6d6151a 100644
--- a/website/generated-content/blog/beam-2.29.0/index.html
+++ b/website/generated-content/blog/beam-2.29.0/index.html
@@ -39,11 +39,7 @@ Williams, Robert Bradshaw, Robert Burke, Rui Wang, Sam Rohde, Sam Whittle,
 Shehzaad Nakhoda, Shehzaad Nakhoda, Siyuan Chen, Sonam Ramchand, Steve Niemitz,
 sychen, Sylvain Veyrié, Tim Robertson, Tobias Kaymak, Tomasz Szerszeń, Tomasz
 Szerszeń, Tomo Suzuki, Tyson Hamilton, Udi Meiri, Valentyn Tymofieiev, Yichi
-Zhang, Yifan Mai, Yixing Zhang, Yoshiki Obata</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div class="post-info post-category"><p>blog< [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+Zhang, Yifan Mai, Yixing Zhang, Yoshiki Obata</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info pos [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-2.3.0/index.html b/website/generated-content/blog/beam-2.3.0/index.html
index 2e36a83..fa1eaed 100644
--- a/website/generated-content/blog/beam-2.3.0/index.html
+++ b/website/generated-content/blog/beam-2.3.0/index.html
@@ -40,11 +40,7 @@ implicit representations of various Beam entities.</li><li>Introduces two transf
 (approximate element frequency estimation) and HyperLogLog (approximate
 cardinality estimation).</li></ul><h2 id=runners>Runners</h2><ul><li>Staging files on Dataflow shows progress</li><li>Flink runner is based now on Flink version 1.4.0</li></ul><h2 id=ios>IOs</h2><ul><li>BigtableIO now supports ValueProvider configuration</li><li>BigQueryIO supports writing bounded collections to tables with partition
 decorators</li><li>KafkaIO moves to version 1.0 (it is still backwards compatible with versions >= 0.9.x.x)</li><li>Added IO source for VCF files (Python)</li><li>Added support for backoff on deadlocks in JdbcIO.write() and connection
-improvement</li><li>Improved performance of KinesisIO.read()</li><li>Many improvements to TikaIO</li></ul><h1 id=list-of-contributors>List of Contributors</h1><p>According to git shortlog, the following 78 people contributed to the 2.3.0 release. Thank you to all contributors!</p><p>Ahmet Altay, Alan Myrvold, Alex Amato, Alexey Romanenko, Ankur Goenka, Anton Kedin, Arnaud Fournier, Asha Rostamianfar, Ben Chambers, Ben Sidhom, Bill Neubauer, Brian Foo, cclauss, Chamikara Jayalath, Charles [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+improvement</li><li>Improved performance of KinesisIO.read()</li><li>Many improvements to TikaIO</li></ul><h1 id=list-of-contributors>List of Contributors</h1><p>According to git shortlog, the following 78 people contributed to the 2.3.0 release. Thank you to all contributors!</p><p>Ahmet Altay, Alan Myrvold, Alex Amato, Alexey Romanenko, Ankur Goenka, Anton Kedin, Arnaud Fournier, Asha Rostamianfar, Ben Chambers, Ben Sidhom, Bill Neubauer, Brian Foo, cclauss, Chamikara Jayalath, Charles [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-2.22.0/index.html b/website/generated-content/blog/beam-2.30.0/index.html
similarity index 57%
copy from website/generated-content/blog/beam-2.22.0/index.html
copy to website/generated-content/blog/beam-2.30.0/index.html
index a456aaa..72204dc 100644
--- a/website/generated-content/blog/beam-2.22.0/index.html
+++ b/website/generated-content/blog/beam-2.30.0/index.html
@@ -1,31 +1,36 @@
-<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Apache Beam 2.22.0</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Spe [...]
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Apache Beam 2.30.0</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Spe [...]
 <a class=navbar-link href=/get-started/beam-overview/>Get Started</a>
 <a class=navbar-link href=/documentation/>Documentation</a>
 <button type=button class="navbar-toggle menu-open" aria-expanded=false aria-controls=navbar onclick=openMenu()>
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><button type=button class=navbar-toggle aria-expanded=false aria-controls=navbar id=closeMenu>
 <span class=sr-only>Toggle navigation</span>
-<span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button><ul class="nav navbar-nav"><li><div class=searchBar-mobile><script>(function(){var cx='012923275103528129024:4emlchv9wzi';var gcse=document.createElement('script');gcse.type='text/javascript';gcse.async=true;gcse.src='https://cse.google.com/cse.js?cx='+cx;var s=document.getElementsByTagName('script')[0];s.parentNode.insertBefore(gcse,s);})();</script><gcse:search></gcse:search></div></li><li><a c [...]
+<span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button><ul class="nav navbar-nav"><li><div class=searchBar-mobile><script>(function(){var cx='012923275103528129024:4emlchv9wzi';var gcse=document.createElement('script');gcse.type='text/javascript';gcse.async=true;gcse.src='https://cse.google.com/cse.js?cx='+cx;var s=document.getElementsByTagName('script')[0];s.parentNode.insertBefore(gcse,s);})();</script><gcse:search></gcse:search></div></li><li><a c [...]
 &nbsp;Apache
 <span class=arrow-icon><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" viewBox="0 0 20 20"><circle cx="10" cy="10" r="10" fill="#ff6d00"/><path stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.535 5.28l4.573 4.818-4.573 4.403"/></svg></span></a><ul class="dropdown-menu dropdown-menu-right"><li><a target=_blank href=http://www.apache.org/>ASF Homepage</a></li><li><a target=_blank href=http://www.apache.org/licenses/>License</a> [...]
 <span><svg xmlns="http://www.w3.org/2000/svg" width="12" height="11" fill="none" viewBox="0 0 12 11"><path stroke="#ff6d00" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10.666 4.535 5.847 9.108 1.444 4.535"/></svg></span></a><ul class=dropdown-menu><li><a class=navbar-dropdown-menu-link href=/documentation/>General</a></li><li><a class=navbar-dropdown-menu-link href=/documentation/sdks/java/>Languages</a></li><li><a class=navbar-dropdown-menu-link href=/documentati [...]
 <a class=navbar-link href=/community/>Community</a>
 <a class=navbar-link href=/contribute/>Contribute</a>
 <a class=navbar-link href=/blog/>Blog</a>
-<a class=navbar-link href=/powered-by/>Powered by</a></div><div id=iconsBar><a type=button onclick=showSearch()><svg xmlns="http://www.w3.org/2000/svg" width="25" height="24" fill="none" viewBox="0 0 25 24"><path stroke="#ff6d00" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.75" d="M10.191 17c3.866.0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zM21.191 21l-6-6"/></svg></a><a target=_blank href=https://github.com/apache/beam/edit/master/website/www/site/content/en/blo [...]
+<a class=navbar-link href=/powered-by/>Powered by</a></div><div id=iconsBar><a type=button onclick=showSearch()><svg xmlns="http://www.w3.org/2000/svg" width="25" height="24" fill="none" viewBox="0 0 25 24"><path stroke="#ff6d00" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.75" d="M10.191 17c3.866.0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zM21.191 21l-6-6"/></svg></a><a target=_blank href=https://github.com/apache/beam/edit/master/website/www/site/content/en/blo [...]
 &nbsp;Apache
 <span class=arrow-icon><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" viewBox="0 0 20 20"><circle cx="10" cy="10" r="10" fill="#ff6d00"/><path stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.535 5.28l4.573 4.818-4.573 4.403"/></svg></span></a><ul class=dropdown-menu><li><a class=navbar-dropdown-menu-link target=_blank href=http://www.apache.org/>ASF Homepage</a></li><li><a class=navbar-dropdown-menu-link target=_blank href=h [...]
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="body__contained center no__padding content-up"><article class=post itemscope itemtype=http://schema.org/BlogPosting><div class=post-content><div class=post-info><p>blog</p><p>2020/06/08</p></div><header class=post-header><h2 itemprop="name headline">Apache Beam 2.22.0</h1><div class=post-info><span>Brian Hulette [<a href=https://twitter.com/BrianHulette>@BrianHulette</a>]</span></div></header><div class="arrow-list  [...]
-See the <a href=/get-started/downloads/#2220-2020-06-08>download page</a> for this release.</p><p>For more information on changes in 2.22.0, check out the
-<a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12319527&version=12347144">detailed release notes</a>.</p><h2 id=ios>I/Os</h2><ul><li>Basic Kafka read/write support for DataflowRunner (Python) (<a href=https://issues.apache.org/jira/browse/BEAM-8019>BEAM-8019</a>).</li><li>Sources and sinks for Google Healthcare APIs (Java)(<a href=https://issues.apache.org/jira/browse/BEAM-9468>BEAM-9468</a>).</li></ul><h2 id=new-features--improvements>New Features / Improvemen [...]
-(<a href=https://issues.apache.org/jira/browse/BEAM-9646>BEAM-9646</a>)</li></ul><h2 id=breaking-changes>Breaking Changes</h2><ul><li>The Python SDK now requires <code>--job_endpoint</code> to be set when using <code>--runner=PortableRunner</code> (<a href=https://issues.apache.org/jira/browse/BEAM-9860>BEAM-9860</a>). Users seeking the old default behavior should set <code>--runner=FlinkRunner</code> instead.</li></ul><h2 id=list-of-contributors>List of Contributors</h2><p>According to  [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="body__contained center no__padding content-up"><article class=post itemscope itemtype=http://schema.org/BlogPosting><div class=post-content><div class=post-info><p>blog</p><p>2021/06/09</p></div><header class=post-header><h2 itemprop="name headline">Apache Beam 2.30.0</h1><div class=post-info><span>Heejong Lee</span></div></header><div class="arrow-list header-top-margin" itemprop=articleBody><p>We are happy to pres [...]
+This release includes both improvements and new functionality.
+See the <a href=/get-started/downloads/#2300-2021-06-09>download page</a> for this release.</p><p>For more information on changes in 2.30.0, check out the <a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12319527&version=12349978">detailed release notes</a>.</p><h2 id=highlights>Highlights</h2><ul><li>Legacy Read transform (non-SDF based Read) is used by default for non-FnAPI opensource runners. Use <code>use_sdf_read</code> experimental flag to re-enable SDF bas [...]
+Anup D, Artur Khanin, Benjamin Gonzalez, Bipin Upadhyaya, Boyuan Zhang, Brian Hulette, Bulat Shakirzyanov,
+Chamikara Jayalath, Chun Yang, Daniel Kulp, Daniel Oliveira, David Cavazos, Elliotte Rusty Harold, Emily Ye,
+Eric Roshan-Eisner, Evan Galpin, Fabien Caylus, Fernando Morales, Heejong Lee, Iñigo San Jose Visiers,
+Isidro Martínez, Ismaël Mejía, Ke Wu, Kenneth Knowles, KevinGG, Kyle Weaver, Ludovic Post, MATTHEW Ouyang (LCL),
+Mackenzie Clark, Masato Nakamura, Matthias Baetens, Max, Nicholas Azar, Ning Kang, Pablo Estrada, Patrick McCaffrey,
+Quentin Sommer, Reuven Lax, Robert Bradshaw, Robert Burke, Rui Wang, Sam Rohde, Sam Whittle, Shoaib Zafar,
+Siyuan Chen, Sruthi Sree Kumar, Steve Niemitz, Sylvain Veyrié, Tomo Suzuki, Udi Meiri, Valentyn Tymofieiev,
+Vitaly Terentyev, Wenbing, Xinyu Liu, Yichi Zhang, Yifan Mai, Yueyang Qiu, Yunqing Zhou, ajo thomas, brucearctor,
+dmkozh, dpcollins-google, emily, jordan-moore, kileys, lostluck, masahitojp, roger-mike, sychen, tvalentyn,
+vachan-shetty, yoshiki.obata</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>bl [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-2.5.0/index.html b/website/generated-content/blog/beam-2.5.0/index.html
index 08b723b..b91a808 100644
--- a/website/generated-content/blog/beam-2.5.0/index.html
+++ b/website/generated-content/blog/beam-2.5.0/index.html
@@ -20,11 +20,7 @@ function endSearch(){var search=document.querySelector(".searchBar");search.clas
 function blockScroll(){$("body").toggleClass("fixedPosition");}
 function openMenu(){addPlaceholder();blockScroll();}</script><div class="body__contained center no__padding content-up"><article class=post itemscope itemtype=http://schema.org/BlogPosting><div class=post-content><div class=post-info><p>blog</p><p>2018/06/26</p></div><header class=post-header><h2 itemprop="name headline">Apache Beam 2.5.0</h1><div class=post-info><span>Alexey Romanenko [<a href=https://twitter.com/alexromdev>@alexromdev</a>]</span></div></header><div class="arrow-list he [...]
 multiple fixes and new functionalities.</p><p>For more information
-please check the detailed release notes.</p><h1 id=new-features--improvements>New Features / Improvements</h1><h2 id=go-sdk-support>Go SDK support</h2><p>The Go SDK has been officially accepted into the project, after an incubation period and community effort. Go pipelines run on Dataflow runner. More details are <a href=/documentation/sdks/go/>here</a>.</p><h2 id=parquet-support>Parquet support</h2><p>Support for Apache Parquet format was added. It uses Parquet 1.10 release which, thank [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+please check the detailed release notes.</p><h1 id=new-features--improvements>New Features / Improvements</h1><h2 id=go-sdk-support>Go SDK support</h2><p>The Go SDK has been officially accepted into the project, after an incubation period and community effort. Go pipelines run on Dataflow runner. More details are <a href=/documentation/sdks/go/>here</a>.</p><h2 id=parquet-support>Parquet support</h2><p>Support for Apache Parquet format was added. It uses Parquet 1.10 release which, thank [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-2.6.0/index.html b/website/generated-content/blog/beam-2.6.0/index.html
index 0bcec94..3beba23 100644
--- a/website/generated-content/blog/beam-2.6.0/index.html
+++ b/website/generated-content/blog/beam-2.6.0/index.html
@@ -39,11 +39,7 @@ Lukasz Cwik, Maria Garcia Herrero, Mark Liu, Matthias Feys,
 Pablo Estrada, Rafael Fernandez, Reuven Lax, Robert Bradshaw,
 Robert Burke, Robin Qiu, Ryan Williams, Scott Wegner, Rui Weng,
 Sergei Lebedev, Sindy Li, Thomas Weise, Udi Meiri,
-Valentyn Tymofieiev, XuMingmin, and Yifan Zou.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div class="post-info post-category"><p>blog [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+Valentyn Tymofieiev, XuMingmin, and Yifan Zou.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info po [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-2.7.0/index.html b/website/generated-content/blog/beam-2.7.0/index.html
index a7b3ac7..51d140b 100644
--- a/website/generated-content/blog/beam-2.7.0/index.html
+++ b/website/generated-content/blog/beam-2.7.0/index.html
@@ -37,11 +37,7 @@ Melissa Pashniak, Mikhail Gryzykhin, Mikhail Sokolov, mingmxu, Norbert
 Chen, Pablo Estrada, Prateek Chanda, Raghu Angadi, Ravi Pathak, Reuven
 Lax, Robert Bradshaw, Robert Burke, Rui Wang, Ryan Williams, Sindy Li,
 Thomas Weise, Tim Robertson, Tormod Haavi, Udi Meiri, Vaclav Plajt,
-Valentyn Tymofieiev, xiliu, XuMingmin, Yifan Zou, Yueyang Qiu.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div class="post-info post-c [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+Valentyn Tymofieiev, xiliu, XuMingmin, Yifan Zou, Yueyang Qiu.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div cla [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-2.8.0/index.html b/website/generated-content/blog/beam-2.8.0/index.html
index 7960d95..05f5eba 100644
--- a/website/generated-content/blog/beam-2.8.0/index.html
+++ b/website/generated-content/blog/beam-2.8.0/index.html
@@ -44,11 +44,7 @@ Xinyu Liu, XuMingmin, Yifan Zou, Yuan, Yueyang Qiu, aalbatross, amaliujia,
 cclauss, connelloG, daidokoro, deepyaman, djhworld, flyisland, huygaa11,
 jasonkuster, jglezt, kkpoon, mareksimunek, nielm, svXaverius, timrobertson100,
 <a href=mailto:vaclav.plajt@gmail.com>vaclav.plajt@gmail.com</a>, vitaliytv, vvarma, xiliu, xinyuiscool, xitep,
-Łukasz Gajowy.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/02/22</p></div><div  [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+Łukasz Gajowy.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/ [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-2.9.0/index.html b/website/generated-content/blog/beam-2.9.0/index.html
index f8f330c..085c10d 100644
--- a/website/generated-content/blog/beam-2.9.0/index.html
+++ b/website/generated-content/blog/beam-2.9.0/index.html
@@ -21,11 +21,7 @@ function blockScroll(){$("body").toggleClass("fixedPosition");}
 function openMenu(){addPlaceholder();blockScroll();}</script><div class="body__contained center no__padding content-up"><article class=post itemscope itemtype=http://schema.org/BlogPosting><div class=post-content><div class=post-info><p>blog</p><p>2018/12/13</p></div><header class=post-header><h2 itemprop="name headline">Apache Beam 2.9.0</h1><div class=post-info><span>Chamikara Jayalath</span></div></header><div class="arrow-list header-top-margin" itemprop=articleBody><p>We are happy t [...]
 See the <a href=/get-started/downloads/#290-2018-12-13>download page</a> for this release.</p><p>For more information on changes in 2.9.0, check out the
 <a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12319527&version=12344258">detailed release notes</a>.</p><h2 id=new-features--improvements>New Features / Improvements</h2><h3 id=dependency-upgrades>Dependency Upgrades</h3><ul><li>Update google-api-client libraries to 1.27.0.</li><li>Update byte-buddy to 1.9.3</li><li>Update Flink Runner to 1.5.5</li><li>Upgrade google-apitools to 0.5.24</li></ul><h3 id=portability>Portability</h3><ul><li>Added support for user  [...]
-to the 2.9.0 release. Thank you to all contributors!</p><p>Adam Horky, Ahmet Altay, Alan Myrvold, Alex Amato, Alexey Romanenko, Andrea Foegler, Andrew Fulton, Andrew Pilloud, Ankur Goenka, Anton Kedin, Babu, Ben Song, Bingfeng Shu, Boyuan Zhang, Brian Martin, Brian Quinlan, Chamikara Jayalath, Charles Chen, Christian Schneider, Colm O hEigeartaigh, Cory Brzycki, CraigChambersG, Daniel Oliveira, David Moravek, Dusan Rychnovsky, Etienne Chauchot, Eugene Kirpichov, Fabien Rousseau, Gleb Kan [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+to the 2.9.0 release. Thank you to all contributors!</p><p>Adam Horky, Ahmet Altay, Alan Myrvold, Alex Amato, Alexey Romanenko, Andrea Foegler, Andrew Fulton, Andrew Pilloud, Ankur Goenka, Anton Kedin, Babu, Ben Song, Bingfeng Shu, Boyuan Zhang, Brian Martin, Brian Quinlan, Chamikara Jayalath, Charles Chen, Christian Schneider, Colm O hEigeartaigh, Cory Brzycki, CraigChambersG, Daniel Oliveira, David Moravek, Dusan Rychnovsky, Etienne Chauchot, Eugene Kirpichov, Fabien Rousseau, Gleb Kan [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-a-look-back/index.html b/website/generated-content/blog/beam-a-look-back/index.html
index e6edd6f..07e549c 100644
--- a/website/generated-content/blog/beam-a-look-back/index.html
+++ b/website/generated-content/blog/beam-a-look-back/index.html
@@ -78,11 +78,7 @@ users to constantly learn new SDKs/APIs and rewrite their workloads to
 benefit from new innovation.</li><li>Benefit big-data engines by <em><strong>growing the pie for everyone</strong></em>: Making it
 easier for users to author, maintain, upgrade and migrate their big-data
 workloads will lead to significant growth in the number of production
-big-data deployments.</li></ul></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/02/22</ [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+big-data deployments.</li></ul></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blo [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-first-stable-release/index.html b/website/generated-content/blog/beam-first-stable-release/index.html
index 75973934..5d0ba62 100644
--- a/website/generated-content/blog/beam-first-stable-release/index.html
+++ b/website/generated-content/blog/beam-first-stable-release/index.html
@@ -20,11 +20,7 @@ function endSearch(){var search=document.querySelector(".searchBar");search.clas
 function blockScroll(){$("body").toggleClass("fixedPosition");}
 function openMenu(){addPlaceholder();blockScroll();}</script><div class="body__contained center no__padding content-up"><article class=post itemscope itemtype=http://schema.org/BlogPosting><div class=post-content><div class=post-info><p>blog</p><p>2017/05/17</p></div><header class=post-header><h2 itemprop="name headline">Apache Beam publishes the first stable release</h1><div class=post-info><span>Davor Bonaci [<a href=https://twitter.com/BonaciDavor>@BonaciDavor</a>]
 &
-Dan Halperin</span></div></header><div class="arrow-list header-top-margin" itemprop=articleBody><p>The Apache Beam community is pleased to <a href=https://blogs.apache.org/foundation/entry/the-apache-software-foundation-announces12>announce the availability of version 2.0.0</a>. This is the first stable release of Apache Beam, signifying a statement from the community that it intends to maintain API stability with all releases for the foreseeable future, and making Beam suitable for ent [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+Dan Halperin</span></div></header><div class="arrow-list header-top-margin" itemprop=articleBody><p>The Apache Beam community is pleased to <a href=https://blogs.apache.org/foundation/entry/the-apache-software-foundation-announces12>announce the availability of version 2.0.0</a>. This is the first stable release of Apache Beam, signifying a statement from the community that it intends to maintain API stability with all releases for the foreseeable future, and making Beam suitable for ent [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-graduates/index.html b/website/generated-content/blog/beam-graduates/index.html
index eaae4e9..cac06ab 100644
--- a/website/generated-content/blog/beam-graduates/index.html
+++ b/website/generated-content/blog/beam-graduates/index.html
@@ -58,11 +58,7 @@ towards our first release with API stability. If you’d like to try out Apache
 Beam today, check out the latest
 <a href=/get-started/downloads/>0.4.0 release</a>. We welcome
 contribution and participation from anyone through our mailing lists, issue
-tracker, pull requests, and events.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021 [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+tracker, pull requests, and events.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-has-a-logo/index.html b/website/generated-content/blog/beam-has-a-logo/index.html
index e0a65a6..3117c40 100644
--- a/website/generated-content/blog/beam-has-a-logo/index.html
+++ b/website/generated-content/blog/beam-has-a-logo/index.html
@@ -28,11 +28,7 @@ unification of bath and streaming, as beams of light, within the &lsquo;B&rsquo;
 our future website and documentation design around this logo and its coloring. We
 will also make various permutations and resolutions of this logo available in the
 coming weeks. For any questions or comments, send an email to the <code>dev@</code> email list
-for Apache Beam.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/02/22</p></div><di [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+for Apache Beam.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>202 [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-kata-release/index.html b/website/generated-content/blog/beam-kata-release/index.html
index 92196b5..0ee3106 100644
--- a/website/generated-content/blog/beam-kata-release/index.html
+++ b/website/generated-content/blog/beam-kata-release/index.html
@@ -37,11 +37,7 @@ also like to welcome you to <a href=https://github.com/apache/beam>contribute</a
 useful for people to learn more about Apache Beam, and eventually become Beam Masters!</p><br><img src=/images/blog/beam-kata/beam-kata-intellij-edu-1.png alt="Beam Kata - IntelliJ Edu" width=363 height=350>
 <img src=/images/blog/beam-kata/beam-kata-intellij-edu-2.png alt="Beam Kata - IntelliJ Edu" width=455 height=350>
 <img src=/images/blog/beam-kata/beam-kata-pycharm-edu-1.png alt="Beam Kata - PyCharm Edu" width=363 height=350>
-<img src=/images/blog/beam-kata/beam-kata-pycharm-edu-2.png alt="Beam Kata - PyCharm Edu" width=459 height=350></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+<img src=/images/blog/beam-kata/beam-kata-pycharm-edu-2.png alt="Beam Kata - PyCharm Edu" width=459 height=350></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/bl [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-katas-kotlin-release/index.html b/website/generated-content/blog/beam-katas-kotlin-release/index.html
index 268025e..9415e1c 100644
--- a/website/generated-content/blog/beam-katas-kotlin-release/index.html
+++ b/website/generated-content/blog/beam-katas-kotlin-release/index.html
@@ -30,11 +30,7 @@ of engineering teams embracing the two technologies including <a href=https://be
 If you are new to Beam or are an experienced veteran looking for a change of pace, we&rsquo;d encourage you to give
 Kotlin a try.</p><p>You can find the Kotlin and the other excellent Beam Katas below (or by just searching for &ldquo;Beam Katas&rdquo; within
 <a href="https://www.jetbrains.com/education/download/#section=idea">IntelliJ</a> or <a href="https://www.jetbrains.com/education/download/#section=pycharm-edu">PyCharm</a> through <a href=https://plugins.jetbrains.com/plugin/10081-edutools>the EduTools plugin</a>):</p><ul><li><a href=https://stepik.org/course/72488><strong>Kotlin</strong></a></li><li><a href=https://stepik.org/course/54530><strong>Java</strong></a></li><li><a href=https://stepik.org/course/54532><strong>Python</strong>< [...]
-and his support during the review process and making this effort a reality.</p><p><br></p><p><img src=/images/blog/beam-katas-kotlin-release/beam-katas-in-edutools.png alt="Access Beam Katas Kotlin through a JetBrains Educational Product" height=252 width=800></p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div> [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+and his support during the review process and making this effort a reality.</p><p><br></p><p><img src=/images/blog/beam-katas-kotlin-release/beam-katas-in-edutools.png alt="Access Beam Katas Kotlin through a JetBrains Educational Product" height=252 width=800></p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08 [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-kotlin/index.html b/website/generated-content/blog/beam-kotlin/index.html
index a38b419..34aa3e9 100644
--- a/website/generated-content/blog/beam-kotlin/index.html
+++ b/website/generated-content/blog/beam-kotlin/index.html
@@ -36,11 +36,7 @@ function openMenu(){addPlaceholder();blockScroll();}</script><div class="body__c
 <span class=o>}</span></code></pre></div></div></div><h3 id=kotlin-2>Kotlin</h3><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=n>tableRow</span><span class=o>?.</span><span class=na>let</span><span class=o>{</span>
     <span class=n>formatAndInsert</span><span class=o>(</span><span class=n>it</span><span class=o>)</span>  <span class=c1>// No need for null checks
 </span><span class=c1></span><span class=o>}</span></code></pre></div></div></div><h3 id=java-3>Java</h3><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=n>String</span> <span class=n>tableName</span> <span class=o>=</span> <span class=s>& [...]
-You can find them over here : <a href=https://github.com/apache/beam/tree/master/examples/kotlin>https://github.com/apache/beam/tree/master/examples/kotlin</a></p><p>If you are using Kotlin with Apache Beam already; we would very much appreciate if you went ahead and help us convert the existing samples from Java into Koltin.</p><p>Thank you, and we are looking forward to feedback from you!</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+You can find them over here : <a href=https://github.com/apache/beam/tree/master/examples/kotlin>https://github.com/apache/beam/tree/master/examples/kotlin</a></p><p>If you are using Kotlin with Apache Beam already; we would very much appreciate if you went ahead and help us convert the existing samples from Java into Koltin.</p><p>Thank you, and we are looking forward to feedback from you!</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-summit-aftermath/index.html b/website/generated-content/blog/beam-summit-aftermath/index.html
index 0b1bfd5..c069498 100644
--- a/website/generated-content/blog/beam-summit-aftermath/index.html
+++ b/website/generated-content/blog/beam-summit-aftermath/index.html
@@ -19,11 +19,7 @@ function addPlaceholder(){$('input:text').attr('placeholder',"What are you looki
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
 function openMenu(){addPlaceholder();blockScroll();}</script><div class="body__contained center no__padding content-up"><article class=post itemscope itemtype=http://schema.org/BlogPosting><div class=post-content><div class=post-info><p>blog</p><p>2018/10/31</p></div><header class=post-header><h2 itemprop="name headline">Inaugural edition of the Beam Summit Europe 2018 - aftermath</h1><div class=post-info><span>Matthias Baetens [<a href=https://twitter.com/matthiasbaetens>@matthiasbaeten [...]
-Google, Spotify, Talend, Sky, Amazon, Data Artisans, Datatonic, Vente Exclusive, ML6, Flumaion, Plantix, Polidea, Seznam and more!</p><br>#### Topics included using Python to run Beam on Flink:<blockquote class=twitter-tweet data-lang=nl><p lang=en dir=ltr>Don't miss <a href="https://twitter.com/snntrable?ref_src=twsrc%5Etfw">@snntrable</a>'s session at Beam Sumit London, Oct. 2, 2018, about <a href="https://twitter.com/hashtag/Python?src=hash&ref_src=twsrc%5Etfw">#Python</a> Streaming P [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+Google, Spotify, Talend, Sky, Amazon, Data Artisans, Datatonic, Vente Exclusive, ML6, Flumaion, Plantix, Polidea, Seznam and more!</p><br>#### Topics included using Python to run Beam on Flink:<blockquote class=twitter-tweet data-lang=nl><p lang=en dir=ltr>Don't miss <a href="https://twitter.com/snntrable?ref_src=twsrc%5Etfw">@snntrable</a>'s session at Beam Sumit London, Oct. 2, 2018, about <a href="https://twitter.com/hashtag/Python?src=hash&ref_src=twsrc%5Etfw">#Python</a> Streaming P [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-summit-digital-2020/index.html b/website/generated-content/blog/beam-summit-digital-2020/index.html
index 062cb56..e11e8e4 100644
--- a/website/generated-content/blog/beam-summit-digital-2020/index.html
+++ b/website/generated-content/blog/beam-summit-digital-2020/index.html
@@ -23,11 +23,7 @@ function openMenu(){addPlaceholder();blockScroll();}</script><div class="body__c
 Matthias Baetens [<a href=https://twitter.com/matthiasbaetens>@matthiasbaetens</a>]
 ,
 &
-Maximilian Michels [<a href=https://twitter.com/stadtlegende>@stadtlegende</a>]</span></div></header><div class="arrow-list header-top-margin" itemprop=articleBody><p>As some of you are already aware, the 2020 edition of the Beam Summit will be completely <strong>digital and free</strong>. Beam Summit Digital will take place from <strong>August 24th to 28th</strong>. The conference will be spread across the course of one week with a couple of hours of program each day.</p><p><img class=c [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+Maximilian Michels [<a href=https://twitter.com/stadtlegende>@stadtlegende</a>]</span></div></header><div class="arrow-list header-top-margin" itemprop=articleBody><p>As some of you are already aware, the 2020 edition of the Beam Summit will be completely <strong>digital and free</strong>. Beam Summit Digital will take place from <strong>August 24th to 28th</strong>. The conference will be spread across the course of one week with a couple of hours of program each day.</p><p><img class=c [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-summit-europe-2019/index.html b/website/generated-content/blog/beam-summit-europe-2019/index.html
index f0cc33b..bbffa51 100644
--- a/website/generated-content/blog/beam-summit-europe-2019/index.html
+++ b/website/generated-content/blog/beam-summit-europe-2019/index.html
@@ -18,11 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="body__contained center no__padding content-up"><article class=post itemscope itemtype=http://schema.org/BlogPosting><div class=post-content><div class=post-info><p>blog</p><p>2019/05/11</p></div><header class=post-header><h2 itemprop="name headline">Beam community update!</h1><div class=post-info><span>Matthias Baetens [<a href=https://twitter.com/matthiasbaetens>@matthiasbaetens</a>]</span></div></header><div class [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="body__contained center no__padding content-up"><article class=post itemscope itemtype=http://schema.org/BlogPosting><div class=post-content><div class=post-info><p>blog</p><p>2019/05/11</p></div><header class=post-header><h2 itemprop="name headline">Beam community update!</h1><div class=post-info><span>Matthias Baetens [<a href=https://twitter.com/matthiasbaetens>@matthiasbaetens</a>]</span></div></header><div class [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-summit-europe/index.html b/website/generated-content/blog/beam-summit-europe/index.html
index 8047fcd..ca6785c 100644
--- a/website/generated-content/blog/beam-summit-europe/index.html
+++ b/website/generated-content/blog/beam-summit-europe/index.html
@@ -19,11 +19,7 @@ function addPlaceholder(){$('input:text').attr('placeholder',"What are you looki
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
 function openMenu(){addPlaceholder();blockScroll();}</script><div class="body__contained center no__padding content-up"><article class=post itemscope itemtype=http://schema.org/BlogPosting><div class=post-content><div class=post-info><p>blog</p><p>2018/08/21</p></div><header class=post-header><h2 itemprop="name headline">Beam Summit Europe 2018</h1><div class=post-info><span>Matthias Baetens [<a href=https://twitter.com/matthiasbaetens>@matthiasbaetens</a>]</span></div></header><div clas [...]
-The Events & Meetups Group</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/02/22</p [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+The Events & Meetups Group</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/beam-summit-site/index.html b/website/generated-content/blog/beam-summit-site/index.html
index 7700d0c..98d13a0 100644
--- a/website/generated-content/blog/beam-summit-site/index.html
+++ b/website/generated-content/blog/beam-summit-site/index.html
@@ -18,11 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="body__contained center no__padding content-up"><article class=post itemscope itemtype=http://schema.org/BlogPosting><div class=post-content><div class=post-info><p>blog</p><p>2019/03/18</p></div><header class=post-header><h2 itemprop="name headline">Announcing Beam Summit Site</h1><div class=post-info><span>Aizhamal Nurmamat kyzy [<a href=https://twitter.com/iamaijamal>@iamaijamal</a>]</span></div></header><div clas [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="body__contained center no__padding content-up"><article class=post itemscope itemtype=http://schema.org/BlogPosting><div class=post-content><div class=post-info><p>blog</p><p>2019/03/18</p></div><header class=post-header><h2 itemprop="name headline">Announcing Beam Summit Site</h1><div class=post-info><span>Aizhamal Nurmamat kyzy [<a href=https://twitter.com/iamaijamal>@iamaijamal</a>]</span></div></header><div clas [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/capability-matrix/index.html b/website/generated-content/blog/capability-matrix/index.html
index d6add04..a1590dd 100644
--- a/website/generated-content/blog/capability-matrix/index.html
+++ b/website/generated-content/blog/capability-matrix/index.html
@@ -169,11 +169,7 @@ Tyler Akidau [<a href=https://twitter.com/takidau>@takidau</a>]</span></div></he
 <b></b></center></td><td width=25% class=cap-summary style=background-color:#fe5;border-color:#ca1><center><b>~</b>
 <b></b></center></td><td width=25% class=cap-summary style=background-color:#fe5;border-color:#ca1><center><b>~</b>
 <b></b></center></td><td width=25% class=cap-summary style=background-color:#ddd;border-color:#ca1><center><b>&#x2715;</b>
-<b></b></center></td></tr><tr class=cap-summary><td class="cap-summary color-blank cap-blank" colspan=5></td></tr></table></div></p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/b [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+<b></b></center></td></tr><tr class=cap-summary><td class="cap-summary color-blank cap-blank" colspan=5></td></tr></table></div></p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a cla [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/dataframe-api-preview-available/index.html b/website/generated-content/blog/dataframe-api-preview-available/index.html
index 8594f75..28a094c 100644
--- a/website/generated-content/blog/dataframe-api-preview-available/index.html
+++ b/website/generated-content/blog/dataframe-api-preview-available/index.html
@@ -128,11 +128,7 @@ and our <a href=https://2020.beamsummit.org/sessions/simpler-python-pipelines/>B
 presentation</a>.
 From there the best way to help is to knock out some of those not implemented
 operations. We&rsquo;re coordinating that work in
-<a href=https://issues.apache.org/jira/browse/BEAM-9547>BEAM-9547</a>.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div class="post-inf [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+<a href=https://issues.apache.org/jira/browse/BEAM-9547>BEAM-9547</a>.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog> [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/first-release/index.html b/website/generated-content/blog/first-release/index.html
index 2484590..5e357ca 100644
--- a/website/generated-content/blog/first-release/index.html
+++ b/website/generated-content/blog/first-release/index.html
@@ -37,11 +37,7 @@ anticipated, perhaps one every 1-2 months.</p><p>As always, the Beam community w
 the developer experience will be our focus for the next several months. If you
 have any comments or discover any issues, I’d like to invite you to reach out
 to us via <a href=/get-started/support/>user’s mailing list</a> or the
-<a href=https://issues.apache.org/jira/browse/BEAM/>Apache JIRA issue tracker</a>.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div cla [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+<a href=https://issues.apache.org/jira/browse/BEAM/>Apache JIRA issue tracker</a>.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-cate [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/flink-batch-runner-milestone/index.html b/website/generated-content/blog/flink-batch-runner-milestone/index.html
index e50551d..d9eb034 100644
--- a/website/generated-content/blog/flink-batch-runner-milestone/index.html
+++ b/website/generated-content/blog/flink-batch-runner-milestone/index.html
@@ -18,11 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="body__contained center no__padding content-up"><article class=post itemscope itemtype=http://schema.org/BlogPosting><div class=post-content><div class=post-info><p>blog</p><p>2016/06/13</p></div><header class=post-header><h2 itemprop="name headline">How We Added Windowing to the Apache Flink Batch Runner</h1><div class=post-info><span>Aljoscha Krettek [<a href=https://twitter.com/aljoscha>@aljoscha</a>]</span></div> [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="body__contained center no__padding content-up"><article class=post itemscope itemtype=http://schema.org/BlogPosting><div class=post-content><div class=post-info><p>blog</p><p>2016/06/13</p></div><header class=post-header><h2 itemprop="name headline">How We Added Windowing to the Apache Flink Batch Runner</h1><div class=post-info><span>Aljoscha Krettek [<a href=https://twitter.com/aljoscha>@aljoscha</a>]</span></div> [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/graduation-media-recap/index.html b/website/generated-content/blog/graduation-media-recap/index.html
index d5f372f..98f22d6 100644
--- a/website/generated-content/blog/graduation-media-recap/index.html
+++ b/website/generated-content/blog/graduation-media-recap/index.html
@@ -36,11 +36,7 @@ as a user or a contributor, as we work towards our first release with API
 stability. If you’d like to try out Apache Beam today, check out the latest
 <a href=/get-started/downloads/>0.4.0 release</a>. We welcome
 contribution and participation from anyone through our mailing lists, issue
-tracker, pull requests, and events.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021 [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+tracker, pull requests, and events.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/gsoc-19/index.html b/website/generated-content/blog/gsoc-19/index.html
index 11b16cf..c097a4a 100644
--- a/website/generated-content/blog/gsoc-19/index.html
+++ b/website/generated-content/blog/gsoc-19/index.html
@@ -36,11 +36,7 @@ I also worked on small issues related to testing.</p><p>This period was marked b
 While working on my project, I was using a pipeline that uses PubSub as a source and BigQuery as a sink to validate my changes. My mentor suggested we add them to the Beam test suite as it would be the ultimate test for BigQueryIO. I also worked on adding this test to Beam.</p><p>You can find the list of PRs I worked on <a href="https://github.com/apache/beam/pulls?utf8=%E2%9C%93&q=is%3Apr+author%3Attanay">here</a>.</p><h2 id=conclusion>Conclusion</h2><p>GSoC has been a lesson in discipl [...]
 I had never worked remotely, so this was a new experience. Although I struggled with it initially, I appreciate the flexibility that it comes with.
 I also had a lot of fun learning about Apache Beam’s internals, and other tools in the same ecosystem.
-This was also the first time I had written code with a test-first approach.</p><p>I thank my mentor - Pablo Estrada, Apache Beam, The Apache Software Foundation and Google Summer of Code for this opportunity. I am also grateful to my mentor for helping me with everything I needed and more, and the Apache Beam community for being supportive and encouraging.</p><p>With the right effort, perseverance, conviction, and a plan, anything is possible. Anything.</p></div></div><div class=blog-con [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+This was also the first time I had written code with a test-first approach.</p><p>I thank my mentor - Pablo Estrada, Apache Beam, The Apache Software Foundation and Google Summer of Code for this opportunity. I am also grateful to my mentor for helping me with everything I needed and more, and the Apache Beam community for being supportive and encouraging.</p><p>With the right effort, perseverance, conviction, and a plan, anything is possible. Anything.</p></div></div><div class=blog-con [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/index.html b/website/generated-content/blog/index.html
index e0a6114..856a137 100644
--- a/website/generated-content/blog/index.html
+++ b/website/generated-content/blog/index.html
@@ -39,7 +39,7 @@ capability</button>
 <button xx class=category-button id=category-sdk onclick=applyFilter(this)>
 sdk</button>
 <button xx class=category-button id=category-website onclick=applyFilter(this)>
-website</button></div><div class=posts-list><a class="post-card tf-filter-item" href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p><div class=post-summary>Performing new releases is a core responsibility of any software project. It is even more important in the culture of Apache projects. Releases are the main flow of new cod [...]
+website</button></div><div class=posts-list><a class="post-card tf-filter-item" href=/blog/beam-2.30.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/09</p></div><p class=post-title>Apache Beam 2.30.0</p><p class=post-info>Heejong Lee</p><div class=post-summary>We are happy to present the new 2.30.0 release of Beam. This release includes both improvements and new functionality. See the download page for this release.</div></a><a class="post-card tf-filte [...]
                    </p><p>2021/01/15</p></div><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
 Ilya Kozyrev &
 Alex Kosolapov</p><div class=post-summary>In this blog post we present an example that creates a pipeline to read data from a single topic or multiple topics from Apache Kafka and write data into a topic in Google Pub/Sub.</div></a><a class="post-card tf-filter-item" href=/blog/beam-2.27.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/01/07</p></div><p class=post-title>Apache Beam 2.27.0</p><p class=post-info>Pablo Estrada</p><div class=post-summary>We are [...]
diff --git a/website/generated-content/blog/index.xml b/website/generated-content/blog/index.xml
index e750abd..6d60094 100644
--- a/website/generated-content/blog/index.xml
+++ b/website/generated-content/blog/index.xml
@@ -1,4 +1,66 @@
-<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Apache Beam – Blogs</title><link>/blog/</link><description>Recent content in Blogs on Apache Beam</description><generator>Hugo -- gohugo.io</generator><lastBuildDate>Tue, 08 Jun 2021 00:00:01 -0800</lastBuildDate><atom:link href="/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Blog: How to validate a Beam Release</title><link>/blog/validate-beam-release/</link><pubDate>Tue, 08 Jun 2021 00:00: [...]
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Apache Beam – Blogs</title><link>/blog/</link><description>Recent content in Blogs on Apache Beam</description><generator>Hugo -- gohugo.io</generator><lastBuildDate>Wed, 09 Jun 2021 09:00:00 -0700</lastBuildDate><atom:link href="/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Blog: Apache Beam 2.30.0</title><link>/blog/beam-2.30.0/</link><pubDate>Wed, 09 Jun 2021 09:00:00 -0700</pubDate><gui [...]
+&lt;!--
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+&lt;p>We are happy to present the new 2.30.0 release of Beam.
+This release includes both improvements and new functionality.
+See the &lt;a href="/get-started/downloads/#2300-2021-06-09">download page&lt;/a> for this release.&lt;/p>
+&lt;p>For more information on changes in 2.30.0, check out the &lt;a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12319527&amp;amp;version=12349978">detailed release notes&lt;/a>.&lt;/p>
+&lt;h2 id="highlights">Highlights&lt;/h2>
+&lt;ul>
+&lt;li>Legacy Read transform (non-SDF based Read) is used by default for non-FnAPI opensource runners. Use &lt;code>use_sdf_read&lt;/code> experimental flag to re-enable SDF based Read transforms (&lt;a href="https://issues.apache.org/jira/browse/BEAM-10670">BEAM-10670&lt;/a>)&lt;/li>
+&lt;li>Upgraded vendored gRPC dependency to 1.36.0 (&lt;a href="https://issues.apache.org/jira/browse/BEAM-11227">BEAM-11227&lt;/a>)&lt;/li>
+&lt;/ul>
+&lt;h3 id="ios">I/Os&lt;/h3>
+&lt;ul>
+&lt;li>Fixed the issue that WriteToBigQuery with batch file loads does not respect schema update options when there are multiple load jobs (&lt;a href="https://issues.apache.org/jira/browse/BEAM-11277">BEAM-11277&lt;/a>)&lt;/li>
+&lt;li>Fixed the issue that the job didn&amp;rsquo;t properly retry since BigQuery sink swallows HttpErrors when performing streaming inserts (&lt;a href="https://issues.apache.org/jira/browse/BEAM-12362">BEAM-12362&lt;/a>)&lt;/li>
+&lt;/ul>
+&lt;h3 id="new-features--improvements">New Features / Improvements&lt;/h3>
+&lt;ul>
+&lt;li>Added capability to declare resource hints in Java and Python SDKs (&lt;a href="https://issues.apache.org/jira/browse/BEAM-2085">BEAM-2085&lt;/a>)&lt;/li>
+&lt;li>Added Spanner IO Performance tests for read and write in Python SDK (&lt;a href="https://issues.apache.org/jira/browse/BEAM-10029">BEAM-10029&lt;/a>)&lt;/li>
+&lt;li>Added support for accessing GCP PubSub Message ordering keys, message IDs and message publish timestamp in Python SDK (&lt;a href="https://issues.apache.org/jira/browse/BEAM-7819">BEAM-7819&lt;/a>)&lt;/li>
+&lt;li>DataFrame API: Added support for collecting DataFrame objects in interactive Beam (&lt;a href="https://issues.apache.org/jira/browse/BEAM-11855">BEAM-11855&lt;/a>)&lt;/li>
+&lt;li>DataFrame API: Added &lt;a href="https://github.com/apache/beam/tree/master/sdks/python/apache_beam/examples/dataframe">apache_beam.examples.dataframe&lt;/a> module (&lt;a href="https://issues.apache.org/jira/browse/BEAM-12024">BEAM-12024&lt;/a>)&lt;/li>
+&lt;li>Upgraded the GCP Libraries BOM version to 20.0.0 (&lt;a href="https://issues.apache.org/jira/browse/BEAM-11205">BEAM-11205&lt;/a>). For Google Cloud client library versions set by this BOM, see &lt;a href="https://storage.googleapis.com/cloud-opensource-java-dashboard/com.google.cloud/libraries-bom/20.0.0/artifact_details.html">this table&lt;/a>&lt;/li>
+&lt;li>Added &lt;code>sdkContainerImage&lt;/code> flag to (eventually) replace &lt;code>workerHarnessContainerImage&lt;/code> (&lt;a href="https://issues.apache.org/jira/browse/BEAM-12212">BEAM-12212&lt;/a>)&lt;/li>
+&lt;li>Added support for Dataflow update when schemas are used (&lt;a href="https://issues.apache.org/jira/browse/BEAM-12198">BEAM-12198&lt;/a>)&lt;/li>
+&lt;li>Fixed the issue that &lt;code>ZipFiles.zipDirectory&lt;/code> leaks native JVM memory (&lt;a href="https://issues.apache.org/jira/browse/BEAM-12220">BEAM-12220&lt;/a>)&lt;/li>
+&lt;li>Fixed the issue that &lt;code>Reshuffle.withNumBuckets&lt;/code> creates &lt;code>(N*2)-1&lt;/code> buckets (&lt;a href="https://issues.apache.org/jira/browse/BEAM-12361">BEAM-12361&lt;/a>)&lt;/li>
+&lt;/ul>
+&lt;h3 id="breaking-changes">Breaking Changes&lt;/h3>
+&lt;ul>
+&lt;li>Drop support for Flink 1.8 and 1.9 (&lt;a href="https://issues.apache.org/jira/browse/BEAM-11948">BEAM-11948&lt;/a>)&lt;/li>
+&lt;li>MongoDbIO: Read.withFilter() and Read.withProjection() are removed since they are deprecated since Beam 2.12.0 (&lt;a href="https://issues.apache.org/jira/browse/BEAM-12217">BEAM-12217&lt;/a>)&lt;/li>
+&lt;li>RedisIO.readAll() was removed since it was deprecated since Beam 2.13.0. Please use RedisIO.readKeyPatterns() for the equivalent functionality (&lt;a href="https://issues.apache.org/jira/browse/BEAM-12214">BEAM-12214&lt;/a>)&lt;/li>
+&lt;li>MqttIO.create() with clientId constructor removed because it was deprecated since Beam 2.13.0 (&lt;a href="https://issues.apache.org/jira/browse/BEAM-12216">BEAM-12216&lt;/a>)&lt;/li>
+&lt;/ul>
+&lt;h3 id="known-issues">Known Issues&lt;/h3>
+&lt;ul>
+&lt;li>See a full list of open &lt;a href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20BEAM%20AND%20affectedVersion%20%3D%202.30.0%20ORDER%20BY%20priority%20DESC%2C%20updated%20DESC">issues that affect&lt;/a> this version.&lt;/li>
+&lt;/ul>
+&lt;h2 id="list-of-contributors">List of Contributors&lt;/h2>
+&lt;p>According to &lt;code>git shortlog&lt;/code>, the following people contributed to the 2.30.0 release. Thank you to all contributors!&lt;/p>
+&lt;p>Ahmet Altay, Alex Amato, Alexey Romanenko, Anant Damle, Andreas Bergmeier, Andrew Pilloud, Ankur Goenka,
+Anup D, Artur Khanin, Benjamin Gonzalez, Bipin Upadhyaya, Boyuan Zhang, Brian Hulette, Bulat Shakirzyanov,
+Chamikara Jayalath, Chun Yang, Daniel Kulp, Daniel Oliveira, David Cavazos, Elliotte Rusty Harold, Emily Ye,
+Eric Roshan-Eisner, Evan Galpin, Fabien Caylus, Fernando Morales, Heejong Lee, Iñigo San Jose Visiers,
+Isidro Martínez, Ismaël Mejía, Ke Wu, Kenneth Knowles, KevinGG, Kyle Weaver, Ludovic Post, MATTHEW Ouyang (LCL),
+Mackenzie Clark, Masato Nakamura, Matthias Baetens, Max, Nicholas Azar, Ning Kang, Pablo Estrada, Patrick McCaffrey,
+Quentin Sommer, Reuven Lax, Robert Bradshaw, Robert Burke, Rui Wang, Sam Rohde, Sam Whittle, Shoaib Zafar,
+Siyuan Chen, Sruthi Sree Kumar, Steve Niemitz, Sylvain Veyrié, Tomo Suzuki, Udi Meiri, Valentyn Tymofieiev,
+Vitaly Terentyev, Wenbing, Xinyu Liu, Yichi Zhang, Yifan Mai, Yueyang Qiu, Yunqing Zhou, ajo thomas, brucearctor,
+dmkozh, dpcollins-google, emily, jordan-moore, kileys, lostluck, masahitojp, roger-mike, sychen, tvalentyn,
+vachan-shetty, yoshiki.obata&lt;/p></description></item><item><title>Blog: How to validate a Beam Release</title><link>/blog/validate-beam-release/</link><pubDate>Tue, 08 Jun 2021 00:00:01 -0800</pubDate><guid>/blog/validate-beam-release/</guid><description>
 &lt;!--
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
@@ -3509,7 +3571,7 @@ limitations under the License.
 &lt;/td>
 &lt;td>Local&lt;br>(Using the &lt;code>file://&lt;/code> URI)
 &lt;/td>
-&lt;td>&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/TextIO.html">TextIO&lt;/a>
+&lt;td>&lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/TextIO.html">TextIO&lt;/a>
 &lt;/td>
 &lt;td>&lt;a href="https://spark.apache.org/docs/latest/api/java/org/apache/spark/streaming/StreamingContext.html#textFileStream-java.lang.String-">textFileStream&lt;/a>&lt;br>(Spark treats most Unix systems as HDFS-compatible, but the location should be accessible from all nodes)
 &lt;/td>
@@ -3517,7 +3579,7 @@ limitations under the License.
 &lt;tr>
 &lt;td>HDFS&lt;br>(Using the &lt;code>hdfs://&lt;/code> URI)
 &lt;/td>
-&lt;td>&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/FileIO.html">FileIO&lt;/a> + &lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/hdfs/HadoopFileSystemOptions.html">HadoopFileSystemOptions&lt;/a>
+&lt;td>&lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/FileIO.html">FileIO&lt;/a> + &lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/hdfs/HadoopFileSystemOptions.html">HadoopFileSystemOptions&lt;/a>
 &lt;/td>
 &lt;td>&lt;a href="https://spark.apache.org/docs/latest/api/java/org/apache/spark/streaming/util/HdfsUtils.html">HdfsUtils&lt;/a>
 &lt;/td>
@@ -3527,7 +3589,7 @@ limitations under the License.
 &lt;/td>
 &lt;td>Cloud Storage&lt;br>(Using the &lt;code>gs://&lt;/code> URI)
 &lt;/td>
-&lt;td>&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/FileIO.html">FileIO&lt;/a> + &lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/extensions/gcp/options/GcsOptions.html">GcsOptions&lt;/a>
+&lt;td>&lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/FileIO.html">FileIO&lt;/a> + &lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/extensions/gcp/options/GcsOptions.html">GcsOptions&lt;/a>
 &lt;/td>
 &lt;td rowspan="2" >&lt;a href="https://spark.apache.org/docs/latest/api/java/org/apache/spark/SparkContext.html#hadoopConfiguration--">hadoopConfiguration&lt;/a>
 and &lt;a href="https://spark.apache.org/docs/latest/api/java/org/apache/spark/streaming/StreamingContext.html#textFileStream-java.lang.String-">textFileStream&lt;/a>
@@ -3536,7 +3598,7 @@ and &lt;a href="https://spark.apache.org/docs/latest/api/java/org/apache/spark/s
 &lt;tr>
 &lt;td>S3&lt;br>(Using the &lt;code>s3://&lt;/code> URI)
 &lt;/td>
-&lt;td>&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/FileIO.html">FileIO&lt;/a> + &lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/aws/options/S3Options.html">S3Options&lt;/a>
+&lt;td>&lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/FileIO.html">FileIO&lt;/a> + &lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/aws/options/S3Options.html">S3Options&lt;/a>
 &lt;/td>
 &lt;/tr>
 &lt;tr>
@@ -3544,7 +3606,7 @@ and &lt;a href="https://spark.apache.org/docs/latest/api/java/org/apache/spark/s
 &lt;/td>
 &lt;td>Kafka
 &lt;/td>
-&lt;td>&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/kafka/KafkaIO.html">KafkaIO&lt;/a>
+&lt;td>&lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/kafka/KafkaIO.html">KafkaIO&lt;/a>
 &lt;/td>
 &lt;td>&lt;a href="https://spark.apache.org/docs/latest/streaming-kafka-0-10-integration.html">spark-streaming-kafka&lt;/a>
 &lt;/td>
@@ -3552,7 +3614,7 @@ and &lt;a href="https://spark.apache.org/docs/latest/api/java/org/apache/spark/s
 &lt;tr>
 &lt;td>Kinesis
 &lt;/td>
-&lt;td>&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/kinesis/KinesisIO.html">KinesisIO&lt;/a>
+&lt;td>&lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/kinesis/KinesisIO.html">KinesisIO&lt;/a>
 &lt;/td>
 &lt;td>&lt;a href="https://spark.apache.org/docs/latest/streaming-kinesis-integration.html">spark-streaming-kinesis&lt;/a>
 &lt;/td>
@@ -3560,7 +3622,7 @@ and &lt;a href="https://spark.apache.org/docs/latest/api/java/org/apache/spark/s
 &lt;tr>
 &lt;td>Cloud Pub/Sub
 &lt;/td>
-&lt;td>&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/gcp/pubsub/PubsubIO.html">PubsubIO&lt;/a>
+&lt;td>&lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/gcp/pubsub/PubsubIO.html">PubsubIO&lt;/a>
 &lt;/td>
 &lt;td>&lt;a href="https://github.com/apache/bahir/tree/master/streaming-pubsub">spark-streaming-pubsub&lt;/a> from &lt;a href="https://bahir.apache.org">Apache Bahir&lt;/a>
 &lt;/td>
@@ -3596,7 +3658,7 @@ and &lt;a href="https://spark.apache.org/docs/latest/api/java/org/apache/spark/s
 &lt;/td>
 &lt;td>Local
 &lt;/td>
-&lt;td>&lt;a href="https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.io.textio.html">io.textio&lt;/a>
+&lt;td>&lt;a href="https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.io.textio.html">io.textio&lt;/a>
 &lt;/td>
 &lt;td>&lt;a href="https://spark.apache.org/docs/latest/api/python/pyspark.streaming.html#pyspark.streaming.StreamingContext.textFileStream">textFileStream&lt;/a>
 &lt;/td>
@@ -3604,7 +3666,7 @@ and &lt;a href="https://spark.apache.org/docs/latest/api/java/org/apache/spark/s
 &lt;tr>
 &lt;td>HDFS
 &lt;/td>
-&lt;td>&lt;a href="https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.io.hadoopfilesystem.html">io.hadoopfilesystem&lt;/a>
+&lt;td>&lt;a href="https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.io.hadoopfilesystem.html">io.hadoopfilesystem&lt;/a>
 &lt;/td>
 &lt;td>&lt;a href="https://spark.apache.org/docs/latest/api/java/org/apache/spark/SparkContext.html#hadoopConfiguration--">hadoopConfiguration&lt;/a> (Access through &lt;code>sc._jsc&lt;/code> with Py4J)
 and &lt;a href="https://spark.apache.org/docs/latest/api/python/pyspark.streaming.html#pyspark.streaming.StreamingContext.textFileStream">textFileStream&lt;/a>
@@ -3615,7 +3677,7 @@ and &lt;a href="https://spark.apache.org/docs/latest/api/python/pyspark.streamin
 &lt;/td>
 &lt;td>Google Cloud Storage
 &lt;/td>
-&lt;td>&lt;a href="https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.io.gcp.gcsio.html">io.gcp.gcsio&lt;/a>
+&lt;td>&lt;a href="https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.io.gcp.gcsio.html">io.gcp.gcsio&lt;/a>
 &lt;/td>
 &lt;td rowspan="2" >&lt;a href="https://spark.apache.org/docs/latest/api/python/pyspark.streaming.html#pyspark.streaming.StreamingContext.textFileStream">textFileStream&lt;/a>
 &lt;/td>
@@ -3647,7 +3709,7 @@ and &lt;a href="https://spark.apache.org/docs/latest/api/python/pyspark.streamin
 &lt;tr>
 &lt;td>Cloud Pub/Sub
 &lt;/td>
-&lt;td>&lt;a href="https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.io.gcp.pubsub.html">io.gcp.pubsub&lt;/a>
+&lt;td>&lt;a href="https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.io.gcp.pubsub.html">io.gcp.pubsub&lt;/a>
 &lt;/td>
 &lt;td>N/A
 &lt;/td>
@@ -4543,514 +4605,4 @@ please check the &lt;a href="/documentation/runners/capability-matrix/">capabili
 your preferred Beam backend(s).&lt;/p>
 &lt;p>And please do join the Beam community at
 &lt;a href="/get-started/support">user@beam.apache.org&lt;/a> and follow
-&lt;a href="https://twitter.com/ApacheBeam">@ApacheBeam&lt;/a> on Twitter.&lt;/p></description></item><item><title>Blog: Powerful and modular IO connectors with Splittable DoFn in Apache Beam</title><link>/blog/splittable-do-fn/</link><pubDate>Wed, 16 Aug 2017 00:00:01 -0800</pubDate><guid>/blog/splittable-do-fn/</guid><description>
-&lt;!--
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-http://www.apache.org/licenses/LICENSE-2.0
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
--->
-&lt;p>One of the most important parts of the Apache Beam ecosystem is its quickly
-growing set of connectors that allow Beam pipelines to read and write data to
-various data storage systems (&amp;ldquo;IOs&amp;rdquo;). Currently, Beam ships &lt;a href="/documentation/io/built-in/">over 20 IO
-connectors&lt;/a> with many more in
-active development. As user demands for IO connectors grew, our work on
-improving the related Beam APIs (in particular, the Source API) produced an
-unexpected result: a generalization of Beam&amp;rsquo;s most basic primitive, &lt;code>DoFn&lt;/code>.&lt;/p>
-&lt;h2 id="connectors-as-mini-pipelines">Connectors as mini-pipelines&lt;/h2>
-&lt;p>One of the main reasons for this vibrant IO connector ecosystem is that
-developing a basic IO is relatively straightforward: many connector
-implementations are simply mini-pipelines (composite &lt;code>PTransform&lt;/code>s) made of the
-basic Beam &lt;code>ParDo&lt;/code> and &lt;code>GroupByKey&lt;/code> primitives. For example,
-&lt;code>ElasticsearchIO.write()&lt;/code>
-&lt;a href="https://github.com/apache/beam/blob/f7e8f886c91ea9d0b51e00331eeb4484e2f6e000/sdks/java/io/elasticsearch/src/main/java/org/apache/beam/sdk/io/elasticsearch/ElasticsearchIO.java#L783">expands&lt;/a>
-into a single &lt;code>ParDo&lt;/code> with some batching for performance; &lt;code>JdbcIO.read()&lt;/code>
-&lt;a href="https://github.com/apache/beam/blob/f7e8f886c91ea9d0b51e00331eeb4484e2f6e000/sdks/java/io/jdbc/src/main/java/org/apache/beam/sdk/io/jdbc/JdbcIO.java#L329">expands&lt;/a>
-into &lt;code>Create.of(query)&lt;/code>, a reshuffle to &lt;a href="https://cloud.google.com/dataflow/service/dataflow-service-desc#preventing-fusion">prevent
-fusion&lt;/a>,
-and &lt;code>ParDo(execute sub-query)&lt;/code>. Some IOs
-&lt;a href="https://github.com/apache/beam/blob/8503adbbc3a590cd0dc2939f6a45d335682a9442/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery/BigQueryIO.java#L1139">construct&lt;/a>
-considerably more complicated pipelines.&lt;/p>
-&lt;p>&lt;img class="center-block"
-src="/images/blog/splittable-do-fn/jdbcio-expansion.png"
-alt="Expansion of the JdbcIO.read() composite transform"
-width="600">&lt;/p>
-&lt;p>This &amp;ldquo;mini-pipeline&amp;rdquo; approach is flexible, modular, and generalizes to data
-sources that read from a dynamically computed &lt;code>PCollection&lt;/code> of locations, such
-as
-&lt;a href="https://github.com/apache/beam/blob/f7e8f886c91ea9d0b51e00331eeb4484e2f6e000/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/spanner/SpannerIO.java#L222">&lt;code>SpannerIO.readAll()&lt;/code>&lt;/a>
-which reads the results of a &lt;code>PCollection&lt;/code> of queries from Cloud Spanner,
-compared to
-&lt;a href="https://github.com/apache/beam/blob/f7e8f886c91ea9d0b51e00331eeb4484e2f6e000/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/spanner/SpannerIO.java#L318">&lt;code>SpannerIO.read()&lt;/code>&lt;/a>
-which executes a single query. We believe such dynamic data sources are a very
-useful capability, often overlooked by other data processing frameworks.&lt;/p>
-&lt;h2 id="when-pardo-and-groupbykey-are-not-enough">When ParDo and GroupByKey are not enough&lt;/h2>
-&lt;p>Despite the flexibility of &lt;code>ParDo&lt;/code>, &lt;code>GroupByKey&lt;/code> and their derivatives, in some
-cases building an efficient IO connector requires extra capabilities.&lt;/p>
-&lt;p>For example, imagine reading files using the sequence &lt;code>ParDo(filepattern → expand into files)&lt;/code>, &lt;code>ParDo(filename → read records)&lt;/code>, or reading a Kafka topic
-using &lt;code>ParDo(topic → list partitions)&lt;/code>, &lt;code>ParDo(topic, partition → read records)&lt;/code>. This approach has two big issues:&lt;/p>
-&lt;ul>
-&lt;li>
-&lt;p>In the file example, some files might be much larger than others, so the
-second &lt;code>ParDo&lt;/code> may have very long individual &lt;code>@ProcessElement&lt;/code> calls. As a
-result, the pipeline can suffer from poor performance due to stragglers.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>In the Kafka example, implementing the second &lt;code>ParDo&lt;/code> is &lt;em>simply impossible&lt;/em>
-with a regular &lt;code>DoFn&lt;/code>, because it would need to output an infinite number of
-records per each input element &lt;code>topic, partition&lt;/code> &lt;em>(&lt;a href="/blog/2017/02/13/stateful-processing.html">stateful processing&lt;/a> comes close, but it
-has other limitations that make it insufficient for this task&lt;/em>).&lt;/p>
-&lt;/li>
-&lt;/ul>
-&lt;h2 id="beam-source-api">Beam Source API&lt;/h2>
-&lt;p>Apache Beam historically provides a Source API
-(&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/BoundedSource.html">BoundedSource&lt;/a>
-and
-&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/UnboundedSource.html">UnboundedSource&lt;/a>) which does
-not have these limitations and allows development of efficient data sources for
-batch and streaming systems. Pipelines use this API via the
-&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/Read.html">&lt;code>Read.from(Source)&lt;/code>&lt;/a> built-in &lt;code>PTransform&lt;/code>.&lt;/p>
-&lt;p>The Source API is largely similar to that of most other data processing
-frameworks, and allows the system to read data in parallel using multiple
-workers, as well as checkpoint and resume reading from an unbounded data source.
-Additionally, the Beam
-&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/BoundedSource.html">&lt;code>BoundedSource&lt;/code>&lt;/a>
-API provides advanced features such as progress reporting and &lt;a href="/blog/2016/05/18/splitAtFraction-method.html">dynamic
-rebalancing&lt;/a>
-(which together enable autoscaling), and
-&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/UnboundedSource.html">&lt;code>UnboundedSource&lt;/code>&lt;/a> supports
-reporting the source&amp;rsquo;s watermark and backlog &lt;em>(until SDF, we believed that
-&amp;ldquo;batch&amp;rdquo; and &amp;ldquo;streaming&amp;rdquo; data sources are fundamentally different and thus
-require fundamentally different APIs)&lt;/em>.&lt;/p>
-&lt;p>Unfortunately, these features come at a price. Coding against the Source API
-involves a lot of boilerplate and is error-prone, and it does not compose well
-with the rest of the Beam model because a &lt;code>Source&lt;/code> can appear only at the root
-of a pipeline. For example:&lt;/p>
-&lt;ul>
-&lt;li>
-&lt;p>Using the Source API, it is not possible to read a &lt;code>PCollection&lt;/code> of
-filepatterns.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>A &lt;code>Source&lt;/code> can not read a side input, or wait on another pipeline step to
-produce the data.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>A &lt;code>Source&lt;/code> can not emit an additional output (for example, records that failed to
-parse) and so on.&lt;/p>
-&lt;/li>
-&lt;/ul>
-&lt;p>The Source API is not composable even with itself. For example, suppose Alice
-implements an unbounded &lt;code>Source&lt;/code> that watches a directory for new matching
-files, and Bob implements an unbounded &lt;code>Source&lt;/code> that tails a file. The Source
-API does not let them simply chain the sources together and obtain a &lt;code>Source&lt;/code>
-that returns new records in new log files in a directory (a very common user
-request). Instead, such a source would have to be developed mostly from
-scratch, and our experience shows that a full-featured monolithic
-implementation of such a &lt;code>Source&lt;/code> is incredibly difficult and error-prone.&lt;/p>
-&lt;p>Another class of issues with the &lt;code>Source&lt;/code> API comes from its strict
-bounded/unbounded dichotomy:&lt;/p>
-&lt;ul>
-&lt;li>
-&lt;p>It is difficult or impossible to reuse code between seemingly very similar
-bounded and unbounded sources, for example, the &lt;code>BoundedSource&lt;/code> that generates
-a sequence &lt;code>[a, b)&lt;/code> and the &lt;code>UnboundedSource&lt;/code> that generates a sequence &lt;code>[a, inf)&lt;/code> &lt;a href="https://github.com/apache/beam/blob/master/sdks/java/core/src/main/java/org/apache/beam/sdk/io/CountingSource.java">don&amp;rsquo;t share any
-code&lt;/a>
-in the Beam Java SDK.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>It is not clear how to classify the ingestion of a very large and
-continuously growing dataset. Ingesting its &amp;ldquo;already available&amp;rdquo; part seems to
-require a &lt;code>BoundedSource&lt;/code>: the runner could benefit from knowing its size, and
-could perform dynamic rebalancing. However, ingesting the continuously arriving
-new data seems to require an &lt;code>UnboundedSource&lt;/code> for providing watermarks. From
-this angle, the &lt;code>Source&lt;/code> API has &lt;a href="https://www.oreilly.com/ideas/the-world-beyond-batch-streaming-101">the same issues as Lambda
-Architecture&lt;/a>.&lt;/p>
-&lt;/li>
-&lt;/ul>
-&lt;p>About two years ago we began thinking about how to address the limitations of
-the Source API, and ended up, surprisingly, addressing the limitations of
-&lt;code>DoFn&lt;/code> instead.&lt;/p>
-&lt;h2 id="enter-splittable-dofn">Enter Splittable DoFn&lt;/h2>
-&lt;p>&lt;a href="https://s.apache.org/splittable-do-fn">Splittable DoFn&lt;/a> (SDF) is a
-generalization of &lt;code>DoFn&lt;/code> that gives it the core capabilities of &lt;code>Source&lt;/code> while
-retaining &lt;code>DoFn&lt;/code>'s syntax, flexibility, modularity, and ease of coding. As a
-result, it becomes possible to develop more powerful IO connectors than before,
-with shorter, simpler, more reusable code.&lt;/p>
-&lt;p>Note that, unlike &lt;code>Source&lt;/code>, SDF &lt;em>does not&lt;/em> have distinct bounded/unbounded APIs,
-just as regular &lt;code>DoFn&lt;/code>s don&amp;rsquo;t: there is only one API, which covers both of these
-use cases and anything in between. Thus, SDF closes the final gap in the unified
-batch/streaming programming model of Apache Beam.&lt;/p>
-&lt;p>When reading the explanation of SDF below, keep in mind the running example of a
-&lt;code>DoFn&lt;/code> that takes a filename as input and outputs the records in that file.
-People familiar with the &lt;code>Source&lt;/code> API may find it useful to think of SDF as a
-way to read a &lt;code>PCollection&lt;/code> of sources, treating the source itself as just
-another piece of data in the pipeline &lt;em>(this, in fact, was one of the early
-design iterations among the work that led to creation of SDF)&lt;/em>.&lt;/p>
-&lt;p>The two aspects where &lt;code>Source&lt;/code> has an advantage over a regular &lt;code>DoFn&lt;/code> are:&lt;/p>
-&lt;ul>
-&lt;li>
-&lt;p>&lt;strong>Splittability:&lt;/strong> applying a &lt;code>DoFn&lt;/code> to a single element is &lt;em>monolithic&lt;/em>, but
-reading from a &lt;code>Source&lt;/code> is &lt;em>non-monolithic&lt;/em>. The whole &lt;code>Source&lt;/code> doesn&amp;rsquo;t have to
-be read at once; rather, it is read in parts, called &lt;em>bundles&lt;/em>. For example, a
-large file is usually read in several bundles, each reading some sub-range of
-offsets within the file. Likewise, a Kafka topic (which, of course, can never
-be read &amp;ldquo;fully&amp;rdquo;) is read over an infinite number of bundles, each reading some
-finite number of elements.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>&lt;strong>Interaction with the runner:&lt;/strong> runners apply a &lt;code>DoFn&lt;/code> to a single element as
-a &amp;ldquo;black box&amp;rdquo;, but interact quite richly with &lt;code>Source&lt;/code>. &lt;code>Source&lt;/code> provides the
-runner with information such as its estimated size (or its generalization,
-&amp;ldquo;backlog&amp;rdquo;), progress through reading the bundle, watermarks etc. The runner
-uses this information to tune the execution and control the breakdown of the
-&lt;code>Source&lt;/code> into bundles. For example, a slowly progressing large bundle of a file
-may be &lt;a href="https://cloud.google.com/blog/big-data/2016/05/no-shard-left-behind-dynamic-work-rebalancing-in-google-cloud-dataflow">dynamically
-split&lt;/a>
-by a batch-focused runner before it becomes a straggler, and a latency-focused
-streaming runner may control how many elements it reads from a source in each
-bundle to optimize for latency vs. per-bundle overhead.&lt;/p>
-&lt;/li>
-&lt;/ul>
-&lt;h3 id="non-monolithic-element-processing-with-restrictions">Non-monolithic element processing with restrictions&lt;/h3>
-&lt;p>Splittable &lt;code>DoFn&lt;/code> supports &lt;code>Source&lt;/code>-like features by allowing the processing of
-a single element to be non-monolithic.&lt;/p>
-&lt;p>The processing of one element by an SDF is decomposed into a (potentially
-infinite) number of &lt;em>restrictions&lt;/em>, each describing some part of the work to be
-done for the whole element. The input to an SDF&amp;rsquo;s &lt;code>@ProcessElement&lt;/code> call is a
-pair of an element and a restriction (compared to a regular &lt;code>DoFn&lt;/code>, which takes
-just the element).&lt;/p>
-&lt;p>Processing of every element starts by creating an &lt;em>initial restriction&lt;/em> that
-describes the entire work, and the initial restriction is then split further
-into sub-restrictions which must logically add up to the original. For example,
-for a splittable &lt;code>DoFn&lt;/code> called &lt;code>ReadFn&lt;/code> that takes a filename and outputs
-records in the file, the restriction may be a pair of starting and ending byte
-offset, and &lt;code>ReadFn&lt;/code> may interpret it as &lt;em>read records whose starting offsets
-are in the given range&lt;/em>.&lt;/p>
-&lt;p>&lt;img class="center-block"
-src="/images/blog/splittable-do-fn/restrictions.png"
-alt="Specifying parts of work for an element using restrictions"
-width="600">&lt;/p>
-&lt;p>The idea of restrictions provides non-monolithic execution - the first
-ingredient for parity with &lt;code>Source&lt;/code>. The other ingredient is &lt;em>interaction with
-the runner&lt;/em>: the runner has access to the restriction of each active
-&lt;code>@ProcessElement&lt;/code> call of an SDF, can inquire about the progress of the call,
-and most importantly, can &lt;em>split&lt;/em> the restriction while it is being processed
-(hence the name &lt;em>Splittable DoFn&lt;/em>).&lt;/p>
-&lt;p>Splitting produces a &lt;em>primary&lt;/em> and &lt;em>residual&lt;/em> restriction that add up to the
-original restriction being split: the current &lt;code>@ProcessElement&lt;/code> call keeps
-processing the primary, and the residual will be processed by another
-&lt;code>@ProcessElement&lt;/code> call. For example, a runner may schedule the residual to be
-processed in parallel on another worker.&lt;/p>
-&lt;p>Splitting of a running &lt;code>@ProcessElement&lt;/code> call has two critically important uses:&lt;/p>
-&lt;ul>
-&lt;li>&lt;strong>Supporting infinite work per element.&lt;/strong> A restriction is, in general, not
-required to describe a finite amount of work. For example, reading from a Kafka
-topic starting from offset &lt;em>100&lt;/em> can be represented by the
-restriction &lt;em>[100, inf)&lt;/em>. A &lt;code>@ProcessElement&lt;/code> call processing this
-entire restriction would, of course, never complete. However, while such a call
-runs, a runner can split the restriction into a &lt;em>finite&lt;/em> primary &lt;em>[100, 150)&lt;/em>
-(letting the current call complete this part) and an &lt;em>infinite&lt;/em> residual &lt;em>[150,
-inf)&lt;/em> to be processed later, effectively checkpointing and resuming the call;
-this can be repeated forever.&lt;/li>
-&lt;/ul>
-&lt;p>&lt;img class="center-block"
-src="/images/blog/splittable-do-fn/kafka-splitting.png"
-alt="Splitting an infinite restriction into a finite primary and infinite residual"
-width="400">&lt;/p>
-&lt;ul>
-&lt;li>&lt;strong>Dynamic rebalancing.&lt;/strong> When a (typically batch-focused) runner detects that
-a &lt;code>@ProcessElement&lt;/code> call is going to take too long and become a straggler, it
-can split the restriction in some proportion so that the primary is short enough
-to not be a straggler, and can schedule the residual in parallel on another
-worker. For details, see &lt;a href="https://cloud.google.com/blog/big-data/2016/05/no-shard-left-behind-dynamic-work-rebalancing-in-google-cloud-dataflow">No Shard Left
-Behind&lt;/a>.&lt;/li>
-&lt;/ul>
-&lt;p>Logically, the execution of an SDF on an element works according to the
-following diagram, where &amp;ldquo;magic&amp;rdquo; stands for the runner-specific ability to split
-the restrictions and schedule processing of residuals.&lt;/p>
-&lt;p>&lt;img class="center-block"
-src="/images/blog/splittable-do-fn/transform-expansion.png"
-alt="Execution of an SDF - pairing with a restriction, splitting
-restrictions, processing element/restriction pairs"
-width="600">&lt;/p>
-&lt;p>This diagram emphasizes that splittability is an implementation detail of the
-particular &lt;code>DoFn&lt;/code>: a splittable &lt;code>DoFn&lt;/code> still looks like a &lt;code>DoFn&amp;lt;A, B&amp;gt;&lt;/code> to its
-user, and can be applied via a &lt;code>ParDo&lt;/code> to a &lt;code>PCollection&amp;lt;A&amp;gt;&lt;/code> producing a
-&lt;code>PCollection&amp;lt;B&amp;gt;&lt;/code>.&lt;/p>
-&lt;h3 id="which-dofns-need-to-be-splittable">Which DoFns need to be splittable&lt;/h3>
-&lt;p>Note that decomposition of an element into element/restriction pairs is not
-automatic or &amp;ldquo;magical&amp;rdquo;: SDF is a new API for &lt;em>authoring&lt;/em> a &lt;code>DoFn&lt;/code>, rather than a
-new way to &lt;em>execute&lt;/em> an existing &lt;code>DoFn&lt;/code>. When making a &lt;code>DoFn&lt;/code> splittable, the
-author needs to:&lt;/p>
-&lt;ul>
-&lt;li>
-&lt;p>Consider the structure of the work it does for every element.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>Come up with a scheme for describing parts of this work using restrictions.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>Write code for creating the initial restriction, splitting it, and executing
-an element/restriction pair.&lt;/p>
-&lt;/li>
-&lt;/ul>
-&lt;p>An overwhelming majority of &lt;code>DoFn&lt;/code>s found in user pipelines do not need to be
-made splittable: SDF is an advanced, powerful API, primarily targeting authors
-of new IO connectors &lt;em>(though it has interesting non-IO applications as well:
-see &lt;a href="https://s.apache.org/splittable-do-fn#heading=h.5cep9s8k4fxv">Non-IO examples&lt;/a>)&lt;/em>.&lt;/p>
-&lt;h3 id="execution-of-a-restriction-and-data-consistency">Execution of a restriction and data consistency&lt;/h3>
-&lt;p>One of the most important parts of the Splittable &lt;code>DoFn&lt;/code> design is related to
-how it achieves data consistency while splitting. For example, while the runner
-is preparing to split the restriction of an active &lt;code>@ProcessElement&lt;/code> call, how
-can it be sure that the call has not concurrently progressed past the point of
-splitting?&lt;/p>
-&lt;p>This is achieved by requiring the processing of a restriction to follow a
-certain pattern. We think of a restriction as a sequence of &lt;em>blocks&lt;/em> -
-elementary indivisible units of work, identified by a &lt;em>position&lt;/em>. A
-&lt;code>@ProcessElement&lt;/code> call processes the blocks one by one, first &lt;em>claiming&lt;/em> the
-block&amp;rsquo;s position to atomically check if it&amp;rsquo;s still within the range of the
-restriction, until the whole restriction is processed.&lt;/p>
-&lt;p>The diagram below illustrates this for &lt;code>ReadFn&lt;/code> (a splittable &lt;code>DoFn&lt;/code> that reads
-Avro files) processing the element &lt;code>foo.avro&lt;/code> with restriction &lt;code>[30, 70)&lt;/code>. This
-&lt;code>@ProcessElement&lt;/code> call scans the Avro file for &lt;a href="https://avro.apache.org/docs/current/spec.html#Object+Container+Files">data
-blocks&lt;/a>
-starting from offset &lt;code>30&lt;/code> and claims the position of each block in this range.
-If a block is claimed successfully, then the call outputs all records in this
-data block, otherwise, it terminates.&lt;/p>
-&lt;p>&lt;img class="center-block"
-src="/images/blog/splittable-do-fn/blocks.png"
-alt="Processing a restriction by claiming blocks inside it"
-width="400">&lt;/p>
-&lt;p>For more details, see &lt;a href="https://s.apache.org/splittable-do-fn#heading=h.vjs7pzbb7kw">Restrictions, blocks and positions&lt;/a> in the
-design proposal document.&lt;/p>
-&lt;h3 id="code-example">Code example&lt;/h3>
-&lt;p>Let us look at some examples of SDF code. The examples use the Beam Java SDK,
-which &lt;a href="https://github.com/apache/beam/blob/f7e8f886c91ea9d0b51e00331eeb4484e2f6e000/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/DoFn.java#L527">represents splittable
-&lt;code>DoFn&lt;/code>s&lt;/a>
-as part of the flexible &lt;a href="https://s.apache.org/a-new-dofn">annotation-based
-&lt;code>DoFn&lt;/code>&lt;/a> machinery, and the &lt;a href="https://s.apache.org/splittable-do-fn-python">proposed SDF syntax
-for Python&lt;/a>.&lt;/p>
-&lt;ul>
-&lt;li>
-&lt;p>A splittable &lt;code>DoFn&lt;/code> is a &lt;code>DoFn&lt;/code> - no new base class needed. Any SDF derives
-from the &lt;code>DoFn&lt;/code> class and has a &lt;code>@ProcessElement&lt;/code> method.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>The &lt;code>@ProcessElement&lt;/code> method takes an additional
-&lt;a href="https://github.com/apache/beam/blob/f7e8f886c91ea9d0b51e00331eeb4484e2f6e000/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.java">&lt;code>RestrictionTracker&lt;/code>&lt;/a>
-parameter that gives access to the current restriction in addition to the
-current element.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>An SDF needs to define a &lt;code>@GetInitialRestriction&lt;/code> method that can create a
-restriction describing the complete work for a given element.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>There are several less important optional methods, such as
-&lt;code>@SplitRestriction&lt;/code> for pre-splitting the initial restriction into several
-smaller restrictions, and a few others.&lt;/p>
-&lt;/li>
-&lt;/ul>
-&lt;p>The &amp;ldquo;Hello World&amp;rdquo; of SDF is a counter, which takes pairs &lt;em>(x, N)&lt;/em> as input and
-produces pairs &lt;em>(x, 0), (x, 1), …, (x, N-1)&lt;/em> as output.&lt;/p>
-&lt;div class='language-java snippet'>
-&lt;div class="notebook-skip code-snippet">
-&lt;a class="copy" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Copy to clipboard">
-&lt;img src="/images/copy-icon.svg"/>
-&lt;/a>
-&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="kd">class&lt;/span> &lt;span class="nc">CountFn&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">T&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="kd">extends&lt;/span> &lt;span class="n">DoFn&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">KV&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">T&lt;/span>&lt;span cl [...]
-&lt;span class="nd">@ProcessElement&lt;/span>
-&lt;span class="kd">public&lt;/span> &lt;span class="kt">void&lt;/span> &lt;span class="nf">process&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">ProcessContext&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">OffsetRangeTracker&lt;/span> &lt;span class="n">tracker&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="o">{&lt;/span>
-&lt;span class="k">for&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="kt">long&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">currentRestriction&lt;/span>&lt;span class="o">().&lt;/span>&lt;span class="na">getFrom&lt;/span>&lt;span class="o">();&lt;/span> &lt;span class="n">tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">tryClaim&lt;/span>&lt;span cla [...]
-&lt;span class="n">c&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">output&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">KV&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">of&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">c&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">element&lt;/span>&lt;span class="o">().&lt;/span>&lt;span class="na">getKey&lt;/span>&lt;span class="o">(),&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class= [...]
-&lt;span class="o">}&lt;/span>
-&lt;span class="o">}&lt;/span>
-&lt;span class="nd">@GetInitialRestriction&lt;/span>
-&lt;span class="kd">public&lt;/span> &lt;span class="n">OffsetRange&lt;/span> &lt;span class="nf">getInitialRange&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">KV&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">T&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">Long&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">element&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="o">{&lt;/span>
-&lt;span class="k">return&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">OffsetRange&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">0L&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">element&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">getValue&lt;/span>&lt;span class="o">());&lt;/span>
-&lt;span class="o">}&lt;/span>
-&lt;span class="o">}&lt;/span>
-&lt;span class="n">PCollection&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">KV&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">Long&lt;/span>&lt;span class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">input&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="err">…&lt;/span>&lt;span class="o">;&lt;/span>
-&lt;span class="n">PCollection&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">KV&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">Long&lt;/span>&lt;span class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">output&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">input&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">apply&lt;/span>&lt;span class="o">(&lt;/span>
-&lt;span class="n">ParDo&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">of&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="k">new&lt;/span> &lt;span class="n">CountFn&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">&amp;gt;());&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
-&lt;/div>
-&lt;/div>
-&lt;div class='language-py snippet'>
-&lt;div class="notebook-skip code-snippet">
-&lt;a class="copy" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Copy to clipboard">
-&lt;img src="/images/copy-icon.svg"/>
-&lt;/a>
-&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-py" data-lang="py">&lt;span class="k">class&lt;/span> &lt;span class="nc">CountFn&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">DoFn&lt;/span>&lt;span class="p">):&lt;/span>
-&lt;span class="k">def&lt;/span> &lt;span class="nf">process&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">element&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">tracker&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">DoFn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">RestrictionTrackerParam&lt;/span>&lt;span class="p">)&lt;/span>
-&lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">xrange&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="n">tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">current_restriction&lt;/span>&lt;span class="p">()):&lt;/span>
-&lt;span class="k">if&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">try_claim&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">):&lt;/span>
-&lt;span class="k">return&lt;/span>
-&lt;span class="k">yield&lt;/span> &lt;span class="n">element&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">i&lt;/span>
-&lt;span class="k">def&lt;/span> &lt;span class="nf">get_initial_restriction&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">element&lt;/span>&lt;span class="p">):&lt;/span>
-&lt;span class="k">return&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">element&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">])&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
-&lt;/div>
-&lt;/div>
-&lt;p>This short &lt;code>DoFn&lt;/code> subsumes the functionality of
-&lt;a href="https://github.com/apache/beam/blob/master/sdks/java/core/src/main/java/org/apache/beam/sdk/io/CountingSource.java">CountingSource&lt;/a>,
-but is more flexible: &lt;code>CountingSource&lt;/code> generates only one sequence specified at
-pipeline construction time, while this &lt;code>DoFn&lt;/code> can generate a dynamic family of
-sequences, one per element in the input collection (it does not matter whether
-the input collection is bounded or unbounded).&lt;/p>
-&lt;p>However, the &lt;code>Source&lt;/code>-specific capabilities of &lt;code>CountingSource&lt;/code> are still
-available in &lt;code>CountFn&lt;/code>. For example, if a sequence has a lot of elements, a
-batch-focused runner can still apply dynamic rebalancing to it and generate
-different subranges of the sequence in parallel by splitting the &lt;code>OffsetRange&lt;/code>.
-Likewise, a streaming-focused runner can use the same splitting logic to
-checkpoint and resume the generation of the sequence even if it is, for
-practical purposes, infinite (for example, when applied to a &lt;code>KV(..., Long.MAX_VALUE)&lt;/code>).&lt;/p>
-&lt;p>A slightly more complex example is the &lt;code>ReadFn&lt;/code> considered above, which reads
-data from Avro files and illustrates the idea of &lt;em>blocks&lt;/em>: we provide pseudocode
-to illustrate the approach.&lt;/p>
-&lt;div class='language-java snippet'>
-&lt;div class="notebook-skip code-snippet">
-&lt;a class="copy" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Copy to clipboard">
-&lt;img src="/images/copy-icon.svg"/>
-&lt;/a>
-&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="kd">class&lt;/span> &lt;span class="nc">ReadFn&lt;/span> &lt;span class="kd">extends&lt;/span> &lt;span class="n">DoFn&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">AvroRecord&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="o">{&lt;/span>
-&lt;span class="nd">@ProcessElement&lt;/span>
-&lt;span class="kt">void&lt;/span> &lt;span class="nf">process&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">ProcessContext&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">OffsetRangeTracker&lt;/span> &lt;span class="n">tracker&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="o">{&lt;/span>
-&lt;span class="k">try&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">AvroReader&lt;/span> &lt;span class="n">reader&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Avro&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">open&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">filename&lt;/span>&lt;span class="o">))&lt;/span> &lt;span class="o">{&lt;/span>
-&lt;span class="c1">// Seek to the first block starting at or after the start offset.
-&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="n">reader&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">seek&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">currentRestriction&lt;/span>&lt;span class="o">().&lt;/span>&lt;span class="na">getFrom&lt;/span>&lt;span class="o">());&lt;/span>
-&lt;span class="k">while&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">reader&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">readNextBlock&lt;/span>&lt;span class="o">())&lt;/span> &lt;span class="o">{&lt;/span>
-&lt;span class="c1">// Claim the position of the current Avro block
-&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="o">(!&lt;/span>&lt;span class="n">tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">tryClaim&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">reader&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">currentBlockOffset&lt;/span>&lt;span class="o">()))&lt;/span> &lt;span class="o">{&lt;/span>
-&lt;span class="c1">// Out of range of the current restriction - we&amp;#39;re done.
-&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="k">return&lt;/span>&lt;span class="o">;&lt;/span>
-&lt;span class="o">}&lt;/span>
-&lt;span class="c1">// Emit all records in this block
-&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">AvroRecord&lt;/span> &lt;span class="n">record&lt;/span> &lt;span class="o">:&lt;/span> &lt;span class="n">reader&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">currentBlock&lt;/span>&lt;span class="o">())&lt;/span> &lt;span class="o">{&lt;/span>
-&lt;span class="n">c&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">output&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">record&lt;/span>&lt;span class="o">);&lt;/span>
-&lt;span class="o">}&lt;/span>
-&lt;span class="o">}&lt;/span>
-&lt;span class="o">}&lt;/span>
-&lt;span class="o">}&lt;/span>
-&lt;span class="nd">@GetInitialRestriction&lt;/span>
-&lt;span class="n">OffsetRange&lt;/span> &lt;span class="nf">getInitialRestriction&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">String&lt;/span> &lt;span class="n">filename&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="o">{&lt;/span>
-&lt;span class="k">return&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">OffsetRange&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">0&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">File&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">filename&lt;/span>&lt;span class="o">).&lt;/span>&lt;span class="na">getSize&lt;/span>&lt;span class="o">());&lt;/span>
-&lt;span class="o">}&lt;/span>
-&lt;span class="o">}&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
-&lt;/div>
-&lt;/div>
-&lt;div class='language-py snippet'>
-&lt;div class="notebook-skip code-snippet">
-&lt;a class="copy" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Copy to clipboard">
-&lt;img src="/images/copy-icon.svg"/>
-&lt;/a>
-&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-py" data-lang="py">&lt;span class="k">class&lt;/span> &lt;span class="nc">AvroReader&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">DoFn&lt;/span>&lt;span class="p">):&lt;/span>
-&lt;span class="k">def&lt;/span> &lt;span class="nf">process&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">filename&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">tracker&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">DoFn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">RestrictionTrackerParam&lt;/span>&lt;span class="p">)&lt;/span>
-&lt;span class="k">with&lt;/span> &lt;span class="n">fileio&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ChannelFactory&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">filename&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nb">file&lt;/span>&lt;span class="p">:&lt;/span>
-&lt;span class="n">start&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">stop&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">current_restriction&lt;/span>&lt;span class="p">()&lt;/span>
-&lt;span class="c1"># Seek to the first block starting at or after the start offset.&lt;/span>
-&lt;span class="nb">file&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">seek&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">start&lt;/span>&lt;span class="p">)&lt;/span>
-&lt;span class="n">block&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">AvroUtils&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_next_block&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">file&lt;/span>&lt;span class="p">)&lt;/span>
-&lt;span class="k">while&lt;/span> &lt;span class="n">block&lt;/span>&lt;span class="p">:&lt;/span>
-&lt;span class="c1"># Claim the position of the current Avro block&lt;/span>
-&lt;span class="k">if&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">try_claim&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">block&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">start&lt;/span>&lt;span class="p">()):&lt;/span>
-&lt;span class="c1"># Out of range of the current restriction - we&amp;#39;re done.&lt;/span>
-&lt;span class="k">return&lt;/span>
-&lt;span class="c1"># Emit all records in this block&lt;/span>
-&lt;span class="k">for&lt;/span> &lt;span class="n">record&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">block&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">records&lt;/span>&lt;span class="p">():&lt;/span>
-&lt;span class="k">yield&lt;/span> &lt;span class="n">record&lt;/span>
-&lt;span class="n">block&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">AvroUtils&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_next_block&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">file&lt;/span>&lt;span class="p">)&lt;/span>
-&lt;span class="k">def&lt;/span> &lt;span class="nf">get_initial_restriction&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">filename&lt;/span>&lt;span class="p">):&lt;/span>
-&lt;span class="k">return&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">fileio&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ChannelFactory&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">size_in_bytes&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">filename&lt;/span>&lt;span class="p">))&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
-&lt;/div>
-&lt;/div>
-&lt;p>This hypothetical &lt;code>DoFn&lt;/code> reads records from a single Avro file. Notably missing
-is the code for expanding a filepattern: it no longer needs to be part of this
-&lt;code>DoFn&lt;/code>! Instead, the SDK includes a
-&lt;a href="https://github.com/apache/beam/blob/master/sdks/java/core/src/main/java/org/apache/beam/sdk/io/FileIO.java">FileIO.matchAll()&lt;/a>
-transform for expanding a filepattern into a &lt;code>PCollection&lt;/code> of filenames, and
-different file format IOs can reuse the same transform, reading the files with
-different &lt;code>DoFn&lt;/code>s.&lt;/p>
-&lt;p>This example demonstrates the benefits of increased modularity allowed by SDF:
-&lt;code>FileIO.matchAll()&lt;/code> supports continuous ingestion of new files in streaming
-pipelines using &lt;code>.continuously()&lt;/code>, and this functionality becomes automatically
-available to various file format IOs. For example,
-&lt;code>TextIO.read().watchForNewFiles()&lt;/code> &lt;a href="https://github.com/apache/beam/blob/3bd68ecfd7d576d78e02deb0476e549f11e1b5ef/sdks/java/core/src/main/java/org/apache/beam/sdk/io/TextIO.java#L486">uses &lt;code>FileIO.matchAll()&lt;/code> under the
-hood)&lt;/a>.&lt;/p>
-&lt;h2 id="current-status">Current status&lt;/h2>
-&lt;p>Splittable &lt;code>DoFn&lt;/code> is a major new API, and its delivery and widespread adoption
-involves a lot of work in different parts of the Apache Beam ecosystem. Some
-of that work is already complete and provides direct benefit to users via new
-IO connectors. However, a large amount of work is in progress or planned.&lt;/p>
-&lt;p>As of August 2017, SDF is available for use in the Beam Java Direct runner and
-Dataflow Streaming runner, and implementation is in progress in the Flink and
-Apex runners; see &lt;a href="/documentation/runners/capability-matrix/">capability matrix&lt;/a> for the current status. Support
-for SDF in the Python SDK is &lt;a href="https://s.apache.org/splittable-do-fn-python">in active
-development&lt;/a>.&lt;/p>
-&lt;p>Several SDF-based transforms and IO connectors are available for Beam users at
-HEAD and will be included in Beam 2.2.0. &lt;code>TextIO&lt;/code> and &lt;code>AvroIO&lt;/code> finally provide
-continuous ingestion of files (one of the most frequently requested features)
-via &lt;code>.watchForNewFiles()&lt;/code> which is backed by the utility transforms
-&lt;code>FileIO.matchAll().continuously()&lt;/code> and the more general
-&lt;a href="https://github.com/apache/beam/blob/f7e8f886c91ea9d0b51e00331eeb4484e2f6e000/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/Watch.java">&lt;code>Watch.growthOf()&lt;/code>&lt;/a>.
-These utility transforms are also independently useful for &amp;ldquo;power user&amp;rdquo; use
-cases.&lt;/p>
-&lt;p>To enable more flexible use cases for IOs currently based on the Source API, we
-will change them to use SDF. This transition is &lt;a href="https://s.apache.org/textio-sdf">pioneered by
-TextIO&lt;/a> and involves temporarily &lt;a href="https://s.apache.org/sdf-via-source">executing SDF
-via the Source API&lt;/a> to support runners
-lacking the ability to run SDF directly.&lt;/p>
-&lt;p>In addition to enabling new IOs, work on SDF has influenced our thinking about
-other parts of the Beam programming model:&lt;/p>
-&lt;ul>
-&lt;li>
-&lt;p>SDF unified the final remaining part of the Beam programming model that was
-not batch/streaming agnostic (the &lt;code>Source&lt;/code> API). This led us to consider use
-cases that cannot be described as purely batch or streaming (for example,
-ingesting a large amount of historical data and carrying on with more data
-arriving in real time) and to develop a &lt;a href="https://s.apache.org/beam-fn-api-progress-reporting">unified notion of &amp;ldquo;progress&amp;rdquo; and
-&amp;ldquo;backlog&amp;rdquo;&lt;/a>.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>The &lt;a href="https://s.apache.org/beam-fn-api">Fn API&lt;/a> - the foundation of Beam&amp;rsquo;s
-future support for cross-language pipelines - uses SDF as &lt;em>the only&lt;/em> concept
-representing data ingestion.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>Implementation of SDF has lead to &lt;a href="https://lists.apache.org/thread.html/86831496a08fe148e3b982cdb904f828f262c0b571543a9fed7b915d@%3Cdev.beam.apache.org%3E">formalizing pipeline termination
-semantics&lt;/a>
-and making it consistent between runners.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>SDF set a new standard for how modular IO connectors can be, inspiring
-creation of similar APIs for some non-SDF-based connectors (for example,
-&lt;code>SpannerIO.readAll()&lt;/code> and the
-&lt;a href="https://issues.apache.org/jira/browse/BEAM-2706">planned&lt;/a> &lt;code>JdbcIO.readAll()&lt;/code>).&lt;/p>
-&lt;/li>
-&lt;/ul>
-&lt;h2 id="call-to-action">Call to action&lt;/h2>
-&lt;p>Apache Beam thrives on having a large community of contributors. Here are some
-ways you can get involved in the SDF effort and help make the Beam IO connector
-ecosystem more modular:&lt;/p>
-&lt;ul>
-&lt;li>
-&lt;p>Use the currently available SDF-based IO connectors, provide feedback, file
-bugs, and suggest or implement improvements.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>Propose or develop a new IO connector based on SDF.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>Implement or improve support for SDF in your favorite runner.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>Subscribe and contribute to the occasional SDF-related discussions on
-&lt;a href="mailto:user@beam.apache.org">user@beam.apache.org&lt;/a> (mailing list for Beam
-users) and &lt;a href="mailto:dev@beam.apache.org">dev@beam.apache.org&lt;/a> (mailing list for
-Beam developers)!&lt;/p>
-&lt;/li>
-&lt;/ul></description></item></channel></rss>
\ No newline at end of file
+&lt;a href="https://twitter.com/ApacheBeam">@ApacheBeam&lt;/a> on Twitter.&lt;/p></description></item></channel></rss>
\ No newline at end of file
diff --git a/website/generated-content/blog/kafka-to-pubsub-example/index.html b/website/generated-content/blog/kafka-to-pubsub-example/index.html
index 794f02f..f90ce66 100644
--- a/website/generated-content/blog/kafka-to-pubsub-example/index.html
+++ b/website/generated-content/blog/kafka-to-pubsub-example/index.html
@@ -47,11 +47,7 @@ within <a href=https://github.com/GoogleCloudPlatform/DataflowTemplates>Google C
 repository and can be run with no additional code modifications.</li></ul></li></ol><h1 id=next-steps>Next Steps</h1><p>Give this <strong>Beam end-to-end example</strong> a try. If you are new to Beam, we hope this example will give
 you more understanding on how pipelines work and look like. If you are already using Beam, we hope
 some code samples in it will be useful for your use cases.</p><p>Please
-<a href=https://beam.apache.org/community/contact-us/>let us know</a> if you encounter any issues.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categori [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+<a href=https://beam.apache.org/community/contact-us/>let us know</a> if you encounter any issues.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2 [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/looping-timers/index.html b/website/generated-content/blog/looping-timers/index.html
index a6c813a..127fced 100644
--- a/website/generated-content/blog/looping-timers/index.html
+++ b/website/generated-content/blog/looping-timers/index.html
@@ -222,11 +222,7 @@ runners will need to add support for it with all of their more advanced
 feature sets. You can experiment with this pattern today using the
 DirectRunner. For other runners, please look out for their release notes on
 support for dealing with this use case in production.</p><p>(<a href=/documentation/runners/capability-matrix/>Capability Matrix</a>)</p><p>Runner specific notes:
-Google Cloud Dataflow Runners Drain feature does not support looping timers (Link to matrix)</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blo [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+Google Cloud Dataflow Runners Drain feature does not support looping timers (Link to matrix)</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/pattern-match-beam-sql/index.html b/website/generated-content/blog/pattern-match-beam-sql/index.html
index 54fc226..5188bef 100644
--- a/website/generated-content/blog/pattern-match-beam-sql/index.html
+++ b/website/generated-content/blog/pattern-match-beam-sql/index.html
@@ -66,11 +66,7 @@ query:</p><div class="language-sql snippet"><div class="notebook-skip code-snipp
 mapped to A and the rest of the rows will be mapped to B. Thus, we will have (1, 5) as the result.</p><blockquote><p>Very important: For my NFA implementation, it slightly breaks the rule in the SQL standard. Since the buffered NFA
 only stores an event to the buffer if the event is a match to some pattern class, There would be no way to get the
 previous event back if the previous row is discarded. So the first row would always be a match (different from the standard)
-if PREV is used.</p></blockquote><h2 id=progress>Progress</h2><ol><li>PRs<ol><li><a href=https://github.com/apache/beam/pull/12232>Support MATCH_RECOGNIZE using regex library</a> (merged)</li><li><a href=https://github.com/apache/beam/pull/12532>Support MATCH_RECOGNIZE using NFA</a> (pending)</li></ol></li><li>Commits<ol><li>partition by: <a href=https://github.com/apache/beam/pull/12232/commits/064ada7257970bcb1d35530be1b88cb3830f242b>commit 064ada7</a></li><li>order by: <a href=https:/ [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+if PREV is used.</p></blockquote><h2 id=progress>Progress</h2><ol><li>PRs<ol><li><a href=https://github.com/apache/beam/pull/12232>Support MATCH_RECOGNIZE using regex library</a> (merged)</li><li><a href=https://github.com/apache/beam/pull/12532>Support MATCH_RECOGNIZE using NFA</a> (pending)</li></ol></li><li>Commits<ol><li>partition by: <a href=https://github.com/apache/beam/pull/12232/commits/064ada7257970bcb1d35530be1b88cb3830f242b>commit 064ada7</a></li><li>order by: <a href=https:/ [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/presentation-materials/index.html b/website/generated-content/blog/presentation-materials/index.html
index 2f3204e..6d10309 100644
--- a/website/generated-content/blog/presentation-materials/index.html
+++ b/website/generated-content/blog/presentation-materials/index.html
@@ -21,11 +21,7 @@ function blockScroll(){$("body").toggleClass("fixedPosition");}
 function openMenu(){addPlaceholder();blockScroll();}</script><div class="body__contained center no__padding content-up"><article class=post itemscope itemtype=http://schema.org/BlogPosting><div class=post-content><div class=post-info><p>beam & capability
        </p><p>2016/04/03</p></div><header class=post-header><h2 itemprop="name headline">Apache Beam Presentation Materials</h1><div class=post-info><span>Frances Perry [<a href=https://twitter.com/francesjperry>@francesjperry</a>]
 &
-Tyler Akidau [<a href=https://twitter.com/takidau>@takidau</a>]</span></div></header><div class="arrow-list header-top-margin" itemprop=articleBody><p>Are you interested in giving a presentation about Apache Beam? Perhaps you want to talk about Apache Beam at a local Meetup or a convention. Excellent! The Apache Beam community is excited to expand and grow the community. To help kickstart this process, we are excited to announce an initial set of <a href=/contribute/presentation-material [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+Tyler Akidau [<a href=https://twitter.com/takidau>@takidau</a>]</span></div></header><div class="arrow-list header-top-margin" itemprop=articleBody><p>Are you interested in giving a presentation about Apache Beam? Perhaps you want to talk about Apache Beam at a local Meetup or a convention. Excellent! The Apache Beam community is excited to expand and grow the community. To help kickstart this process, we are excited to announce an initial set of <a href=/contribute/presentation-material [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/python-improved-annotations/index.html b/website/generated-content/blog/python-improved-annotations/index.html
index 5b53f11..30f51a9 100644
--- a/website/generated-content/blog/python-improved-annotations/index.html
+++ b/website/generated-content/blog/python-improved-annotations/index.html
@@ -55,11 +55,7 @@ type hints by removing the outer PCollection container.</p><h2 id=pbegin-pdone-n
 </code></pre><h1 id=next-steps>Next Steps</h1><p>What are you waiting for.. start using annotations on your transforms!</p><p>For more background on type hints in Python, see:
 <a href=https://beam.apache.org/documentation/sdks/python-type-safety/>Ensuring Python Type Safety</a>.</p><p>Finally, please
 <a href=https://beam.apache.org/community/contact-us/>let us know</a>
-if you encounter any issues.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/02/22< [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+if you encounter any issues.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>bl [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/python-performance-runtime-type-checking/index.html b/website/generated-content/blog/python-performance-runtime-type-checking/index.html
index f028382..a7d314b 100644
--- a/website/generated-content/blog/python-performance-runtime-type-checking/index.html
+++ b/website/generated-content/blog/python-performance-runtime-type-checking/index.html
@@ -67,11 +67,7 @@ at the point of declaration rather than the point of exception, saving you valua
 while providing higher quality error messages.</p><p>So what would the same error look like using Performance RTC? It&rsquo;s the exact same string but with one additional line:</p><pre><code>[while running 'ParDo(UpstreamDoFn)']
 </code></pre><p>And that&rsquo;s much more actionable for an investigation :)</p><h1 id=next-steps>Next Steps</h1><p>Go play with the new <code>performance_runtime_type_check</code> feature!</p><p>It&rsquo;s in an experimental state so please
 <a href=https://beam.apache.org/community/contact-us/>let us know</a>
-if you encounter any issues.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/02/22< [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+if you encounter any issues.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>bl [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/python-sdk-now-public/index.html b/website/generated-content/blog/python-sdk-now-public/index.html
index b7c8fec..8d886ad 100644
--- a/website/generated-content/blog/python-sdk-now-public/index.html
+++ b/website/generated-content/blog/python-sdk-now-public/index.html
@@ -20,11 +20,7 @@ function endSearch(){var search=document.querySelector(".searchBar");search.clas
 function blockScroll(){$("body").toggleClass("fixedPosition");}
 function openMenu(){addPlaceholder();blockScroll();}</script><div class="body__contained center no__padding content-up"><article class=post itemscope itemtype=http://schema.org/BlogPosting><div class=post-content><div class=post-info><p>beam, python & sdk
        </p><p>2016/02/25</p></div><header class=post-header><h2 itemprop="name headline">Dataflow Python SDK is now public!</h1><div class=post-info><span>James Malone [<a href=https://twitter.com/chimerasaurus>@chimerasaurus</a>]</span></div></header><div class="arrow-list header-top-margin" itemprop=articleBody><p>When the Apache Beam project proposed entry into the <a href=http://wiki.apache.org/incubator/BeamProposal>Apache Incubator</a> the proposal
-included the <a href=https://github.com/GoogleCloudPlatform/DataflowJavaSDK>Dataflow Java SDK</a>. In the long term, however, Apache Beam aims to support SDKs implemented in multiple languages, such as Python.</p><p>Today, Google submitted the <a href=http://github.com/GoogleCloudPlatform/DataflowPythonSDK>Dataflow Python (2.x) SDK</a> on GitHub. Google is committed to including the in progress python SDK in Apache Beam and, in that spirit, we&rsquo;ve moved development of the Python SDK [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+included the <a href=https://github.com/GoogleCloudPlatform/DataflowJavaSDK>Dataflow Java SDK</a>. In the long term, however, Apache Beam aims to support SDKs implemented in multiple languages, such as Python.</p><p>Today, Google submitted the <a href=http://github.com/GoogleCloudPlatform/DataflowPythonSDK>Dataflow Python (2.x) SDK</a> on GitHub. Google is committed to including the in progress python SDK in Apache Beam and, in that spirit, we&rsquo;ve moved development of the Python SDK [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/python-sdk-release/index.html b/website/generated-content/blog/python-sdk-release/index.html
index 01d23e5..d0faf93 100644
--- a/website/generated-content/blog/python-sdk-release/index.html
+++ b/website/generated-content/blog/python-sdk-release/index.html
@@ -44,11 +44,7 @@ p = beam.Pipeline()
 
 p.run()
 </code></pre><p>This example estimates Pi by throwing random darts into the unit square and keeping track of the fraction of those darts that fell into the unit circle (see the full <a href=https://github.com/apache/beam/blob/v0.6.0/sdks/python/apache_beam/examples/complete/estimate_pi.py>example</a> for details). If you are curious, you can check the result of our estimation by looking at the output file.</p><pre><code>$ cat pi_estimate.txt*
-</code></pre><h4 id=roadmap>Roadmap</h4><p>The first thing on the Python SDK’s roadmap is to address two of its limitations. First, the existing runners are currently limited to bounded PCollections, and we are looking forward to extending the SDK to support unbounded PCollections (“streaming”). Additionally, we are working on extending support to more Apache Beam runners, and the upcoming Fn API will do the heavy lifting.</p><p>Both of these improvements will enable the Python SDK to fu [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+</code></pre><h4 id=roadmap>Roadmap</h4><p>The first thing on the Python SDK’s roadmap is to address two of its limitations. First, the existing runners are currently limited to bounded PCollections, and we are looking forward to extending the SDK to support unbounded PCollections (“streaming”). Additionally, we are working on extending support to more Apache Beam runners, and the upcoming Fn API will do the heavy lifting.</p><p>Both of these improvements will enable the Python SDK to fu [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/python-typing/index.html b/website/generated-content/blog/python-typing/index.html
index 147055b..86aecb5 100644
--- a/website/generated-content/blog/python-typing/index.html
+++ b/website/generated-content/blog/python-typing/index.html
@@ -77,11 +77,7 @@ native typing types. Native types have as these are supported by additional tool
 fixed issues with native type support. There may still be bugs and unsupported
 native types. Please
 <a href=https://beam.apache.org/community/contact-us/>let us know</a> if you encounter
-issues.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/02/22</p></div><div class=p [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+issues.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</ [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/review-input-streaming-connectors/index.html b/website/generated-content/blog/review-input-streaming-connectors/index.html
index ac80c37..9656d5a 100644
--- a/website/generated-content/blog/review-input-streaming-connectors/index.html
+++ b/website/generated-content/blog/review-input-streaming-connectors/index.html
@@ -20,13 +20,9 @@ function endSearch(){var search=document.querySelector(".searchBar");search.clas
 function blockScroll(){$("body").toggleClass("fixedPosition");}
 function openMenu(){addPlaceholder();blockScroll();}</script><div class="body__contained center no__padding content-up"><article class=post itemscope itemtype=http://schema.org/BlogPosting><div class=post-content><div class=post-info><p>blog</p><p>2018/08/20</p></div><header class=post-header><h2 itemprop="name headline">A review of input streaming connectors</h1><div class=post-info><span>Leonid Kuligin [<a href=https://twitter.com/lkulighin>@lkulighin</a>]
 &
-Julien Phalip [<a href=https://twitter.com/julienphalip>@julienphalip</a>]</span></div></header><div class="arrow-list header-top-margin" itemprop=articleBody><p>In this post, you&rsquo;ll learn about the current state of support for input streaming connectors in <a href=/>Apache Beam</a>. For more context, you&rsquo;ll also learn about the corresponding state of support in <a href=https://spark.apache.org/>Apache Spark</a>.</p><p>With batch processing, you might load data from any sourc [...]
-and <a href=https://spark.apache.org/docs/latest/api/java/org/apache/spark/streaming/StreamingContext.html#textFileStream-java.lang.String->textFileStream</a></td></tr><tr><td>S3<br>(Using the <code>s3://</code> URI)</td><td><a href=https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/FileIO.html>FileIO</a> + <a href=https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/aws/options/S3Options.html>S3Options</a></td></tr><tr><td rowspan=3>Messaging Queues [...]
-and <a href=https://spark.apache.org/docs/latest/api/python/pyspark.streaming.html#pyspark.streaming.StreamingContext.textFileStream>textFileStream</a></td></tr><tr><td rowspan=2>Object stores</td><td>Google Cloud Storage</td><td><a href=https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.io.gcp.gcsio.html>io.gcp.gcsio</a></td><td rowspan=2><a href=https://spark.apache.org/docs/latest/api/python/pyspark.streaming.html#pyspark.streaming.StreamingContext.textFileStream>textFileStream [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+Julien Phalip [<a href=https://twitter.com/julienphalip>@julienphalip</a>]</span></div></header><div class="arrow-list header-top-margin" itemprop=articleBody><p>In this post, you&rsquo;ll learn about the current state of support for input streaming connectors in <a href=/>Apache Beam</a>. For more context, you&rsquo;ll also learn about the corresponding state of support in <a href=https://spark.apache.org/>Apache Spark</a>.</p><p>With batch processing, you might load data from any sourc [...]
+and <a href=https://spark.apache.org/docs/latest/api/java/org/apache/spark/streaming/StreamingContext.html#textFileStream-java.lang.String->textFileStream</a></td></tr><tr><td>S3<br>(Using the <code>s3://</code> URI)</td><td><a href=https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/FileIO.html>FileIO</a> + <a href=https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/aws/options/S3Options.html>S3Options</a></td></tr><tr><td rowspan=3>Messaging Queues [...]
+and <a href=https://spark.apache.org/docs/latest/api/python/pyspark.streaming.html#pyspark.streaming.StreamingContext.textFileStream>textFileStream</a></td></tr><tr><td rowspan=2>Object stores</td><td>Google Cloud Storage</td><td><a href=https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.io.gcp.gcsio.html>io.gcp.gcsio</a></td><td rowspan=2><a href=https://spark.apache.org/docs/latest/api/python/pyspark.streaming.html#pyspark.streaming.StreamingContext.textFileStream>textFileStream [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/season-of-docs/index.html b/website/generated-content/blog/season-of-docs/index.html
index 8226326..c08e7ef 100644
--- a/website/generated-content/blog/season-of-docs/index.html
+++ b/website/generated-content/blog/season-of-docs/index.html
@@ -19,11 +19,7 @@ function addPlaceholder(){$('input:text').attr('placeholder',"What are you looki
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
 function openMenu(){addPlaceholder();blockScroll();}</script><div class="body__contained center no__padding content-up"><article class=post itemscope itemtype=http://schema.org/BlogPosting><div class=post-content><div class=post-info><p>blog</p><p>2019/04/19</p></div><header class=post-header><h2 itemprop="name headline">Apache Beam is applying to Season of Docs</h1><div class=post-info><span>Aizhamal Nurmamat kyzy [<a href=https://twitter.com/iamaijamal>@iamaijamal</a>]</span></div></he [...]
-This project involves a number of <a href=https://issues.apache.org/jira/browse/BEAM-2888>corrections and improvements to the capability matrix</a>; followed by a few larger set of changes, involving:</p><ul><li>Plain english summaries for each runner’s support of the Beam model.</li><li>A paragraph-length description of the production-readiness for each runner.</li><li>Comparisons for non-model differences between runners.</li><li>Comparison for support of the portability framework for  [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+This project involves a number of <a href=https://issues.apache.org/jira/browse/BEAM-2888>corrections and improvements to the capability matrix</a>; followed by a few larger set of changes, involving:</p><ul><li>Plain english summaries for each runner’s support of the Beam model.</li><li>A paragraph-length description of the production-readiness for each runner.</li><li>Comparisons for non-model differences between runners.</li><li>Comparison for support of the portability framework for  [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/six-months/index.html b/website/generated-content/blog/six-months/index.html
index 118e2e0..7010b41 100644
--- a/website/generated-content/blog/six-months/index.html
+++ b/website/generated-content/blog/six-months/index.html
@@ -18,11 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="body__contained center no__padding content-up"><article class=post itemscope itemtype=http://schema.org/BlogPosting><div class=post-content><div class=post-info><p>blog</p><p>2016/08/03</p></div><header class=post-header><h2 itemprop="name headline">Apache Beam: Six Months in Incubation</h1><div class=post-info><span>Frances Perry [<a href=https://twitter.com/francesjperry>@francesjperry</a>]</span></div></header><d [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="body__contained center no__padding content-up"><article class=post itemscope itemtype=http://schema.org/BlogPosting><div class=post-content><div class=post-info><p>blog</p><p>2016/08/03</p></div><header class=post-header><h2 itemprop="name headline">Apache Beam: Six Months in Incubation</h1><div class=post-info><span>Frances Perry [<a href=https://twitter.com/francesjperry>@francesjperry</a>]</span></div></header><d [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/splitatfraction-method/index.html b/website/generated-content/blog/splitatfraction-method/index.html
index 2d7f21e..baa4738 100644
--- a/website/generated-content/blog/splitatfraction-method/index.html
+++ b/website/generated-content/blog/splitatfraction-method/index.html
@@ -18,11 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="body__contained center no__padding content-up"><article class=post itemscope itemtype=http://schema.org/BlogPosting><div class=post-content><div class=post-info><p>blog</p><p>2016/05/18</p></div><header class=post-header><h2 itemprop="name headline">Dynamic work rebalancing for Beam</h1><div class=post-info><span>Dan Halperin</span></div></header><div class="arrow-list header-top-margin" itemprop=articleBody><p>This [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="body__contained center no__padding content-up"><article class=post itemscope itemtype=http://schema.org/BlogPosting><div class=post-content><div class=post-info><p>blog</p><p>2016/05/18</p></div><header class=post-header><h2 itemprop="name headline">Dynamic work rebalancing for Beam</h1><div class=post-info><span>Dan Halperin</span></div></header><div class="arrow-list header-top-margin" itemprop=articleBody><p>This [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/splittable-do-fn-is-available/index.html b/website/generated-content/blog/splittable-do-fn-is-available/index.html
index fe02a3c..f793766 100644
--- a/website/generated-content/blog/splittable-do-fn-is-available/index.html
+++ b/website/generated-content/blog/splittable-do-fn-is-available/index.html
@@ -52,11 +52,7 @@ implementation to a splittable DoFn.</li><li><a href=https://github.com/apache/b
 A wrapper which converts an existing <a href=https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/io/UnboundedSource.html>UnboundedSource</a>
 implementation to a splittable DoFn.</li></ul><p><strong>Python Examples</strong></p><ul><li><a href=https://github.com/apache/beam/blob/571338b0cc96e2e80f23620fe86de5c92dffaccc/sdks/python/apache_beam/io/iobase.py#L1375>BoundedSourceWrapper</a>:
 A wrapper which converts an existing <a href=https://beam.apache.org/releases/pydoc/current/apache_beam.io.iobase.html#apache_beam.io.iobase.BoundedSource>BoundedSource</a>
-implementation to a splittable DoFn.</li></ul><p><strong>Go Examples</strong></p><ul><li><a href=https://github.com/apache/beam/blob/ce190e11332469ea59b6c9acf16ee7c673ccefdd/sdks/go/pkg/beam/io/textio/sdf.go#L40>textio.ReadSdf</a> implements reading from text files using a splittable DoFn.</li></ul></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+implementation to a splittable DoFn.</li></ul><p><strong>Go Examples</strong></p><ul><li><a href=https://github.com/apache/beam/blob/ce190e11332469ea59b6c9acf16ee7c673ccefdd/sdks/go/pkg/beam/io/textio/sdf.go#L40>textio.ReadSdf</a> implements reading from text files using a splittable DoFn.</li></ul></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info pos [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/splittable-do-fn/index.html b/website/generated-content/blog/splittable-do-fn/index.html
index b8c1e96..304471f 100644
--- a/website/generated-content/blog/splittable-do-fn/index.html
+++ b/website/generated-content/blog/splittable-do-fn/index.html
@@ -52,20 +52,20 @@ result, the pipeline can suffer from poor performance due to stragglers.</p></li
 with a regular <code>DoFn</code>, because it would need to output an infinite number of
 records per each input element <code>topic, partition</code> <em>(<a href=/blog/2017/02/13/stateful-processing.html>stateful processing</a> comes close, but it
 has other limitations that make it insufficient for this task</em>).</p></li></ul><h2 id=beam-source-api>Beam Source API</h2><p>Apache Beam historically provides a Source API
-(<a href=https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/BoundedSource.html>BoundedSource</a>
+(<a href=https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/BoundedSource.html>BoundedSource</a>
 and
-<a href=https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/UnboundedSource.html>UnboundedSource</a>) which does
+<a href=https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/UnboundedSource.html>UnboundedSource</a>) which does
 not have these limitations and allows development of efficient data sources for
 batch and streaming systems. Pipelines use this API via the
-<a href=https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/Read.html><code>Read.from(Source)</code></a> built-in <code>PTransform</code>.</p><p>The Source API is largely similar to that of most other data processing
+<a href=https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/Read.html><code>Read.from(Source)</code></a> built-in <code>PTransform</code>.</p><p>The Source API is largely similar to that of most other data processing
 frameworks, and allows the system to read data in parallel using multiple
 workers, as well as checkpoint and resume reading from an unbounded data source.
 Additionally, the Beam
-<a href=https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/BoundedSource.html><code>BoundedSource</code></a>
+<a href=https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/BoundedSource.html><code>BoundedSource</code></a>
 API provides advanced features such as progress reporting and <a href=/blog/2016/05/18/splitAtFraction-method.html>dynamic
 rebalancing</a>
 (which together enable autoscaling), and
-<a href=https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/UnboundedSource.html><code>UnboundedSource</code></a> supports
+<a href=https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/UnboundedSource.html><code>UnboundedSource</code></a> supports
 reporting the source&rsquo;s watermark and backlog <em>(until SDF, we believed that
 &ldquo;batch&rdquo; and &ldquo;streaming&rdquo; data sources are fundamentally different and thus
 require fundamentally different APIs)</em>.</p><p>Unfortunately, these features come at a price. Coding against the Source API
@@ -324,11 +324,7 @@ ecosystem more modular:</p><ul><li><p>Use the currently available SDF-based IO c
 bugs, and suggest or implement improvements.</p></li><li><p>Propose or develop a new IO connector based on SDF.</p></li><li><p>Implement or improve support for SDF in your favorite runner.</p></li><li><p>Subscribe and contribute to the occasional SDF-related discussions on
 <a href=mailto:user@beam.apache.org>user@beam.apache.org</a> (mailing list for Beam
 users) and <a href=mailto:dev@beam.apache.org>dev@beam.apache.org</a> (mailing list for
-Beam developers)!</p></li></ul></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/02/22</ [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+Beam developers)!</p></li></ul></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blo [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/stateful-processing/index.html b/website/generated-content/blog/stateful-processing/index.html
index eba7c49..6938361 100644
--- a/website/generated-content/blog/stateful-processing/index.html
+++ b/website/generated-content/blog/stateful-processing/index.html
@@ -400,11 +400,7 @@ matrix</a> to
 see the level of support for this new model feature on your favorite
 backend(s).</p><p>And please do join the community at
 <a href=/get-started/support>user@beam.apache.org</a>. We&rsquo;d love to
-hear from you.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/02/22</p></div><div  [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+hear from you.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/ [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/strata-hadoop-world-and-beam/index.html b/website/generated-content/blog/strata-hadoop-world-and-beam/index.html
index 5486651..792a543 100644
--- a/website/generated-content/blog/strata-hadoop-world-and-beam/index.html
+++ b/website/generated-content/blog/strata-hadoop-world-and-beam/index.html
@@ -19,11 +19,7 @@ function addPlaceholder(){$('input:text').attr('placeholder',"What are you looki
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
 function openMenu(){addPlaceholder();blockScroll();}</script><div class="body__contained center no__padding content-up"><article class=post itemscope itemtype=http://schema.org/BlogPosting><div class=post-content><div class=post-info><p>beam & update
-       </p><p>2016/10/11</p></div><header class=post-header><h2 itemprop="name headline">Strata+Hadoop World and Beam</h1><div class=post-info><span>Jesse Anderson [<a href=https://twitter.com/jessetanderson>@jessetanderson</a>]</span></div></header><div class="arrow-list header-top-margin" itemprop=articleBody><p>Tyler Akidau and I gave a <a href=https://conferences.oreilly.com/strata/hadoop-big-data-ny/public/schedule/detail/52129>three-hour tutorial</a> on Apache Beam at Strata+Hadoop [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+       </p><p>2016/10/11</p></div><header class=post-header><h2 itemprop="name headline">Strata+Hadoop World and Beam</h1><div class=post-info><span>Jesse Anderson [<a href=https://twitter.com/jessetanderson>@jessetanderson</a>]</span></div></header><div class="arrow-list header-top-margin" itemprop=articleBody><p>Tyler Akidau and I gave a <a href=https://conferences.oreilly.com/strata/hadoop-big-data-ny/public/schedule/detail/52129>three-hour tutorial</a> on Apache Beam at Strata+Hadoop [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/test-stream/index.html b/website/generated-content/blog/test-stream/index.html
index 5d2fa50..3ccb18b 100644
--- a/website/generated-content/blog/test-stream/index.html
+++ b/website/generated-content/blog/test-stream/index.html
@@ -55,7 +55,7 @@ configured triggering and allowed lateness of the pipeline. The expected outputs
 of the LeaderBoard pipeline vary depending on when elements arrive in relation
 to the watermark and the progress of processing time, which could not previously
 be controlled within a test.</p><h2 id=writing-deterministic-tests-to-emulate-nondeterminism>Writing Deterministic Tests to Emulate Nondeterminism</h2><p>The Beam testing infrastructure provides the
-<a href=https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/testing/PAssert.html>PAssert</a>
+<a href=https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/testing/PAssert.html>PAssert</a>
 methods, which assert properties about the contents of a PCollection from within
 a pipeline. We have expanded this infrastructure to include
 <a href=https://github.com/apache/beam/blob/master/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/TestStream.java>TestStream</a>,
@@ -199,11 +199,7 @@ TestStream.</p><h2 id=summary>Summary</h2><p>The addition of TestStream alongsid
 has enabled the testing of Pipelines which produce speculative and late panes.
 This permits tests for all styles of pipeline to be expressed directly within the
 Java SDK. If you have questions or comments, we’d love to hear them on the
-<a href=/get-started/support/>mailing lists</a>.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div class="post-info post-category"><p>bl [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+<a href=/get-started/support/>mailing lists</a>.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info  [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/timely-processing/index.html b/website/generated-content/blog/timely-processing/index.html
index 42fe3c4..254c85c 100644
--- a/website/generated-content/blog/timely-processing/index.html
+++ b/website/generated-content/blog/timely-processing/index.html
@@ -378,11 +378,7 @@ you, then great! If not, we want to hear about it. Since this is a new feature,
 please check the <a href=/documentation/runners/capability-matrix/>capability matrix</a> to see the level of support for
 your preferred Beam backend(s).</p><p>And please do join the Beam community at
 <a href=/get-started/support>user@beam.apache.org</a> and follow
-<a href=https://twitter.com/ApacheBeam>@ApacheBeam</a> on Twitter.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div class="post-info po [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+<a href=https://twitter.com/ApacheBeam>@ApacheBeam</a> on Twitter.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/validate-beam-release/index.html b/website/generated-content/blog/validate-beam-release/index.html
index 9fb245c..718d0dd 100644
--- a/website/generated-content/blog/validate-beam-release/index.html
+++ b/website/generated-content/blog/validate-beam-release/index.html
@@ -62,11 +62,7 @@ the latest available version:</p><pre><code>apache-beam&lt;=3.0.0
 environment:</p><pre><code>pip install --pre apache-beam
 </code></pre><p>With that, the Beam version in your environment will be the latest release
 candidate, and you can go ahead and run your tests to verify that everything
-works well.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/29</p></div><div class=post><p class=post-title>Apache Beam 2.29.0</p><p class=post-info>Kenneth Knowles</p></div></a><a class=post-card href=/blog/beam-2.28.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/02/22</p></div><div cla [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+works well.</p></div></div><div class=blog-content><h2>Latest from the blog</h2></div><div class=posts-list><a class=post-card href=/blog/validate-beam-release/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/06/08</p></div><div class=post><p class=post-title>How to validate a Beam Release</p><p class=post-info>Pablo Estrada</p></div></a><a class=post-card href=/blog/beam-2.29.0/ data-categories=blog><div class="post-info post-category"><p>blog</p><p>2021/04/ [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/blog/where-is-my-pcollection-dot-map/index.html b/website/generated-content/blog/where-is-my-pcollection-dot-map/index.html
index 86c81c6..dc33332 100644
--- a/website/generated-content/blog/where-is-my-pcollection-dot-map/index.html
+++ b/website/generated-content/blog/where-is-my-pcollection-dot-map/index.html
@@ -41,11 +41,7 @@ PCollection&lt;O&gt; output = input
     .apply(ParDo.of(...))
     .apply(ExternalLibrary.doStuff(externalLibArgs));
     &nbsp;
-    </pre></td></tr></table><h2 id=configurability>Configurability</h2><p>It makes for a fluent style to let values (PCollections) be the objects passed around and manipulated (i.e. the handles to the deferred execution graph), but it is the operations themselves that need to be composable, configurable, and extendable. Using PCollection methods for the operations doesn&rsquo;t scale well here, especially in a language without default or keyword arguments. For example, a ParDo operation  [...]
-                    
-      </p><p>2021/01/15</p></div><div class=post><p class=post-title>Example to ingest data from Apache Kafka to Google Cloud Pub/Sub</p><p class=post-info>Artur Khanin,
-Ilya Kozyrev &
-Alex Kosolapov</p></div></a></div></article></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols_ [...]
+    </pre></td></tr></table><h2 id=configurability>Configurability</h2><p>It makes for a fluent style to let values (PCollections) be the objects passed around and manipulated (i.e. the handles to the deferred execution graph), but it is the operations themselves that need to be composable, configurable, and extendable. Using PCollection methods for the operations doesn&rsquo;t scale well here, especially in a language without default or keyword arguments. For example, a ParDo operation  [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/categories/blog/index.xml b/website/generated-content/categories/blog/index.xml
index b3b1f45..e6d77a2 100644
--- a/website/generated-content/categories/blog/index.xml
+++ b/website/generated-content/categories/blog/index.xml
@@ -1,4 +1,66 @@
-<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Apache Beam – blog</title><link>/categories/blog/</link><description>Recent content in blog on Apache Beam</description><generator>Hugo -- gohugo.io</generator><lastBuildDate>Tue, 08 Jun 2021 00:00:01 -0800</lastBuildDate><atom:link href="/categories/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Blog: How to validate a Beam Release</title><link>/blog/validate-beam-release/</link><pubDate>Tue [...]
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Apache Beam – blog</title><link>/categories/blog/</link><description>Recent content in blog on Apache Beam</description><generator>Hugo -- gohugo.io</generator><lastBuildDate>Wed, 09 Jun 2021 09:00:00 -0700</lastBuildDate><atom:link href="/categories/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Blog: Apache Beam 2.30.0</title><link>/blog/beam-2.30.0/</link><pubDate>Wed, 09 Jun 2021 09:00:00 [...]
+&lt;!--
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+&lt;p>We are happy to present the new 2.30.0 release of Beam.
+This release includes both improvements and new functionality.
+See the &lt;a href="/get-started/downloads/#2300-2021-06-09">download page&lt;/a> for this release.&lt;/p>
+&lt;p>For more information on changes in 2.30.0, check out the &lt;a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12319527&amp;amp;version=12349978">detailed release notes&lt;/a>.&lt;/p>
+&lt;h2 id="highlights">Highlights&lt;/h2>
+&lt;ul>
+&lt;li>Legacy Read transform (non-SDF based Read) is used by default for non-FnAPI opensource runners. Use &lt;code>use_sdf_read&lt;/code> experimental flag to re-enable SDF based Read transforms (&lt;a href="https://issues.apache.org/jira/browse/BEAM-10670">BEAM-10670&lt;/a>)&lt;/li>
+&lt;li>Upgraded vendored gRPC dependency to 1.36.0 (&lt;a href="https://issues.apache.org/jira/browse/BEAM-11227">BEAM-11227&lt;/a>)&lt;/li>
+&lt;/ul>
+&lt;h3 id="ios">I/Os&lt;/h3>
+&lt;ul>
+&lt;li>Fixed the issue that WriteToBigQuery with batch file loads does not respect schema update options when there are multiple load jobs (&lt;a href="https://issues.apache.org/jira/browse/BEAM-11277">BEAM-11277&lt;/a>)&lt;/li>
+&lt;li>Fixed the issue that the job didn&amp;rsquo;t properly retry since BigQuery sink swallows HttpErrors when performing streaming inserts (&lt;a href="https://issues.apache.org/jira/browse/BEAM-12362">BEAM-12362&lt;/a>)&lt;/li>
+&lt;/ul>
+&lt;h3 id="new-features--improvements">New Features / Improvements&lt;/h3>
+&lt;ul>
+&lt;li>Added capability to declare resource hints in Java and Python SDKs (&lt;a href="https://issues.apache.org/jira/browse/BEAM-2085">BEAM-2085&lt;/a>)&lt;/li>
+&lt;li>Added Spanner IO Performance tests for read and write in Python SDK (&lt;a href="https://issues.apache.org/jira/browse/BEAM-10029">BEAM-10029&lt;/a>)&lt;/li>
+&lt;li>Added support for accessing GCP PubSub Message ordering keys, message IDs and message publish timestamp in Python SDK (&lt;a href="https://issues.apache.org/jira/browse/BEAM-7819">BEAM-7819&lt;/a>)&lt;/li>
+&lt;li>DataFrame API: Added support for collecting DataFrame objects in interactive Beam (&lt;a href="https://issues.apache.org/jira/browse/BEAM-11855">BEAM-11855&lt;/a>)&lt;/li>
+&lt;li>DataFrame API: Added &lt;a href="https://github.com/apache/beam/tree/master/sdks/python/apache_beam/examples/dataframe">apache_beam.examples.dataframe&lt;/a> module (&lt;a href="https://issues.apache.org/jira/browse/BEAM-12024">BEAM-12024&lt;/a>)&lt;/li>
+&lt;li>Upgraded the GCP Libraries BOM version to 20.0.0 (&lt;a href="https://issues.apache.org/jira/browse/BEAM-11205">BEAM-11205&lt;/a>). For Google Cloud client library versions set by this BOM, see &lt;a href="https://storage.googleapis.com/cloud-opensource-java-dashboard/com.google.cloud/libraries-bom/20.0.0/artifact_details.html">this table&lt;/a>&lt;/li>
+&lt;li>Added &lt;code>sdkContainerImage&lt;/code> flag to (eventually) replace &lt;code>workerHarnessContainerImage&lt;/code> (&lt;a href="https://issues.apache.org/jira/browse/BEAM-12212">BEAM-12212&lt;/a>)&lt;/li>
+&lt;li>Added support for Dataflow update when schemas are used (&lt;a href="https://issues.apache.org/jira/browse/BEAM-12198">BEAM-12198&lt;/a>)&lt;/li>
+&lt;li>Fixed the issue that &lt;code>ZipFiles.zipDirectory&lt;/code> leaks native JVM memory (&lt;a href="https://issues.apache.org/jira/browse/BEAM-12220">BEAM-12220&lt;/a>)&lt;/li>
+&lt;li>Fixed the issue that &lt;code>Reshuffle.withNumBuckets&lt;/code> creates &lt;code>(N*2)-1&lt;/code> buckets (&lt;a href="https://issues.apache.org/jira/browse/BEAM-12361">BEAM-12361&lt;/a>)&lt;/li>
+&lt;/ul>
+&lt;h3 id="breaking-changes">Breaking Changes&lt;/h3>
+&lt;ul>
+&lt;li>Drop support for Flink 1.8 and 1.9 (&lt;a href="https://issues.apache.org/jira/browse/BEAM-11948">BEAM-11948&lt;/a>)&lt;/li>
+&lt;li>MongoDbIO: Read.withFilter() and Read.withProjection() are removed since they are deprecated since Beam 2.12.0 (&lt;a href="https://issues.apache.org/jira/browse/BEAM-12217">BEAM-12217&lt;/a>)&lt;/li>
+&lt;li>RedisIO.readAll() was removed since it was deprecated since Beam 2.13.0. Please use RedisIO.readKeyPatterns() for the equivalent functionality (&lt;a href="https://issues.apache.org/jira/browse/BEAM-12214">BEAM-12214&lt;/a>)&lt;/li>
+&lt;li>MqttIO.create() with clientId constructor removed because it was deprecated since Beam 2.13.0 (&lt;a href="https://issues.apache.org/jira/browse/BEAM-12216">BEAM-12216&lt;/a>)&lt;/li>
+&lt;/ul>
+&lt;h3 id="known-issues">Known Issues&lt;/h3>
+&lt;ul>
+&lt;li>See a full list of open &lt;a href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20BEAM%20AND%20affectedVersion%20%3D%202.30.0%20ORDER%20BY%20priority%20DESC%2C%20updated%20DESC">issues that affect&lt;/a> this version.&lt;/li>
+&lt;/ul>
+&lt;h2 id="list-of-contributors">List of Contributors&lt;/h2>
+&lt;p>According to &lt;code>git shortlog&lt;/code>, the following people contributed to the 2.30.0 release. Thank you to all contributors!&lt;/p>
+&lt;p>Ahmet Altay, Alex Amato, Alexey Romanenko, Anant Damle, Andreas Bergmeier, Andrew Pilloud, Ankur Goenka,
+Anup D, Artur Khanin, Benjamin Gonzalez, Bipin Upadhyaya, Boyuan Zhang, Brian Hulette, Bulat Shakirzyanov,
+Chamikara Jayalath, Chun Yang, Daniel Kulp, Daniel Oliveira, David Cavazos, Elliotte Rusty Harold, Emily Ye,
+Eric Roshan-Eisner, Evan Galpin, Fabien Caylus, Fernando Morales, Heejong Lee, Iñigo San Jose Visiers,
+Isidro Martínez, Ismaël Mejía, Ke Wu, Kenneth Knowles, KevinGG, Kyle Weaver, Ludovic Post, MATTHEW Ouyang (LCL),
+Mackenzie Clark, Masato Nakamura, Matthias Baetens, Max, Nicholas Azar, Ning Kang, Pablo Estrada, Patrick McCaffrey,
+Quentin Sommer, Reuven Lax, Robert Bradshaw, Robert Burke, Rui Wang, Sam Rohde, Sam Whittle, Shoaib Zafar,
+Siyuan Chen, Sruthi Sree Kumar, Steve Niemitz, Sylvain Veyrié, Tomo Suzuki, Udi Meiri, Valentyn Tymofieiev,
+Vitaly Terentyev, Wenbing, Xinyu Liu, Yichi Zhang, Yifan Mai, Yueyang Qiu, Yunqing Zhou, ajo thomas, brucearctor,
+dmkozh, dpcollins-google, emily, jordan-moore, kileys, lostluck, masahitojp, roger-mike, sychen, tvalentyn,
+vachan-shetty, yoshiki.obata&lt;/p></description></item><item><title>Blog: How to validate a Beam Release</title><link>/blog/validate-beam-release/</link><pubDate>Tue, 08 Jun 2021 00:00:01 -0800</pubDate><guid>/blog/validate-beam-release/</guid><description>
 &lt;!--
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
@@ -3509,7 +3571,7 @@ limitations under the License.
 &lt;/td>
 &lt;td>Local&lt;br>(Using the &lt;code>file://&lt;/code> URI)
 &lt;/td>
-&lt;td>&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/TextIO.html">TextIO&lt;/a>
+&lt;td>&lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/TextIO.html">TextIO&lt;/a>
 &lt;/td>
 &lt;td>&lt;a href="https://spark.apache.org/docs/latest/api/java/org/apache/spark/streaming/StreamingContext.html#textFileStream-java.lang.String-">textFileStream&lt;/a>&lt;br>(Spark treats most Unix systems as HDFS-compatible, but the location should be accessible from all nodes)
 &lt;/td>
@@ -3517,7 +3579,7 @@ limitations under the License.
 &lt;tr>
 &lt;td>HDFS&lt;br>(Using the &lt;code>hdfs://&lt;/code> URI)
 &lt;/td>
-&lt;td>&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/FileIO.html">FileIO&lt;/a> + &lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/hdfs/HadoopFileSystemOptions.html">HadoopFileSystemOptions&lt;/a>
+&lt;td>&lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/FileIO.html">FileIO&lt;/a> + &lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/hdfs/HadoopFileSystemOptions.html">HadoopFileSystemOptions&lt;/a>
 &lt;/td>
 &lt;td>&lt;a href="https://spark.apache.org/docs/latest/api/java/org/apache/spark/streaming/util/HdfsUtils.html">HdfsUtils&lt;/a>
 &lt;/td>
@@ -3527,7 +3589,7 @@ limitations under the License.
 &lt;/td>
 &lt;td>Cloud Storage&lt;br>(Using the &lt;code>gs://&lt;/code> URI)
 &lt;/td>
-&lt;td>&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/FileIO.html">FileIO&lt;/a> + &lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/extensions/gcp/options/GcsOptions.html">GcsOptions&lt;/a>
+&lt;td>&lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/FileIO.html">FileIO&lt;/a> + &lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/extensions/gcp/options/GcsOptions.html">GcsOptions&lt;/a>
 &lt;/td>
 &lt;td rowspan="2" >&lt;a href="https://spark.apache.org/docs/latest/api/java/org/apache/spark/SparkContext.html#hadoopConfiguration--">hadoopConfiguration&lt;/a>
 and &lt;a href="https://spark.apache.org/docs/latest/api/java/org/apache/spark/streaming/StreamingContext.html#textFileStream-java.lang.String-">textFileStream&lt;/a>
@@ -3536,7 +3598,7 @@ and &lt;a href="https://spark.apache.org/docs/latest/api/java/org/apache/spark/s
 &lt;tr>
 &lt;td>S3&lt;br>(Using the &lt;code>s3://&lt;/code> URI)
 &lt;/td>
-&lt;td>&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/FileIO.html">FileIO&lt;/a> + &lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/aws/options/S3Options.html">S3Options&lt;/a>
+&lt;td>&lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/FileIO.html">FileIO&lt;/a> + &lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/aws/options/S3Options.html">S3Options&lt;/a>
 &lt;/td>
 &lt;/tr>
 &lt;tr>
@@ -3544,7 +3606,7 @@ and &lt;a href="https://spark.apache.org/docs/latest/api/java/org/apache/spark/s
 &lt;/td>
 &lt;td>Kafka
 &lt;/td>
-&lt;td>&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/kafka/KafkaIO.html">KafkaIO&lt;/a>
+&lt;td>&lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/kafka/KafkaIO.html">KafkaIO&lt;/a>
 &lt;/td>
 &lt;td>&lt;a href="https://spark.apache.org/docs/latest/streaming-kafka-0-10-integration.html">spark-streaming-kafka&lt;/a>
 &lt;/td>
@@ -3552,7 +3614,7 @@ and &lt;a href="https://spark.apache.org/docs/latest/api/java/org/apache/spark/s
 &lt;tr>
 &lt;td>Kinesis
 &lt;/td>
-&lt;td>&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/kinesis/KinesisIO.html">KinesisIO&lt;/a>
+&lt;td>&lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/kinesis/KinesisIO.html">KinesisIO&lt;/a>
 &lt;/td>
 &lt;td>&lt;a href="https://spark.apache.org/docs/latest/streaming-kinesis-integration.html">spark-streaming-kinesis&lt;/a>
 &lt;/td>
@@ -3560,7 +3622,7 @@ and &lt;a href="https://spark.apache.org/docs/latest/api/java/org/apache/spark/s
 &lt;tr>
 &lt;td>Cloud Pub/Sub
 &lt;/td>
-&lt;td>&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/gcp/pubsub/PubsubIO.html">PubsubIO&lt;/a>
+&lt;td>&lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/gcp/pubsub/PubsubIO.html">PubsubIO&lt;/a>
 &lt;/td>
 &lt;td>&lt;a href="https://github.com/apache/bahir/tree/master/streaming-pubsub">spark-streaming-pubsub&lt;/a> from &lt;a href="https://bahir.apache.org">Apache Bahir&lt;/a>
 &lt;/td>
@@ -3596,7 +3658,7 @@ and &lt;a href="https://spark.apache.org/docs/latest/api/java/org/apache/spark/s
 &lt;/td>
 &lt;td>Local
 &lt;/td>
-&lt;td>&lt;a href="https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.io.textio.html">io.textio&lt;/a>
+&lt;td>&lt;a href="https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.io.textio.html">io.textio&lt;/a>
 &lt;/td>
 &lt;td>&lt;a href="https://spark.apache.org/docs/latest/api/python/pyspark.streaming.html#pyspark.streaming.StreamingContext.textFileStream">textFileStream&lt;/a>
 &lt;/td>
@@ -3604,7 +3666,7 @@ and &lt;a href="https://spark.apache.org/docs/latest/api/java/org/apache/spark/s
 &lt;tr>
 &lt;td>HDFS
 &lt;/td>
-&lt;td>&lt;a href="https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.io.hadoopfilesystem.html">io.hadoopfilesystem&lt;/a>
+&lt;td>&lt;a href="https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.io.hadoopfilesystem.html">io.hadoopfilesystem&lt;/a>
 &lt;/td>
 &lt;td>&lt;a href="https://spark.apache.org/docs/latest/api/java/org/apache/spark/SparkContext.html#hadoopConfiguration--">hadoopConfiguration&lt;/a> (Access through &lt;code>sc._jsc&lt;/code> with Py4J)
 and &lt;a href="https://spark.apache.org/docs/latest/api/python/pyspark.streaming.html#pyspark.streaming.StreamingContext.textFileStream">textFileStream&lt;/a>
@@ -3615,7 +3677,7 @@ and &lt;a href="https://spark.apache.org/docs/latest/api/python/pyspark.streamin
 &lt;/td>
 &lt;td>Google Cloud Storage
 &lt;/td>
-&lt;td>&lt;a href="https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.io.gcp.gcsio.html">io.gcp.gcsio&lt;/a>
+&lt;td>&lt;a href="https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.io.gcp.gcsio.html">io.gcp.gcsio&lt;/a>
 &lt;/td>
 &lt;td rowspan="2" >&lt;a href="https://spark.apache.org/docs/latest/api/python/pyspark.streaming.html#pyspark.streaming.StreamingContext.textFileStream">textFileStream&lt;/a>
 &lt;/td>
@@ -3647,7 +3709,7 @@ and &lt;a href="https://spark.apache.org/docs/latest/api/python/pyspark.streamin
 &lt;tr>
 &lt;td>Cloud Pub/Sub
 &lt;/td>
-&lt;td>&lt;a href="https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.io.gcp.pubsub.html">io.gcp.pubsub&lt;/a>
+&lt;td>&lt;a href="https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.io.gcp.pubsub.html">io.gcp.pubsub&lt;/a>
 &lt;/td>
 &lt;td>N/A
 &lt;/td>
@@ -4543,514 +4605,4 @@ please check the &lt;a href="/documentation/runners/capability-matrix/">capabili
 your preferred Beam backend(s).&lt;/p>
 &lt;p>And please do join the Beam community at
 &lt;a href="/get-started/support">user@beam.apache.org&lt;/a> and follow
-&lt;a href="https://twitter.com/ApacheBeam">@ApacheBeam&lt;/a> on Twitter.&lt;/p></description></item><item><title>Blog: Powerful and modular IO connectors with Splittable DoFn in Apache Beam</title><link>/blog/splittable-do-fn/</link><pubDate>Wed, 16 Aug 2017 00:00:01 -0800</pubDate><guid>/blog/splittable-do-fn/</guid><description>
-&lt;!--
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-http://www.apache.org/licenses/LICENSE-2.0
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
--->
-&lt;p>One of the most important parts of the Apache Beam ecosystem is its quickly
-growing set of connectors that allow Beam pipelines to read and write data to
-various data storage systems (&amp;ldquo;IOs&amp;rdquo;). Currently, Beam ships &lt;a href="/documentation/io/built-in/">over 20 IO
-connectors&lt;/a> with many more in
-active development. As user demands for IO connectors grew, our work on
-improving the related Beam APIs (in particular, the Source API) produced an
-unexpected result: a generalization of Beam&amp;rsquo;s most basic primitive, &lt;code>DoFn&lt;/code>.&lt;/p>
-&lt;h2 id="connectors-as-mini-pipelines">Connectors as mini-pipelines&lt;/h2>
-&lt;p>One of the main reasons for this vibrant IO connector ecosystem is that
-developing a basic IO is relatively straightforward: many connector
-implementations are simply mini-pipelines (composite &lt;code>PTransform&lt;/code>s) made of the
-basic Beam &lt;code>ParDo&lt;/code> and &lt;code>GroupByKey&lt;/code> primitives. For example,
-&lt;code>ElasticsearchIO.write()&lt;/code>
-&lt;a href="https://github.com/apache/beam/blob/f7e8f886c91ea9d0b51e00331eeb4484e2f6e000/sdks/java/io/elasticsearch/src/main/java/org/apache/beam/sdk/io/elasticsearch/ElasticsearchIO.java#L783">expands&lt;/a>
-into a single &lt;code>ParDo&lt;/code> with some batching for performance; &lt;code>JdbcIO.read()&lt;/code>
-&lt;a href="https://github.com/apache/beam/blob/f7e8f886c91ea9d0b51e00331eeb4484e2f6e000/sdks/java/io/jdbc/src/main/java/org/apache/beam/sdk/io/jdbc/JdbcIO.java#L329">expands&lt;/a>
-into &lt;code>Create.of(query)&lt;/code>, a reshuffle to &lt;a href="https://cloud.google.com/dataflow/service/dataflow-service-desc#preventing-fusion">prevent
-fusion&lt;/a>,
-and &lt;code>ParDo(execute sub-query)&lt;/code>. Some IOs
-&lt;a href="https://github.com/apache/beam/blob/8503adbbc3a590cd0dc2939f6a45d335682a9442/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery/BigQueryIO.java#L1139">construct&lt;/a>
-considerably more complicated pipelines.&lt;/p>
-&lt;p>&lt;img class="center-block"
-src="/images/blog/splittable-do-fn/jdbcio-expansion.png"
-alt="Expansion of the JdbcIO.read() composite transform"
-width="600">&lt;/p>
-&lt;p>This &amp;ldquo;mini-pipeline&amp;rdquo; approach is flexible, modular, and generalizes to data
-sources that read from a dynamically computed &lt;code>PCollection&lt;/code> of locations, such
-as
-&lt;a href="https://github.com/apache/beam/blob/f7e8f886c91ea9d0b51e00331eeb4484e2f6e000/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/spanner/SpannerIO.java#L222">&lt;code>SpannerIO.readAll()&lt;/code>&lt;/a>
-which reads the results of a &lt;code>PCollection&lt;/code> of queries from Cloud Spanner,
-compared to
-&lt;a href="https://github.com/apache/beam/blob/f7e8f886c91ea9d0b51e00331eeb4484e2f6e000/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/spanner/SpannerIO.java#L318">&lt;code>SpannerIO.read()&lt;/code>&lt;/a>
-which executes a single query. We believe such dynamic data sources are a very
-useful capability, often overlooked by other data processing frameworks.&lt;/p>
-&lt;h2 id="when-pardo-and-groupbykey-are-not-enough">When ParDo and GroupByKey are not enough&lt;/h2>
-&lt;p>Despite the flexibility of &lt;code>ParDo&lt;/code>, &lt;code>GroupByKey&lt;/code> and their derivatives, in some
-cases building an efficient IO connector requires extra capabilities.&lt;/p>
-&lt;p>For example, imagine reading files using the sequence &lt;code>ParDo(filepattern → expand into files)&lt;/code>, &lt;code>ParDo(filename → read records)&lt;/code>, or reading a Kafka topic
-using &lt;code>ParDo(topic → list partitions)&lt;/code>, &lt;code>ParDo(topic, partition → read records)&lt;/code>. This approach has two big issues:&lt;/p>
-&lt;ul>
-&lt;li>
-&lt;p>In the file example, some files might be much larger than others, so the
-second &lt;code>ParDo&lt;/code> may have very long individual &lt;code>@ProcessElement&lt;/code> calls. As a
-result, the pipeline can suffer from poor performance due to stragglers.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>In the Kafka example, implementing the second &lt;code>ParDo&lt;/code> is &lt;em>simply impossible&lt;/em>
-with a regular &lt;code>DoFn&lt;/code>, because it would need to output an infinite number of
-records per each input element &lt;code>topic, partition&lt;/code> &lt;em>(&lt;a href="/blog/2017/02/13/stateful-processing.html">stateful processing&lt;/a> comes close, but it
-has other limitations that make it insufficient for this task&lt;/em>).&lt;/p>
-&lt;/li>
-&lt;/ul>
-&lt;h2 id="beam-source-api">Beam Source API&lt;/h2>
-&lt;p>Apache Beam historically provides a Source API
-(&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/BoundedSource.html">BoundedSource&lt;/a>
-and
-&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/UnboundedSource.html">UnboundedSource&lt;/a>) which does
-not have these limitations and allows development of efficient data sources for
-batch and streaming systems. Pipelines use this API via the
-&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/Read.html">&lt;code>Read.from(Source)&lt;/code>&lt;/a> built-in &lt;code>PTransform&lt;/code>.&lt;/p>
-&lt;p>The Source API is largely similar to that of most other data processing
-frameworks, and allows the system to read data in parallel using multiple
-workers, as well as checkpoint and resume reading from an unbounded data source.
-Additionally, the Beam
-&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/BoundedSource.html">&lt;code>BoundedSource&lt;/code>&lt;/a>
-API provides advanced features such as progress reporting and &lt;a href="/blog/2016/05/18/splitAtFraction-method.html">dynamic
-rebalancing&lt;/a>
-(which together enable autoscaling), and
-&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/UnboundedSource.html">&lt;code>UnboundedSource&lt;/code>&lt;/a> supports
-reporting the source&amp;rsquo;s watermark and backlog &lt;em>(until SDF, we believed that
-&amp;ldquo;batch&amp;rdquo; and &amp;ldquo;streaming&amp;rdquo; data sources are fundamentally different and thus
-require fundamentally different APIs)&lt;/em>.&lt;/p>
-&lt;p>Unfortunately, these features come at a price. Coding against the Source API
-involves a lot of boilerplate and is error-prone, and it does not compose well
-with the rest of the Beam model because a &lt;code>Source&lt;/code> can appear only at the root
-of a pipeline. For example:&lt;/p>
-&lt;ul>
-&lt;li>
-&lt;p>Using the Source API, it is not possible to read a &lt;code>PCollection&lt;/code> of
-filepatterns.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>A &lt;code>Source&lt;/code> can not read a side input, or wait on another pipeline step to
-produce the data.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>A &lt;code>Source&lt;/code> can not emit an additional output (for example, records that failed to
-parse) and so on.&lt;/p>
-&lt;/li>
-&lt;/ul>
-&lt;p>The Source API is not composable even with itself. For example, suppose Alice
-implements an unbounded &lt;code>Source&lt;/code> that watches a directory for new matching
-files, and Bob implements an unbounded &lt;code>Source&lt;/code> that tails a file. The Source
-API does not let them simply chain the sources together and obtain a &lt;code>Source&lt;/code>
-that returns new records in new log files in a directory (a very common user
-request). Instead, such a source would have to be developed mostly from
-scratch, and our experience shows that a full-featured monolithic
-implementation of such a &lt;code>Source&lt;/code> is incredibly difficult and error-prone.&lt;/p>
-&lt;p>Another class of issues with the &lt;code>Source&lt;/code> API comes from its strict
-bounded/unbounded dichotomy:&lt;/p>
-&lt;ul>
-&lt;li>
-&lt;p>It is difficult or impossible to reuse code between seemingly very similar
-bounded and unbounded sources, for example, the &lt;code>BoundedSource&lt;/code> that generates
-a sequence &lt;code>[a, b)&lt;/code> and the &lt;code>UnboundedSource&lt;/code> that generates a sequence &lt;code>[a, inf)&lt;/code> &lt;a href="https://github.com/apache/beam/blob/master/sdks/java/core/src/main/java/org/apache/beam/sdk/io/CountingSource.java">don&amp;rsquo;t share any
-code&lt;/a>
-in the Beam Java SDK.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>It is not clear how to classify the ingestion of a very large and
-continuously growing dataset. Ingesting its &amp;ldquo;already available&amp;rdquo; part seems to
-require a &lt;code>BoundedSource&lt;/code>: the runner could benefit from knowing its size, and
-could perform dynamic rebalancing. However, ingesting the continuously arriving
-new data seems to require an &lt;code>UnboundedSource&lt;/code> for providing watermarks. From
-this angle, the &lt;code>Source&lt;/code> API has &lt;a href="https://www.oreilly.com/ideas/the-world-beyond-batch-streaming-101">the same issues as Lambda
-Architecture&lt;/a>.&lt;/p>
-&lt;/li>
-&lt;/ul>
-&lt;p>About two years ago we began thinking about how to address the limitations of
-the Source API, and ended up, surprisingly, addressing the limitations of
-&lt;code>DoFn&lt;/code> instead.&lt;/p>
-&lt;h2 id="enter-splittable-dofn">Enter Splittable DoFn&lt;/h2>
-&lt;p>&lt;a href="https://s.apache.org/splittable-do-fn">Splittable DoFn&lt;/a> (SDF) is a
-generalization of &lt;code>DoFn&lt;/code> that gives it the core capabilities of &lt;code>Source&lt;/code> while
-retaining &lt;code>DoFn&lt;/code>'s syntax, flexibility, modularity, and ease of coding. As a
-result, it becomes possible to develop more powerful IO connectors than before,
-with shorter, simpler, more reusable code.&lt;/p>
-&lt;p>Note that, unlike &lt;code>Source&lt;/code>, SDF &lt;em>does not&lt;/em> have distinct bounded/unbounded APIs,
-just as regular &lt;code>DoFn&lt;/code>s don&amp;rsquo;t: there is only one API, which covers both of these
-use cases and anything in between. Thus, SDF closes the final gap in the unified
-batch/streaming programming model of Apache Beam.&lt;/p>
-&lt;p>When reading the explanation of SDF below, keep in mind the running example of a
-&lt;code>DoFn&lt;/code> that takes a filename as input and outputs the records in that file.
-People familiar with the &lt;code>Source&lt;/code> API may find it useful to think of SDF as a
-way to read a &lt;code>PCollection&lt;/code> of sources, treating the source itself as just
-another piece of data in the pipeline &lt;em>(this, in fact, was one of the early
-design iterations among the work that led to creation of SDF)&lt;/em>.&lt;/p>
-&lt;p>The two aspects where &lt;code>Source&lt;/code> has an advantage over a regular &lt;code>DoFn&lt;/code> are:&lt;/p>
-&lt;ul>
-&lt;li>
-&lt;p>&lt;strong>Splittability:&lt;/strong> applying a &lt;code>DoFn&lt;/code> to a single element is &lt;em>monolithic&lt;/em>, but
-reading from a &lt;code>Source&lt;/code> is &lt;em>non-monolithic&lt;/em>. The whole &lt;code>Source&lt;/code> doesn&amp;rsquo;t have to
-be read at once; rather, it is read in parts, called &lt;em>bundles&lt;/em>. For example, a
-large file is usually read in several bundles, each reading some sub-range of
-offsets within the file. Likewise, a Kafka topic (which, of course, can never
-be read &amp;ldquo;fully&amp;rdquo;) is read over an infinite number of bundles, each reading some
-finite number of elements.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>&lt;strong>Interaction with the runner:&lt;/strong> runners apply a &lt;code>DoFn&lt;/code> to a single element as
-a &amp;ldquo;black box&amp;rdquo;, but interact quite richly with &lt;code>Source&lt;/code>. &lt;code>Source&lt;/code> provides the
-runner with information such as its estimated size (or its generalization,
-&amp;ldquo;backlog&amp;rdquo;), progress through reading the bundle, watermarks etc. The runner
-uses this information to tune the execution and control the breakdown of the
-&lt;code>Source&lt;/code> into bundles. For example, a slowly progressing large bundle of a file
-may be &lt;a href="https://cloud.google.com/blog/big-data/2016/05/no-shard-left-behind-dynamic-work-rebalancing-in-google-cloud-dataflow">dynamically
-split&lt;/a>
-by a batch-focused runner before it becomes a straggler, and a latency-focused
-streaming runner may control how many elements it reads from a source in each
-bundle to optimize for latency vs. per-bundle overhead.&lt;/p>
-&lt;/li>
-&lt;/ul>
-&lt;h3 id="non-monolithic-element-processing-with-restrictions">Non-monolithic element processing with restrictions&lt;/h3>
-&lt;p>Splittable &lt;code>DoFn&lt;/code> supports &lt;code>Source&lt;/code>-like features by allowing the processing of
-a single element to be non-monolithic.&lt;/p>
-&lt;p>The processing of one element by an SDF is decomposed into a (potentially
-infinite) number of &lt;em>restrictions&lt;/em>, each describing some part of the work to be
-done for the whole element. The input to an SDF&amp;rsquo;s &lt;code>@ProcessElement&lt;/code> call is a
-pair of an element and a restriction (compared to a regular &lt;code>DoFn&lt;/code>, which takes
-just the element).&lt;/p>
-&lt;p>Processing of every element starts by creating an &lt;em>initial restriction&lt;/em> that
-describes the entire work, and the initial restriction is then split further
-into sub-restrictions which must logically add up to the original. For example,
-for a splittable &lt;code>DoFn&lt;/code> called &lt;code>ReadFn&lt;/code> that takes a filename and outputs
-records in the file, the restriction may be a pair of starting and ending byte
-offset, and &lt;code>ReadFn&lt;/code> may interpret it as &lt;em>read records whose starting offsets
-are in the given range&lt;/em>.&lt;/p>
-&lt;p>&lt;img class="center-block"
-src="/images/blog/splittable-do-fn/restrictions.png"
-alt="Specifying parts of work for an element using restrictions"
-width="600">&lt;/p>
-&lt;p>The idea of restrictions provides non-monolithic execution - the first
-ingredient for parity with &lt;code>Source&lt;/code>. The other ingredient is &lt;em>interaction with
-the runner&lt;/em>: the runner has access to the restriction of each active
-&lt;code>@ProcessElement&lt;/code> call of an SDF, can inquire about the progress of the call,
-and most importantly, can &lt;em>split&lt;/em> the restriction while it is being processed
-(hence the name &lt;em>Splittable DoFn&lt;/em>).&lt;/p>
-&lt;p>Splitting produces a &lt;em>primary&lt;/em> and &lt;em>residual&lt;/em> restriction that add up to the
-original restriction being split: the current &lt;code>@ProcessElement&lt;/code> call keeps
-processing the primary, and the residual will be processed by another
-&lt;code>@ProcessElement&lt;/code> call. For example, a runner may schedule the residual to be
-processed in parallel on another worker.&lt;/p>
-&lt;p>Splitting of a running &lt;code>@ProcessElement&lt;/code> call has two critically important uses:&lt;/p>
-&lt;ul>
-&lt;li>&lt;strong>Supporting infinite work per element.&lt;/strong> A restriction is, in general, not
-required to describe a finite amount of work. For example, reading from a Kafka
-topic starting from offset &lt;em>100&lt;/em> can be represented by the
-restriction &lt;em>[100, inf)&lt;/em>. A &lt;code>@ProcessElement&lt;/code> call processing this
-entire restriction would, of course, never complete. However, while such a call
-runs, a runner can split the restriction into a &lt;em>finite&lt;/em> primary &lt;em>[100, 150)&lt;/em>
-(letting the current call complete this part) and an &lt;em>infinite&lt;/em> residual &lt;em>[150,
-inf)&lt;/em> to be processed later, effectively checkpointing and resuming the call;
-this can be repeated forever.&lt;/li>
-&lt;/ul>
-&lt;p>&lt;img class="center-block"
-src="/images/blog/splittable-do-fn/kafka-splitting.png"
-alt="Splitting an infinite restriction into a finite primary and infinite residual"
-width="400">&lt;/p>
-&lt;ul>
-&lt;li>&lt;strong>Dynamic rebalancing.&lt;/strong> When a (typically batch-focused) runner detects that
-a &lt;code>@ProcessElement&lt;/code> call is going to take too long and become a straggler, it
-can split the restriction in some proportion so that the primary is short enough
-to not be a straggler, and can schedule the residual in parallel on another
-worker. For details, see &lt;a href="https://cloud.google.com/blog/big-data/2016/05/no-shard-left-behind-dynamic-work-rebalancing-in-google-cloud-dataflow">No Shard Left
-Behind&lt;/a>.&lt;/li>
-&lt;/ul>
-&lt;p>Logically, the execution of an SDF on an element works according to the
-following diagram, where &amp;ldquo;magic&amp;rdquo; stands for the runner-specific ability to split
-the restrictions and schedule processing of residuals.&lt;/p>
-&lt;p>&lt;img class="center-block"
-src="/images/blog/splittable-do-fn/transform-expansion.png"
-alt="Execution of an SDF - pairing with a restriction, splitting
-restrictions, processing element/restriction pairs"
-width="600">&lt;/p>
-&lt;p>This diagram emphasizes that splittability is an implementation detail of the
-particular &lt;code>DoFn&lt;/code>: a splittable &lt;code>DoFn&lt;/code> still looks like a &lt;code>DoFn&amp;lt;A, B&amp;gt;&lt;/code> to its
-user, and can be applied via a &lt;code>ParDo&lt;/code> to a &lt;code>PCollection&amp;lt;A&amp;gt;&lt;/code> producing a
-&lt;code>PCollection&amp;lt;B&amp;gt;&lt;/code>.&lt;/p>
-&lt;h3 id="which-dofns-need-to-be-splittable">Which DoFns need to be splittable&lt;/h3>
-&lt;p>Note that decomposition of an element into element/restriction pairs is not
-automatic or &amp;ldquo;magical&amp;rdquo;: SDF is a new API for &lt;em>authoring&lt;/em> a &lt;code>DoFn&lt;/code>, rather than a
-new way to &lt;em>execute&lt;/em> an existing &lt;code>DoFn&lt;/code>. When making a &lt;code>DoFn&lt;/code> splittable, the
-author needs to:&lt;/p>
-&lt;ul>
-&lt;li>
-&lt;p>Consider the structure of the work it does for every element.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>Come up with a scheme for describing parts of this work using restrictions.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>Write code for creating the initial restriction, splitting it, and executing
-an element/restriction pair.&lt;/p>
-&lt;/li>
-&lt;/ul>
-&lt;p>An overwhelming majority of &lt;code>DoFn&lt;/code>s found in user pipelines do not need to be
-made splittable: SDF is an advanced, powerful API, primarily targeting authors
-of new IO connectors &lt;em>(though it has interesting non-IO applications as well:
-see &lt;a href="https://s.apache.org/splittable-do-fn#heading=h.5cep9s8k4fxv">Non-IO examples&lt;/a>)&lt;/em>.&lt;/p>
-&lt;h3 id="execution-of-a-restriction-and-data-consistency">Execution of a restriction and data consistency&lt;/h3>
-&lt;p>One of the most important parts of the Splittable &lt;code>DoFn&lt;/code> design is related to
-how it achieves data consistency while splitting. For example, while the runner
-is preparing to split the restriction of an active &lt;code>@ProcessElement&lt;/code> call, how
-can it be sure that the call has not concurrently progressed past the point of
-splitting?&lt;/p>
-&lt;p>This is achieved by requiring the processing of a restriction to follow a
-certain pattern. We think of a restriction as a sequence of &lt;em>blocks&lt;/em> -
-elementary indivisible units of work, identified by a &lt;em>position&lt;/em>. A
-&lt;code>@ProcessElement&lt;/code> call processes the blocks one by one, first &lt;em>claiming&lt;/em> the
-block&amp;rsquo;s position to atomically check if it&amp;rsquo;s still within the range of the
-restriction, until the whole restriction is processed.&lt;/p>
-&lt;p>The diagram below illustrates this for &lt;code>ReadFn&lt;/code> (a splittable &lt;code>DoFn&lt;/code> that reads
-Avro files) processing the element &lt;code>foo.avro&lt;/code> with restriction &lt;code>[30, 70)&lt;/code>. This
-&lt;code>@ProcessElement&lt;/code> call scans the Avro file for &lt;a href="https://avro.apache.org/docs/current/spec.html#Object+Container+Files">data
-blocks&lt;/a>
-starting from offset &lt;code>30&lt;/code> and claims the position of each block in this range.
-If a block is claimed successfully, then the call outputs all records in this
-data block, otherwise, it terminates.&lt;/p>
-&lt;p>&lt;img class="center-block"
-src="/images/blog/splittable-do-fn/blocks.png"
-alt="Processing a restriction by claiming blocks inside it"
-width="400">&lt;/p>
-&lt;p>For more details, see &lt;a href="https://s.apache.org/splittable-do-fn#heading=h.vjs7pzbb7kw">Restrictions, blocks and positions&lt;/a> in the
-design proposal document.&lt;/p>
-&lt;h3 id="code-example">Code example&lt;/h3>
-&lt;p>Let us look at some examples of SDF code. The examples use the Beam Java SDK,
-which &lt;a href="https://github.com/apache/beam/blob/f7e8f886c91ea9d0b51e00331eeb4484e2f6e000/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/DoFn.java#L527">represents splittable
-&lt;code>DoFn&lt;/code>s&lt;/a>
-as part of the flexible &lt;a href="https://s.apache.org/a-new-dofn">annotation-based
-&lt;code>DoFn&lt;/code>&lt;/a> machinery, and the &lt;a href="https://s.apache.org/splittable-do-fn-python">proposed SDF syntax
-for Python&lt;/a>.&lt;/p>
-&lt;ul>
-&lt;li>
-&lt;p>A splittable &lt;code>DoFn&lt;/code> is a &lt;code>DoFn&lt;/code> - no new base class needed. Any SDF derives
-from the &lt;code>DoFn&lt;/code> class and has a &lt;code>@ProcessElement&lt;/code> method.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>The &lt;code>@ProcessElement&lt;/code> method takes an additional
-&lt;a href="https://github.com/apache/beam/blob/f7e8f886c91ea9d0b51e00331eeb4484e2f6e000/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.java">&lt;code>RestrictionTracker&lt;/code>&lt;/a>
-parameter that gives access to the current restriction in addition to the
-current element.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>An SDF needs to define a &lt;code>@GetInitialRestriction&lt;/code> method that can create a
-restriction describing the complete work for a given element.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>There are several less important optional methods, such as
-&lt;code>@SplitRestriction&lt;/code> for pre-splitting the initial restriction into several
-smaller restrictions, and a few others.&lt;/p>
-&lt;/li>
-&lt;/ul>
-&lt;p>The &amp;ldquo;Hello World&amp;rdquo; of SDF is a counter, which takes pairs &lt;em>(x, N)&lt;/em> as input and
-produces pairs &lt;em>(x, 0), (x, 1), …, (x, N-1)&lt;/em> as output.&lt;/p>
-&lt;div class='language-java snippet'>
-&lt;div class="notebook-skip code-snippet">
-&lt;a class="copy" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Copy to clipboard">
-&lt;img src="/images/copy-icon.svg"/>
-&lt;/a>
-&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="kd">class&lt;/span> &lt;span class="nc">CountFn&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">T&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="kd">extends&lt;/span> &lt;span class="n">DoFn&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">KV&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">T&lt;/span>&lt;span cl [...]
-&lt;span class="nd">@ProcessElement&lt;/span>
-&lt;span class="kd">public&lt;/span> &lt;span class="kt">void&lt;/span> &lt;span class="nf">process&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">ProcessContext&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">OffsetRangeTracker&lt;/span> &lt;span class="n">tracker&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="o">{&lt;/span>
-&lt;span class="k">for&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="kt">long&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">currentRestriction&lt;/span>&lt;span class="o">().&lt;/span>&lt;span class="na">getFrom&lt;/span>&lt;span class="o">();&lt;/span> &lt;span class="n">tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">tryClaim&lt;/span>&lt;span cla [...]
-&lt;span class="n">c&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">output&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">KV&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">of&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">c&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">element&lt;/span>&lt;span class="o">().&lt;/span>&lt;span class="na">getKey&lt;/span>&lt;span class="o">(),&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class= [...]
-&lt;span class="o">}&lt;/span>
-&lt;span class="o">}&lt;/span>
-&lt;span class="nd">@GetInitialRestriction&lt;/span>
-&lt;span class="kd">public&lt;/span> &lt;span class="n">OffsetRange&lt;/span> &lt;span class="nf">getInitialRange&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">KV&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">T&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">Long&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">element&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="o">{&lt;/span>
-&lt;span class="k">return&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">OffsetRange&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">0L&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">element&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">getValue&lt;/span>&lt;span class="o">());&lt;/span>
-&lt;span class="o">}&lt;/span>
-&lt;span class="o">}&lt;/span>
-&lt;span class="n">PCollection&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">KV&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">Long&lt;/span>&lt;span class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">input&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="err">…&lt;/span>&lt;span class="o">;&lt;/span>
-&lt;span class="n">PCollection&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">KV&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">Long&lt;/span>&lt;span class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">output&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">input&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">apply&lt;/span>&lt;span class="o">(&lt;/span>
-&lt;span class="n">ParDo&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">of&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="k">new&lt;/span> &lt;span class="n">CountFn&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">&amp;gt;());&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
-&lt;/div>
-&lt;/div>
-&lt;div class='language-py snippet'>
-&lt;div class="notebook-skip code-snippet">
-&lt;a class="copy" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Copy to clipboard">
-&lt;img src="/images/copy-icon.svg"/>
-&lt;/a>
-&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-py" data-lang="py">&lt;span class="k">class&lt;/span> &lt;span class="nc">CountFn&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">DoFn&lt;/span>&lt;span class="p">):&lt;/span>
-&lt;span class="k">def&lt;/span> &lt;span class="nf">process&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">element&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">tracker&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">DoFn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">RestrictionTrackerParam&lt;/span>&lt;span class="p">)&lt;/span>
-&lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">xrange&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="n">tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">current_restriction&lt;/span>&lt;span class="p">()):&lt;/span>
-&lt;span class="k">if&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">try_claim&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">):&lt;/span>
-&lt;span class="k">return&lt;/span>
-&lt;span class="k">yield&lt;/span> &lt;span class="n">element&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">i&lt;/span>
-&lt;span class="k">def&lt;/span> &lt;span class="nf">get_initial_restriction&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">element&lt;/span>&lt;span class="p">):&lt;/span>
-&lt;span class="k">return&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">element&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">])&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
-&lt;/div>
-&lt;/div>
-&lt;p>This short &lt;code>DoFn&lt;/code> subsumes the functionality of
-&lt;a href="https://github.com/apache/beam/blob/master/sdks/java/core/src/main/java/org/apache/beam/sdk/io/CountingSource.java">CountingSource&lt;/a>,
-but is more flexible: &lt;code>CountingSource&lt;/code> generates only one sequence specified at
-pipeline construction time, while this &lt;code>DoFn&lt;/code> can generate a dynamic family of
-sequences, one per element in the input collection (it does not matter whether
-the input collection is bounded or unbounded).&lt;/p>
-&lt;p>However, the &lt;code>Source&lt;/code>-specific capabilities of &lt;code>CountingSource&lt;/code> are still
-available in &lt;code>CountFn&lt;/code>. For example, if a sequence has a lot of elements, a
-batch-focused runner can still apply dynamic rebalancing to it and generate
-different subranges of the sequence in parallel by splitting the &lt;code>OffsetRange&lt;/code>.
-Likewise, a streaming-focused runner can use the same splitting logic to
-checkpoint and resume the generation of the sequence even if it is, for
-practical purposes, infinite (for example, when applied to a &lt;code>KV(..., Long.MAX_VALUE)&lt;/code>).&lt;/p>
-&lt;p>A slightly more complex example is the &lt;code>ReadFn&lt;/code> considered above, which reads
-data from Avro files and illustrates the idea of &lt;em>blocks&lt;/em>: we provide pseudocode
-to illustrate the approach.&lt;/p>
-&lt;div class='language-java snippet'>
-&lt;div class="notebook-skip code-snippet">
-&lt;a class="copy" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Copy to clipboard">
-&lt;img src="/images/copy-icon.svg"/>
-&lt;/a>
-&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="kd">class&lt;/span> &lt;span class="nc">ReadFn&lt;/span> &lt;span class="kd">extends&lt;/span> &lt;span class="n">DoFn&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">AvroRecord&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="o">{&lt;/span>
-&lt;span class="nd">@ProcessElement&lt;/span>
-&lt;span class="kt">void&lt;/span> &lt;span class="nf">process&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">ProcessContext&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">OffsetRangeTracker&lt;/span> &lt;span class="n">tracker&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="o">{&lt;/span>
-&lt;span class="k">try&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">AvroReader&lt;/span> &lt;span class="n">reader&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Avro&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">open&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">filename&lt;/span>&lt;span class="o">))&lt;/span> &lt;span class="o">{&lt;/span>
-&lt;span class="c1">// Seek to the first block starting at or after the start offset.
-&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="n">reader&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">seek&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">currentRestriction&lt;/span>&lt;span class="o">().&lt;/span>&lt;span class="na">getFrom&lt;/span>&lt;span class="o">());&lt;/span>
-&lt;span class="k">while&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">reader&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">readNextBlock&lt;/span>&lt;span class="o">())&lt;/span> &lt;span class="o">{&lt;/span>
-&lt;span class="c1">// Claim the position of the current Avro block
-&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="o">(!&lt;/span>&lt;span class="n">tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">tryClaim&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">reader&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">currentBlockOffset&lt;/span>&lt;span class="o">()))&lt;/span> &lt;span class="o">{&lt;/span>
-&lt;span class="c1">// Out of range of the current restriction - we&amp;#39;re done.
-&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="k">return&lt;/span>&lt;span class="o">;&lt;/span>
-&lt;span class="o">}&lt;/span>
-&lt;span class="c1">// Emit all records in this block
-&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">AvroRecord&lt;/span> &lt;span class="n">record&lt;/span> &lt;span class="o">:&lt;/span> &lt;span class="n">reader&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">currentBlock&lt;/span>&lt;span class="o">())&lt;/span> &lt;span class="o">{&lt;/span>
-&lt;span class="n">c&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">output&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">record&lt;/span>&lt;span class="o">);&lt;/span>
-&lt;span class="o">}&lt;/span>
-&lt;span class="o">}&lt;/span>
-&lt;span class="o">}&lt;/span>
-&lt;span class="o">}&lt;/span>
-&lt;span class="nd">@GetInitialRestriction&lt;/span>
-&lt;span class="n">OffsetRange&lt;/span> &lt;span class="nf">getInitialRestriction&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">String&lt;/span> &lt;span class="n">filename&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="o">{&lt;/span>
-&lt;span class="k">return&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">OffsetRange&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">0&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">File&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">filename&lt;/span>&lt;span class="o">).&lt;/span>&lt;span class="na">getSize&lt;/span>&lt;span class="o">());&lt;/span>
-&lt;span class="o">}&lt;/span>
-&lt;span class="o">}&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
-&lt;/div>
-&lt;/div>
-&lt;div class='language-py snippet'>
-&lt;div class="notebook-skip code-snippet">
-&lt;a class="copy" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Copy to clipboard">
-&lt;img src="/images/copy-icon.svg"/>
-&lt;/a>
-&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-py" data-lang="py">&lt;span class="k">class&lt;/span> &lt;span class="nc">AvroReader&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">DoFn&lt;/span>&lt;span class="p">):&lt;/span>
-&lt;span class="k">def&lt;/span> &lt;span class="nf">process&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">filename&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">tracker&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">DoFn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">RestrictionTrackerParam&lt;/span>&lt;span class="p">)&lt;/span>
-&lt;span class="k">with&lt;/span> &lt;span class="n">fileio&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ChannelFactory&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">filename&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nb">file&lt;/span>&lt;span class="p">:&lt;/span>
-&lt;span class="n">start&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">stop&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">current_restriction&lt;/span>&lt;span class="p">()&lt;/span>
-&lt;span class="c1"># Seek to the first block starting at or after the start offset.&lt;/span>
-&lt;span class="nb">file&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">seek&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">start&lt;/span>&lt;span class="p">)&lt;/span>
-&lt;span class="n">block&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">AvroUtils&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_next_block&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">file&lt;/span>&lt;span class="p">)&lt;/span>
-&lt;span class="k">while&lt;/span> &lt;span class="n">block&lt;/span>&lt;span class="p">:&lt;/span>
-&lt;span class="c1"># Claim the position of the current Avro block&lt;/span>
-&lt;span class="k">if&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">try_claim&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">block&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">start&lt;/span>&lt;span class="p">()):&lt;/span>
-&lt;span class="c1"># Out of range of the current restriction - we&amp;#39;re done.&lt;/span>
-&lt;span class="k">return&lt;/span>
-&lt;span class="c1"># Emit all records in this block&lt;/span>
-&lt;span class="k">for&lt;/span> &lt;span class="n">record&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">block&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">records&lt;/span>&lt;span class="p">():&lt;/span>
-&lt;span class="k">yield&lt;/span> &lt;span class="n">record&lt;/span>
-&lt;span class="n">block&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">AvroUtils&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_next_block&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">file&lt;/span>&lt;span class="p">)&lt;/span>
-&lt;span class="k">def&lt;/span> &lt;span class="nf">get_initial_restriction&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">filename&lt;/span>&lt;span class="p">):&lt;/span>
-&lt;span class="k">return&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">fileio&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ChannelFactory&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">size_in_bytes&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">filename&lt;/span>&lt;span class="p">))&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
-&lt;/div>
-&lt;/div>
-&lt;p>This hypothetical &lt;code>DoFn&lt;/code> reads records from a single Avro file. Notably missing
-is the code for expanding a filepattern: it no longer needs to be part of this
-&lt;code>DoFn&lt;/code>! Instead, the SDK includes a
-&lt;a href="https://github.com/apache/beam/blob/master/sdks/java/core/src/main/java/org/apache/beam/sdk/io/FileIO.java">FileIO.matchAll()&lt;/a>
-transform for expanding a filepattern into a &lt;code>PCollection&lt;/code> of filenames, and
-different file format IOs can reuse the same transform, reading the files with
-different &lt;code>DoFn&lt;/code>s.&lt;/p>
-&lt;p>This example demonstrates the benefits of increased modularity allowed by SDF:
-&lt;code>FileIO.matchAll()&lt;/code> supports continuous ingestion of new files in streaming
-pipelines using &lt;code>.continuously()&lt;/code>, and this functionality becomes automatically
-available to various file format IOs. For example,
-&lt;code>TextIO.read().watchForNewFiles()&lt;/code> &lt;a href="https://github.com/apache/beam/blob/3bd68ecfd7d576d78e02deb0476e549f11e1b5ef/sdks/java/core/src/main/java/org/apache/beam/sdk/io/TextIO.java#L486">uses &lt;code>FileIO.matchAll()&lt;/code> under the
-hood)&lt;/a>.&lt;/p>
-&lt;h2 id="current-status">Current status&lt;/h2>
-&lt;p>Splittable &lt;code>DoFn&lt;/code> is a major new API, and its delivery and widespread adoption
-involves a lot of work in different parts of the Apache Beam ecosystem. Some
-of that work is already complete and provides direct benefit to users via new
-IO connectors. However, a large amount of work is in progress or planned.&lt;/p>
-&lt;p>As of August 2017, SDF is available for use in the Beam Java Direct runner and
-Dataflow Streaming runner, and implementation is in progress in the Flink and
-Apex runners; see &lt;a href="/documentation/runners/capability-matrix/">capability matrix&lt;/a> for the current status. Support
-for SDF in the Python SDK is &lt;a href="https://s.apache.org/splittable-do-fn-python">in active
-development&lt;/a>.&lt;/p>
-&lt;p>Several SDF-based transforms and IO connectors are available for Beam users at
-HEAD and will be included in Beam 2.2.0. &lt;code>TextIO&lt;/code> and &lt;code>AvroIO&lt;/code> finally provide
-continuous ingestion of files (one of the most frequently requested features)
-via &lt;code>.watchForNewFiles()&lt;/code> which is backed by the utility transforms
-&lt;code>FileIO.matchAll().continuously()&lt;/code> and the more general
-&lt;a href="https://github.com/apache/beam/blob/f7e8f886c91ea9d0b51e00331eeb4484e2f6e000/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/Watch.java">&lt;code>Watch.growthOf()&lt;/code>&lt;/a>.
-These utility transforms are also independently useful for &amp;ldquo;power user&amp;rdquo; use
-cases.&lt;/p>
-&lt;p>To enable more flexible use cases for IOs currently based on the Source API, we
-will change them to use SDF. This transition is &lt;a href="https://s.apache.org/textio-sdf">pioneered by
-TextIO&lt;/a> and involves temporarily &lt;a href="https://s.apache.org/sdf-via-source">executing SDF
-via the Source API&lt;/a> to support runners
-lacking the ability to run SDF directly.&lt;/p>
-&lt;p>In addition to enabling new IOs, work on SDF has influenced our thinking about
-other parts of the Beam programming model:&lt;/p>
-&lt;ul>
-&lt;li>
-&lt;p>SDF unified the final remaining part of the Beam programming model that was
-not batch/streaming agnostic (the &lt;code>Source&lt;/code> API). This led us to consider use
-cases that cannot be described as purely batch or streaming (for example,
-ingesting a large amount of historical data and carrying on with more data
-arriving in real time) and to develop a &lt;a href="https://s.apache.org/beam-fn-api-progress-reporting">unified notion of &amp;ldquo;progress&amp;rdquo; and
-&amp;ldquo;backlog&amp;rdquo;&lt;/a>.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>The &lt;a href="https://s.apache.org/beam-fn-api">Fn API&lt;/a> - the foundation of Beam&amp;rsquo;s
-future support for cross-language pipelines - uses SDF as &lt;em>the only&lt;/em> concept
-representing data ingestion.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>Implementation of SDF has lead to &lt;a href="https://lists.apache.org/thread.html/86831496a08fe148e3b982cdb904f828f262c0b571543a9fed7b915d@%3Cdev.beam.apache.org%3E">formalizing pipeline termination
-semantics&lt;/a>
-and making it consistent between runners.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>SDF set a new standard for how modular IO connectors can be, inspiring
-creation of similar APIs for some non-SDF-based connectors (for example,
-&lt;code>SpannerIO.readAll()&lt;/code> and the
-&lt;a href="https://issues.apache.org/jira/browse/BEAM-2706">planned&lt;/a> &lt;code>JdbcIO.readAll()&lt;/code>).&lt;/p>
-&lt;/li>
-&lt;/ul>
-&lt;h2 id="call-to-action">Call to action&lt;/h2>
-&lt;p>Apache Beam thrives on having a large community of contributors. Here are some
-ways you can get involved in the SDF effort and help make the Beam IO connector
-ecosystem more modular:&lt;/p>
-&lt;ul>
-&lt;li>
-&lt;p>Use the currently available SDF-based IO connectors, provide feedback, file
-bugs, and suggest or implement improvements.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>Propose or develop a new IO connector based on SDF.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>Implement or improve support for SDF in your favorite runner.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>Subscribe and contribute to the occasional SDF-related discussions on
-&lt;a href="mailto:user@beam.apache.org">user@beam.apache.org&lt;/a> (mailing list for Beam
-users) and &lt;a href="mailto:dev@beam.apache.org">dev@beam.apache.org&lt;/a> (mailing list for
-Beam developers)!&lt;/p>
-&lt;/li>
-&lt;/ul></description></item></channel></rss>
\ No newline at end of file
+&lt;a href="https://twitter.com/ApacheBeam">@ApacheBeam&lt;/a> on Twitter.&lt;/p></description></item></channel></rss>
\ No newline at end of file
diff --git a/website/generated-content/categories/index.xml b/website/generated-content/categories/index.xml
index c5f4e65..b33a3d7 100644
--- a/website/generated-content/categories/index.xml
+++ b/website/generated-content/categories/index.xml
@@ -1 +1 @@
-<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Apache Beam – Categories</title><link>/categories/</link><description>Recent content in Categories on Apache Beam</description><generator>Hugo -- gohugo.io</generator><lastBuildDate>Tue, 08 Jun 2021 00:00:01 -0800</lastBuildDate><atom:link href="/categories/index.xml" rel="self" type="application/rss+xml"/></channel></rss>
\ No newline at end of file
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Apache Beam – Categories</title><link>/categories/</link><description>Recent content in Categories on Apache Beam</description><generator>Hugo -- gohugo.io</generator><lastBuildDate>Wed, 09 Jun 2021 09:00:00 -0700</lastBuildDate><atom:link href="/categories/index.xml" rel="self" type="application/rss+xml"/></channel></rss>
\ No newline at end of file
diff --git a/website/generated-content/contribute/index.xml b/website/generated-content/contribute/index.xml
index 00aad64..c24a313 100644
--- a/website/generated-content/contribute/index.xml
+++ b/website/generated-content/contribute/index.xml
@@ -2560,8 +2560,8 @@ E.g. when expanding a filepattern into files, log what the filepattern was and h
 &lt;p>Do:&lt;/p>
 &lt;ul>
 &lt;li>Generally, follow the rules of &lt;a href="https://semver.org/">semantic versioning&lt;/a>.&lt;/li>
-&lt;li>If the API of the transform is not yet stable, annotate it as &lt;code>@Experimental&lt;/code> (Java) or &lt;code>@experimental&lt;/code> (&lt;a href="https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.utils.annotations.html">Python&lt;/a>).&lt;/li>
-&lt;li>If the API deprecated, annotate it as &lt;code>@Deprecated&lt;/code> (Java) or &lt;code>@deprecated&lt;/code> (&lt;a href="https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.utils.annotations.html">Python&lt;/a>).&lt;/li>
+&lt;li>If the API of the transform is not yet stable, annotate it as &lt;code>@Experimental&lt;/code> (Java) or &lt;code>@experimental&lt;/code> (&lt;a href="https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.utils.annotations.html">Python&lt;/a>).&lt;/li>
+&lt;li>If the API deprecated, annotate it as &lt;code>@Deprecated&lt;/code> (Java) or &lt;code>@deprecated&lt;/code> (&lt;a href="https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.utils.annotations.html">Python&lt;/a>).&lt;/li>
 &lt;li>Pay attention to the stability and versioning of third-party classes exposed by the transform&amp;rsquo;s API: if they are unstable or improperly versioned (do not obey &lt;a href="https://semver.org/">semantic versioning&lt;/a>), it is better to wrap them in your own classes.&lt;/li>
 &lt;/ul>
 &lt;p>Do not:&lt;/p>
diff --git a/website/generated-content/contribute/ptransform-style-guide/index.html b/website/generated-content/contribute/ptransform-style-guide/index.html
index bfd4f02..89983a6 100644
--- a/website/generated-content/contribute/ptransform-style-guide/index.html
+++ b/website/generated-content/contribute/ptransform-style-guide/index.html
@@ -32,7 +32,7 @@ One advantage of putting a parameter into transform configuration is, it can be
 <code>catch(...) { log an error; return null or false or otherwise ignore; }</code>
 <strong>Rule of thumb: if a bundle didn&rsquo;t fail, its output must be correct and complete.</strong>
 For a user, a transform that logged an error but succeeded is silent data loss.</li></ul><h3 id=performance>Performance</h3><p>Many runners optimize chains of <code>ParDo</code>s in ways that improve performance if the <code>ParDo</code>s emit a small to moderate number of elements per input element, or have relatively cheap per-element processing (e.g. Dataflow&rsquo;s &ldquo;fusion&rdquo;), but limit parallelization if these assumptions are violated. In that case you may need a &ldquo; [...]
-E.g. when expanding a filepattern into files, log what the filepattern was and how many parts it was split into; when executing a query, log the query and log how many results it produced.</li></ul><p>Do not:</p><ul><li>Do not log at <code>INFO</code> per element or per bundle. <code>DEBUG</code>/<code>TRACE</code> may be okay because these levels are disabled by default.</li><li>Avoid logging data payloads that may contain sensitive information, or sanitize them before logging (e.g. use [...]
+E.g. when expanding a filepattern into files, log what the filepattern was and how many parts it was split into; when executing a query, log the query and log how many results it produced.</li></ul><p>Do not:</p><ul><li>Do not log at <code>INFO</code> per element or per bundle. <code>DEBUG</code>/<code>TRACE</code> may be okay because these levels are disabled by default.</li><li>Avoid logging data payloads that may contain sensitive information, or sanitize them before logging (e.g. use [...]
 Strive to make such incompatible behavior changes cause a compile error (e.g. it&rsquo;s better to introduce a new transform for a new behavior and deprecate and then delete the old one (in a new major version), than to silently change the behavior of an existing transform), or at least a runtime error.</li><li>If the behavior of the transform stays the same and you&rsquo;re merely changing implementation or API - do not change API of the transform in a way that will make a user&rsquo;s  [...]
   <span class=kd>private</span> <span class=kd>final</span> <span class=n>TupleTag</span><span class=o>&lt;</span><span class=n>Moo</span><span class=o>&gt;</span> <span class=n>mooTag</span> <span class=o>=</span> <span class=k>new</span> <span class=n>TupleTag</span><span class=o>&lt;</span><span class=n>Moo</span><span class=o>&gt;()</span> <span class=o>{};</span>
   <span class=kd>private</span> <span class=kd>final</span> <span class=n>TupleTag</span><span class=o>&lt;</span><span class=n>Blah</span><span class=o>&gt;</span> <span class=n>blahTag</span> <span class=o>=</span> <span class=k>new</span> <span class=n>TupleTag</span><span class=o>&lt;</span><span class=n>Blah</span><span class=o>&gt;()</span> <span class=o>{};</span>
diff --git a/website/generated-content/documentation/dsls/dataframes/overview/index.html b/website/generated-content/documentation/dsls/dataframes/overview/index.html
index 57ce9b3..713d9c1 100644
--- a/website/generated-content/documentation/dsls/dataframes/overview/index.html
+++ b/website/generated-content/documentation/dsls/dataframes/overview/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 
 <span class=k>with</span> <span class=n>beam</span><span class=o>.</span><span class=n>Pipeline</span><span class=p>()</span> <span class=k>as</span> <span class=n>p</span><span class=p>:</span>
   <span class=n>df</span> <span class=o>=</span> <span class=n>p</span> <span class=o>|</span> <span class=n>read_csv</span><span class=p>(</span><span class=s2>&#34;gs://apache-beam-samples/nyc_taxi/misc/sample.csv&#34;</span><span class=p>)</span>
diff --git a/website/generated-content/documentation/dsls/sql/calcite/aggregate-functions/index.html b/website/generated-content/documentation/dsls/sql/calcite/aggregate-functions/index.html
index 0489c63..07ce939 100644
--- a/website/generated-content/documentation/dsls/sql/calcite/aggregate-functions/index.html
+++ b/website/generated-content/documentation/dsls/sql/calcite/aggregate-functions/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/documentation/dsls/sql/calcite/data-types/index.html b/website/generated-content/documentation/dsls/sql/calcite/data-types/index.html
index 896003e..dfb79bd 100644
--- a/website/generated-content/documentation/dsls/sql/calcite/data-types/index.html
+++ b/website/generated-content/documentation/dsls/sql/calcite/data-types/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 including arrays, maps, and nested rows. This page documents supported
 <a href=https://calcite.apache.org/docs/reference.html#data-types>Apache Calcite data types</a> supported by Beam Calcite SQL.</p><p>In Java, these types are mapped to Java types large enough to hold the
 full range of values.</p><div class=table-wrapper><table><thead><tr><th>SQL Type</th><th>Description</th><th>Java class</th></tr></thead><tbody><tr><td>TINYINT</td><td>1 byte signed integer in range -128 to 127</td><td>java.lang.Byte</td></tr><tr><td>SMALLINT</td><td>2 byte signed integer in range -32768 to 32767</td><td>java.lang.Short</td></tr><tr><td>INTEGER</td><td>4 byte signed integer in range -2147483648 to 2147483647</td><td>java.lang.Integer</td></tr><tr><td>BIGINT</td><td>8 byt [...]
diff --git a/website/generated-content/documentation/dsls/sql/calcite/lexical-structure/index.html b/website/generated-content/documentation/dsls/sql/calcite/lexical-structure/index.html
index 82fdbe3..e87533e 100644
--- a/website/generated-content/documentation/dsls/sql/calcite/lexical-structure/index.html
+++ b/website/generated-content/documentation/dsls/sql/calcite/lexical-structure/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 <em>identifiers,</em> <em>quoted identifiers, literals</em>, <em>keywords</em>, <em>operators</em>,
 and <em>special characters</em>. Tokens can be separated by whitespace (space,
 backspace, tab, newline) or comments.</p><h2 id=identifiers>Identifiers</h2><p>Identifiers are names that are associated with columns, tables, and
diff --git a/website/generated-content/documentation/dsls/sql/calcite/overview/index.html b/website/generated-content/documentation/dsls/sql/calcite/overview/index.html
index 7f714ca..a86ff8b 100644
--- a/website/generated-content/documentation/dsls/sql/calcite/overview/index.html
+++ b/website/generated-content/documentation/dsls/sql/calcite/overview/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 big data processing with some streaming enhancements. Beam Calcite SQL is the default Beam SQL dialect.</p><p>Beam SQL has additional extensions leveraging Beam’s unified batch/streaming model and processing complex data types. You can use these extensions with all Beam SQL dialects, including Beam Calcite SQL.</p><h2 id=query-syntax>Query syntax</h2><p>Query statements scan one or more tables or expressions and return the computed result rows. For more information about query statements [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
diff --git a/website/generated-content/documentation/dsls/sql/calcite/query-syntax/index.html b/website/generated-content/documentation/dsls/sql/calcite/query-syntax/index.html
index 79d69fd..1e6ecfb 100644
--- a/website/generated-content/documentation/dsls/sql/calcite/query-syntax/index.html
+++ b/website/generated-content/documentation/dsls/sql/calcite/query-syntax/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 result rows.</p><p>Generally, the semantics of queries is standard. See the following
 sections to learn about extensions for supporting Beam&rsquo;s unified
 batch/streaming model:</p><ul><li><a href=/documentation/dsls/sql/extensions/joins>Joins</a></li><li><a href=/documentation/dsls/sql/windowing-and-triggering/>Windowing & Triggering</a></li></ul><p>The main functionality of Beam SQL is the <code>SELECT</code> statement. This is how you
diff --git a/website/generated-content/documentation/dsls/sql/calcite/scalar-functions/index.html b/website/generated-content/documentation/dsls/sql/calcite/scalar-functions/index.html
index e5af14c..16e285a 100644
--- a/website/generated-content/documentation/dsls/sql/calcite/scalar-functions/index.html
+++ b/website/generated-content/documentation/dsls/sql/calcite/scalar-functions/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/documentation/dsls/sql/extensions/create-external-table/index.html b/website/generated-content/documentation/dsls/sql/extensions/create-external-table/index.html
index a24c26d..8a84284 100644
--- a/website/generated-content/documentation/dsls/sql/extensions/create-external-table/index.html
+++ b/website/generated-content/documentation/dsls/sql/extensions/create-external-table/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 <a href=/documentation/io/built-in/>external storage system</a>.
 For some storage systems, <code>CREATE EXTERNAL TABLE</code> does not create a physical table until
 a write occurs. After the physical table exists, you can access the table with
diff --git a/website/generated-content/documentation/dsls/sql/extensions/joins/index.html b/website/generated-content/documentation/dsls/sql/extensions/joins/index.html
index be58351..43a2268 100644
--- a/website/generated-content/documentation/dsls/sql/extensions/joins/index.html
+++ b/website/generated-content/documentation/dsls/sql/extensions/joins/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 with all elements from another input. Due to the fact that both inputs are
 bounded, no windowing or triggering is involved.</p><h2 id=join-unbounded-unbounded>Unbounded JOIN Unbounded</h2><p>Standard join implementation is used. All elements from one input are matched
 with all elements from another input.</p><p><strong>Windowing and Triggering</strong></p><p>The following properties must be satisfied when joining unbounded inputs:</p><ul><li>Inputs must have compatible windows, otherwise <code>IllegalArgumentException</code>
diff --git a/website/generated-content/documentation/dsls/sql/extensions/set/index.html b/website/generated-content/documentation/dsls/sql/extensions/set/index.html
index 2e6f84a..42d7080 100644
--- a/website/generated-content/documentation/dsls/sql/extensions/set/index.html
+++ b/website/generated-content/documentation/dsls/sql/extensions/set/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 Options</a>
 via the SQL shell. These are the same Pipeline Options passed to other Beam
 applications on the command line in the <code>--&lt;option>=&lt;value></code> format.</p><h2 id=syntax>Syntax</h2><pre><code>SET option = value
diff --git a/website/generated-content/documentation/dsls/sql/extensions/user-defined-functions/index.html b/website/generated-content/documentation/dsls/sql/extensions/user-defined-functions/index.html
index b87fc21..827bda1 100644
--- a/website/generated-content/documentation/dsls/sql/extensions/user-defined-functions/index.html
+++ b/website/generated-content/documentation/dsls/sql/extensions/user-defined-functions/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 needs, they can be authored in Java and invoked in your SQL query. These
 are commonly called UDF (for scalar functions) and UDAFs (for aggregate functions).</p><h2 id=create-and-specify-a-user-defined-function-udf>Create and specify a User Defined Function (UDF)</h2><p>A UDF can be the following:</p><ul><li>Any Java method that takes zero or more scalar fields and
 returns one scalar value.</li><li>A <code>SerializableFunction</code>.</li></ul><p>Below is an example of UDF and how to use it in DSL:</p><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=cm>/**
diff --git a/website/generated-content/documentation/dsls/sql/extensions/windowing-and-triggering/index.html b/website/generated-content/documentation/dsls/sql/extensions/windowing-and-triggering/index.html
index 5339cc4..0cff3f8 100644
--- a/website/generated-content/documentation/dsls/sql/extensions/windowing-and-triggering/index.html
+++ b/website/generated-content/documentation/dsls/sql/extensions/windowing-and-triggering/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 to a <code>BeamSql</code> transform</li><li>you can use windowing extensions in your windowing query, which will override
 the windowing of your input <code>PCollections</code></li></ul><p>Triggering can only be used by setting it on your input <code>PCollections</code>; there
 are no SQL extensions for specifying triggering.</p><p>This section covers the use of SQL extensions to directly apply windowing.</p><p>Beam SQL supports windowing functions specified in <code>GROUP BY</code> clause.
diff --git a/website/generated-content/documentation/dsls/sql/overview/index.html b/website/generated-content/documentation/dsls/sql/overview/index.html
index e0cf15f..f55de40 100644
--- a/website/generated-content/documentation/dsls/sql/overview/index.html
+++ b/website/generated-content/documentation/dsls/sql/overview/index.html
@@ -18,11 +18,11 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 bounded and unbounded <code>PCollections</code> with SQL statements. Your SQL query
 is translated to a <code>PTransform</code>, an encapsulated segment of a Beam pipeline.
 You can freely mix SQL <code>PTransforms</code> and other <code>PTransforms</code> in your pipeline.</p><p>Beam SQL includes the following dialects:</p><ul><li><a href=https://calcite.apache.org>Beam Calcite SQL</a></li><li><a href=https://github.com/google/zetasql>Beam ZetaSQL</a></li></ul><p>Beam Calcite SQL is a variant of Apache Calcite, a dialect widespread in
-big data processing. Beam Calcite SQL is the default Beam SQL dialect. Beam ZetaSQL is more compatible with BigQuery, so it&rsquo;s especially useful in pipelines that <a href=https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/io/gcp/bigquery/BigQueryIO.html>write to or read from BigQuery tables</a>.</p><p>To change dialects, pass <a href=https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/extensions/sql/package-summary.html>the dialect&rsquo;s full pac [...]
+big data processing. Beam Calcite SQL is the default Beam SQL dialect. Beam ZetaSQL is more compatible with BigQuery, so it&rsquo;s especially useful in pipelines that <a href=https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/io/gcp/bigquery/BigQueryIO.html>write to or read from BigQuery tables</a>.</p><p>To change dialects, pass <a href=https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/extensions/sql/package-summary.html>the dialect&rsquo;s full pac [...]
 the type of elements that Beam SQL operates on. A <code>PCollection&lt;Row></code> plays the role of a table.</li></ul><h2 id=walkthrough>Walkthrough</h2><p>The <a href=/documentation/dsls/sql/walkthrough>SQL pipeline walkthrough</a> works through how to use Beam SQL with example code.</p><h2 id=shell>Shell</h2><p>The Beam SQL shell allows you to write pipelines as SQL queries without using the Java SDK.
 The <a href=/documentation/dsls/sql/shell>Shell page</a> describes how to work with the interactive Beam SQL shell.</p><h2 id=apache-calcite-dialect>Apache Calcite dialect</h2><p>The <a href=/documentation/dsls/sql/calcite/overview>Beam Calcite SQL overview</a> summarizes Apache Calcite operators,
 functions, syntax, and data types supported by Beam Calcite SQL.</p><h2 id=zetasql-dialect>ZetaSQL dialect</h2><p>For more information on the ZetaSQL features in Beam SQL, see the <a href=/documentation/dsls/sql/zetasql/overview>Beam ZetaSQL dialect reference</a>.</p><p>To switch to Beam ZetaSQL, configure the <a href=https://beam.apache.org/releases/javadoc/2.15.0/org/apache/beam/sdk/options/PipelineOptions.html>pipeline options</a> as follows:</p><pre><code>PipelineOptions options = ...;
diff --git a/website/generated-content/documentation/dsls/sql/shell/index.html b/website/generated-content/documentation/dsls/sql/shell/index.html
index e29d6b7..7c42fe7 100644
--- a/website/generated-content/documentation/dsls/sql/shell/index.html
+++ b/website/generated-content/documentation/dsls/sql/shell/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 
 ./sdks/java/extensions/sql/shell/build/install/shell/bin/shell
 </code></pre><p>After you run the commands, the SQL shell starts and you can type queries:</p><pre><code>Welcome to Beam SQL 2.6.0-SNAPSHOT (based on sqlline version 1.4.0)
diff --git a/website/generated-content/documentation/dsls/sql/walkthrough/index.html b/website/generated-content/documentation/dsls/sql/walkthrough/index.html
index bf76300..1eb040b 100644
--- a/website/generated-content/documentation/dsls/sql/walkthrough/index.html
+++ b/website/generated-content/documentation/dsls/sql/walkthrough/index.html
@@ -18,11 +18,11 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 be in <code>Row</code> format. A <code>Row</code> represents a single, immutable record in a Beam SQL
 <code>PCollection</code>. The names and types of the fields/columns in the row are defined
-by its associated <a href=https://beam.apache.org/releases/javadoc/2.29.0/index.html?org/apache/beam/sdk/schemas/Schema.html>Schema</a>.
-You can use the <a href=https://beam.apache.org/releases/javadoc/2.29.0/index.html?org/apache/beam/sdk/schemas/Schema.html>Schema.builder()</a> to create
+by its associated <a href=https://beam.apache.org/releases/javadoc/2.30.0/index.html?org/apache/beam/sdk/schemas/Schema.html>Schema</a>.
+You can use the <a href=https://beam.apache.org/releases/javadoc/2.30.0/index.html?org/apache/beam/sdk/schemas/Schema.html>Schema.builder()</a> to create
 <code>Schemas</code>. See <a href=/documentation/dsls/sql/data-types>Data
 Types</a> for more details on supported primitive data types.</p><p>A <code>PCollection&lt;Row></code> can be obtained multiple ways, for example:</p><ul><li><p><strong>From in-memory data</strong> (typically for unit testing).</p><p><strong>Note:</strong> you have to explicitly specify the <code>Row</code> coder. In this example we&rsquo;re doing it by calling <code>Create.of(..)</code>:</p><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=but [...]
 </span><span class=c1></span>    <span class=n>Schema</span> <span class=n>appSchema</span> <span class=o>=</span>
@@ -81,7 +81,7 @@ Types</a> for more details on supported primitive data types.</p><p>A <code>PCol
 </span><span class=c1></span>              <span class=n>c</span><span class=o>.</span><span class=na>output</span><span class=o>(</span><span class=n>appRow</span><span class=o>);</span>
             <span class=o>}</span>
           <span class=o>})).</span><span class=na>setRowSchema</span><span class=o>(</span><span class=n>appSchema</span><span class=o>);</span>
-    </code></pre></div></div></div></p></li><li><p><strong>As an output of another <code>SqlTransform</code></strong>. Details in the next section.</p></li></ul><p>Once you have a <code>PCollection&lt;Row></code> in hand, you may use <code>SqlTransform</code> to apply SQL queries to it.</p><h2 id=sqltransform>SqlTransform</h2><p><a href=https://beam.apache.org/releases/javadoc/2.29.0/index.html?org/apache/beam/sdk/extensions/sql/SqlTransform.html><code>SqlTransform.query(queryString)</co [...]
+    </code></pre></div></div></div></p></li><li><p><strong>As an output of another <code>SqlTransform</code></strong>. Details in the next section.</p></li></ul><p>Once you have a <code>PCollection&lt;Row></code> in hand, you may use <code>SqlTransform</code> to apply SQL queries to it.</p><h2 id=sqltransform>SqlTransform</h2><p><a href=https://beam.apache.org/releases/javadoc/2.30.0/index.html?org/apache/beam/sdk/extensions/sql/SqlTransform.html><code>SqlTransform.query(queryString)</co [...]
 from a string representation of the SQL query. You can apply this <code>PTransform</code>
 to either a single <code>PCollection</code> or a <code>PCollectionTuple</code> which holds multiple
 <code>PCollections</code>:</p><ul><li><p>when applying to a single <code>PCollection</code> it can be referenced via the table name <code>PCOLLECTION</code> in the query:<div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-java data-lang=java>    <span class=n>PCollection</s [...]
diff --git a/website/generated-content/documentation/dsls/sql/zetasql/aggregate-functions/index.html b/website/generated-content/documentation/dsls/sql/zetasql/aggregate-functions/index.html
index 5b48889..de37b9c 100644
--- a/website/generated-content/documentation/dsls/sql/zetasql/aggregate-functions/index.html
+++ b/website/generated-content/documentation/dsls/sql/zetasql/aggregate-functions/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 </code></pre><p><strong>Description</strong></p><p>Returns the average of non-<code>NULL</code> input values.</p><p><strong>Supported Argument Types</strong></p><p>FLOAT64. Note that, for floating point input types, the return result
 is non-deterministic, which means you might receive a different result each time
 you use this function.</p><p><strong>Returned Data Types</strong></p><ul><li>FLOAT64</li></ul><p><strong>Examples</strong></p><pre><code>SELECT AVG(x) as avg
diff --git a/website/generated-content/documentation/dsls/sql/zetasql/conditional-expressions/index.html b/website/generated-content/documentation/dsls/sql/zetasql/conditional-expressions/index.html
index 64e766f..8b1994f 100644
--- a/website/generated-content/documentation/dsls/sql/zetasql/conditional-expressions/index.html
+++ b/website/generated-content/documentation/dsls/sql/zetasql/conditional-expressions/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
   WHEN value THEN result
   [WHEN ...]
   [ELSE else_result]
diff --git a/website/generated-content/documentation/dsls/sql/zetasql/conversion-rules/index.html b/website/generated-content/documentation/dsls/sql/zetasql/conversion-rules/index.html
index e91249c..9a8b96c 100644
--- a/website/generated-content/documentation/dsls/sql/zetasql/conversion-rules/index.html
+++ b/website/generated-content/documentation/dsls/sql/zetasql/conversion-rules/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 automatically under the conditions described below.</li></ul><p>The table below summarizes all possible <code>CAST</code>s and coercions. &ldquo;Coercion To&rdquo; applies to all <em>expressions</em> of a given data type (e.g. a column).</p><div class=table-wrapper><table><thead><tr><th>From Type</th><th>CAST to</th><th>Coercion To</th></tr></thead><tbody><tr><td>INT64</td><td><span>INT64</span><br><span>FLOAT64</span><br><span>STRING</span><br></td><td><span>FLOAT64</span><br></td></tr> [...]
 </code></pre><p>Cast syntax is used in a query to indicate that the result type of an
 expression should be converted to some other type.</p><p>Example:</p><pre><code>CAST(x=1 AS STRING)
diff --git a/website/generated-content/documentation/dsls/sql/zetasql/data-types/index.html b/website/generated-content/documentation/dsls/sql/zetasql/data-types/index.html
index 3459d2b..f816ca2 100644
--- a/website/generated-content/documentation/dsls/sql/zetasql/data-types/index.html
+++ b/website/generated-content/documentation/dsls/sql/zetasql/data-types/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 each property applies to:</p><div class=table-wrapper><table><thead><tr><th>Property</th><th>Description</th><th>Applies To</th></tr></thead><tbody><tr><td>Nullable</td><td nowrap><code>NULL</code> is a valid value.</td><td>All data types, with the following exceptions:<ul><li>ARRAYs cannot be <code>NULL</code>.</li><li><code>NULL ARRAY</code> elements cannot persist to a table.</li><li>Queries cannot handle <code>NULL ARRAY</code> elements.</li></ul></td></tr><tr><td>Orderable</td><td n [...]
 Field names are ignored. Less than and greater than comparisons are not
 supported.</p><p><br><br><br><br>All types that support comparisons
diff --git a/website/generated-content/documentation/dsls/sql/zetasql/lexical/index.html b/website/generated-content/documentation/dsls/sql/zetasql/lexical/index.html
index 4da7ea0..3c13902 100644
--- a/website/generated-content/documentation/dsls/sql/zetasql/lexical/index.html
+++ b/website/generated-content/documentation/dsls/sql/zetasql/lexical/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 <em>identifiers,</em> <em>quoted identifiers, literals</em>, <em>keywords</em>, <em>operators</em>, and
 <em>special characters</em>. Tokens can be separated by whitespace (space, backspace,
 tab, newline) or comments.</p><p><a id=identifiers></a></p><h2 id=identifiers>Identifiers</h2><p>Identifiers are names that are associated with columns, tables, and other
diff --git a/website/generated-content/documentation/dsls/sql/zetasql/math-functions/index.html b/website/generated-content/documentation/dsls/sql/zetasql/math-functions/index.html
index 97bcd2c..2c4e21f 100644
--- a/website/generated-content/documentation/dsls/sql/zetasql/math-functions/index.html
+++ b/website/generated-content/documentation/dsls/sql/zetasql/math-functions/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 </code></pre><p><strong>Description</strong></p><p>Modulo function: returns the remainder of the division of X by Y. Returned value
 has the same sign as X.</p><h2 id=ceil>CEIL</h2><pre><code>CEIL(X)
 </code></pre><p><strong>Description</strong></p><p>Returns the smallest integral value (with FLOAT64
diff --git a/website/generated-content/documentation/dsls/sql/zetasql/operators/index.html b/website/generated-content/documentation/dsls/sql/zetasql/operators/index.html
index ae42086..98c3ddc 100644
--- a/website/generated-content/documentation/dsls/sql/zetasql/operators/index.html
+++ b/website/generated-content/documentation/dsls/sql/zetasql/operators/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 function call syntax. An operator manipulates any number of data inputs, also
 called operands, and returns a result.</p><p>Common conventions:</p><ul><li>Unless otherwise specified, all operators return <code>NULL</code> when one of the
 operands is <code>NULL</code>.</li></ul><p>The following table lists all supported operators from highest to
diff --git a/website/generated-content/documentation/dsls/sql/zetasql/overview/index.html b/website/generated-content/documentation/dsls/sql/zetasql/overview/index.html
index eb1d1c5..0838714 100644
--- a/website/generated-content/documentation/dsls/sql/zetasql/overview/index.html
+++ b/website/generated-content/documentation/dsls/sql/zetasql/overview/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/documentation/dsls/sql/zetasql/query-syntax/index.html b/website/generated-content/documentation/dsls/sql/zetasql/query-syntax/index.html
index 51f84e6..fd61de4 100644
--- a/website/generated-content/documentation/dsls/sql/zetasql/query-syntax/index.html
+++ b/website/generated-content/documentation/dsls/sql/zetasql/query-syntax/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 the computed result rows.</p><h2 id=sql-syntax>SQL Syntax</h2><pre>
 <span class=var>query_statement</span>:
     <span class=var>query_expr</span>
diff --git a/website/generated-content/documentation/dsls/sql/zetasql/string-functions/index.html b/website/generated-content/documentation/dsls/sql/zetasql/string-functions/index.html
index 96d1bd7..699d4bf 100644
--- a/website/generated-content/documentation/dsls/sql/zetasql/string-functions/index.html
+++ b/website/generated-content/documentation/dsls/sql/zetasql/string-functions/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 canonical equivalence.</p><div class=table-wrapper><table><thead><tr><th>Operator syntax</th><th>Description</th></tr></thead><tbody><tr><td><a href=#char_length>CHAR_LENGTH(value)</a></td><td>Returns the length of the string in characters</td></tr><tr><td><a href=#character_length>CHARACTER_LENGTH(value)</a></td><td>Synonym for CHAR_LENGTH</td></tr><tr><td><a href=#concat>CONCAT(value1[, &mldr;])</a></td><td>Concatenates up to five values into a single result</td></tr><tr><td><a href=#e [...]
 </code></pre><p><strong>Description</strong></p><p>Returns the length of the STRING in characters.</p><p><strong>Return type</strong></p><p>INT64</p><p><strong>Examples</strong></p><pre><code>
 Table example:
diff --git a/website/generated-content/documentation/dsls/sql/zetasql/syntax/index.html b/website/generated-content/documentation/dsls/sql/zetasql/syntax/index.html
index d8cdd01..78a71bb 100644
--- a/website/generated-content/documentation/dsls/sql/zetasql/syntax/index.html
+++ b/website/generated-content/documentation/dsls/sql/zetasql/syntax/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 operand and the other operand is another numeric type, both operands are
 converted to FLOAT64 before the function is
 evaluated.</p></li><li><p>If an operand is <code>NULL</code>, the result is <code>NULL</code>, with the exception of the
diff --git a/website/generated-content/documentation/index.xml b/website/generated-content/documentation/index.xml
index c6067cd..03f52d5 100644
--- a/website/generated-content/documentation/index.xml
+++ b/website/generated-content/documentation/index.xml
@@ -716,7 +716,7 @@ the implementation of your custom I/O depends on your use case. Before you
 start, read the &lt;a href="/documentation/io/developing-io-overview/">new I/O connector overview&lt;/a>
 for an overview of developing a new I/O connector, the available implementation
 options, and how to choose the right option for your use case.&lt;/p>
-&lt;p>This guide covers using the &lt;a href="https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.io.iobase.html">Source and FileBasedSink interfaces&lt;/a>
+&lt;p>This guide covers using the &lt;a href="https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.io.iobase.html">Source and FileBasedSink interfaces&lt;/a>
 for Python. The Java SDK offers the same functionality, but uses a slightly
 different API. See &lt;a href="/documentation/io/developing-io-java/">Developing I/O connectors for Java&lt;/a>
 for information specific to the Java SDK.&lt;/p>
@@ -769,7 +769,7 @@ why you should avoid exposing your sources, and walks through how to create
 a wrapper.&lt;/li>
 &lt;/ul>
 &lt;p>You can find these classes in the
-&lt;a href="https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.io.iobase.html">apache_beam.io.iobase module&lt;/a>.&lt;/p>
+&lt;a href="https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.io.iobase.html">apache_beam.io.iobase module&lt;/a>.&lt;/p>
 &lt;h3 id="implementing-the-boundedsource-subclass">Implementing the BoundedSource subclass&lt;/h3>
 &lt;p>&lt;code>BoundedSource&lt;/code> represents a finite data set from which the service reads, possibly in parallel. &lt;code>BoundedSource&lt;/code> contains a set of methods that the service uses to split the data set for reading by multiple remote workers.&lt;/p>
 &lt;p>To implement a &lt;code>BoundedSource&lt;/code>, your subclass must override the following methods:&lt;/p>
@@ -916,7 +916,7 @@ demonstrated in the example above. Use a wrapping &lt;code>PTransform&lt;/code>
 &lt;a href="#ptransform-wrappers">PTransform wrappers&lt;/a> discusses why you should avoid
 exposing your sources, and walks through how to create a wrapper.&lt;/p>
 &lt;h2 id="using-the-filebasedsink-abstraction">Using the FileBasedSink abstraction&lt;/h2>
-&lt;p>If your data source uses files, you can implement the &lt;a href="https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.io.filebasedsink.html">FileBasedSink&lt;/a>
+&lt;p>If your data source uses files, you can implement the &lt;a href="https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.io.filebasedsink.html">FileBasedSink&lt;/a>
 abstraction to create a file-based sink. For other sinks, use &lt;code>ParDo&lt;/code>,
 &lt;code>GroupByKey&lt;/code>, and other transforms offered by the Beam SDK for Python. See the
 &lt;a href="/documentation/io/developing-io-overview/">developing I/O connectors overview&lt;/a>
@@ -1759,21 +1759,21 @@ to &lt;a href="https://parquet.apache.org">Apache Parquet&lt;/a> files.&lt;/p>
 &lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">dependency&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>
 &lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">groupId&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="n">org&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">apache&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">beam&lt;/span>&lt;span class="o">&amp;lt;/&lt;/span>&lt;span class="n">groupId&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>
 &lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">artifactId&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="n">beam&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">sdks&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">java&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">io&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">parquet&lt;/span>&lt;span class="o">&amp;lt;/&lt;/span>&lt;span class="n">artifactId&lt;/span>&lt;span class=" [...]
-&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">version&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="n">2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">29&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">0&lt;/span>&lt;span class="o">&amp;lt;/&lt;/span>&lt;span class="n">version&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>
+&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">version&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="n">2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">30&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">0&lt;/span>&lt;span class="o">&amp;lt;/&lt;/span>&lt;span class="n">version&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>
 &lt;span class="o">&amp;lt;/&lt;/span>&lt;span class="n">dependency&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;p class="language-java">Additional resources:&lt;/p>
 &lt;span class="language-java">&lt;ul>
 &lt;li>&lt;a href="https://github.com/apache/beam/blob/master/sdks/java/io/parquet/src/main/java/org/apache/beam/sdk/io/parquet/ParquetIO.java">ParquetIO source code&lt;/a>&lt;/li>
-&lt;li>&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/parquet/ParquetIO.html">ParquetIO Javadoc&lt;/a>&lt;/li>
+&lt;li>&lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/parquet/ParquetIO.html">ParquetIO Javadoc&lt;/a>&lt;/li>
 &lt;/ul>&lt;/span>
 &lt;!-- Python specific -->
-&lt;p class="language-py">ParquetIO comes preinstalled with the Apache Beam python sdk..2.29.0&lt;/p>
+&lt;p class="language-py">ParquetIO comes preinstalled with the Apache Beam python sdk..2.30.0&lt;/p>
 &lt;p class="language-py">Additional resources:&lt;/p>
 &lt;span class="language-py">&lt;ul>
 &lt;li>&lt;a href="https://github.com/apache/beam/blob/master/sdks/python/apache_beam/io/parquetio.py">ParquetIO source code&lt;/a>&lt;/li>
-&lt;li>&lt;a href="https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.io.parquetio.html">ParquetIO Pydoc&lt;/a>&lt;/li>
+&lt;li>&lt;a href="https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.io.parquetio.html">ParquetIO Pydoc&lt;/a>&lt;/li>
 &lt;/ul>&lt;/span>
 &lt;p class="language-java">&lt;h4 id="using-parquetio-with-spark-before-24">Using ParquetIO with Spark before 2.4&lt;/h4>&lt;/p>
 &lt;p class="language-java">&lt;code>ParquetIO&lt;/code> depends on an API introduced in Apache Parquet 1.10.0. &lt;strong>Spark 2.4.x is compatible and no additional steps are necessary&lt;/strong>. Older versions of Spark will not work out of the box since a pre-installed version of Parquet libraries will take precedence during execution. The following workaround should be applied.&lt;/p>
@@ -3770,7 +3770,7 @@ asynchronous &amp;ldquo;job&amp;rdquo; (or equivalent) on that back-end.&lt;/p>
 &lt;h2 id="creating-a-pipeline">2. Creating a pipeline&lt;/h2>
 &lt;p>The &lt;code>Pipeline&lt;/code> abstraction encapsulates all the data and steps in your data
 processing task. Your Beam driver program typically starts by constructing a
-&lt;span class="language-java">&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/index.html?org/apache/beam/sdk/Pipeline.html">Pipeline&lt;/a>&lt;/span>
+&lt;span class="language-java">&lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/index.html?org/apache/beam/sdk/Pipeline.html">Pipeline&lt;/a>&lt;/span>
 &lt;span class="language-py">&lt;a href="https://github.com/apache/beam/blob/master/sdks/python/apache_beam/pipeline.py">Pipeline&lt;/a>&lt;/span>
 object, and then using that object as the basis for creating the pipeline&amp;rsquo;s data
 sets as &lt;code>PCollection&lt;/code>s and its operations as &lt;code>Transform&lt;/code>s.&lt;/p>
@@ -3979,7 +3979,7 @@ with &lt;code>PipelineOptionsFactory&lt;/code>:&lt;/p>
 &lt;/div>
 &lt;p>Now your pipeline can accept &lt;code>--input=value&lt;/code> and &lt;code>--output=value&lt;/code> as command-line arguments.&lt;/p>
 &lt;h2 id="pcollections">3. PCollections&lt;/h2>
-&lt;p>The &lt;span class="language-java">&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/index.html?org/apache/beam/sdk/values/PCollection.html">PCollection&lt;/a>&lt;/span>
+&lt;p>The &lt;span class="language-java">&lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/index.html?org/apache/beam/sdk/values/PCollection.html">PCollection&lt;/a>&lt;/span>
 &lt;span class="language-py">&lt;code>PCollection&lt;/code>&lt;/span> abstraction represents a
 potentially distributed, multi-element data set. You can think of a
 &lt;code>PCollection&lt;/code> as &amp;ldquo;pipeline&amp;rdquo; data; Beam transforms use &lt;code>PCollection&lt;/code> objects as
@@ -4845,7 +4845,7 @@ and format data from each collection.&lt;/p>
 &lt;/div>
 &lt;/div>
 &lt;h4 id="combine">4.2.4. Combine&lt;/h4>
-&lt;p>&lt;span class="language-java">&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/index.html?org/apache/beam/sdk/transforms/Combine.html">&lt;code>Combine&lt;/code>&lt;/a>&lt;/span>
+&lt;p>&lt;span class="language-java">&lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/index.html?org/apache/beam/sdk/transforms/Combine.html">&lt;code>Combine&lt;/code>&lt;/a>&lt;/span>
 &lt;span class="language-py">&lt;a href="https://github.com/apache/beam/blob/master/sdks/python/apache_beam/transforms/core.py">&lt;code>Combine&lt;/code>&lt;/a>&lt;/span>
 is a Beam transform for combining collections of elements or values in your
 data. &lt;code>Combine&lt;/code> has variants that work on entire &lt;code>PCollection&lt;/code>s, and some that
@@ -5108,7 +5108,7 @@ PerKey must be an associative reduction function or a subclass of &lt;code>Combi
 &lt;/div>
 &lt;/div>
 &lt;h4 id="flatten">4.2.5. Flatten&lt;/h4>
-&lt;p>&lt;span class="language-java">&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/index.html?org/apache/beam/sdk/transforms/Flatten.html">&lt;code>Flatten&lt;/code>&lt;/a>&lt;/span>
+&lt;p>&lt;span class="language-java">&lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/index.html?org/apache/beam/sdk/transforms/Flatten.html">&lt;code>Flatten&lt;/code>&lt;/a>&lt;/span>
 &lt;span class="language-py">&lt;a href="https://github.com/apache/beam/blob/master/sdks/python/apache_beam/transforms/core.py">&lt;code>Flatten&lt;/code>&lt;/a>&lt;/span>
 is a Beam transform for &lt;code>PCollection&lt;/code> objects that store the same data type.
 &lt;code>Flatten&lt;/code> merges multiple &lt;code>PCollection&lt;/code> objects into a single logical
@@ -5157,7 +5157,7 @@ fixed windows or 4-minute sliding windows starting every 30 seconds.&lt;/p>
 incompatible windows, Beam generates an &lt;code>IllegalStateException&lt;/code> error when your
 pipeline is constructed.&lt;/p>
 &lt;h4 id="partition">4.2.6. Partition&lt;/h4>
-&lt;p>&lt;span class="language-java">&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/index.html?org/apache/beam/sdk/transforms/Partition.html">&lt;code>Partition&lt;/code>&lt;/a>&lt;/span>
+&lt;p>&lt;span class="language-java">&lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/index.html?org/apache/beam/sdk/transforms/Partition.html">&lt;code>Partition&lt;/code>&lt;/a>&lt;/span>
 &lt;span class="language-py">&lt;a href="https://github.com/apache/beam/blob/master/sdks/python/apache_beam/transforms/core.py">&lt;code>Partition&lt;/code>&lt;/a>&lt;/span>
 is a Beam transform for &lt;code>PCollection&lt;/code> objects that store the same data
 type. &lt;code>Partition&lt;/code> splits a single &lt;code>PCollection&lt;/code> into a fixed number of smaller
@@ -5690,8 +5690,8 @@ transform can make your code more modular and easier to understand.&lt;/p>
 &lt;p>The Beam SDK comes packed with many useful composite transforms. See the API
 reference pages for a list of transforms:&lt;/p>
 &lt;ul>
-&lt;li>&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/index.html?org/apache/beam/sdk/transforms/package-summary.html">Pre-written Beam transforms for Java&lt;/a>&lt;/li>
-&lt;li>&lt;a href="https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.transforms.html">Pre-written Beam transforms for Python&lt;/a>&lt;/li>
+&lt;li>&lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/index.html?org/apache/beam/sdk/transforms/package-summary.html">Pre-written Beam transforms for Java&lt;/a>&lt;/li>
+&lt;li>&lt;a href="https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.transforms.html">Pre-written Beam transforms for Python&lt;/a>&lt;/li>
 &lt;/ul>
 &lt;h4 id="composite-transform-example">4.6.1. An example composite transform&lt;/h4>
 &lt;p>The &lt;code>CountWords&lt;/code> transform in the &lt;a href="/get-started/wordcount-example/">WordCount example program&lt;/a>
@@ -7496,7 +7496,7 @@ all the elements are by default part of a single, global window.&lt;/p>
 &lt;p>To use windowing with fixed data sets, you can assign your own timestamps to
 each element. To assign timestamps to elements, use a &lt;code>ParDo&lt;/code> transform with a
 &lt;code>DoFn&lt;/code> that outputs each element with a new timestamp (for example, the
-&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/index.html?org/apache/beam/sdk/transforms/WithTimestamps.html">WithTimestamps&lt;/a>
+&lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/index.html?org/apache/beam/sdk/transforms/WithTimestamps.html">WithTimestamps&lt;/a>
 transform in the Beam SDK for Java).&lt;/p>
 &lt;p>To illustrate how windowing with a bounded &lt;code>PCollection&lt;/code> can affect how your
 pipeline processes data, consider the following pipeline:&lt;/p>
@@ -14773,14 +14773,14 @@ to &lt;a href="https://cloud.google.com/bigquery">Google BigQuery&lt;/a> tables.
 &lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">dependency&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>
 &lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">groupId&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="n">org&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">apache&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">beam&lt;/span>&lt;span class="o">&amp;lt;/&lt;/span>&lt;span class="n">groupId&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>
 &lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">artifactId&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="n">beam&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">sdks&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">java&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">io&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">google&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">cloud&lt;/span>&lt;span class="o">-&lt;/span> [...]
-&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">version&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="n">2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">29&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">0&lt;/span>&lt;span class="o">&amp;lt;/&lt;/span>&lt;span class="n">version&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>
+&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">version&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="n">2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">30&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">0&lt;/span>&lt;span class="o">&amp;lt;/&lt;/span>&lt;span class="n">version&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>
 &lt;span class="o">&amp;lt;/&lt;/span>&lt;span class="n">dependency&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;p class="language-java">Additional resources:&lt;/p>
 &lt;span class="language-java">&lt;ul>
 &lt;li>&lt;a href="https://github.com/apache/beam/tree/master/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery">BigQueryIO source code&lt;/a>&lt;/li>
-&lt;li>&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/gcp/bigquery/BigQueryIO.html">BigQueryIO Javadoc&lt;/a>&lt;/li>
+&lt;li>&lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/gcp/bigquery/BigQueryIO.html">BigQueryIO Javadoc&lt;/a>&lt;/li>
 &lt;li>&lt;a href="https://cloud.google.com/bigquery/docs">Google BigQuery documentation&lt;/a>&lt;/li>
 &lt;/ul>&lt;/span>
 &lt;!-- Python specific -->
@@ -14789,7 +14789,7 @@ running &lt;code>pip install apache-beam[gcp]&lt;/code>.&lt;/p>
 &lt;p class="language-py">Additional resources:&lt;/p>
 &lt;span class="language-py">&lt;ul>
 &lt;li>&lt;a href="https://github.com/apache/beam/blob/master/sdks/python/apache_beam/io/gcp/bigquery.py">BigQueryIO source code&lt;/a>&lt;/li>
-&lt;li>&lt;a href="https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.io.gcp.bigquery.html">BigQueryIO Pydoc&lt;/a>&lt;/li>
+&lt;li>&lt;a href="https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.io.gcp.bigquery.html">BigQueryIO Pydoc&lt;/a>&lt;/li>
 &lt;li>&lt;a href="https://cloud.google.com/bigquery/docs">Google BigQuery documentation&lt;/a>&lt;/li>
 &lt;/ul>&lt;/span>
 &lt;h2 id="bigquery-basics">BigQuery basics&lt;/h2>
@@ -14839,10 +14839,10 @@ table name.&lt;/p>
 &lt;p>You can also omit &lt;code>project_id&lt;/code> and use the &lt;code>[dataset_id].[table_id]&lt;/code> format. If
 you omit the project ID, Beam uses the default project ID from your
 &lt;span class="language-java">
-&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/extensions/gcp/options/GcpOptions.html">pipeline options&lt;/a>.
+&lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/extensions/gcp/options/GcpOptions.html">pipeline options&lt;/a>.
 &lt;/span>
 &lt;span class="language-py">
-&lt;a href="https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.options.pipeline_options.html#apache_beam.options.pipeline_options.GoogleCloudOptions">pipeline options&lt;/a>.
+&lt;a href="https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.options.pipeline_options.html#apache_beam.options.pipeline_options.GoogleCloudOptions">pipeline options&lt;/a>.
 &lt;/span>&lt;/p>
 &lt;div class='language-java snippet'>
 &lt;div class="notebook-skip code-snippet">
@@ -14889,7 +14889,7 @@ the three parts of the BigQuery table name.&lt;/p>
 &lt;/div>
 &lt;/div>
 &lt;!-- Java specific -->
-&lt;p class="language-java">The Beam SDK for Java also provides the &lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/gcp/bigquery/BigQueryHelpers.html">&lt;code>parseTableSpec&lt;/code>&lt;/a>
+&lt;p class="language-java">The Beam SDK for Java also provides the &lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/gcp/bigquery/BigQueryHelpers.html">&lt;code>parseTableSpec&lt;/code>&lt;/a>
 helper method, which constructs a &lt;code>TableReference&lt;/code> object from a String that
 contains the fully-qualified BigQuery table name. However, the static factory
 methods for BigQueryIO transforms accept the table name as a String and
@@ -15636,11 +15636,11 @@ and &lt;a href="https://cloud.google.com/bigquery/streaming-data-into-bigquery">
 for more information about these tradeoffs.&lt;/p>
 &lt;p class="language-java">BigQueryIO chooses a default insertion method based on the input &lt;code>PCollection&lt;/code>.
 You can use &lt;code>withMethod&lt;/code> to specify the desired insertion method. See
-&lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/gcp/bigquery/BigQueryIO.Write.Method.html">&lt;code>Write.Method&lt;/code>&lt;/a>
+&lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/gcp/bigquery/BigQueryIO.Write.Method.html">&lt;code>Write.Method&lt;/code>&lt;/a>
 for the list of the available methods and their restrictions.&lt;/p>
 &lt;p class="language-py">BigQueryIO chooses a default insertion method based on the input &lt;code>PCollection&lt;/code>.
 You can use &lt;code>method&lt;/code> to specify the desired insertion method. See
-&lt;a href="https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.io.gcp.bigquery.html#apache_beam.io.gcp.bigquery.WriteToBigQuery">&lt;code>WriteToBigQuery&lt;/code>&lt;/a>
+&lt;a href="https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.io.gcp.bigquery.html#apache_beam.io.gcp.bigquery.WriteToBigQuery">&lt;code>WriteToBigQuery&lt;/code>&lt;/a>
 for the list of the available methods and their restrictions.&lt;/p>
 &lt;p>BigQueryIO uses load jobs in the following situations:&lt;/p>
 &lt;span class="language-java">&lt;ul>
diff --git a/website/generated-content/documentation/io/built-in/google-bigquery/index.html b/website/generated-content/documentation/io/built-in/google-bigquery/index.html
index cdb1e35..49b0208 100644
--- a/website/generated-content/documentation/io/built-in/google-bigquery/index.html
+++ b/website/generated-content/documentation/io/built-in/google-bigquery/index.html
@@ -22,9 +22,9 @@ function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfi
 to <a href=https://cloud.google.com/bigquery>Google BigQuery</a> tables.</p><h2 id=before-you-start>Before you start</h2><p class=language-java>To use BigQueryIO, add the Maven artifact dependency to your <code>pom.xml</code> file.</p><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code cl [...]
     <span class=o>&lt;</span><span class=n>groupId</span><span class=o>&gt;</span><span class=n>org</span><span class=o>.</span><span class=na>apache</span><span class=o>.</span><span class=na>beam</span><span class=o>&lt;/</span><span class=n>groupId</span><span class=o>&gt;</span>
     <span class=o>&lt;</span><span class=n>artifactId</span><span class=o>&gt;</span><span class=n>beam</span><span class=o>-</span><span class=n>sdks</span><span class=o>-</span><span class=n>java</span><span class=o>-</span><span class=n>io</span><span class=o>-</span><span class=n>google</span><span class=o>-</span><span class=n>cloud</span><span class=o>-</span><span class=n>platform</span><span class=o>&lt;/</span><span class=n>artifactId</span><span class=o>&gt;</span>
-    <span class=o>&lt;</span><span class=n>version</span><span class=o>&gt;</span><span class=n>2</span><span class=o>.</span><span class=na>29</span><span class=o>.</span><span class=na>0</span><span class=o>&lt;/</span><span class=n>version</span><span class=o>&gt;</span>
-<span class=o>&lt;/</span><span class=n>dependency</span><span class=o>&gt;</span></code></pre></div></div></div><p class=language-java>Additional resources:</p><span class=language-java><ul><li><a href=https://github.com/apache/beam/tree/master/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery>BigQueryIO source code</a></li><li><a href=https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/gcp/bigquery/BigQueryIO.html>BigQueryIO Javadoc [...]
-running <code>pip install apache-beam[gcp]</code>.</p><p class=language-py>Additional resources:</p><span class=language-py><ul><li><a href=https://github.com/apache/beam/blob/master/sdks/python/apache_beam/io/gcp/bigquery.py>BigQueryIO source code</a></li><li><a href=https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.io.gcp.bigquery.html>BigQueryIO Pydoc</a></li><li><a href=https://cloud.google.com/bigquery/docs>Google BigQuery documentation</a></li></ul></span><h2 id=bigquery-ba [...]
+    <span class=o>&lt;</span><span class=n>version</span><span class=o>&gt;</span><span class=n>2</span><span class=o>.</span><span class=na>30</span><span class=o>.</span><span class=na>0</span><span class=o>&lt;/</span><span class=n>version</span><span class=o>&gt;</span>
+<span class=o>&lt;/</span><span class=n>dependency</span><span class=o>&gt;</span></code></pre></div></div></div><p class=language-java>Additional resources:</p><span class=language-java><ul><li><a href=https://github.com/apache/beam/tree/master/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigquery>BigQueryIO source code</a></li><li><a href=https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/gcp/bigquery/BigQueryIO.html>BigQueryIO Javadoc [...]
+running <code>pip install apache-beam[gcp]</code>.</p><p class=language-py>Additional resources:</p><span class=language-py><ul><li><a href=https://github.com/apache/beam/blob/master/sdks/python/apache_beam/io/gcp/bigquery.py>BigQueryIO source code</a></li><li><a href=https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.io.gcp.bigquery.html>BigQueryIO Pydoc</a></li><li><a href=https://cloud.google.com/bigquery/docs>Google BigQuery documentation</a></li></ul></span><h2 id=bigquery-ba [...]
 BigQuery table name (for example, <code>bigquery-public-data:github_repos.sample_contents</code>).
 A fully-qualified BigQuery table name consists of three parts:</p><ul><li><strong>Project ID</strong>: The ID for your Google Cloud Project. The default value comes
 from your pipeline options object.</li><li><strong>Dataset ID</strong>: The BigQuery dataset ID, which is unique within a given Cloud
@@ -38,8 +38,8 @@ object.</p><h4 id=using-a-string>Using a string</h4><p>To specify a table with a
 table name.</p><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=n>String</span> <span class=n>tableSpec</span> <span class=o>=</span> <span class=s>&#34;clouddataflow-readonly:samples.weather_stations&#34;</span><span class=o>;</span></cod [...]
 <span class=n>table_spec</span> <span class=o>=</span> <span class=s1>&#39;clouddataflow-readonly:samples.weather_stations&#39;</span></code></pre></div></div></div><p>You can also omit <code>project_id</code> and use the <code>[dataset_id].[table_id]</code> format. If
 you omit the project ID, Beam uses the default project ID from your
-<span class=language-java><a href=https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/extensions/gcp/options/GcpOptions.html>pipeline options</a>.</span>
-<span class=language-py><a href=https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.options.pipeline_options.html#apache_beam.options.pipeline_options.GoogleCloudOptions>pipeline options</a>.</span></p><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-java data-lang [...]
+<span class=language-java><a href=https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/extensions/gcp/options/GcpOptions.html>pipeline options</a>.</span>
+<span class=language-py><a href=https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.options.pipeline_options.html#apache_beam.options.pipeline_options.GoogleCloudOptions>pipeline options</a>.</span></p><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-java data-lang [...]
 <span class=n>table_spec</span> <span class=o>=</span> <span class=s1>&#39;samples.weather_stations&#39;</span></code></pre></div></div></div><h4 id=using-a-tablereference>Using a TableReference</h4><p>To specify a table with a <code>TableReference</code>, create a new <code>TableReference</code> using
 the three parts of the BigQuery table name.</p><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=n>TableReference</span> <span class=n>tableSpec</span> <span class=o>=</span>
     <span class=k>new</span> <span class=n>TableReference</span><span class=o>()</span>
@@ -50,7 +50,7 @@ the three parts of the BigQuery table name.</p><div class="language-java snippet
 <span class=n>table_spec</span> <span class=o>=</span> <span class=n>bigquery</span><span class=o>.</span><span class=n>TableReference</span><span class=p>(</span>
     <span class=n>projectId</span><span class=o>=</span><span class=s1>&#39;clouddataflow-readonly&#39;</span><span class=p>,</span>
     <span class=n>datasetId</span><span class=o>=</span><span class=s1>&#39;samples&#39;</span><span class=p>,</span>
-    <span class=n>tableId</span><span class=o>=</span><span class=s1>&#39;weather_stations&#39;</span><span class=p>)</span></code></pre></div></div></div><p class=language-java>The Beam SDK for Java also provides the <a href=https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/gcp/bigquery/BigQueryHelpers.html><code>parseTableSpec</code></a>
+    <span class=n>tableId</span><span class=o>=</span><span class=s1>&#39;weather_stations&#39;</span><span class=p>)</span></code></pre></div></div></div><p class=language-java>The Beam SDK for Java also provides the <a href=https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/gcp/bigquery/BigQueryHelpers.html><code>parseTableSpec</code></a>
 helper method, which constructs a <code>TableReference</code> object from a String that
 contains the fully-qualified BigQuery table name. However, the static factory
 methods for BigQueryIO transforms accept the table name as a String and
@@ -506,10 +506,10 @@ quota, and data consistency. See the BigQuery documentation for
 and <a href=https://cloud.google.com/bigquery/streaming-data-into-bigquery>streaming inserts</a>)
 for more information about these tradeoffs.</p><p class=language-java>BigQueryIO chooses a default insertion method based on the input <code>PCollection</code>.
 You can use <code>withMethod</code> to specify the desired insertion method. See
-<a href=https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/gcp/bigquery/BigQueryIO.Write.Method.html><code>Write.Method</code></a>
+<a href=https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/gcp/bigquery/BigQueryIO.Write.Method.html><code>Write.Method</code></a>
 for the list of the available methods and their restrictions.</p><p class=language-py>BigQueryIO chooses a default insertion method based on the input <code>PCollection</code>.
 You can use <code>method</code> to specify the desired insertion method. See
-<a href=https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.io.gcp.bigquery.html#apache_beam.io.gcp.bigquery.WriteToBigQuery><code>WriteToBigQuery</code></a>
+<a href=https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.io.gcp.bigquery.html#apache_beam.io.gcp.bigquery.WriteToBigQuery><code>WriteToBigQuery</code></a>
 for the list of the available methods and their restrictions.</p><p>BigQueryIO uses load jobs in the following situations:</p><span class=language-java><ul><li>When you apply a BigQueryIO write transform to a bounded <code>PCollection</code>.</li><li>When you specify load jobs as the insertion method using
 <code>BigQueryIO.write().withMethod(FILE_LOADS)</code>.</li></ul></span><span class=language-py><ul><li>When you apply a BigQueryIO write transform to a bounded <code>PCollection</code>.</li><li>When you specify load jobs as the insertion method using
 <code>WriteToBigQuery(method='FILE_LOADS')</code>.</li></ul></span><p><em><strong>Note:</strong></em> If you use batch loads in a streaming pipeline:</p><p class=language-java>You must use <code>withTriggeringFrequency</code> to specify a triggering frequency for
diff --git a/website/generated-content/documentation/io/built-in/parquet/index.html b/website/generated-content/documentation/io/built-in/parquet/index.html
index 1725e57..96228f8 100644
--- a/website/generated-content/documentation/io/built-in/parquet/index.html
+++ b/website/generated-content/documentation/io/built-in/parquet/index.html
@@ -22,8 +22,8 @@ function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfi
 to <a href=https://parquet.apache.org>Apache Parquet</a> files.</p><h2 id=before-you-start>Before you start</h2><p class=language-java>To use ParquetIO, add the Maven artifact dependency to your <code>pom.xml</code> file.</p><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=langua [...]
     <span class=o>&lt;</span><span class=n>groupId</span><span class=o>&gt;</span><span class=n>org</span><span class=o>.</span><span class=na>apache</span><span class=o>.</span><span class=na>beam</span><span class=o>&lt;/</span><span class=n>groupId</span><span class=o>&gt;</span>
     <span class=o>&lt;</span><span class=n>artifactId</span><span class=o>&gt;</span><span class=n>beam</span><span class=o>-</span><span class=n>sdks</span><span class=o>-</span><span class=n>java</span><span class=o>-</span><span class=n>io</span><span class=o>-</span><span class=n>parquet</span><span class=o>&lt;/</span><span class=n>artifactId</span><span class=o>&gt;</span>
-    <span class=o>&lt;</span><span class=n>version</span><span class=o>&gt;</span><span class=n>2</span><span class=o>.</span><span class=na>29</span><span class=o>.</span><span class=na>0</span><span class=o>&lt;/</span><span class=n>version</span><span class=o>&gt;</span>
-<span class=o>&lt;/</span><span class=n>dependency</span><span class=o>&gt;</span></code></pre></div></div></div><p class=language-java>Additional resources:</p><span class=language-java><ul><li><a href=https://github.com/apache/beam/blob/master/sdks/java/io/parquet/src/main/java/org/apache/beam/sdk/io/parquet/ParquetIO.java>ParquetIO source code</a></li><li><a href=https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/io/parquet/ParquetIO.html>ParquetIO Javadoc</a></li></u [...]
+    <span class=o>&lt;</span><span class=n>version</span><span class=o>&gt;</span><span class=n>2</span><span class=o>.</span><span class=na>30</span><span class=o>.</span><span class=na>0</span><span class=o>&lt;/</span><span class=n>version</span><span class=o>&gt;</span>
+<span class=o>&lt;/</span><span class=n>dependency</span><span class=o>&gt;</span></code></pre></div></div></div><p class=language-java>Additional resources:</p><span class=language-java><ul><li><a href=https://github.com/apache/beam/blob/master/sdks/java/io/parquet/src/main/java/org/apache/beam/sdk/io/parquet/ParquetIO.java>ParquetIO source code</a></li><li><a href=https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/io/parquet/ParquetIO.html>ParquetIO Javadoc</a></li></u [...]
 The Parquet files that are consumed or generated by this Beam connector should remain interoperable with the other tools on your cluster.</p></blockquote></p><p class=language-java>Include the Parquet artifact normally and ensure that it brings in the correct version of Parquet as a transitive dependency.</p><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img sr [...]
     <span class=o>&lt;</span><span class=n>groupId</span><span class=o>&gt;</span><span class=n>org</span><span class=o>.</span><span class=na>apache</span><span class=o>.</span><span class=na>beam</span><span class=o>&lt;/</span><span class=n>groupId</span><span class=o>&gt;</span>
     <span class=o>&lt;</span><span class=n>artifactId</span><span class=o>&gt;</span><span class=n>beam</span><span class=o>-</span><span class=n>sdks</span><span class=o>-</span><span class=n>java</span><span class=o>-</span><span class=n>io</span><span class=o>-</span><span class=n>parquet</span><span class=o>&lt;/</span><span class=n>artifactId</span><span class=o>&gt;</span>
diff --git a/website/generated-content/documentation/io/developing-io-python/index.html b/website/generated-content/documentation/io/developing-io-python/index.html
index bae8cd8..0fa37b9 100644
--- a/website/generated-content/documentation/io/developing-io-python/index.html
+++ b/website/generated-content/documentation/io/developing-io-python/index.html
@@ -25,7 +25,7 @@ source and a sink. All Beam sources and sinks are composite transforms; however,
 the implementation of your custom I/O depends on your use case. Before you
 start, read the <a href=/documentation/io/developing-io-overview/>new I/O connector overview</a>
 for an overview of developing a new I/O connector, the available implementation
-options, and how to choose the right option for your use case.</p><p>This guide covers using the <a href=https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.io.iobase.html>Source and FileBasedSink interfaces</a>
+options, and how to choose the right option for your use case.</p><p>This guide covers using the <a href=https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.io.iobase.html>Source and FileBasedSink interfaces</a>
 for Python. The Java SDK offers the same functionality, but uses a slightly
 different API. See <a href=/documentation/io/developing-io-java/>Developing I/O connectors for Java</a>
 for information specific to the Java SDK.</p><h2 id=basic-code-reqs>Basic code requirements</h2><p>Beam runners use the classes you provide to read and/or write data using
@@ -52,7 +52,7 @@ manage a range for a given position type.</li><li>One or more user-facing wrappe
 wrap read operations. <a href=#ptransform-wrappers>PTransform wrappers</a> discusses
 why you should avoid exposing your sources, and walks through how to create
 a wrapper.</li></ul><p>You can find these classes in the
-<a href=https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.io.iobase.html>apache_beam.io.iobase module</a>.</p><h3 id=implementing-the-boundedsource-subclass>Implementing the BoundedSource subclass</h3><p><code>BoundedSource</code> represents a finite data set from which the service reads, possibly in parallel. <code>BoundedSource</code> contains a set of methods that the service uses to split the data set for reading by multiple remote workers.</p><p>To implement a <code>BoundedS [...]
+<a href=https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.io.iobase.html>apache_beam.io.iobase module</a>.</p><h3 id=implementing-the-boundedsource-subclass>Implementing the BoundedSource subclass</h3><p><code>BoundedSource</code> represents a finite data set from which the service reads, possibly in parallel. <code>BoundedSource</code> contains a set of methods that the service uses to split the data set for reading by multiple remote workers.</p><p>To implement a <code>BoundedS [...]
   def __init__(self, count):
     self.records_read = Metrics.counter(self.__class__, &#39;recordsRead&#39;)
     self._count = count
@@ -95,7 +95,7 @@ a wrapper.</li></ul><p>You can find these classes in the
 recommended that you do not expose the code for the source itself as
 demonstrated in the example above. Use a wrapping <code>PTransform</code> instead.
 <a href=#ptransform-wrappers>PTransform wrappers</a> discusses why you should avoid
-exposing your sources, and walks through how to create a wrapper.</p><h2 id=using-the-filebasedsink-abstraction>Using the FileBasedSink abstraction</h2><p>If your data source uses files, you can implement the <a href=https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.io.filebasedsink.html>FileBasedSink</a>
+exposing your sources, and walks through how to create a wrapper.</p><h2 id=using-the-filebasedsink-abstraction>Using the FileBasedSink abstraction</h2><p>If your data source uses files, you can implement the <a href=https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.io.filebasedsink.html>FileBasedSink</a>
 abstraction to create a file-based sink. For other sinks, use <code>ParDo</code>,
 <code>GroupByKey</code>, and other transforms offered by the Beam SDK for Python. See the
 <a href=/documentation/io/developing-io-overview/>developing I/O connectors overview</a>
diff --git a/website/generated-content/documentation/pipelines/test-your-pipeline/index.html b/website/generated-content/documentation/pipelines/test-your-pipeline/index.html
index 829bf30..db5d91b 100644
--- a/website/generated-content/documentation/pipelines/test-your-pipeline/index.html
+++ b/website/generated-content/documentation/pipelines/test-your-pipeline/index.html
@@ -19,7 +19,7 @@ function addPlaceholder(){$('input:text').attr('placeholder',"What are you looki
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
 function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li><span class=section-nav-list-title>How-to guides</span><ul clas [...]
-    <span class=o>...</span></code></pre></div></div></div><blockquote><p><strong>Note:</strong> Read about testing unbounded pipelines in Beam in <a href=/blog/2016/10/20/test-stream.html>this blog post</a>.</p></blockquote><h3 id=using-the-create-transform>Using the Create Transform</h3><p>You can use the <code>Create</code> transform to create a <code>PCollection</code> out of a standard in-memory collection class, such as Java or Python <code>List</code>. See <a href=/documentation/p [...]
+    <span class=o>...</span></code></pre></div></div></div><blockquote><p><strong>Note:</strong> Read about testing unbounded pipelines in Beam in <a href=/blog/2016/10/20/test-stream.html>this blog post</a>.</p></blockquote><h3 id=using-the-create-transform>Using the Create Transform</h3><p>You can use the <code>Create</code> transform to create a <code>PCollection</code> out of a standard in-memory collection class, such as Java or Python <code>List</code>. See <a href=/documentation/p [...]
 
 <span class=c1>// Check whether a PCollection contains some elements in any order.
 </span><span class=c1></span><span class=n>PAssert</span><span class=o>.</span><span class=na>that</span><span class=o>(</span><span class=n>output</span><span class=o>)</span>
@@ -39,7 +39,7 @@ function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfi
     <span class=o>&lt;</span><span class=n>artifactId</span><span class=o>&gt;</span><span class=n>hamcrest</span><span class=o>-</span><span class=n>all</span><span class=o>&lt;/</span><span class=n>artifactId</span><span class=o>&gt;</span>
     <span class=o>&lt;</span><span class=n>version</span><span class=o>&gt;</span><span class=n>1</span><span class=o>.</span><span class=na>3</span><span class=o>&lt;/</span><span class=n>version</span><span class=o>&gt;</span>
     <span class=o>&lt;</span><span class=n>scope</span><span class=o>&gt;</span><span class=n>test</span><span class=o>&lt;/</span><span class=n>scope</span><span class=o>&gt;</span>
-<span class=o>&lt;/</span><span class=n>dependency</span><span class=o>&gt;</span></code></pre></div></div></div><p>For more information on how these classes work, see the <a href=https://beam.apache.org/releases/javadoc/2.29.0/index.html?org/apache/beam/sdk/testing/package-summary.html>org.apache.beam.sdk.testing</a> package documentation.</p><h3 id=an-example-test-for-a-composite-transform>An Example Test for a Composite Transform</h3><p>The following code shows a complete test for a c [...]
+<span class=o>&lt;/</span><span class=n>dependency</span><span class=o>&gt;</span></code></pre></div></div></div><p>For more information on how these classes work, see the <a href=https://beam.apache.org/releases/javadoc/2.30.0/index.html?org/apache/beam/sdk/testing/package-summary.html>org.apache.beam.sdk.testing</a> package documentation.</p><h3 id=an-example-test-for-a-composite-transform>An Example Test for a Composite Transform</h3><p>The following code shows a complete test for a c [...]
 
   <span class=c1>// Our static input data, which will make up the initial PCollection.
 </span><span class=c1></span>  <span class=kd>static</span> <span class=kd>final</span> <span class=n>String</span><span class=o>[]</span> <span class=n>WORDS_ARRAY</span> <span class=o>=</span> <span class=k>new</span> <span class=n>String</span><span class=o>[]</span> <span class=o>{</span>
diff --git a/website/generated-content/documentation/programming-guide/index.html b/website/generated-content/documentation/programming-guide/index.html
index d3fdf98..f16e984 100644
--- a/website/generated-content/documentation/programming-guide/index.html
+++ b/website/generated-content/documentation/programming-guide/index.html
@@ -65,7 +65,7 @@ objects you&rsquo;ve created and transforms that you&rsquo;ve applied. That grap
 executed using the appropriate distributed processing back-end, becoming an
 asynchronous &ldquo;job&rdquo; (or equivalent) on that back-end.</p><h2 id=creating-a-pipeline>2. Creating a pipeline</h2><p>The <code>Pipeline</code> abstraction encapsulates all the data and steps in your data
 processing task. Your Beam driver program typically starts by constructing a
-<span class=language-java><a href=https://beam.apache.org/releases/javadoc/2.29.0/index.html?org/apache/beam/sdk/Pipeline.html>Pipeline</a></span>
+<span class=language-java><a href=https://beam.apache.org/releases/javadoc/2.30.0/index.html?org/apache/beam/sdk/Pipeline.html>Pipeline</a></span>
 <span class=language-py><a href=https://github.com/apache/beam/blob/master/sdks/python/apache_beam/pipeline.py>Pipeline</a></span>
 object, and then using that object as the basis for creating the pipeline&rsquo;s data
 sets as <code>PCollection</code>s and its operations as <code>Transform</code>s.</p><p>To use Beam, your driver program must first create an instance of the Beam SDK
@@ -153,7 +153,7 @@ compatible with all other registered options.</p><p class=language-java>The foll
 with <code>PipelineOptionsFactory</code>:</p><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=n>PipelineOptionsFactory</span><span class=o>.</span><span class=na>register</span><span class=o>(</span><span class=n>MyOptions</span><span clas [...]
 <span class=n>MyOptions</span> <span class=n>options</span> <span class=o>=</span> <span class=n>PipelineOptionsFactory</span><span class=o>.</span><span class=na>fromArgs</span><span class=o>(</span><span class=n>args</span><span class=o>)</span>
                                                 <span class=o>.</span><span class=na>withValidation</span><span class=o>()</span>
-                                                <span class=o>.</span><span class=na>as</span><span class=o>(</span><span class=n>MyOptions</span><span class=o>.</span><span class=na>class</span><span class=o>);</span></code></pre></div></div></div><p>Now your pipeline can accept <code>--input=value</code> and <code>--output=value</code> as command-line arguments.</p><h2 id=pcollections>3. PCollections</h2><p>The <span class=language-java><a href=https://beam.apache.org/releases/javadoc/ [...]
+                                                <span class=o>.</span><span class=na>as</span><span class=o>(</span><span class=n>MyOptions</span><span class=o>.</span><span class=na>class</span><span class=o>);</span></code></pre></div></div></div><p>Now your pipeline can accept <code>--input=value</code> and <code>--output=value</code> as command-line arguments.</p><h2 id=pcollections>3. PCollections</h2><p>The <span class=language-java><a href=https://beam.apache.org/releases/javadoc/ [...]
 <span class=language-py><code>PCollection</code></span> abstraction represents a
 potentially distributed, multi-element data set. You can think of a
 <code>PCollection</code> as &ldquo;pipeline&rdquo; data; Beam transforms use <code>PCollection</code> objects as
@@ -664,7 +664,7 @@ and format data from each collection.</p><div class="language-java snippet"><div
     <span class=s2>&#34;carl; [&#39;carl@email.com&#39;, &#39;carl@example.com&#39;]; [&#39;444-555-6666&#39;]&#34;</span><span class=p>,</span>
     <span class=s2>&#34;james; []; [&#39;222-333-4444&#39;]&#34;</span><span class=p>,</span>
     <span class=s2>&#34;julia; [&#39;julia@example.com&#39;]; []&#34;</span><span class=p>,</span>
-<span class=p>]</span></code></pre></div></div></div><h4 id=combine>4.2.4. Combine</h4><p><span class=language-java><a href=https://beam.apache.org/releases/javadoc/2.29.0/index.html?org/apache/beam/sdk/transforms/Combine.html><code>Combine</code></a></span>
+<span class=p>]</span></code></pre></div></div></div><h4 id=combine>4.2.4. Combine</h4><p><span class=language-java><a href=https://beam.apache.org/releases/javadoc/2.30.0/index.html?org/apache/beam/sdk/transforms/Combine.html><code>Combine</code></a></span>
 <span class=language-py><a href=https://github.com/apache/beam/blob/master/sdks/python/apache_beam/transforms/core.py><code>Combine</code></a></span>
 is a Beam transform for combining collections of elements or values in your
 data. <code>Combine</code> has variants that work on entire <code>PCollection</code>s, and some that
@@ -822,7 +822,7 @@ PerKey must be an associative reduction function or a subclass of <code>CombineF
 
 <span class=n>avg_accuracy_per_player</span> <span class=o>=</span> <span class=p>(</span>
     <span class=n>player_accuracies</span>
-    <span class=o>|</span> <span class=n>beam</span><span class=o>.</span><span class=n>CombinePerKey</span><span class=p>(</span><span class=n>beam</span><span class=o>.</span><span class=n>combiners</span><span class=o>.</span><span class=n>MeanCombineFn</span><span class=p>()))</span></code></pre></div></div></div><h4 id=flatten>4.2.5. Flatten</h4><p><span class=language-java><a href=https://beam.apache.org/releases/javadoc/2.29.0/index.html?org/apache/beam/sdk/transforms/Flatten.html [...]
+    <span class=o>|</span> <span class=n>beam</span><span class=o>.</span><span class=n>CombinePerKey</span><span class=p>(</span><span class=n>beam</span><span class=o>.</span><span class=n>combiners</span><span class=o>.</span><span class=n>MeanCombineFn</span><span class=p>()))</span></code></pre></div></div></div><h4 id=flatten>4.2.5. Flatten</h4><p><span class=language-java><a href=https://beam.apache.org/releases/javadoc/2.30.0/index.html?org/apache/beam/sdk/transforms/Flatten.html [...]
 <span class=language-py><a href=https://github.com/apache/beam/blob/master/sdks/python/apache_beam/transforms/core.py><code>Flatten</code></a></span>
 is a Beam transform for <code>PCollection</code> objects that store the same data type.
 <code>Flatten</code> merges multiple <code>PCollection</code> objects into a single logical
@@ -849,7 +849,7 @@ compatible windowing strategy and window sizing. For example, all the
 collections you&rsquo;re merging must all use (hypothetically) identical 5-minute
 fixed windows or 4-minute sliding windows starting every 30 seconds.</p><p>If your pipeline attempts to use <code>Flatten</code> to merge <code>PCollection</code> objects with
 incompatible windows, Beam generates an <code>IllegalStateException</code> error when your
-pipeline is constructed.</p><h4 id=partition>4.2.6. Partition</h4><p><span class=language-java><a href=https://beam.apache.org/releases/javadoc/2.29.0/index.html?org/apache/beam/sdk/transforms/Partition.html><code>Partition</code></a></span>
+pipeline is constructed.</p><h4 id=partition>4.2.6. Partition</h4><p><span class=language-java><a href=https://beam.apache.org/releases/javadoc/2.30.0/index.html?org/apache/beam/sdk/transforms/Partition.html><code>Partition</code></a></span>
 <span class=language-py><a href=https://github.com/apache/beam/blob/master/sdks/python/apache_beam/transforms/core.py><code>Partition</code></a></span>
 is a Beam transform for <code>PCollection</code> objects that store the same data
 type. <code>Partition</code> splits a single <code>PCollection</code> into a fixed number of smaller
@@ -1250,7 +1250,7 @@ multiple simpler transforms (such as more than one <code>ParDo</code>, <code>Com
 <code>GroupByKey</code>, or even other composite transforms). These transforms are called
 composite transforms. Nesting multiple transforms inside a single composite
 transform can make your code more modular and easier to understand.</p><p>The Beam SDK comes packed with many useful composite transforms. See the API
-reference pages for a list of transforms:</p><ul><li><a href=https://beam.apache.org/releases/javadoc/2.29.0/index.html?org/apache/beam/sdk/transforms/package-summary.html>Pre-written Beam transforms for Java</a></li><li><a href=https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.transforms.html>Pre-written Beam transforms for Python</a></li></ul><h4 id=composite-transform-example>4.6.1. An example composite transform</h4><p>The <code>CountWords</code> transform in the <a href=/get [...]
+reference pages for a list of transforms:</p><ul><li><a href=https://beam.apache.org/releases/javadoc/2.30.0/index.html?org/apache/beam/sdk/transforms/package-summary.html>Pre-written Beam transforms for Java</a></li><li><a href=https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.transforms.html>Pre-written Beam transforms for Python</a></li></ul><h4 id=composite-transform-example>4.6.1. An example composite transform</h4><p>The <code>CountWords</code> transform in the <a href=/get [...]
 is an example of a composite transform. <code>CountWords</code> is a <code>PTransform</code> subclass
 that consists of multiple nested transforms.</p><p>In its <code>expand</code> method, the <code>CountWords</code> transform applies the following
 transform operations:</p><ol><li>It applies a <code>ParDo</code> on the input <code>PCollection</code> of text lines, producing
@@ -1860,7 +1860,7 @@ each element of a <code>PCollection</code>, and data sources that create fixed d
 all the elements are by default part of a single, global window.</p><p>To use windowing with fixed data sets, you can assign your own timestamps to
 each element. To assign timestamps to elements, use a <code>ParDo</code> transform with a
 <code>DoFn</code> that outputs each element with a new timestamp (for example, the
-<a href=https://beam.apache.org/releases/javadoc/2.29.0/index.html?org/apache/beam/sdk/transforms/WithTimestamps.html>WithTimestamps</a>
+<a href=https://beam.apache.org/releases/javadoc/2.30.0/index.html?org/apache/beam/sdk/transforms/WithTimestamps.html>WithTimestamps</a>
 transform in the Beam SDK for Java).</p><p>To illustrate how windowing with a bounded <code>PCollection</code> can affect how your
 pipeline processes data, consider the following pipeline:</p><p><img src=/images/unwindowed-pipeline-bounded.svg alt="Diagram of GroupByKey and ParDo without windowing, on a bounded collection"></p><p><strong>Figure 4:</strong> <code>GroupByKey</code> and <code>ParDo</code> without windowing, on a bounded collection.</p><p>In the above pipeline, we create a bounded <code>PCollection</code> by reading lines from a
 file using <code>TextIO</code>. We then group the collection using <code>GroupByKey</code>,
diff --git a/website/generated-content/documentation/runners/dataflow/index.html b/website/generated-content/documentation/runners/dataflow/index.html
index 6f690f1..949637a 100644
--- a/website/generated-content/documentation/runners/dataflow/index.html
+++ b/website/generated-content/documentation/runners/dataflow/index.html
@@ -26,7 +26,7 @@ Manager. You may need to enable additional APIs (such as BigQuery, Cloud
 Pub/Sub, or Cloud Datastore) if you use them in your pipeline code.</li><li>Authenticate with Google Cloud Platform.</li><li>Install the Google Cloud SDK.</li><li>Create a Cloud Storage bucket.</li></ol><h3 id=dependency>Specify your dependency</h3><p><span class=language-java>When using Java, you must specify your dependency on the Cloud Dataflow Runner in your <code>pom.xml</code>.</span><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=butto [...]
   <span class=o>&lt;</span><span class=n>groupId</span><span class=o>&gt;</span><span class=n>org</span><span class=o>.</span><span class=na>apache</span><span class=o>.</span><span class=na>beam</span><span class=o>&lt;/</span><span class=n>groupId</span><span class=o>&gt;</span>
   <span class=o>&lt;</span><span class=n>artifactId</span><span class=o>&gt;</span><span class=n>beam</span><span class=o>-</span><span class=n>runners</span><span class=o>-</span><span class=n>google</span><span class=o>-</span><span class=n>cloud</span><span class=o>-</span><span class=n>dataflow</span><span class=o>-</span><span class=n>java</span><span class=o>&lt;/</span><span class=n>artifactId</span><span class=o>&gt;</span>
-  <span class=o>&lt;</span><span class=n>version</span><span class=o>&gt;</span><span class=n>2</span><span class=o>.</span><span class=na>29</span><span class=o>.</span><span class=na>0</span><span class=o>&lt;/</span><span class=n>version</span><span class=o>&gt;</span>
+  <span class=o>&lt;</span><span class=n>version</span><span class=o>&gt;</span><span class=n>2</span><span class=o>.</span><span class=na>30</span><span class=o>.</span><span class=na>0</span><span class=o>&lt;/</span><span class=n>version</span><span class=o>&gt;</span>
   <span class=o>&lt;</span><span class=n>scope</span><span class=o>&gt;</span><span class=n>runtime</span><span class=o>&lt;/</span><span class=n>scope</span><span class=o>&gt;</span>
 <span class=o>&lt;/</span><span class=n>dependency</span><span class=o>&gt;</span></code></pre></div></div></div></p><p><span class=language-py>This section is not applicable to the Beam SDK for Python.</span></p><h3 id=self-executing-jar>Self executing JAR</h3><p class=language-py>This section is not applicable to the Beam SDK for Python.</p><p class=language-java>In some cases, such as starting a pipeline using a scheduler such as <a href=https://airflow.apache.org>Apache AirFlow</a>,  [...]
     <span class=o>&lt;</span><span class=n>groupId</span><span class=o>&gt;</span><span class=n>org</span><span class=o>.</span><span class=na>apache</span><span class=o>.</span><span class=na>beam</span><span class=o>&lt;/</span><span class=n>groupId</span><span class=o>&gt;</span>
@@ -58,8 +58,8 @@ Path for temporary files. Must be a valid Google Cloud Storage URL that begins w
 <span class=language-java>If set, <code>tempLocation</code> is used as the default value for <code>gcpTempLocation</code>.</span></td><td>No default value.</td></tr><tr class=language-java><td><code>gcpTempLocation</code></td><td>Cloud Storage bucket path for temporary files. Must be a valid Cloud Storage URL that begins with <code>gs://</code>.</td><td>If not set, defaults to the value of <code>tempLocation</code>, provided that <code>tempLocation</code> is a valid Cloud Storage URL. If [...]
 <span class=language-py><code>staging_location</code></span></td><td>Optional. Cloud Storage bucket path for staging your binary and any temporary files. Must be a valid Cloud Storage URL that begins with <code>gs://</code>.</td><td><span class=language-java>If not set, defaults to a staging directory within <code>gcpTempLocation</code>.</span>
 <span class=language-py>If not set, defaults to a staging directory within <code>temp_location</code>.</span></td></tr><tr class=language-py><td><code>save_main_session</code></td><td>Save the main session state so that pickled functions and classes defined in <code>__main__</code> (e.g. interactive session) can be unpickled. Some workflows do not need the session state if, for instance, all of their functions/classes are defined in proper modules (not <code>__main__</code>) and the modu [...]
-<span class=language-java><a href=https://beam.apache.org/releases/javadoc/2.29.0/index.html?org/apache/beam/runners/dataflow/options/DataflowPipelineOptions.html>DataflowPipelineOptions</a></span>
-<span class=language-py><a href=https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.options.pipeline_options.html#apache_beam.options.pipeline_options.PipelineOptions><code>PipelineOptions</code></a></span>
+<span class=language-java><a href=https://beam.apache.org/releases/javadoc/2.30.0/index.html?org/apache/beam/runners/dataflow/options/DataflowPipelineOptions.html>DataflowPipelineOptions</a></span>
+<span class=language-py><a href=https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.options.pipeline_options.html#apache_beam.options.pipeline_options.PipelineOptions><code>PipelineOptions</code></a></span>
 interface (and any subinterfaces) for additional pipeline configuration options.</p><h2 id=additional-info>Additional information and caveats</h2><h3 id=monitoring>Monitoring your job</h3><p>While your pipeline executes, you can monitor the job&rsquo;s progress, view details on execution, and receive updates on the pipeline&rsquo;s results by using the <a href=https://cloud.google.com/dataflow/pipelines/dataflow-monitoring-intf>Dataflow Monitoring Interface</a> or the <a href=https://clo [...]
 You can cancel your streaming job from the <a href=https://cloud.google.com/dataflow/pipelines/stopping-a-pipeline>Dataflow Monitoring Interface</a>
 or with the <a href=https://cloud.google.com/dataflow/pipelines/dataflow-command-line-intf>Dataflow Command-line Interface</a>
diff --git a/website/generated-content/documentation/runners/direct/index.html b/website/generated-content/documentation/runners/direct/index.html
index 5a870c0..f93d498 100644
--- a/website/generated-content/documentation/runners/direct/index.html
+++ b/website/generated-content/documentation/runners/direct/index.html
@@ -18,15 +18,15 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Runners</span></li><li><a href=/documentation/runners/capability-matrix/>Capability Matrix</a></li><li><a href=/documentation/runners/direct/>Direct Ru [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Runners</span></li><li><a href=/documentation/runners/capability-matrix/>Capability Matrix</a></li><li><a href=/documentation/runners/direct/>Direct Ru [...]
    <span class=o>&lt;</span><span class=n>groupId</span><span class=o>&gt;</span><span class=n>org</span><span class=o>.</span><span class=na>apache</span><span class=o>.</span><span class=na>beam</span><span class=o>&lt;/</span><span class=n>groupId</span><span class=o>&gt;</span>
    <span class=o>&lt;</span><span class=n>artifactId</span><span class=o>&gt;</span><span class=n>beam</span><span class=o>-</span><span class=n>runners</span><span class=o>-</span><span class=n>direct</span><span class=o>-</span><span class=n>java</span><span class=o>&lt;/</span><span class=n>artifactId</span><span class=o>&gt;</span>
-   <span class=o>&lt;</span><span class=n>version</span><span class=o>&gt;</span><span class=n>2</span><span class=o>.</span><span class=na>29</span><span class=o>.</span><span class=na>0</span><span class=o>&lt;/</span><span class=n>version</span><span class=o>&gt;</span>
+   <span class=o>&lt;</span><span class=n>version</span><span class=o>&gt;</span><span class=n>2</span><span class=o>.</span><span class=na>30</span><span class=o>.</span><span class=na>0</span><span class=o>&lt;/</span><span class=n>version</span><span class=o>&gt;</span>
    <span class=o>&lt;</span><span class=n>scope</span><span class=o>&gt;</span><span class=n>runtime</span><span class=o>&lt;/</span><span class=n>scope</span><span class=o>&gt;</span>
 <span class=o>&lt;/</span><span class=n>dependency</span><span class=o>&gt;</span></code></pre></div></div></div></p><p><span class=language-py>This section is not applicable to the Beam SDK for Python.</span></p><h2 id=pipeline-options-for-the-direct-runner>Pipeline options for the Direct Runner</h2><p>For general instructions on how to set pipeline options, see the <a href=/documentation/programming-guide/#configuring-pipeline-options>programming guide</a>.</p><p>When executing your pi [...]
-<span class=language-java><a href=https://beam.apache.org/releases/javadoc/2.29.0/index.html?org/apache/beam/runners/direct/DirectOptions.html><code>DirectOptions</code></a></span>
-<span class=language-py><a href=https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.options.pipeline_options.html#apache_beam.options.pipeline_options.DirectOptions><code>DirectOptions</code></a></span>
-interface for defaults and additional pipeline configuration options.</p><h2 id=additional-information-and-caveats>Additional information and caveats</h2><h3 id=memory-considerations>Memory considerations</h3><p>Local execution is limited by the memory available in your local environment. It is highly recommended that you run your pipeline with data sets small enough to fit in local memory. You can create a small in-memory data set using a <span class=language-java><a href=https://beam.a [...]
+<span class=language-java><a href=https://beam.apache.org/releases/javadoc/2.30.0/index.html?org/apache/beam/runners/direct/DirectOptions.html><code>DirectOptions</code></a></span>
+<span class=language-py><a href=https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.options.pipeline_options.html#apache_beam.options.pipeline_options.DirectOptions><code>DirectOptions</code></a></span>
+interface for defaults and additional pipeline configuration options.</p><h2 id=additional-information-and-caveats>Additional information and caveats</h2><h3 id=memory-considerations>Memory considerations</h3><p>Local execution is limited by the memory available in your local environment. It is highly recommended that you run your pipeline with data sets small enough to fit in local memory. You can create a small in-memory data set using a <span class=language-java><a href=https://beam.a [...]
 By default, <code>targetParallelism</code> is the greater of the number of available processors and 3.</p><p class=language-py>Number of threads or subprocesses is defined by setting the <code>direct_num_workers</code> pipeline option.
 From 2.22.0, <code>direct_num_workers = 0</code> is supported. When <code>direct_num_workers</code> is set to 0, it will set the number of threads/subprocess to the number of cores of the machine where the pipeline is running.</p><p class=language-py><strong>Setting running mode</strong></p><p class=language-py>In Beam 2.19.0 and newer, you can use the <code>direct_running_mode</code> pipeline option to set the running mode.
 <code>direct_running_mode</code> can be one of [<code>'in_memory'</code>, <code>'multi_threading'</code>, <code>'multi_processing'</code>].</p><p class=language-py><b>in_memory</b>: Runner and workers&rsquo; communication happens in memory (not through gRPC). This is a default mode.</p><p class=language-py><b>multi_threading</b>: Runner and workers communicate through gRPC and each worker runs in a thread.</p><p class=language-py><b>multi_processing</b>: Runner and workers communicate th [...]
diff --git a/website/generated-content/documentation/runners/flink/index.html b/website/generated-content/documentation/runners/flink/index.html
index 104ff1f..58daf43 100644
--- a/website/generated-content/documentation/runners/flink/index.html
+++ b/website/generated-content/documentation/runners/flink/index.html
@@ -42,7 +42,7 @@ in your <code>pom.xml</code> or <code>build.gradle</code>. Use the Beam version
 from the above table. For example:</p><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=o>&lt;</span><span class=n>dependency</span><span class=o>&gt;</span>
   <span class=o>&lt;</span><span class=n>groupId</span><span class=o>&gt;</span><span class=n>org</span><span class=o>.</span><span class=na>apache</span><span class=o>.</span><span class=na>beam</span><span class=o>&lt;/</span><span class=n>groupId</span><span class=o>&gt;</span>
   <span class=o>&lt;</span><span class=n>artifactId</span><span class=o>&gt;</span><span class=n>beam</span><span class=o>-</span><span class=n>runners</span><span class=o>-</span><span class=n>flink</span><span class=o>-</span><span class=n>1</span><span class=o>.</span><span class=na>6</span><span class=o>&lt;/</span><span class=n>artifactId</span><span class=o>&gt;</span>
-  <span class=o>&lt;</span><span class=n>version</span><span class=o>&gt;</span><span class=n>2</span><span class=o>.</span><span class=na>29</span><span class=o>.</span><span class=na>0</span><span class=o>&lt;/</span><span class=n>version</span><span class=o>&gt;</span>
+  <span class=o>&lt;</span><span class=n>version</span><span class=o>&gt;</span><span class=n>2</span><span class=o>.</span><span class=na>30</span><span class=o>.</span><span class=na>0</span><span class=o>&lt;/</span><span class=n>version</span><span class=o>&gt;</span>
 <span class=o>&lt;/</span><span class=n>dependency</span><span class=o>&gt;</span></code></pre></div></div></div><p class=language-py>You will need Docker to be installed in your execution environment.
 To run an embedded flink cluster or use the Flink runner for Python &lt; 3.6
 you will also need to have java available in your execution environment.</p><p class=language-portable>You will need Docker to be installed in your execution environment.</p><h3 id=executing-a-beam-pipeline-on-a-flink-cluster>Executing a Beam pipeline on a Flink Cluster</h3><p class=language-java>For executing a pipeline on a Flink cluster you need to package your program
@@ -102,9 +102,9 @@ with beam.Pipeline(options=options) as p:
 and will not work on remote clusters.
 See <a href=/documentation/runtime/sdk-harness-config/>here</a> for details.</p><h2 id=additional-information-and-caveats>Additional information and caveats</h2><h3 id=monitoring-your-job>Monitoring your job</h3><p>You can monitor a running Flink job using the Flink JobManager Dashboard or its Rest interfaces. By default, this is available at port <code>8081</code> of the JobManager node. If you have a Flink installation on your local machine that would be <code>http://localhost:8081</co [...]
 Many sources like <code>PubSubIO</code> rely on their checkpoints to be acknowledged which can only be done when checkpointing is enabled for the <code>FlinkRunner</code>. To enable checkpointing, please set <span class=language-java><code>checkpointingInterval</code></span><span class=language-py><code>checkpointing_interval</code></span> to the desired checkpointing interval in milliseconds.</p><h2 id=pipeline-options-for-the-flink-runner>Pipeline options for the Flink Runner</h2><p>Wh [...]
-<a href=https://beam.apache.org/releases/javadoc/2.29.0/index.html?org/apache/beam/runners/flink/FlinkPipelineOptions.html>FlinkPipelineOptions</a>
+<a href=https://beam.apache.org/releases/javadoc/2.30.0/index.html?org/apache/beam/runners/flink/FlinkPipelineOptions.html>FlinkPipelineOptions</a>
 reference class:</p><div class=language-java><table class="table table-bordered"><tr><td><code>allowNonRestoredState</code></td><td>Flag indicating whether non restored state is allowed if the savepoint contains state for an operator that is no longer part of the pipeline.</td><td>Default: <code>false</code></td></tr><tr><td><code>autoBalanceWriteFilesShardingEnabled</code></td><td>Flag indicating whether auto-balance sharding for WriteFiles transform should be enabled. This might prove  [...]
-<a href=https://beam.apache.org/releases/javadoc/2.29.0/index.html?org/apache/beam/sdk/options/PipelineOptions.html>PipelineOptions</a>
+<a href=https://beam.apache.org/releases/javadoc/2.30.0/index.html?org/apache/beam/sdk/options/PipelineOptions.html>PipelineOptions</a>
 reference.</p><h2 id=flink-version-compatibility>Flink Version Compatibility</h2><p>The Flink cluster version has to match the minor version used by the FlinkRunner.
 The minor version is the first two numbers in the version string, e.g. in <code>1.13.0</code> the
 minor version is <code>1.13</code>.</p><p>We try to track the latest version of Apache Flink at the time of the Beam release.
diff --git a/website/generated-content/documentation/runners/jstorm/index.html b/website/generated-content/documentation/runners/jstorm/index.html
index 522dc0d..6e07636 100644
--- a/website/generated-content/documentation/runners/jstorm/index.html
+++ b/website/generated-content/documentation/runners/jstorm/index.html
@@ -21,7 +21,7 @@ function blockScroll(){$("body").toggleClass("fixedPosition");}
 function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Documentation</span></li><li><a href=/documentation>Using the Documentation</a></li><li><span class=section-nav-list-title>How-to guides</span><ul clas [...]
   <span class=o>&lt;</span><span class=n>groupId</span><span class=o>&gt;</span><span class=n>org</span><span class=o>.</span><span class=na>apache</span><span class=o>.</span><span class=na>beam</span><span class=o>&lt;/</span><span class=n>groupId</span><span class=o>&gt;</span>
   <span class=o>&lt;</span><span class=n>artifactId</span><span class=o>&gt;</span><span class=n>beam</span><span class=o>-</span><span class=n>runners</span><span class=o>-</span><span class=n>jstorm</span><span class=o>&lt;/</span><span class=n>artifactId</span><span class=o>&gt;</span>
-  <span class=o>&lt;</span><span class=n>version</span><span class=o>&gt;</span><span class=n>2</span><span class=o>.</span><span class=na>29</span><span class=o>.</span><span class=na>0</span><span class=o>&lt;/</span><span class=n>version</span><span class=o>&gt;</span>
+  <span class=o>&lt;</span><span class=n>version</span><span class=o>&gt;</span><span class=n>2</span><span class=o>.</span><span class=na>30</span><span class=o>.</span><span class=na>0</span><span class=o>&lt;/</span><span class=n>version</span><span class=o>&gt;</span>
 <span class=o>&lt;/</span><span class=n>dependency</span><span class=o>&gt;</span></code></pre></div></div></div><h3 id=deploying-jstorm-with-your-application>Deploying JStorm with your application</h3><p>To run against a Standalone cluster, you can package your program with all Beam dependencies into a fat jar, and then submit the topology with the following command.</p><pre><code>jstorm jar WordCount.jar org.apache.beam.examples.WordCount --runner=org.apache.beam.runners.jstorm.JStormRunner
 </code></pre><p>If you don&rsquo;t want to package a fat jar, you can upload the Beam dependencies onto all cluster nodes(<code>$JSTORM_HOME/lib/ext/beam</code>) first.
 When you submit a topology with argument <code>"--external-libs beam"</code>, JStorm will load the Beam dependencies automatically.</p><pre><code>jstorm jar WordCount.jar org.apache.beam.examples.WordCount --external-libs beam  --runner=org.apache.beam.runners.jstorm.JStormRunner
diff --git a/website/generated-content/documentation/runners/mapreduce/index.html b/website/generated-content/documentation/runners/mapreduce/index.html
index aeb6207..19401fb 100644
--- a/website/generated-content/documentation/runners/mapreduce/index.html
+++ b/website/generated-content/documentation/runners/mapreduce/index.html
@@ -21,7 +21,7 @@ function blockScroll(){$("body").toggleClass("fixedPosition");}
 function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Runners</span></li><li><a href=/documentation/runners/capability-matrix/>Capability Matrix</a></li><li><a href=/documentation/runners/direct/>Direct Ru [...]
   &lt;groupId&gt;org.apache.beam&lt;/groupId&gt;
   &lt;artifactId&gt;beam-runners-mapreduce&lt;/artifactId&gt;
-  &lt;version&gt;2.29.0&lt;/version&gt;
+  &lt;version&gt;2.30.0&lt;/version&gt;
 &lt;/dependency&gt;
 </code></pre><h2 id=deploying-apache-hadoop-mapreduce-with-your-application>Deploying Apache Hadoop MapReduce with your application</h2><p>To execute in a local Hadoop environment, use this command:</p><pre><code>$ mvn exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \
     -Pmapreduce-runner \
diff --git a/website/generated-content/documentation/runners/samza/index.html b/website/generated-content/documentation/runners/samza/index.html
index f6ad386..02c2894 100644
--- a/website/generated-content/documentation/runners/samza/index.html
+++ b/website/generated-content/documentation/runners/samza/index.html
@@ -21,7 +21,7 @@ function blockScroll(){$("body").toggleClass("fixedPosition");}
 function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Runners</span></li><li><a href=/documentation/runners/capability-matrix/>Capability Matrix</a></li><li><a href=/documentation/runners/direct/>Direct Ru [...]
   <span class=o>&lt;</span><span class=n>groupId</span><span class=o>&gt;</span><span class=n>org</span><span class=o>.</span><span class=na>apache</span><span class=o>.</span><span class=na>beam</span><span class=o>&lt;/</span><span class=n>groupId</span><span class=o>&gt;</span>
   <span class=o>&lt;</span><span class=n>artifactId</span><span class=o>&gt;</span><span class=n>beam</span><span class=o>-</span><span class=n>runners</span><span class=o>-</span><span class=n>samza</span><span class=o>&lt;/</span><span class=n>artifactId</span><span class=o>&gt;</span>
-  <span class=o>&lt;</span><span class=n>version</span><span class=o>&gt;</span><span class=n>2</span><span class=o>.</span><span class=na>29</span><span class=o>.</span><span class=na>0</span><span class=o>&lt;/</span><span class=n>version</span><span class=o>&gt;</span>
+  <span class=o>&lt;</span><span class=n>version</span><span class=o>&gt;</span><span class=n>2</span><span class=o>.</span><span class=na>30</span><span class=o>.</span><span class=na>0</span><span class=o>&lt;/</span><span class=n>version</span><span class=o>&gt;</span>
   <span class=o>&lt;</span><span class=n>scope</span><span class=o>&gt;</span><span class=n>runtime</span><span class=o>&lt;/</span><span class=n>scope</span><span class=o>&gt;</span>
 <span class=o>&lt;/</span><span class=n>dependency</span><span class=o>&gt;</span>
 
diff --git a/website/generated-content/documentation/runners/spark/index.html b/website/generated-content/documentation/runners/spark/index.html
index 0ea7268..c4d25a4 100644
--- a/website/generated-content/documentation/runners/spark/index.html
+++ b/website/generated-content/documentation/runners/spark/index.html
@@ -30,7 +30,7 @@ the portable Runner. For more information on portability, please visit the
 <a href=/roadmap/portability/>Portability page</a>.</p><nav class=language-switcher><strong>Adapt for:</strong><ul><li data-type=language-java>Non portable (Java)</li><li data-type=language-py>Portable (Java/Python/Go)</li></ul></nav><h2 id=spark-runner-prerequisites-and-setup>Spark Runner prerequisites and setup</h2><p>The Spark runner currently supports Spark&rsquo;s 2.x branch, and more specifically any version greater than 2.4.0.</p><p class=language-java>You can add a dependency on  [...]
   <span class=o>&lt;</span><span class=n>groupId</span><span class=o>&gt;</span><span class=n>org</span><span class=o>.</span><span class=na>apache</span><span class=o>.</span><span class=na>beam</span><span class=o>&lt;/</span><span class=n>groupId</span><span class=o>&gt;</span>
   <span class=o>&lt;</span><span class=n>artifactId</span><span class=o>&gt;</span><span class=n>beam</span><span class=o>-</span><span class=n>runners</span><span class=o>-</span><span class=n>spark</span><span class=o>&lt;/</span><span class=n>artifactId</span><span class=o>&gt;</span>
-  <span class=o>&lt;</span><span class=n>version</span><span class=o>&gt;</span><span class=n>2</span><span class=o>.</span><span class=na>29</span><span class=o>.</span><span class=na>0</span><span class=o>&lt;/</span><span class=n>version</span><span class=o>&gt;</span>
+  <span class=o>&lt;</span><span class=n>version</span><span class=o>&gt;</span><span class=n>2</span><span class=o>.</span><span class=na>30</span><span class=o>.</span><span class=na>0</span><span class=o>&lt;/</span><span class=n>version</span><span class=o>&gt;</span>
 <span class=o>&lt;/</span><span class=n>dependency</span><span class=o>&gt;</span></code></pre></div></div></div><h3 id=deploying-spark-with-your-application>Deploying Spark with your application</h3><p class=language-java>In some cases, such as running in local mode/Standalone, your (self-contained) application would be required to pack Spark by explicitly adding the following dependencies in your pom.xml:</p><div class="language-java snippet"><div class="notebook-skip code-snippet"><a  [...]
   <span class=o>&lt;</span><span class=n>groupId</span><span class=o>&gt;</span><span class=n>org</span><span class=o>.</span><span class=na>apache</span><span class=o>.</span><span class=na>spark</span><span class=o>&lt;/</span><span class=n>groupId</span><span class=o>&gt;</span>
   <span class=o>&lt;</span><span class=n>artifactId</span><span class=o>&gt;</span><span class=n>spark</span><span class=o>-</span><span class=n>core_2</span><span class=o>.</span><span class=na>11</span><span class=o>&lt;/</span><span class=n>artifactId</span><span class=o>&gt;</span>
diff --git a/website/generated-content/documentation/sdks/feature-comparison/index.html b/website/generated-content/documentation/sdks/feature-comparison/index.html
index bf827b0..fcb168e 100644
--- a/website/generated-content/documentation/sdks/feature-comparison/index.html
+++ b/website/generated-content/documentation/sdks/feature-comparison/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/documentation/sdks/go/index.html b/website/generated-content/documentation/sdks/go/index.html
index b89d57d..234cefd 100644
--- a/website/generated-content/documentation/sdks/go/index.html
+++ b/website/generated-content/documentation/sdks/go/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 <a href=https://s.apache.org/beam-go-sdk-design-rfc>design</a>.</p><h2 id=get-started-with-the-go-sdk>Get Started with the Go SDK</h2><p>Get started with the <a href=/get-started/quickstart-go>Beam Go SDK quickstart</a> to set up your development environment and run an example pipeline. Then, read through the <a href=/documentation/programming-guide>Beam programming guide</a> to learn the basic concepts that apply to all SDKs in Beam.</p><p>See the <a href=https://godoc.org/github.com/ap [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
diff --git a/website/generated-content/documentation/sdks/java-dependencies/index.html b/website/generated-content/documentation/sdks/java-dependencies/index.html
index 24d4858..3b4b500 100644
--- a/website/generated-content/documentation/sdks/java-dependencies/index.html
+++ b/website/generated-content/documentation/sdks/java-dependencies/index.html
@@ -18,12 +18,12 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 import additional dependencies. Version collisions can result in unexpected
 behavior in the service. If you are using any of these packages in your code, be
 aware that some libraries are not forward-compatible and you may need to pin to
 the listed versions that will be in scope during execution.</p><p>Compile and runtime dependencies for your Beam SDK version are listed in <code>BeamModulePlugin.groovy</code> in the Beam repository. To view them, perform the following steps:</p><ol><li><p>Open <code>BeamModulePlugin.groovy</code>.</p><pre><code>https://raw.githubusercontent.com/apache/beam/v&lt;VERSION_NUMBER&gt;/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy
-</code></pre><p>Replace <code>&lt;VERSION_NUMBER></code> with the major.minor.patch version of the SDK. For example, <a href=https://raw.githubusercontent.com/apache/beam/v2.29.0/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy>https://raw.githubusercontent.com/apache/beam/v2.29.0/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy</a> will provide the dependencies for the 2.29.0 release.</p></li><li><p>Review the list under <code>project.ext.li [...]
+</code></pre><p>Replace <code>&lt;VERSION_NUMBER></code> with the major.minor.patch version of the SDK. For example, <a href=https://raw.githubusercontent.com/apache/beam/v2.30.0/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy>https://raw.githubusercontent.com/apache/beam/v2.30.0/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy</a> will provide the dependencies for the 2.30.0 release.</p></li><li><p>Review the list under <code>project.ext.li [...]
 export JAVA_VERSION=11
 </code></pre></li><li><p>Create the project.</p><pre><code>mvn archetype:generate \
     -DinteractiveMode=false \
diff --git a/website/generated-content/documentation/sdks/java-extensions/index.html b/website/generated-content/documentation/sdks/java-extensions/index.html
index 09779df..7007de3 100644
--- a/website/generated-content/documentation/sdks/java-extensions/index.html
+++ b/website/generated-content/documentation/sdks/java-extensions/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 is to simplify the most common cases of join to a simple function call.</p><p>The functions are generic and support joins of any Beam-supported types.
 Input to the join functions are <code>PCollections</code> of <code>Key</code> / <code>Value</code>s. Both
 the left and right <code>PCollection</code>s need the same type for the key. All the join
diff --git a/website/generated-content/documentation/sdks/java-thirdparty/index.html b/website/generated-content/documentation/sdks/java-thirdparty/index.html
index 2964a5f..7fab652 100644
--- a/website/generated-content/documentation/sdks/java-thirdparty/index.html
+++ b/website/generated-content/documentation/sdks/java-thirdparty/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 the webserver. The format of these log files is a configuration option in the Apache HTTPD server so parsing this
 into useful data elements is normally very hard to do.</p><p>To solve this problem in an easy way a library was created that works in combination with Apache Beam
 and is capable of doing this for both the Apache HTTPD and NGINX.</p><p>The basic idea is that the logformat specification is the schema used to create the line.
diff --git a/website/generated-content/documentation/sdks/java/euphoria/index.html b/website/generated-content/documentation/sdks/java/euphoria/index.html
index 3f79df5..9f12b42 100644
--- a/website/generated-content/documentation/sdks/java/euphoria/index.html
+++ b/website/generated-content/documentation/sdks/java/euphoria/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 In 2015, <a href=https://www.vldb.org/pvldb/vol8/p1792-Akidau.pdf>DataFlow whitepaper</a> inspired original authors to go one step further and also provide the unified API for both stream and batch processing.
 The API has been open-sourced in 2016 and is still in active development. As the Beam&rsquo;s community goal was very similar, we decided to contribute
 the API as a high level DSL over Beam Java SDK and share our effort with the community.</p><p>Euphoria DSL integration is still work in progress and is tracked as part of <a href=https://issues.apache.org/jira/browse/BEAM-3900>BEAM-3900</a>.</p><h2 id=wordcount-example>WordCount Example</h2><p>Lets start with the small example.<div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to [...]
diff --git a/website/generated-content/documentation/sdks/java/index.html b/website/generated-content/documentation/sdks/java/index.html
index e172aba..7e661d9 100644
--- a/website/generated-content/documentation/sdks/java/index.html
+++ b/website/generated-content/documentation/sdks/java/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/documentation/sdks/java/testing/nexmark/index.html b/website/generated-content/documentation/sdks/java/testing/nexmark/index.html
index 0c5ae07..7b5f820 100644
--- a/website/generated-content/documentation/sdks/java/testing/nexmark/index.html
+++ b/website/generated-content/documentation/sdks/java/testing/nexmark/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 queries in <a href=https://web.archive.org/web/20100620010601/http://datalab.cs.pdx.edu/niagaraST/NEXMark/>Nexmark research
 paper</a></p><p>These are multiple queries over a three entities model representing on online
 auction system:</p><ul><li><strong>Person</strong> represents a person submitting an item for auction and/or making
@@ -86,7 +86,7 @@ or may be published to Pub/Sub or Kafka.</p><p>The query results may be:</p><ul>
 --stagingLocation=gs://&lt;a gs path for staging&gt; \
 --runner=DataflowRunner \
 --tempLocation=gs://&lt;a gs path for temporary files&gt; \
---filesToStage=target/beam-sdks-java-nexmark-2.29.0.jar
+--filesToStage=target/beam-sdks-java-nexmark-2.30.0.jar
 </code></pre><h3 id=direct-runner-specific-configuration>Direct runner specific configuration</h3><pre><code>--manageResources=false --monitorJobs=true \
 --enforceEncodability=false --enforceImmutability=false
 </code></pre><h3 id=flink-runner-specific-configuration>Flink runner specific configuration</h3><pre><code>--manageResources=false --monitorJobs=true \
@@ -207,7 +207,7 @@ PUBSUB_TOPCI=&lt;existing pubsub topic&gt;
     --driver-memory 512m \
     --executor-memory 512m \
     --executor-cores 1 \
-    sdks/java/testing/nexmark/build/libs/beam-sdks-java-nexmark-2.29.0-spark.jar \
+    sdks/java/testing/nexmark/build/libs/beam-sdks-java-nexmark-2.30.0-spark.jar \
         --runner=SparkRunner \
         --query=0 \
         --streamTimeout=60 \
diff --git a/website/generated-content/documentation/sdks/python-dependencies/index.html b/website/generated-content/documentation/sdks/python-dependencies/index.html
index 0f038c7..ac164e1 100644
--- a/website/generated-content/documentation/sdks/python-dependencies/index.html
+++ b/website/generated-content/documentation/sdks/python-dependencies/index.html
@@ -18,12 +18,12 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 import additional dependencies. Version collisions can result in unexpected
 behavior in the service. If you are using any of these packages in your code, be
 aware that some libraries are not forward-compatible and you may need to pin to
 the listed versions that will be in scope during execution.</p><p>Dependencies for your Beam SDK version are listed in <code>setup.py</code> in the Beam repository. To view them, perform the following steps:</p><ol><li><p>Open <code>setup.py</code>.</p><pre><code>https://raw.githubusercontent.com/apache/beam/v&lt;VERSION_NUMBER&gt;/sdks/python/setup.py
-</code></pre><p>Replace <code>&lt;VERSION_NUMBER></code> with the major.minor.patch version of the SDK. For example, <a href=ttps://raw.githubusercontent.com/apache/beam/v2.29.0/sdks/python/setup.py target=_blank><a href=https://raw.githubusercontent.com/apache/beam/v2.29.0/sdks/python/setup.py>https://raw.githubusercontent.com/apache/beam/v2.29.0/sdks/python/setup.py</a></a> will provide the dependencies for the 2.29.0 release.</p></li><li><p>Review the core dependency list under <code> [...]
+</code></pre><p>Replace <code>&lt;VERSION_NUMBER></code> with the major.minor.patch version of the SDK. For example, <a href=ttps://raw.githubusercontent.com/apache/beam/v2.30.0/sdks/python/setup.py target=_blank><a href=https://raw.githubusercontent.com/apache/beam/v2.30.0/sdks/python/setup.py>https://raw.githubusercontent.com/apache/beam/v2.30.0/sdks/python/setup.py</a></a> will provide the dependencies for the 2.30.0 release.</p></li><li><p>Review the core dependency list under <code> [...]
 </code></pre></li><li><p><a href=/get-started/quickstart-py/#download-and-install>Install the Beam Python SDK</a>.</p></li><li><p>Retrieve the list of dependencies.</p><pre><code>$ pip install pipdeptree &amp;&amp; pipdeptree -p apache-beam
 </code></pre></li></ol></div></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class=footer-wrapper><div class=wrapper-grid><div class=footer__cols__col><div class [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
diff --git a/website/generated-content/documentation/sdks/python-pipeline-dependencies/index.html b/website/generated-content/documentation/sdks/python-pipeline-dependencies/index.html
index d5eda7b..7be8f46 100644
--- a/website/generated-content/documentation/sdks/python-pipeline-dependencies/index.html
+++ b/website/generated-content/documentation/sdks/python-pipeline-dependencies/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 </code></pre><p>This command creates a <code>requirements.txt</code> file that lists all packages that are installed on your machine, regardless of where they were installed from.</p></li><li><p>Edit the <code>requirements.txt</code> file and leave only the packages that were installed from PyPI and are used in the workflow source. Delete all packages that are not relevant to your code.</p></li><li><p>Run your pipeline with the following command-line option:</p><pre><code> --requirements [...]
 </code></pre><p>The runner will use the <code>requirements.txt</code> file to install your additional dependencies onto the remote workers.</p></li></ol><p><strong>Important:</strong> Remote workers will install all packages listed in the <code>requirements.txt</code> file. Because of this, it&rsquo;s very important that you delete non-PyPI packages from the <code>requirements.txt</code> file, as stated in step 2. If you don&rsquo;t remove non-PyPI packages, the remote workers will fail  [...]
 </code></pre><p>This command lists all packages that are installed on your machine, regardless of where they were installed from.</p></li><li><p>Run your pipeline with the following command-line option:</p><pre><code> --extra_package /path/to/package/package-name
diff --git a/website/generated-content/documentation/sdks/python-streaming/index.html b/website/generated-content/documentation/sdks/python-streaming/index.html
index 251ce73..03cd29c 100644
--- a/website/generated-content/documentation/sdks/python-streaming/index.html
+++ b/website/generated-content/documentation/sdks/python-streaming/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 <a href=#unsupported-features>limitations</a>) starting with Beam SDK version 2.5.0.</p><h2 id=why-use-streaming-execution>Why use streaming execution?</h2><p>Beam creates an unbounded PCollection if your pipeline reads from a streaming or
 continously-updating data source (such as Cloud Pub/Sub). A runner must
 process an unbounded PCollection using a streaming job that runs continuously,
diff --git a/website/generated-content/documentation/sdks/python-type-safety/index.html b/website/generated-content/documentation/sdks/python-type-safety/index.html
index d7403ff..8109bd6 100644
--- a/website/generated-content/documentation/sdks/python-type-safety/index.html
+++ b/website/generated-content/documentation/sdks/python-type-safety/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 The Beam SDK for Python implements a subset of <a href=https://www.python.org/dev/peps/pep-0484/>PEP 484</a> and aims to follow it as closely as possible in its own typehints module.</p><p>These flags control Beam type safety:</p><ul><li><p><code>--no_pipeline_type_check</code></p><p>Disables type checking during pipeline construction.
 Default is to perform these checks.</p></li><li><p><code>--runtime_type_check</code></p><p>Enables runtime type checking of every element.
 This may affect pipeline performance, so the default is to skip these checks.</p></li><li><p><code>--type_check_additional</code></p><p>Enables additional type checks. These are no enabled by default to preserve
diff --git a/website/generated-content/documentation/sdks/python/index.html b/website/generated-content/documentation/sdks/python/index.html
index 44f4bb4..a444441 100644
--- a/website/generated-content/documentation/sdks/python/index.html
+++ b/website/generated-content/documentation/sdks/python/index.html
@@ -18,7 +18,7 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Languages</span></li><li><span class=section-nav-list-title>Java</span><ul class=section-nav-list><li><a href=/documentation/sdks/java/>Java SDK overvi [...]
 is experimentally available (with some <a href=/documentation/sdks/python-streaming/#unsupported-features>limitations</a>)
 starting with Beam SDK version 2.5.0.</p><h2 id=python-type-safety>Python type safety</h2><p>Python is a dynamically-typed language with no static type checking. The Beam SDK for Python uses type hints during pipeline construction and runtime to try to emulate the correctness guarantees achieved by true static typing. <a href=/documentation/sdks/python-type-safety>Ensuring Python Type Safety</a> walks through how to use type hints, which help you to catch potential bugs up front with the [...]
 new I/O connectors. See the <a href=/documentation/io/developing-io-overview>Developing I/O connectors overview</a>
diff --git a/website/generated-content/feed.xml b/website/generated-content/feed.xml
index c7f6cab..e2f1a03 100644
--- a/website/generated-content/feed.xml
+++ b/website/generated-content/feed.xml
@@ -1,4 +1,66 @@
-<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Apache Beam</title><description>Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Languages (DSLs). Dataflow pipelines simplify the mechanics of large-scale batch and streaming data processing and can run on a number [...]
+<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Apache Beam</title><description>Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Languages (DSLs). Dataflow pipelines simplify the mechanics of large-scale batch and streaming data processing and can run on a number [...]
+&lt;!--
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+&lt;p>We are happy to present the new 2.30.0 release of Beam.
+This release includes both improvements and new functionality.
+See the &lt;a href="/get-started/downloads/#2300-2021-06-09">download page&lt;/a> for this release.&lt;/p>
+&lt;p>For more information on changes in 2.30.0, check out the &lt;a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12319527&amp;amp;version=12349978">detailed release notes&lt;/a>.&lt;/p>
+&lt;h2 id="highlights">Highlights&lt;/h2>
+&lt;ul>
+&lt;li>Legacy Read transform (non-SDF based Read) is used by default for non-FnAPI opensource runners. Use &lt;code>use_sdf_read&lt;/code> experimental flag to re-enable SDF based Read transforms (&lt;a href="https://issues.apache.org/jira/browse/BEAM-10670">BEAM-10670&lt;/a>)&lt;/li>
+&lt;li>Upgraded vendored gRPC dependency to 1.36.0 (&lt;a href="https://issues.apache.org/jira/browse/BEAM-11227">BEAM-11227&lt;/a>)&lt;/li>
+&lt;/ul>
+&lt;h3 id="ios">I/Os&lt;/h3>
+&lt;ul>
+&lt;li>Fixed the issue that WriteToBigQuery with batch file loads does not respect schema update options when there are multiple load jobs (&lt;a href="https://issues.apache.org/jira/browse/BEAM-11277">BEAM-11277&lt;/a>)&lt;/li>
+&lt;li>Fixed the issue that the job didn&amp;rsquo;t properly retry since BigQuery sink swallows HttpErrors when performing streaming inserts (&lt;a href="https://issues.apache.org/jira/browse/BEAM-12362">BEAM-12362&lt;/a>)&lt;/li>
+&lt;/ul>
+&lt;h3 id="new-features--improvements">New Features / Improvements&lt;/h3>
+&lt;ul>
+&lt;li>Added capability to declare resource hints in Java and Python SDKs (&lt;a href="https://issues.apache.org/jira/browse/BEAM-2085">BEAM-2085&lt;/a>)&lt;/li>
+&lt;li>Added Spanner IO Performance tests for read and write in Python SDK (&lt;a href="https://issues.apache.org/jira/browse/BEAM-10029">BEAM-10029&lt;/a>)&lt;/li>
+&lt;li>Added support for accessing GCP PubSub Message ordering keys, message IDs and message publish timestamp in Python SDK (&lt;a href="https://issues.apache.org/jira/browse/BEAM-7819">BEAM-7819&lt;/a>)&lt;/li>
+&lt;li>DataFrame API: Added support for collecting DataFrame objects in interactive Beam (&lt;a href="https://issues.apache.org/jira/browse/BEAM-11855">BEAM-11855&lt;/a>)&lt;/li>
+&lt;li>DataFrame API: Added &lt;a href="https://github.com/apache/beam/tree/master/sdks/python/apache_beam/examples/dataframe">apache_beam.examples.dataframe&lt;/a> module (&lt;a href="https://issues.apache.org/jira/browse/BEAM-12024">BEAM-12024&lt;/a>)&lt;/li>
+&lt;li>Upgraded the GCP Libraries BOM version to 20.0.0 (&lt;a href="https://issues.apache.org/jira/browse/BEAM-11205">BEAM-11205&lt;/a>). For Google Cloud client library versions set by this BOM, see &lt;a href="https://storage.googleapis.com/cloud-opensource-java-dashboard/com.google.cloud/libraries-bom/20.0.0/artifact_details.html">this table&lt;/a>&lt;/li>
+&lt;li>Added &lt;code>sdkContainerImage&lt;/code> flag to (eventually) replace &lt;code>workerHarnessContainerImage&lt;/code> (&lt;a href="https://issues.apache.org/jira/browse/BEAM-12212">BEAM-12212&lt;/a>)&lt;/li>
+&lt;li>Added support for Dataflow update when schemas are used (&lt;a href="https://issues.apache.org/jira/browse/BEAM-12198">BEAM-12198&lt;/a>)&lt;/li>
+&lt;li>Fixed the issue that &lt;code>ZipFiles.zipDirectory&lt;/code> leaks native JVM memory (&lt;a href="https://issues.apache.org/jira/browse/BEAM-12220">BEAM-12220&lt;/a>)&lt;/li>
+&lt;li>Fixed the issue that &lt;code>Reshuffle.withNumBuckets&lt;/code> creates &lt;code>(N*2)-1&lt;/code> buckets (&lt;a href="https://issues.apache.org/jira/browse/BEAM-12361">BEAM-12361&lt;/a>)&lt;/li>
+&lt;/ul>
+&lt;h3 id="breaking-changes">Breaking Changes&lt;/h3>
+&lt;ul>
+&lt;li>Drop support for Flink 1.8 and 1.9 (&lt;a href="https://issues.apache.org/jira/browse/BEAM-11948">BEAM-11948&lt;/a>)&lt;/li>
+&lt;li>MongoDbIO: Read.withFilter() and Read.withProjection() are removed since they are deprecated since Beam 2.12.0 (&lt;a href="https://issues.apache.org/jira/browse/BEAM-12217">BEAM-12217&lt;/a>)&lt;/li>
+&lt;li>RedisIO.readAll() was removed since it was deprecated since Beam 2.13.0. Please use RedisIO.readKeyPatterns() for the equivalent functionality (&lt;a href="https://issues.apache.org/jira/browse/BEAM-12214">BEAM-12214&lt;/a>)&lt;/li>
+&lt;li>MqttIO.create() with clientId constructor removed because it was deprecated since Beam 2.13.0 (&lt;a href="https://issues.apache.org/jira/browse/BEAM-12216">BEAM-12216&lt;/a>)&lt;/li>
+&lt;/ul>
+&lt;h3 id="known-issues">Known Issues&lt;/h3>
+&lt;ul>
+&lt;li>See a full list of open &lt;a href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20BEAM%20AND%20affectedVersion%20%3D%202.30.0%20ORDER%20BY%20priority%20DESC%2C%20updated%20DESC">issues that affect&lt;/a> this version.&lt;/li>
+&lt;/ul>
+&lt;h2 id="list-of-contributors">List of Contributors&lt;/h2>
+&lt;p>According to &lt;code>git shortlog&lt;/code>, the following people contributed to the 2.30.0 release. Thank you to all contributors!&lt;/p>
+&lt;p>Ahmet Altay, Alex Amato, Alexey Romanenko, Anant Damle, Andreas Bergmeier, Andrew Pilloud, Ankur Goenka,
+Anup D, Artur Khanin, Benjamin Gonzalez, Bipin Upadhyaya, Boyuan Zhang, Brian Hulette, Bulat Shakirzyanov,
+Chamikara Jayalath, Chun Yang, Daniel Kulp, Daniel Oliveira, David Cavazos, Elliotte Rusty Harold, Emily Ye,
+Eric Roshan-Eisner, Evan Galpin, Fabien Caylus, Fernando Morales, Heejong Lee, Iñigo San Jose Visiers,
+Isidro Martínez, Ismaël Mejía, Ke Wu, Kenneth Knowles, KevinGG, Kyle Weaver, Ludovic Post, MATTHEW Ouyang (LCL),
+Mackenzie Clark, Masato Nakamura, Matthias Baetens, Max, Nicholas Azar, Ning Kang, Pablo Estrada, Patrick McCaffrey,
+Quentin Sommer, Reuven Lax, Robert Bradshaw, Robert Burke, Rui Wang, Sam Rohde, Sam Whittle, Shoaib Zafar,
+Siyuan Chen, Sruthi Sree Kumar, Steve Niemitz, Sylvain Veyrié, Tomo Suzuki, Udi Meiri, Valentyn Tymofieiev,
+Vitaly Terentyev, Wenbing, Xinyu Liu, Yichi Zhang, Yifan Mai, Yueyang Qiu, Yunqing Zhou, ajo thomas, brucearctor,
+dmkozh, dpcollins-google, emily, jordan-moore, kileys, lostluck, masahitojp, roger-mike, sychen, tvalentyn,
+vachan-shetty, yoshiki.obata&lt;/p></description><link>/blog/beam-2.30.0/</link><pubDate>Wed, 09 Jun 2021 09:00:00 -0700</pubDate><guid>/blog/beam-2.30.0/</guid><category>blog</category></item><item><title>How to validate a Beam Release</title><description>
 &lt;!--
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
@@ -701,74 +763,4 @@ Saavan Nanavati, Sam Bourne, Sam Rohde, Sam Whittle, Sergiy Kolesnikov, Sindy Li
 Niemitz, Terry Xian, Thomas Weise, Tobiasz Kędzierski, Truc Le, Tyson Hamilton, Udi Meiri, Valentyn
 Tymofieiev, Yichi Zhang, Yifan Mai, Yueyang Qiu, annaqin418, danielxjd, dennis, dp, fuyuwei,
 lostluck, nehsyc, odeshpande, odidev, pulasthi, purbanow, rworley-monster, sclukas77, terryxian78,
-tvalentyn, yoshiki.obata&lt;/p></description><link>/blog/beam-2.25.0/</link><pubDate>Fri, 23 Oct 2020 14:00:00 -0800</pubDate><guid>/blog/beam-2.25.0/</guid><category>blog</category></item><item><title>Apache Beam 2.24.0</title><description>
-&lt;!--
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-http://www.apache.org/licenses/LICENSE-2.0
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
--->
-&lt;p>We are happy to present the new 2.24.0 release of Apache Beam. This release includes both improvements and new functionality.
-See the &lt;a href="/get-started/downloads/#2240-2020-09-18">download page&lt;/a> for this release.&lt;/p>
-&lt;p>For more information on changes in 2.24.0, check out the
-&lt;a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12319527&amp;amp;version=12347146">detailed release notes&lt;/a>.&lt;/p>
-&lt;h2 id="highlights">Highlights&lt;/h2>
-&lt;ul>
-&lt;li>Apache Beam 2.24.0 is the last release with Python 2 and Python 3.5
-support.&lt;/li>
-&lt;/ul>
-&lt;h2 id="ios">I/Os&lt;/h2>
-&lt;ul>
-&lt;li>New overloads for BigtableIO.Read.withKeyRange() and BigtableIO.Read.withRowFilter()
-methods that take ValueProvider as a parameter (Java) (&lt;a href="https://issues.apache.org/jira/browse/BEAM-10283">BEAM-10283&lt;/a>).&lt;/li>
-&lt;li>The WriteToBigQuery transform (Python) in Dataflow Batch no longer relies on BigQuerySink by default. It relies on
-a new, fully-featured transform based on file loads into BigQuery. To revert the behavior to the old implementation,
-you may use &lt;code>--experiments=use_legacy_bq_sink&lt;/code>.&lt;/li>
-&lt;li>Add cross-language support to Java&amp;rsquo;s JdbcIO, now available in the Python module &lt;code>apache_beam.io.jdbc&lt;/code> (&lt;a href="https://issues.apache.org/jira/browse/BEAM-10135">BEAM-10135&lt;/a>, &lt;a href="https://issues.apache.org/jira/browse/BEAM-10136">BEAM-10136&lt;/a>).&lt;/li>
-&lt;li>Add support of AWS SDK v2 for KinesisIO.Read (Java) (&lt;a href="https://issues.apache.org/jira/browse/BEAM-9702">BEAM-9702&lt;/a>).&lt;/li>
-&lt;li>Add streaming support to SnowflakeIO in Java SDK (&lt;a href="https://issues.apache.org/jira/browse/BEAM-9896">BEAM-9896&lt;/a>)&lt;/li>
-&lt;li>Support reading and writing to Google Healthcare DICOM APIs in Python SDK (&lt;a href="https://issues.apache.org/jira/browse/BEAM-10601">BEAM-10601&lt;/a>)&lt;/li>
-&lt;li>Add dispositions for SnowflakeIO.write (&lt;a href="https://issues.apache.org/jira/browse/BEAM-10343">BEAM-10343&lt;/a>)&lt;/li>
-&lt;li>Add cross-language support to SnowflakeIO.Read now available in the Python module &lt;code>apache_beam.io.external.snowflake&lt;/code> (&lt;a href="https://issues.apache.org/jira/browse/BEAM-9897">BEAM-9897&lt;/a>).&lt;/li>
-&lt;/ul>
-&lt;h2 id="new-features--improvements">New Features / Improvements&lt;/h2>
-&lt;ul>
-&lt;li>Shared library for simplifying management of large shared objects added to Python SDK. Example use case is sharing a large TF model object across threads (&lt;a href="https://issues.apache.org/jira/browse/BEAM-10417">BEAM-10417&lt;/a>).&lt;/li>
-&lt;li>Dataflow streaming timers are not strictly time ordered when set earlier mid-bundle (&lt;a href="https://issues.apache.org/jira/browse/BEAM-8543">BEAM-8543&lt;/a>).&lt;/li>
-&lt;li>OnTimerContext should not create a new one when processing each element/timer in FnApiDoFnRunner (&lt;a href="https://issues.apache.org/jira/browse/BEAM-9839">BEAM-9839&lt;/a>)&lt;/li>
-&lt;li>Key should be available in @OnTimer methods (Spark Runner) (&lt;a href="https://issues.apache.org/jira/browse/BEAM-9850">BEAM-9850&lt;/a>)&lt;/li>
-&lt;/ul>
-&lt;h2 id="breaking-changes">Breaking Changes&lt;/h2>
-&lt;ul>
-&lt;li>WriteToBigQuery transforms now require a GCS location to be provided through either
-custom_gcs_temp_location in the constructor of WriteToBigQuery or the fallback option
-&amp;ndash;temp_location, or pass method=&amp;quot;STREAMING_INSERTS&amp;rdquo; to WriteToBigQuery (&lt;a href="https://issues.apache.org/jira/browse/BEAM-6928">BEAM-6928&lt;/a>).&lt;/li>
-&lt;li>Python SDK now understands &lt;code>typing.FrozenSet&lt;/code> type hints, which are not interchangeable with &lt;code>typing.Set&lt;/code>. You may need to update your pipelines if type checking fails. (&lt;a href="https://issues.apache.org/jira/browse/BEAM-10197">BEAM-10197&lt;/a>)&lt;/li>
-&lt;/ul>
-&lt;h2 id="known-issues">Known Issues&lt;/h2>
-&lt;ul>
-&lt;li>Default compressor change breaks dataflow python streaming job update compatibility. Please use python SDK version &amp;lt;= 2.23.0 or &amp;gt; 2.25.0 if job update is critical.(&lt;a href="https://issues.apache.org/jira/browse/BEAM-11113">BEAM-11113&lt;/a>)&lt;/li>
-&lt;/ul>
-&lt;h2 id="list-of-contributors">List of Contributors&lt;/h2>
-&lt;p>According to git shortlog, the following people contributed to the 2.24.0 release. Thank you to all contributors!&lt;/p>
-&lt;p>adesormi, Ahmet Altay, Alex Amato, Alexey Romanenko, Andrew Pilloud, Ashwin Ramaswami, Borzoo,
-Boyuan Zhang, Brian Hulette, Brian M, Bu Sun Kim, Chamikara Jayalath, Colm O hEigeartaigh,
-Corvin Deboeser, Damian Gadomski, Damon Douglas, Daniel Oliveira, Dariusz Aniszewski,
-davidak09, David Cavazos, David Moravek, David Yan, dhodun, Doug Roeper, Emil Hessman, Emily Ye,
-Etienne Chauchot, Etta Rapp, Eugene Kirpichov, fuyuwei, Gleb Kanterov,
-Harrison Green, Heejong Lee, Henry Suryawirawan, InigoSJ, Ismaël Mejía, Israel Herraiz,
-Jacob Ferriero, Jan Lukavský, Jayendra, jfarr, jhnmora000, Jiadai Xia, JIahao wu, Jie Fan,
-Jiyong Jung, Julius Almeida, Kamil Gałuszka, Kamil Wasilewski, Kasia Kucharczyk, Kenneth Knowles,
-Kevin Puthusseri, Kyle Weaver, Łukasz Gajowy, Luke Cwik, Mark-Zeng, Maximilian Michels,
-Michal Walenia, Niel Markwick, Ning Kang, Pablo Estrada, pawel.urbanowicz, Piotr Szuberski,
-Rafi Kamal, rarokni, Rehman Murad Ali, Reuben van Ammers, Reuven Lax, Ricardo Bordon,
-Robert Bradshaw, Robert Burke, Robin Qiu, Rui Wang, Saavan Nanavati, sabhyankar, Sam Rohde,
-Scott Lukas, Siddhartha Thota, Simone Primarosa, Sławomir Andrian,
-Steve Niemitz, Tobiasz Kędzierski, Tomo Suzuki, Tyson Hamilton, Udi Meiri,
-Valentyn Tymofieiev, viktorjonsson, Xinyu Liu, Yichi Zhang, Yixing Zhang, yoshiki.obata,
-Yueyang Qiu, zijiesong&lt;/p></description><link>/blog/beam-2.24.0/</link><pubDate>Fri, 18 Sep 2020 00:00:01 -0800</pubDate><guid>/blog/beam-2.24.0/</guid><category>blog</category></item></channel></rss>
\ No newline at end of file
+tvalentyn, yoshiki.obata&lt;/p></description><link>/blog/beam-2.25.0/</link><pubDate>Fri, 23 Oct 2020 14:00:00 -0800</pubDate><guid>/blog/beam-2.25.0/</guid><category>blog</category></item></channel></rss>
\ No newline at end of file
diff --git a/website/generated-content/get-started/downloads/index.html b/website/generated-content/get-started/downloads/index.html
index a624dec..a142e71 100644
--- a/website/generated-content/get-started/downloads/index.html
+++ b/website/generated-content/get-started/downloads/index.html
@@ -18,22 +18,22 @@
 function addPlaceholder(){$('input:text').attr('placeholder',"What are you looking for?");}
 function endSearch(){var search=document.querySelector(".searchBar");search.classList.add("disappear");var icons=document.querySelector("#iconsBar");icons.classList.remove("disappear");}
 function blockScroll(){$("body").toggleClass("fixedPosition");}
-function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Get started</span></li><li><a href=/get-started/beam-overview/>Beam Overview</a></li><li><a href=/get-started/tour-of-beam/>Tour of Beam</a></li><li><s [...]
+function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Get started</span></li><li><a href=/get-started/beam-overview/>Beam Overview</a></li><li><a href=/get-started/tour-of-beam/>Tour of Beam</a></li><li><s [...]
 central repository. The Java SDK is available on <a href=https://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.apache.beam%22>Maven Central Repository</a>,
 and the Python SDK is available on <a href=https://pypi.python.org/pypi/apache-beam>PyPI</a>.</p><p>For example, if you are developing using Maven and want to use the SDK for Java
 with the <code>DirectRunner</code>, add the following dependencies to your <code>pom.xml</code> file:</p><pre><code>&lt;dependency&gt;
   &lt;groupId&gt;org.apache.beam&lt;/groupId&gt;
   &lt;artifactId&gt;beam-sdks-java-core&lt;/artifactId&gt;
-  &lt;version&gt;2.29.0&lt;/version&gt;
+  &lt;version&gt;2.30.0&lt;/version&gt;
 &lt;/dependency&gt;
 &lt;dependency&gt;
   &lt;groupId&gt;org.apache.beam&lt;/groupId&gt;
   &lt;artifactId&gt;beam-runners-direct-java&lt;/artifactId&gt;
-  &lt;version&gt;2.29.0&lt;/version&gt;
+  &lt;version&gt;2.30.0&lt;/version&gt;
   &lt;scope&gt;runtime&lt;/scope&gt;
 &lt;/dependency&gt;
 </code></pre><p>Similarly in Python, if you are using PyPI and want to use the SDK for Python
-with <code>DirectRunner</code>, add the following requirement to your <code>setup.py</code> file:</p><pre><code>apache-beam==2.29.0
+with <code>DirectRunner</code>, add the following requirement to your <code>setup.py</code> file:</p><pre><code>apache-beam==2.30.0
 </code></pre><p>Additionally, you may want to depend on additional SDK modules, such as IO
 connectors or other extensions, and additional runners to execute your pipeline
 at scale.</p><h2 id=downloading-source-code>Downloading source code</h2><p>You can download the source code package for a release from the links in the
@@ -46,9 +46,12 @@ every release file (or SHA-1 and MD5 checksums for older releases). After you
 download the file, you should calculate a checksum for your download, and make
 sure it is the same as ours.</p><h2 id=api-stability>API stability</h2><p>Apache Beam generally follows the rules of
 <a href=https://semver.org/>semantic versioning</a> with exceptions. Version numbers use
-the form <code>major.minor.patch</code> and are incremented as follows:</p><ul><li>major version for incompatible API changes</li><li>minor version for new functionality added in a backward-compatible manner, infrequent incompatible API changes</li><li>patch version for forward-compatible bug fixes</li></ul><p>Please note that APIs marked <a href=https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/annotations/Experimental.html><code>@Experimental</code></a>
+the form <code>major.minor.patch</code> and are incremented as follows:</p><ul><li>major version for incompatible API changes</li><li>minor version for new functionality added in a backward-compatible manner, infrequent incompatible API changes</li><li>patch version for forward-compatible bug fixes</li></ul><p>Please note that APIs marked <a href=https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/annotations/Experimental.html><code>@Experimental</code></a>
 may change at any point and are not guaranteed to remain compatible across versions.</p><p>Additionally, any API may change before the first stable release, i.e., between
-versions denoted <code>0.x.y</code>.</p><h2 id=releases>Releases</h2><h3 id=2290-2021-04-27>2.29.0 (2021-04-27)</h3><p>Official <a href=http://www.apache.org/dyn/closer.cgi/beam/2.29.0/apache-beam-2.29.0-source-release.zip>source code download</a>.
+versions denoted <code>0.x.y</code>.</p><h2 id=releases>Releases</h2><h3 id=2300-2021-06-09>2.30.0 (2021-06-09)</h3><p>Official <a href=http://www.apache.org/dyn/closer.cgi/beam/2.30.0/apache-beam-2.30.0-source-release.zip>source code download</a>.
+<a href=https://downloads.apache.org/beam/2.30.0/apache-beam-2.30.0-source-release.zip.sha512>SHA-512</a>.
+<a href=https://downloads.apache.org/beam/2.30.0/apache-beam-2.30.0-source-release.zip.asc>signature</a>.</p><p><a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12319527&version=12349978">Release notes</a>
+<a href=/blog/beam-2.30.0>Blog post</a>.</p><h3 id=2290-2021-04-27>2.29.0 (2021-04-27)</h3><p>Official <a href=http://www.apache.org/dyn/closer.cgi/beam/2.29.0/apache-beam-2.29.0-source-release.zip>source code download</a>.
 <a href=https://downloads.apache.org/beam/2.29.0/apache-beam-2.29.0-source-release.zip.sha512>SHA-512</a>.
 <a href=https://downloads.apache.org/beam/2.29.0/apache-beam-2.29.0-source-release.zip.asc>signature</a>.</p><p><a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12319527&version=12349629">Release notes</a>
 <a href=/blog/beam-2.29.0>Blog post</a>.</p><h3 id=2280-2021-02-22>2.28.0 (2021-02-22)</h3><p>Official <a href=http://www.apache.org/dyn/closer.cgi/beam/2.28.0/apache-beam-2.28.0-source-release.zip>source code download</a>.
@@ -139,7 +142,7 @@ versions denoted <code>0.x.y</code>.</p><h2 id=releases>Releases</h2><h3 id=2290
 <a href=https://archive.apache.org/dist/beam/2.1.0/apache-beam-2.1.0-source-release.zip.asc>signature</a>.</p><p><a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12319527&version=12340528">Release notes</a>.</p><h3 id=200-2017-05-17>2.0.0 (2017-05-17)</h3><p>Official <a href=https://archive.apache.org/dist/beam/2.0.0/apache-beam-2.0.0-source-release.zip>source code download</a>.
 <a href=https://archive.apache.org/dist/beam/2.0.0/apache-beam-2.0.0-source-release.zip.sha1>SHA-1</a>.
 <a href=https://archive.apache.org/dist/beam/2.0.0/apache-beam-2.0.0-source-release.zip.md5>MD5</a>.
-<a href=https://archive.apache.org/dist/beam/2.0.0/apache-beam-2.0.0-source-release.zip.asc>signature</a>.</p><p><a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12319527&version=12339746">Release notes</a>.</p><div class=feedback><p class=update>Last updated on 2021/05/05</p><h3>Have you found everything you were looking for?</h3><p class=description>Was it all useful and clear? Is there anything that you would like to change? Let us know!</p><button class=load- [...]
+<a href=https://archive.apache.org/dist/beam/2.0.0/apache-beam-2.0.0-source-release.zip.asc>signature</a>.</p><p><a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12319527&version=12339746">Release notes</a>.</p><div class=feedback><p class=update>Last updated on 2021/05/26</p><h3>Have you found everything you were looking for?</h3><p class=description>Was it all useful and clear? Is there anything that you would like to change? Let us know!</p><button class=load- [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/get-started/index.xml b/website/generated-content/get-started/index.xml
index f08232d..82694a9 100644
--- a/website/generated-content/get-started/index.xml
+++ b/website/generated-content/get-started/index.xml
@@ -1165,7 +1165,7 @@ limitations under the License.
 &lt;pre>&lt;code>$ mvn archetype:generate \
 -DarchetypeGroupId=org.apache.beam \
 -DarchetypeArtifactId=beam-sdks-java-maven-archetypes-examples \
--DarchetypeVersion=2.29.0 \
+-DarchetypeVersion=2.30.0 \
 -DgroupId=org.example \
 -DartifactId=word-count-beam \
 -Dversion=&amp;#34;0.1&amp;#34; \
@@ -1181,7 +1181,7 @@ limitations under the License.
 &lt;pre>&lt;code>PS&amp;gt; mvn archetype:generate `
 -D archetypeGroupId=org.apache.beam `
 -D archetypeArtifactId=beam-sdks-java-maven-archetypes-examples `
--D archetypeVersion=2.29.0 `
+-D archetypeVersion=2.30.0 `
 -D groupId=org.example `
 -D artifactId=word-count-beam `
 -D version=&amp;#34;0.1&amp;#34; `
@@ -2074,7 +2074,7 @@ limitations under the License.
 -->
 &lt;h1 id="apache-beam8482-downloads">Apache Beam™ Downloads&lt;/h1>
 &lt;blockquote>
-&lt;p>Beam SDK 2.29.0 is the latest released version.&lt;/p>
+&lt;p>Beam SDK 2.30.0 is the latest released version.&lt;/p>
 &lt;/blockquote>
 &lt;h2 id="using-a-central-repository">Using a central repository&lt;/h2>
 &lt;p>The easiest way to use Apache Beam is via one of the released versions in a
@@ -2085,18 +2085,18 @@ with the &lt;code>DirectRunner&lt;/code>, add the following dependencies to your
 &lt;pre>&lt;code>&amp;lt;dependency&amp;gt;
 &amp;lt;groupId&amp;gt;org.apache.beam&amp;lt;/groupId&amp;gt;
 &amp;lt;artifactId&amp;gt;beam-sdks-java-core&amp;lt;/artifactId&amp;gt;
-&amp;lt;version&amp;gt;2.29.0&amp;lt;/version&amp;gt;
+&amp;lt;version&amp;gt;2.30.0&amp;lt;/version&amp;gt;
 &amp;lt;/dependency&amp;gt;
 &amp;lt;dependency&amp;gt;
 &amp;lt;groupId&amp;gt;org.apache.beam&amp;lt;/groupId&amp;gt;
 &amp;lt;artifactId&amp;gt;beam-runners-direct-java&amp;lt;/artifactId&amp;gt;
-&amp;lt;version&amp;gt;2.29.0&amp;lt;/version&amp;gt;
+&amp;lt;version&amp;gt;2.30.0&amp;lt;/version&amp;gt;
 &amp;lt;scope&amp;gt;runtime&amp;lt;/scope&amp;gt;
 &amp;lt;/dependency&amp;gt;
 &lt;/code>&lt;/pre>
 &lt;p>Similarly in Python, if you are using PyPI and want to use the SDK for Python
 with &lt;code>DirectRunner&lt;/code>, add the following requirement to your &lt;code>setup.py&lt;/code> file:&lt;/p>
-&lt;pre>&lt;code>apache-beam==2.29.0
+&lt;pre>&lt;code>apache-beam==2.30.0
 &lt;/code>&lt;/pre>
 &lt;p>Additionally, you may want to depend on additional SDK modules, such as IO
 connectors or other extensions, and additional runners to execute your pipeline
@@ -2122,11 +2122,17 @@ the form &lt;code>major.minor.patch&lt;/code> and are incremented as follows:&lt
 &lt;li>minor version for new functionality added in a backward-compatible manner, infrequent incompatible API changes&lt;/li>
 &lt;li>patch version for forward-compatible bug fixes&lt;/li>
 &lt;/ul>
-&lt;p>Please note that APIs marked &lt;a href="https://beam.apache.org/releases/javadoc/2.29.0/org/apache/beam/sdk/annotations/Experimental.html">&lt;code>@Experimental&lt;/code>&lt;/a>
+&lt;p>Please note that APIs marked &lt;a href="https://beam.apache.org/releases/javadoc/2.30.0/org/apache/beam/sdk/annotations/Experimental.html">&lt;code>@Experimental&lt;/code>&lt;/a>
 may change at any point and are not guaranteed to remain compatible across versions.&lt;/p>
 &lt;p>Additionally, any API may change before the first stable release, i.e., between
 versions denoted &lt;code>0.x.y&lt;/code>.&lt;/p>
 &lt;h2 id="releases">Releases&lt;/h2>
+&lt;h3 id="2300-2021-06-09">2.30.0 (2021-06-09)&lt;/h3>
+&lt;p>Official &lt;a href="http://www.apache.org/dyn/closer.cgi/beam/2.30.0/apache-beam-2.30.0-source-release.zip">source code download&lt;/a>.
+&lt;a href="https://downloads.apache.org/beam/2.30.0/apache-beam-2.30.0-source-release.zip.sha512">SHA-512&lt;/a>.
+&lt;a href="https://downloads.apache.org/beam/2.30.0/apache-beam-2.30.0-source-release.zip.asc">signature&lt;/a>.&lt;/p>
+&lt;p>&lt;a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12319527&amp;amp;version=12349978">Release notes&lt;/a>
+&lt;a href="/blog/beam-2.30.0">Blog post&lt;/a>.&lt;/p>
 &lt;h3 id="2290-2021-04-27">2.29.0 (2021-04-27)&lt;/h3>
 &lt;p>Official &lt;a href="http://www.apache.org/dyn/closer.cgi/beam/2.29.0/apache-beam-2.29.0-source-release.zip">source code download&lt;/a>.
 &lt;a href="https://downloads.apache.org/beam/2.29.0/apache-beam-2.29.0-source-release.zip.sha512">SHA-512&lt;/a>.
@@ -4174,7 +4180,7 @@ python -m apache_beam.examples.streaming_wordcount \
 &lt;h3 id="reading-an-unbounded-dataset">Reading an unbounded dataset&lt;/h3>
 &lt;p>This example uses an unbounded dataset as input. The code reads Pub/Sub
 messages from a Pub/Sub subscription or topic using
-&lt;a href="https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.io.gcp.pubsub.html#apache_beam.io.gcp.pubsub.ReadFromPubSub">&lt;code>beam.io.ReadFromPubSub&lt;/code>&lt;/a>.&lt;/p>
+&lt;a href="https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.io.gcp.pubsub.html#apache_beam.io.gcp.pubsub.ReadFromPubSub">&lt;code>beam.io.ReadFromPubSub&lt;/code>&lt;/a>.&lt;/p>
 &lt;div class='language-java snippet'>
 &lt;div class="notebook-skip code-snippet">
 &lt;a class="copy" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Copy to clipboard">
@@ -4212,7 +4218,7 @@ support only bounded output, while others support both bounded and unbounded
 outputs.&lt;/p>
 &lt;p>This example uses an unbounded &lt;code>PCollection&lt;/code> and streams the results to
 Google Pub/Sub. The code formats the results and writes them to a Pub/Sub topic
-using &lt;a href="https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.io.gcp.pubsub.html#apache_beam.io.gcp.pubsub.WriteToPubSub">&lt;code>beam.io.WriteToPubSub&lt;/code>&lt;/a>.&lt;/p>
+using &lt;a href="https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.io.gcp.pubsub.html#apache_beam.io.gcp.pubsub.WriteToPubSub">&lt;code>beam.io.WriteToPubSub&lt;/code>&lt;/a>.&lt;/p>
 &lt;div class='language-java snippet'>
 &lt;div class="notebook-skip code-snippet">
 &lt;a class="copy" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Copy to clipboard">
diff --git a/website/generated-content/get-started/quickstart-java/index.html b/website/generated-content/get-started/quickstart-java/index.html
index 1d00833..ff6113c 100644
--- a/website/generated-content/get-started/quickstart-java/index.html
+++ b/website/generated-content/get-started/quickstart-java/index.html
@@ -21,7 +21,7 @@ function blockScroll(){$("body").toggleClass("fixedPosition");}
 function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfix container-main-content"><div class="section-nav closed" data-offset-top=90 data-offset-bottom=500><span class="section-nav-back glyphicon glyphicon-menu-left"></span><nav><ul class=section-nav-list data-section-nav><li><span class=section-nav-list-main-title>Get started</span></li><li><a href=/get-started/beam-overview/>Beam Overview</a></li><li><a href=/get-started/tour-of-beam/>Tour of Beam</a></li><li><s [...]
       -DarchetypeGroupId=org.apache.beam \
       -DarchetypeArtifactId=beam-sdks-java-maven-archetypes-examples \
-      -DarchetypeVersion=2.29.0 \
+      -DarchetypeVersion=2.30.0 \
       -DgroupId=org.example \
       -DartifactId=word-count-beam \
       -Dversion=&#34;0.1&#34; \
@@ -29,7 +29,7 @@ function openMenu(){addPlaceholder();blockScroll();}</script><div class="clearfi
       -DinteractiveMode=false</code></pre></div></div><div class=snippet><div class="notebook-skip code-snippet without_switcher"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><pre><code>PS&gt; mvn archetype:generate `
  -D archetypeGroupId=org.apache.beam `
  -D archetypeArtifactId=beam-sdks-java-maven-archetypes-examples `
- -D archetypeVersion=2.29.0 `
+ -D archetypeVersion=2.30.0 `
  -D groupId=org.example `
  -D artifactId=word-count-beam `
  -D version=&#34;0.1&#34; `
diff --git a/website/generated-content/get-started/wordcount-example/index.html b/website/generated-content/get-started/wordcount-example/index.html
index 33a3376..085e925 100644
--- a/website/generated-content/get-started/wordcount-example/index.html
+++ b/website/generated-content/get-started/wordcount-example/index.html
@@ -588,7 +588,7 @@ python -m apache_beam.examples.streaming_wordcount \
 <strong><a href=https://github.com/apache/beam/blob/master/sdks/python/apache_beam/examples/streaming_wordcount.py>streaming_wordcount.py</a>.</strong></p><p><strong>To run this example in Go:</strong></p><blockquote><p><strong>Note:</strong> StreamingWordCount is not yet available for the Go SDK. There is an open issue for this
 (<a href=https://issues.apache.org/jira/browse/BEAM-4292>BEAM-4292</a>).</p></blockquote><h3 id=reading-an-unbounded-dataset>Reading an unbounded dataset</h3><p>This example uses an unbounded dataset as input. The code reads Pub/Sub
 messages from a Pub/Sub subscription or topic using
-<a href=https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.io.gcp.pubsub.html#apache_beam.io.gcp.pubsub.ReadFromPubSub><code>beam.io.ReadFromPubSub</code></a>.</p><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-java data-lang=java>  <span class=o>//</span> <span  [...]
+<a href=https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.io.gcp.pubsub.html#apache_beam.io.gcp.pubsub.ReadFromPubSub><code>beam.io.ReadFromPubSub</code></a>.</p><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-java data-lang=java>  <span class=o>//</span> <span  [...]
   <span class=k>if</span> <span class=n>known_args</span><span class=o>.</span><span class=n>input_subscription</span><span class=p>:</span>
     <span class=n>data</span> <span class=o>=</span> <span class=n>p</span> <span class=o>|</span> <span class=n>beam</span><span class=o>.</span><span class=n>io</span><span class=o>.</span><span class=n>ReadFromPubSub</span><span class=p>(</span>
         <span class=n>subscription</span><span class=o>=</span><span class=n>known_args</span><span class=o>.</span><span class=n>input_subscription</span><span class=p>)</span>
@@ -599,7 +599,7 @@ such, you must make sure to choose an appropriate I/O for the results. Some I/Os
 support only bounded output, while others support both bounded and unbounded
 outputs.</p><p>This example uses an unbounded <code>PCollection</code> and streams the results to
 Google Pub/Sub. The code formats the results and writes them to a Pub/Sub topic
-using <a href=https://beam.apache.org/releases/pydoc/2.29.0/apache_beam.io.gcp.pubsub.html#apache_beam.io.gcp.pubsub.WriteToPubSub><code>beam.io.WriteToPubSub</code></a>.</p><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-java data-lang=java>  <span class=o>//</span> <s [...]
+using <a href=https://beam.apache.org/releases/pydoc/2.30.0/apache_beam.io.gcp.pubsub.html#apache_beam.io.gcp.pubsub.WriteToPubSub><code>beam.io.WriteToPubSub</code></a>.</p><div class="language-java snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre class=chroma><code class=language-java data-lang=java>  <span class=o>//</span> <s [...]
   <span class=n>_</span> <span class=o>=</span> <span class=p>(</span><span class=n>output</span>
     <span class=o>|</span> <span class=s1>&#39;EncodeString&#39;</span> <span class=o>&gt;&gt;</span> <span class=n>Map</span><span class=p>(</span><span class=k>lambda</span> <span class=n>s</span><span class=p>:</span> <span class=n>s</span><span class=o>.</span><span class=n>encode</span><span class=p>(</span><span class=s1>&#39;utf-8&#39;</span><span class=p>))</span>
     <span class=o>|</span> <span class=n>beam</span><span class=o>.</span><span class=n>io</span><span class=o>.</span><span class=n>WriteToPubSub</span><span class=p>(</span><span class=n>known_args</span><span class=o>.</span><span class=n>output_topic</span><span class=p>))</span></code></pre></div></div></div><div class="language-go snippet"><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img [...]
diff --git a/website/generated-content/index.html b/website/generated-content/index.html
index 86e7568..d5403f6 100644
--- a/website/generated-content/index.html
+++ b/website/generated-content/index.html
@@ -25,7 +25,7 @@ function openMenu(){addPlaceholder();blockScroll();}</script><div class="body__c
 <img src=/images/model-ellipse.svg>
 <img src=/images/model-sinks-icon.svg class=icon></div><div class=row><div class=column><img src=/images/model-sources-icon.svg class="icon mobile"><h4>Sources</h4><p>Beam reads your data from a diverse set of supported sources, no matter if it’s on-prem or in the cloud.</p></div><div class=column><img src=/images/model-processing-icon.svg class="icon mobile"><h4>Processing</h4><p>Beam executes your business logic for Batch and Streaming use cases.</p></div><div class=column><img src=/im [...]
 <img src=/images/logos/runners/spark.png></div><p class=more>& MORE</p><div><h4>Choose your runner</h4><p>A Beam pipeline can execute in the most popular distributed data processing systems such as Spark, Flink or Samza.</p></div></div><div class=column><div class=logos-row><img class=first_logo src=/images/logos/sdks/python-logo.png>
-<img src=/images/logos/sdks/go.png></div><p class=more>& MORE</p><div><h4>Choose your language</h4><p>You can write Apache Beam pipelines in your programming language of choice: Java, Python and Go. Learn More.</p></div></div></div></div></div><div class=calendar><h2 class=calendar-title>Stay up to date with Beam</h2><div class=calendar-content><div class="calendar-card-big calendar-card-big-left"><div class=desktop><a class=twitter-timeline data-width=381 data-height=460 href="https://t [...]
+<img src=/images/logos/sdks/go.png></div><p class=more>& MORE</p><div><h4>Choose your language</h4><p>You can write Apache Beam pipelines in your programming language of choice: Java, Python and Go. Learn More.</p></div></div></div></div></div><div class=calendar><h2 class=calendar-title>Stay up to date with Beam</h2><div class=calendar-content><div class="calendar-card-big calendar-card-big-left"><div class=desktop><a class=twitter-timeline data-width=381 data-height=460 href="https://t [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></div></div></div></footer></div><script src=/js/hero/lottie-light.min.js></script><script src=/js/hero/hero-desktop.js></script><script src=/js/hero/hero-mobile.js></script>< [...]
\ No newline at end of file
diff --git a/website/generated-content/sitemap.xml b/website/generated-content/sitemap.xml
index e68d19e..0131fdd 100644
--- a/website/generated-content/sitemap.xml
+++ b/website/generated-content/sitemap.xml
@@ -1 +1 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml"><url><loc>/categories/blog/</loc><lastmod>2021-06-09T10:56:20-07:00</lastmod></url><url><loc>/blog/</loc><lastmod>2021-06-09T10:56:20-07:00</lastmod></url><url><loc>/categories/</loc><lastmod>2021-06-09T10:56:20-07:00</lastmod></url><url><loc>/blog/validate-beam-release/</loc><lastmod>2021-06-09T10:56:20-07:00</lastmod></url><url><l [...]
\ No newline at end of file
+<?xml version="1.0" encoding="utf-8" standalone="yes"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml"><url><loc>/blog/beam-2.30.0/</loc><lastmod>2021-05-26T19:50:36-07:00</lastmod></url><url><loc>/categories/blog/</loc><lastmod>2021-06-09T10:56:20-07:00</lastmod></url><url><loc>/blog/</loc><lastmod>2021-06-09T10:56:20-07:00</lastmod></url><url><loc>/categories/</loc><lastmod>2021-06-09T10:56:20-07:00</lastmod></url><url><loc>/blog/v [...]
\ No newline at end of file

Mime
View raw message