You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by mm...@apache.org on 2019/07/09 17:02:50 UTC

[pulsar] branch asf-site updated: Updated site at revision b291272

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

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


The following commit(s) were added to refs/heads/asf-site by this push:
     new 8d7cc1a  Updated site at revision b291272
8d7cc1a is described below

commit 8d7cc1a4602d59d0ebbb189751306ce13571a32b
Author: jenkins <bu...@apache.org>
AuthorDate: Tue Jul 9 17:02:43 2019 +0000

    Updated site at revision b291272
---
 content/blog/2018/08/06/Apache-Pulsar-2-1-0.html   |   2 +-
 .../blog/2018/08/06/Apache-Pulsar-2-1-0/index.html |   2 +-
 content/blog/2019/02/20/Apache-Pulsar-2-3-0.html   |   2 +-
 .../blog/2019/02/20/Apache-Pulsar-2-3-0/index.html |   2 +-
 content/blog/2019/07/05/Apache-Pulsar-2-4-0.html   | 225 +++++++++++++++++++++
 .../blog/2019/07/05/Apache-Pulsar-2-4-0/index.html | 225 +++++++++++++++++++++
 content/blog/atom.xml                              |  20 +-
 content/blog/feed.xml                              |  15 +-
 content/blog/index.html                            |  10 +-
 .../2.1.0-incubating/client-libraries-python.html  |   2 +-
 .../client-libraries-python/index.html             |   2 +-
 .../2.1.1-incubating/client-libraries-python.html  |   2 +-
 .../client-libraries-python/index.html             |   2 +-
 content/docs/en/2.2.0/client-libraries-python.html |   2 +-
 .../en/2.2.0/client-libraries-python/index.html    |   2 +-
 content/docs/en/2.2.1/client-libraries-python.html |   2 +-
 .../en/2.2.1/client-libraries-python/index.html    |   2 +-
 content/docs/en/2.3.0/client-libraries-python.html |   2 +-
 .../en/2.3.0/client-libraries-python/index.html    |   2 +-
 content/docs/en/2.3.1/client-libraries-python.html |   2 +-
 .../en/2.3.1/client-libraries-python/index.html    |   2 +-
 content/docs/en/2.3.2/client-libraries-python.html |   2 +-
 .../en/2.3.2/client-libraries-python/index.html    |   2 +-
 content/docs/en/client-libraries-python.html       |   2 +-
 content/docs/en/client-libraries-python/index.html |   2 +-
 content/docs/en/next/client-libraries-python.html  |   2 +-
 .../en/next/client-libraries-python/index.html     |   2 +-
 .../2.1.0-incubating/client-libraries-python.html  |   2 +-
 .../client-libraries-python/index.html             |   2 +-
 .../2.1.1-incubating/client-libraries-python.html  |   2 +-
 .../client-libraries-python/index.html             |   2 +-
 content/docs/fr/2.2.0/client-libraries-python.html |   2 +-
 .../fr/2.2.0/client-libraries-python/index.html    |   2 +-
 content/docs/fr/2.2.1/client-libraries-python.html |   2 +-
 .../fr/2.2.1/client-libraries-python/index.html    |   2 +-
 content/docs/fr/2.3.0/client-libraries-python.html |   2 +-
 .../fr/2.3.0/client-libraries-python/index.html    |   2 +-
 content/docs/fr/2.3.1/client-libraries-python.html |   2 +-
 .../fr/2.3.1/client-libraries-python/index.html    |   2 +-
 content/docs/fr/2.3.2/client-libraries-python.html |   2 +-
 .../fr/2.3.2/client-libraries-python/index.html    |   2 +-
 content/docs/fr/client-libraries-python.html       |   2 +-
 content/docs/fr/client-libraries-python/index.html |   2 +-
 content/docs/fr/next/client-libraries-python.html  |   2 +-
 .../fr/next/client-libraries-python/index.html     |   2 +-
 .../2.1.0-incubating/client-libraries-python.html  |   2 +-
 .../client-libraries-python/index.html             |   2 +-
 .../2.1.1-incubating/client-libraries-python.html  |   2 +-
 .../client-libraries-python/index.html             |   2 +-
 content/docs/ja/2.2.0/client-libraries-python.html |   2 +-
 .../ja/2.2.0/client-libraries-python/index.html    |   2 +-
 content/docs/ja/2.2.1/client-libraries-python.html |   2 +-
 .../ja/2.2.1/client-libraries-python/index.html    |   2 +-
 content/docs/ja/2.3.0/client-libraries-python.html |   2 +-
 .../ja/2.3.0/client-libraries-python/index.html    |   2 +-
 content/docs/ja/2.3.1/client-libraries-python.html |   2 +-
 .../ja/2.3.1/client-libraries-python/index.html    |   2 +-
 content/docs/ja/2.3.2/client-libraries-python.html |   2 +-
 .../ja/2.3.2/client-libraries-python/index.html    |   2 +-
 content/docs/ja/client-libraries-python.html       |   2 +-
 content/docs/ja/client-libraries-python/index.html |   2 +-
 content/docs/ja/next/client-libraries-python.html  |   2 +-
 .../ja/next/client-libraries-python/index.html     |   2 +-
 .../2.1.0-incubating/client-libraries-python.html  |   6 +-
 .../client-libraries-python/index.html             |   6 +-
 .../2.1.0-incubating/cookbooks-message-queue.html  |  14 +-
 .../cookbooks-message-queue/index.html             |  14 +-
 .../2.1.1-incubating/client-libraries-python.html  |   6 +-
 .../client-libraries-python/index.html             |   6 +-
 .../2.1.1-incubating/cookbooks-message-queue.html  |  14 +-
 .../cookbooks-message-queue/index.html             |  14 +-
 .../docs/zh-CN/2.2.0/client-libraries-python.html  |   6 +-
 .../zh-CN/2.2.0/client-libraries-python/index.html |   6 +-
 .../docs/zh-CN/2.2.0/cookbooks-message-queue.html  |  14 +-
 .../zh-CN/2.2.0/cookbooks-message-queue/index.html |  14 +-
 .../docs/zh-CN/2.2.1/client-libraries-python.html  |   6 +-
 .../zh-CN/2.2.1/client-libraries-python/index.html |   6 +-
 .../docs/zh-CN/2.2.1/cookbooks-message-queue.html  |  14 +-
 .../zh-CN/2.2.1/cookbooks-message-queue/index.html |  14 +-
 .../docs/zh-CN/2.3.0/client-libraries-python.html  |   6 +-
 .../zh-CN/2.3.0/client-libraries-python/index.html |   6 +-
 .../docs/zh-CN/2.3.0/cookbooks-message-queue.html  |  14 +-
 .../zh-CN/2.3.0/cookbooks-message-queue/index.html |  14 +-
 .../docs/zh-CN/2.3.1/client-libraries-python.html  |   6 +-
 .../zh-CN/2.3.1/client-libraries-python/index.html |   6 +-
 .../docs/zh-CN/2.3.1/cookbooks-message-queue.html  |  14 +-
 .../zh-CN/2.3.1/cookbooks-message-queue/index.html |  14 +-
 .../docs/zh-CN/2.3.2/client-libraries-python.html  |   6 +-
 .../zh-CN/2.3.2/client-libraries-python/index.html |   6 +-
 .../docs/zh-CN/2.3.2/cookbooks-message-queue.html  |  14 +-
 .../zh-CN/2.3.2/cookbooks-message-queue/index.html |  14 +-
 content/docs/zh-CN/client-libraries-python.html    |   6 +-
 .../docs/zh-CN/client-libraries-python/index.html  |   6 +-
 content/docs/zh-CN/cookbooks-message-queue.html    |  14 +-
 .../docs/zh-CN/cookbooks-message-queue/index.html  |  14 +-
 .../docs/zh-CN/next/client-libraries-python.html   |   6 +-
 .../zh-CN/next/client-libraries-python/index.html  |   6 +-
 .../docs/zh-CN/next/cookbooks-message-queue.html   |  14 +-
 .../zh-CN/next/cookbooks-message-queue/index.html  |  14 +-
 content/sitemap.xml                                |   1 +
 content/swagger/2.5.0-SNAPSHOT/swagger.json        |  34 ++--
 .../swagger/2.5.0-SNAPSHOT/swaggerfunctions.json   |  38 ++--
 102 files changed, 766 insertions(+), 278 deletions(-)

