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 09:54:13 UTC

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

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 bc571b4  Updated site at revision d77980d
bc571b4 is described below

commit bc571b47e5de6172a2c6c4a89493d35bf8d02bf2
Author: jenkins <bu...@apache.org>
AuthorDate: Tue Jul 9 09:54:03 2019 +0000

    Updated site at revision d77980d
---
 content/css/main.css                               |   2 +-
 content/docs/en/next/io-connectors.html            |   1 +
 content/docs/en/next/io-connectors/index.html      |   1 +
 content/docs/en/next/io-jdbc.html                  | 106 +++++++++++++++++++++
 content/docs/en/next/io-jdbc/index.html            | 106 +++++++++++++++++++++
 content/docs/fr/next/io-connectors.html            |   1 +
 content/docs/fr/next/io-connectors/index.html      |   1 +
 content/docs/fr/next/io-jdbc.html                  | 105 ++++++++++++++++++++
 content/docs/fr/next/io-jdbc/index.html            | 105 ++++++++++++++++++++
 content/docs/ja/next/io-connectors.html            |   1 +
 content/docs/ja/next/io-connectors/index.html      |   1 +
 content/docs/ja/next/io-jdbc.html                  | 105 ++++++++++++++++++++
 content/docs/ja/next/io-jdbc/index.html            | 105 ++++++++++++++++++++
 content/docs/next/io-jdbc.html                     |  13 +++
 content/docs/next/io-jdbc/index.html               |  13 +++
 .../2.1.0-incubating/cookbooks-message-queue.html  |  36 +++----
 .../cookbooks-message-queue/index.html             |  36 +++----
 .../2.1.1-incubating/cookbooks-message-queue.html  |  36 +++----
 .../cookbooks-message-queue/index.html             |  36 +++----
 .../docs/zh-CN/2.2.0/cookbooks-message-queue.html  |  36 +++----
 .../zh-CN/2.2.0/cookbooks-message-queue/index.html |  36 +++----
 .../docs/zh-CN/2.2.1/cookbooks-message-queue.html  |  36 +++----
 .../zh-CN/2.2.1/cookbooks-message-queue/index.html |  36 +++----
 .../docs/zh-CN/2.3.0/cookbooks-message-queue.html  |  36 +++----
 .../zh-CN/2.3.0/cookbooks-message-queue/index.html |  36 +++----
 .../docs/zh-CN/2.3.1/cookbooks-message-queue.html  |  36 +++----
 .../zh-CN/2.3.1/cookbooks-message-queue/index.html |  36 +++----
 .../docs/zh-CN/2.3.2/cookbooks-message-queue.html  |  36 +++----
 .../zh-CN/2.3.2/cookbooks-message-queue/index.html |  36 +++----
 content/docs/zh-CN/cookbooks-message-queue.html    |  36 +++----
 .../docs/zh-CN/cookbooks-message-queue/index.html  |  36 +++----
 .../docs/zh-CN/next/cookbooks-message-queue.html   |  36 +++----
 .../zh-CN/next/cookbooks-message-queue/index.html  |  36 +++----
 content/docs/zh-CN/next/io-connectors.html         |   1 +
 content/docs/zh-CN/next/io-connectors/index.html   |   1 +
 content/docs/zh-CN/next/io-jdbc.html               | 105 ++++++++++++++++++++
 content/docs/zh-CN/next/io-jdbc/index.html         | 105 ++++++++++++++++++++
 content/sitemap.xml                                |   1 +
 content/swagger/2.5.0-SNAPSHOT/swagger.json        |  26 ++---
 .../swagger/2.5.0-SNAPSHOT/swaggerfunctions.json   |  34 +++----
 40 files changed, 1232 insertions(+), 355 deletions(-)

diff --git a/content/css/main.css b/content/css/main.css
index 656f0b5..0e3f252 100644
--- a/content/css/main.css
+++ b/content/css/main.css
@@ -1 +1 @@
-a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{border:0;font:inherit;font-size:100%;margin:0;padding:0;vertical-align:baseline}b [...]
\ No newline at end of file
+a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{border:0;font:inherit;font-size:100%;margin:0;padding:0;vertical-align:baseline}b [...]
\ No newline at end of file
diff --git a/content/docs/en/next/io-connectors.html b/content/docs/en/next/io-connectors.html
index 0464f39..e115c8f 100644
--- a/content/docs/en/next/io-connectors.html
+++ b/content/docs/en/next/io-connectors.html
@@ -99,6 +99,7 @@ Pulsar Functions cluster.</p>
 <li><a href="/docs/en/next/io-redis#sink">Redis Sink Connector</a></li>
 <li><a href="/docs/en/next/io-solr#sink">Solr Sink Connector</a></li>
 <li><a href="/docs/en/next/io-influxdb#sink">InfluxDB Sink Connector</a></li>
+<li><a href="/docs/en/next/io-jdbc">JDBC Sink Connector</a></li>
 </ul>
 </span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/io-managing"><span class="arrow-prev">← </span><span>Managing Connectors</span></a><a class="docs-next button" href="/docs/en/next/io-develop"><span>Developing Connectors</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All R [...]
       const community = document.querySelector("a[href='#community']").parentNode;
diff --git a/content/docs/en/next/io-connectors/index.html b/content/docs/en/next/io-connectors/index.html
index 0464f39..e115c8f 100644
--- a/content/docs/en/next/io-connectors/index.html
+++ b/content/docs/en/next/io-connectors/index.html
@@ -99,6 +99,7 @@ Pulsar Functions cluster.</p>
 <li><a href="/docs/en/next/io-redis#sink">Redis Sink Connector</a></li>
 <li><a href="/docs/en/next/io-solr#sink">Solr Sink Connector</a></li>
 <li><a href="/docs/en/next/io-influxdb#sink">InfluxDB Sink Connector</a></li>
+<li><a href="/docs/en/next/io-jdbc">JDBC Sink Connector</a></li>
 </ul>
 </span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/io-managing"><span class="arrow-prev">← </span><span>Managing Connectors</span></a><a class="docs-next button" href="/docs/en/next/io-develop"><span>Developing Connectors</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All R [...]
       const community = document.querySelector("a[href='#community']").parentNode;
diff --git a/content/docs/en/next/io-jdbc.html b/content/docs/en/next/io-jdbc.html
new file mode 100644
index 0000000..de341a7
--- /dev/null
+++ b/content/docs/en/next/io-jdbc.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>JDBC Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;sink&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#sink&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link&quot;&gt;&lt;svg cl [...]
+"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="JDBC Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;sink&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#sink&quot; aria-hidden=&quot;true&quot; class=&quo [...]
+"/><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),
+              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 mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/incubator-pulsar/edit/master/site2/docs/io-jdbc.md" target="_blank" r [...]
+<p>The JDBC Sink Connector is used to pull messages from Pulsar topics and persist the messages to an MySQL or Sqlite.
+Current support INSERT, DELETE and UPDATE.</p>
+<h3><a class="anchor" aria-hidden="true" id="sink-configuration-options"></a><a href="#sink-configuration-options" 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 12H [...]
+<table>
+<thead>
+<tr><th>Name</th><th>Required</th><th>Default</th><th>Description</th></tr>
+</thead>
+<tbody>
+<tr><td>userName</td><td><code>false</code></td><td>``</td><td>Username used to connect to the database specified by <code>jdbcUrl</code>.</td></tr>
+<tr><td>password</td><td><code>false</code></td><td>``</td><td>Password used to connect to the database specified by <code>jdbcUrl</code>.</td></tr>
+<tr><td>jdbcUrl</td><td><code>true</code></td><td>``</td><td>The JDBC url of the database this connector connects to.</td></tr>
+<tr><td>tableName</td><td><code>true</code></td><td>``</td><td>The name of the table this connector writes messages to.</td></tr>
+<tr><td>nonKey</td><td><code>false</code></td><td>``</td><td>Fields used in update events. A comma-separated list.</td></tr>
+<tr><td>key</td><td><code>false</code></td><td>``</td><td>Fields used in where condition of update and delete Events. A comma-separated list.</td></tr>
+<tr><td>timeoutMs</td><td><code>false</code></td><td><code>500</code></td><td>The jdbc operation timeout in milliseconds.</td></tr>
+<tr><td>batchSize</td><td><code>false</code></td><td><code>200</code></td><td>The batch size of updates made to the database.</td></tr>
+</tbody>
+</table>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#sink">Sink</a><ul class="toc-headings"><li><a href="#sink-configuration-options">Sink Configuration Options</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apach [...]
+      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:next"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/en/next/io-jdbc/index.html b/content/docs/en/next/io-jdbc/index.html
new file mode 100644
index 0000000..de341a7
--- /dev/null
+++ b/content/docs/en/next/io-jdbc/index.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>JDBC Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;sink&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#sink&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link&quot;&gt;&lt;svg cl [...]
+"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="JDBC Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;sink&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#sink&quot; aria-hidden=&quot;true&quot; class=&quo [...]
+"/><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),
+              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 mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/incubator-pulsar/edit/master/site2/docs/io-jdbc.md" target="_blank" r [...]
+<p>The JDBC Sink Connector is used to pull messages from Pulsar topics and persist the messages to an MySQL or Sqlite.
+Current support INSERT, DELETE and UPDATE.</p>
+<h3><a class="anchor" aria-hidden="true" id="sink-configuration-options"></a><a href="#sink-configuration-options" 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 12H [...]
+<table>
+<thead>
+<tr><th>Name</th><th>Required</th><th>Default</th><th>Description</th></tr>
+</thead>
+<tbody>
+<tr><td>userName</td><td><code>false</code></td><td>``</td><td>Username used to connect to the database specified by <code>jdbcUrl</code>.</td></tr>
+<tr><td>password</td><td><code>false</code></td><td>``</td><td>Password used to connect to the database specified by <code>jdbcUrl</code>.</td></tr>
+<tr><td>jdbcUrl</td><td><code>true</code></td><td>``</td><td>The JDBC url of the database this connector connects to.</td></tr>
+<tr><td>tableName</td><td><code>true</code></td><td>``</td><td>The name of the table this connector writes messages to.</td></tr>
+<tr><td>nonKey</td><td><code>false</code></td><td>``</td><td>Fields used in update events. A comma-separated list.</td></tr>
+<tr><td>key</td><td><code>false</code></td><td>``</td><td>Fields used in where condition of update and delete Events. A comma-separated list.</td></tr>
+<tr><td>timeoutMs</td><td><code>false</code></td><td><code>500</code></td><td>The jdbc operation timeout in milliseconds.</td></tr>
+<tr><td>batchSize</td><td><code>false</code></td><td><code>200</code></td><td>The batch size of updates made to the database.</td></tr>
+</tbody>
+</table>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#sink">Sink</a><ul class="toc-headings"><li><a href="#sink-configuration-options">Sink Configuration Options</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apach [...]
+      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:next"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/fr/next/io-connectors.html b/content/docs/fr/next/io-connectors.html
index b37cd08..cdd5241 100644
--- a/content/docs/fr/next/io-connectors.html
+++ b/content/docs/fr/next/io-connectors.html
@@ -96,6 +96,7 @@
 <li><a href="/docs/fr/next/io-redis#sink">Redis Sink Connector</a></li>
 <li><a href="/docs/fr/next/io-solr#sink">Solr Sink Connector</a></li>
 <li><a href="/docs/fr/next/io-influxdb#sink">InfluxDB Sink Connector</a></li>
+<li><a href="/docs/fr/next/io-jdbc">JDBC Sink Connector</a></li>
 </ul>
 </span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/io-managing"><span class="arrow-prev">← </span><span>Managing Connectors</span></a><a class="docs-next button" href="/docs/fr/next/io-develop"><span>Developing Connectors</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All R [...]
       const community = document.querySelector("a[href='#community']").parentNode;
diff --git a/content/docs/fr/next/io-connectors/index.html b/content/docs/fr/next/io-connectors/index.html
index b37cd08..cdd5241 100644
--- a/content/docs/fr/next/io-connectors/index.html
+++ b/content/docs/fr/next/io-connectors/index.html
@@ -96,6 +96,7 @@
 <li><a href="/docs/fr/next/io-redis#sink">Redis Sink Connector</a></li>
 <li><a href="/docs/fr/next/io-solr#sink">Solr Sink Connector</a></li>
 <li><a href="/docs/fr/next/io-influxdb#sink">InfluxDB Sink Connector</a></li>
+<li><a href="/docs/fr/next/io-jdbc">JDBC Sink Connector</a></li>
 </ul>
 </span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/io-managing"><span class="arrow-prev">← </span><span>Managing Connectors</span></a><a class="docs-next button" href="/docs/fr/next/io-develop"><span>Developing Connectors</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All R [...]
       const community = document.querySelector("a[href='#community']").parentNode;
diff --git a/content/docs/fr/next/io-jdbc.html b/content/docs/fr/next/io-jdbc.html
new file mode 100644
index 0000000..a47884f
--- /dev/null
+++ b/content/docs/fr/next/io-jdbc.html
@@ -0,0 +1,105 @@
+<!DOCTYPE html><html lang="fr"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>JDBC Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;sink&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#sink&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link&quot;&gt;&lt;svg cl [...]
+"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="fr"/><meta property="og:title" content="JDBC Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;sink&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#sink&quot; aria-hidden=&quot;true&quot; class=&quo [...]
+"/><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),
+              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 mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/fr" target="_blank" rel="noreferrer noopener">Transla [...]
+<p>The JDBC Sink Connector is used to pull messages from Pulsar topics and persist the messages to an MySQL or Sqlite. Current support INSERT, DELETE and UPDATE.</p>
+<h3><a class="anchor" aria-hidden="true" id="sink-configuration-options"></a><a href="#sink-configuration-options" 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 12H [...]
+<table>
+<thead>
+<tr><th>Name</th><th>Required</th><th>Default</th><th>Description</th></tr>
+</thead>
+<tbody>
+<tr><td>userName</td><td><code>false</code></td><td>``</td><td>Username used to connect to the database specified by <code>jdbcUrl</code>.</td></tr>
+<tr><td>password</td><td><code>false</code></td><td>``</td><td>Password used to connect to the database specified by <code>jdbcUrl</code>.</td></tr>
+<tr><td>jdbcUrl</td><td><code>true</code></td><td>``</td><td>The JDBC url of the database this connector connects to.</td></tr>
+<tr><td>tableName</td><td><code>true</code></td><td>``</td><td>The name of the table this connector writes messages to.</td></tr>
+<tr><td>nonKey</td><td><code>false</code></td><td>``</td><td>Fields used in update events. A comma-separated list.</td></tr>
+<tr><td>key</td><td><code>false</code></td><td>``</td><td>Fields used in where condition of update and delete Events. A comma-separated list.</td></tr>
+<tr><td>timeoutMs</td><td><code>false</code></td><td><code>500</code></td><td>The jdbc operation timeout in milliseconds.</td></tr>
+<tr><td>batchSize</td><td><code>false</code></td><td><code>200</code></td><td>The batch size of updates made to the database.</td></tr>
+</tbody>
+</table>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#sink">Sink</a><ul class="toc-headings"><li><a href="#sink-configuration-options">Sink Configuration Options</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apach [...]
+      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="/fr/contact">Contact</a></li>' +
+            '<li><a href="/fr/contributing">Contributing</a></li>' +
+            '<li><a href="/fr/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="/fr/resources">Resources</a></li>' +
+            '<li><a href="/fr/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:fr","version:next"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/fr/next/io-jdbc/index.html b/content/docs/fr/next/io-jdbc/index.html
new file mode 100644
index 0000000..a47884f
--- /dev/null
+++ b/content/docs/fr/next/io-jdbc/index.html
@@ -0,0 +1,105 @@
+<!DOCTYPE html><html lang="fr"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>JDBC Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;sink&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#sink&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link&quot;&gt;&lt;svg cl [...]
+"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="fr"/><meta property="og:title" content="JDBC Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;sink&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#sink&quot; aria-hidden=&quot;true&quot; class=&quo [...]
+"/><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),
+              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 mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/fr" target="_blank" rel="noreferrer noopener">Transla [...]
+<p>The JDBC Sink Connector is used to pull messages from Pulsar topics and persist the messages to an MySQL or Sqlite. Current support INSERT, DELETE and UPDATE.</p>
+<h3><a class="anchor" aria-hidden="true" id="sink-configuration-options"></a><a href="#sink-configuration-options" 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 12H [...]
+<table>
+<thead>
+<tr><th>Name</th><th>Required</th><th>Default</th><th>Description</th></tr>
+</thead>
+<tbody>
+<tr><td>userName</td><td><code>false</code></td><td>``</td><td>Username used to connect to the database specified by <code>jdbcUrl</code>.</td></tr>
+<tr><td>password</td><td><code>false</code></td><td>``</td><td>Password used to connect to the database specified by <code>jdbcUrl</code>.</td></tr>
+<tr><td>jdbcUrl</td><td><code>true</code></td><td>``</td><td>The JDBC url of the database this connector connects to.</td></tr>
+<tr><td>tableName</td><td><code>true</code></td><td>``</td><td>The name of the table this connector writes messages to.</td></tr>
+<tr><td>nonKey</td><td><code>false</code></td><td>``</td><td>Fields used in update events. A comma-separated list.</td></tr>
+<tr><td>key</td><td><code>false</code></td><td>``</td><td>Fields used in where condition of update and delete Events. A comma-separated list.</td></tr>
+<tr><td>timeoutMs</td><td><code>false</code></td><td><code>500</code></td><td>The jdbc operation timeout in milliseconds.</td></tr>
+<tr><td>batchSize</td><td><code>false</code></td><td><code>200</code></td><td>The batch size of updates made to the database.</td></tr>
+</tbody>
+</table>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#sink">Sink</a><ul class="toc-headings"><li><a href="#sink-configuration-options">Sink Configuration Options</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apach [...]
+      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="/fr/contact">Contact</a></li>' +
+            '<li><a href="/fr/contributing">Contributing</a></li>' +
+            '<li><a href="/fr/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="/fr/resources">Resources</a></li>' +
+            '<li><a href="/fr/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:fr","version:next"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/ja/next/io-connectors.html b/content/docs/ja/next/io-connectors.html
index efdac18..473cf05 100644
--- a/content/docs/ja/next/io-connectors.html
+++ b/content/docs/ja/next/io-connectors.html
@@ -96,6 +96,7 @@
 <li><a href="/docs/ja/next/io-redis#sink">Redis Sink Connector</a></li>
 <li><a href="/docs/ja/next/io-solr#sink">Solr Sink Connector</a></li>
 <li><a href="/docs/ja/next/io-influxdb#sink">InfluxDB Sink Connector</a></li>
+<li><a href="/docs/ja/next/io-jdbc">JDBC Sink Connector</a></li>
 </ul>
 </span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ja/next/io-managing"><span class="arrow-prev">← </span><span>Managing Connectors</span></a><a class="docs-next button" href="/docs/ja/next/io-develop"><span>Developing Connectors</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All R [...]
       const community = document.querySelector("a[href='#community']").parentNode;
diff --git a/content/docs/ja/next/io-connectors/index.html b/content/docs/ja/next/io-connectors/index.html
index efdac18..473cf05 100644
--- a/content/docs/ja/next/io-connectors/index.html
+++ b/content/docs/ja/next/io-connectors/index.html
@@ -96,6 +96,7 @@
 <li><a href="/docs/ja/next/io-redis#sink">Redis Sink Connector</a></li>
 <li><a href="/docs/ja/next/io-solr#sink">Solr Sink Connector</a></li>
 <li><a href="/docs/ja/next/io-influxdb#sink">InfluxDB Sink Connector</a></li>
+<li><a href="/docs/ja/next/io-jdbc">JDBC Sink Connector</a></li>
 </ul>
 </span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ja/next/io-managing"><span class="arrow-prev">← </span><span>Managing Connectors</span></a><a class="docs-next button" href="/docs/ja/next/io-develop"><span>Developing Connectors</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All R [...]
       const community = document.querySelector("a[href='#community']").parentNode;
diff --git a/content/docs/ja/next/io-jdbc.html b/content/docs/ja/next/io-jdbc.html
new file mode 100644
index 0000000..5e79359
--- /dev/null
+++ b/content/docs/ja/next/io-jdbc.html
@@ -0,0 +1,105 @@
+<!DOCTYPE html><html lang="ja"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>JDBC Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;sink&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#sink&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link&quot;&gt;&lt;svg cl [...]
+"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="ja"/><meta property="og:title" content="JDBC Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;sink&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#sink&quot; aria-hidden=&quot;true&quot; class=&quo [...]
+"/><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),
+              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 mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ja" target="_blank" rel="noreferrer noopener">Transla [...]
+<p>The JDBC Sink Connector is used to pull messages from Pulsar topics and persist the messages to an MySQL or Sqlite. Current support INSERT, DELETE and UPDATE.</p>
+<h3><a class="anchor" aria-hidden="true" id="sink-configuration-options"></a><a href="#sink-configuration-options" 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 12H [...]
+<table>
+<thead>
+<tr><th>Name</th><th>Required</th><th>Default</th><th>Description</th></tr>
+</thead>
+<tbody>
+<tr><td>userName</td><td><code>false</code></td><td>``</td><td>Username used to connect to the database specified by <code>jdbcUrl</code>.</td></tr>
+<tr><td>password</td><td><code>false</code></td><td>``</td><td>Password used to connect to the database specified by <code>jdbcUrl</code>.</td></tr>
+<tr><td>jdbcUrl</td><td><code>true</code></td><td>``</td><td>The JDBC url of the database this connector connects to.</td></tr>
+<tr><td>tableName</td><td><code>true</code></td><td>``</td><td>The name of the table this connector writes messages to.</td></tr>
+<tr><td>nonKey</td><td><code>false</code></td><td>``</td><td>Fields used in update events. A comma-separated list.</td></tr>
+<tr><td>key</td><td><code>false</code></td><td>``</td><td>Fields used in where condition of update and delete Events. A comma-separated list.</td></tr>
+<tr><td>timeoutMs</td><td><code>false</code></td><td><code>500</code></td><td>The jdbc operation timeout in milliseconds.</td></tr>
+<tr><td>batchSize</td><td><code>false</code></td><td><code>200</code></td><td>The batch size of updates made to the database.</td></tr>
+</tbody>
+</table>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#sink">Sink</a><ul class="toc-headings"><li><a href="#sink-configuration-options">Sink Configuration Options</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apach [...]
+      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="/ja/contact">Contact</a></li>' +
+            '<li><a href="/ja/contributing">Contributing</a></li>' +
+            '<li><a href="/ja/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="/ja/resources">Resources</a></li>' +
+            '<li><a href="/ja/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:ja","version:next"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/ja/next/io-jdbc/index.html b/content/docs/ja/next/io-jdbc/index.html
new file mode 100644
index 0000000..5e79359
--- /dev/null
+++ b/content/docs/ja/next/io-jdbc/index.html
@@ -0,0 +1,105 @@
+<!DOCTYPE html><html lang="ja"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>JDBC Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;sink&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#sink&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link&quot;&gt;&lt;svg cl [...]
+"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="ja"/><meta property="og:title" content="JDBC Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;sink&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#sink&quot; aria-hidden=&quot;true&quot; class=&quo [...]
+"/><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),
+              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 mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ja" target="_blank" rel="noreferrer noopener">Transla [...]
+<p>The JDBC Sink Connector is used to pull messages from Pulsar topics and persist the messages to an MySQL or Sqlite. Current support INSERT, DELETE and UPDATE.</p>
+<h3><a class="anchor" aria-hidden="true" id="sink-configuration-options"></a><a href="#sink-configuration-options" 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 12H [...]
+<table>
+<thead>
+<tr><th>Name</th><th>Required</th><th>Default</th><th>Description</th></tr>
+</thead>
+<tbody>
+<tr><td>userName</td><td><code>false</code></td><td>``</td><td>Username used to connect to the database specified by <code>jdbcUrl</code>.</td></tr>
+<tr><td>password</td><td><code>false</code></td><td>``</td><td>Password used to connect to the database specified by <code>jdbcUrl</code>.</td></tr>
+<tr><td>jdbcUrl</td><td><code>true</code></td><td>``</td><td>The JDBC url of the database this connector connects to.</td></tr>
+<tr><td>tableName</td><td><code>true</code></td><td>``</td><td>The name of the table this connector writes messages to.</td></tr>
+<tr><td>nonKey</td><td><code>false</code></td><td>``</td><td>Fields used in update events. A comma-separated list.</td></tr>
+<tr><td>key</td><td><code>false</code></td><td>``</td><td>Fields used in where condition of update and delete Events. A comma-separated list.</td></tr>
+<tr><td>timeoutMs</td><td><code>false</code></td><td><code>500</code></td><td>The jdbc operation timeout in milliseconds.</td></tr>
+<tr><td>batchSize</td><td><code>false</code></td><td><code>200</code></td><td>The batch size of updates made to the database.</td></tr>
+</tbody>
+</table>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#sink">Sink</a><ul class="toc-headings"><li><a href="#sink-configuration-options">Sink Configuration Options</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apach [...]
+      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="/ja/contact">Contact</a></li>' +
+            '<li><a href="/ja/contributing">Contributing</a></li>' +
+            '<li><a href="/ja/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="/ja/resources">Resources</a></li>' +
+            '<li><a href="/ja/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:ja","version:next"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/next/io-jdbc.html b/content/docs/next/io-jdbc.html
new file mode 100644
index 0000000..9b9d896
--- /dev/null
+++ b/content/docs/next/io-jdbc.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content=""/><meta property="og:title" content="Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" content [...]
+              (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><script>
+                <!--
+                window.location.href = "/docs/en/next/io-jdbc";
+                // -->
+                </script></body></html>
\ No newline at end of file
diff --git a/content/docs/next/io-jdbc/index.html b/content/docs/next/io-jdbc/index.html
new file mode 100644
index 0000000..9b9d896
--- /dev/null
+++ b/content/docs/next/io-jdbc/index.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content=""/><meta property="og:title" content="Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" content [...]
+              (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><script>
+                <!--
+                window.location.href = "/docs/en/next/io-jdbc";
+                // -->
+                </script></body></html>
\ No newline at end of file
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 ea7514a..74a5684 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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system absolutely &lt;em&gt;must&lt;/em& [...]
-"/><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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through yo [...]
+<!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,24 +76,24 @@
                 };
               }
             });
-        </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>Message queues are essential components of many large-scale data architectures. If every single work object that passes t [...]
-<p>Pulsar is a great choice for a message queue because:</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>it was built with <a href="/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview#persistent-storage">persistent message storage</a> in mind</li>
-<li>it offers automatic load balancing across <a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#consumer">consumers</a> for messages on a topic (or custom load balancing if you wish)</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>You can use the same Pulsar installation to act as a real-time message bus and as a message queue if you wish (or just one or the other). You can set aside some topics for real-time purposes and other topics for message queue purposes (or use specific namespaces for either purpose if you wish).</p>
+<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
-<h1><a class="anchor" aria-hidden="true" id="client-configuration-changes"></a><a href="#client-configuration-changes" 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 [...]
-<p>To use a Pulsar <a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#topic">topic</a> as a message queue, you should distribute the receiver load on that topic across several consumers (the optimal number of consumers will depend on the load). Each consumer must:</p>
+<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>
 <ul>
-<li><p>Establish a <a href="/docs/zh-CN/2.1.0-incubating/concepts-messaging#shared">shared subscription</a> and use the same subscription name as the other consumers (otherwise the subscription is not shared and the consumers can't act as a processing ensemble)</p></li>
-<li><p>If you'd like to have tight control over message dispatching across consumers, set the consumers' <strong>receiver queue</strong> size very low (potentially even to 0 if necessary). Each Pulsar <a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#consumer">consumer</a> has a receiver queue that determines how many messages the consumer will attempt to fetch at a time. A receiver queue of 1000 (the default), for example, means that the consumer will attempt to process 1000 m [...]
-<p>The downside to restricting the receiver queue size of consumers is that that limits the potential throughput of those consumers and cannot be used with <a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#partitioned-topic">partitioned topics</a>. Whether the performance/control trade-off is worthwhile will depend on your use case.</p></li>
+<li><p>建立 <a href="/docs/zh-CN/2.1.0-incubating/concepts-messaging#shared">共享订阅</a>,并使用与其他消费者相同的订阅名称(否则订阅将不共享,消费者集群无法充当处理集合)</p></li>
+<li><p>如果你希望严格控制消费者之间的消息调度,请将消费者的<strong>接收器队列</strong>值的大小设置得非常低(如果需要,甚至可能设置为 0 )。 每个 Pulsar <a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#consumer">消费者</a> 都有一个接收器队列,用于确定消费者一次尝试获取的消息数量。 例如,接收器队列 1000 (默认值)意味着消费者将尝试在连接时处理来自主题的 1000 条待办消息。 将接收器队列值设置为零实质上意味着确保每个消费者一次只做一件事。</p>
+<p>限制消费者的接收器队列大小的缺点是限制了这些消费者的潜在吞吐量,并且不能与<a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#partitioned-topic">分区主题</a>一起使用。 性能/控制权衡是否值得取决于你的用例。</p></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="java-clients"></a><a href="#java-clients" 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>Here's an example Java consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Java 消费者配置示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.SubscriptionType;
@@ -110,12 +110,12 @@ Consumer consumer = client.newConsumer()
         .topic(TOPIC)
         .subscriptionName(subscription)
         .subscriptionType(SubscriptionType.Shared)
-        <span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+        <span class="hljs-comment">// 如果要限制接收器队列大小</span>
         .receiverQueueSize(<span class="hljs-number">10</span>)
         .subscribe();
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="python-clients"></a><a href="#python-clients" 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- [...]
-<p>Here's an example Python consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Python 消费者配置示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> pulsar <span class="hljs-keyword">import</span> Client, ConsumerType
 
 SERVICE_URL = <span class="hljs-string">"pulsar://localhost:6650"</span>
@@ -126,12 +126,12 @@ client = Client(SERVICE_URL)
 consumer = client.subscribe(
     TOPIC,
     SUBSCRIPTION,
-    <span class="hljs-comment"># If you'd like to restrict the receiver queue size</span>
+    <span class="hljs-comment"># 如果要限制接收器队列大小</span>
     receiver_queue_size=<span class="hljs-number">10</span>,
     consumer_type=ConsumerType.Shared)
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="c-clients"></a><a href="#c-clients" 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.6 [...]
-<p>Here's an example C++ consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 C++ 消费者配置示例:</p>
 <pre><code class="hljs css language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 <span class="hljs-built_in">std</span>::<span class="hljs-built_in">string</span> serviceUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
@@ -142,7 +142,7 @@ consumer = client.subscribe(
 
 ConsumerConfiguration consumerConfig;
 consumerConfig.setConsumerType(ConsumerType.ConsumerShared);
-<span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+<span class="hljs-comment">// 如果要限制接收器队列大小</span>
 consumerConfig.setReceiverQueueSize(<span class="hljs-number">10</span>);
 
 Consumer consumer;
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 ea7514a..74a5684 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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system absolutely &lt;em&gt;must&lt;/em& [...]
-"/><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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through yo [...]
+<!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,24 +76,24 @@
                 };
               }
             });
-        </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>Message queues are essential components of many large-scale data architectures. If every single work object that passes t [...]
-<p>Pulsar is a great choice for a message queue because:</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>it was built with <a href="/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview#persistent-storage">persistent message storage</a> in mind</li>
-<li>it offers automatic load balancing across <a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#consumer">consumers</a> for messages on a topic (or custom load balancing if you wish)</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>You can use the same Pulsar installation to act as a real-time message bus and as a message queue if you wish (or just one or the other). You can set aside some topics for real-time purposes and other topics for message queue purposes (or use specific namespaces for either purpose if you wish).</p>
+<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
-<h1><a class="anchor" aria-hidden="true" id="client-configuration-changes"></a><a href="#client-configuration-changes" 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 [...]
-<p>To use a Pulsar <a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#topic">topic</a> as a message queue, you should distribute the receiver load on that topic across several consumers (the optimal number of consumers will depend on the load). Each consumer must:</p>
+<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>
 <ul>