diff --git a/content/blog/2018/08/06/Apache-Pulsar-2-1-0.html b/content/blog/2018/08/06/Apache-Pulsar-2-1-0.html
index 54ffc05..8e5274a 100644
--- a/content/blog/2018/08/06/Apache-Pulsar-2-1-0.html
+++ b/content/blog/2018/08/06/Apache-Pulsar-2-1-0.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div c [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div c [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/blog/2018/08/06/Apache-Pulsar-2-1-0/index.html b/content/blog/2018/08/06/Apache-Pulsar-2-1-0/index.html
index 54ffc05..8e5274a 100644
--- a/content/blog/2018/08/06/Apache-Pulsar-2-1-0/index.html
+++ b/content/blog/2018/08/06/Apache-Pulsar-2-1-0/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div c [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div c [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/blog/2019/02/20/Apache-Pulsar-2-3-0.html b/content/blog/2019/02/20/Apache-Pulsar-2-3-0.html
index 89972e7..11e6a16 100644
--- a/content/blog/2019/02/20/Apache-Pulsar-2-3-0.html
+++ b/content/blog/2019/02/20/Apache-Pulsar-2-3-0.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div c [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div c [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/blog/2019/02/20/Apache-Pulsar-2-3-0/index.html b/content/blog/2019/02/20/Apache-Pulsar-2-3-0/index.html
index 89972e7..11e6a16 100644
--- a/content/blog/2019/02/20/Apache-Pulsar-2-3-0/index.html
+++ b/content/blog/2019/02/20/Apache-Pulsar-2-3-0/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div c [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div c [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/blog/2019/07/05/Apache-Pulsar-2-4-0.html b/content/blog/2019/07/05/Apache-Pulsar-2-4-0.html
new file mode 100644
index 0000000..11ec004
--- /dev/null
+++ b/content/blog/2019/07/05/Apache-Pulsar-2-4-0.html
@@ -0,0 +1,225 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Pulsar 2.4.0 · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="We are glad to publish Apache Pulsar 2.4.0. This is the result of a huge "/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Apache Pulsar 2.4.0 · Apache Pulsar"/><m [...]
+              (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+              (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+              m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+              })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+              ga('create', 'UA-102219959-1', 'auto');
+              ga('send', 'pageview');
+            </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sid [...]
+        const languagesMenuItem = document.getElementById("languages-menu");
+        const languagesDropDown = document.getElementById("languages-dropdown");
+        languagesMenuItem.addEventListener("click", function(event) {
+          event.preventDefault();
+
+          if (languagesDropDown.className == "hide") {
+            languagesDropDown.className = "visible";
+          } else {
+            languagesDropDown.className = "hide";
+          }
+        });
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div c [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/blog/2019/07/05/Apache-Pulsar-2-4-0">Apache Pulsar 2.4.0</a></h1><p class="post-meta">July 5, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/lipenghui6" target="_blank" rel="noreferrer noopener">Penghui Li</a></p></div></header><d [...]
+effort from the community, with over 460 commits and a long list of new features,
+general improvements and bug fixes.</p>
+<p>Check out the <b><a href="/release-notes/#2.4.0">release notes</a></b> for a detailed list of
+the changes, with links to the relevant pull requests, discussions and documentation.</p>
+<p>Regarding new features introduced, I just want to highlight here a tiny subset of them:</p>
+<!--truncate-->
+<h3><a class="anchor" aria-hidden="true" id="delayed-message-delivery"></a><a href="#delayed-message-delivery" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
+<p>It's now possible to send a delayed message by Pulsar producer, and a delayed message will be
+available after a delay time.</p>
+<p>The Java code for a client using delayed messages delivery looks as follows:</p>
+<pre><code class="hljs css language-java">producer.newMessage().value(<span class="hljs-string">"delayed message"</span>).deliverAfter(<span class="hljs-number">10</span>, TimeUnit.SECONDS).send()
+</code></pre>
+<blockquote>
+<p>Note:</p>
+<ol>
+<li>Messages are only delayed on shared subscriptions, other subscriptions will deliver immediately.</li>
+<li>Delayed messages are sent individually even if you enable message batching on producer.</li>
+</ol>
+</blockquote>
+<h3><a class="anchor" aria-hidden="true" id="go-functions"></a><a href="#go-functions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<p>Before 2.4.0 release, Java and Python are supported to write Pulsar Functions. Now, you can
+use Go to write Pulsar Functions, the following is an example of
+a Pulsar Function written in Go.</p>
+<pre><code class="hljs css language-go"><span class="hljs-keyword">import</span> (
+    <span class="hljs-string">"fmt"</span>
+    <span class="hljs-string">"context"</span>
+
+    <span class="hljs-string">"github.com/apache/pulsar/pulsar-function-go/pf"</span>
+)
+
+<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">HandleRequest</span><span class="hljs-params">(ctx context.Context, in []<span class="hljs-keyword">byte</span>)</span> <span class="hljs-title">error</span></span> {
+    fmt.Println(<span class="hljs-keyword">string</span>(in) + <span class="hljs-string">"!"</span>)
+    <span class="hljs-keyword">return</span> <span class="hljs-literal">nil</span>
+}
+
+<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> {
+    pf.Start(HandleRequest)
+}
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="key_shared-subscription"></a><a href="#key_shared-subscription" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
+<p>A new subscription mode <code>Key_shared</code> is introduced in 2.4.0. In <code>Key_shared</code> subscription mode,
+one partition could have several consumers to consume messages in parallelism and ensure messages
+with the same key are distributed to a consumer in order.
+Here is <a href="http://pulsar.apache.org/docs/en/concepts-messaging/#key_shared">architecture</a>
+for Key_Shared.</p>
+<p>The following is an example to use <code>Key_shared</code> subscription:</p>
+<pre><code class="hljs css language-java">client.newConsumer()
+        .topic(<span class="hljs-string">"topic"</span>)
+        .subscriptionType(SubscriptionType.Key_Shared)
+        .subscriptionName(<span class="hljs-string">"sub-1"</span>)
+        .subscribe();
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="schema-versioning"></a><a href="#schema-versioning" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<p>Before 2.4.0 release, Avro schema used one schema for both writer schema and reader schema.
+Multiple schemas version is supported now.</p>
+<p>With multiple schemas, a producer can send messages with different schema versions and a consumer
+can read messages with different schemas.</p>
+<p>In 2.4.0 release, <code>FORWARD_TRANSITIVE</code>, <code>BACKWARD_TRANSITIVE</code> and <code>FULL_TRANSITIVE</code> compatibility
+strategies are added to check the compatibility with all existing schema version.</p>
+<h3><a class="anchor" aria-hidden="true" id="replicated-subscription"></a><a href="#replicated-subscription" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
+<p>In 2.4.0 release, a mechanism is added to keep subscription state in sync, within a sub-second timeframe,
+in the context of a topic that is being asynchronously replicated across multiple geographical
+regions. Here is <a href="https://github.com/apache/pulsar/wiki/PIP-33%3A-Replicated-subscriptions">architecture</a>
+for replicated subscription.</p>
+<p>The following is an example to use replicated subscription:</p>
+<pre><code class="hljs css language-java">Consumer&lt;String&gt; consumer = client.newConsumer(Schema.STRING)
+            .topic(<span class="hljs-string">"my-topic"</span>)
+            .subscriptionName(<span class="hljs-string">"my-subscription"</span>)
+            .replicateSubscriptionState(<span class="hljs-keyword">true</span>)
+            .subscribe();
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="new-io-connectors"></a><a href="#new-io-connectors" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<p>A new batch of connectors is added, including Flume, Redis sink, Solr sink, RabbitMQ sink.
+The following lists builtin <a href="http://pulsar.apache.org/docs/en/io-connectors/">connectors</a>
+that Pulsar supports.</p>
+<h3><a class="anchor" aria-hidden="true" id="security"></a><a href="#security" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<p>In 2.4.0 release, Kerberos is supported in Apache Pulsar broker and client.
+To enable Kerberos authentication, refer to the <a href="http://pulsar.apache.org/docs/en/security-kerberos/">document</a>.</p>
+<p>Also added role based Pulsar Function authentication and authorization.</p>
+<h2><a class="anchor" aria-hidden="true" id="conclusion"></a><a href="#conclusion" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<p>If you want to download Pulsar 2.4.0, click <a href="/download">here</a>. You can send any questions or suggestions
+to our mailing lists, contribute to Pulsar on <a href="https://github.com/apache/pulsar">GitHub</a> or join
+the Apache Pulsar community on <a href="https://apache-pulsar.herokuapp.com/">Slack</a>.</p>
+</span></div></div><div class="blogSocialSection"><div class="blogSocialSectionItem"><a href="https://twitter.com/share" class="twitter-share-button" data-text="Apache Pulsar 2.4.0" data-url="https://pulsar.incubator.apache.org/blog/2019/07/05/Apache-Pulsar-2-4-0" data-related="true" data-show-count="false">Tweet</a></div></div></div><div class="blog-recent"><a class="button" href="/blog">Recent Posts</a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#conc [...]
+      const community = document.querySelector("a[href='#community']").parentNode;
+      const communityMenu =
+        '<li>' +
+        '<a id="community-menu" href="#">Community <span style="font-size: 0.75em">&nbsp;▼</span></a>' +
+        '<div id="community-dropdown" class="hide">' +
+          '<ul id="community-dropdown-items">' +
+            '<li><a href="/en/contact">Contact</a></li>' +
+            '<li><a href="/en/contributing">Contributing</a></li>' +
+            '<li><a href="/en/events">Events</a></li>' +
+            '<li><a href="https://twitter.com/Apache_Pulsar" target="_blank">Twitter &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/wiki" target="_blank">Wiki &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/issues" target="_blank">Issue tracking &#x2750</a></li>' +
+            '<li>&nbsp;</li>' +
+            '<li><a href="/en/resources">Resources</a></li>' +
+            '<li><a href="/en/team">Team</a></li>' +
+          '</ul>' +
+        '</div>' +
+        '</li>';
+
+      community.innerHTML = communityMenu;
+
+      const communityMenuItem = document.getElementById("community-menu");
+      const communityDropDown = document.getElementById("community-dropdown");
+      communityMenuItem.addEventListener("click", function(event) {
+        event.preventDefault();
+
+        if (communityDropDown.className == 'hide') {
+          communityDropDown.className = 'visible';
+        } else {
+          communityDropDown.className = 'hide';
+        }
+      });
+    </script></span><span><script src="/js/pjax-api.min.js"></script><script>window.navfoo = new Pjax({
+            areas: [
+              // try to use the first query.
+              '.mainContainer, .docsNavContainer .toc .navWrapper, .onPageNav',
+              // fallback
+              'body'
+            ],
+            link: '.docsNavContainer:not(.docsSliderActive) a',
+            update: {
+              script: false,
+            }
+          });
+        </script></span></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</scri [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: 'd226a455cecdd4bc18a554c1b47e5b52',
+                indexName: 'apache_pulsar',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:2.4.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/blog/2019/07/05/Apache-Pulsar-2-4-0/index.html b/content/blog/2019/07/05/Apache-Pulsar-2-4-0/index.html
new file mode 100644
index 0000000..11ec004
--- /dev/null
+++ b/content/blog/2019/07/05/Apache-Pulsar-2-4-0/index.html
@@ -0,0 +1,225 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Pulsar 2.4.0 · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="We are glad to publish Apache Pulsar 2.4.0. This is the result of a huge "/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Apache Pulsar 2.4.0 · Apache Pulsar"/><m [...]
+              (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+              (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+              m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+              })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+              ga('create', 'UA-102219959-1', 'auto');
+              ga('send', 'pageview');
+            </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sid [...]
+        const languagesMenuItem = document.getElementById("languages-menu");
+        const languagesDropDown = document.getElementById("languages-dropdown");
+        languagesMenuItem.addEventListener("click", function(event) {
+          event.preventDefault();
+
+          if (languagesDropDown.className == "hide") {
+            languagesDropDown.className = "visible";
+          } else {
+            languagesDropDown.className = "hide";
+          }
+        });
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div c [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/blog/2019/07/05/Apache-Pulsar-2-4-0">Apache Pulsar 2.4.0</a></h1><p class="post-meta">July 5, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/lipenghui6" target="_blank" rel="noreferrer noopener">Penghui Li</a></p></div></header><d [...]
+effort from the community, with over 460 commits and a long list of new features,
+general improvements and bug fixes.</p>
+<p>Check out the <b><a href="/release-notes/#2.4.0">release notes</a></b> for a detailed list of
+the changes, with links to the relevant pull requests, discussions and documentation.</p>
+<p>Regarding new features introduced, I just want to highlight here a tiny subset of them:</p>
+<!--truncate-->
+<h3><a class="anchor" aria-hidden="true" id="delayed-message-delivery"></a><a href="#delayed-message-delivery" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
+<p>It's now possible to send a delayed message by Pulsar producer, and a delayed message will be
+available after a delay time.</p>
+<p>The Java code for a client using delayed messages delivery looks as follows:</p>
+<pre><code class="hljs css language-java">producer.newMessage().value(<span class="hljs-string">"delayed message"</span>).deliverAfter(<span class="hljs-number">10</span>, TimeUnit.SECONDS).send()
+</code></pre>
+<blockquote>
+<p>Note:</p>
+<ol>
+<li>Messages are only delayed on shared subscriptions, other subscriptions will deliver immediately.</li>
+<li>Delayed messages are sent individually even if you enable message batching on producer.</li>
+</ol>
+</blockquote>
+<h3><a class="anchor" aria-hidden="true" id="go-functions"></a><a href="#go-functions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<p>Before 2.4.0 release, Java and Python are supported to write Pulsar Functions. Now, you can
+use Go to write Pulsar Functions, the following is an example of
+a Pulsar Function written in Go.</p>
+<pre><code class="hljs css language-go"><span class="hljs-keyword">import</span> (
+    <span class="hljs-string">"fmt"</span>
+    <span class="hljs-string">"context"</span>
+
+    <span class="hljs-string">"github.com/apache/pulsar/pulsar-function-go/pf"</span>
+)
+
+<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">HandleRequest</span><span class="hljs-params">(ctx context.Context, in []<span class="hljs-keyword">byte</span>)</span> <span class="hljs-title">error</span></span> {
+    fmt.Println(<span class="hljs-keyword">string</span>(in) + <span class="hljs-string">"!"</span>)
+    <span class="hljs-keyword">return</span> <span class="hljs-literal">nil</span>
+}
+
+<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> {
+    pf.Start(HandleRequest)
+}
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="key_shared-subscription"></a><a href="#key_shared-subscription" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
+<p>A new subscription mode <code>Key_shared</code> is introduced in 2.4.0. In <code>Key_shared</code> subscription mode,
+one partition could have several consumers to consume messages in parallelism and ensure messages
+with the same key are distributed to a consumer in order.
+Here is <a href="http://pulsar.apache.org/docs/en/concepts-messaging/#key_shared">architecture</a>
+for Key_Shared.</p>
+<p>The following is an example to use <code>Key_shared</code> subscription:</p>
+<pre><code class="hljs css language-java">client.newConsumer()
+        .topic(<span class="hljs-string">"topic"</span>)
+        .subscriptionType(SubscriptionType.Key_Shared)
+        .subscriptionName(<span class="hljs-string">"sub-1"</span>)
+        .subscribe();
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="schema-versioning"></a><a href="#schema-versioning" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<p>Before 2.4.0 release, Avro schema used one schema for both writer schema and reader schema.
+Multiple schemas version is supported now.</p>
+<p>With multiple schemas, a producer can send messages with different schema versions and a consumer
+can read messages with different schemas.</p>
+<p>In 2.4.0 release, <code>FORWARD_TRANSITIVE</code>, <code>BACKWARD_TRANSITIVE</code> and <code>FULL_TRANSITIVE</code> compatibility
+strategies are added to check the compatibility with all existing schema version.</p>
+<h3><a class="anchor" aria-hidden="true" id="replicated-subscription"></a><a href="#replicated-subscription" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
+<p>In 2.4.0 release, a mechanism is added to keep subscription state in sync, within a sub-second timeframe,
+in the context of a topic that is being asynchronously replicated across multiple geographical
+regions. Here is <a href="https://github.com/apache/pulsar/wiki/PIP-33%3A-Replicated-subscriptions">architecture</a>
+for replicated subscription.</p>
+<p>The following is an example to use replicated subscription:</p>
+<pre><code class="hljs css language-java">Consumer&lt;String&gt; consumer = client.newConsumer(Schema.STRING)
+            .topic(<span class="hljs-string">"my-topic"</span>)
+            .subscriptionName(<span class="hljs-string">"my-subscription"</span>)
+            .replicateSubscriptionState(<span class="hljs-keyword">true</span>)
+            .subscribe();
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="new-io-connectors"></a><a href="#new-io-connectors" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<p>A new batch of connectors is added, including Flume, Redis sink, Solr sink, RabbitMQ sink.
+The following lists builtin <a href="http://pulsar.apache.org/docs/en/io-connectors/">connectors</a>
+that Pulsar supports.</p>
+<h3><a class="anchor" aria-hidden="true" id="security"></a><a href="#security" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<p>In 2.4.0 release, Kerberos is supported in Apache Pulsar broker and client.
+To enable Kerberos authentication, refer to the <a href="http://pulsar.apache.org/docs/en/security-kerberos/">document</a>.</p>
+<p>Also added role based Pulsar Function authentication and authorization.</p>
+<h2><a class="anchor" aria-hidden="true" id="conclusion"></a><a href="#conclusion" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<p>If you want to download Pulsar 2.4.0, click <a href="/download">here</a>. You can send any questions or suggestions
+to our mailing lists, contribute to Pulsar on <a href="https://github.com/apache/pulsar">GitHub</a> or join
+the Apache Pulsar community on <a href="https://apache-pulsar.herokuapp.com/">Slack</a>.</p>
+</span></div></div><div class="blogSocialSection"><div class="blogSocialSectionItem"><a href="https://twitter.com/share" class="twitter-share-button" data-text="Apache Pulsar 2.4.0" data-url="https://pulsar.incubator.apache.org/blog/2019/07/05/Apache-Pulsar-2-4-0" data-related="true" data-show-count="false">Tweet</a></div></div></div><div class="blog-recent"><a class="button" href="/blog">Recent Posts</a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#conc [...]
+      const community = document.querySelector("a[href='#community']").parentNode;
+      const communityMenu =
+        '<li>' +
+        '<a id="community-menu" href="#">Community <span style="font-size: 0.75em">&nbsp;▼</span></a>' +
+        '<div id="community-dropdown" class="hide">' +
+          '<ul id="community-dropdown-items">' +
+            '<li><a href="/en/contact">Contact</a></li>' +
+            '<li><a href="/en/contributing">Contributing</a></li>' +
+            '<li><a href="/en/events">Events</a></li>' +
+            '<li><a href="https://twitter.com/Apache_Pulsar" target="_blank">Twitter &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/wiki" target="_blank">Wiki &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/issues" target="_blank">Issue tracking &#x2750</a></li>' +
+            '<li>&nbsp;</li>' +
+            '<li><a href="/en/resources">Resources</a></li>' +
+            '<li><a href="/en/team">Team</a></li>' +
+          '</ul>' +
+        '</div>' +
+        '</li>';
+
+      community.innerHTML = communityMenu;
+
+      const communityMenuItem = document.getElementById("community-menu");
+      const communityDropDown = document.getElementById("community-dropdown");
+      communityMenuItem.addEventListener("click", function(event) {
+        event.preventDefault();
+
+        if (communityDropDown.className == 'hide') {
+          communityDropDown.className = 'visible';
+        } else {
+          communityDropDown.className = 'hide';
+        }
+      });
+    </script></span><span><script src="/js/pjax-api.min.js"></script><script>window.navfoo = new Pjax({
+            areas: [
+              // try to use the first query.
+              '.mainContainer, .docsNavContainer .toc .navWrapper, .onPageNav',
+              // fallback
+              'body'
+            ],
+            link: '.docsNavContainer:not(.docsSliderActive) a',
+            update: {
+              script: false,
+            }
+          });
+        </script></span></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</scri [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: 'd226a455cecdd4bc18a554c1b47e5b52',
+                indexName: 'apache_pulsar',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:2.4.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/blog/atom.xml b/content/blog/atom.xml
index 369b1df..597f956 100644
--- a/content/blog/atom.xml
+++ b/content/blog/atom.xml
@@ -2,13 +2,31 @@
 <feed xmlns="http://www.w3.org/2005/Atom">
     <id>https://pulsar.incubator.apache.org/blog</id>
     <title>Apache Pulsar Blog</title>
-    <updated>2019-02-20T06:00:00Z</updated>
+    <updated>2019-07-05T06:00:00Z</updated>
     <generator>Feed for Node.js</generator>
     <link rel="alternate" href="https://pulsar.incubator.apache.org/blog"/>
     <subtitle>The best place to stay up-to-date with the latest Apache Pulsar news and events.</subtitle>
     <logo>https://pulsar.incubator.apache.org/img/pulsar.svg</logo>
     <rights>Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apache Software Foundation.</rights>
     <entry>
+        <title type="html"><![CDATA[Apache Pulsar 2.4.0]]></title>
+        <id>https://pulsar.incubator.apache.org/blog/2019/07/05/Apache-Pulsar-2-4-0.html</id>
+        <link href="https://pulsar.incubator.apache.org/blog/2019/07/05/Apache-Pulsar-2-4-0.html">
+        </link>
+        <updated>2019-07-05T06:00:00Z</updated>
+        <summary type="html"><![CDATA[<p>We are glad to publish Apache Pulsar 2.4.0. This is the result of a huge
+effort from the community, with over 460 commits and a long list of new features,
+general improvements and bug fixes.</p>
+<p>Check out the <b><a href="/release-notes/#2.4.0">release notes</a></b> for a detailed list of
+the changes, with links to the relevant pull requests, discussions and documentation.</p>
+<p>Regarding new features introduced, I just want to highlight here a tiny subset of them:</p>
+]]></summary>
+        <author>
+            <name>Penghui Li</name>
+            <uri>https://twitter.com/lipenghui6</uri>
+        </author>
+    </entry>
+    <entry>
         <title type="html"><![CDATA[Apache Pulsar 2.3.0]]></title>
         <id>https://pulsar.incubator.apache.org/blog/2019/02/20/Apache-Pulsar-2-3-0.html</id>
         <link href="https://pulsar.incubator.apache.org/blog/2019/02/20/Apache-Pulsar-2-3-0.html">
diff --git a/content/blog/feed.xml b/content/blog/feed.xml
index 75d247f..d613563 100644
--- a/content/blog/feed.xml
+++ b/content/blog/feed.xml
@@ -4,7 +4,7 @@
         <title>Apache Pulsar Blog</title>
         <link>https://pulsar.incubator.apache.org/blog</link>
         <description>The best place to stay up-to-date with the latest Apache Pulsar news and events.</description>
-        <lastBuildDate>Wed, 20 Feb 2019 06:00:00 GMT</lastBuildDate>
+        <lastBuildDate>Fri, 05 Jul 2019 06:00:00 GMT</lastBuildDate>
         <docs>http://blogs.law.harvard.edu/tech/rss</docs>
         <generator>Feed for Node.js</generator>
         <image>
@@ -14,6 +14,19 @@
         </image>
         <copyright>Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apache Software Foundation.</copyright>
         <item>
+            <title><![CDATA[Apache Pulsar 2.4.0]]></title>
+            <link>https://pulsar.incubator.apache.org/blog/2019/07/05/Apache-Pulsar-2-4-0.html</link>
+            <guid>https://pulsar.incubator.apache.org/blog/2019/07/05/Apache-Pulsar-2-4-0.html</guid>
+            <pubDate>Fri, 05 Jul 2019 06:00:00 GMT</pubDate>
+            <description><![CDATA[<p>We are glad to publish Apache Pulsar 2.4.0. This is the result of a huge
+effort from the community, with over 460 commits and a long list of new features,
+general improvements and bug fixes.</p>
+<p>Check out the <b><a href="/release-notes/#2.4.0">release notes</a></b> for a detailed list of
+the changes, with links to the relevant pull requests, discussions and documentation.</p>
+<p>Regarding new features introduced, I just want to highlight here a tiny subset of them:</p>
+]]></description>
+        </item>
+        <item>
             <title><![CDATA[Apache Pulsar 2.3.0]]></title>
             <link>https://pulsar.incubator.apache.org/blog/2019/02/20/Apache-Pulsar-2-3-0.html</link>
             <guid>https://pulsar.incubator.apache.org/blog/2019/02/20/Apache-Pulsar-2-3-0.html</guid>
diff --git a/content/blog/index.html b/content/blog/index.html
index 8c2f41c..484fc8e 100644
--- a/content/blog/index.html
+++ b/content/blog/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div c [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div c [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -74,7 +74,13 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="posts"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/blog/2019/02/20/Apache-Pulsar-2-3-0">Apache Pulsar 2.3.0</a></h1><p class="post-meta">February 20, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/merlimat" target="_blank" rel="noreferrer noopener">Matteo Merli</a></p></div></header> [...]
+        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="posts"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/blog/2019/07/05/Apache-Pulsar-2-4-0">Apache Pulsar 2.4.0</a></h1><p class="post-meta">July 5, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/lipenghui6" target="_blank" rel="noreferrer noopener">Penghui Li</a></p></div></header><arti [...]
+effort from the community, with over 460 commits and a long list of new features,
+general improvements and bug fixes.</p>
+<p>Check out the <b><a href="/release-notes/#2.4.0">release notes</a></b> for a detailed list of
+the changes, with links to the relevant pull requests, discussions and documentation.</p>
+<p>Regarding new features introduced, I just want to highlight here a tiny subset of them:</p>
+</span></div><div class="read-more"><a class="button" href="/blog/2019/07/05/Apache-Pulsar-2-4-0">Read More</a></div></article></div><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/blog/2019/02/20/Apache-Pulsar-2-3-0">Apache Pulsar 2.3.0</a></h1><p class="post-meta">February 20, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/merlimat" target="_blank" rel="noreferrer noopener">Matteo Merli</a></p></div></header>< [...]
 is the result of huge effort from the community, with over 480 commits and
 a long list of new features, general improvements and bug fixes.</p>
 <p>These improvements have been across the board in all of Pulsar components,
diff --git a/content/docs/en/2.1.0-incubating/client-libraries-python.html b/content/docs/en/2.1.0-incubating/client-libraries-python.html
index 5b6b692..fc81d36 100644
--- a/content/docs/en/2.1.0-incubating/client-libraries-python.html
+++ b/content/docs/en/2.1.0-incubating/client-libraries-python.html
@@ -136,7 +136,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/en/2.1.0-incubating/client-libraries-python/index.html b/content/docs/en/2.1.0-incubating/client-libraries-python/index.html
index 5b6b692..fc81d36 100644
--- a/content/docs/en/2.1.0-incubating/client-libraries-python/index.html
+++ b/content/docs/en/2.1.0-incubating/client-libraries-python/index.html
@@ -136,7 +136,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/en/2.1.1-incubating/client-libraries-python.html b/content/docs/en/2.1.1-incubating/client-libraries-python.html
index dd6f054..d1c60c1 100644
--- a/content/docs/en/2.1.1-incubating/client-libraries-python.html
+++ b/content/docs/en/2.1.1-incubating/client-libraries-python.html
@@ -136,7 +136,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/en/2.1.1-incubating/client-libraries-python/index.html b/content/docs/en/2.1.1-incubating/client-libraries-python/index.html
index dd6f054..d1c60c1 100644
--- a/content/docs/en/2.1.1-incubating/client-libraries-python/index.html
+++ b/content/docs/en/2.1.1-incubating/client-libraries-python/index.html
@@ -136,7 +136,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/en/2.2.0/client-libraries-python.html b/content/docs/en/2.2.0/client-libraries-python.html
index 11e392b..b1dce8b 100644
--- a/content/docs/en/2.2.0/client-libraries-python.html
+++ b/content/docs/en/2.2.0/client-libraries-python.html
@@ -136,7 +136,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/en/2.2.0/client-libraries-python/index.html b/content/docs/en/2.2.0/client-libraries-python/index.html
index 11e392b..b1dce8b 100644
--- a/content/docs/en/2.2.0/client-libraries-python/index.html
+++ b/content/docs/en/2.2.0/client-libraries-python/index.html
@@ -136,7 +136,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/en/2.2.1/client-libraries-python.html b/content/docs/en/2.2.1/client-libraries-python.html
index 45eb904..25999e2 100644
--- a/content/docs/en/2.2.1/client-libraries-python.html
+++ b/content/docs/en/2.2.1/client-libraries-python.html
@@ -136,7 +136,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/en/2.2.1/client-libraries-python/index.html b/content/docs/en/2.2.1/client-libraries-python/index.html
index 45eb904..25999e2 100644
--- a/content/docs/en/2.2.1/client-libraries-python/index.html
+++ b/content/docs/en/2.2.1/client-libraries-python/index.html
@@ -136,7 +136,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/en/2.3.0/client-libraries-python.html b/content/docs/en/2.3.0/client-libraries-python.html
index d4efb4f..9f5e81e 100644
--- a/content/docs/en/2.3.0/client-libraries-python.html
+++ b/content/docs/en/2.3.0/client-libraries-python.html
@@ -136,7 +136,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/en/2.3.0/client-libraries-python/index.html b/content/docs/en/2.3.0/client-libraries-python/index.html
index d4efb4f..9f5e81e 100644
--- a/content/docs/en/2.3.0/client-libraries-python/index.html
+++ b/content/docs/en/2.3.0/client-libraries-python/index.html
@@ -136,7 +136,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/en/2.3.1/client-libraries-python.html b/content/docs/en/2.3.1/client-libraries-python.html
index 89bae93..a446248 100644
--- a/content/docs/en/2.3.1/client-libraries-python.html
+++ b/content/docs/en/2.3.1/client-libraries-python.html
@@ -141,7 +141,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/en/2.3.1/client-libraries-python/index.html b/content/docs/en/2.3.1/client-libraries-python/index.html
index 89bae93..a446248 100644
--- a/content/docs/en/2.3.1/client-libraries-python/index.html
+++ b/content/docs/en/2.3.1/client-libraries-python/index.html
@@ -141,7 +141,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/en/2.3.2/client-libraries-python.html b/content/docs/en/2.3.2/client-libraries-python.html
index 830171b..2c195bf 100644
--- a/content/docs/en/2.3.2/client-libraries-python.html
+++ b/content/docs/en/2.3.2/client-libraries-python.html
@@ -141,7 +141,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/en/2.3.2/client-libraries-python/index.html b/content/docs/en/2.3.2/client-libraries-python/index.html
index 830171b..2c195bf 100644
--- a/content/docs/en/2.3.2/client-libraries-python/index.html
+++ b/content/docs/en/2.3.2/client-libraries-python/index.html
@@ -141,7 +141,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/en/client-libraries-python.html b/content/docs/en/client-libraries-python.html
index 243a5cc..991956f 100644
--- a/content/docs/en/client-libraries-python.html
+++ b/content/docs/en/client-libraries-python.html
@@ -141,7 +141,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/en/client-libraries-python/index.html b/content/docs/en/client-libraries-python/index.html
index 243a5cc..991956f 100644
--- a/content/docs/en/client-libraries-python/index.html
+++ b/content/docs/en/client-libraries-python/index.html
@@ -141,7 +141,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/en/next/client-libraries-python.html b/content/docs/en/next/client-libraries-python.html
index ec09129..6204d0e 100644
--- a/content/docs/en/next/client-libraries-python.html
+++ b/content/docs/en/next/client-libraries-python.html
@@ -141,7 +141,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/en/next/client-libraries-python/index.html b/content/docs/en/next/client-libraries-python/index.html
index ec09129..6204d0e 100644
--- a/content/docs/en/next/client-libraries-python/index.html
+++ b/content/docs/en/next/client-libraries-python/index.html
@@ -141,7 +141,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/fr/2.1.0-incubating/client-libraries-python.html b/content/docs/fr/2.1.0-incubating/client-libraries-python.html
index 00468e9..56d3499 100644
--- a/content/docs/fr/2.1.0-incubating/client-libraries-python.html
+++ b/content/docs/fr/2.1.0-incubating/client-libraries-python.html
@@ -136,7 +136,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/fr/2.1.0-incubating/client-libraries-python/index.html b/content/docs/fr/2.1.0-incubating/client-libraries-python/index.html
index 00468e9..56d3499 100644
--- a/content/docs/fr/2.1.0-incubating/client-libraries-python/index.html
+++ b/content/docs/fr/2.1.0-incubating/client-libraries-python/index.html
@@ -136,7 +136,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/fr/2.1.1-incubating/client-libraries-python.html b/content/docs/fr/2.1.1-incubating/client-libraries-python.html
index 95f1d6d..16bfe88 100644
--- a/content/docs/fr/2.1.1-incubating/client-libraries-python.html
+++ b/content/docs/fr/2.1.1-incubating/client-libraries-python.html
@@ -137,7 +137,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/fr/2.1.1-incubating/client-libraries-python/index.html b/content/docs/fr/2.1.1-incubating/client-libraries-python/index.html
index 95f1d6d..16bfe88 100644
--- a/content/docs/fr/2.1.1-incubating/client-libraries-python/index.html
+++ b/content/docs/fr/2.1.1-incubating/client-libraries-python/index.html
@@ -137,7 +137,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/fr/2.2.0/client-libraries-python.html b/content/docs/fr/2.2.0/client-libraries-python.html
index 0a1b4b7..37c7e83 100644
--- a/content/docs/fr/2.2.0/client-libraries-python.html
+++ b/content/docs/fr/2.2.0/client-libraries-python.html
@@ -137,7 +137,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/fr/2.2.0/client-libraries-python/index.html b/content/docs/fr/2.2.0/client-libraries-python/index.html
index 0a1b4b7..37c7e83 100644
--- a/content/docs/fr/2.2.0/client-libraries-python/index.html
+++ b/content/docs/fr/2.2.0/client-libraries-python/index.html
@@ -137,7 +137,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/fr/2.2.1/client-libraries-python.html b/content/docs/fr/2.2.1/client-libraries-python.html
index b06d7c8..5b81f60 100644
--- a/content/docs/fr/2.2.1/client-libraries-python.html
+++ b/content/docs/fr/2.2.1/client-libraries-python.html
@@ -137,7 +137,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/fr/2.2.1/client-libraries-python/index.html b/content/docs/fr/2.2.1/client-libraries-python/index.html
index b06d7c8..5b81f60 100644
--- a/content/docs/fr/2.2.1/client-libraries-python/index.html
+++ b/content/docs/fr/2.2.1/client-libraries-python/index.html
@@ -137,7 +137,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/fr/2.3.0/client-libraries-python.html b/content/docs/fr/2.3.0/client-libraries-python.html
index 73cf1a4..d56f4c8 100644
--- a/content/docs/fr/2.3.0/client-libraries-python.html
+++ b/content/docs/fr/2.3.0/client-libraries-python.html
@@ -138,7 +138,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/fr/2.3.0/client-libraries-python/index.html b/content/docs/fr/2.3.0/client-libraries-python/index.html
index 73cf1a4..d56f4c8 100644
--- a/content/docs/fr/2.3.0/client-libraries-python/index.html
+++ b/content/docs/fr/2.3.0/client-libraries-python/index.html
@@ -138,7 +138,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/fr/2.3.1/client-libraries-python.html b/content/docs/fr/2.3.1/client-libraries-python.html
index 5a75150..3f5195b 100644
--- a/content/docs/fr/2.3.1/client-libraries-python.html
+++ b/content/docs/fr/2.3.1/client-libraries-python.html
@@ -143,7 +143,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/fr/2.3.1/client-libraries-python/index.html b/content/docs/fr/2.3.1/client-libraries-python/index.html
index 5a75150..3f5195b 100644
--- a/content/docs/fr/2.3.1/client-libraries-python/index.html
+++ b/content/docs/fr/2.3.1/client-libraries-python/index.html
@@ -143,7 +143,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/fr/2.3.2/client-libraries-python.html b/content/docs/fr/2.3.2/client-libraries-python.html
index 3f0ddc5..db31378 100644
--- a/content/docs/fr/2.3.2/client-libraries-python.html
+++ b/content/docs/fr/2.3.2/client-libraries-python.html
@@ -143,7 +143,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/fr/2.3.2/client-libraries-python/index.html b/content/docs/fr/2.3.2/client-libraries-python/index.html
index 3f0ddc5..db31378 100644
--- a/content/docs/fr/2.3.2/client-libraries-python/index.html
+++ b/content/docs/fr/2.3.2/client-libraries-python/index.html
@@ -143,7 +143,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/fr/client-libraries-python.html b/content/docs/fr/client-libraries-python.html
index 145d932..43d4154 100644
--- a/content/docs/fr/client-libraries-python.html
+++ b/content/docs/fr/client-libraries-python.html
@@ -143,7 +143,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/fr/client-libraries-python/index.html b/content/docs/fr/client-libraries-python/index.html
index 145d932..43d4154 100644
--- a/content/docs/fr/client-libraries-python/index.html
+++ b/content/docs/fr/client-libraries-python/index.html
@@ -143,7 +143,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/fr/next/client-libraries-python.html b/content/docs/fr/next/client-libraries-python.html
index 043d089..9b52cbc 100644
--- a/content/docs/fr/next/client-libraries-python.html
+++ b/content/docs/fr/next/client-libraries-python.html
@@ -143,7 +143,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/fr/next/client-libraries-python/index.html b/content/docs/fr/next/client-libraries-python/index.html
index 043d089..9b52cbc 100644
--- a/content/docs/fr/next/client-libraries-python/index.html
+++ b/content/docs/fr/next/client-libraries-python/index.html
@@ -143,7 +143,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/ja/2.1.0-incubating/client-libraries-python.html b/content/docs/ja/2.1.0-incubating/client-libraries-python.html
index 4ec06a5..2636b07 100644
--- a/content/docs/ja/2.1.0-incubating/client-libraries-python.html
+++ b/content/docs/ja/2.1.0-incubating/client-libraries-python.html
@@ -136,7 +136,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/ja/2.1.0-incubating/client-libraries-python/index.html b/content/docs/ja/2.1.0-incubating/client-libraries-python/index.html
index 4ec06a5..2636b07 100644
--- a/content/docs/ja/2.1.0-incubating/client-libraries-python/index.html
+++ b/content/docs/ja/2.1.0-incubating/client-libraries-python/index.html
@@ -136,7 +136,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/ja/2.1.1-incubating/client-libraries-python.html b/content/docs/ja/2.1.1-incubating/client-libraries-python.html
index 90fc3f5..e12de36 100644
--- a/content/docs/ja/2.1.1-incubating/client-libraries-python.html
+++ b/content/docs/ja/2.1.1-incubating/client-libraries-python.html
@@ -137,7 +137,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/ja/2.1.1-incubating/client-libraries-python/index.html b/content/docs/ja/2.1.1-incubating/client-libraries-python/index.html
index 90fc3f5..e12de36 100644
--- a/content/docs/ja/2.1.1-incubating/client-libraries-python/index.html
+++ b/content/docs/ja/2.1.1-incubating/client-libraries-python/index.html
@@ -137,7 +137,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/ja/2.2.0/client-libraries-python.html b/content/docs/ja/2.2.0/client-libraries-python.html
index ed6b491..2944412 100644
--- a/content/docs/ja/2.2.0/client-libraries-python.html
+++ b/content/docs/ja/2.2.0/client-libraries-python.html
@@ -137,7 +137,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/ja/2.2.0/client-libraries-python/index.html b/content/docs/ja/2.2.0/client-libraries-python/index.html
index ed6b491..2944412 100644
--- a/content/docs/ja/2.2.0/client-libraries-python/index.html
+++ b/content/docs/ja/2.2.0/client-libraries-python/index.html
@@ -137,7 +137,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/ja/2.2.1/client-libraries-python.html b/content/docs/ja/2.2.1/client-libraries-python.html
index 943acb0..d9a3ffb 100644
--- a/content/docs/ja/2.2.1/client-libraries-python.html
+++ b/content/docs/ja/2.2.1/client-libraries-python.html
@@ -137,7 +137,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/ja/2.2.1/client-libraries-python/index.html b/content/docs/ja/2.2.1/client-libraries-python/index.html
index 943acb0..d9a3ffb 100644
--- a/content/docs/ja/2.2.1/client-libraries-python/index.html
+++ b/content/docs/ja/2.2.1/client-libraries-python/index.html
@@ -137,7 +137,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/ja/2.3.0/client-libraries-python.html b/content/docs/ja/2.3.0/client-libraries-python.html
index 8277ec4..6e50dc2 100644
--- a/content/docs/ja/2.3.0/client-libraries-python.html
+++ b/content/docs/ja/2.3.0/client-libraries-python.html
@@ -138,7 +138,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/ja/2.3.0/client-libraries-python/index.html b/content/docs/ja/2.3.0/client-libraries-python/index.html
index 8277ec4..6e50dc2 100644
--- a/content/docs/ja/2.3.0/client-libraries-python/index.html
+++ b/content/docs/ja/2.3.0/client-libraries-python/index.html
@@ -138,7 +138,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/ja/2.3.1/client-libraries-python.html b/content/docs/ja/2.3.1/client-libraries-python.html
index 35506f8..aef70c0 100644
--- a/content/docs/ja/2.3.1/client-libraries-python.html
+++ b/content/docs/ja/2.3.1/client-libraries-python.html
@@ -143,7 +143,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/ja/2.3.1/client-libraries-python/index.html b/content/docs/ja/2.3.1/client-libraries-python/index.html
index 35506f8..aef70c0 100644
--- a/content/docs/ja/2.3.1/client-libraries-python/index.html
+++ b/content/docs/ja/2.3.1/client-libraries-python/index.html
@@ -143,7 +143,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/ja/2.3.2/client-libraries-python.html b/content/docs/ja/2.3.2/client-libraries-python.html
index 104d710..dbb5350 100644
--- a/content/docs/ja/2.3.2/client-libraries-python.html
+++ b/content/docs/ja/2.3.2/client-libraries-python.html
@@ -143,7 +143,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/ja/2.3.2/client-libraries-python/index.html b/content/docs/ja/2.3.2/client-libraries-python/index.html
index 104d710..dbb5350 100644
--- a/content/docs/ja/2.3.2/client-libraries-python/index.html
+++ b/content/docs/ja/2.3.2/client-libraries-python/index.html
@@ -143,7 +143,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/ja/client-libraries-python.html b/content/docs/ja/client-libraries-python.html
index fce12b9..f46b799 100644
--- a/content/docs/ja/client-libraries-python.html
+++ b/content/docs/ja/client-libraries-python.html
@@ -143,7 +143,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/ja/client-libraries-python/index.html b/content/docs/ja/client-libraries-python/index.html
index fce12b9..f46b799 100644
--- a/content/docs/ja/client-libraries-python/index.html
+++ b/content/docs/ja/client-libraries-python/index.html
@@ -143,7 +143,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/ja/next/client-libraries-python.html b/content/docs/ja/next/client-libraries-python.html
index 463fe47..043477b 100644
--- a/content/docs/ja/next/client-libraries-python.html
+++ b/content/docs/ja/next/client-libraries-python.html
@@ -143,7 +143,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/ja/next/client-libraries-python/index.html b/content/docs/ja/next/client-libraries-python/index.html
index 463fe47..043477b 100644
--- a/content/docs/ja/next/client-libraries-python/index.html
+++ b/content/docs/ja/next/client-libraries-python/index.html
@@ -143,7 +143,7 @@ msg_id = msg.message_id()
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
diff --git a/content/docs/zh-CN/2.1.0-incubating/client-libraries-python.html b/content/docs/zh-CN/2.1.0-incubating/client-libraries-python.html
index 5e72cb4..f6c5117 100644
--- a/content/docs/zh-CN/2.1.0-incubating/client-libraries-python.html
+++ b/content/docs/zh-CN/2.1.0-incubating/client-libraries-python.html
@@ -130,15 +130,15 @@ client.close()
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="读者接口示例"></a><a href="#读者接口示例" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>你可以使用 Pulsar Python API 调用 Pulsar <a href="/docs/zh-CN/2.1.0-incubating/concepts-clients#reader-interface">reader 接口</a>。示例如下:</p>
-<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId 取自先前获取的消息</span>
+<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId taken from a previously fetched message</span>
 msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
-    <span class="hljs-comment"># 无确认操作</span>
+    <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
 </span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/client-libraries-go"><span class="arrow-prev">← </span><span>Go</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/client-libraries-cpp"><span>C++</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#安装">安装</a><ul class="toc-headings"><li><a href="#使用pip安装">使用pip安装</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
diff --git a/content/docs/zh-CN/2.1.0-incubating/client-libraries-python/index.html b/content/docs/zh-CN/2.1.0-incubating/client-libraries-python/index.html
index 5e72cb4..f6c5117 100644
--- a/content/docs/zh-CN/2.1.0-incubating/client-libraries-python/index.html
+++ b/content/docs/zh-CN/2.1.0-incubating/client-libraries-python/index.html
@@ -130,15 +130,15 @@ client.close()
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="读者接口示例"></a><a href="#读者接口示例" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>你可以使用 Pulsar Python API 调用 Pulsar <a href="/docs/zh-CN/2.1.0-incubating/concepts-clients#reader-interface">reader 接口</a>。示例如下:</p>
-<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId 取自先前获取的消息</span>
+<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId taken from a previously fetched message</span>
 msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
-    <span class="hljs-comment"># 无确认操作</span>
+    <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
 </span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/client-libraries-go"><span class="arrow-prev">← </span><span>Go</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/client-libraries-cpp"><span>C++</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#安装">安装</a><ul class="toc-headings"><li><a href="#使用pip安装">使用pip安装</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
diff --git a/content/docs/zh-CN/2.1.0-incubating/cookbooks-message-queue.html b/content/docs/zh-CN/2.1.0-incubating/cookbooks-message-queue.html
index 74a5684..2692ac4 100644
--- a/content/docs/zh-CN/2.1.0-incubating/cookbooks-message-queue.html
+++ b/content/docs/zh-CN/2.1.0-incubating/cookbooks-message-queue.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
-"/><meta name="docsearch:version" content="2.1.0-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.1.0-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -76,14 +76,14 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然<em>必须</em>处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。</p>
-<p>Pulsar 是消息队列的绝佳选择,这是因为:</p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然<em>必须</em>处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。</p>
+<p>对于消息队列而言,Pulsar 是绝佳选择,这是因为:</p>
 <ul>
-<li>它的构建基于<a href="/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview#persistent-storage">持久性消息存储</a>的概念。</li>
-<li>它为<a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#consumer">消费者</a>提供主题消息的自动负载平衡(也可自定义负载平衡)</li>
+<li>构建之初就考虑到了<a href="/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview#persistent-storage">消息持久化存储</a>。</li>
+<li>为<a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#consumer">消费者</a>提供主题消息的自动负载均衡(支持自定义负载均衡)。</li>
 </ul>
 <blockquote>
-<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
+<p>你可以使用相同的 Pulsar 安装配置来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
 <h1><a class="anchor" aria-hidden="true" id="客户端配置更改"></a><a href="#客户端配置更改" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
 <p>要将 Pulsar <a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#topic">主题</a> 用作消息队列,应将该主题的接收器负载分配到多个消费者(最佳消费者数取决于实时负载量)。 每个消费者必须:</p>
diff --git a/content/docs/zh-CN/2.1.0-incubating/cookbooks-message-queue/index.html b/content/docs/zh-CN/2.1.0-incubating/cookbooks-message-queue/index.html
index 74a5684..2692ac4 100644
--- a/content/docs/zh-CN/2.1.0-incubating/cookbooks-message-queue/index.html
+++ b/content/docs/zh-CN/2.1.0-incubating/cookbooks-message-queue/index.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
-"/><meta name="docsearch:version" content="2.1.0-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.1.0-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -76,14 +76,14 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然<em>必须</em>处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。</p>
-<p>Pulsar 是消息队列的绝佳选择,这是因为:</p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然<em>必须</em>处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。</p>
+<p>对于消息队列而言,Pulsar 是绝佳选择,这是因为:</p>
 <ul>
-<li>它的构建基于<a href="/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview#persistent-storage">持久性消息存储</a>的概念。</li>
-<li>它为<a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#consumer">消费者</a>提供主题消息的自动负载平衡(也可自定义负载平衡)</li>
+<li>构建之初就考虑到了<a href="/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview#persistent-storage">消息持久化存储</a>。</li>
+<li>为<a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#consumer">消费者</a>提供主题消息的自动负载均衡(支持自定义负载均衡)。</li>
 </ul>
 <blockquote>
-<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
+<p>你可以使用相同的 Pulsar 安装配置来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
 <h1><a class="anchor" aria-hidden="true" id="客户端配置更改"></a><a href="#客户端配置更改" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
 <p>要将 Pulsar <a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#topic">主题</a> 用作消息队列,应将该主题的接收器负载分配到多个消费者(最佳消费者数取决于实时负载量)。 每个消费者必须:</p>
diff --git a/content/docs/zh-CN/2.1.1-incubating/client-libraries-python.html b/content/docs/zh-CN/2.1.1-incubating/client-libraries-python.html
index 24b5959..4be703a 100644
--- a/content/docs/zh-CN/2.1.1-incubating/client-libraries-python.html
+++ b/content/docs/zh-CN/2.1.1-incubating/client-libraries-python.html
@@ -131,15 +131,15 @@ client.close()
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="读者接口示例"></a><a href="#读者接口示例" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>你可以使用 Pulsar Python API 调用 Pulsar <a href="/docs/zh-CN/2.1.1-incubating/concepts-clients#reader-interface">reader 接口</a>。示例如下:</p>
-<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId 取自先前获取的消息</span>
+<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId taken from a previously fetched message</span>
 msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
-    <span class="hljs-comment"># 无确认操作</span>
+    <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
 </span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/client-libraries-go"><span class="arrow-prev">← </span><span>Go</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/client-libraries-cpp"><span>C++</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#安装">安装</a><ul class="toc-headings"><li><a href="#使用pip安装">使用pip安装</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
diff --git a/content/docs/zh-CN/2.1.1-incubating/client-libraries-python/index.html b/content/docs/zh-CN/2.1.1-incubating/client-libraries-python/index.html
index 24b5959..4be703a 100644
--- a/content/docs/zh-CN/2.1.1-incubating/client-libraries-python/index.html
+++ b/content/docs/zh-CN/2.1.1-incubating/client-libraries-python/index.html
@@ -131,15 +131,15 @@ client.close()
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="读者接口示例"></a><a href="#读者接口示例" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>你可以使用 Pulsar Python API 调用 Pulsar <a href="/docs/zh-CN/2.1.1-incubating/concepts-clients#reader-interface">reader 接口</a>。示例如下:</p>
-<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId 取自先前获取的消息</span>
+<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId taken from a previously fetched message</span>
 msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
-    <span class="hljs-comment"># 无确认操作</span>
+    <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
 </span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/client-libraries-go"><span class="arrow-prev">← </span><span>Go</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/client-libraries-cpp"><span>C++</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#安装">安装</a><ul class="toc-headings"><li><a href="#使用pip安装">使用pip安装</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
diff --git a/content/docs/zh-CN/2.1.1-incubating/cookbooks-message-queue.html b/content/docs/zh-CN/2.1.1-incubating/cookbooks-message-queue.html
index 586bc4f..6c3ca27 100644
--- a/content/docs/zh-CN/2.1.1-incubating/cookbooks-message-queue.html
+++ b/content/docs/zh-CN/2.1.1-incubating/cookbooks-message-queue.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
-"/><meta name="docsearch:version" content="2.1.1-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.1.1-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -76,14 +76,14 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然<em>必须</em>处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。</p>
-<p>Pulsar 是消息队列的绝佳选择,这是因为:</p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然<em>必须</em>处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。</p>
+<p>对于消息队列而言,Pulsar 是绝佳选择,这是因为:</p>
 <ul>
-<li>它的构建基于<a href="/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview#persistent-storage">持久性消息存储</a>的概念。</li>
-<li>它为<a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#consumer">消费者</a>提供主题消息的自动负载平衡(也可自定义负载平衡)</li>
+<li>构建之初就考虑到了<a href="/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview#persistent-storage">消息持久化存储</a>。</li>
+<li>为<a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#consumer">消费者</a>提供主题消息的自动负载均衡(支持自定义负载均衡)。</li>
 </ul>
 <blockquote>
-<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
+<p>你可以使用相同的 Pulsar 安装配置来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
 <h1><a class="anchor" aria-hidden="true" id="客户端配置更改"></a><a href="#客户端配置更改" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
 <p>要将 Pulsar <a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#topic">主题</a> 用作消息队列,应将该主题的接收器负载分配到多个消费者(最佳消费者数取决于实时负载量)。 每个消费者必须:</p>
diff --git a/content/docs/zh-CN/2.1.1-incubating/cookbooks-message-queue/index.html b/content/docs/zh-CN/2.1.1-incubating/cookbooks-message-queue/index.html
index 586bc4f..6c3ca27 100644
--- a/content/docs/zh-CN/2.1.1-incubating/cookbooks-message-queue/index.html
+++ b/content/docs/zh-CN/2.1.1-incubating/cookbooks-message-queue/index.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
-"/><meta name="docsearch:version" content="2.1.1-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.1.1-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -76,14 +76,14 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然<em>必须</em>处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。</p>
-<p>Pulsar 是消息队列的绝佳选择,这是因为:</p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然<em>必须</em>处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。</p>
+<p>对于消息队列而言,Pulsar 是绝佳选择,这是因为:</p>
 <ul>
-<li>它的构建基于<a href="/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview#persistent-storage">持久性消息存储</a>的概念。</li>
-<li>它为<a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#consumer">消费者</a>提供主题消息的自动负载平衡(也可自定义负载平衡)</li>
+<li>构建之初就考虑到了<a href="/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview#persistent-storage">消息持久化存储</a>。</li>
+<li>为<a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#consumer">消费者</a>提供主题消息的自动负载均衡(支持自定义负载均衡)。</li>
 </ul>
 <blockquote>
-<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
+<p>你可以使用相同的 Pulsar 安装配置来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
 <h1><a class="anchor" aria-hidden="true" id="客户端配置更改"></a><a href="#客户端配置更改" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
 <p>要将 Pulsar <a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#topic">主题</a> 用作消息队列,应将该主题的接收器负载分配到多个消费者(最佳消费者数取决于实时负载量)。 每个消费者必须:</p>
diff --git a/content/docs/zh-CN/2.2.0/client-libraries-python.html b/content/docs/zh-CN/2.2.0/client-libraries-python.html
index 01ba067..fd3f037 100644
--- a/content/docs/zh-CN/2.2.0/client-libraries-python.html
+++ b/content/docs/zh-CN/2.2.0/client-libraries-python.html
@@ -131,15 +131,15 @@ client.close()
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="读者接口示例"></a><a href="#读者接口示例" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>你可以使用 Pulsar Python API 调用 Pulsar <a href="/docs/zh-CN/2.2.0/concepts-clients#reader-interface">reader 接口</a>。示例如下:</p>
-<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId 取自先前获取的消息</span>
+<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId taken from a previously fetched message</span>
 msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
-    <span class="hljs-comment"># 无确认操作</span>
+    <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
 </span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/client-libraries-go"><span class="arrow-prev">← </span><span>Go</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/client-libraries-cpp"><span>C++</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#安装">安装</a><ul class="toc-headings"><li><a href="#使用pip安装">使用pip安装</a></li><li><a href="#通过源代码安装">通过源代码 [...]
       const community = document.querySelector("a[href='#community']").parentNode;
diff --git a/content/docs/zh-CN/2.2.0/client-libraries-python/index.html b/content/docs/zh-CN/2.2.0/client-libraries-python/index.html
index 01ba067..fd3f037 100644
--- a/content/docs/zh-CN/2.2.0/client-libraries-python/index.html
+++ b/content/docs/zh-CN/2.2.0/client-libraries-python/index.html
@@ -131,15 +131,15 @@ client.close()
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="读者接口示例"></a><a href="#读者接口示例" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>你可以使用 Pulsar Python API 调用 Pulsar <a href="/docs/zh-CN/2.2.0/concepts-clients#reader-interface">reader 接口</a>。示例如下:</p>
-<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId 取自先前获取的消息</span>
+<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId taken from a previously fetched message</span>
 msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
-    <span class="hljs-comment"># 无确认操作</span>
+    <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
 </span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/client-libraries-go"><span class="arrow-prev">← </span><span>Go</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/client-libraries-cpp"><span>C++</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#安装">安装</a><ul class="toc-headings"><li><a href="#使用pip安装">使用pip安装</a></li><li><a href="#通过源代码安装">通过源代码 [...]
       const community = document.querySelector("a[href='#community']").parentNode;
diff --git a/content/docs/zh-CN/2.2.0/cookbooks-message-queue.html b/content/docs/zh-CN/2.2.0/cookbooks-message-queue.html
index aef3e9d..15f8e0a 100644
--- a/content/docs/zh-CN/2.2.0/cookbooks-message-queue.html
+++ b/content/docs/zh-CN/2.2.0/cookbooks-message-queue.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
-"/><meta name="docsearch:version" content="2.2.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.2.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -76,14 +76,14 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然<em>必须</em>处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。</p>
-<p>Pulsar 是消息队列的绝佳选择,这是因为:</p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然<em>必须</em>处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。</p>
+<p>对于消息队列而言,Pulsar 是绝佳选择,这是因为:</p>
 <ul>
-<li>它的构建基于<a href="/docs/zh-CN/2.2.0/concepts-architecture-overview#persistent-storage">持久性消息存储</a>的概念。</li>
-<li>它为<a href="/docs/zh-CN/2.2.0/reference-terminology#consumer">消费者</a>提供主题消息的自动负载平衡(也可自定义负载平衡)</li>
+<li>构建之初就考虑到了<a href="/docs/zh-CN/2.2.0/concepts-architecture-overview#persistent-storage">消息持久化存储</a>。</li>
+<li>为<a href="/docs/zh-CN/2.2.0/reference-terminology#consumer">消费者</a>提供主题消息的自动负载均衡(支持自定义负载均衡)。</li>
 </ul>
 <blockquote>
-<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
+<p>你可以使用相同的 Pulsar 安装配置来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
 <h1><a class="anchor" aria-hidden="true" id="客户端配置更改"></a><a href="#客户端配置更改" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
 <p>要将 Pulsar <a href="/docs/zh-CN/2.2.0/reference-terminology#topic">主题</a> 用作消息队列,应将该主题的接收器负载分配到多个消费者(最佳消费者数取决于实时负载量)。 每个消费者必须:</p>
diff --git a/content/docs/zh-CN/2.2.0/cookbooks-message-queue/index.html b/content/docs/zh-CN/2.2.0/cookbooks-message-queue/index.html
index aef3e9d..15f8e0a 100644
--- a/content/docs/zh-CN/2.2.0/cookbooks-message-queue/index.html
+++ b/content/docs/zh-CN/2.2.0/cookbooks-message-queue/index.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
-"/><meta name="docsearch:version" content="2.2.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.2.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -76,14 +76,14 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然<em>必须</em>处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。</p>
-<p>Pulsar 是消息队列的绝佳选择,这是因为:</p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然<em>必须</em>处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。</p>
+<p>对于消息队列而言,Pulsar 是绝佳选择,这是因为:</p>
 <ul>
-<li>它的构建基于<a href="/docs/zh-CN/2.2.0/concepts-architecture-overview#persistent-storage">持久性消息存储</a>的概念。</li>
-<li>它为<a href="/docs/zh-CN/2.2.0/reference-terminology#consumer">消费者</a>提供主题消息的自动负载平衡(也可自定义负载平衡)</li>
+<li>构建之初就考虑到了<a href="/docs/zh-CN/2.2.0/concepts-architecture-overview#persistent-storage">消息持久化存储</a>。</li>
+<li>为<a href="/docs/zh-CN/2.2.0/reference-terminology#consumer">消费者</a>提供主题消息的自动负载均衡(支持自定义负载均衡)。</li>
 </ul>
 <blockquote>
-<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
+<p>你可以使用相同的 Pulsar 安装配置来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
 <h1><a class="anchor" aria-hidden="true" id="客户端配置更改"></a><a href="#客户端配置更改" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
 <p>要将 Pulsar <a href="/docs/zh-CN/2.2.0/reference-terminology#topic">主题</a> 用作消息队列,应将该主题的接收器负载分配到多个消费者(最佳消费者数取决于实时负载量)。 每个消费者必须:</p>
diff --git a/content/docs/zh-CN/2.2.1/client-libraries-python.html b/content/docs/zh-CN/2.2.1/client-libraries-python.html
index cb2f9ff..c9d36b0 100644
--- a/content/docs/zh-CN/2.2.1/client-libraries-python.html
+++ b/content/docs/zh-CN/2.2.1/client-libraries-python.html
@@ -131,15 +131,15 @@ client.close()
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="读者接口示例"></a><a href="#读者接口示例" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>你可以使用 Pulsar Python API 调用 Pulsar <a href="/docs/zh-CN/2.2.1/concepts-clients#reader-interface">reader 接口</a>。示例如下:</p>
-<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId 取自先前获取的消息</span>
+<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId taken from a previously fetched message</span>
 msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
-    <span class="hljs-comment"># 无确认操作</span>
+    <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
 </span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/client-libraries-go"><span class="arrow-prev">← </span><span>Go</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/client-libraries-cpp"><span>C++</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#安装">安装</a><ul class="toc-headings"><li><a href="#使用pip安装">使用pip安装</a></li><li><a href="#通过源代码安装">通过源代码 [...]
       const community = document.querySelector("a[href='#community']").parentNode;
diff --git a/content/docs/zh-CN/2.2.1/client-libraries-python/index.html b/content/docs/zh-CN/2.2.1/client-libraries-python/index.html
index cb2f9ff..c9d36b0 100644
--- a/content/docs/zh-CN/2.2.1/client-libraries-python/index.html
+++ b/content/docs/zh-CN/2.2.1/client-libraries-python/index.html
@@ -131,15 +131,15 @@ client.close()
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="读者接口示例"></a><a href="#读者接口示例" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>你可以使用 Pulsar Python API 调用 Pulsar <a href="/docs/zh-CN/2.2.1/concepts-clients#reader-interface">reader 接口</a>。示例如下:</p>
-<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId 取自先前获取的消息</span>
+<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId taken from a previously fetched message</span>
 msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
-    <span class="hljs-comment"># 无确认操作</span>
+    <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
 </span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/client-libraries-go"><span class="arrow-prev">← </span><span>Go</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/client-libraries-cpp"><span>C++</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#安装">安装</a><ul class="toc-headings"><li><a href="#使用pip安装">使用pip安装</a></li><li><a href="#通过源代码安装">通过源代码 [...]
       const community = document.querySelector("a[href='#community']").parentNode;
diff --git a/content/docs/zh-CN/2.2.1/cookbooks-message-queue.html b/content/docs/zh-CN/2.2.1/cookbooks-message-queue.html
index 104b8dc..1f6a590 100644
--- a/content/docs/zh-CN/2.2.1/cookbooks-message-queue.html
+++ b/content/docs/zh-CN/2.2.1/cookbooks-message-queue.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
-"/><meta name="docsearch:version" content="2.2.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.2.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -76,14 +76,14 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然<em>必须</em>处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。</p>
-<p>Pulsar 是消息队列的绝佳选择,这是因为:</p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然<em>必须</em>处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。</p>
+<p>对于消息队列而言,Pulsar 是绝佳选择,这是因为:</p>
 <ul>
-<li>它的构建基于<a href="/docs/zh-CN/2.2.1/concepts-architecture-overview#persistent-storage">持久性消息存储</a>的概念。</li>
-<li>它为<a href="/docs/zh-CN/2.2.1/reference-terminology#consumer">消费者</a>提供主题消息的自动负载平衡(也可自定义负载平衡)</li>
+<li>构建之初就考虑到了<a href="/docs/zh-CN/2.2.1/concepts-architecture-overview#persistent-storage">消息持久化存储</a>。</li>
+<li>为<a href="/docs/zh-CN/2.2.1/reference-terminology#consumer">消费者</a>提供主题消息的自动负载均衡(支持自定义负载均衡)。</li>
 </ul>
 <blockquote>
-<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
+<p>你可以使用相同的 Pulsar 安装配置来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
 <h1><a class="anchor" aria-hidden="true" id="客户端配置更改"></a><a href="#客户端配置更改" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
 <p>要将 Pulsar <a href="/docs/zh-CN/2.2.1/reference-terminology#topic">主题</a> 用作消息队列,应将该主题的接收器负载分配到多个消费者(最佳消费者数取决于实时负载量)。 每个消费者必须:</p>
diff --git a/content/docs/zh-CN/2.2.1/cookbooks-message-queue/index.html b/content/docs/zh-CN/2.2.1/cookbooks-message-queue/index.html
index 104b8dc..1f6a590 100644
--- a/content/docs/zh-CN/2.2.1/cookbooks-message-queue/index.html
+++ b/content/docs/zh-CN/2.2.1/cookbooks-message-queue/index.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
-"/><meta name="docsearch:version" content="2.2.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.2.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -76,14 +76,14 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然<em>必须</em>处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。</p>
-<p>Pulsar 是消息队列的绝佳选择,这是因为:</p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然<em>必须</em>处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。</p>
+<p>对于消息队列而言,Pulsar 是绝佳选择,这是因为:</p>
 <ul>
-<li>它的构建基于<a href="/docs/zh-CN/2.2.1/concepts-architecture-overview#persistent-storage">持久性消息存储</a>的概念。</li>
-<li>它为<a href="/docs/zh-CN/2.2.1/reference-terminology#consumer">消费者</a>提供主题消息的自动负载平衡(也可自定义负载平衡)</li>
+<li>构建之初就考虑到了<a href="/docs/zh-CN/2.2.1/concepts-architecture-overview#persistent-storage">消息持久化存储</a>。</li>
+<li>为<a href="/docs/zh-CN/2.2.1/reference-terminology#consumer">消费者</a>提供主题消息的自动负载均衡(支持自定义负载均衡)。</li>
 </ul>
 <blockquote>
-<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
+<p>你可以使用相同的 Pulsar 安装配置来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
 <h1><a class="anchor" aria-hidden="true" id="客户端配置更改"></a><a href="#客户端配置更改" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
 <p>要将 Pulsar <a href="/docs/zh-CN/2.2.1/reference-terminology#topic">主题</a> 用作消息队列,应将该主题的接收器负载分配到多个消费者(最佳消费者数取决于实时负载量)。 每个消费者必须:</p>
diff --git a/content/docs/zh-CN/2.3.0/client-libraries-python.html b/content/docs/zh-CN/2.3.0/client-libraries-python.html
index c207e5d..83a3382 100644
--- a/content/docs/zh-CN/2.3.0/client-libraries-python.html
+++ b/content/docs/zh-CN/2.3.0/client-libraries-python.html
@@ -132,15 +132,15 @@ client.close()
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="读者接口示例"></a><a href="#读者接口示例" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>You can use the Pulsar Python API to use the Pulsar <a href="/docs/zh-CN/2.3.0/concepts-clients#reader-interface">reader interface</a>. 下面是一个示例:</p>
-<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId 取自先前获取的消息</span>
+<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId taken from a previously fetched message</span>
 msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
-    <span class="hljs-comment"># 无确认操作</span>
+    <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="schema"></a><a href="#schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <h3><a class="anchor" aria-hidden="true" id="声明和验证-schema"></a><a href="#声明和验证-schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
diff --git a/content/docs/zh-CN/2.3.0/client-libraries-python/index.html b/content/docs/zh-CN/2.3.0/client-libraries-python/index.html
index c207e5d..83a3382 100644
--- a/content/docs/zh-CN/2.3.0/client-libraries-python/index.html
+++ b/content/docs/zh-CN/2.3.0/client-libraries-python/index.html
@@ -132,15 +132,15 @@ client.close()
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="读者接口示例"></a><a href="#读者接口示例" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>You can use the Pulsar Python API to use the Pulsar <a href="/docs/zh-CN/2.3.0/concepts-clients#reader-interface">reader interface</a>. 下面是一个示例:</p>
-<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId 取自先前获取的消息</span>
+<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId taken from a previously fetched message</span>
 msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
-    <span class="hljs-comment"># 无确认操作</span>
+    <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="schema"></a><a href="#schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <h3><a class="anchor" aria-hidden="true" id="声明和验证-schema"></a><a href="#声明和验证-schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
diff --git a/content/docs/zh-CN/2.3.0/cookbooks-message-queue.html b/content/docs/zh-CN/2.3.0/cookbooks-message-queue.html
index 5b8f10d..49f9838 100644
--- a/content/docs/zh-CN/2.3.0/cookbooks-message-queue.html
+++ b/content/docs/zh-CN/2.3.0/cookbooks-message-queue.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
-"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -76,14 +76,14 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然<em>必须</em>处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。</p>
-<p>Pulsar 是消息队列的绝佳选择,这是因为:</p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然<em>必须</em>处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。</p>
+<p>对于消息队列而言,Pulsar 是绝佳选择,这是因为:</p>
 <ul>
-<li>它的构建基于<a href="/docs/zh-CN/2.3.0/concepts-architecture-overview#persistent-storage">持久性消息存储</a>的概念。</li>
-<li>它为<a href="/docs/zh-CN/2.3.0/reference-terminology#consumer">消费者</a>提供主题消息的自动负载平衡(也可自定义负载平衡)</li>
+<li>构建之初就考虑到了<a href="/docs/zh-CN/2.3.0/concepts-architecture-overview#persistent-storage">消息持久化存储</a>。</li>
+<li>为<a href="/docs/zh-CN/2.3.0/reference-terminology#consumer">消费者</a>提供主题消息的自动负载均衡(支持自定义负载均衡)。</li>
 </ul>
 <blockquote>
-<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
+<p>你可以使用相同的 Pulsar 安装配置来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
 <h1><a class="anchor" aria-hidden="true" id="客户端配置更改"></a><a href="#客户端配置更改" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
 <p>要将 Pulsar <a href="/docs/zh-CN/2.3.0/reference-terminology#topic">主题</a> 用作消息队列,应将该主题的接收器负载分配到多个消费者(最佳消费者数取决于实时负载量)。 每个消费者必须:</p>
diff --git a/content/docs/zh-CN/2.3.0/cookbooks-message-queue/index.html b/content/docs/zh-CN/2.3.0/cookbooks-message-queue/index.html
index 5b8f10d..49f9838 100644
--- a/content/docs/zh-CN/2.3.0/cookbooks-message-queue/index.html
+++ b/content/docs/zh-CN/2.3.0/cookbooks-message-queue/index.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
-"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -76,14 +76,14 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然<em>必须</em>处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。</p>
-<p>Pulsar 是消息队列的绝佳选择,这是因为:</p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然<em>必须</em>处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。</p>
+<p>对于消息队列而言,Pulsar 是绝佳选择,这是因为:</p>
 <ul>
-<li>它的构建基于<a href="/docs/zh-CN/2.3.0/concepts-architecture-overview#persistent-storage">持久性消息存储</a>的概念。</li>
-<li>它为<a href="/docs/zh-CN/2.3.0/reference-terminology#consumer">消费者</a>提供主题消息的自动负载平衡(也可自定义负载平衡)</li>
+<li>构建之初就考虑到了<a href="/docs/zh-CN/2.3.0/concepts-architecture-overview#persistent-storage">消息持久化存储</a>。</li>
+<li>为<a href="/docs/zh-CN/2.3.0/reference-terminology#consumer">消费者</a>提供主题消息的自动负载均衡(支持自定义负载均衡)。</li>
 </ul>
 <blockquote>
-<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
+<p>你可以使用相同的 Pulsar 安装配置来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
 <h1><a class="anchor" aria-hidden="true" id="客户端配置更改"></a><a href="#客户端配置更改" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
 <p>要将 Pulsar <a href="/docs/zh-CN/2.3.0/reference-terminology#topic">主题</a> 用作消息队列,应将该主题的接收器负载分配到多个消费者(最佳消费者数取决于实时负载量)。 每个消费者必须:</p>
diff --git a/content/docs/zh-CN/2.3.1/client-libraries-python.html b/content/docs/zh-CN/2.3.1/client-libraries-python.html
index 74be6d2..b74aa44 100644
--- a/content/docs/zh-CN/2.3.1/client-libraries-python.html
+++ b/content/docs/zh-CN/2.3.1/client-libraries-python.html
@@ -137,15 +137,15 @@ client.close()
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="读者接口示例"></a><a href="#读者接口示例" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>You can use the Pulsar Python API to use the Pulsar <a href="/docs/zh-CN/2.3.1/concepts-clients#reader-interface">reader interface</a>. 下面是一个示例:</p>
-<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId 取自先前获取的消息</span>
+<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId taken from a previously fetched message</span>
 msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
-    <span class="hljs-comment"># 无确认操作</span>
+    <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="schema"></a><a href="#schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <h3><a class="anchor" aria-hidden="true" id="声明和验证-schema"></a><a href="#声明和验证-schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
diff --git a/content/docs/zh-CN/2.3.1/client-libraries-python/index.html b/content/docs/zh-CN/2.3.1/client-libraries-python/index.html
index 74be6d2..b74aa44 100644
--- a/content/docs/zh-CN/2.3.1/client-libraries-python/index.html
+++ b/content/docs/zh-CN/2.3.1/client-libraries-python/index.html
@@ -137,15 +137,15 @@ client.close()
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="读者接口示例"></a><a href="#读者接口示例" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>You can use the Pulsar Python API to use the Pulsar <a href="/docs/zh-CN/2.3.1/concepts-clients#reader-interface">reader interface</a>. 下面是一个示例:</p>
-<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId 取自先前获取的消息</span>
+<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId taken from a previously fetched message</span>
 msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
-    <span class="hljs-comment"># 无确认操作</span>
+    <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="schema"></a><a href="#schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <h3><a class="anchor" aria-hidden="true" id="声明和验证-schema"></a><a href="#声明和验证-schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
diff --git a/content/docs/zh-CN/2.3.1/cookbooks-message-queue.html b/content/docs/zh-CN/2.3.1/cookbooks-message-queue.html
index 2fd481d..a1fcc2b 100644
--- a/content/docs/zh-CN/2.3.1/cookbooks-message-queue.html
+++ b/content/docs/zh-CN/2.3.1/cookbooks-message-queue.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
-"/><meta name="docsearch:version" content="2.3.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.3.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -76,14 +76,14 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然<em>必须</em>处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。</p>
-<p>Pulsar 是消息队列的绝佳选择,这是因为:</p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然<em>必须</em>处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。</p>
+<p>对于消息队列而言,Pulsar 是绝佳选择,这是因为:</p>
 <ul>
-<li>它的构建基于<a href="/docs/zh-CN/2.3.1/concepts-architecture-overview#persistent-storage">持久性消息存储</a>的概念。</li>
-<li>它为<a href="/docs/zh-CN/2.3.1/reference-terminology#consumer">消费者</a>提供主题消息的自动负载平衡(也可自定义负载平衡)</li>
+<li>构建之初就考虑到了<a href="/docs/zh-CN/2.3.1/concepts-architecture-overview#persistent-storage">消息持久化存储</a>。</li>
+<li>为<a href="/docs/zh-CN/2.3.1/reference-terminology#consumer">消费者</a>提供主题消息的自动负载均衡(支持自定义负载均衡)。</li>
 </ul>
 <blockquote>
-<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
+<p>你可以使用相同的 Pulsar 安装配置来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
 <h1><a class="anchor" aria-hidden="true" id="客户端配置更改"></a><a href="#客户端配置更改" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
 <p>要将 Pulsar <a href="/docs/zh-CN/2.3.1/reference-terminology#topic">主题</a> 用作消息队列,应将该主题的接收器负载分配到多个消费者(最佳消费者数取决于实时负载量)。 每个消费者必须:</p>
diff --git a/content/docs/zh-CN/2.3.1/cookbooks-message-queue/index.html b/content/docs/zh-CN/2.3.1/cookbooks-message-queue/index.html
index 2fd481d..a1fcc2b 100644
--- a/content/docs/zh-CN/2.3.1/cookbooks-message-queue/index.html
+++ b/content/docs/zh-CN/2.3.1/cookbooks-message-queue/index.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
-"/><meta name="docsearch:version" content="2.3.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.3.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -76,14 +76,14 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然<em>必须</em>处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。</p>
-<p>Pulsar 是消息队列的绝佳选择,这是因为:</p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然<em>必须</em>处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。</p>
+<p>对于消息队列而言,Pulsar 是绝佳选择,这是因为:</p>
 <ul>
-<li>它的构建基于<a href="/docs/zh-CN/2.3.1/concepts-architecture-overview#persistent-storage">持久性消息存储</a>的概念。</li>
-<li>它为<a href="/docs/zh-CN/2.3.1/reference-terminology#consumer">消费者</a>提供主题消息的自动负载平衡(也可自定义负载平衡)</li>
+<li>构建之初就考虑到了<a href="/docs/zh-CN/2.3.1/concepts-architecture-overview#persistent-storage">消息持久化存储</a>。</li>
+<li>为<a href="/docs/zh-CN/2.3.1/reference-terminology#consumer">消费者</a>提供主题消息的自动负载均衡(支持自定义负载均衡)。</li>
 </ul>
 <blockquote>
-<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
+<p>你可以使用相同的 Pulsar 安装配置来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
 <h1><a class="anchor" aria-hidden="true" id="客户端配置更改"></a><a href="#客户端配置更改" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
 <p>要将 Pulsar <a href="/docs/zh-CN/2.3.1/reference-terminology#topic">主题</a> 用作消息队列,应将该主题的接收器负载分配到多个消费者(最佳消费者数取决于实时负载量)。 每个消费者必须:</p>
diff --git a/content/docs/zh-CN/2.3.2/client-libraries-python.html b/content/docs/zh-CN/2.3.2/client-libraries-python.html
index 79de6e9..c14a45d 100644
--- a/content/docs/zh-CN/2.3.2/client-libraries-python.html
+++ b/content/docs/zh-CN/2.3.2/client-libraries-python.html
@@ -137,15 +137,15 @@ client.close()
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="读者接口示例"></a><a href="#读者接口示例" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>You can use the Pulsar Python API to use the Pulsar <a href="/docs/zh-CN/2.3.2/concepts-clients#reader-interface">reader interface</a>. 下面是一个示例:</p>
-<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId 取自先前获取的消息</span>
+<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId taken from a previously fetched message</span>
 msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
-    <span class="hljs-comment"># 无确认操作</span>
+    <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="schema"></a><a href="#schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <h3><a class="anchor" aria-hidden="true" id="声明和验证-schema"></a><a href="#声明和验证-schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
diff --git a/content/docs/zh-CN/2.3.2/client-libraries-python/index.html b/content/docs/zh-CN/2.3.2/client-libraries-python/index.html
index 79de6e9..c14a45d 100644
--- a/content/docs/zh-CN/2.3.2/client-libraries-python/index.html
+++ b/content/docs/zh-CN/2.3.2/client-libraries-python/index.html
@@ -137,15 +137,15 @@ client.close()
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="读者接口示例"></a><a href="#读者接口示例" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>You can use the Pulsar Python API to use the Pulsar <a href="/docs/zh-CN/2.3.2/concepts-clients#reader-interface">reader interface</a>. 下面是一个示例:</p>
-<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId 取自先前获取的消息</span>
+<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId taken from a previously fetched message</span>
 msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
-    <span class="hljs-comment"># 无确认操作</span>
+    <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="schema"></a><a href="#schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <h3><a class="anchor" aria-hidden="true" id="声明和验证-schema"></a><a href="#声明和验证-schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
diff --git a/content/docs/zh-CN/2.3.2/cookbooks-message-queue.html b/content/docs/zh-CN/2.3.2/cookbooks-message-queue.html
index 4116b11..bb560fc 100644
--- a/content/docs/zh-CN/2.3.2/cookbooks-message-queue.html
+++ b/content/docs/zh-CN/2.3.2/cookbooks-message-queue.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
-"/><meta name="docsearch:version" content="2.3.2"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.3.2"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -76,14 +76,14 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然<em>必须</em>处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。</p>
-<p>Pulsar 是消息队列的绝佳选择,这是因为:</p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然<em>必须</em>处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。</p>
+<p>对于消息队列而言,Pulsar 是绝佳选择,这是因为:</p>
 <ul>
-<li>它的构建基于<a href="/docs/zh-CN/2.3.2/concepts-architecture-overview#persistent-storage">持久性消息存储</a>的概念。</li>
-<li>它为<a href="/docs/zh-CN/2.3.2/reference-terminology#consumer">消费者</a>提供主题消息的自动负载平衡(也可自定义负载平衡)</li>
+<li>构建之初就考虑到了<a href="/docs/zh-CN/2.3.2/concepts-architecture-overview#persistent-storage">消息持久化存储</a>。</li>
+<li>为<a href="/docs/zh-CN/2.3.2/reference-terminology#consumer">消费者</a>提供主题消息的自动负载均衡(支持自定义负载均衡)。</li>
 </ul>
 <blockquote>
-<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
+<p>你可以使用相同的 Pulsar 安装配置来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
 <h1><a class="anchor" aria-hidden="true" id="客户端配置更改"></a><a href="#客户端配置更改" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
 <p>要将 Pulsar <a href="/docs/zh-CN/2.3.2/reference-terminology#topic">主题</a> 用作消息队列,应将该主题的接收器负载分配到多个消费者(最佳消费者数取决于实时负载量)。 每个消费者必须:</p>
diff --git a/content/docs/zh-CN/2.3.2/cookbooks-message-queue/index.html b/content/docs/zh-CN/2.3.2/cookbooks-message-queue/index.html
index 4116b11..bb560fc 100644
--- a/content/docs/zh-CN/2.3.2/cookbooks-message-queue/index.html
+++ b/content/docs/zh-CN/2.3.2/cookbooks-message-queue/index.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
-"/><meta name="docsearch:version" content="2.3.2"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.3.2"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -76,14 +76,14 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然<em>必须</em>处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。</p>
-<p>Pulsar 是消息队列的绝佳选择,这是因为:</p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然<em>必须</em>处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。</p>
+<p>对于消息队列而言,Pulsar 是绝佳选择,这是因为:</p>
 <ul>
-<li>它的构建基于<a href="/docs/zh-CN/2.3.2/concepts-architecture-overview#persistent-storage">持久性消息存储</a>的概念。</li>
-<li>它为<a href="/docs/zh-CN/2.3.2/reference-terminology#consumer">消费者</a>提供主题消息的自动负载平衡(也可自定义负载平衡)</li>
+<li>构建之初就考虑到了<a href="/docs/zh-CN/2.3.2/concepts-architecture-overview#persistent-storage">消息持久化存储</a>。</li>
+<li>为<a href="/docs/zh-CN/2.3.2/reference-terminology#consumer">消费者</a>提供主题消息的自动负载均衡(支持自定义负载均衡)。</li>
 </ul>
 <blockquote>
-<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
+<p>你可以使用相同的 Pulsar 安装配置来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
 <h1><a class="anchor" aria-hidden="true" id="客户端配置更改"></a><a href="#客户端配置更改" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
 <p>要将 Pulsar <a href="/docs/zh-CN/2.3.2/reference-terminology#topic">主题</a> 用作消息队列,应将该主题的接收器负载分配到多个消费者(最佳消费者数取决于实时负载量)。 每个消费者必须:</p>
diff --git a/content/docs/zh-CN/client-libraries-python.html b/content/docs/zh-CN/client-libraries-python.html
index d83c8af..80c5d2a 100644
--- a/content/docs/zh-CN/client-libraries-python.html
+++ b/content/docs/zh-CN/client-libraries-python.html
@@ -137,15 +137,15 @@ client.close()
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="读者接口示例"></a><a href="#读者接口示例" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>You can use the Pulsar Python API to use the Pulsar <a href="/docs/zh-CN/concepts-clients#reader-interface">reader interface</a>. 下面是一个示例:</p>
-<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId 取自先前获取的消息</span>
+<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId taken from a previously fetched message</span>
 msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
-    <span class="hljs-comment"># 无确认操作</span>
+    <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="schema"></a><a href="#schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <h3><a class="anchor" aria-hidden="true" id="声明和验证-schema"></a><a href="#声明和验证-schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
diff --git a/content/docs/zh-CN/client-libraries-python/index.html b/content/docs/zh-CN/client-libraries-python/index.html
index d83c8af..80c5d2a 100644
--- a/content/docs/zh-CN/client-libraries-python/index.html
+++ b/content/docs/zh-CN/client-libraries-python/index.html
@@ -137,15 +137,15 @@ client.close()
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="读者接口示例"></a><a href="#读者接口示例" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>You can use the Pulsar Python API to use the Pulsar <a href="/docs/zh-CN/concepts-clients#reader-interface">reader interface</a>. 下面是一个示例:</p>
-<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId 取自先前获取的消息</span>
+<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId taken from a previously fetched message</span>
 msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
-    <span class="hljs-comment"># 无确认操作</span>
+    <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="schema"></a><a href="#schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <h3><a class="anchor" aria-hidden="true" id="声明和验证-schema"></a><a href="#声明和验证-schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
diff --git a/content/docs/zh-CN/cookbooks-message-queue.html b/content/docs/zh-CN/cookbooks-message-queue.html
index a380dcb..04902f7 100644
--- a/content/docs/zh-CN/cookbooks-message-queue.html
+++ b/content/docs/zh-CN/cookbooks-message-queue.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
-"/><meta name="docsearch:version" content="2.4.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.4.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -76,14 +76,14 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然<em>必须</em>处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。</p>
-<p>Pulsar 是消息队列的绝佳选择,这是因为:</p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然<em>必须</em>处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。</p>
+<p>对于消息队列而言,Pulsar 是绝佳选择,这是因为:</p>
 <ul>
-<li>它的构建基于<a href="/docs/zh-CN/concepts-architecture-overview#persistent-storage">持久性消息存储</a>的概念。</li>
-<li>它为<a href="/docs/zh-CN/reference-terminology#consumer">消费者</a>提供主题消息的自动负载平衡(也可自定义负载平衡)</li>
+<li>构建之初就考虑到了<a href="/docs/zh-CN/concepts-architecture-overview#persistent-storage">消息持久化存储</a>。</li>
+<li>为<a href="/docs/zh-CN/reference-terminology#consumer">消费者</a>提供主题消息的自动负载均衡(支持自定义负载均衡)。</li>
 </ul>
 <blockquote>
-<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
+<p>你可以使用相同的 Pulsar 安装配置来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
 <h1><a class="anchor" aria-hidden="true" id="客户端配置更改"></a><a href="#客户端配置更改" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
 <p>要将 Pulsar <a href="/docs/zh-CN/reference-terminology#topic">主题</a> 用作消息队列,应将该主题的接收器负载分配到多个消费者(最佳消费者数取决于实时负载量)。 每个消费者必须:</p>
diff --git a/content/docs/zh-CN/cookbooks-message-queue/index.html b/content/docs/zh-CN/cookbooks-message-queue/index.html
index a380dcb..04902f7 100644
--- a/content/docs/zh-CN/cookbooks-message-queue/index.html
+++ b/content/docs/zh-CN/cookbooks-message-queue/index.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
-"/><meta name="docsearch:version" content="2.4.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.4.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -76,14 +76,14 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然<em>必须</em>处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。</p>
-<p>Pulsar 是消息队列的绝佳选择,这是因为:</p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然<em>必须</em>处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。</p>
+<p>对于消息队列而言,Pulsar 是绝佳选择,这是因为:</p>
 <ul>
-<li>它的构建基于<a href="/docs/zh-CN/concepts-architecture-overview#persistent-storage">持久性消息存储</a>的概念。</li>
-<li>它为<a href="/docs/zh-CN/reference-terminology#consumer">消费者</a>提供主题消息的自动负载平衡(也可自定义负载平衡)</li>
+<li>构建之初就考虑到了<a href="/docs/zh-CN/concepts-architecture-overview#persistent-storage">消息持久化存储</a>。</li>
+<li>为<a href="/docs/zh-CN/reference-terminology#consumer">消费者</a>提供主题消息的自动负载均衡(支持自定义负载均衡)。</li>
 </ul>
 <blockquote>
-<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
+<p>你可以使用相同的 Pulsar 安装配置来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
 <h1><a class="anchor" aria-hidden="true" id="客户端配置更改"></a><a href="#客户端配置更改" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
 <p>要将 Pulsar <a href="/docs/zh-CN/reference-terminology#topic">主题</a> 用作消息队列,应将该主题的接收器负载分配到多个消费者(最佳消费者数取决于实时负载量)。 每个消费者必须:</p>
diff --git a/content/docs/zh-CN/next/client-libraries-python.html b/content/docs/zh-CN/next/client-libraries-python.html
index fa369ec..63b59fdc 100644
--- a/content/docs/zh-CN/next/client-libraries-python.html
+++ b/content/docs/zh-CN/next/client-libraries-python.html
@@ -137,15 +137,15 @@ client.close()
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="读者接口示例"></a><a href="#读者接口示例" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>你可以使用 Pulsar Python API 调用 Pulsar <a href="/docs/zh-CN/next/concepts-clients#reader-interface">reader 接口</a>。示例如下:</p>
-<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId 取自先前获取的消息</span>
+<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId taken from a previously fetched message</span>
 msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
-    <span class="hljs-comment"># 无确认操作</span>
+    <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="schema"></a><a href="#schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <h3><a class="anchor" aria-hidden="true" id="声明和验证-schema"></a><a href="#声明和验证-schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
diff --git a/content/docs/zh-CN/next/client-libraries-python/index.html b/content/docs/zh-CN/next/client-libraries-python/index.html
index fa369ec..63b59fdc 100644
--- a/content/docs/zh-CN/next/client-libraries-python/index.html
+++ b/content/docs/zh-CN/next/client-libraries-python/index.html
@@ -137,15 +137,15 @@ client.close()
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="读者接口示例"></a><a href="#读者接口示例" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>你可以使用 Pulsar Python API 调用 Pulsar <a href="/docs/zh-CN/next/concepts-clients#reader-interface">reader 接口</a>。示例如下:</p>
-<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId 取自先前获取的消息</span>
+<pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId taken from a previously fetched message</span>
 msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
 <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
-    msg = reader.receive()
+    msg = reader.read_next()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
-    <span class="hljs-comment"># 无确认操作</span>
+    <span class="hljs-comment"># No acknowledgment</span>
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="schema"></a><a href="#schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <h3><a class="anchor" aria-hidden="true" id="声明和验证-schema"></a><a href="#声明和验证-schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
diff --git a/content/docs/zh-CN/next/cookbooks-message-queue.html b/content/docs/zh-CN/next/cookbooks-message-queue.html
index 4e122d1..85194c9 100644
--- a/content/docs/zh-CN/next/cookbooks-message-queue.html
+++ b/content/docs/zh-CN/next/cookbooks-message-queue.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
-"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
+"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -76,14 +76,14 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然<em>必须</em>处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。</p>
-<p>Pulsar 是消息队列的绝佳选择,这是因为:</p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然<em>必须</em>处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。</p>
+<p>对于消息队列而言,Pulsar 是绝佳选择,这是因为:</p>
 <ul>
-<li>它的构建基于<a href="/docs/zh-CN/next/concepts-architecture-overview#persistent-storage">持久性消息存储</a>的概念。</li>
-<li>它为<a href="/docs/zh-CN/next/reference-terminology#consumer">消费者</a>提供主题消息的自动负载平衡(也可自定义负载平衡)</li>
+<li>构建之初就考虑到了<a href="/docs/zh-CN/next/concepts-architecture-overview#persistent-storage">消息持久化存储</a>。</li>
+<li>为<a href="/docs/zh-CN/next/reference-terminology#consumer">消费者</a>提供主题消息的自动负载均衡(支持自定义负载均衡)。</li>
 </ul>
 <blockquote>
-<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
+<p>你可以使用相同的 Pulsar 安装配置来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
 <h1><a class="anchor" aria-hidden="true" id="客户端配置更改"></a><a href="#客户端配置更改" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
 <p>要将 Pulsar <a href="/docs/zh-CN/next/reference-terminology#topic">主题</a> 用作消息队列,应将该主题的接收器负载分配到多个消费者(最佳消费者数取决于实时负载量)。 每个消费者必须:</p>
diff --git a/content/docs/zh-CN/next/cookbooks-message-queue/index.html b/content/docs/zh-CN/next/cookbooks-message-queue/index.html
index 4e122d1..85194c9 100644
--- a/content/docs/zh-CN/next/cookbooks-message-queue/index.html
+++ b/content/docs/zh-CN/next/cookbooks-message-queue/index.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
-"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。&lt;/p&gt;
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Pulsar as a message queue · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
+"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Using Pulsar as a message queue · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然&lt;em&gt;必须&lt;/em&gt;处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。&lt;/p&gt;
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -76,14 +76,14 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果系统组件缓慢或彻底失败的情况下依然<em>必须</em>处理通过系统的每个单个工作对象,这时候你很有可能需要消息队列来介入以确保未处理的数据在所需操作被执行前一直以正确顺序保留。</p>
-<p>Pulsar 是消息队列的绝佳选择,这是因为:</p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Using Pulsar as a message queue</h1></header><article><div><span><p>消息队列是许多大规模数据架构的基本组件。 如果在系统组件运行缓慢或彻底故障的情况下,依然<em>必须</em>处理通过系统的每一个工作对象,就有可能需要消息队列来介入,确保数据完成特定处理前一直以正确顺序保留。</p>
+<p>对于消息队列而言,Pulsar 是绝佳选择,这是因为:</p>
 <ul>
-<li>它的构建基于<a href="/docs/zh-CN/next/concepts-architecture-overview#persistent-storage">持久性消息存储</a>的概念。</li>
-<li>它为<a href="/docs/zh-CN/next/reference-terminology#consumer">消费者</a>提供主题消息的自动负载平衡(也可自定义负载平衡)</li>
+<li>构建之初就考虑到了<a href="/docs/zh-CN/next/concepts-architecture-overview#persistent-storage">消息持久化存储</a>。</li>
+<li>为<a href="/docs/zh-CN/next/reference-terminology#consumer">消费者</a>提供主题消息的自动负载均衡(支持自定义负载均衡)。</li>
 </ul>
 <blockquote>
-<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
+<p>你可以使用相同的 Pulsar 安装配置来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
 <h1><a class="anchor" aria-hidden="true" id="客户端配置更改"></a><a href="#客户端配置更改" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
 <p>要将 Pulsar <a href="/docs/zh-CN/next/reference-terminology#topic">主题</a> 用作消息队列,应将该主题的接收器负载分配到多个消费者(最佳消费者数取决于实时负载量)。 每个消费者必须:</p>
diff --git a/content/sitemap.xml b/content/sitemap.xml
index 8cc323c..bf69c01 100644
--- a/content/sitemap.xml
+++ b/content/sitemap.xml
@@ -13,6 +13,7 @@
 <url> <loc>https://pulsar.incubator.apache.org/source-rest-api</loc> <changefreq>weekly</changefreq> <priority>0.5</priority> <xhtml:link rel="alternate" hreflang="en" href="https://pulsar.incubator.apache.org/en/source-rest-api" /> <xhtml:link rel="alternate" hreflang="ja" href="https://pulsar.incubator.apache.org/ja/source-rest-api" /> <xhtml:link rel="alternate" hreflang="fr" href="https://pulsar.incubator.apache.org/fr/source-rest-api" /> <xhtml:link rel="alternate" hreflang="zh-CN"  [...]
 <url> <loc>https://pulsar.incubator.apache.org/team</loc> <changefreq>weekly</changefreq> <priority>0.5</priority> <xhtml:link rel="alternate" hreflang="en" href="https://pulsar.incubator.apache.org/en/team" /> <xhtml:link rel="alternate" hreflang="ja" href="https://pulsar.incubator.apache.org/ja/team" /> <xhtml:link rel="alternate" hreflang="fr" href="https://pulsar.incubator.apache.org/fr/team" /> <xhtml:link rel="alternate" hreflang="zh-CN" href="https://pulsar.incubator.apache.org/zh [...]
 <url> <loc>https://pulsar.incubator.apache.org/versions</loc> <changefreq>weekly</changefreq> <priority>0.5</priority> <xhtml:link rel="alternate" hreflang="en" href="https://pulsar.incubator.apache.org/en/versions" /> <xhtml:link rel="alternate" hreflang="ja" href="https://pulsar.incubator.apache.org/ja/versions" /> <xhtml:link rel="alternate" hreflang="fr" href="https://pulsar.incubator.apache.org/fr/versions" /> <xhtml:link rel="alternate" hreflang="zh-CN" href="https://pulsar.incubat [...]
+<url> <loc>https://pulsar.incubator.apache.org/blog/2019/07/05/Apache-Pulsar-2-4-0</loc> <changefreq>weekly</changefreq> <priority>0.3</priority> </url>
 <url> <loc>https://pulsar.incubator.apache.org/blog/2019/02/20/Apache-Pulsar-2-3-0</loc> <changefreq>weekly</changefreq> <priority>0.3</priority> </url>
 <url> <loc>https://pulsar.incubator.apache.org/blog/2018/08/06/Apache-Pulsar-2-1-0</loc> <changefreq>weekly</changefreq> <priority>0.3</priority> </url>
 <url> <loc>https://pulsar.incubator.apache.org/docs/en/next/adaptors-kafka</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://pulsar.incubator.apache.org/docs/en/next/adaptors-kafka" /> <xhtml:link rel="alternate" hreflang="ja" href="https://pulsar.incubator.apache.org/docs/ja/next/adaptors-kafka" /> <xhtml:link rel="alternate" hreflang="fr" href="https://pulsar.incubator.apache.org/docs/fr/next/adaptors-kafka" /> <xhtml [...]
diff --git a/content/swagger/2.5.0-SNAPSHOT/swagger.json b/content/swagger/2.5.0-SNAPSHOT/swagger.json
index 54c443d..d6550cc 100644
--- a/content/swagger/2.5.0-SNAPSHOT/swagger.json
+++ b/content/swagger/2.5.0-SNAPSHOT/swagger.json
@@ -8652,6 +8652,14 @@
           "type" : "number",
           "format" : "double"
         },
+        "msgThroughputIn" : {
+          "type" : "number",
+          "format" : "double"
+        },
+        "msgThroughputOut" : {
+          "type" : "number",
+          "format" : "double"
+        },
         "cpu" : {
           "$ref" : "#/definitions/ResourceUsage"
         },
@@ -8671,22 +8679,14 @@
           "type" : "integer",
           "format" : "int64"
         },
-        "msgThroughputIn" : {
-          "type" : "number",
-          "format" : "double"
-        },
-        "msgThroughputOut" : {
-          "type" : "number",
-          "format" : "double"
-        },
-        "underLoaded" : {
-          "type" : "boolean"
-        },
         "overLoaded" : {
           "type" : "boolean"
         },
         "loadReportType" : {
           "type" : "string"
+        },
+        "underLoaded" : {
+          "type" : "boolean"
         }
       }
     },
@@ -8845,15 +8845,15 @@
           "type" : "number",
           "format" : "double"
         },
-        "producerName" : {
-          "type" : "string"
-        },
         "connectedSince" : {
           "type" : "string"
         },
         "clientVersion" : {
           "type" : "string"
         },
+        "producerName" : {
+          "type" : "string"
+        },
         "address" : {
           "type" : "string"
         }
@@ -9516,15 +9516,15 @@
             "type" : "string"
           }
         },
-        "producerName" : {
-          "type" : "string"
-        },
         "connectedSince" : {
           "type" : "string"
         },
         "clientVersion" : {
           "type" : "string"
         },
+        "producerName" : {
+          "type" : "string"
+        },
         "address" : {
           "type" : "string"
         }
diff --git a/content/swagger/2.5.0-SNAPSHOT/swaggerfunctions.json b/content/swagger/2.5.0-SNAPSHOT/swaggerfunctions.json
index 4a944a0..2cf18ed 100644
--- a/content/swagger/2.5.0-SNAPSHOT/swaggerfunctions.json
+++ b/content/swagger/2.5.0-SNAPSHOT/swaggerfunctions.json
@@ -1348,26 +1348,13 @@
     "Message" : {
       "type" : "object",
       "properties" : {
-        "replicated" : {
-          "type" : "boolean"
-        },
-        "publishTime" : {
-          "type" : "integer",
-          "format" : "int64"
+        "messageId" : {
+          "$ref" : "#/definitions/MessageId"
         },
-        "eventTime" : {
+        "sequenceId" : {
           "type" : "integer",
           "format" : "int64"
         },
-        "topicName" : {
-          "type" : "string"
-        },
-        "replicatedFrom" : {
-          "type" : "string"
-        },
-        "producerName" : {
-          "type" : "string"
-        },
         "orderingKey" : {
           "type" : "array",
           "items" : {
@@ -1389,13 +1376,23 @@
             "format" : "byte"
           }
         },
-        "messageId" : {
-          "$ref" : "#/definitions/MessageId"
+        "replicatedFrom" : {
+          "type" : "string"
         },
-        "sequenceId" : {
+        "replicated" : {
+          "type" : "boolean"
+        },
+        "publishTime" : {
           "type" : "integer",
           "format" : "int64"
         },
+        "eventTime" : {
+          "type" : "integer",
+          "format" : "int64"
+        },
+        "topicName" : {
+          "type" : "string"
+        },
         "keyBytes" : {
           "type" : "array",
           "items" : {
@@ -1403,6 +1400,9 @@
             "format" : "byte"
           }
         },
+        "producerName" : {
+          "type" : "string"
+        },
         "data" : {
           "type" : "array",
           "items" : {