-<li><p>Establish a <a href="/docs/zh-CN/2.1.0-incubating/concepts-messaging#shared">shared subscription</a> and use the same subscription name as the other consumers (otherwise the subscription is not shared and the consumers can't act as a processing ensemble)</p></li>
-<li><p>If you'd like to have tight control over message dispatching across consumers, set the consumers' <strong>receiver queue</strong> size very low (potentially even to 0 if necessary). Each Pulsar <a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#consumer">consumer</a> has a receiver queue that determines how many messages the consumer will attempt to fetch at a time. A receiver queue of 1000 (the default), for example, means that the consumer will attempt to process 1000 m [...]
-<p>The downside to restricting the receiver queue size of consumers is that that limits the potential throughput of those consumers and cannot be used with <a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#partitioned-topic">partitioned topics</a>. Whether the performance/control trade-off is worthwhile will depend on your use case.</p></li>
+<li><p>建立 <a href="/docs/zh-CN/2.1.0-incubating/concepts-messaging#shared">共享订阅</a>,并使用与其他消费者相同的订阅名称(否则订阅将不共享,消费者集群无法充当处理集合)</p></li>
+<li><p>如果你希望严格控制消费者之间的消息调度,请将消费者的<strong>接收器队列</strong>值的大小设置得非常低(如果需要,甚至可能设置为 0 )。 每个 Pulsar <a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#consumer">消费者</a> 都有一个接收器队列,用于确定消费者一次尝试获取的消息数量。 例如,接收器队列 1000 (默认值)意味着消费者将尝试在连接时处理来自主题的 1000 条待办消息。 将接收器队列值设置为零实质上意味着确保每个消费者一次只做一件事。</p>
+<p>限制消费者的接收器队列大小的缺点是限制了这些消费者的潜在吞吐量,并且不能与<a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#partitioned-topic">分区主题</a>一起使用。 性能/控制权衡是否值得取决于你的用例。</p></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="java-clients"></a><a href="#java-clients" 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>Here's an example Java consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Java 消费者配置示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.SubscriptionType;
@@ -110,12 +110,12 @@ Consumer consumer = client.newConsumer()
         .topic(TOPIC)
         .subscriptionName(subscription)
         .subscriptionType(SubscriptionType.Shared)
-        <span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+        <span class="hljs-comment">// 如果要限制接收器队列大小</span>
         .receiverQueueSize(<span class="hljs-number">10</span>)
         .subscribe();
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="python-clients"></a><a href="#python-clients" 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- [...]
-<p>Here's an example Python consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Python 消费者配置示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> pulsar <span class="hljs-keyword">import</span> Client, ConsumerType
 
 SERVICE_URL = <span class="hljs-string">"pulsar://localhost:6650"</span>
@@ -126,12 +126,12 @@ client = Client(SERVICE_URL)
 consumer = client.subscribe(
     TOPIC,
     SUBSCRIPTION,
-    <span class="hljs-comment"># If you'd like to restrict the receiver queue size</span>
+    <span class="hljs-comment"># 如果要限制接收器队列大小</span>
     receiver_queue_size=<span class="hljs-number">10</span>,
     consumer_type=ConsumerType.Shared)
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="c-clients"></a><a href="#c-clients" 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.6 [...]
-<p>Here's an example C++ consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 C++ 消费者配置示例:</p>
 <pre><code class="hljs css language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 <span class="hljs-built_in">std</span>::<span class="hljs-built_in">string</span> serviceUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
@@ -142,7 +142,7 @@ consumer = client.subscribe(
 
 ConsumerConfiguration consumerConfig;
 consumerConfig.setConsumerType(ConsumerType.ConsumerShared);
-<span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+<span class="hljs-comment">// 如果要限制接收器队列大小</span>
 consumerConfig.setReceiverQueueSize(<span class="hljs-number">10</span>);
 
 Consumer consumer;
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 c5ecc40..586bc4f 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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system absolutely &lt;em&gt;must&lt;/em& [...]
-"/><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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through yo [...]
+<!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,24 +76,24 @@
                 };
               }
             });
-        </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>Message queues are essential components of many large-scale data architectures. If every single work object that passes t [...]
-<p>Pulsar is a great choice for a message queue because:</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>it was built with <a href="/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview#persistent-storage">persistent message storage</a> in mind</li>
-<li>it offers automatic load balancing across <a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#consumer">consumers</a> for messages on a topic (or custom load balancing if you wish)</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>You can use the same Pulsar installation to act as a real-time message bus and as a message queue if you wish (or just one or the other). You can set aside some topics for real-time purposes and other topics for message queue purposes (or use specific namespaces for either purpose if you wish).</p>
+<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
-<h1><a class="anchor" aria-hidden="true" id="client-configuration-changes"></a><a href="#client-configuration-changes" 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 [...]
-<p>To use a Pulsar <a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#topic">topic</a> as a message queue, you should distribute the receiver load on that topic across several consumers (the optimal number of consumers will depend on the load). Each consumer must:</p>
+<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>
 <ul>
-<li><p>Establish a <a href="/docs/zh-CN/2.1.1-incubating/concepts-messaging#shared">shared subscription</a> and use the same subscription name as the other consumers (otherwise the subscription is not shared and the consumers can't act as a processing ensemble)</p></li>
-<li><p>If you'd like to have tight control over message dispatching across consumers, set the consumers' <strong>receiver queue</strong> size very low (potentially even to 0 if necessary). Each Pulsar <a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#consumer">consumer</a> has a receiver queue that determines how many messages the consumer will attempt to fetch at a time. A receiver queue of 1000 (the default), for example, means that the consumer will attempt to process 1000 m [...]
-<p>The downside to restricting the receiver queue size of consumers is that that limits the potential throughput of those consumers and cannot be used with <a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#partitioned-topic">partitioned topics</a>. Whether the performance/control trade-off is worthwhile will depend on your use case.</p></li>
+<li><p>建立 <a href="/docs/zh-CN/2.1.1-incubating/concepts-messaging#shared">共享订阅</a>,并使用与其他消费者相同的订阅名称(否则订阅将不共享,消费者集群无法充当处理集合)</p></li>
+<li><p>如果你希望严格控制消费者之间的消息调度,请将消费者的<strong>接收器队列</strong>值的大小设置得非常低(如果需要,甚至可能设置为 0 )。 每个 Pulsar <a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#consumer">消费者</a> 都有一个接收器队列,用于确定消费者一次尝试获取的消息数量。 例如,接收器队列 1000 (默认值)意味着消费者将尝试在连接时处理来自主题的 1000 条待办消息。 将接收器队列值设置为零实质上意味着确保每个消费者一次只做一件事。</p>
+<p>限制消费者的接收器队列大小的缺点是限制了这些消费者的潜在吞吐量,并且不能与<a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#partitioned-topic">分区主题</a>一起使用。 性能/控制权衡是否值得取决于你的用例。</p></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="java-clients"></a><a href="#java-clients" 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>Here's an example Java consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Java 消费者配置示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.SubscriptionType;
@@ -110,12 +110,12 @@ Consumer consumer = client.newConsumer()
         .topic(TOPIC)
         .subscriptionName(subscription)
         .subscriptionType(SubscriptionType.Shared)
-        <span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+        <span class="hljs-comment">// 如果要限制接收器队列大小</span>
         .receiverQueueSize(<span class="hljs-number">10</span>)
         .subscribe();
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="python-clients"></a><a href="#python-clients" 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- [...]
-<p>Here's an example Python consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Python 消费者配置示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> pulsar <span class="hljs-keyword">import</span> Client, ConsumerType
 
 SERVICE_URL = <span class="hljs-string">"pulsar://localhost:6650"</span>
@@ -126,12 +126,12 @@ client = Client(SERVICE_URL)
 consumer = client.subscribe(
     TOPIC,
     SUBSCRIPTION,
-    <span class="hljs-comment"># If you'd like to restrict the receiver queue size</span>
+    <span class="hljs-comment"># 如果要限制接收器队列大小</span>
     receiver_queue_size=<span class="hljs-number">10</span>,
     consumer_type=ConsumerType.Shared)
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="c-clients"></a><a href="#c-clients" 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.6 [...]
-<p>Here's an example C++ consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 C++ 消费者配置示例:</p>
 <pre><code class="hljs css language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 <span class="hljs-built_in">std</span>::<span class="hljs-built_in">string</span> serviceUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
@@ -142,7 +142,7 @@ consumer = client.subscribe(
 
 ConsumerConfiguration consumerConfig;
 consumerConfig.setConsumerType(ConsumerType.ConsumerShared);
-<span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+<span class="hljs-comment">// 如果要限制接收器队列大小</span>
 consumerConfig.setReceiverQueueSize(<span class="hljs-number">10</span>);
 
 Consumer consumer;
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 c5ecc40..586bc4f 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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system absolutely &lt;em&gt;must&lt;/em& [...]
-"/><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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through yo [...]
+<!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,24 +76,24 @@
                 };
               }
             });
-        </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>Message queues are essential components of many large-scale data architectures. If every single work object that passes t [...]
-<p>Pulsar is a great choice for a message queue because:</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>it was built with <a href="/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview#persistent-storage">persistent message storage</a> in mind</li>
-<li>it offers automatic load balancing across <a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#consumer">consumers</a> for messages on a topic (or custom load balancing if you wish)</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>You can use the same Pulsar installation to act as a real-time message bus and as a message queue if you wish (or just one or the other). You can set aside some topics for real-time purposes and other topics for message queue purposes (or use specific namespaces for either purpose if you wish).</p>
+<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
-<h1><a class="anchor" aria-hidden="true" id="client-configuration-changes"></a><a href="#client-configuration-changes" 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 [...]
-<p>To use a Pulsar <a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#topic">topic</a> as a message queue, you should distribute the receiver load on that topic across several consumers (the optimal number of consumers will depend on the load). Each consumer must:</p>
+<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>
 <ul>
-<li><p>Establish a <a href="/docs/zh-CN/2.1.1-incubating/concepts-messaging#shared">shared subscription</a> and use the same subscription name as the other consumers (otherwise the subscription is not shared and the consumers can't act as a processing ensemble)</p></li>
-<li><p>If you'd like to have tight control over message dispatching across consumers, set the consumers' <strong>receiver queue</strong> size very low (potentially even to 0 if necessary). Each Pulsar <a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#consumer">consumer</a> has a receiver queue that determines how many messages the consumer will attempt to fetch at a time. A receiver queue of 1000 (the default), for example, means that the consumer will attempt to process 1000 m [...]
-<p>The downside to restricting the receiver queue size of consumers is that that limits the potential throughput of those consumers and cannot be used with <a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#partitioned-topic">partitioned topics</a>. Whether the performance/control trade-off is worthwhile will depend on your use case.</p></li>
+<li><p>建立 <a href="/docs/zh-CN/2.1.1-incubating/concepts-messaging#shared">共享订阅</a>,并使用与其他消费者相同的订阅名称(否则订阅将不共享,消费者集群无法充当处理集合)</p></li>
+<li><p>如果你希望严格控制消费者之间的消息调度,请将消费者的<strong>接收器队列</strong>值的大小设置得非常低(如果需要,甚至可能设置为 0 )。 每个 Pulsar <a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#consumer">消费者</a> 都有一个接收器队列,用于确定消费者一次尝试获取的消息数量。 例如,接收器队列 1000 (默认值)意味着消费者将尝试在连接时处理来自主题的 1000 条待办消息。 将接收器队列值设置为零实质上意味着确保每个消费者一次只做一件事。</p>
+<p>限制消费者的接收器队列大小的缺点是限制了这些消费者的潜在吞吐量,并且不能与<a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#partitioned-topic">分区主题</a>一起使用。 性能/控制权衡是否值得取决于你的用例。</p></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="java-clients"></a><a href="#java-clients" 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>Here's an example Java consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Java 消费者配置示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.SubscriptionType;
@@ -110,12 +110,12 @@ Consumer consumer = client.newConsumer()
         .topic(TOPIC)
         .subscriptionName(subscription)
         .subscriptionType(SubscriptionType.Shared)
-        <span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+        <span class="hljs-comment">// 如果要限制接收器队列大小</span>
         .receiverQueueSize(<span class="hljs-number">10</span>)
         .subscribe();
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="python-clients"></a><a href="#python-clients" 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- [...]
-<p>Here's an example Python consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Python 消费者配置示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> pulsar <span class="hljs-keyword">import</span> Client, ConsumerType
 
 SERVICE_URL = <span class="hljs-string">"pulsar://localhost:6650"</span>
@@ -126,12 +126,12 @@ client = Client(SERVICE_URL)
 consumer = client.subscribe(
     TOPIC,
     SUBSCRIPTION,
-    <span class="hljs-comment"># If you'd like to restrict the receiver queue size</span>
+    <span class="hljs-comment"># 如果要限制接收器队列大小</span>
     receiver_queue_size=<span class="hljs-number">10</span>,
     consumer_type=ConsumerType.Shared)
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="c-clients"></a><a href="#c-clients" 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.6 [...]
-<p>Here's an example C++ consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 C++ 消费者配置示例:</p>
 <pre><code class="hljs css language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 <span class="hljs-built_in">std</span>::<span class="hljs-built_in">string</span> serviceUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
@@ -142,7 +142,7 @@ consumer = client.subscribe(
 
 ConsumerConfiguration consumerConfig;
 consumerConfig.setConsumerType(ConsumerType.ConsumerShared);
-<span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+<span class="hljs-comment">// 如果要限制接收器队列大小</span>
 consumerConfig.setReceiverQueueSize(<span class="hljs-number">10</span>);
 
 Consumer consumer;
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 566b36a..aef3e9d 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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system absolutely &lt;em&gt;must&lt;/em& [...]
-"/><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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system a [...]
+<!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,24 +76,24 @@
                 };
               }
             });
-        </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>Message queues are essential components of many large-scale data architectures. If every single work object that passes t [...]
-<p>Pulsar is a great choice for a message queue because:</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>it was built with <a href="/docs/zh-CN/2.2.0/concepts-architecture-overview#persistent-storage">persistent message storage</a> in mind</li>
-<li>it offers automatic load balancing across <a href="/docs/zh-CN/2.2.0/reference-terminology#consumer">consumers</a> for messages on a topic (or custom load balancing if you wish)</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>You can use the same Pulsar installation to act as a real-time message bus and as a message queue if you wish (or just one or the other). You can set aside some topics for real-time purposes and other topics for message queue purposes (or use specific namespaces for either purpose if you wish).</p>
+<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
-<h1><a class="anchor" aria-hidden="true" id="client-configuration-changes"></a><a href="#client-configuration-changes" 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 [...]
-<p>To use a Pulsar <a href="/docs/zh-CN/2.2.0/reference-terminology#topic">topic</a> as a message queue, you should distribute the receiver load on that topic across several consumers (the optimal number of consumers will depend on the load). Each consumer must:</p>
+<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>
 <ul>
-<li><p>Establish a <a href="/docs/zh-CN/2.2.0/concepts-messaging#shared">shared subscription</a> and use the same subscription name as the other consumers (otherwise the subscription is not shared and the consumers can't act as a processing ensemble)</p></li>
-<li><p>If you'd like to have tight control over message dispatching across consumers, set the consumers' <strong>receiver queue</strong> size very low (potentially even to 0 if necessary). Each Pulsar <a href="/docs/zh-CN/2.2.0/reference-terminology#consumer">consumer</a> has a receiver queue that determines how many messages the consumer will attempt to fetch at a time. A receiver queue of 1000 (the default), for example, means that the consumer will attempt to process 1000 messages fro [...]
-<p>The downside to restricting the receiver queue size of consumers is that that limits the potential throughput of those consumers and cannot be used with <a href="/docs/zh-CN/2.2.0/reference-terminology#partitioned-topic">partitioned topics</a>. Whether the performance/control trade-off is worthwhile will depend on your use case.</p></li>
+<li><p>建立 <a href="/docs/zh-CN/2.2.0/concepts-messaging#shared">共享订阅</a>,并使用与其他消费者相同的订阅名称(否则订阅将不共享,消费者集群无法充当处理集合)</p></li>
+<li><p>如果你希望严格控制消费者之间的消息调度,请将消费者的<strong>接收器队列</strong>值的大小设置得非常低(如果需要,甚至可能设置为 0 )。 每个 Pulsar <a href="/docs/zh-CN/2.2.0/reference-terminology#consumer">消费者</a> 都有一个接收器队列,用于确定消费者一次尝试获取的消息数量。 例如,接收器队列 1000 (默认值)意味着消费者将尝试在连接时处理来自主题的 1000 条待办消息。 将接收器队列值设置为零实质上意味着确保每个消费者一次只做一件事。</p>
+<p>限制消费者的接收器队列大小的缺点是限制了这些消费者的潜在吞吐量,并且不能与<a href="/docs/zh-CN/2.2.0/reference-terminology#partitioned-topic">分区主题</a>一起使用。 性能/控制权衡是否值得取决于你的用例。</p></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="java-clients"></a><a href="#java-clients" 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>Here's an example Java consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Java 消费者配置示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.SubscriptionType;
@@ -110,12 +110,12 @@ Consumer consumer = client.newConsumer()
         .topic(TOPIC)
         .subscriptionName(subscription)
         .subscriptionType(SubscriptionType.Shared)
-        <span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+        <span class="hljs-comment">// 如果要限制接收器队列大小</span>
         .receiverQueueSize(<span class="hljs-number">10</span>)
         .subscribe();
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="python-clients"></a><a href="#python-clients" 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- [...]
-<p>Here's an example Python consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Python 消费者配置示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> pulsar <span class="hljs-keyword">import</span> Client, ConsumerType
 
 SERVICE_URL = <span class="hljs-string">"pulsar://localhost:6650"</span>
@@ -126,12 +126,12 @@ client = Client(SERVICE_URL)
 consumer = client.subscribe(
     TOPIC,
     SUBSCRIPTION,
-    <span class="hljs-comment"># If you'd like to restrict the receiver queue size</span>
+    <span class="hljs-comment"># 如果要限制接收器队列大小</span>
     receiver_queue_size=<span class="hljs-number">10</span>,
     consumer_type=ConsumerType.Shared)
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="c-clients"></a><a href="#c-clients" 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.6 [...]
-<p>Here's an example C++ consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 C++ 消费者配置示例:</p>
 <pre><code class="hljs css language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 <span class="hljs-built_in">std</span>::<span class="hljs-built_in">string</span> serviceUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
@@ -142,7 +142,7 @@ consumer = client.subscribe(
 
 ConsumerConfiguration consumerConfig;
 consumerConfig.setConsumerType(ConsumerType.ConsumerShared);
-<span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+<span class="hljs-comment">// 如果要限制接收器队列大小</span>
 consumerConfig.setReceiverQueueSize(<span class="hljs-number">10</span>);
 
 Consumer consumer;
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 566b36a..aef3e9d 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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system absolutely &lt;em&gt;must&lt;/em& [...]
-"/><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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system a [...]
+<!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,24 +76,24 @@
                 };
               }
             });
-        </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>Message queues are essential components of many large-scale data architectures. If every single work object that passes t [...]
-<p>Pulsar is a great choice for a message queue because:</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>it was built with <a href="/docs/zh-CN/2.2.0/concepts-architecture-overview#persistent-storage">persistent message storage</a> in mind</li>
-<li>it offers automatic load balancing across <a href="/docs/zh-CN/2.2.0/reference-terminology#consumer">consumers</a> for messages on a topic (or custom load balancing if you wish)</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>You can use the same Pulsar installation to act as a real-time message bus and as a message queue if you wish (or just one or the other). You can set aside some topics for real-time purposes and other topics for message queue purposes (or use specific namespaces for either purpose if you wish).</p>
+<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
-<h1><a class="anchor" aria-hidden="true" id="client-configuration-changes"></a><a href="#client-configuration-changes" 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 [...]
-<p>To use a Pulsar <a href="/docs/zh-CN/2.2.0/reference-terminology#topic">topic</a> as a message queue, you should distribute the receiver load on that topic across several consumers (the optimal number of consumers will depend on the load). Each consumer must:</p>
+<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>
 <ul>
-<li><p>Establish a <a href="/docs/zh-CN/2.2.0/concepts-messaging#shared">shared subscription</a> and use the same subscription name as the other consumers (otherwise the subscription is not shared and the consumers can't act as a processing ensemble)</p></li>
-<li><p>If you'd like to have tight control over message dispatching across consumers, set the consumers' <strong>receiver queue</strong> size very low (potentially even to 0 if necessary). Each Pulsar <a href="/docs/zh-CN/2.2.0/reference-terminology#consumer">consumer</a> has a receiver queue that determines how many messages the consumer will attempt to fetch at a time. A receiver queue of 1000 (the default), for example, means that the consumer will attempt to process 1000 messages fro [...]
-<p>The downside to restricting the receiver queue size of consumers is that that limits the potential throughput of those consumers and cannot be used with <a href="/docs/zh-CN/2.2.0/reference-terminology#partitioned-topic">partitioned topics</a>. Whether the performance/control trade-off is worthwhile will depend on your use case.</p></li>
+<li><p>建立 <a href="/docs/zh-CN/2.2.0/concepts-messaging#shared">共享订阅</a>,并使用与其他消费者相同的订阅名称(否则订阅将不共享,消费者集群无法充当处理集合)</p></li>
+<li><p>如果你希望严格控制消费者之间的消息调度,请将消费者的<strong>接收器队列</strong>值的大小设置得非常低(如果需要,甚至可能设置为 0 )。 每个 Pulsar <a href="/docs/zh-CN/2.2.0/reference-terminology#consumer">消费者</a> 都有一个接收器队列,用于确定消费者一次尝试获取的消息数量。 例如,接收器队列 1000 (默认值)意味着消费者将尝试在连接时处理来自主题的 1000 条待办消息。 将接收器队列值设置为零实质上意味着确保每个消费者一次只做一件事。</p>
+<p>限制消费者的接收器队列大小的缺点是限制了这些消费者的潜在吞吐量,并且不能与<a href="/docs/zh-CN/2.2.0/reference-terminology#partitioned-topic">分区主题</a>一起使用。 性能/控制权衡是否值得取决于你的用例。</p></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="java-clients"></a><a href="#java-clients" 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>Here's an example Java consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Java 消费者配置示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.SubscriptionType;
@@ -110,12 +110,12 @@ Consumer consumer = client.newConsumer()
         .topic(TOPIC)
         .subscriptionName(subscription)
         .subscriptionType(SubscriptionType.Shared)
-        <span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+        <span class="hljs-comment">// 如果要限制接收器队列大小</span>
         .receiverQueueSize(<span class="hljs-number">10</span>)
         .subscribe();
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="python-clients"></a><a href="#python-clients" 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- [...]
-<p>Here's an example Python consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Python 消费者配置示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> pulsar <span class="hljs-keyword">import</span> Client, ConsumerType
 
 SERVICE_URL = <span class="hljs-string">"pulsar://localhost:6650"</span>
@@ -126,12 +126,12 @@ client = Client(SERVICE_URL)
 consumer = client.subscribe(
     TOPIC,
     SUBSCRIPTION,
-    <span class="hljs-comment"># If you'd like to restrict the receiver queue size</span>
+    <span class="hljs-comment"># 如果要限制接收器队列大小</span>
     receiver_queue_size=<span class="hljs-number">10</span>,
     consumer_type=ConsumerType.Shared)
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="c-clients"></a><a href="#c-clients" 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.6 [...]
-<p>Here's an example C++ consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 C++ 消费者配置示例:</p>
 <pre><code class="hljs css language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 <span class="hljs-built_in">std</span>::<span class="hljs-built_in">string</span> serviceUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
@@ -142,7 +142,7 @@ consumer = client.subscribe(
 
 ConsumerConfiguration consumerConfig;
 consumerConfig.setConsumerType(ConsumerType.ConsumerShared);
-<span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+<span class="hljs-comment">// 如果要限制接收器队列大小</span>
 consumerConfig.setReceiverQueueSize(<span class="hljs-number">10</span>);
 
 Consumer consumer;
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 4b51655..104b8dc 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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system absolutely &lt;em&gt;must&lt;/em& [...]
-"/><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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system a [...]
+<!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,24 +76,24 @@
                 };
               }
             });
-        </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>Message queues are essential components of many large-scale data architectures. If every single work object that passes t [...]
-<p>Pulsar is a great choice for a message queue because:</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>it was built with <a href="/docs/zh-CN/2.2.1/concepts-architecture-overview#persistent-storage">persistent message storage</a> in mind</li>
-<li>it offers automatic load balancing across <a href="/docs/zh-CN/2.2.1/reference-terminology#consumer">consumers</a> for messages on a topic (or custom load balancing if you wish)</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>You can use the same Pulsar installation to act as a real-time message bus and as a message queue if you wish (or just one or the other). You can set aside some topics for real-time purposes and other topics for message queue purposes (or use specific namespaces for either purpose if you wish).</p>
+<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
-<h1><a class="anchor" aria-hidden="true" id="client-configuration-changes"></a><a href="#client-configuration-changes" 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 [...]
-<p>To use a Pulsar <a href="/docs/zh-CN/2.2.1/reference-terminology#topic">topic</a> as a message queue, you should distribute the receiver load on that topic across several consumers (the optimal number of consumers will depend on the load). Each consumer must:</p>
+<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>
 <ul>
-<li><p>Establish a <a href="/docs/zh-CN/2.2.1/concepts-messaging#shared">shared subscription</a> and use the same subscription name as the other consumers (otherwise the subscription is not shared and the consumers can't act as a processing ensemble)</p></li>
-<li><p>If you'd like to have tight control over message dispatching across consumers, set the consumers' <strong>receiver queue</strong> size very low (potentially even to 0 if necessary). Each Pulsar <a href="/docs/zh-CN/2.2.1/reference-terminology#consumer">consumer</a> has a receiver queue that determines how many messages the consumer will attempt to fetch at a time. A receiver queue of 1000 (the default), for example, means that the consumer will attempt to process 1000 messages fro [...]
-<p>The downside to restricting the receiver queue size of consumers is that that limits the potential throughput of those consumers and cannot be used with <a href="/docs/zh-CN/2.2.1/reference-terminology#partitioned-topic">partitioned topics</a>. Whether the performance/control trade-off is worthwhile will depend on your use case.</p></li>
+<li><p>建立 <a href="/docs/zh-CN/2.2.1/concepts-messaging#shared">共享订阅</a>,并使用与其他消费者相同的订阅名称(否则订阅将不共享,消费者集群无法充当处理集合)</p></li>
+<li><p>如果你希望严格控制消费者之间的消息调度,请将消费者的<strong>接收器队列</strong>值的大小设置得非常低(如果需要,甚至可能设置为 0 )。 每个 Pulsar <a href="/docs/zh-CN/2.2.1/reference-terminology#consumer">消费者</a> 都有一个接收器队列,用于确定消费者一次尝试获取的消息数量。 例如,接收器队列 1000 (默认值)意味着消费者将尝试在连接时处理来自主题的 1000 条待办消息。 将接收器队列值设置为零实质上意味着确保每个消费者一次只做一件事。</p>
+<p>限制消费者的接收器队列大小的缺点是限制了这些消费者的潜在吞吐量,并且不能与<a href="/docs/zh-CN/2.2.1/reference-terminology#partitioned-topic">分区主题</a>一起使用。 性能/控制权衡是否值得取决于你的用例。</p></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="java-clients"></a><a href="#java-clients" 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>Here's an example Java consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Java 消费者配置示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.SubscriptionType;
@@ -110,12 +110,12 @@ Consumer consumer = client.newConsumer()
         .topic(TOPIC)
         .subscriptionName(subscription)
         .subscriptionType(SubscriptionType.Shared)
-        <span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+        <span class="hljs-comment">// 如果要限制接收器队列大小</span>
         .receiverQueueSize(<span class="hljs-number">10</span>)
         .subscribe();
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="python-clients"></a><a href="#python-clients" 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- [...]
-<p>Here's an example Python consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Python 消费者配置示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> pulsar <span class="hljs-keyword">import</span> Client, ConsumerType
 
 SERVICE_URL = <span class="hljs-string">"pulsar://localhost:6650"</span>
@@ -126,12 +126,12 @@ client = Client(SERVICE_URL)
 consumer = client.subscribe(
     TOPIC,
     SUBSCRIPTION,
-    <span class="hljs-comment"># If you'd like to restrict the receiver queue size</span>
+    <span class="hljs-comment"># 如果要限制接收器队列大小</span>
     receiver_queue_size=<span class="hljs-number">10</span>,
     consumer_type=ConsumerType.Shared)
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="c-clients"></a><a href="#c-clients" 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.6 [...]
-<p>Here's an example C++ consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 C++ 消费者配置示例:</p>
 <pre><code class="hljs css language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 <span class="hljs-built_in">std</span>::<span class="hljs-built_in">string</span> serviceUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
@@ -142,7 +142,7 @@ consumer = client.subscribe(
 
 ConsumerConfiguration consumerConfig;
 consumerConfig.setConsumerType(ConsumerType.ConsumerShared);
-<span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+<span class="hljs-comment">// 如果要限制接收器队列大小</span>
 consumerConfig.setReceiverQueueSize(<span class="hljs-number">10</span>);
 
 Consumer consumer;
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 4b51655..104b8dc 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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system absolutely &lt;em&gt;must&lt;/em& [...]
-"/><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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system a [...]
+<!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,24 +76,24 @@
                 };
               }
             });
-        </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>Message queues are essential components of many large-scale data architectures. If every single work object that passes t [...]
-<p>Pulsar is a great choice for a message queue because:</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>it was built with <a href="/docs/zh-CN/2.2.1/concepts-architecture-overview#persistent-storage">persistent message storage</a> in mind</li>
-<li>it offers automatic load balancing across <a href="/docs/zh-CN/2.2.1/reference-terminology#consumer">consumers</a> for messages on a topic (or custom load balancing if you wish)</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>You can use the same Pulsar installation to act as a real-time message bus and as a message queue if you wish (or just one or the other). You can set aside some topics for real-time purposes and other topics for message queue purposes (or use specific namespaces for either purpose if you wish).</p>
+<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
-<h1><a class="anchor" aria-hidden="true" id="client-configuration-changes"></a><a href="#client-configuration-changes" 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 [...]
-<p>To use a Pulsar <a href="/docs/zh-CN/2.2.1/reference-terminology#topic">topic</a> as a message queue, you should distribute the receiver load on that topic across several consumers (the optimal number of consumers will depend on the load). Each consumer must:</p>
+<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>
 <ul>
-<li><p>Establish a <a href="/docs/zh-CN/2.2.1/concepts-messaging#shared">shared subscription</a> and use the same subscription name as the other consumers (otherwise the subscription is not shared and the consumers can't act as a processing ensemble)</p></li>
-<li><p>If you'd like to have tight control over message dispatching across consumers, set the consumers' <strong>receiver queue</strong> size very low (potentially even to 0 if necessary). Each Pulsar <a href="/docs/zh-CN/2.2.1/reference-terminology#consumer">consumer</a> has a receiver queue that determines how many messages the consumer will attempt to fetch at a time. A receiver queue of 1000 (the default), for example, means that the consumer will attempt to process 1000 messages fro [...]
-<p>The downside to restricting the receiver queue size of consumers is that that limits the potential throughput of those consumers and cannot be used with <a href="/docs/zh-CN/2.2.1/reference-terminology#partitioned-topic">partitioned topics</a>. Whether the performance/control trade-off is worthwhile will depend on your use case.</p></li>
+<li><p>建立 <a href="/docs/zh-CN/2.2.1/concepts-messaging#shared">共享订阅</a>,并使用与其他消费者相同的订阅名称(否则订阅将不共享,消费者集群无法充当处理集合)</p></li>
+<li><p>如果你希望严格控制消费者之间的消息调度,请将消费者的<strong>接收器队列</strong>值的大小设置得非常低(如果需要,甚至可能设置为 0 )。 每个 Pulsar <a href="/docs/zh-CN/2.2.1/reference-terminology#consumer">消费者</a> 都有一个接收器队列,用于确定消费者一次尝试获取的消息数量。 例如,接收器队列 1000 (默认值)意味着消费者将尝试在连接时处理来自主题的 1000 条待办消息。 将接收器队列值设置为零实质上意味着确保每个消费者一次只做一件事。</p>
+<p>限制消费者的接收器队列大小的缺点是限制了这些消费者的潜在吞吐量,并且不能与<a href="/docs/zh-CN/2.2.1/reference-terminology#partitioned-topic">分区主题</a>一起使用。 性能/控制权衡是否值得取决于你的用例。</p></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="java-clients"></a><a href="#java-clients" 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>Here's an example Java consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Java 消费者配置示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.SubscriptionType;
@@ -110,12 +110,12 @@ Consumer consumer = client.newConsumer()
         .topic(TOPIC)
         .subscriptionName(subscription)
         .subscriptionType(SubscriptionType.Shared)
-        <span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+        <span class="hljs-comment">// 如果要限制接收器队列大小</span>
         .receiverQueueSize(<span class="hljs-number">10</span>)
         .subscribe();
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="python-clients"></a><a href="#python-clients" 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- [...]
-<p>Here's an example Python consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Python 消费者配置示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> pulsar <span class="hljs-keyword">import</span> Client, ConsumerType
 
 SERVICE_URL = <span class="hljs-string">"pulsar://localhost:6650"</span>
@@ -126,12 +126,12 @@ client = Client(SERVICE_URL)
 consumer = client.subscribe(
     TOPIC,
     SUBSCRIPTION,
-    <span class="hljs-comment"># If you'd like to restrict the receiver queue size</span>
+    <span class="hljs-comment"># 如果要限制接收器队列大小</span>
     receiver_queue_size=<span class="hljs-number">10</span>,
     consumer_type=ConsumerType.Shared)
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="c-clients"></a><a href="#c-clients" 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.6 [...]
-<p>Here's an example C++ consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 C++ 消费者配置示例:</p>
 <pre><code class="hljs css language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 <span class="hljs-built_in">std</span>::<span class="hljs-built_in">string</span> serviceUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
@@ -142,7 +142,7 @@ consumer = client.subscribe(
 
 ConsumerConfiguration consumerConfig;
 consumerConfig.setConsumerType(ConsumerType.ConsumerShared);
-<span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+<span class="hljs-comment">// 如果要限制接收器队列大小</span>
 consumerConfig.setReceiverQueueSize(<span class="hljs-number">10</span>);
 
 Consumer consumer;
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 35fb9b1..5b8f10d 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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system absolutely &lt;em&gt;must&lt;/em& [...]
-"/><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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system a [...]
+<!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,24 +76,24 @@
                 };
               }
             });
-        </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>Message queues are essential components of many large-scale data architectures. If every single work object that passes t [...]
-<p>Pulsar is a great choice for a message queue because:</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>it was built with <a href="/docs/zh-CN/2.3.0/concepts-architecture-overview#persistent-storage">persistent message storage</a> in mind</li>
-<li>it offers automatic load balancing across <a href="/docs/zh-CN/2.3.0/reference-terminology#consumer">consumers</a> for messages on a topic (or custom load balancing if you wish)</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>You can use the same Pulsar installation to act as a real-time message bus and as a message queue if you wish (or just one or the other). You can set aside some topics for real-time purposes and other topics for message queue purposes (or use specific namespaces for either purpose if you wish).</p>
+<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
-<h1><a class="anchor" aria-hidden="true" id="client-configuration-changes"></a><a href="#client-configuration-changes" 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 [...]
-<p>To use a Pulsar <a href="/docs/zh-CN/2.3.0/reference-terminology#topic">topic</a> as a message queue, you should distribute the receiver load on that topic across several consumers (the optimal number of consumers will depend on the load). Each consumer must:</p>
+<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>
 <ul>
-<li><p>Establish a <a href="/docs/zh-CN/2.3.0/concepts-messaging#shared">shared subscription</a> and use the same subscription name as the other consumers (otherwise the subscription is not shared and the consumers can't act as a processing ensemble)</p></li>
-<li><p>If you'd like to have tight control over message dispatching across consumers, set the consumers' <strong>receiver queue</strong> size very low (potentially even to 0 if necessary). Each Pulsar <a href="/docs/zh-CN/2.3.0/reference-terminology#consumer">consumer</a> has a receiver queue that determines how many messages the consumer will attempt to fetch at a time. A receiver queue of 1000 (the default), for example, means that the consumer will attempt to process 1000 messages fro [...]
-<p>The downside to restricting the receiver queue size of consumers is that that limits the potential throughput of those consumers and cannot be used with <a href="/docs/zh-CN/2.3.0/reference-terminology#partitioned-topic">partitioned topics</a>. Whether the performance/control trade-off is worthwhile will depend on your use case.</p></li>
+<li><p>建立 <a href="/docs/zh-CN/2.3.0/concepts-messaging#shared">共享订阅</a>,并使用与其他消费者相同的订阅名称(否则订阅将不共享,消费者集群无法充当处理集合)</p></li>
+<li><p>如果你希望严格控制消费者之间的消息调度,请将消费者的<strong>接收器队列</strong>值的大小设置得非常低(如果需要,甚至可能设置为 0 )。 每个 Pulsar <a href="/docs/zh-CN/2.3.0/reference-terminology#consumer">消费者</a> 都有一个接收器队列,用于确定消费者一次尝试获取的消息数量。 例如,接收器队列 1000 (默认值)意味着消费者将尝试在连接时处理来自主题的 1000 条待办消息。 将接收器队列值设置为零实质上意味着确保每个消费者一次只做一件事。</p>
+<p>限制消费者的接收器队列大小的缺点是限制了这些消费者的潜在吞吐量,并且不能与<a href="/docs/zh-CN/2.3.0/reference-terminology#partitioned-topic">分区主题</a>一起使用。 性能/控制权衡是否值得取决于你的用例。</p></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="java-clients"></a><a href="#java-clients" 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>Here's an example Java consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Java 消费者配置示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.SubscriptionType;
@@ -110,12 +110,12 @@ Consumer consumer = client.newConsumer()
         .topic(TOPIC)
         .subscriptionName(subscription)
         .subscriptionType(SubscriptionType.Shared)
-        <span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+        <span class="hljs-comment">// 如果要限制接收器队列大小</span>
         .receiverQueueSize(<span class="hljs-number">10</span>)
         .subscribe();
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="python-clients"></a><a href="#python-clients" 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- [...]
-<p>Here's an example Python consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Python 消费者配置示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> pulsar <span class="hljs-keyword">import</span> Client, ConsumerType
 
 SERVICE_URL = <span class="hljs-string">"pulsar://localhost:6650"</span>
@@ -126,12 +126,12 @@ client = Client(SERVICE_URL)
 consumer = client.subscribe(
     TOPIC,
     SUBSCRIPTION,
-    <span class="hljs-comment"># If you'd like to restrict the receiver queue size</span>
+    <span class="hljs-comment"># 如果要限制接收器队列大小</span>
     receiver_queue_size=<span class="hljs-number">10</span>,
     consumer_type=ConsumerType.Shared)
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="c-clients"></a><a href="#c-clients" 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.6 [...]
-<p>Here's an example C++ consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 C++ 消费者配置示例:</p>
 <pre><code class="hljs css language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 <span class="hljs-built_in">std</span>::<span class="hljs-built_in">string</span> serviceUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
@@ -142,7 +142,7 @@ consumer = client.subscribe(
 
 ConsumerConfiguration consumerConfig;
 consumerConfig.setConsumerType(ConsumerType.ConsumerShared);
-<span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+<span class="hljs-comment">// 如果要限制接收器队列大小</span>
 consumerConfig.setReceiverQueueSize(<span class="hljs-number">10</span>);
 
 Consumer consumer;
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 35fb9b1..5b8f10d 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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system absolutely &lt;em&gt;must&lt;/em& [...]
-"/><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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system a [...]
+<!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,24 +76,24 @@
                 };
               }
             });
-        </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>Message queues are essential components of many large-scale data architectures. If every single work object that passes t [...]
-<p>Pulsar is a great choice for a message queue because:</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>it was built with <a href="/docs/zh-CN/2.3.0/concepts-architecture-overview#persistent-storage">persistent message storage</a> in mind</li>
-<li>it offers automatic load balancing across <a href="/docs/zh-CN/2.3.0/reference-terminology#consumer">consumers</a> for messages on a topic (or custom load balancing if you wish)</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>You can use the same Pulsar installation to act as a real-time message bus and as a message queue if you wish (or just one or the other). You can set aside some topics for real-time purposes and other topics for message queue purposes (or use specific namespaces for either purpose if you wish).</p>
+<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
-<h1><a class="anchor" aria-hidden="true" id="client-configuration-changes"></a><a href="#client-configuration-changes" 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 [...]
-<p>To use a Pulsar <a href="/docs/zh-CN/2.3.0/reference-terminology#topic">topic</a> as a message queue, you should distribute the receiver load on that topic across several consumers (the optimal number of consumers will depend on the load). Each consumer must:</p>
+<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>
 <ul>
-<li><p>Establish a <a href="/docs/zh-CN/2.3.0/concepts-messaging#shared">shared subscription</a> and use the same subscription name as the other consumers (otherwise the subscription is not shared and the consumers can't act as a processing ensemble)</p></li>
-<li><p>If you'd like to have tight control over message dispatching across consumers, set the consumers' <strong>receiver queue</strong> size very low (potentially even to 0 if necessary). Each Pulsar <a href="/docs/zh-CN/2.3.0/reference-terminology#consumer">consumer</a> has a receiver queue that determines how many messages the consumer will attempt to fetch at a time. A receiver queue of 1000 (the default), for example, means that the consumer will attempt to process 1000 messages fro [...]
-<p>The downside to restricting the receiver queue size of consumers is that that limits the potential throughput of those consumers and cannot be used with <a href="/docs/zh-CN/2.3.0/reference-terminology#partitioned-topic">partitioned topics</a>. Whether the performance/control trade-off is worthwhile will depend on your use case.</p></li>
+<li><p>建立 <a href="/docs/zh-CN/2.3.0/concepts-messaging#shared">共享订阅</a>,并使用与其他消费者相同的订阅名称(否则订阅将不共享,消费者集群无法充当处理集合)</p></li>
+<li><p>如果你希望严格控制消费者之间的消息调度,请将消费者的<strong>接收器队列</strong>值的大小设置得非常低(如果需要,甚至可能设置为 0 )。 每个 Pulsar <a href="/docs/zh-CN/2.3.0/reference-terminology#consumer">消费者</a> 都有一个接收器队列,用于确定消费者一次尝试获取的消息数量。 例如,接收器队列 1000 (默认值)意味着消费者将尝试在连接时处理来自主题的 1000 条待办消息。 将接收器队列值设置为零实质上意味着确保每个消费者一次只做一件事。</p>
+<p>限制消费者的接收器队列大小的缺点是限制了这些消费者的潜在吞吐量,并且不能与<a href="/docs/zh-CN/2.3.0/reference-terminology#partitioned-topic">分区主题</a>一起使用。 性能/控制权衡是否值得取决于你的用例。</p></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="java-clients"></a><a href="#java-clients" 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>Here's an example Java consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Java 消费者配置示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.SubscriptionType;
@@ -110,12 +110,12 @@ Consumer consumer = client.newConsumer()
         .topic(TOPIC)
         .subscriptionName(subscription)
         .subscriptionType(SubscriptionType.Shared)
-        <span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+        <span class="hljs-comment">// 如果要限制接收器队列大小</span>
         .receiverQueueSize(<span class="hljs-number">10</span>)
         .subscribe();
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="python-clients"></a><a href="#python-clients" 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- [...]
-<p>Here's an example Python consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Python 消费者配置示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> pulsar <span class="hljs-keyword">import</span> Client, ConsumerType
 
 SERVICE_URL = <span class="hljs-string">"pulsar://localhost:6650"</span>
@@ -126,12 +126,12 @@ client = Client(SERVICE_URL)
 consumer = client.subscribe(
     TOPIC,
     SUBSCRIPTION,
-    <span class="hljs-comment"># If you'd like to restrict the receiver queue size</span>
+    <span class="hljs-comment"># 如果要限制接收器队列大小</span>
     receiver_queue_size=<span class="hljs-number">10</span>,
     consumer_type=ConsumerType.Shared)
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="c-clients"></a><a href="#c-clients" 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.6 [...]
-<p>Here's an example C++ consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 C++ 消费者配置示例:</p>
 <pre><code class="hljs css language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 <span class="hljs-built_in">std</span>::<span class="hljs-built_in">string</span> serviceUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
@@ -142,7 +142,7 @@ consumer = client.subscribe(
 
 ConsumerConfiguration consumerConfig;
 consumerConfig.setConsumerType(ConsumerType.ConsumerShared);
-<span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+<span class="hljs-comment">// 如果要限制接收器队列大小</span>
 consumerConfig.setReceiverQueueSize(<span class="hljs-number">10</span>);
 
 Consumer consumer;
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 748a2ee..2fd481d 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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system absolutely &lt;em&gt;must&lt;/em& [...]
-"/><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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system a [...]
+<!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,24 +76,24 @@
                 };
               }
             });
-        </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>Message queues are essential components of many large-scale data architectures. If every single work object that passes t [...]
-<p>Pulsar is a great choice for a message queue because:</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>it was built with <a href="/docs/zh-CN/2.3.1/concepts-architecture-overview#persistent-storage">persistent message storage</a> in mind</li>
-<li>it offers automatic load balancing across <a href="/docs/zh-CN/2.3.1/reference-terminology#consumer">consumers</a> for messages on a topic (or custom load balancing if you wish)</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>You can use the same Pulsar installation to act as a real-time message bus and as a message queue if you wish (or just one or the other). You can set aside some topics for real-time purposes and other topics for message queue purposes (or use specific namespaces for either purpose if you wish).</p>
+<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
-<h1><a class="anchor" aria-hidden="true" id="client-configuration-changes"></a><a href="#client-configuration-changes" 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 [...]
-<p>To use a Pulsar <a href="/docs/zh-CN/2.3.1/reference-terminology#topic">topic</a> as a message queue, you should distribute the receiver load on that topic across several consumers (the optimal number of consumers will depend on the load). Each consumer must:</p>
+<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>
 <ul>
-<li><p>Establish a <a href="/docs/zh-CN/2.3.1/concepts-messaging#shared">shared subscription</a> and use the same subscription name as the other consumers (otherwise the subscription is not shared and the consumers can't act as a processing ensemble)</p></li>
-<li><p>If you'd like to have tight control over message dispatching across consumers, set the consumers' <strong>receiver queue</strong> size very low (potentially even to 0 if necessary). Each Pulsar <a href="/docs/zh-CN/2.3.1/reference-terminology#consumer">consumer</a> has a receiver queue that determines how many messages the consumer will attempt to fetch at a time. A receiver queue of 1000 (the default), for example, means that the consumer will attempt to process 1000 messages fro [...]
-<p>The downside to restricting the receiver queue size of consumers is that that limits the potential throughput of those consumers and cannot be used with <a href="/docs/zh-CN/2.3.1/reference-terminology#partitioned-topic">partitioned topics</a>. Whether the performance/control trade-off is worthwhile will depend on your use case.</p></li>
+<li><p>建立 <a href="/docs/zh-CN/2.3.1/concepts-messaging#shared">共享订阅</a>,并使用与其他消费者相同的订阅名称(否则订阅将不共享,消费者集群无法充当处理集合)</p></li>
+<li><p>如果你希望严格控制消费者之间的消息调度,请将消费者的<strong>接收器队列</strong>值的大小设置得非常低(如果需要,甚至可能设置为 0 )。 每个 Pulsar <a href="/docs/zh-CN/2.3.1/reference-terminology#consumer">消费者</a> 都有一个接收器队列,用于确定消费者一次尝试获取的消息数量。 例如,接收器队列 1000 (默认值)意味着消费者将尝试在连接时处理来自主题的 1000 条待办消息。 将接收器队列值设置为零实质上意味着确保每个消费者一次只做一件事。</p>
+<p>限制消费者的接收器队列大小的缺点是限制了这些消费者的潜在吞吐量,并且不能与<a href="/docs/zh-CN/2.3.1/reference-terminology#partitioned-topic">分区主题</a>一起使用。 性能/控制权衡是否值得取决于你的用例。</p></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="java-clients"></a><a href="#java-clients" 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>Here's an example Java consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Java 消费者配置示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.SubscriptionType;
@@ -110,12 +110,12 @@ Consumer consumer = client.newConsumer()
         .topic(TOPIC)
         .subscriptionName(subscription)
         .subscriptionType(SubscriptionType.Shared)
-        <span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+        <span class="hljs-comment">// 如果要限制接收器队列大小</span>
         .receiverQueueSize(<span class="hljs-number">10</span>)
         .subscribe();
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="python-clients"></a><a href="#python-clients" 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- [...]
-<p>Here's an example Python consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Python 消费者配置示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> pulsar <span class="hljs-keyword">import</span> Client, ConsumerType
 
 SERVICE_URL = <span class="hljs-string">"pulsar://localhost:6650"</span>
@@ -126,12 +126,12 @@ client = Client(SERVICE_URL)
 consumer = client.subscribe(
     TOPIC,
     SUBSCRIPTION,
-    <span class="hljs-comment"># If you'd like to restrict the receiver queue size</span>
+    <span class="hljs-comment"># 如果要限制接收器队列大小</span>
     receiver_queue_size=<span class="hljs-number">10</span>,
     consumer_type=ConsumerType.Shared)
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="c-clients"></a><a href="#c-clients" 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.6 [...]
-<p>Here's an example C++ consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 C++ 消费者配置示例:</p>
 <pre><code class="hljs css language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 <span class="hljs-built_in">std</span>::<span class="hljs-built_in">string</span> serviceUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
@@ -142,7 +142,7 @@ consumer = client.subscribe(
 
 ConsumerConfiguration consumerConfig;
 consumerConfig.setConsumerType(ConsumerType.ConsumerShared);
-<span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+<span class="hljs-comment">// 如果要限制接收器队列大小</span>
 consumerConfig.setReceiverQueueSize(<span class="hljs-number">10</span>);
 
 Consumer consumer;
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 748a2ee..2fd481d 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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system absolutely &lt;em&gt;must&lt;/em& [...]
-"/><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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system a [...]
+<!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,24 +76,24 @@
                 };
               }
             });
-        </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>Message queues are essential components of many large-scale data architectures. If every single work object that passes t [...]
-<p>Pulsar is a great choice for a message queue because:</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>it was built with <a href="/docs/zh-CN/2.3.1/concepts-architecture-overview#persistent-storage">persistent message storage</a> in mind</li>
-<li>it offers automatic load balancing across <a href="/docs/zh-CN/2.3.1/reference-terminology#consumer">consumers</a> for messages on a topic (or custom load balancing if you wish)</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>You can use the same Pulsar installation to act as a real-time message bus and as a message queue if you wish (or just one or the other). You can set aside some topics for real-time purposes and other topics for message queue purposes (or use specific namespaces for either purpose if you wish).</p>
+<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
-<h1><a class="anchor" aria-hidden="true" id="client-configuration-changes"></a><a href="#client-configuration-changes" 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 [...]
-<p>To use a Pulsar <a href="/docs/zh-CN/2.3.1/reference-terminology#topic">topic</a> as a message queue, you should distribute the receiver load on that topic across several consumers (the optimal number of consumers will depend on the load). Each consumer must:</p>
+<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>
 <ul>
-<li><p>Establish a <a href="/docs/zh-CN/2.3.1/concepts-messaging#shared">shared subscription</a> and use the same subscription name as the other consumers (otherwise the subscription is not shared and the consumers can't act as a processing ensemble)</p></li>
-<li><p>If you'd like to have tight control over message dispatching across consumers, set the consumers' <strong>receiver queue</strong> size very low (potentially even to 0 if necessary). Each Pulsar <a href="/docs/zh-CN/2.3.1/reference-terminology#consumer">consumer</a> has a receiver queue that determines how many messages the consumer will attempt to fetch at a time. A receiver queue of 1000 (the default), for example, means that the consumer will attempt to process 1000 messages fro [...]
-<p>The downside to restricting the receiver queue size of consumers is that that limits the potential throughput of those consumers and cannot be used with <a href="/docs/zh-CN/2.3.1/reference-terminology#partitioned-topic">partitioned topics</a>. Whether the performance/control trade-off is worthwhile will depend on your use case.</p></li>
+<li><p>建立 <a href="/docs/zh-CN/2.3.1/concepts-messaging#shared">共享订阅</a>,并使用与其他消费者相同的订阅名称(否则订阅将不共享,消费者集群无法充当处理集合)</p></li>
+<li><p>如果你希望严格控制消费者之间的消息调度,请将消费者的<strong>接收器队列</strong>值的大小设置得非常低(如果需要,甚至可能设置为 0 )。 每个 Pulsar <a href="/docs/zh-CN/2.3.1/reference-terminology#consumer">消费者</a> 都有一个接收器队列,用于确定消费者一次尝试获取的消息数量。 例如,接收器队列 1000 (默认值)意味着消费者将尝试在连接时处理来自主题的 1000 条待办消息。 将接收器队列值设置为零实质上意味着确保每个消费者一次只做一件事。</p>
+<p>限制消费者的接收器队列大小的缺点是限制了这些消费者的潜在吞吐量,并且不能与<a href="/docs/zh-CN/2.3.1/reference-terminology#partitioned-topic">分区主题</a>一起使用。 性能/控制权衡是否值得取决于你的用例。</p></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="java-clients"></a><a href="#java-clients" 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>Here's an example Java consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Java 消费者配置示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.SubscriptionType;
@@ -110,12 +110,12 @@ Consumer consumer = client.newConsumer()
         .topic(TOPIC)
         .subscriptionName(subscription)
         .subscriptionType(SubscriptionType.Shared)
-        <span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+        <span class="hljs-comment">// 如果要限制接收器队列大小</span>
         .receiverQueueSize(<span class="hljs-number">10</span>)
         .subscribe();
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="python-clients"></a><a href="#python-clients" 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- [...]
-<p>Here's an example Python consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Python 消费者配置示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> pulsar <span class="hljs-keyword">import</span> Client, ConsumerType
 
 SERVICE_URL = <span class="hljs-string">"pulsar://localhost:6650"</span>
@@ -126,12 +126,12 @@ client = Client(SERVICE_URL)
 consumer = client.subscribe(
     TOPIC,
     SUBSCRIPTION,
-    <span class="hljs-comment"># If you'd like to restrict the receiver queue size</span>
+    <span class="hljs-comment"># 如果要限制接收器队列大小</span>
     receiver_queue_size=<span class="hljs-number">10</span>,
     consumer_type=ConsumerType.Shared)
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="c-clients"></a><a href="#c-clients" 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.6 [...]
-<p>Here's an example C++ consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 C++ 消费者配置示例:</p>
 <pre><code class="hljs css language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 <span class="hljs-built_in">std</span>::<span class="hljs-built_in">string</span> serviceUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
@@ -142,7 +142,7 @@ consumer = client.subscribe(
 
 ConsumerConfiguration consumerConfig;
 consumerConfig.setConsumerType(ConsumerType.ConsumerShared);
-<span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+<span class="hljs-comment">// 如果要限制接收器队列大小</span>
 consumerConfig.setReceiverQueueSize(<span class="hljs-number">10</span>);
 
 Consumer consumer;
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 b94bed7..4116b11 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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system absolutely &lt;em&gt;must&lt;/em& [...]
-"/><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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system a [...]
+<!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,24 +76,24 @@
                 };
               }
             });
-        </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>Message queues are essential components of many large-scale data architectures. If every single work object that passes t [...]
-<p>Pulsar is a great choice for a message queue because:</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>it was built with <a href="/docs/zh-CN/2.3.2/concepts-architecture-overview#persistent-storage">persistent message storage</a> in mind</li>
-<li>it offers automatic load balancing across <a href="/docs/zh-CN/2.3.2/reference-terminology#consumer">consumers</a> for messages on a topic (or custom load balancing if you wish)</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>You can use the same Pulsar installation to act as a real-time message bus and as a message queue if you wish (or just one or the other). You can set aside some topics for real-time purposes and other topics for message queue purposes (or use specific namespaces for either purpose if you wish).</p>
+<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
-<h1><a class="anchor" aria-hidden="true" id="client-configuration-changes"></a><a href="#client-configuration-changes" 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 [...]
-<p>To use a Pulsar <a href="/docs/zh-CN/2.3.2/reference-terminology#topic">topic</a> as a message queue, you should distribute the receiver load on that topic across several consumers (the optimal number of consumers will depend on the load). Each consumer must:</p>
+<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>
 <ul>
-<li><p>Establish a <a href="/docs/zh-CN/2.3.2/concepts-messaging#shared">shared subscription</a> and use the same subscription name as the other consumers (otherwise the subscription is not shared and the consumers can't act as a processing ensemble)</p></li>
-<li><p>If you'd like to have tight control over message dispatching across consumers, set the consumers' <strong>receiver queue</strong> size very low (potentially even to 0 if necessary). Each Pulsar <a href="/docs/zh-CN/2.3.2/reference-terminology#consumer">consumer</a> has a receiver queue that determines how many messages the consumer will attempt to fetch at a time. A receiver queue of 1000 (the default), for example, means that the consumer will attempt to process 1000 messages fro [...]
-<p>The downside to restricting the receiver queue size of consumers is that that limits the potential throughput of those consumers and cannot be used with <a href="/docs/zh-CN/2.3.2/reference-terminology#partitioned-topic">partitioned topics</a>. Whether the performance/control trade-off is worthwhile will depend on your use case.</p></li>
+<li><p>建立 <a href="/docs/zh-CN/2.3.2/concepts-messaging#shared">共享订阅</a>,并使用与其他消费者相同的订阅名称(否则订阅将不共享,消费者集群无法充当处理集合)</p></li>
+<li><p>如果你希望严格控制消费者之间的消息调度,请将消费者的<strong>接收器队列</strong>值的大小设置得非常低(如果需要,甚至可能设置为 0 )。 每个 Pulsar <a href="/docs/zh-CN/2.3.2/reference-terminology#consumer">消费者</a> 都有一个接收器队列,用于确定消费者一次尝试获取的消息数量。 例如,接收器队列 1000 (默认值)意味着消费者将尝试在连接时处理来自主题的 1000 条待办消息。 将接收器队列值设置为零实质上意味着确保每个消费者一次只做一件事。</p>
+<p>限制消费者的接收器队列大小的缺点是限制了这些消费者的潜在吞吐量,并且不能与<a href="/docs/zh-CN/2.3.2/reference-terminology#partitioned-topic">分区主题</a>一起使用。 性能/控制权衡是否值得取决于你的用例。</p></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="java-clients"></a><a href="#java-clients" 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>Here's an example Java consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Java 消费者配置示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.SubscriptionType;
@@ -110,12 +110,12 @@ Consumer consumer = client.newConsumer()
         .topic(TOPIC)
         .subscriptionName(subscription)
         .subscriptionType(SubscriptionType.Shared)
-        <span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+        <span class="hljs-comment">// 如果要限制接收器队列大小</span>
         .receiverQueueSize(<span class="hljs-number">10</span>)
         .subscribe();
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="python-clients"></a><a href="#python-clients" 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- [...]
-<p>Here's an example Python consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Python 消费者配置示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> pulsar <span class="hljs-keyword">import</span> Client, ConsumerType
 
 SERVICE_URL = <span class="hljs-string">"pulsar://localhost:6650"</span>
@@ -126,12 +126,12 @@ client = Client(SERVICE_URL)
 consumer = client.subscribe(
     TOPIC,
     SUBSCRIPTION,
-    <span class="hljs-comment"># If you'd like to restrict the receiver queue size</span>
+    <span class="hljs-comment"># 如果要限制接收器队列大小</span>
     receiver_queue_size=<span class="hljs-number">10</span>,
     consumer_type=ConsumerType.Shared)
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="c-clients"></a><a href="#c-clients" 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.6 [...]
-<p>Here's an example C++ consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 C++ 消费者配置示例:</p>
 <pre><code class="hljs css language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 <span class="hljs-built_in">std</span>::<span class="hljs-built_in">string</span> serviceUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
@@ -142,7 +142,7 @@ consumer = client.subscribe(
 
 ConsumerConfiguration consumerConfig;
 consumerConfig.setConsumerType(ConsumerType.ConsumerShared);
-<span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+<span class="hljs-comment">// 如果要限制接收器队列大小</span>
 consumerConfig.setReceiverQueueSize(<span class="hljs-number">10</span>);
 
 Consumer consumer;
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 b94bed7..4116b11 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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system absolutely &lt;em&gt;must&lt;/em& [...]
-"/><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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system a [...]
+<!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,24 +76,24 @@
                 };
               }
             });
-        </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>Message queues are essential components of many large-scale data architectures. If every single work object that passes t [...]
-<p>Pulsar is a great choice for a message queue because:</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>it was built with <a href="/docs/zh-CN/2.3.2/concepts-architecture-overview#persistent-storage">persistent message storage</a> in mind</li>
-<li>it offers automatic load balancing across <a href="/docs/zh-CN/2.3.2/reference-terminology#consumer">consumers</a> for messages on a topic (or custom load balancing if you wish)</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>You can use the same Pulsar installation to act as a real-time message bus and as a message queue if you wish (or just one or the other). You can set aside some topics for real-time purposes and other topics for message queue purposes (or use specific namespaces for either purpose if you wish).</p>
+<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
-<h1><a class="anchor" aria-hidden="true" id="client-configuration-changes"></a><a href="#client-configuration-changes" 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 [...]
-<p>To use a Pulsar <a href="/docs/zh-CN/2.3.2/reference-terminology#topic">topic</a> as a message queue, you should distribute the receiver load on that topic across several consumers (the optimal number of consumers will depend on the load). Each consumer must:</p>
+<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>
 <ul>
-<li><p>Establish a <a href="/docs/zh-CN/2.3.2/concepts-messaging#shared">shared subscription</a> and use the same subscription name as the other consumers (otherwise the subscription is not shared and the consumers can't act as a processing ensemble)</p></li>
-<li><p>If you'd like to have tight control over message dispatching across consumers, set the consumers' <strong>receiver queue</strong> size very low (potentially even to 0 if necessary). Each Pulsar <a href="/docs/zh-CN/2.3.2/reference-terminology#consumer">consumer</a> has a receiver queue that determines how many messages the consumer will attempt to fetch at a time. A receiver queue of 1000 (the default), for example, means that the consumer will attempt to process 1000 messages fro [...]
-<p>The downside to restricting the receiver queue size of consumers is that that limits the potential throughput of those consumers and cannot be used with <a href="/docs/zh-CN/2.3.2/reference-terminology#partitioned-topic">partitioned topics</a>. Whether the performance/control trade-off is worthwhile will depend on your use case.</p></li>
+<li><p>建立 <a href="/docs/zh-CN/2.3.2/concepts-messaging#shared">共享订阅</a>,并使用与其他消费者相同的订阅名称(否则订阅将不共享,消费者集群无法充当处理集合)</p></li>
+<li><p>如果你希望严格控制消费者之间的消息调度,请将消费者的<strong>接收器队列</strong>值的大小设置得非常低(如果需要,甚至可能设置为 0 )。 每个 Pulsar <a href="/docs/zh-CN/2.3.2/reference-terminology#consumer">消费者</a> 都有一个接收器队列,用于确定消费者一次尝试获取的消息数量。 例如,接收器队列 1000 (默认值)意味着消费者将尝试在连接时处理来自主题的 1000 条待办消息。 将接收器队列值设置为零实质上意味着确保每个消费者一次只做一件事。</p>
+<p>限制消费者的接收器队列大小的缺点是限制了这些消费者的潜在吞吐量,并且不能与<a href="/docs/zh-CN/2.3.2/reference-terminology#partitioned-topic">分区主题</a>一起使用。 性能/控制权衡是否值得取决于你的用例。</p></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="java-clients"></a><a href="#java-clients" 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>Here's an example Java consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Java 消费者配置示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.SubscriptionType;
@@ -110,12 +110,12 @@ Consumer consumer = client.newConsumer()
         .topic(TOPIC)
         .subscriptionName(subscription)
         .subscriptionType(SubscriptionType.Shared)
-        <span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+        <span class="hljs-comment">// 如果要限制接收器队列大小</span>
         .receiverQueueSize(<span class="hljs-number">10</span>)
         .subscribe();
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="python-clients"></a><a href="#python-clients" 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- [...]
-<p>Here's an example Python consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Python 消费者配置示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> pulsar <span class="hljs-keyword">import</span> Client, ConsumerType
 
 SERVICE_URL = <span class="hljs-string">"pulsar://localhost:6650"</span>
@@ -126,12 +126,12 @@ client = Client(SERVICE_URL)
 consumer = client.subscribe(
     TOPIC,
     SUBSCRIPTION,
-    <span class="hljs-comment"># If you'd like to restrict the receiver queue size</span>
+    <span class="hljs-comment"># 如果要限制接收器队列大小</span>
     receiver_queue_size=<span class="hljs-number">10</span>,
     consumer_type=ConsumerType.Shared)
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="c-clients"></a><a href="#c-clients" 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.6 [...]
-<p>Here's an example C++ consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 C++ 消费者配置示例:</p>
 <pre><code class="hljs css language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 <span class="hljs-built_in">std</span>::<span class="hljs-built_in">string</span> serviceUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
@@ -142,7 +142,7 @@ consumer = client.subscribe(
 
 ConsumerConfiguration consumerConfig;
 consumerConfig.setConsumerType(ConsumerType.ConsumerShared);
-<span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+<span class="hljs-comment">// 如果要限制接收器队列大小</span>
 consumerConfig.setReceiverQueueSize(<span class="hljs-number">10</span>);
 
 Consumer consumer;
diff --git a/content/docs/zh-CN/cookbooks-message-queue.html b/content/docs/zh-CN/cookbooks-message-queue.html
index ad9f2c7..a380dcb 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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system absolutely &lt;em&gt;must&lt;/em& [...]
-"/><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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system a [...]
+<!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,24 +76,24 @@
                 };
               }
             });
-        </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>Message queues are essential components of many large-scale data architectures. If every single work object that passes t [...]
-<p>Pulsar is a great choice for a message queue because:</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>it was built with <a href="/docs/zh-CN/concepts-architecture-overview#persistent-storage">persistent message storage</a> in mind</li>
-<li>it offers automatic load balancing across <a href="/docs/zh-CN/reference-terminology#consumer">consumers</a> for messages on a topic (or custom load balancing if you wish)</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>You can use the same Pulsar installation to act as a real-time message bus and as a message queue if you wish (or just one or the other). You can set aside some topics for real-time purposes and other topics for message queue purposes (or use specific namespaces for either purpose if you wish).</p>
+<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
-<h1><a class="anchor" aria-hidden="true" id="client-configuration-changes"></a><a href="#client-configuration-changes" 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 [...]
-<p>To use a Pulsar <a href="/docs/zh-CN/reference-terminology#topic">topic</a> as a message queue, you should distribute the receiver load on that topic across several consumers (the optimal number of consumers will depend on the load). Each consumer must:</p>
+<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>
 <ul>
-<li><p>Establish a <a href="/docs/zh-CN/concepts-messaging#shared">shared subscription</a> and use the same subscription name as the other consumers (otherwise the subscription is not shared and the consumers can't act as a processing ensemble)</p></li>
-<li><p>If you'd like to have tight control over message dispatching across consumers, set the consumers' <strong>receiver queue</strong> size very low (potentially even to 0 if necessary). Each Pulsar <a href="/docs/zh-CN/reference-terminology#consumer">consumer</a> has a receiver queue that determines how many messages the consumer will attempt to fetch at a time. A receiver queue of 1000 (the default), for example, means that the consumer will attempt to process 1000 messages from the  [...]
-<p>The downside to restricting the receiver queue size of consumers is that that limits the potential throughput of those consumers and cannot be used with <a href="/docs/zh-CN/reference-terminology#partitioned-topic">partitioned topics</a>. Whether the performance/control trade-off is worthwhile will depend on your use case.</p></li>
+<li><p>建立 <a href="/docs/zh-CN/concepts-messaging#shared">共享订阅</a>,并使用与其他消费者相同的订阅名称(否则订阅将不共享,消费者集群无法充当处理集合)</p></li>
+<li><p>如果你希望严格控制消费者之间的消息调度,请将消费者的<strong>接收器队列</strong>值的大小设置得非常低(如果需要,甚至可能设置为 0 )。 每个 Pulsar <a href="/docs/zh-CN/reference-terminology#consumer">消费者</a> 都有一个接收器队列,用于确定消费者一次尝试获取的消息数量。 例如,接收器队列 1000 (默认值)意味着消费者将尝试在连接时处理来自主题的 1000 条待办消息。 将接收器队列值设置为零实质上意味着确保每个消费者一次只做一件事。</p>
+<p>限制消费者的接收器队列大小的缺点是限制了这些消费者的潜在吞吐量,并且不能与<a href="/docs/zh-CN/reference-terminology#partitioned-topic">分区主题</a>一起使用。 性能/控制权衡是否值得取决于你的用例。</p></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="java-clients"></a><a href="#java-clients" 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>Here's an example Java consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Java 消费者配置示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.SubscriptionType;
@@ -110,12 +110,12 @@ Consumer consumer = client.newConsumer()
         .topic(TOPIC)
         .subscriptionName(subscription)
         .subscriptionType(SubscriptionType.Shared)
-        <span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+        <span class="hljs-comment">// 如果要限制接收器队列大小</span>
         .receiverQueueSize(<span class="hljs-number">10</span>)
         .subscribe();
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="python-clients"></a><a href="#python-clients" 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- [...]
-<p>Here's an example Python consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Python 消费者配置示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> pulsar <span class="hljs-keyword">import</span> Client, ConsumerType
 
 SERVICE_URL = <span class="hljs-string">"pulsar://localhost:6650"</span>
@@ -126,12 +126,12 @@ client = Client(SERVICE_URL)
 consumer = client.subscribe(
     TOPIC,
     SUBSCRIPTION,
-    <span class="hljs-comment"># If you'd like to restrict the receiver queue size</span>
+    <span class="hljs-comment"># 如果要限制接收器队列大小</span>
     receiver_queue_size=<span class="hljs-number">10</span>,
     consumer_type=ConsumerType.Shared)
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="c-clients"></a><a href="#c-clients" 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.6 [...]
-<p>Here's an example C++ consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 C++ 消费者配置示例:</p>
 <pre><code class="hljs css language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 <span class="hljs-built_in">std</span>::<span class="hljs-built_in">string</span> serviceUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
@@ -142,7 +142,7 @@ consumer = client.subscribe(
 
 ConsumerConfiguration consumerConfig;
 consumerConfig.setConsumerType(ConsumerType.ConsumerShared);
-<span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+<span class="hljs-comment">// 如果要限制接收器队列大小</span>
 consumerConfig.setReceiverQueueSize(<span class="hljs-number">10</span>);
 
 Consumer consumer;
diff --git a/content/docs/zh-CN/cookbooks-message-queue/index.html b/content/docs/zh-CN/cookbooks-message-queue/index.html
index ad9f2c7..a380dcb 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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system absolutely &lt;em&gt;must&lt;/em& [...]
-"/><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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system a [...]
+<!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,24 +76,24 @@
                 };
               }
             });
-        </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>Message queues are essential components of many large-scale data architectures. If every single work object that passes t [...]
-<p>Pulsar is a great choice for a message queue because:</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>it was built with <a href="/docs/zh-CN/concepts-architecture-overview#persistent-storage">persistent message storage</a> in mind</li>
-<li>it offers automatic load balancing across <a href="/docs/zh-CN/reference-terminology#consumer">consumers</a> for messages on a topic (or custom load balancing if you wish)</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>You can use the same Pulsar installation to act as a real-time message bus and as a message queue if you wish (or just one or the other). You can set aside some topics for real-time purposes and other topics for message queue purposes (or use specific namespaces for either purpose if you wish).</p>
+<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
-<h1><a class="anchor" aria-hidden="true" id="client-configuration-changes"></a><a href="#client-configuration-changes" 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 [...]
-<p>To use a Pulsar <a href="/docs/zh-CN/reference-terminology#topic">topic</a> as a message queue, you should distribute the receiver load on that topic across several consumers (the optimal number of consumers will depend on the load). Each consumer must:</p>
+<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>
 <ul>
-<li><p>Establish a <a href="/docs/zh-CN/concepts-messaging#shared">shared subscription</a> and use the same subscription name as the other consumers (otherwise the subscription is not shared and the consumers can't act as a processing ensemble)</p></li>
-<li><p>If you'd like to have tight control over message dispatching across consumers, set the consumers' <strong>receiver queue</strong> size very low (potentially even to 0 if necessary). Each Pulsar <a href="/docs/zh-CN/reference-terminology#consumer">consumer</a> has a receiver queue that determines how many messages the consumer will attempt to fetch at a time. A receiver queue of 1000 (the default), for example, means that the consumer will attempt to process 1000 messages from the  [...]
-<p>The downside to restricting the receiver queue size of consumers is that that limits the potential throughput of those consumers and cannot be used with <a href="/docs/zh-CN/reference-terminology#partitioned-topic">partitioned topics</a>. Whether the performance/control trade-off is worthwhile will depend on your use case.</p></li>
+<li><p>建立 <a href="/docs/zh-CN/concepts-messaging#shared">共享订阅</a>,并使用与其他消费者相同的订阅名称(否则订阅将不共享,消费者集群无法充当处理集合)</p></li>
+<li><p>如果你希望严格控制消费者之间的消息调度,请将消费者的<strong>接收器队列</strong>值的大小设置得非常低(如果需要,甚至可能设置为 0 )。 每个 Pulsar <a href="/docs/zh-CN/reference-terminology#consumer">消费者</a> 都有一个接收器队列,用于确定消费者一次尝试获取的消息数量。 例如,接收器队列 1000 (默认值)意味着消费者将尝试在连接时处理来自主题的 1000 条待办消息。 将接收器队列值设置为零实质上意味着确保每个消费者一次只做一件事。</p>
+<p>限制消费者的接收器队列大小的缺点是限制了这些消费者的潜在吞吐量,并且不能与<a href="/docs/zh-CN/reference-terminology#partitioned-topic">分区主题</a>一起使用。 性能/控制权衡是否值得取决于你的用例。</p></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="java-clients"></a><a href="#java-clients" 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>Here's an example Java consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Java 消费者配置示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.SubscriptionType;
@@ -110,12 +110,12 @@ Consumer consumer = client.newConsumer()
         .topic(TOPIC)
         .subscriptionName(subscription)
         .subscriptionType(SubscriptionType.Shared)
-        <span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+        <span class="hljs-comment">// 如果要限制接收器队列大小</span>
         .receiverQueueSize(<span class="hljs-number">10</span>)
         .subscribe();
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="python-clients"></a><a href="#python-clients" 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- [...]
-<p>Here's an example Python consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Python 消费者配置示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> pulsar <span class="hljs-keyword">import</span> Client, ConsumerType
 
 SERVICE_URL = <span class="hljs-string">"pulsar://localhost:6650"</span>
@@ -126,12 +126,12 @@ client = Client(SERVICE_URL)
 consumer = client.subscribe(
     TOPIC,
     SUBSCRIPTION,
-    <span class="hljs-comment"># If you'd like to restrict the receiver queue size</span>
+    <span class="hljs-comment"># 如果要限制接收器队列大小</span>
     receiver_queue_size=<span class="hljs-number">10</span>,
     consumer_type=ConsumerType.Shared)
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="c-clients"></a><a href="#c-clients" 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.6 [...]
-<p>Here's an example C++ consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 C++ 消费者配置示例:</p>
 <pre><code class="hljs css language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 <span class="hljs-built_in">std</span>::<span class="hljs-built_in">string</span> serviceUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
@@ -142,7 +142,7 @@ consumer = client.subscribe(
 
 ConsumerConfiguration consumerConfig;
 consumerConfig.setConsumerType(ConsumerType.ConsumerShared);
-<span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+<span class="hljs-comment">// 如果要限制接收器队列大小</span>
 consumerConfig.setReceiverQueueSize(<span class="hljs-number">10</span>);
 
 Consumer consumer;
diff --git a/content/docs/zh-CN/next/cookbooks-message-queue.html b/content/docs/zh-CN/next/cookbooks-message-queue.html
index 9e0272e..4e122d1 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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system absolutely &lt;em&gt;must&lt;/em& [...]
-"/><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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system ab [...]
+<!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,24 +76,24 @@
                 };
               }
             });
-        </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>Message queues are essential components of many large-scale data architectures. If every single work object that passes t [...]
-<p>Pulsar is a great choice for a message queue because:</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>it was built with <a href="/docs/zh-CN/next/concepts-architecture-overview#persistent-storage">persistent message storage</a> in mind</li>
-<li>it offers automatic load balancing across <a href="/docs/zh-CN/next/reference-terminology#consumer">consumers</a> for messages on a topic (or custom load balancing if you wish)</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>You can use the same Pulsar installation to act as a real-time message bus and as a message queue if you wish (or just one or the other). You can set aside some topics for real-time purposes and other topics for message queue purposes (or use specific namespaces for either purpose if you wish).</p>
+<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
-<h1><a class="anchor" aria-hidden="true" id="client-configuration-changes"></a><a href="#client-configuration-changes" 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 [...]
-<p>To use a Pulsar <a href="/docs/zh-CN/next/reference-terminology#topic">topic</a> as a message queue, you should distribute the receiver load on that topic across several consumers (the optimal number of consumers will depend on the load). Each consumer must:</p>
+<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>
 <ul>
-<li><p>Establish a <a href="/docs/zh-CN/next/concepts-messaging#shared">shared subscription</a> and use the same subscription name as the other consumers (otherwise the subscription is not shared and the consumers can't act as a processing ensemble)</p></li>
-<li><p>If you'd like to have tight control over message dispatching across consumers, set the consumers' <strong>receiver queue</strong> size very low (potentially even to 0 if necessary). Each Pulsar <a href="/docs/zh-CN/next/reference-terminology#consumer">consumer</a> has a receiver queue that determines how many messages the consumer will attempt to fetch at a time. A receiver queue of 1000 (the default), for example, means that the consumer will attempt to process 1000 messages from [...]
-<p>The downside to restricting the receiver queue size of consumers is that that limits the potential throughput of those consumers and cannot be used with <a href="/docs/zh-CN/next/reference-terminology#partitioned-topic">partitioned topics</a>. Whether the performance/control trade-off is worthwhile will depend on your use case.</p></li>
+<li><p>建立 <a href="/docs/zh-CN/next/concepts-messaging#shared">共享订阅</a>,并使用与其他消费者相同的订阅名称(否则订阅将不共享,消费者集群无法充当处理集合)</p></li>
+<li><p>如果你希望严格控制消费者之间的消息调度,请将消费者的<strong>接收器队列</strong>值的大小设置得非常低(如果需要,甚至可能设置为 0 )。 每个 Pulsar <a href="/docs/zh-CN/next/reference-terminology#consumer">消费者</a> 都有一个接收器队列,用于确定消费者一次尝试获取的消息数量。 例如,接收器队列 1000 (默认值)意味着消费者将尝试在连接时处理来自主题的 1000 条待办消息。 将接收器队列值设置为零实质上意味着确保每个消费者一次只做一件事。</p>
+<p>限制消费者的接收器队列大小的缺点是限制了这些消费者的潜在吞吐量,并且不能与<a href="/docs/zh-CN/next/reference-terminology#partitioned-topic">分区主题</a>一起使用。 性能/控制权衡是否值得取决于你的用例。</p></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="java-clients"></a><a href="#java-clients" 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>Here's an example Java consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Java 消费者配置示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.SubscriptionType;
@@ -110,12 +110,12 @@ Consumer consumer = client.newConsumer()
         .topic(TOPIC)
         .subscriptionName(subscription)
         .subscriptionType(SubscriptionType.Shared)
-        <span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+        <span class="hljs-comment">// 如果要限制接收器队列大小</span>
         .receiverQueueSize(<span class="hljs-number">10</span>)
         .subscribe();
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="python-clients"></a><a href="#python-clients" 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- [...]
-<p>Here's an example Python consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Python 消费者配置示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> pulsar <span class="hljs-keyword">import</span> Client, ConsumerType
 
 SERVICE_URL = <span class="hljs-string">"pulsar://localhost:6650"</span>
@@ -126,12 +126,12 @@ client = Client(SERVICE_URL)
 consumer = client.subscribe(
     TOPIC,
     SUBSCRIPTION,
-    <span class="hljs-comment"># If you'd like to restrict the receiver queue size</span>
+    <span class="hljs-comment"># 如果要限制接收器队列大小</span>
     receiver_queue_size=<span class="hljs-number">10</span>,
     consumer_type=ConsumerType.Shared)
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="c-clients"></a><a href="#c-clients" 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.6 [...]
-<p>Here's an example C++ consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 C++ 消费者配置示例:</p>
 <pre><code class="hljs css language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 <span class="hljs-built_in">std</span>::<span class="hljs-built_in">string</span> serviceUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
@@ -142,7 +142,7 @@ consumer = client.subscribe(
 
 ConsumerConfiguration consumerConfig;
 consumerConfig.setConsumerType(ConsumerType.ConsumerShared);
-<span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+<span class="hljs-comment">// 如果要限制接收器队列大小</span>
 consumerConfig.setReceiverQueueSize(<span class="hljs-number">10</span>);
 
 Consumer consumer;
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 9e0272e..4e122d1 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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system absolutely &lt;em&gt;must&lt;/em& [...]
-"/><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;Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system ab [...]
+<!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,24 +76,24 @@
                 };
               }
             });
-        </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>Message queues are essential components of many large-scale data architectures. If every single work object that passes t [...]
-<p>Pulsar is a great choice for a message queue because:</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>it was built with <a href="/docs/zh-CN/next/concepts-architecture-overview#persistent-storage">persistent message storage</a> in mind</li>
-<li>it offers automatic load balancing across <a href="/docs/zh-CN/next/reference-terminology#consumer">consumers</a> for messages on a topic (or custom load balancing if you wish)</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>You can use the same Pulsar installation to act as a real-time message bus and as a message queue if you wish (or just one or the other). You can set aside some topics for real-time purposes and other topics for message queue purposes (or use specific namespaces for either purpose if you wish).</p>
+<p>你可以使用同一个安装好的 Pulsar 来充当实时消息总线和消息队列(也可只使用其中一个)。 你可以为实时目的留出一些主题,为消息队列目的留出其他主题(也可为任一目的使用特定的命名空间)。</p>
 </blockquote>
-<h1><a class="anchor" aria-hidden="true" id="client-configuration-changes"></a><a href="#client-configuration-changes" 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 [...]
-<p>To use a Pulsar <a href="/docs/zh-CN/next/reference-terminology#topic">topic</a> as a message queue, you should distribute the receiver load on that topic across several consumers (the optimal number of consumers will depend on the load). Each consumer must:</p>
+<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>
 <ul>
-<li><p>Establish a <a href="/docs/zh-CN/next/concepts-messaging#shared">shared subscription</a> and use the same subscription name as the other consumers (otherwise the subscription is not shared and the consumers can't act as a processing ensemble)</p></li>
-<li><p>If you'd like to have tight control over message dispatching across consumers, set the consumers' <strong>receiver queue</strong> size very low (potentially even to 0 if necessary). Each Pulsar <a href="/docs/zh-CN/next/reference-terminology#consumer">consumer</a> has a receiver queue that determines how many messages the consumer will attempt to fetch at a time. A receiver queue of 1000 (the default), for example, means that the consumer will attempt to process 1000 messages from [...]
-<p>The downside to restricting the receiver queue size of consumers is that that limits the potential throughput of those consumers and cannot be used with <a href="/docs/zh-CN/next/reference-terminology#partitioned-topic">partitioned topics</a>. Whether the performance/control trade-off is worthwhile will depend on your use case.</p></li>
+<li><p>建立 <a href="/docs/zh-CN/next/concepts-messaging#shared">共享订阅</a>,并使用与其他消费者相同的订阅名称(否则订阅将不共享,消费者集群无法充当处理集合)</p></li>
+<li><p>如果你希望严格控制消费者之间的消息调度,请将消费者的<strong>接收器队列</strong>值的大小设置得非常低(如果需要,甚至可能设置为 0 )。 每个 Pulsar <a href="/docs/zh-CN/next/reference-terminology#consumer">消费者</a> 都有一个接收器队列,用于确定消费者一次尝试获取的消息数量。 例如,接收器队列 1000 (默认值)意味着消费者将尝试在连接时处理来自主题的 1000 条待办消息。 将接收器队列值设置为零实质上意味着确保每个消费者一次只做一件事。</p>
+<p>限制消费者的接收器队列大小的缺点是限制了这些消费者的潜在吞吐量,并且不能与<a href="/docs/zh-CN/next/reference-terminology#partitioned-topic">分区主题</a>一起使用。 性能/控制权衡是否值得取决于你的用例。</p></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="java-clients"></a><a href="#java-clients" 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>Here's an example Java consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Java 消费者配置示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.SubscriptionType;
@@ -110,12 +110,12 @@ Consumer consumer = client.newConsumer()
         .topic(TOPIC)
         .subscriptionName(subscription)
         .subscriptionType(SubscriptionType.Shared)
-        <span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+        <span class="hljs-comment">// 如果要限制接收器队列大小</span>
         .receiverQueueSize(<span class="hljs-number">10</span>)
         .subscribe();
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="python-clients"></a><a href="#python-clients" 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- [...]
-<p>Here's an example Python consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 Python 消费者配置示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> pulsar <span class="hljs-keyword">import</span> Client, ConsumerType
 
 SERVICE_URL = <span class="hljs-string">"pulsar://localhost:6650"</span>
@@ -126,12 +126,12 @@ client = Client(SERVICE_URL)
 consumer = client.subscribe(
     TOPIC,
     SUBSCRIPTION,
-    <span class="hljs-comment"># If you'd like to restrict the receiver queue size</span>
+    <span class="hljs-comment"># 如果要限制接收器队列大小</span>
     receiver_queue_size=<span class="hljs-number">10</span>,
     consumer_type=ConsumerType.Shared)
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="c-clients"></a><a href="#c-clients" 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.6 [...]
-<p>Here's an example C++ consumer configuration that uses a shared subscription:</p>
+<p>以下是使用共享订阅的 C++ 消费者配置示例:</p>
 <pre><code class="hljs css language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 <span class="hljs-built_in">std</span>::<span class="hljs-built_in">string</span> serviceUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
@@ -142,7 +142,7 @@ consumer = client.subscribe(
 
 ConsumerConfiguration consumerConfig;
 consumerConfig.setConsumerType(ConsumerType.ConsumerShared);
-<span class="hljs-comment">// If you'd like to restrict the receiver queue size</span>
+<span class="hljs-comment">// 如果要限制接收器队列大小</span>
 consumerConfig.setReceiverQueueSize(<span class="hljs-number">10</span>);
 
 Consumer consumer;
diff --git a/content/docs/zh-CN/next/io-connectors.html b/content/docs/zh-CN/next/io-connectors.html
index bc76aec..2656aee 100644
--- a/content/docs/zh-CN/next/io-connectors.html
+++ b/content/docs/zh-CN/next/io-connectors.html
@@ -96,6 +96,7 @@
 <li><a href="/docs/zh-CN/next/io-redis#sink">Redis Sink Connector</a></li>
 <li><a href="/docs/zh-CN/next/io-solr#sink">Solr Sink Connector</a></li>
 <li><a href="/docs/zh-CN/next/io-influxdb#sink">InfluxDB Sink Connector</a></li>
+<li><a href="/docs/zh-CN/next/io-jdbc">JDBC Sink Connector</a></li>
 </ul>
 </span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/io-managing"><span class="arrow-prev">← </span><span>Managing Connectors</span></a><a class="docs-next button" href="/docs/zh-CN/next/io-develop"><span>Developing Connectors</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. [...]
       const community = document.querySelector("a[href='#community']").parentNode;
diff --git a/content/docs/zh-CN/next/io-connectors/index.html b/content/docs/zh-CN/next/io-connectors/index.html
index bc76aec..2656aee 100644
--- a/content/docs/zh-CN/next/io-connectors/index.html
+++ b/content/docs/zh-CN/next/io-connectors/index.html
@@ -96,6 +96,7 @@
 <li><a href="/docs/zh-CN/next/io-redis#sink">Redis Sink Connector</a></li>
 <li><a href="/docs/zh-CN/next/io-solr#sink">Solr Sink Connector</a></li>
 <li><a href="/docs/zh-CN/next/io-influxdb#sink">InfluxDB Sink Connector</a></li>
+<li><a href="/docs/zh-CN/next/io-jdbc">JDBC Sink Connector</a></li>
 </ul>
 </span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/io-managing"><span class="arrow-prev">← </span><span>Managing Connectors</span></a><a class="docs-next button" href="/docs/zh-CN/next/io-develop"><span>Developing Connectors</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. [...]
       const community = document.querySelector("a[href='#community']").parentNode;
diff --git a/content/docs/zh-CN/next/io-jdbc.html b/content/docs/zh-CN/next/io-jdbc.html
new file mode 100644
index 0000000..3e82598
--- /dev/null
+++ b/content/docs/zh-CN/next/io-jdbc.html
@@ -0,0 +1,105 @@
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>JDBC Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;sink&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#sink&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link&quot;&gt;&lt;svg [...]
+"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="JDBC Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;sink&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#sink&quot; aria-hidden=&quot;true&quot; class=& [...]
+"/><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),
+              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 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">Tran [...]
+<p>The JDBC Sink Connector is used to pull messages from Pulsar topics and persist the messages to an MySQL or Sqlite. Current support INSERT, DELETE and UPDATE.</p>
+<h3><a class="anchor" aria-hidden="true" id="sink-configuration-options"></a><a href="#sink-configuration-options" 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 12H [...]
+<table>
+<thead>
+<tr><th>Name</th><th>Required</th><th>默认值</th><th>说明:</th></tr>
+</thead>
+<tbody>
+<tr><td>userName</td><td><code>false</code></td><td>``</td><td>Username used to connect to the database specified by <code>jdbcUrl</code>.</td></tr>
+<tr><td>password</td><td><code>false</code></td><td>``</td><td>Password used to connect to the database specified by <code>jdbcUrl</code>.</td></tr>
+<tr><td>jdbcUrl</td><td><code>true</code></td><td>``</td><td>The JDBC url of the database this connector connects to.</td></tr>
+<tr><td>tableName</td><td><code>true</code></td><td>``</td><td>The name of the table this connector writes messages to.</td></tr>
+<tr><td>nonKey</td><td><code>false</code></td><td>``</td><td>Fields used in update events. A comma-separated list.</td></tr>
+<tr><td>key</td><td><code>false</code></td><td>``</td><td>Fields used in where condition of update and delete Events. A comma-separated list.</td></tr>
+<tr><td>timeoutMs</td><td><code>false</code></td><td><code>500</code></td><td>The jdbc operation timeout in milliseconds.</td></tr>
+<tr><td>batchSize</td><td><code>false</code></td><td><code>200</code></td><td>The batch size of updates made to the database.</td></tr>
+</tbody>
+</table>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#sink">Sink</a><ul class="toc-headings"><li><a href="#sink-configuration-options">Sink Configuration Options</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apach [...]
+      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="/zh-CN/contact">Contact</a></li>' +
+            '<li><a href="/zh-CN/contributing">Contributing</a></li>' +
+            '<li><a href="/zh-CN/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="/zh-CN/resources">Resources</a></li>' +
+            '<li><a href="/zh-CN/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:zh-CN","version:next"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/zh-CN/next/io-jdbc/index.html b/content/docs/zh-CN/next/io-jdbc/index.html
new file mode 100644
index 0000000..3e82598
--- /dev/null
+++ b/content/docs/zh-CN/next/io-jdbc/index.html
@@ -0,0 +1,105 @@
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>JDBC Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;sink&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#sink&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link&quot;&gt;&lt;svg [...]
+"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="JDBC Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;sink&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#sink&quot; aria-hidden=&quot;true&quot; class=& [...]
+"/><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),
+              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 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">Tran [...]
+<p>The JDBC Sink Connector is used to pull messages from Pulsar topics and persist the messages to an MySQL or Sqlite. Current support INSERT, DELETE and UPDATE.</p>
+<h3><a class="anchor" aria-hidden="true" id="sink-configuration-options"></a><a href="#sink-configuration-options" 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 12H [...]
+<table>
+<thead>
+<tr><th>Name</th><th>Required</th><th>默认值</th><th>说明:</th></tr>
+</thead>
+<tbody>
+<tr><td>userName</td><td><code>false</code></td><td>``</td><td>Username used to connect to the database specified by <code>jdbcUrl</code>.</td></tr>
+<tr><td>password</td><td><code>false</code></td><td>``</td><td>Password used to connect to the database specified by <code>jdbcUrl</code>.</td></tr>
+<tr><td>jdbcUrl</td><td><code>true</code></td><td>``</td><td>The JDBC url of the database this connector connects to.</td></tr>
+<tr><td>tableName</td><td><code>true</code></td><td>``</td><td>The name of the table this connector writes messages to.</td></tr>
+<tr><td>nonKey</td><td><code>false</code></td><td>``</td><td>Fields used in update events. A comma-separated list.</td></tr>
+<tr><td>key</td><td><code>false</code></td><td>``</td><td>Fields used in where condition of update and delete Events. A comma-separated list.</td></tr>
+<tr><td>timeoutMs</td><td><code>false</code></td><td><code>500</code></td><td>The jdbc operation timeout in milliseconds.</td></tr>
+<tr><td>batchSize</td><td><code>false</code></td><td><code>200</code></td><td>The batch size of updates made to the database.</td></tr>
+</tbody>
+</table>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#sink">Sink</a><ul class="toc-headings"><li><a href="#sink-configuration-options">Sink Configuration Options</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apach [...]
+      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="/zh-CN/contact">Contact</a></li>' +
+            '<li><a href="/zh-CN/contributing">Contributing</a></li>' +
+            '<li><a href="/zh-CN/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="/zh-CN/resources">Resources</a></li>' +
+            '<li><a href="/zh-CN/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:zh-CN","version:next"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/sitemap.xml b/content/sitemap.xml
index 0a6b7d5..8cc323c 100644
--- a/content/sitemap.xml
+++ b/content/sitemap.xml
@@ -96,6 +96,7 @@
 <url> <loc>https://pulsar.incubator.apache.org/docs/en/next/io-hbase</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://pulsar.incubator.apache.org/docs/en/next/io-hbase" /> <xhtml:link rel="alternate" hreflang="ja" href="https://pulsar.incubator.apache.org/docs/ja/next/io-hbase" /> <xhtml:link rel="alternate" hreflang="fr" href="https://pulsar.incubator.apache.org/docs/fr/next/io-hbase" /> <xhtml:link rel="alternate" hr [...]
 <url> <loc>https://pulsar.incubator.apache.org/docs/en/next/io-hdfs</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://pulsar.incubator.apache.org/docs/en/next/io-hdfs" /> <xhtml:link rel="alternate" hreflang="ja" href="https://pulsar.incubator.apache.org/docs/ja/next/io-hdfs" /> <xhtml:link rel="alternate" hreflang="fr" href="https://pulsar.incubator.apache.org/docs/fr/next/io-hdfs" /> <xhtml:link rel="alternate" hrefla [...]
 <url> <loc>https://pulsar.incubator.apache.org/docs/en/next/io-influxdb</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://pulsar.incubator.apache.org/docs/en/next/io-influxdb" /> <xhtml:link rel="alternate" hreflang="ja" href="https://pulsar.incubator.apache.org/docs/ja/next/io-influxdb" /> <xhtml:link rel="alternate" hreflang="fr" href="https://pulsar.incubator.apache.org/docs/fr/next/io-influxdb" /> <xhtml:link rel="a [...]
+<url> <loc>https://pulsar.incubator.apache.org/docs/en/next/io-jdbc</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://pulsar.incubator.apache.org/docs/en/next/io-jdbc" /> <xhtml:link rel="alternate" hreflang="ja" href="https://pulsar.incubator.apache.org/docs/ja/next/io-jdbc" /> <xhtml:link rel="alternate" hreflang="fr" href="https://pulsar.incubator.apache.org/docs/fr/next/io-jdbc" /> <xhtml:link rel="alternate" hrefla [...]
 <url> <loc>https://pulsar.incubator.apache.org/docs/en/next/io-kafka</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://pulsar.incubator.apache.org/docs/en/next/io-kafka" /> <xhtml:link rel="alternate" hreflang="ja" href="https://pulsar.incubator.apache.org/docs/ja/next/io-kafka" /> <xhtml:link rel="alternate" hreflang="fr" href="https://pulsar.incubator.apache.org/docs/fr/next/io-kafka" /> <xhtml:link rel="alternate" hr [...]
 <url> <loc>https://pulsar.incubator.apache.org/docs/en/next/io-kinesis</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://pulsar.incubator.apache.org/docs/en/next/io-kinesis" /> <xhtml:link rel="alternate" hreflang="ja" href="https://pulsar.incubator.apache.org/docs/ja/next/io-kinesis" /> <xhtml:link rel="alternate" hreflang="fr" href="https://pulsar.incubator.apache.org/docs/fr/next/io-kinesis" /> <xhtml:link rel="alter [...]
 <url> <loc>https://pulsar.incubator.apache.org/docs/en/next/io-managing</loc> <changefreq>hourly</changefreq> <priority>1.0</priority> <xhtml:link rel="alternate" hreflang="en" href="https://pulsar.incubator.apache.org/docs/en/next/io-managing" /> <xhtml:link rel="alternate" hreflang="ja" href="https://pulsar.incubator.apache.org/docs/ja/next/io-managing" /> <xhtml:link rel="alternate" hreflang="fr" href="https://pulsar.incubator.apache.org/docs/fr/next/io-managing" /> <xhtml:link rel="a [...]
diff --git a/content/swagger/2.5.0-SNAPSHOT/swagger.json b/content/swagger/2.5.0-SNAPSHOT/swagger.json
index a6e9c45..54c443d 100644
--- a/content/swagger/2.5.0-SNAPSHOT/swagger.json
+++ b/content/swagger/2.5.0-SNAPSHOT/swagger.json
@@ -8652,15 +8652,6 @@
           "type" : "number",
           "format" : "double"
         },
-        "loadReportType" : {
-          "type" : "string"
-        },
-        "underLoaded" : {
-          "type" : "boolean"
-        },
-        "overLoaded" : {
-          "type" : "boolean"
-        },
         "cpu" : {
           "$ref" : "#/definitions/ResourceUsage"
         },
@@ -8687,6 +8678,15 @@
         "msgThroughputOut" : {
           "type" : "number",
           "format" : "double"
+        },
+        "underLoaded" : {
+          "type" : "boolean"
+        },
+        "overLoaded" : {
+          "type" : "boolean"
+        },
+        "loadReportType" : {
+          "type" : "string"
         }
       }
     },
@@ -8845,10 +8845,10 @@
           "type" : "number",
           "format" : "double"
         },
-        "connectedSince" : {
+        "producerName" : {
           "type" : "string"
         },
-        "producerName" : {
+        "connectedSince" : {
           "type" : "string"
         },
         "clientVersion" : {
@@ -9516,10 +9516,10 @@
             "type" : "string"
           }
         },
-        "connectedSince" : {
+        "producerName" : {
           "type" : "string"
         },
-        "producerName" : {
+        "connectedSince" : {
           "type" : "string"
         },
         "clientVersion" : {
diff --git a/content/swagger/2.5.0-SNAPSHOT/swaggerfunctions.json b/content/swagger/2.5.0-SNAPSHOT/swaggerfunctions.json
index 147ed5f..4a944a0 100644
--- a/content/swagger/2.5.0-SNAPSHOT/swaggerfunctions.json
+++ b/content/swagger/2.5.0-SNAPSHOT/swaggerfunctions.json
@@ -1348,13 +1348,20 @@
     "Message" : {
       "type" : "object",
       "properties" : {
-        "messageId" : {
-          "$ref" : "#/definitions/MessageId"
+        "replicated" : {
+          "type" : "boolean"
         },
-        "sequenceId" : {
+        "publishTime" : {
           "type" : "integer",
           "format" : "int64"
         },
+        "eventTime" : {
+          "type" : "integer",
+          "format" : "int64"
+        },
+        "topicName" : {
+          "type" : "string"
+        },
         "replicatedFrom" : {
           "type" : "string"
         },
@@ -1382,6 +1389,13 @@
             "format" : "byte"
           }
         },
+        "messageId" : {
+          "$ref" : "#/definitions/MessageId"
+        },
+        "sequenceId" : {
+          "type" : "integer",
+          "format" : "int64"
+        },
         "keyBytes" : {
           "type" : "array",
           "items" : {
@@ -1389,20 +1403,6 @@
             "format" : "byte"
           }
         },
-        "replicated" : {
-          "type" : "boolean"
-        },
-        "publishTime" : {
-          "type" : "integer",
-          "format" : "int64"
-        },
-        "eventTime" : {
-          "type" : "integer",
-          "format" : "int64"
-        },
-        "topicName" : {
-          "type" : "string"
-        },
         "data" : {
           "type" : "array",
           "items" : {