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/06/26 09:02:31 UTC

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

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 f0e953c  Updated site at revision 553f0fd
f0e953c is described below

commit f0e953cebc5f0c9d24743038acedb42546d305be
Author: jenkins <bu...@apache.org>
AuthorDate: Wed Jun 26 09:02:23 2019 +0000

    Updated site at revision 553f0fd
---
 content/docs/en/next/develop-binary-protocol.html  |    2 +-
 .../en/next/develop-binary-protocol/index.html     |    2 +-
 content/docs/fr/next/develop-binary-protocol.html  |    2 +-
 .../fr/next/develop-binary-protocol/index.html     |    2 +-
 content/docs/ja/next/develop-binary-protocol.html  |    2 +-
 .../ja/next/develop-binary-protocol/index.html     |    2 +-
 .../2.1.0-incubating/administration-dashboard.html |    6 +-
 .../administration-dashboard/index.html            |    6 +-
 .../client-libraries-websocket.html                |   28 +-
 .../client-libraries-websocket/index.html          |   28 +-
 .../2.1.1-incubating/administration-dashboard.html |    6 +-
 .../administration-dashboard/index.html            |    6 +-
 .../client-libraries-websocket.html                |   28 +-
 .../client-libraries-websocket/index.html          |   28 +-
 .../docs/zh-CN/2.2.0/administration-dashboard.html |    6 +-
 .../2.2.0/administration-dashboard/index.html      |    6 +-
 .../zh-CN/2.2.0/client-libraries-websocket.html    |   28 +-
 .../2.2.0/client-libraries-websocket/index.html    |   28 +-
 .../docs/zh-CN/2.2.1/administration-dashboard.html |    6 +-
 .../2.2.1/administration-dashboard/index.html      |    6 +-
 .../zh-CN/2.2.1/client-libraries-websocket.html    |   30 +-
 .../2.2.1/client-libraries-websocket/index.html    |   30 +-
 .../docs/zh-CN/2.3.0/administration-dashboard.html |    6 +-
 .../2.3.0/administration-dashboard/index.html      |    6 +-
 .../zh-CN/2.3.0/client-libraries-websocket.html    |   30 +-
 .../2.3.0/client-libraries-websocket/index.html    |   30 +-
 .../docs/zh-CN/2.3.1/administration-dashboard.html |    6 +-
 .../2.3.1/administration-dashboard/index.html      |    6 +-
 .../zh-CN/2.3.1/client-libraries-websocket.html    |   30 +-
 .../2.3.1/client-libraries-websocket/index.html    |   30 +-
 content/docs/zh-CN/administration-dashboard.html   |    6 +-
 .../docs/zh-CN/administration-dashboard/index.html |    6 +-
 content/docs/zh-CN/client-libraries-websocket.html |   30 +-
 .../zh-CN/client-libraries-websocket/index.html    |   30 +-
 .../docs/zh-CN/next/administration-dashboard.html  |    6 +-
 .../zh-CN/next/administration-dashboard/index.html |    6 +-
 .../zh-CN/next/client-libraries-websocket.html     |   30 +-
 .../next/client-libraries-websocket/index.html     |   30 +-
 .../docs/zh-CN/next/develop-binary-protocol.html   |    2 +-
 .../zh-CN/next/develop-binary-protocol/index.html  |    2 +-
 content/fr/admin-rest-api.html                     |    2 +-
 content/fr/admin-rest-api/index.html               |    2 +-
 content/fr/contact.html                            |    4 +-
 content/fr/contact/index.html                      |    4 +-
 content/fr/contributing.html                       |    2 +-
 content/fr/contributing/index.html                 |    2 +-
 content/fr/download.html                           |    6 +-
 content/fr/download/index.html                     |    6 +-
 content/fr/events.html                             |    4 +-
 content/fr/events/index.html                       |    4 +-
 content/fr/functions-rest-api.html                 |    2 +-
 content/fr/functions-rest-api/index.html           |    2 +-
 content/fr/index.html                              |    2 +-
 content/fr/release-notes.html                      |    2 +-
 content/fr/release-notes/index.html                |    2 +-
 content/fr/resources.html                          |    4 +-
 content/fr/resources/index.html                    |    4 +-
 content/fr/sink-rest-api.html                      |    2 +-
 content/fr/sink-rest-api/index.html                |    2 +-
 content/fr/source-rest-api.html                    |    2 +-
 content/fr/source-rest-api/index.html              |    2 +-
 content/fr/team.html                               |    4 +-
 content/fr/team/index.html                         |    4 +-
 content/fr/versions.html                           |    4 +-
 content/fr/versions/index.html                     |    4 +-
 content/swagger/2.5.0-SNAPSHOT/swagger.json        | 9779 ++++++++++++++++++++
 .../swagger/2.5.0-SNAPSHOT/swaggerfunctions.json   | 1496 +++
 content/swagger/2.5.0-SNAPSHOT/swaggersink.json    |  935 ++
 content/swagger/2.5.0-SNAPSHOT/swaggersource.json  |  886 ++
 content/zh-CN/admin-rest-api.html                  |    2 +-
 content/zh-CN/admin-rest-api/index.html            |    2 +-
 content/zh-CN/contact.html                         |    4 +-
 content/zh-CN/contact/index.html                   |    4 +-
 content/zh-CN/contributing.html                    |    2 +-
 content/zh-CN/contributing/index.html              |    2 +-
 content/zh-CN/download.html                        |    6 +-
 content/zh-CN/download/index.html                  |    6 +-
 content/zh-CN/events.html                          |    4 +-
 content/zh-CN/events/index.html                    |    4 +-
 content/zh-CN/functions-rest-api.html              |    2 +-
 content/zh-CN/functions-rest-api/index.html        |    2 +-
 content/zh-CN/index.html                           |    2 +-
 content/zh-CN/release-notes.html                   |    2 +-
 content/zh-CN/release-notes/index.html             |    2 +-
 content/zh-CN/resources.html                       |    4 +-
 content/zh-CN/resources/index.html                 |    4 +-
 content/zh-CN/sink-rest-api.html                   |    2 +-
 content/zh-CN/sink-rest-api/index.html             |    2 +-
 content/zh-CN/source-rest-api.html                 |    2 +-
 content/zh-CN/source-rest-api/index.html           |    2 +-
 content/zh-CN/team.html                            |    4 +-
 content/zh-CN/team/index.html                      |    4 +-
 content/zh-CN/versions.html                        |    4 +-
 content/zh-CN/versions/index.html                  |    4 +-
 94 files changed, 13448 insertions(+), 384 deletions(-)

diff --git a/content/docs/en/next/develop-binary-protocol.html b/content/docs/en/next/develop-binary-protocol.html
index 10a01eb..f6ce552 100644
--- a/content/docs/en/next/develop-binary-protocol.html
+++ b/content/docs/en/next/develop-binary-protocol.html
@@ -131,7 +131,7 @@
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>producer_name</code></td><td style="text-align:left">The name of the producer that published the message</td></tr>
-<tr><td style="text-align:left"><code>sequence_id</code></td><td style="text-align:left">The sequence ID of the message, assigned by producer}</td></tr>
+<tr><td style="text-align:left"><code>sequence_id</code></td><td style="text-align:left">The sequence ID of the message, assigned by producer</td></tr>
 <tr><td style="text-align:left"><code>publish_time</code></td><td style="text-align:left">The publish timestamp in Unix time (i.e. as the number of milliseconds since January 1st, 1970 in UTC)</td></tr>
 <tr><td style="text-align:left"><code>properties</code></td><td style="text-align:left">A sequence of key/value pairs (using the <a href="https://github.com/apache/pulsar/blob/master/pulsar-common/src/main/proto/PulsarApi.proto#L32"><code>KeyValue</code></a> message). These are application-defined keys and values with no special meaning to Pulsar.</td></tr>
 <tr><td style="text-align:left"><code>replicated_from</code> <em>(optional)</em></td><td style="text-align:left">Indicates that the message has been replicated and specifies the name of the <a href="/docs/en/next/reference-terminology#cluster">cluster</a> where the message was originally published</td></tr>
diff --git a/content/docs/en/next/develop-binary-protocol/index.html b/content/docs/en/next/develop-binary-protocol/index.html
index 10a01eb..f6ce552 100644
--- a/content/docs/en/next/develop-binary-protocol/index.html
+++ b/content/docs/en/next/develop-binary-protocol/index.html
@@ -131,7 +131,7 @@
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>producer_name</code></td><td style="text-align:left">The name of the producer that published the message</td></tr>
-<tr><td style="text-align:left"><code>sequence_id</code></td><td style="text-align:left">The sequence ID of the message, assigned by producer}</td></tr>
+<tr><td style="text-align:left"><code>sequence_id</code></td><td style="text-align:left">The sequence ID of the message, assigned by producer</td></tr>
 <tr><td style="text-align:left"><code>publish_time</code></td><td style="text-align:left">The publish timestamp in Unix time (i.e. as the number of milliseconds since January 1st, 1970 in UTC)</td></tr>
 <tr><td style="text-align:left"><code>properties</code></td><td style="text-align:left">A sequence of key/value pairs (using the <a href="https://github.com/apache/pulsar/blob/master/pulsar-common/src/main/proto/PulsarApi.proto#L32"><code>KeyValue</code></a> message). These are application-defined keys and values with no special meaning to Pulsar.</td></tr>
 <tr><td style="text-align:left"><code>replicated_from</code> <em>(optional)</em></td><td style="text-align:left">Indicates that the message has been replicated and specifies the name of the <a href="/docs/en/next/reference-terminology#cluster">cluster</a> where the message was originally published</td></tr>
diff --git a/content/docs/fr/next/develop-binary-protocol.html b/content/docs/fr/next/develop-binary-protocol.html
index b15ced4..d84cd1e 100644
--- a/content/docs/fr/next/develop-binary-protocol.html
+++ b/content/docs/fr/next/develop-binary-protocol.html
@@ -130,7 +130,7 @@
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>producer_name</code></td><td style="text-align:left">The name of the producer that published the message</td></tr>
-<tr><td style="text-align:left"><code>sequence_id</code></td><td style="text-align:left">The sequence ID of the message, assigned by producer}</td></tr>
+<tr><td style="text-align:left"><code>sequence_id</code></td><td style="text-align:left">The sequence ID of the message, assigned by producer</td></tr>
 <tr><td style="text-align:left"><code>publish_time</code></td><td style="text-align:left">The publish timestamp in Unix time (i.e. as the number of milliseconds since January 1st, 1970 in UTC)</td></tr>
 <tr><td style="text-align:left"><code>properties</code></td><td style="text-align:left">A sequence of key/value pairs (using the <a href="https://github.com/apache/pulsar/blob/master/pulsar-common/src/main/proto/PulsarApi.proto#L32"><code>KeyValue</code></a> message). These are application-defined keys and values with no special meaning to Pulsar.</td></tr>
 <tr><td style="text-align:left"><code>replicated_from</code> <em>(optional)</em></td><td style="text-align:left">Indicates that the message has been replicated and specifies the name of the <a href="/docs/fr/next/reference-terminology#cluster">cluster</a> where the message was originally published</td></tr>
diff --git a/content/docs/fr/next/develop-binary-protocol/index.html b/content/docs/fr/next/develop-binary-protocol/index.html
index b15ced4..d84cd1e 100644
--- a/content/docs/fr/next/develop-binary-protocol/index.html
+++ b/content/docs/fr/next/develop-binary-protocol/index.html
@@ -130,7 +130,7 @@
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>producer_name</code></td><td style="text-align:left">The name of the producer that published the message</td></tr>
-<tr><td style="text-align:left"><code>sequence_id</code></td><td style="text-align:left">The sequence ID of the message, assigned by producer}</td></tr>
+<tr><td style="text-align:left"><code>sequence_id</code></td><td style="text-align:left">The sequence ID of the message, assigned by producer</td></tr>
 <tr><td style="text-align:left"><code>publish_time</code></td><td style="text-align:left">The publish timestamp in Unix time (i.e. as the number of milliseconds since January 1st, 1970 in UTC)</td></tr>
 <tr><td style="text-align:left"><code>properties</code></td><td style="text-align:left">A sequence of key/value pairs (using the <a href="https://github.com/apache/pulsar/blob/master/pulsar-common/src/main/proto/PulsarApi.proto#L32"><code>KeyValue</code></a> message). These are application-defined keys and values with no special meaning to Pulsar.</td></tr>
 <tr><td style="text-align:left"><code>replicated_from</code> <em>(optional)</em></td><td style="text-align:left">Indicates that the message has been replicated and specifies the name of the <a href="/docs/fr/next/reference-terminology#cluster">cluster</a> where the message was originally published</td></tr>
diff --git a/content/docs/ja/next/develop-binary-protocol.html b/content/docs/ja/next/develop-binary-protocol.html
index a782a93..b25f5ed 100644
--- a/content/docs/ja/next/develop-binary-protocol.html
+++ b/content/docs/ja/next/develop-binary-protocol.html
@@ -130,7 +130,7 @@
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>producer_name</code></td><td style="text-align:left">The name of the producer that published the message</td></tr>
-<tr><td style="text-align:left"><code>sequence_id</code></td><td style="text-align:left">The sequence ID of the message, assigned by producer}</td></tr>
+<tr><td style="text-align:left"><code>sequence_id</code></td><td style="text-align:left">The sequence ID of the message, assigned by producer</td></tr>
 <tr><td style="text-align:left"><code>publish_time</code></td><td style="text-align:left">The publish timestamp in Unix time (i.e. as the number of milliseconds since January 1st, 1970 in UTC)</td></tr>
 <tr><td style="text-align:left"><code>properties</code></td><td style="text-align:left">A sequence of key/value pairs (using the <a href="https://github.com/apache/pulsar/blob/master/pulsar-common/src/main/proto/PulsarApi.proto#L32"><code>KeyValue</code></a> message). These are application-defined keys and values with no special meaning to Pulsar.</td></tr>
 <tr><td style="text-align:left"><code>replicated_from</code> <em>(optional)</em></td><td style="text-align:left">Indicates that the message has been replicated and specifies the name of the <a href="/docs/ja/next/reference-terminology#cluster">cluster</a> where the message was originally published</td></tr>
diff --git a/content/docs/ja/next/develop-binary-protocol/index.html b/content/docs/ja/next/develop-binary-protocol/index.html
index a782a93..b25f5ed 100644
--- a/content/docs/ja/next/develop-binary-protocol/index.html
+++ b/content/docs/ja/next/develop-binary-protocol/index.html
@@ -130,7 +130,7 @@
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>producer_name</code></td><td style="text-align:left">The name of the producer that published the message</td></tr>
-<tr><td style="text-align:left"><code>sequence_id</code></td><td style="text-align:left">The sequence ID of the message, assigned by producer}</td></tr>
+<tr><td style="text-align:left"><code>sequence_id</code></td><td style="text-align:left">The sequence ID of the message, assigned by producer</td></tr>
 <tr><td style="text-align:left"><code>publish_time</code></td><td style="text-align:left">The publish timestamp in Unix time (i.e. as the number of milliseconds since January 1st, 1970 in UTC)</td></tr>
 <tr><td style="text-align:left"><code>properties</code></td><td style="text-align:left">A sequence of key/value pairs (using the <a href="https://github.com/apache/pulsar/blob/master/pulsar-common/src/main/proto/PulsarApi.proto#L32"><code>KeyValue</code></a> message). These are application-defined keys and values with no special meaning to Pulsar.</td></tr>
 <tr><td style="text-align:left"><code>replicated_from</code> <em>(optional)</em></td><td style="text-align:left">Indicates that the message has been replicated and specifies the name of the <a href="/docs/ja/next/reference-terminology#cluster">cluster</a> where the message was originally published</td></tr>
diff --git a/content/docs/zh-CN/2.1.0-incubating/administration-dashboard.html b/content/docs/zh-CN/2.1.0-incubating/administration-dashboard.html
index e9b5a86..ce2b91b 100644
--- a/content/docs/zh-CN/2.1.0-incubating/administration-dashboard.html
+++ b/content/docs/zh-CN/2.1.0-incubating/administration-dashboard.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>The Pulsar dashboard · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/2.1.0-incubating/reference-terminology#topic&quot;&gt;topics& [...]
-"/><meta name="docsearch:version" content="2.1.0-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="The Pulsar dashboard · 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;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/2.1.0-incubating/r [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>The Pulsar dashboard · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/2.1.0-incubating/reference-terminology#topic&quot;&gt;主题&lt;/a&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="The Pulsar dashboard · 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;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/2.1.0-incubating/reference-terminology#topic&quot;&gt;主题&lt;/a&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,7 +76,7 @@
                 };
               }
             });
-        </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">The Pulsar dashboard</h1></header><article><div><span><p>The Pulsar dashboard is a web application that enables users to monitor current stats for all <a href="/docs/zh-CN/2.1.0-incubating/ [...]
+        </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">The Pulsar dashboard</h1></header><article><div><span><p>Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 <a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#topic">主题</a> 的实时状态。</p>
 <p>The dashboard is a data collector that polls stats from all the brokers in a Pulsar instance (across multiple clusters) and stores all the information in a <a href="https://www.postgresql.org/">PostgreSQL</a> database.</p>
 <p>A <a href="https://www.djangoproject.com">Django</a> web app is used to render the collected data.</p>
 <h2><a class="anchor" aria-hidden="true" id="install"></a><a href="#install" 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- [...]
diff --git a/content/docs/zh-CN/2.1.0-incubating/administration-dashboard/index.html b/content/docs/zh-CN/2.1.0-incubating/administration-dashboard/index.html
index e9b5a86..ce2b91b 100644
--- a/content/docs/zh-CN/2.1.0-incubating/administration-dashboard/index.html
+++ b/content/docs/zh-CN/2.1.0-incubating/administration-dashboard/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>The Pulsar dashboard · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/2.1.0-incubating/reference-terminology#topic&quot;&gt;topics& [...]
-"/><meta name="docsearch:version" content="2.1.0-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="The Pulsar dashboard · 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;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/2.1.0-incubating/r [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>The Pulsar dashboard · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/2.1.0-incubating/reference-terminology#topic&quot;&gt;主题&lt;/a&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="The Pulsar dashboard · 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;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/2.1.0-incubating/reference-terminology#topic&quot;&gt;主题&lt;/a&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,7 +76,7 @@
                 };
               }
             });
-        </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">The Pulsar dashboard</h1></header><article><div><span><p>The Pulsar dashboard is a web application that enables users to monitor current stats for all <a href="/docs/zh-CN/2.1.0-incubating/ [...]
+        </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">The Pulsar dashboard</h1></header><article><div><span><p>Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 <a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#topic">主题</a> 的实时状态。</p>
 <p>The dashboard is a data collector that polls stats from all the brokers in a Pulsar instance (across multiple clusters) and stores all the information in a <a href="https://www.postgresql.org/">PostgreSQL</a> database.</p>
 <p>A <a href="https://www.djangoproject.com">Django</a> web app is used to render the collected data.</p>
 <h2><a class="anchor" aria-hidden="true" id="install"></a><a href="#install" 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- [...]
diff --git a/content/docs/zh-CN/2.1.0-incubating/client-libraries-websocket.html b/content/docs/zh-CN/2.1.0-incubating/client-libraries-websocket.html
index e5c1f20..7ed9880 100644
--- a/content/docs/zh-CN/2.1.0-incubating/client-libraries-websocket.html
+++ b/content/docs/zh-CN/2.1.0-incubating/client-libraries-websocket.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>Pulsar&#x27;s WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot;/ [...]
-"/><meta name="docsearch:version" content="2.1.0-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar&#x27;s WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互 [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar&#x27;s WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot; [...]
+"/><meta name="docsearch:version" content="2.1.0-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar&#x27;s WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交 [...]
 "/><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,7 +76,7 @@
                 };
               }
             });
-        </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">Pulsar&#x27;s WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API">WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进行 [...]
+        </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">Pulsar&#x27;s WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API"> WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进 [...]
 <blockquote>
 <p>你可以将 Pulsar 的 WebSocket API 与任何的 WebSocket 客户端库一起使用。请参阅<a href="#client-examples">下面</a>的 Python 和 Node.js 示例。</p>
 </blockquote>
@@ -117,7 +117,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数"></a><a href="#查询参数" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>sendTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">发送超时(默认值:30秒)</td></tr>
@@ -141,7 +141,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>payload</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Base-64 编码的 payload</td></tr>
@@ -167,7 +167,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>result</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left"><code>ok</code> 要么成功发送,要么发送错误,要么发送不成功</td></tr>
@@ -178,16 +178,14 @@
 <h3><a class="anchor" aria-hidden="true" id="消费端"></a><a href="#消费端" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.2 [...]
 <p>消费端要求您在 URL 中指定租户,命名空间和主题以及订阅:</p>
 <pre><code class="hljs css language-http">ws://broker-service-url:8080/ws/v2/consumer/persistent/:tenant/:namespace/:topic/:subscription
-
 </code></pre>
 <h5><a class="anchor" aria-hidden="true" id="查询参数-1"></a><a href="#查询参数-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
-<tr><td style="text-align:left">`ackTimeoutMillis</td></tr>
-<tr><td style="text-align:left">`</td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
+<tr><td style="text-align:left"><code>ackTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
 <tr><td style="text-align:left"><code>subscriptionType</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left"><a href="https://pulsar.incubator.apache.org/api/client/index.html?org/apache/pulsar/client/api/SubscriptionType.html">Subscription type</a>: <code>Exclusive</code>, <code>Failover</code>, <code>Shared</code></td></tr>
 <tr><td style="text-align:left">`receiverQueueSize</td></tr>
 <tr><td style="text-align:left">`</td><td style="text-align:left">int</td><td style="text-align:left">no</td><td style="text-align:left">消费者接收队列大小 (默认: 1000)</td></tr>
@@ -208,7 +206,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -227,7 +225,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
@@ -240,7 +238,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数-2"></a><a href="#查询参数-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>readerName</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left">Reader name</td></tr>
@@ -260,7 +258,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -279,7 +277,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
diff --git a/content/docs/zh-CN/2.1.0-incubating/client-libraries-websocket/index.html b/content/docs/zh-CN/2.1.0-incubating/client-libraries-websocket/index.html
index e5c1f20..7ed9880 100644
--- a/content/docs/zh-CN/2.1.0-incubating/client-libraries-websocket/index.html
+++ b/content/docs/zh-CN/2.1.0-incubating/client-libraries-websocket/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>Pulsar&#x27;s WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot;/ [...]
-"/><meta name="docsearch:version" content="2.1.0-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar&#x27;s WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互 [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar&#x27;s WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot; [...]
+"/><meta name="docsearch:version" content="2.1.0-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar&#x27;s WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交 [...]
 "/><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,7 +76,7 @@
                 };
               }
             });
-        </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">Pulsar&#x27;s WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API">WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进行 [...]
+        </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">Pulsar&#x27;s WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API"> WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进 [...]
 <blockquote>
 <p>你可以将 Pulsar 的 WebSocket API 与任何的 WebSocket 客户端库一起使用。请参阅<a href="#client-examples">下面</a>的 Python 和 Node.js 示例。</p>
 </blockquote>
@@ -117,7 +117,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数"></a><a href="#查询参数" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>sendTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">发送超时(默认值:30秒)</td></tr>
@@ -141,7 +141,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>payload</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Base-64 编码的 payload</td></tr>
@@ -167,7 +167,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>result</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left"><code>ok</code> 要么成功发送,要么发送错误,要么发送不成功</td></tr>
@@ -178,16 +178,14 @@
 <h3><a class="anchor" aria-hidden="true" id="消费端"></a><a href="#消费端" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.2 [...]
 <p>消费端要求您在 URL 中指定租户,命名空间和主题以及订阅:</p>
 <pre><code class="hljs css language-http">ws://broker-service-url:8080/ws/v2/consumer/persistent/:tenant/:namespace/:topic/:subscription
-
 </code></pre>
 <h5><a class="anchor" aria-hidden="true" id="查询参数-1"></a><a href="#查询参数-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
-<tr><td style="text-align:left">`ackTimeoutMillis</td></tr>
-<tr><td style="text-align:left">`</td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
+<tr><td style="text-align:left"><code>ackTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
 <tr><td style="text-align:left"><code>subscriptionType</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left"><a href="https://pulsar.incubator.apache.org/api/client/index.html?org/apache/pulsar/client/api/SubscriptionType.html">Subscription type</a>: <code>Exclusive</code>, <code>Failover</code>, <code>Shared</code></td></tr>
 <tr><td style="text-align:left">`receiverQueueSize</td></tr>
 <tr><td style="text-align:left">`</td><td style="text-align:left">int</td><td style="text-align:left">no</td><td style="text-align:left">消费者接收队列大小 (默认: 1000)</td></tr>
@@ -208,7 +206,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -227,7 +225,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
@@ -240,7 +238,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数-2"></a><a href="#查询参数-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>readerName</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left">Reader name</td></tr>
@@ -260,7 +258,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -279,7 +277,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
diff --git a/content/docs/zh-CN/2.1.1-incubating/administration-dashboard.html b/content/docs/zh-CN/2.1.1-incubating/administration-dashboard.html
index f3c9740..935b399 100644
--- a/content/docs/zh-CN/2.1.1-incubating/administration-dashboard.html
+++ b/content/docs/zh-CN/2.1.1-incubating/administration-dashboard.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>The Pulsar dashboard · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/2.1.1-incubating/reference-terminology#topic&quot;&gt;topics& [...]
-"/><meta name="docsearch:version" content="2.1.1-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="The Pulsar dashboard · 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;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/2.1.1-incubating/r [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>The Pulsar dashboard · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/2.1.1-incubating/reference-terminology#topic&quot;&gt;主题&lt;/a&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="The Pulsar dashboard · 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;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/2.1.1-incubating/reference-terminology#topic&quot;&gt;主题&lt;/a&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,7 +76,7 @@
                 };
               }
             });
-        </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">The Pulsar dashboard</h1></header><article><div><span><p>The Pulsar dashboard is a web application that enables users to monitor current stats for all <a href="/docs/zh-CN/2.1.1-incubating/ [...]
+        </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">The Pulsar dashboard</h1></header><article><div><span><p>Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 <a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#topic">主题</a> 的实时状态。</p>
 <p>The dashboard is a data collector that polls stats from all the brokers in a Pulsar instance (across multiple clusters) and stores all the information in a <a href="https://www.postgresql.org/">PostgreSQL</a> database.</p>
 <p>A <a href="https://www.djangoproject.com">Django</a> web app is used to render the collected data.</p>
 <h2><a class="anchor" aria-hidden="true" id="install"></a><a href="#install" 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- [...]
diff --git a/content/docs/zh-CN/2.1.1-incubating/administration-dashboard/index.html b/content/docs/zh-CN/2.1.1-incubating/administration-dashboard/index.html
index f3c9740..935b399 100644
--- a/content/docs/zh-CN/2.1.1-incubating/administration-dashboard/index.html
+++ b/content/docs/zh-CN/2.1.1-incubating/administration-dashboard/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>The Pulsar dashboard · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/2.1.1-incubating/reference-terminology#topic&quot;&gt;topics& [...]
-"/><meta name="docsearch:version" content="2.1.1-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="The Pulsar dashboard · 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;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/2.1.1-incubating/r [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>The Pulsar dashboard · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/2.1.1-incubating/reference-terminology#topic&quot;&gt;主题&lt;/a&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="The Pulsar dashboard · 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;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/2.1.1-incubating/reference-terminology#topic&quot;&gt;主题&lt;/a&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,7 +76,7 @@
                 };
               }
             });
-        </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">The Pulsar dashboard</h1></header><article><div><span><p>The Pulsar dashboard is a web application that enables users to monitor current stats for all <a href="/docs/zh-CN/2.1.1-incubating/ [...]
+        </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">The Pulsar dashboard</h1></header><article><div><span><p>Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 <a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#topic">主题</a> 的实时状态。</p>
 <p>The dashboard is a data collector that polls stats from all the brokers in a Pulsar instance (across multiple clusters) and stores all the information in a <a href="https://www.postgresql.org/">PostgreSQL</a> database.</p>
 <p>A <a href="https://www.djangoproject.com">Django</a> web app is used to render the collected data.</p>
 <h2><a class="anchor" aria-hidden="true" id="install"></a><a href="#install" 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- [...]
diff --git a/content/docs/zh-CN/2.1.1-incubating/client-libraries-websocket.html b/content/docs/zh-CN/2.1.1-incubating/client-libraries-websocket.html
index f5b2d48..551b904 100644
--- a/content/docs/zh-CN/2.1.1-incubating/client-libraries-websocket.html
+++ b/content/docs/zh-CN/2.1.1-incubating/client-libraries-websocket.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>Pulsar&#x27;s WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot;/ [...]
-"/><meta name="docsearch:version" content="2.1.1-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar&#x27;s WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互 [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar&#x27;s WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot; [...]
+"/><meta name="docsearch:version" content="2.1.1-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar&#x27;s WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交 [...]
 "/><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,7 +76,7 @@
                 };
               }
             });
-        </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">Pulsar&#x27;s WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API">WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进行 [...]
+        </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">Pulsar&#x27;s WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API"> WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进 [...]
 <blockquote>
 <p>你可以将 Pulsar 的 WebSocket API 与任何的 WebSocket 客户端库一起使用。请参阅<a href="#client-examples">下面</a>的 Python 和 Node.js 示例。</p>
 </blockquote>
@@ -117,7 +117,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数"></a><a href="#查询参数" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>sendTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">发送超时(默认值:30秒)</td></tr>
@@ -141,7 +141,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>payload</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Base-64 编码的 payload</td></tr>
@@ -167,7 +167,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>result</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left"><code>ok</code> 要么成功发送,要么发送错误,要么发送不成功</td></tr>
@@ -178,16 +178,14 @@
 <h3><a class="anchor" aria-hidden="true" id="消费端"></a><a href="#消费端" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.2 [...]
 <p>消费端要求您在 URL 中指定租户,命名空间和主题以及订阅:</p>
 <pre><code class="hljs css language-http">ws://broker-service-url:8080/ws/v2/consumer/persistent/:tenant/:namespace/:topic/:subscription
-
 </code></pre>
 <h5><a class="anchor" aria-hidden="true" id="查询参数-1"></a><a href="#查询参数-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
-<tr><td style="text-align:left">`ackTimeoutMillis</td></tr>
-<tr><td style="text-align:left">`</td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
+<tr><td style="text-align:left"><code>ackTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
 <tr><td style="text-align:left"><code>subscriptionType</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left"><a href="https://pulsar.incubator.apache.org/api/client/index.html?org/apache/pulsar/client/api/SubscriptionType.html">Subscription type</a>: <code>Exclusive</code>, <code>Failover</code>, <code>Shared</code></td></tr>
 <tr><td style="text-align:left">`receiverQueueSize</td></tr>
 <tr><td style="text-align:left">`</td><td style="text-align:left">int</td><td style="text-align:left">no</td><td style="text-align:left">消费者接收队列大小 (默认: 1000)</td></tr>
@@ -208,7 +206,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -227,7 +225,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
@@ -240,7 +238,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数-2"></a><a href="#查询参数-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>readerName</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left">Reader name</td></tr>
@@ -260,7 +258,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -279,7 +277,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
diff --git a/content/docs/zh-CN/2.1.1-incubating/client-libraries-websocket/index.html b/content/docs/zh-CN/2.1.1-incubating/client-libraries-websocket/index.html
index f5b2d48..551b904 100644
--- a/content/docs/zh-CN/2.1.1-incubating/client-libraries-websocket/index.html
+++ b/content/docs/zh-CN/2.1.1-incubating/client-libraries-websocket/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>Pulsar&#x27;s WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot;/ [...]
-"/><meta name="docsearch:version" content="2.1.1-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar&#x27;s WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互 [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar&#x27;s WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot; [...]
+"/><meta name="docsearch:version" content="2.1.1-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar&#x27;s WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交 [...]
 "/><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,7 +76,7 @@
                 };
               }
             });
-        </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">Pulsar&#x27;s WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API">WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进行 [...]
+        </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">Pulsar&#x27;s WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API"> WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进 [...]
 <blockquote>
 <p>你可以将 Pulsar 的 WebSocket API 与任何的 WebSocket 客户端库一起使用。请参阅<a href="#client-examples">下面</a>的 Python 和 Node.js 示例。</p>
 </blockquote>
@@ -117,7 +117,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数"></a><a href="#查询参数" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>sendTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">发送超时(默认值:30秒)</td></tr>
@@ -141,7 +141,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>payload</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Base-64 编码的 payload</td></tr>
@@ -167,7 +167,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>result</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left"><code>ok</code> 要么成功发送,要么发送错误,要么发送不成功</td></tr>
@@ -178,16 +178,14 @@
 <h3><a class="anchor" aria-hidden="true" id="消费端"></a><a href="#消费端" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.2 [...]
 <p>消费端要求您在 URL 中指定租户,命名空间和主题以及订阅:</p>
 <pre><code class="hljs css language-http">ws://broker-service-url:8080/ws/v2/consumer/persistent/:tenant/:namespace/:topic/:subscription
-
 </code></pre>
 <h5><a class="anchor" aria-hidden="true" id="查询参数-1"></a><a href="#查询参数-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
-<tr><td style="text-align:left">`ackTimeoutMillis</td></tr>
-<tr><td style="text-align:left">`</td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
+<tr><td style="text-align:left"><code>ackTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
 <tr><td style="text-align:left"><code>subscriptionType</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left"><a href="https://pulsar.incubator.apache.org/api/client/index.html?org/apache/pulsar/client/api/SubscriptionType.html">Subscription type</a>: <code>Exclusive</code>, <code>Failover</code>, <code>Shared</code></td></tr>
 <tr><td style="text-align:left">`receiverQueueSize</td></tr>
 <tr><td style="text-align:left">`</td><td style="text-align:left">int</td><td style="text-align:left">no</td><td style="text-align:left">消费者接收队列大小 (默认: 1000)</td></tr>
@@ -208,7 +206,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -227,7 +225,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
@@ -240,7 +238,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数-2"></a><a href="#查询参数-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>readerName</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left">Reader name</td></tr>
@@ -260,7 +258,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -279,7 +277,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
diff --git a/content/docs/zh-CN/2.2.0/administration-dashboard.html b/content/docs/zh-CN/2.2.0/administration-dashboard.html
index f313ea0..8bb0413 100644
--- a/content/docs/zh-CN/2.2.0/administration-dashboard.html
+++ b/content/docs/zh-CN/2.2.0/administration-dashboard.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>The Pulsar dashboard · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/2.2.0/reference-terminology#topic&quot;&gt;topics&lt;/a&gt; i [...]
-"/><meta name="docsearch:version" content="2.2.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="The Pulsar dashboard · 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;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/2.2.0/reference-terminology#t [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>The Pulsar dashboard · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/2.2.0/reference-terminology#topic&quot;&gt;主题&lt;/a&gt; 的实时状态。&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.2.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="The Pulsar dashboard · 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;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/2.2.0/reference-terminology#topic&quot;&gt;主题&lt;/a&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,7 +76,7 @@
                 };
               }
             });
-        </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">The Pulsar dashboard</h1></header><article><div><span><p>The Pulsar dashboard is a web application that enables users to monitor current stats for all <a href="/docs/zh-CN/2.2.0/reference-t [...]
+        </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">The Pulsar dashboard</h1></header><article><div><span><p>Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 <a href="/docs/zh-CN/2.2.0/reference-terminology#topic">主题</a> 的实时状态。</p>
 <p>The dashboard is a data collector that polls stats from all the brokers in a Pulsar instance (across multiple clusters) and stores all the information in a <a href="https://www.postgresql.org/">PostgreSQL</a> database.</p>
 <p>A <a href="https://www.djangoproject.com">Django</a> web app is used to render the collected data.</p>
 <h2><a class="anchor" aria-hidden="true" id="install"></a><a href="#install" 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- [...]
diff --git a/content/docs/zh-CN/2.2.0/administration-dashboard/index.html b/content/docs/zh-CN/2.2.0/administration-dashboard/index.html
index f313ea0..8bb0413 100644
--- a/content/docs/zh-CN/2.2.0/administration-dashboard/index.html
+++ b/content/docs/zh-CN/2.2.0/administration-dashboard/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>The Pulsar dashboard · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/2.2.0/reference-terminology#topic&quot;&gt;topics&lt;/a&gt; i [...]
-"/><meta name="docsearch:version" content="2.2.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="The Pulsar dashboard · 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;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/2.2.0/reference-terminology#t [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>The Pulsar dashboard · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/2.2.0/reference-terminology#topic&quot;&gt;主题&lt;/a&gt; 的实时状态。&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.2.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="The Pulsar dashboard · 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;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/2.2.0/reference-terminology#topic&quot;&gt;主题&lt;/a&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,7 +76,7 @@
                 };
               }
             });
-        </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">The Pulsar dashboard</h1></header><article><div><span><p>The Pulsar dashboard is a web application that enables users to monitor current stats for all <a href="/docs/zh-CN/2.2.0/reference-t [...]
+        </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">The Pulsar dashboard</h1></header><article><div><span><p>Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 <a href="/docs/zh-CN/2.2.0/reference-terminology#topic">主题</a> 的实时状态。</p>
 <p>The dashboard is a data collector that polls stats from all the brokers in a Pulsar instance (across multiple clusters) and stores all the information in a <a href="https://www.postgresql.org/">PostgreSQL</a> database.</p>
 <p>A <a href="https://www.djangoproject.com">Django</a> web app is used to render the collected data.</p>
 <h2><a class="anchor" aria-hidden="true" id="install"></a><a href="#install" 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- [...]
diff --git a/content/docs/zh-CN/2.2.0/client-libraries-websocket.html b/content/docs/zh-CN/2.2.0/client-libraries-websocket.html
index c28191b..21b9fd9 100644
--- a/content/docs/zh-CN/2.2.0/client-libraries-websocket.html
+++ b/content/docs/zh-CN/2.2.0/client-libraries-websocket.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>Pulsar&#x27;s WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot;/ [...]
-"/><meta name="docsearch:version" content="2.2.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar&#x27;s WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar  [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar&#x27;s WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot; [...]
+"/><meta name="docsearch:version" content="2.2.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar&#x27;s WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar [...]
 "/><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,7 +76,7 @@
                 };
               }
             });
-        </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">Pulsar&#x27;s WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API">WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进行 [...]
+        </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">Pulsar&#x27;s WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API"> WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进 [...]
 <blockquote>
 <p>你可以将 Pulsar 的 WebSocket API 与任何的 WebSocket 客户端库一起使用。请参阅<a href="#client-examples">下面</a>的 Python 和 Node.js 示例。</p>
 </blockquote>
@@ -117,7 +117,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数"></a><a href="#查询参数" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>sendTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">发送超时(默认值:30秒)</td></tr>
@@ -141,7 +141,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>payload</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Base-64 编码的 payload</td></tr>
@@ -167,7 +167,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>result</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left"><code>ok</code> 要么成功发送,要么发送错误,要么发送不成功</td></tr>
@@ -178,16 +178,14 @@
 <h3><a class="anchor" aria-hidden="true" id="消费端"></a><a href="#消费端" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.2 [...]
 <p>消费端要求您在 URL 中指定租户,命名空间和主题以及订阅:</p>
 <pre><code class="hljs css language-http">ws://broker-service-url:8080/ws/v2/consumer/persistent/:tenant/:namespace/:topic/:subscription
-
 </code></pre>
 <h5><a class="anchor" aria-hidden="true" id="查询参数-1"></a><a href="#查询参数-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
-<tr><td style="text-align:left">`ackTimeoutMillis</td></tr>
-<tr><td style="text-align:left">`</td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
+<tr><td style="text-align:left"><code>ackTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
 <tr><td style="text-align:left"><code>subscriptionType</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left"><a href="https://pulsar.apache.org/api/client/index.html?org/apache/pulsar/client/api/SubscriptionType.html">订阅类型</a>:<code>Exclusive</code>, <code>Failover</code>, <code>Shared</code></td></tr>
 <tr><td style="text-align:left">`receiverQueueSize</td></tr>
 <tr><td style="text-align:left">`</td><td style="text-align:left">int</td><td style="text-align:left">no</td><td style="text-align:left">消费者接收队列大小 (默认: 1000)</td></tr>
@@ -208,7 +206,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -227,7 +225,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
@@ -240,7 +238,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数-2"></a><a href="#查询参数-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>readerName</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left">Reader name</td></tr>
@@ -260,7 +258,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -279,7 +277,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
diff --git a/content/docs/zh-CN/2.2.0/client-libraries-websocket/index.html b/content/docs/zh-CN/2.2.0/client-libraries-websocket/index.html
index c28191b..21b9fd9 100644
--- a/content/docs/zh-CN/2.2.0/client-libraries-websocket/index.html
+++ b/content/docs/zh-CN/2.2.0/client-libraries-websocket/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>Pulsar&#x27;s WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot;/ [...]
-"/><meta name="docsearch:version" content="2.2.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar&#x27;s WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar  [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar&#x27;s WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot; [...]
+"/><meta name="docsearch:version" content="2.2.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar&#x27;s WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar [...]
 "/><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,7 +76,7 @@
                 };
               }
             });
-        </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">Pulsar&#x27;s WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API">WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进行 [...]
+        </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">Pulsar&#x27;s WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API"> WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进 [...]
 <blockquote>
 <p>你可以将 Pulsar 的 WebSocket API 与任何的 WebSocket 客户端库一起使用。请参阅<a href="#client-examples">下面</a>的 Python 和 Node.js 示例。</p>
 </blockquote>
@@ -117,7 +117,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数"></a><a href="#查询参数" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>sendTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">发送超时(默认值:30秒)</td></tr>
@@ -141,7 +141,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>payload</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Base-64 编码的 payload</td></tr>
@@ -167,7 +167,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>result</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left"><code>ok</code> 要么成功发送,要么发送错误,要么发送不成功</td></tr>
@@ -178,16 +178,14 @@
 <h3><a class="anchor" aria-hidden="true" id="消费端"></a><a href="#消费端" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.2 [...]
 <p>消费端要求您在 URL 中指定租户,命名空间和主题以及订阅:</p>
 <pre><code class="hljs css language-http">ws://broker-service-url:8080/ws/v2/consumer/persistent/:tenant/:namespace/:topic/:subscription
-
 </code></pre>
 <h5><a class="anchor" aria-hidden="true" id="查询参数-1"></a><a href="#查询参数-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
-<tr><td style="text-align:left">`ackTimeoutMillis</td></tr>
-<tr><td style="text-align:left">`</td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
+<tr><td style="text-align:left"><code>ackTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
 <tr><td style="text-align:left"><code>subscriptionType</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left"><a href="https://pulsar.apache.org/api/client/index.html?org/apache/pulsar/client/api/SubscriptionType.html">订阅类型</a>:<code>Exclusive</code>, <code>Failover</code>, <code>Shared</code></td></tr>
 <tr><td style="text-align:left">`receiverQueueSize</td></tr>
 <tr><td style="text-align:left">`</td><td style="text-align:left">int</td><td style="text-align:left">no</td><td style="text-align:left">消费者接收队列大小 (默认: 1000)</td></tr>
@@ -208,7 +206,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -227,7 +225,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
@@ -240,7 +238,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数-2"></a><a href="#查询参数-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>readerName</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left">Reader name</td></tr>
@@ -260,7 +258,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -279,7 +277,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
diff --git a/content/docs/zh-CN/2.2.1/administration-dashboard.html b/content/docs/zh-CN/2.2.1/administration-dashboard.html
index c167e51..f345b08 100644
--- a/content/docs/zh-CN/2.2.1/administration-dashboard.html
+++ b/content/docs/zh-CN/2.2.1/administration-dashboard.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>The Pulsar dashboard · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/2.2.1/reference-terminology#topic&quot;&gt;topics&lt;/a&gt; i [...]
-"/><meta name="docsearch:version" content="2.2.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="The Pulsar dashboard · 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;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/2.2.1/reference-terminology#t [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>The Pulsar dashboard · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/2.2.1/reference-terminology#topic&quot;&gt;主题&lt;/a&gt; 的实时状态。&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.2.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="The Pulsar dashboard · 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;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/2.2.1/reference-terminology#topic&quot;&gt;主题&lt;/a&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,7 +76,7 @@
                 };
               }
             });
-        </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">The Pulsar dashboard</h1></header><article><div><span><p>The Pulsar dashboard is a web application that enables users to monitor current stats for all <a href="/docs/zh-CN/2.2.1/reference-t [...]
+        </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">The Pulsar dashboard</h1></header><article><div><span><p>Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 <a href="/docs/zh-CN/2.2.1/reference-terminology#topic">主题</a> 的实时状态。</p>
 <p>The dashboard is a data collector that polls stats from all the brokers in a Pulsar instance (across multiple clusters) and stores all the information in a <a href="https://www.postgresql.org/">PostgreSQL</a> database.</p>
 <p>A <a href="https://www.djangoproject.com">Django</a> web app is used to render the collected data.</p>
 <h2><a class="anchor" aria-hidden="true" id="install"></a><a href="#install" 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- [...]
diff --git a/content/docs/zh-CN/2.2.1/administration-dashboard/index.html b/content/docs/zh-CN/2.2.1/administration-dashboard/index.html
index c167e51..f345b08 100644
--- a/content/docs/zh-CN/2.2.1/administration-dashboard/index.html
+++ b/content/docs/zh-CN/2.2.1/administration-dashboard/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>The Pulsar dashboard · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/2.2.1/reference-terminology#topic&quot;&gt;topics&lt;/a&gt; i [...]
-"/><meta name="docsearch:version" content="2.2.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="The Pulsar dashboard · 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;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/2.2.1/reference-terminology#t [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>The Pulsar dashboard · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/2.2.1/reference-terminology#topic&quot;&gt;主题&lt;/a&gt; 的实时状态。&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.2.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="The Pulsar dashboard · 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;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/2.2.1/reference-terminology#topic&quot;&gt;主题&lt;/a&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,7 +76,7 @@
                 };
               }
             });
-        </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">The Pulsar dashboard</h1></header><article><div><span><p>The Pulsar dashboard is a web application that enables users to monitor current stats for all <a href="/docs/zh-CN/2.2.1/reference-t [...]
+        </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">The Pulsar dashboard</h1></header><article><div><span><p>Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 <a href="/docs/zh-CN/2.2.1/reference-terminology#topic">主题</a> 的实时状态。</p>
 <p>The dashboard is a data collector that polls stats from all the brokers in a Pulsar instance (across multiple clusters) and stores all the information in a <a href="https://www.postgresql.org/">PostgreSQL</a> database.</p>
 <p>A <a href="https://www.djangoproject.com">Django</a> web app is used to render the collected data.</p>
 <h2><a class="anchor" aria-hidden="true" id="install"></a><a href="#install" 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- [...]
diff --git a/content/docs/zh-CN/2.2.1/client-libraries-websocket.html b/content/docs/zh-CN/2.2.1/client-libraries-websocket.html
index ea5b8e3..959b669 100644
--- a/content/docs/zh-CN/2.2.1/client-libraries-websocket.html
+++ b/content/docs/zh-CN/2.2.1/client-libraries-websocket.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>Pulsar&#x27;s WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot;/ [...]
-"/><meta name="docsearch:version" content="2.2.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar&#x27;s WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar  [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar&#x27;s WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot; [...]
+"/><meta name="docsearch:version" content="2.2.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar&#x27;s WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar [...]
 "/><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,7 +76,7 @@
                 };
               }
             });
-        </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">Pulsar&#x27;s WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API">WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进行 [...]
+        </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">Pulsar&#x27;s WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API"> WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进 [...]
 <blockquote>
 <p>You can use Pulsar's WebSocket API with any WebSocket client library. See examples for Python and Node.js <a href="#client-examples">below</a>.</p>
 </blockquote>
@@ -117,7 +117,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数"></a><a href="#查询参数" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>sendTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">发送超时(默认值:30秒)</td></tr>
@@ -141,7 +141,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>payload</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Base-64 编码的 payload</td></tr>
@@ -167,7 +167,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>result</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left"><code>ok</code> 要么成功发送,要么发送错误,要么发送不成功</td></tr>
@@ -178,16 +178,14 @@
 <h3><a class="anchor" aria-hidden="true" id="消费端"></a><a href="#消费端" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.2 [...]
 <p>消费端要求您在 URL 中指定租户,命名空间和主题以及订阅:</p>
 <pre><code class="hljs css language-http">ws://broker-service-url:8080/ws/v2/consumer/persistent/:tenant/:namespace/:topic/:subscription
-
 </code></pre>
 <h5><a class="anchor" aria-hidden="true" id="查询参数-1"></a><a href="#查询参数-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
-<tr><td style="text-align:left">`ackTimeoutMillis</td></tr>
-<tr><td style="text-align:left">`</td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
+<tr><td style="text-align:left"><code>ackTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
 <tr><td style="text-align:left"><code>subscriptionType</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left"><a href="https://pulsar.apache.org/api/client/index.html?org/apache/pulsar/client/api/SubscriptionType.html">订阅类型</a>:<code>Exclusive</code>, <code>Failover</code>, <code>Shared</code></td></tr>
 <tr><td style="text-align:left">`receiverQueueSize</td></tr>
 <tr><td style="text-align:left">`</td><td style="text-align:left">int</td><td style="text-align:left">no</td><td style="text-align:left">消费者接收队列大小 (默认: 1000)</td></tr>
@@ -215,7 +213,7 @@
 `</pre> 
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -234,7 +232,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
@@ -253,7 +251,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>type</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Type of command. Must be <code>permit</code></td></tr>
@@ -268,7 +266,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数-2"></a><a href="#查询参数-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>readerName</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left">Reader name</td></tr>
@@ -288,7 +286,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -307,7 +305,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
diff --git a/content/docs/zh-CN/2.2.1/client-libraries-websocket/index.html b/content/docs/zh-CN/2.2.1/client-libraries-websocket/index.html
index ea5b8e3..959b669 100644
--- a/content/docs/zh-CN/2.2.1/client-libraries-websocket/index.html
+++ b/content/docs/zh-CN/2.2.1/client-libraries-websocket/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>Pulsar&#x27;s WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot;/ [...]
-"/><meta name="docsearch:version" content="2.2.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar&#x27;s WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar  [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar&#x27;s WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot; [...]
+"/><meta name="docsearch:version" content="2.2.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar&#x27;s WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar [...]
 "/><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,7 +76,7 @@
                 };
               }
             });
-        </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">Pulsar&#x27;s WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API">WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进行 [...]
+        </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">Pulsar&#x27;s WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API"> WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进 [...]
 <blockquote>
 <p>You can use Pulsar's WebSocket API with any WebSocket client library. See examples for Python and Node.js <a href="#client-examples">below</a>.</p>
 </blockquote>
@@ -117,7 +117,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数"></a><a href="#查询参数" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>sendTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">发送超时(默认值:30秒)</td></tr>
@@ -141,7 +141,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>payload</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Base-64 编码的 payload</td></tr>
@@ -167,7 +167,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>result</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left"><code>ok</code> 要么成功发送,要么发送错误,要么发送不成功</td></tr>
@@ -178,16 +178,14 @@
 <h3><a class="anchor" aria-hidden="true" id="消费端"></a><a href="#消费端" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.2 [...]
 <p>消费端要求您在 URL 中指定租户,命名空间和主题以及订阅:</p>
 <pre><code class="hljs css language-http">ws://broker-service-url:8080/ws/v2/consumer/persistent/:tenant/:namespace/:topic/:subscription
-
 </code></pre>
 <h5><a class="anchor" aria-hidden="true" id="查询参数-1"></a><a href="#查询参数-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
-<tr><td style="text-align:left">`ackTimeoutMillis</td></tr>
-<tr><td style="text-align:left">`</td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
+<tr><td style="text-align:left"><code>ackTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
 <tr><td style="text-align:left"><code>subscriptionType</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left"><a href="https://pulsar.apache.org/api/client/index.html?org/apache/pulsar/client/api/SubscriptionType.html">订阅类型</a>:<code>Exclusive</code>, <code>Failover</code>, <code>Shared</code></td></tr>
 <tr><td style="text-align:left">`receiverQueueSize</td></tr>
 <tr><td style="text-align:left">`</td><td style="text-align:left">int</td><td style="text-align:left">no</td><td style="text-align:left">消费者接收队列大小 (默认: 1000)</td></tr>
@@ -215,7 +213,7 @@
 `</pre> 
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -234,7 +232,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
@@ -253,7 +251,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>type</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Type of command. Must be <code>permit</code></td></tr>
@@ -268,7 +266,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数-2"></a><a href="#查询参数-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>readerName</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left">Reader name</td></tr>
@@ -288,7 +286,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -307,7 +305,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
diff --git a/content/docs/zh-CN/2.3.0/administration-dashboard.html b/content/docs/zh-CN/2.3.0/administration-dashboard.html
index a47f885..5f193be 100644
--- a/content/docs/zh-CN/2.3.0/administration-dashboard.html
+++ b/content/docs/zh-CN/2.3.0/administration-dashboard.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>The Pulsar dashboard · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/2.3.0/reference-terminology#topic&quot;&gt;topics&lt;/a&gt; i [...]
-"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="The Pulsar dashboard · 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;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/2.3.0/reference-terminology#t [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>The Pulsar dashboard · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/2.3.0/reference-terminology#topic&quot;&gt;主题&lt;/a&gt; 的实时状态。&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="The Pulsar dashboard · 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;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/2.3.0/reference-terminology#topic&quot;&gt;主题&lt;/a&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,7 +76,7 @@
                 };
               }
             });
-        </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">The Pulsar dashboard</h1></header><article><div><span><p>The Pulsar dashboard is a web application that enables users to monitor current stats for all <a href="/docs/zh-CN/2.3.0/reference-t [...]
+        </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">The Pulsar dashboard</h1></header><article><div><span><p>Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 <a href="/docs/zh-CN/2.3.0/reference-terminology#topic">主题</a> 的实时状态。</p>
 <p>The dashboard is a data collector that polls stats from all the brokers in a Pulsar instance (across multiple clusters) and stores all the information in a <a href="https://www.postgresql.org/">PostgreSQL</a> database.</p>
 <p>A <a href="https://www.djangoproject.com">Django</a> web app is used to render the collected data.</p>
 <h2><a class="anchor" aria-hidden="true" id="install"></a><a href="#install" 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- [...]
diff --git a/content/docs/zh-CN/2.3.0/administration-dashboard/index.html b/content/docs/zh-CN/2.3.0/administration-dashboard/index.html
index a47f885..5f193be 100644
--- a/content/docs/zh-CN/2.3.0/administration-dashboard/index.html
+++ b/content/docs/zh-CN/2.3.0/administration-dashboard/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>The Pulsar dashboard · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/2.3.0/reference-terminology#topic&quot;&gt;topics&lt;/a&gt; i [...]
-"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="The Pulsar dashboard · 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;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/2.3.0/reference-terminology#t [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>The Pulsar dashboard · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/2.3.0/reference-terminology#topic&quot;&gt;主题&lt;/a&gt; 的实时状态。&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="The Pulsar dashboard · 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;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/2.3.0/reference-terminology#topic&quot;&gt;主题&lt;/a&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,7 +76,7 @@
                 };
               }
             });
-        </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">The Pulsar dashboard</h1></header><article><div><span><p>The Pulsar dashboard is a web application that enables users to monitor current stats for all <a href="/docs/zh-CN/2.3.0/reference-t [...]
+        </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">The Pulsar dashboard</h1></header><article><div><span><p>Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 <a href="/docs/zh-CN/2.3.0/reference-terminology#topic">主题</a> 的实时状态。</p>
 <p>The dashboard is a data collector that polls stats from all the brokers in a Pulsar instance (across multiple clusters) and stores all the information in a <a href="https://www.postgresql.org/">PostgreSQL</a> database.</p>
 <p>A <a href="https://www.djangoproject.com">Django</a> web app is used to render the collected data.</p>
 <h2><a class="anchor" aria-hidden="true" id="install"></a><a href="#install" 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- [...]
diff --git a/content/docs/zh-CN/2.3.0/client-libraries-websocket.html b/content/docs/zh-CN/2.3.0/client-libraries-websocket.html
index af1381b..9e8d700 100644
--- a/content/docs/zh-CN/2.3.0/client-libraries-websocket.html
+++ b/content/docs/zh-CN/2.3.0/client-libraries-websocket.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>Pulsar&#x27;s WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot;/ [...]
-"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar&#x27;s WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar  [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar&#x27;s WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot; [...]
+"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar&#x27;s WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar [...]
 "/><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,7 +76,7 @@
                 };
               }
             });
-        </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">Pulsar&#x27;s WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API">WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进行 [...]
+        </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">Pulsar&#x27;s WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API"> WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进 [...]
 <blockquote>
 <p>You can use Pulsar's WebSocket API with any WebSocket client library. See examples for Python and Node.js <a href="#client-examples">below</a>.</p>
 </blockquote>
@@ -117,7 +117,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数"></a><a href="#查询参数" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>sendTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">发送超时(默认值:30秒)</td></tr>
@@ -141,7 +141,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>payload</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Base-64 编码的 payload</td></tr>
@@ -167,7 +167,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>result</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left"><code>ok</code> 要么成功发送,要么发送错误,要么发送不成功</td></tr>
@@ -178,16 +178,14 @@
 <h3><a class="anchor" aria-hidden="true" id="消费端"></a><a href="#消费端" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.2 [...]
 <p>消费端要求您在 URL 中指定租户,命名空间和主题以及订阅:</p>
 <pre><code class="hljs css language-http">ws://broker-service-url:8080/ws/v2/consumer/persistent/:tenant/:namespace/:topic/:subscription
-
 </code></pre>
 <h5><a class="anchor" aria-hidden="true" id="查询参数-1"></a><a href="#查询参数-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
-<tr><td style="text-align:left">`ackTimeoutMillis</td></tr>
-<tr><td style="text-align:left">`</td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
+<tr><td style="text-align:left"><code>ackTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
 <tr><td style="text-align:left"><code>subscriptionType</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left"><a href="https://pulsar.apache.org/api/client/index.html?org/apache/pulsar/client/api/SubscriptionType.html">订阅类型</a>:<code>Exclusive</code>, <code>Failover</code>, <code>Shared</code></td></tr>
 <tr><td style="text-align:left">`receiverQueueSize</td></tr>
 <tr><td style="text-align:left">`</td><td style="text-align:left">int</td><td style="text-align:left">no</td><td style="text-align:left">消费者接收队列大小 (默认: 1000)</td></tr>
@@ -215,7 +213,7 @@
 `</pre> 
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -234,7 +232,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
@@ -253,7 +251,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>type</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Type of command. Must be <code>permit</code></td></tr>
@@ -268,7 +266,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数-2"></a><a href="#查询参数-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>readerName</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left">Reader name</td></tr>
@@ -288,7 +286,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -307,7 +305,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
diff --git a/content/docs/zh-CN/2.3.0/client-libraries-websocket/index.html b/content/docs/zh-CN/2.3.0/client-libraries-websocket/index.html
index af1381b..9e8d700 100644
--- a/content/docs/zh-CN/2.3.0/client-libraries-websocket/index.html
+++ b/content/docs/zh-CN/2.3.0/client-libraries-websocket/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>Pulsar&#x27;s WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot;/ [...]
-"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar&#x27;s WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar  [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar&#x27;s WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot; [...]
+"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar&#x27;s WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar [...]
 "/><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,7 +76,7 @@
                 };
               }
             });
-        </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">Pulsar&#x27;s WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API">WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进行 [...]
+        </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">Pulsar&#x27;s WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API"> WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进 [...]
 <blockquote>
 <p>You can use Pulsar's WebSocket API with any WebSocket client library. See examples for Python and Node.js <a href="#client-examples">below</a>.</p>
 </blockquote>
@@ -117,7 +117,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数"></a><a href="#查询参数" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>sendTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">发送超时(默认值:30秒)</td></tr>
@@ -141,7 +141,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>payload</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Base-64 编码的 payload</td></tr>
@@ -167,7 +167,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>result</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left"><code>ok</code> 要么成功发送,要么发送错误,要么发送不成功</td></tr>
@@ -178,16 +178,14 @@
 <h3><a class="anchor" aria-hidden="true" id="消费端"></a><a href="#消费端" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.2 [...]
 <p>消费端要求您在 URL 中指定租户,命名空间和主题以及订阅:</p>
 <pre><code class="hljs css language-http">ws://broker-service-url:8080/ws/v2/consumer/persistent/:tenant/:namespace/:topic/:subscription
-
 </code></pre>
 <h5><a class="anchor" aria-hidden="true" id="查询参数-1"></a><a href="#查询参数-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
-<tr><td style="text-align:left">`ackTimeoutMillis</td></tr>
-<tr><td style="text-align:left">`</td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
+<tr><td style="text-align:left"><code>ackTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
 <tr><td style="text-align:left"><code>subscriptionType</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left"><a href="https://pulsar.apache.org/api/client/index.html?org/apache/pulsar/client/api/SubscriptionType.html">订阅类型</a>:<code>Exclusive</code>, <code>Failover</code>, <code>Shared</code></td></tr>
 <tr><td style="text-align:left">`receiverQueueSize</td></tr>
 <tr><td style="text-align:left">`</td><td style="text-align:left">int</td><td style="text-align:left">no</td><td style="text-align:left">消费者接收队列大小 (默认: 1000)</td></tr>
@@ -215,7 +213,7 @@
 `</pre> 
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -234,7 +232,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
@@ -253,7 +251,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>type</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Type of command. Must be <code>permit</code></td></tr>
@@ -268,7 +266,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数-2"></a><a href="#查询参数-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>readerName</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left">Reader name</td></tr>
@@ -288,7 +286,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -307,7 +305,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
diff --git a/content/docs/zh-CN/2.3.1/administration-dashboard.html b/content/docs/zh-CN/2.3.1/administration-dashboard.html
index 2fce810..b31b5ce 100644
--- a/content/docs/zh-CN/2.3.1/administration-dashboard.html
+++ b/content/docs/zh-CN/2.3.1/administration-dashboard.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>The Pulsar dashboard · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/2.3.1/reference-terminology#topic&quot;&gt;topics&lt;/a&gt; i [...]
-"/><meta name="docsearch:version" content="2.3.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="The Pulsar dashboard · 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;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/2.3.1/reference-terminology#t [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>The Pulsar dashboard · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/2.3.1/reference-terminology#topic&quot;&gt;主题&lt;/a&gt; 的实时状态。&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.3.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="The Pulsar dashboard · 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;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/2.3.1/reference-terminology#topic&quot;&gt;主题&lt;/a&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,7 +76,7 @@
                 };
               }
             });
-        </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">The Pulsar dashboard</h1></header><article><div><span><p>The Pulsar dashboard is a web application that enables users to monitor current stats for all <a href="/docs/zh-CN/2.3.1/reference-t [...]
+        </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">The Pulsar dashboard</h1></header><article><div><span><p>Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 <a href="/docs/zh-CN/2.3.1/reference-terminology#topic">主题</a> 的实时状态。</p>
 <p>The dashboard is a data collector that polls stats from all the brokers in a Pulsar instance (across multiple clusters) and stores all the information in a <a href="https://www.postgresql.org/">PostgreSQL</a> database.</p>
 <p>A <a href="https://www.djangoproject.com">Django</a> web app is used to render the collected data.</p>
 <h2><a class="anchor" aria-hidden="true" id="install"></a><a href="#install" 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- [...]
diff --git a/content/docs/zh-CN/2.3.1/administration-dashboard/index.html b/content/docs/zh-CN/2.3.1/administration-dashboard/index.html
index 2fce810..b31b5ce 100644
--- a/content/docs/zh-CN/2.3.1/administration-dashboard/index.html
+++ b/content/docs/zh-CN/2.3.1/administration-dashboard/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>The Pulsar dashboard · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/2.3.1/reference-terminology#topic&quot;&gt;topics&lt;/a&gt; i [...]
-"/><meta name="docsearch:version" content="2.3.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="The Pulsar dashboard · 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;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/2.3.1/reference-terminology#t [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>The Pulsar dashboard · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/2.3.1/reference-terminology#topic&quot;&gt;主题&lt;/a&gt; 的实时状态。&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.3.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="The Pulsar dashboard · 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;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/2.3.1/reference-terminology#topic&quot;&gt;主题&lt;/a&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,7 +76,7 @@
                 };
               }
             });
-        </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">The Pulsar dashboard</h1></header><article><div><span><p>The Pulsar dashboard is a web application that enables users to monitor current stats for all <a href="/docs/zh-CN/2.3.1/reference-t [...]
+        </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">The Pulsar dashboard</h1></header><article><div><span><p>Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 <a href="/docs/zh-CN/2.3.1/reference-terminology#topic">主题</a> 的实时状态。</p>
 <p>The dashboard is a data collector that polls stats from all the brokers in a Pulsar instance (across multiple clusters) and stores all the information in a <a href="https://www.postgresql.org/">PostgreSQL</a> database.</p>
 <p>A <a href="https://www.djangoproject.com">Django</a> web app is used to render the collected data.</p>
 <h2><a class="anchor" aria-hidden="true" id="install"></a><a href="#install" 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- [...]
diff --git a/content/docs/zh-CN/2.3.1/client-libraries-websocket.html b/content/docs/zh-CN/2.3.1/client-libraries-websocket.html
index c01f1d1..525ff89 100644
--- a/content/docs/zh-CN/2.3.1/client-libraries-websocket.html
+++ b/content/docs/zh-CN/2.3.1/client-libraries-websocket.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>Pulsar&#x27;s WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot;/ [...]
-"/><meta name="docsearch:version" content="2.3.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar&#x27;s WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar  [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar&#x27;s WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot; [...]
+"/><meta name="docsearch:version" content="2.3.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar&#x27;s WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar [...]
 "/><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,7 +76,7 @@
                 };
               }
             });
-        </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">Pulsar&#x27;s WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API">WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进行 [...]
+        </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">Pulsar&#x27;s WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API"> WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进 [...]
 <blockquote>
 <p>You can use Pulsar's WebSocket API with any WebSocket client library. See examples for Python and Node.js <a href="#client-examples">below</a>.</p>
 </blockquote>
@@ -117,7 +117,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数"></a><a href="#查询参数" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>sendTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">发送超时(默认值:30秒)</td></tr>
@@ -141,7 +141,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>payload</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Base-64 编码的 payload</td></tr>
@@ -167,7 +167,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>result</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left"><code>ok</code> 要么成功发送,要么发送错误,要么发送不成功</td></tr>
@@ -178,16 +178,14 @@
 <h3><a class="anchor" aria-hidden="true" id="消费端"></a><a href="#消费端" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.2 [...]
 <p>消费端要求您在 URL 中指定租户,命名空间和主题以及订阅:</p>
 <pre><code class="hljs css language-http">ws://broker-service-url:8080/ws/v2/consumer/persistent/:tenant/:namespace/:topic/:subscription
-
 </code></pre>
 <h5><a class="anchor" aria-hidden="true" id="查询参数-1"></a><a href="#查询参数-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
-<tr><td style="text-align:left">`ackTimeoutMillis</td></tr>
-<tr><td style="text-align:left">`</td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
+<tr><td style="text-align:left"><code>ackTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
 <tr><td style="text-align:left"><code>subscriptionType</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left"><a href="https://pulsar.apache.org/api/client/index.html?org/apache/pulsar/client/api/SubscriptionType.html">订阅类型</a>:<code>Exclusive</code>, <code>Failover</code>, <code>Shared</code></td></tr>
 <tr><td style="text-align:left">`receiverQueueSize</td></tr>
 <tr><td style="text-align:left">`</td><td style="text-align:left">int</td><td style="text-align:left">no</td><td style="text-align:left">消费者接收队列大小 (默认: 1000)</td></tr>
@@ -215,7 +213,7 @@
 `</pre> 
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -234,7 +232,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
@@ -253,7 +251,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>type</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Type of command. Must be <code>permit</code></td></tr>
@@ -268,7 +266,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数-2"></a><a href="#查询参数-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>readerName</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left">Reader name</td></tr>
@@ -288,7 +286,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -307,7 +305,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
diff --git a/content/docs/zh-CN/2.3.1/client-libraries-websocket/index.html b/content/docs/zh-CN/2.3.1/client-libraries-websocket/index.html
index c01f1d1..525ff89 100644
--- a/content/docs/zh-CN/2.3.1/client-libraries-websocket/index.html
+++ b/content/docs/zh-CN/2.3.1/client-libraries-websocket/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>Pulsar&#x27;s WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot;/ [...]
-"/><meta name="docsearch:version" content="2.3.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar&#x27;s WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar  [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar&#x27;s WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot; [...]
+"/><meta name="docsearch:version" content="2.3.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar&#x27;s WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar [...]
 "/><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,7 +76,7 @@
                 };
               }
             });
-        </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">Pulsar&#x27;s WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API">WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进行 [...]
+        </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">Pulsar&#x27;s WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API"> WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进 [...]
 <blockquote>
 <p>You can use Pulsar's WebSocket API with any WebSocket client library. See examples for Python and Node.js <a href="#client-examples">below</a>.</p>
 </blockquote>
@@ -117,7 +117,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数"></a><a href="#查询参数" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>sendTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">发送超时(默认值:30秒)</td></tr>
@@ -141,7 +141,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>payload</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Base-64 编码的 payload</td></tr>
@@ -167,7 +167,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>result</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left"><code>ok</code> 要么成功发送,要么发送错误,要么发送不成功</td></tr>
@@ -178,16 +178,14 @@
 <h3><a class="anchor" aria-hidden="true" id="消费端"></a><a href="#消费端" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.2 [...]
 <p>消费端要求您在 URL 中指定租户,命名空间和主题以及订阅:</p>
 <pre><code class="hljs css language-http">ws://broker-service-url:8080/ws/v2/consumer/persistent/:tenant/:namespace/:topic/:subscription
-
 </code></pre>
 <h5><a class="anchor" aria-hidden="true" id="查询参数-1"></a><a href="#查询参数-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
-<tr><td style="text-align:left">`ackTimeoutMillis</td></tr>
-<tr><td style="text-align:left">`</td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
+<tr><td style="text-align:left"><code>ackTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
 <tr><td style="text-align:left"><code>subscriptionType</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left"><a href="https://pulsar.apache.org/api/client/index.html?org/apache/pulsar/client/api/SubscriptionType.html">订阅类型</a>:<code>Exclusive</code>, <code>Failover</code>, <code>Shared</code></td></tr>
 <tr><td style="text-align:left">`receiverQueueSize</td></tr>
 <tr><td style="text-align:left">`</td><td style="text-align:left">int</td><td style="text-align:left">no</td><td style="text-align:left">消费者接收队列大小 (默认: 1000)</td></tr>
@@ -215,7 +213,7 @@
 `</pre> 
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -234,7 +232,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
@@ -253,7 +251,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>type</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Type of command. Must be <code>permit</code></td></tr>
@@ -268,7 +266,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数-2"></a><a href="#查询参数-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>readerName</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left">Reader name</td></tr>
@@ -288,7 +286,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -307,7 +305,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
diff --git a/content/docs/zh-CN/administration-dashboard.html b/content/docs/zh-CN/administration-dashboard.html
index 72082a2..7e39204 100644
--- a/content/docs/zh-CN/administration-dashboard.html
+++ b/content/docs/zh-CN/administration-dashboard.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>The Pulsar dashboard · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/reference-terminology#topic&quot;&gt;topics&lt;/a&gt; in tabu [...]
-"/><meta name="docsearch:version" content="2.3.2"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="The Pulsar dashboard · 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;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/reference-terminology#topic&q [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>The Pulsar dashboard · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/reference-terminology#topic&quot;&gt;主题&lt;/a&gt; 的实时状态。&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.3.2"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="The Pulsar dashboard · 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;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/reference-terminology#topic&quot;&gt;主题&lt;/a&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,7 +76,7 @@
                 };
               }
             });
-        </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">The Pulsar dashboard</h1></header><article><div><span><p>The Pulsar dashboard is a web application that enables users to monitor current stats for all <a href="/docs/zh-CN/reference-termino [...]
+        </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">The Pulsar dashboard</h1></header><article><div><span><p>Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 <a href="/docs/zh-CN/reference-terminology#topic">主题</a> 的实时状态。</p>
 <p>The dashboard is a data collector that polls stats from all the brokers in a Pulsar instance (across multiple clusters) and stores all the information in a <a href="https://www.postgresql.org/">PostgreSQL</a> database.</p>
 <p>A <a href="https://www.djangoproject.com">Django</a> web app is used to render the collected data.</p>
 <h2><a class="anchor" aria-hidden="true" id="install"></a><a href="#install" 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- [...]
diff --git a/content/docs/zh-CN/administration-dashboard/index.html b/content/docs/zh-CN/administration-dashboard/index.html
index 72082a2..7e39204 100644
--- a/content/docs/zh-CN/administration-dashboard/index.html
+++ b/content/docs/zh-CN/administration-dashboard/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>The Pulsar dashboard · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/reference-terminology#topic&quot;&gt;topics&lt;/a&gt; in tabu [...]
-"/><meta name="docsearch:version" content="2.3.2"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="The Pulsar dashboard · 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;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/reference-terminology#topic&q [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>The Pulsar dashboard · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/reference-terminology#topic&quot;&gt;主题&lt;/a&gt; 的实时状态。&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.3.2"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="The Pulsar dashboard · 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;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/reference-terminology#topic&quot;&gt;主题&lt;/a&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,7 +76,7 @@
                 };
               }
             });
-        </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">The Pulsar dashboard</h1></header><article><div><span><p>The Pulsar dashboard is a web application that enables users to monitor current stats for all <a href="/docs/zh-CN/reference-termino [...]
+        </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">The Pulsar dashboard</h1></header><article><div><span><p>Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 <a href="/docs/zh-CN/reference-terminology#topic">主题</a> 的实时状态。</p>
 <p>The dashboard is a data collector that polls stats from all the brokers in a Pulsar instance (across multiple clusters) and stores all the information in a <a href="https://www.postgresql.org/">PostgreSQL</a> database.</p>
 <p>A <a href="https://www.djangoproject.com">Django</a> web app is used to render the collected data.</p>
 <h2><a class="anchor" aria-hidden="true" id="install"></a><a href="#install" 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- [...]
diff --git a/content/docs/zh-CN/client-libraries-websocket.html b/content/docs/zh-CN/client-libraries-websocket.html
index 4bd412f..9da84fe 100644
--- a/content/docs/zh-CN/client-libraries-websocket.html
+++ b/content/docs/zh-CN/client-libraries-websocket.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>Pulsar&#x27;s WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot;/ [...]
-"/><meta name="docsearch:version" content="2.3.2"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar&#x27;s WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar  [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar&#x27;s WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot; [...]
+"/><meta name="docsearch:version" content="2.3.2"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar&#x27;s WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar [...]
 "/><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,7 +76,7 @@
                 };
               }
             });
-        </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">Pulsar&#x27;s WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API">WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进行 [...]
+        </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">Pulsar&#x27;s WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API"> WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进 [...]
 <blockquote>
 <p>You can use Pulsar's WebSocket API with any WebSocket client library. See examples for Python and Node.js <a href="#client-examples">below</a>.</p>
 </blockquote>
@@ -117,7 +117,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数"></a><a href="#查询参数" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>sendTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">发送超时(默认值:30秒)</td></tr>
@@ -141,7 +141,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>payload</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Base-64 编码的 payload</td></tr>
@@ -167,7 +167,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>result</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left"><code>ok</code> 要么成功发送,要么发送错误,要么发送不成功</td></tr>
@@ -178,16 +178,14 @@
 <h3><a class="anchor" aria-hidden="true" id="消费端"></a><a href="#消费端" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.2 [...]
 <p>消费端要求您在 URL 中指定租户,命名空间和主题以及订阅:</p>
 <pre><code class="hljs css language-http">ws://broker-service-url:8080/ws/v2/consumer/persistent/:tenant/:namespace/:topic/:subscription
-
 </code></pre>
 <h5><a class="anchor" aria-hidden="true" id="查询参数-1"></a><a href="#查询参数-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
-<tr><td style="text-align:left">`ackTimeoutMillis</td></tr>
-<tr><td style="text-align:left">`</td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
+<tr><td style="text-align:left"><code>ackTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
 <tr><td style="text-align:left"><code>subscriptionType</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left"><a href="https://pulsar.apache.org/api/client/index.html?org/apache/pulsar/client/api/SubscriptionType.html">订阅类型</a>:<code>Exclusive</code>, <code>Failover</code>, <code>Shared</code></td></tr>
 <tr><td style="text-align:left">`receiverQueueSize</td></tr>
 <tr><td style="text-align:left">`</td><td style="text-align:left">int</td><td style="text-align:left">no</td><td style="text-align:left">消费者接收队列大小 (默认: 1000)</td></tr>
@@ -215,7 +213,7 @@
 `</pre> 
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -234,7 +232,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
@@ -253,7 +251,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>type</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Type of command. Must be <code>permit</code></td></tr>
@@ -268,7 +266,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数-2"></a><a href="#查询参数-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>readerName</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left">Reader name</td></tr>
@@ -288,7 +286,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -307,7 +305,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
diff --git a/content/docs/zh-CN/client-libraries-websocket/index.html b/content/docs/zh-CN/client-libraries-websocket/index.html
index 4bd412f..9da84fe 100644
--- a/content/docs/zh-CN/client-libraries-websocket/index.html
+++ b/content/docs/zh-CN/client-libraries-websocket/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>Pulsar&#x27;s WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot;/ [...]
-"/><meta name="docsearch:version" content="2.3.2"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar&#x27;s WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar  [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar&#x27;s WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot; [...]
+"/><meta name="docsearch:version" content="2.3.2"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar&#x27;s WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar [...]
 "/><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,7 +76,7 @@
                 };
               }
             });
-        </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">Pulsar&#x27;s WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API">WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进行 [...]
+        </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">Pulsar&#x27;s WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API"> WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进 [...]
 <blockquote>
 <p>You can use Pulsar's WebSocket API with any WebSocket client library. See examples for Python and Node.js <a href="#client-examples">below</a>.</p>
 </blockquote>
@@ -117,7 +117,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数"></a><a href="#查询参数" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>sendTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">发送超时(默认值:30秒)</td></tr>
@@ -141,7 +141,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>payload</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Base-64 编码的 payload</td></tr>
@@ -167,7 +167,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>result</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left"><code>ok</code> 要么成功发送,要么发送错误,要么发送不成功</td></tr>
@@ -178,16 +178,14 @@
 <h3><a class="anchor" aria-hidden="true" id="消费端"></a><a href="#消费端" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.2 [...]
 <p>消费端要求您在 URL 中指定租户,命名空间和主题以及订阅:</p>
 <pre><code class="hljs css language-http">ws://broker-service-url:8080/ws/v2/consumer/persistent/:tenant/:namespace/:topic/:subscription
-
 </code></pre>
 <h5><a class="anchor" aria-hidden="true" id="查询参数-1"></a><a href="#查询参数-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
-<tr><td style="text-align:left">`ackTimeoutMillis</td></tr>
-<tr><td style="text-align:left">`</td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
+<tr><td style="text-align:left"><code>ackTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
 <tr><td style="text-align:left"><code>subscriptionType</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left"><a href="https://pulsar.apache.org/api/client/index.html?org/apache/pulsar/client/api/SubscriptionType.html">订阅类型</a>:<code>Exclusive</code>, <code>Failover</code>, <code>Shared</code></td></tr>
 <tr><td style="text-align:left">`receiverQueueSize</td></tr>
 <tr><td style="text-align:left">`</td><td style="text-align:left">int</td><td style="text-align:left">no</td><td style="text-align:left">消费者接收队列大小 (默认: 1000)</td></tr>
@@ -215,7 +213,7 @@
 `</pre> 
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -234,7 +232,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
@@ -253,7 +251,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>type</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Type of command. Must be <code>permit</code></td></tr>
@@ -268,7 +266,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数-2"></a><a href="#查询参数-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>readerName</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left">Reader name</td></tr>
@@ -288,7 +286,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -307,7 +305,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
diff --git a/content/docs/zh-CN/next/administration-dashboard.html b/content/docs/zh-CN/next/administration-dashboard.html
index 288b9b8..c405d27 100644
--- a/content/docs/zh-CN/next/administration-dashboard.html
+++ b/content/docs/zh-CN/next/administration-dashboard.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>Pulsar 仪表板 · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/next/reference-terminology#topic&quot;&gt;topics&lt;/a&gt; in tabular f [...]
-"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar 仪表板 · 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;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/next/reference-terminology#topic&quot;&g [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar 仪表板 · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/next/reference-terminology#topic&quot;&gt;主题&lt;/a&gt; 的实时状态。&lt;/p&gt;
+"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar 仪表板 · 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;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/next/reference-terminology#topic&quot;&gt;主题&lt;/a&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,7 +76,7 @@
                 };
               }
             });
-        </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">Pulsar 仪表板</h1></header><article><div><span><p>The Pulsar dashboard is a web application that enables users to monitor current stats for all <a href="/docs/zh-CN/next/reference-terminology# [...]
+        </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">Pulsar 仪表板</h1></header><article><div><span><p>Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 <a href="/docs/zh-CN/next/reference-terminology#topic">主题</a> 的实时状态。</p>
 <p>The dashboard is a data collector that polls stats from all the brokers in a Pulsar instance (across multiple clusters) and stores all the information in a <a href="https://www.postgresql.org/">PostgreSQL</a> database.</p>
 <p>A <a href="https://www.djangoproject.com">Django</a> web app is used to render the collected data.</p>
 <h2><a class="anchor" aria-hidden="true" id="install"></a><a href="#install" 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- [...]
diff --git a/content/docs/zh-CN/next/administration-dashboard/index.html b/content/docs/zh-CN/next/administration-dashboard/index.html
index 288b9b8..c405d27 100644
--- a/content/docs/zh-CN/next/administration-dashboard/index.html
+++ b/content/docs/zh-CN/next/administration-dashboard/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>Pulsar 仪表板 · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/next/reference-terminology#topic&quot;&gt;topics&lt;/a&gt; in tabular f [...]
-"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar 仪表板 · 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;The Pulsar dashboard is a web application that enables users to monitor current stats for all &lt;a href=&quot;/docs/zh-CN/next/reference-terminology#topic&quot;&g [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar 仪表板 · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/next/reference-terminology#topic&quot;&gt;主题&lt;/a&gt; 的实时状态。&lt;/p&gt;
+"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar 仪表板 · 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;Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 &lt;a href=&quot;/docs/zh-CN/next/reference-terminology#topic&quot;&gt;主题&lt;/a&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,7 +76,7 @@
                 };
               }
             });
-        </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">Pulsar 仪表板</h1></header><article><div><span><p>The Pulsar dashboard is a web application that enables users to monitor current stats for all <a href="/docs/zh-CN/next/reference-terminology# [...]
+        </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">Pulsar 仪表板</h1></header><article><div><span><p>Pulsar 仪表板是一个网页应用程序,使用户能够以表格形式监测所有 <a href="/docs/zh-CN/next/reference-terminology#topic">主题</a> 的实时状态。</p>
 <p>The dashboard is a data collector that polls stats from all the brokers in a Pulsar instance (across multiple clusters) and stores all the information in a <a href="https://www.postgresql.org/">PostgreSQL</a> database.</p>
 <p>A <a href="https://www.djangoproject.com">Django</a> web app is used to render the collected data.</p>
 <h2><a class="anchor" aria-hidden="true" id="install"></a><a href="#install" 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- [...]
diff --git a/content/docs/zh-CN/next/client-libraries-websocket.html b/content/docs/zh-CN/next/client-libraries-websocket.html
index 6a25e96..52e2303 100644
--- a/content/docs/zh-CN/next/client-libraries-websocket.html
+++ b/content/docs/zh-CN/next/client-libraries-websocket.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>Pulsar的 WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot;/docs/z [...]
-"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar的 WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完 [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar的 WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot;/docs/ [...]
+"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar的 WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它 [...]
 "/><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,7 +76,7 @@
                 };
               }
             });
-        </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">Pulsar的 WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API">WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全 [...]
+        </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">Pulsar的 WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API"> WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完 [...]
 <blockquote>
 <p>你可以将 Pulsar 的 WebSocket API 与任何的 WebSocket 客户端库一起使用。请参阅<a href="#client-examples">下面</a>的 Python 和 Node.js 示例。</p>
 </blockquote>
@@ -117,7 +117,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数"></a><a href="#查询参数" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>sendTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">发送超时(默认值:30秒)</td></tr>
@@ -141,7 +141,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>payload</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Base-64 编码的 payload</td></tr>
@@ -167,7 +167,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>result</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left"><code>ok</code> 要么成功发送,要么发送错误,要么发送不成功</td></tr>
@@ -178,16 +178,14 @@
 <h3><a class="anchor" aria-hidden="true" id="消费端"></a><a href="#消费端" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.2 [...]
 <p>消费端要求您在 URL 中指定租户,命名空间和主题以及订阅:</p>
 <pre><code class="hljs css language-http">ws://broker-service-url:8080/ws/v2/consumer/persistent/:tenant/:namespace/:topic/:subscription
-
 </code></pre>
 <h5><a class="anchor" aria-hidden="true" id="查询参数-1"></a><a href="#查询参数-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
-<tr><td style="text-align:left">`ackTimeoutMillis</td></tr>
-<tr><td style="text-align:left">`</td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
+<tr><td style="text-align:left"><code>ackTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
 <tr><td style="text-align:left"><code>subscriptionType</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left"><a href="https://pulsar.apache.org/api/client/index.html?org/apache/pulsar/client/api/SubscriptionType.html">订阅类型</a>:<code>Exclusive</code>, <code>Failover</code>, <code>Shared</code></td></tr>
 <tr><td style="text-align:left">`receiverQueueSize</td></tr>
 <tr><td style="text-align:left">`</td><td style="text-align:left">int</td><td style="text-align:left">no</td><td style="text-align:left">消费者接收队列大小 (默认: 1000)</td></tr>
@@ -215,7 +213,7 @@
 `</pre> 
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -234,7 +232,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
@@ -253,7 +251,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>type</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">命令类型, 必须是` permit &lt;/ code&gt;</td></td></tr>
@@ -270,7 +268,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数-2"></a><a href="#查询参数-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>readerName</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left">Reader name</td></tr>
@@ -290,7 +288,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -309,7 +307,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
diff --git a/content/docs/zh-CN/next/client-libraries-websocket/index.html b/content/docs/zh-CN/next/client-libraries-websocket/index.html
index 6a25e96..52e2303 100644
--- a/content/docs/zh-CN/next/client-libraries-websocket/index.html
+++ b/content/docs/zh-CN/next/client-libraries-websocket/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>Pulsar的 WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot;/docs/z [...]
-"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar的 WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt;WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完 [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar的 WebSocket API · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全不依赖于官方&lt;a href=&quot;/docs/ [...]
+"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar的 WebSocket API · 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;Pulsar 的&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API&quot;&gt; WebSocket&lt;/a&gt; API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它 [...]
 "/><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,7 +76,7 @@
                 };
               }
             });
-        </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">Pulsar的 WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API">WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完全 [...]
+        </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">Pulsar的 WebSocket API</h1></header><article><div><span><p>Pulsar 的<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API"> WebSocket</a> API 提供了一种简单便捷的交互方式和 Pulsar 进行交互,它完 [...]
 <blockquote>
 <p>你可以将 Pulsar 的 WebSocket API 与任何的 WebSocket 客户端库一起使用。请参阅<a href="#client-examples">下面</a>的 Python 和 Node.js 示例。</p>
 </blockquote>
@@ -117,7 +117,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数"></a><a href="#查询参数" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>sendTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">发送超时(默认值:30秒)</td></tr>
@@ -141,7 +141,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>payload</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Base-64 编码的 payload</td></tr>
@@ -167,7 +167,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>result</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left"><code>ok</code> 要么成功发送,要么发送错误,要么发送不成功</td></tr>
@@ -178,16 +178,14 @@
 <h3><a class="anchor" aria-hidden="true" id="消费端"></a><a href="#消费端" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.2 [...]
 <p>消费端要求您在 URL 中指定租户,命名空间和主题以及订阅:</p>
 <pre><code class="hljs css language-http">ws://broker-service-url:8080/ws/v2/consumer/persistent/:tenant/:namespace/:topic/:subscription
-
 </code></pre>
 <h5><a class="anchor" aria-hidden="true" id="查询参数-1"></a><a href="#查询参数-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
-<tr><td style="text-align:left">`ackTimeoutMillis</td></tr>
-<tr><td style="text-align:left">`</td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
+<tr><td style="text-align:left"><code>ackTimeoutMillis</code></td><td style="text-align:left">long</td><td style="text-align:left">no</td><td style="text-align:left">设置未完成 ACK 的超时时间(默认值:0)</td></tr>
 <tr><td style="text-align:left"><code>subscriptionType</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left"><a href="https://pulsar.apache.org/api/client/index.html?org/apache/pulsar/client/api/SubscriptionType.html">订阅类型</a>:<code>Exclusive</code>, <code>Failover</code>, <code>Shared</code></td></tr>
 <tr><td style="text-align:left">`receiverQueueSize</td></tr>
 <tr><td style="text-align:left">`</td><td style="text-align:left">int</td><td style="text-align:left">no</td><td style="text-align:left">消费者接收队列大小 (默认: 1000)</td></tr>
@@ -215,7 +213,7 @@
 `</pre> 
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -234,7 +232,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
@@ -253,7 +251,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>type</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">命令类型, 必须是` permit &lt;/ code&gt;</td></td></tr>
@@ -270,7 +268,7 @@
 <h5><a class="anchor" aria-hidden="true" id="查询参数-2"></a><a href="#查询参数-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>readerName</code></td><td style="text-align:left">string</td><td style="text-align:left">no</td><td style="text-align:left">Reader name</td></tr>
@@ -290,7 +288,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">Message ID</td></tr>
@@ -309,7 +307,7 @@
 </code></pre>
 <table>
 <thead>
-<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">是否必须?</th><th style="text-align:left">说明</th></tr>
+<tr><th style="text-align:left">Key</th><th style="text-align:left">类型</th><th style="text-align:left">必须?</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>messageId</code></td><td style="text-align:left">string</td><td style="text-align:left">yes</td><td style="text-align:left">处理消息的消息ID</td></tr>
diff --git a/content/docs/zh-CN/next/develop-binary-protocol.html b/content/docs/zh-CN/next/develop-binary-protocol.html
index b52e3c3..ac76b63 100644
--- a/content/docs/zh-CN/next/develop-binary-protocol.html
+++ b/content/docs/zh-CN/next/develop-binary-protocol.html
@@ -130,7 +130,7 @@
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>producer_name</code></td><td style="text-align:left">The name of the producer that published the message</td></tr>
-<tr><td style="text-align:left"><code>sequence_id</code></td><td style="text-align:left">The sequence ID of the message, assigned by producer}</td></tr>
+<tr><td style="text-align:left"><code>sequence_id</code></td><td style="text-align:left">The sequence ID of the message, assigned by producer</td></tr>
 <tr><td style="text-align:left"><code>publish_time</code></td><td style="text-align:left">The publish timestamp in Unix time (i.e. as the number of milliseconds since January 1st, 1970 in UTC)</td></tr>
 <tr><td style="text-align:left"><code>properties</code></td><td style="text-align:left">A sequence of key/value pairs (using the <a href="https://github.com/apache/pulsar/blob/master/pulsar-common/src/main/proto/PulsarApi.proto#L32"><code>KeyValue</code></a> message). These are application-defined keys and values with no special meaning to Pulsar.</td></tr>
 <tr><td style="text-align:left"><code>replicated_from</code> <em>(optional)</em></td><td style="text-align:left">Indicates that the message has been replicated and specifies the name of the <a href="/docs/zh-CN/next/reference-terminology#cluster">cluster</a> where the message was originally published</td></tr>
diff --git a/content/docs/zh-CN/next/develop-binary-protocol/index.html b/content/docs/zh-CN/next/develop-binary-protocol/index.html
index b52e3c3..ac76b63 100644
--- a/content/docs/zh-CN/next/develop-binary-protocol/index.html
+++ b/content/docs/zh-CN/next/develop-binary-protocol/index.html
@@ -130,7 +130,7 @@
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>producer_name</code></td><td style="text-align:left">The name of the producer that published the message</td></tr>
-<tr><td style="text-align:left"><code>sequence_id</code></td><td style="text-align:left">The sequence ID of the message, assigned by producer}</td></tr>
+<tr><td style="text-align:left"><code>sequence_id</code></td><td style="text-align:left">The sequence ID of the message, assigned by producer</td></tr>
 <tr><td style="text-align:left"><code>publish_time</code></td><td style="text-align:left">The publish timestamp in Unix time (i.e. as the number of milliseconds since January 1st, 1970 in UTC)</td></tr>
 <tr><td style="text-align:left"><code>properties</code></td><td style="text-align:left">A sequence of key/value pairs (using the <a href="https://github.com/apache/pulsar/blob/master/pulsar-common/src/main/proto/PulsarApi.proto#L32"><code>KeyValue</code></a> message). These are application-defined keys and values with no special meaning to Pulsar.</td></tr>
 <tr><td style="text-align:left"><code>replicated_from</code> <em>(optional)</em></td><td style="text-align:left">Indicates that the message has been replicated and specifies the name of the <a href="/docs/zh-CN/next/reference-terminology#cluster">cluster</a> where the message was originally published</td></tr>
diff --git a/content/fr/admin-rest-api.html b/content/fr/admin-rest-api.html
index ec666bd..5804264 100644
--- a/content/fr/admin-rest-api.html
+++ b/content/fr/admin-rest-api.html
@@ -6,7 +6,7 @@
 
               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><div class [...]
+            </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><div class [...]
         const languagesMenuItem = document.getElementById("languages-menu");
         const languagesDropDown = document.getElementById("languages-dropdown");
         languagesMenuItem.addEventListener("click", function(event) {
diff --git a/content/fr/admin-rest-api/index.html b/content/fr/admin-rest-api/index.html
index ec666bd..5804264 100644
--- a/content/fr/admin-rest-api/index.html
+++ b/content/fr/admin-rest-api/index.html
@@ -6,7 +6,7 @@
 
               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><div class [...]
+            </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><div class [...]
         const languagesMenuItem = document.getElementById("languages-menu");
         const languagesDropDown = document.getElementById("languages-dropdown");
         languagesMenuItem.addEventListener("click", function(event) {
diff --git a/content/fr/contact.html b/content/fr/contact.html
index 0971d5c..9a2b2d3 100644
--- a/content/fr/contact.html
+++ b/content/fr/contact.html
@@ -6,7 +6,7 @@
 
               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><div class [...]
+            </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><div class [...]
         const languagesMenuItem = document.getElementById("languages-menu");
         const languagesDropDown = document.getElementById("languages-dropdown");
         languagesMenuItem.addEventListener("click", function(event) {
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Contact</h1><hr/></header><p>There are many ways to get help from the Apache Pulsar community. The [...]
+      </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 documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Contact</h1><hr/></header><p>There are many ways to get help from the Apache Pulsar community. The [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/fr/contact/index.html b/content/fr/contact/index.html
index 0971d5c..9a2b2d3 100644
--- a/content/fr/contact/index.html
+++ b/content/fr/contact/index.html
@@ -6,7 +6,7 @@
 
               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><div class [...]
+            </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><div class [...]
         const languagesMenuItem = document.getElementById("languages-menu");
         const languagesDropDown = document.getElementById("languages-dropdown");
         languagesMenuItem.addEventListener("click", function(event) {
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Contact</h1><hr/></header><p>There are many ways to get help from the Apache Pulsar community. The [...]
+      </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 documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Contact</h1><hr/></header><p>There are many ways to get help from the Apache Pulsar community. The [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/fr/contributing.html b/content/fr/contributing.html
index cd50b69..0da8906 100644
--- a/content/fr/contributing.html
+++ b/content/fr/contributing.html
@@ -6,7 +6,7 @@
 
               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><div class [...]
+            </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><div class [...]
         const languagesMenuItem = document.getElementById("languages-menu");
         const languagesDropDown = document.getElementById("languages-dropdown");
         languagesMenuItem.addEventListener("click", function(event) {
diff --git a/content/fr/contributing/index.html b/content/fr/contributing/index.html
index cd50b69..0da8906 100644
--- a/content/fr/contributing/index.html
+++ b/content/fr/contributing/index.html
@@ -6,7 +6,7 @@
 
               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><div class [...]
+            </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><div class [...]
         const languagesMenuItem = document.getElementById("languages-menu");
         const languagesDropDown = document.getElementById("languages-dropdown");
         languagesMenuItem.addEventListener("click", function(event) {
diff --git a/content/fr/download.html b/content/fr/download.html
index cf5f18b..761decf 100644
--- a/content/fr/download.html
+++ b/content/fr/download.html
@@ -6,7 +6,7 @@
 
               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><div class [...]
+            </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><div class [...]
         const languagesMenuItem = document.getElementById("languages-menu");
         const languagesDropDown = document.getElementById("languages-dropdown");
         languagesMenuItem.addEventListener("click", function(event) {
@@ -18,8 +18,8 @@
             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="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Apache Pulsar downloads</h1><hr/></header><h2>Release notes</h2><div><p><a href="/fr/release-notes">Release [...]
-</span></div><h2>Getting started</h2><div><p>Once you&#x27;ve downloaded a Pulsar release, instructions on getting up and running with a standalone cluster that you can run on your laptop can be found in the <a href="/docs/fr/standalone">Run Pulsar locally</a> tutorial.</p></div><p>If you need to connect to an existing Pulsar cluster or instance using an officially supported client, see the client docs for these languages:</p><table class="clients"><thead><tr><th>Client guide</th><th>API [...]
+      </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="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Téléchargements reliés à Apache Pulsar</h1><hr/></header><h2>Notes des versions</h2><div><p><a href="/fr/re [...]
+</span></div><h2>Getting started</h2><div><p>Une fois que vous avez téléchargé une version de Pulsar, les instructions pour installer et démarrer un cluster autonome que vous pouvez exécuter sur votre ordinateur portable se trouvent dans le <a href="/docs/fr/standalone">Run Pulsar locally</a> tutoriel.</p></div><p>Si vous avez besoin de vous connecter à un cluster de Pulsar ou une instance à l’aide d’un client supporté, voir la documentation du client dans les langues suivantes :</p><tab [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/fr/download/index.html b/content/fr/download/index.html
index cf5f18b..761decf 100644
--- a/content/fr/download/index.html
+++ b/content/fr/download/index.html
@@ -6,7 +6,7 @@
 
               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><div class [...]
+            </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><div class [...]
         const languagesMenuItem = document.getElementById("languages-menu");
         const languagesDropDown = document.getElementById("languages-dropdown");
         languagesMenuItem.addEventListener("click", function(event) {
@@ -18,8 +18,8 @@
             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="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Apache Pulsar downloads</h1><hr/></header><h2>Release notes</h2><div><p><a href="/fr/release-notes">Release [...]
-</span></div><h2>Getting started</h2><div><p>Once you&#x27;ve downloaded a Pulsar release, instructions on getting up and running with a standalone cluster that you can run on your laptop can be found in the <a href="/docs/fr/standalone">Run Pulsar locally</a> tutorial.</p></div><p>If you need to connect to an existing Pulsar cluster or instance using an officially supported client, see the client docs for these languages:</p><table class="clients"><thead><tr><th>Client guide</th><th>API [...]
+      </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="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Téléchargements reliés à Apache Pulsar</h1><hr/></header><h2>Notes des versions</h2><div><p><a href="/fr/re [...]
+</span></div><h2>Getting started</h2><div><p>Une fois que vous avez téléchargé une version de Pulsar, les instructions pour installer et démarrer un cluster autonome que vous pouvez exécuter sur votre ordinateur portable se trouvent dans le <a href="/docs/fr/standalone">Run Pulsar locally</a> tutoriel.</p></div><p>Si vous avez besoin de vous connecter à un cluster de Pulsar ou une instance à l’aide d’un client supporté, voir la documentation du client dans les langues suivantes :</p><tab [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/fr/events.html b/content/fr/events.html
index de57b85..c7532ac 100644
--- a/content/fr/events.html
+++ b/content/fr/events.html
@@ -6,7 +6,7 @@
 
               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><div class [...]
+            </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><div class [...]
         const languagesMenuItem = document.getElementById("languages-menu");
         const languagesDropDown = document.getElementById("languages-dropdown");
         languagesMenuItem.addEventListener("click", function(event) {
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Events</h1><hr/></header><h2>Calander</h2><iframe src="https://calendar.google.com/calendar/embed? [...]
+      </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 documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Événements</h1><hr/></header><h2>Calendrier</h2><iframe src="https://calendar.google.com/calendar/ [...]
 <li><a href="https://www.meetup.com/Apache-Pulsar-Meetup-Group/">Apache Pulsar Bay Area Meetup Group</a></li>
 </ul>
 </span></div><div><span><ul>
diff --git a/content/fr/events/index.html b/content/fr/events/index.html
index de57b85..c7532ac 100644
--- a/content/fr/events/index.html
+++ b/content/fr/events/index.html
@@ -6,7 +6,7 @@
 
               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><div class [...]
+            </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><div class [...]
         const languagesMenuItem = document.getElementById("languages-menu");
         const languagesDropDown = document.getElementById("languages-dropdown");
         languagesMenuItem.addEventListener("click", function(event) {
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Events</h1><hr/></header><h2>Calander</h2><iframe src="https://calendar.google.com/calendar/embed? [...]
+      </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 documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Événements</h1><hr/></header><h2>Calendrier</h2><iframe src="https://calendar.google.com/calendar/ [...]
 <li><a href="https://www.meetup.com/Apache-Pulsar-Meetup-Group/">Apache Pulsar Bay Area Meetup Group</a></li>
 </ul>
 </span></div><div><span><ul>
diff --git a/content/fr/functions-rest-api.html b/content/fr/functions-rest-api.html
index a04c743..6702dbd 100644
--- a/content/fr/functions-rest-api.html
+++ b/content/fr/functions-rest-api.html
@@ -6,7 +6,7 @@
 
               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><div class [...]
+            </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><div class [...]
         const languagesMenuItem = document.getElementById("languages-menu");
         const languagesDropDown = document.getElementById("languages-dropdown");
         languagesMenuItem.addEventListener("click", function(event) {
diff --git a/content/fr/functions-rest-api/index.html b/content/fr/functions-rest-api/index.html
index a04c743..6702dbd 100644
--- a/content/fr/functions-rest-api/index.html
+++ b/content/fr/functions-rest-api/index.html
@@ -6,7 +6,7 @@
 
               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><div class [...]
+            </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><div class [...]
         const languagesMenuItem = document.getElementById("languages-menu");
         const languagesDropDown = document.getElementById("languages-dropdown");
         languagesMenuItem.addEventListener("click", function(event) {
diff --git a/content/fr/index.html b/content/fr/index.html
index 436feec..a6151f9 100644
--- a/content/fr/index.html
+++ b/content/fr/index.html
@@ -6,7 +6,7 @@
 
               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><div class [...]
+            </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><div class [...]
         const languagesMenuItem = document.getElementById("languages-menu");
         const languagesDropDown = document.getElementById("languages-dropdown");
         languagesMenuItem.addEventListener("click", function(event) {
diff --git a/content/fr/release-notes.html b/content/fr/release-notes.html
index 52db415..f35a822 100644
--- a/content/fr/release-notes.html
+++ b/content/fr/release-notes.html
@@ -6,7 +6,7 @@
 
               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><div class [...]
+            </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><div class [...]
         const languagesMenuItem = document.getElementById("languages-menu");
         const languagesDropDown = document.getElementById("languages-dropdown");
         languagesMenuItem.addEventListener("click", function(event) {
diff --git a/content/fr/release-notes/index.html b/content/fr/release-notes/index.html
index 52db415..f35a822 100644
--- a/content/fr/release-notes/index.html
+++ b/content/fr/release-notes/index.html
@@ -6,7 +6,7 @@
 
               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><div class [...]
+            </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><div class [...]
         const languagesMenuItem = document.getElementById("languages-menu");
         const languagesDropDown = document.getElementById("languages-dropdown");
         languagesMenuItem.addEventListener("click", function(event) {
diff --git a/content/fr/resources.html b/content/fr/resources.html
index 964e130..4b21209 100644
--- a/content/fr/resources.html
+++ b/content/fr/resources.html
@@ -6,7 +6,7 @@
 
               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><div class [...]
+            </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><div class [...]
         const languagesMenuItem = document.getElementById("languages-menu");
         const languagesDropDown = document.getElementById("languages-dropdown");
         languagesMenuItem.addEventListener("click", function(event) {
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Resources</h1><hr/></header><h2>Articles</h2><table class="versions"><thead><tr><th>Forum</th><th> [...]
+      </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 documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Ressources</h1><hr/></header><h2>Articles</h2><table class="versions"><thead><tr><th>Forum</th><th [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/fr/resources/index.html b/content/fr/resources/index.html
index 964e130..4b21209 100644
--- a/content/fr/resources/index.html
+++ b/content/fr/resources/index.html
@@ -6,7 +6,7 @@
 
               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><div class [...]
+            </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><div class [...]
         const languagesMenuItem = document.getElementById("languages-menu");
         const languagesDropDown = document.getElementById("languages-dropdown");
         languagesMenuItem.addEventListener("click", function(event) {
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Resources</h1><hr/></header><h2>Articles</h2><table class="versions"><thead><tr><th>Forum</th><th> [...]
+      </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 documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Ressources</h1><hr/></header><h2>Articles</h2><table class="versions"><thead><tr><th>Forum</th><th [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/fr/sink-rest-api.html b/content/fr/sink-rest-api.html
index 6cb1186..b1d74fc 100644
--- a/content/fr/sink-rest-api.html
+++ b/content/fr/sink-rest-api.html
@@ -6,7 +6,7 @@
 
               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><div class [...]
+            </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><div class [...]
         const languagesMenuItem = document.getElementById("languages-menu");
         const languagesDropDown = document.getElementById("languages-dropdown");
         languagesMenuItem.addEventListener("click", function(event) {
diff --git a/content/fr/sink-rest-api/index.html b/content/fr/sink-rest-api/index.html
index 6cb1186..b1d74fc 100644
--- a/content/fr/sink-rest-api/index.html
+++ b/content/fr/sink-rest-api/index.html
@@ -6,7 +6,7 @@
 
               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><div class [...]
+            </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><div class [...]
         const languagesMenuItem = document.getElementById("languages-menu");
         const languagesDropDown = document.getElementById("languages-dropdown");
         languagesMenuItem.addEventListener("click", function(event) {
diff --git a/content/fr/source-rest-api.html b/content/fr/source-rest-api.html
index 584a916..e92100e 100644
--- a/content/fr/source-rest-api.html
+++ b/content/fr/source-rest-api.html
@@ -6,7 +6,7 @@
 
               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><div class [...]
+            </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><div class [...]
         const languagesMenuItem = document.getElementById("languages-menu");
         const languagesDropDown = document.getElementById("languages-dropdown");
         languagesMenuItem.addEventListener("click", function(event) {
diff --git a/content/fr/source-rest-api/index.html b/content/fr/source-rest-api/index.html
index 584a916..e92100e 100644
--- a/content/fr/source-rest-api/index.html
+++ b/content/fr/source-rest-api/index.html
@@ -6,7 +6,7 @@
 
               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><div class [...]
+            </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><div class [...]
         const languagesMenuItem = document.getElementById("languages-menu");
         const languagesDropDown = document.getElementById("languages-dropdown");
         languagesMenuItem.addEventListener("click", function(event) {
diff --git a/content/fr/team.html b/content/fr/team.html
index 14178de..489000e 100644
--- a/content/fr/team.html
+++ b/content/fr/team.html
@@ -6,7 +6,7 @@
 
               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><div class [...]
+            </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><div class [...]
         const languagesMenuItem = document.getElementById("languages-menu");
         const languagesDropDown = document.getElementById("languages-dropdown");
         languagesMenuItem.addEventListener("click", function(event) {
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Team</h1><hr/></header><p>A successful project requires many people to play many roles. Some write [...]
+      </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 documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Équipe</h1><hr/></header><p>Un projet réussi nécessite que de nombreuses personnes jouent de nombr [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/fr/team/index.html b/content/fr/team/index.html
index 14178de..489000e 100644
--- a/content/fr/team/index.html
+++ b/content/fr/team/index.html
@@ -6,7 +6,7 @@
 
               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><div class [...]
+            </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><div class [...]
         const languagesMenuItem = document.getElementById("languages-menu");
         const languagesDropDown = document.getElementById("languages-dropdown");
         languagesMenuItem.addEventListener("click", function(event) {
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Team</h1><hr/></header><p>A successful project requires many people to play many roles. Some write [...]
+      </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 documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Équipe</h1><hr/></header><p>Un projet réussi nécessite que de nombreuses personnes jouent de nombr [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/fr/versions.html b/content/fr/versions.html
index fb43912..be09cd9 100644
--- a/content/fr/versions.html
+++ b/content/fr/versions.html
@@ -6,7 +6,7 @@
 
               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><div class [...]
+            </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><div class [...]
         const languagesMenuItem = document.getElementById("languages-menu");
         const languagesDropDown = document.getElementById("languages-dropdown");
         languagesMenuItem.addEventListener("click", function(event) {
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Apache Pulsar Versions</h1></header><h3 id="latest">Latest Stable Version</h3><p>Latest stable release of A [...]
+      </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="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Apache Pulsar Versions</h1></header><h3 id="latest">Dernière version stable</h3><p>Dernière version stable  [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/fr/versions/index.html b/content/fr/versions/index.html
index fb43912..be09cd9 100644
--- a/content/fr/versions/index.html
+++ b/content/fr/versions/index.html
@@ -6,7 +6,7 @@
 
               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><div class [...]
+            </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><div class [...]
         const languagesMenuItem = document.getElementById("languages-menu");
         const languagesDropDown = document.getElementById("languages-dropdown");
         languagesMenuItem.addEventListener("click", function(event) {
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Apache Pulsar Versions</h1></header><h3 id="latest">Latest Stable Version</h3><p>Latest stable release of A [...]
+      </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="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Apache Pulsar Versions</h1></header><h3 id="latest">Dernière version stable</h3><p>Dernière version stable  [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/swagger/2.5.0-SNAPSHOT/swagger.json b/content/swagger/2.5.0-SNAPSHOT/swagger.json
new file mode 100644
index 0000000..db1d0b3
--- /dev/null
+++ b/content/swagger/2.5.0-SNAPSHOT/swagger.json
@@ -0,0 +1,9779 @@
+{
+  "swagger" : "2.0",
+  "info" : {
+    "description" : "This provides the REST API for admin operations",
+    "version" : "v2",
+    "title" : "Pulsar Admin REST API",
+    "license" : {
+      "name" : "Apache 2.0",
+      "url" : "http://www.apache.org/licenses/LICENSE-2.0.html"
+    }
+  },
+  "basePath" : "/admin/v2",
+  "tags" : [ {
+    "name" : "bookies"
+  }, {
+    "name" : "broker-stats"
+  }, {
+    "name" : "brokers"
+  }, {
+    "name" : "clusters"
+  }, {
+    "name" : "namespaces"
+  }, {
+    "name" : "non-persistent topic"
+  }, {
+    "name" : "persistent topic"
+  }, {
+    "name" : "resource-quotas"
+  }, {
+    "name" : "schemas"
+  }, {
+    "name" : "tenants"
+  } ],
+  "schemes" : [ "http", "https" ],
+  "paths" : {
+    "/bookies/racks-info" : {
+      "get" : {
+        "tags" : [ "bookies" ],
+        "summary" : "Gets the rack placement information for all the bookies in the cluster",
+        "description" : "",
+        "operationId" : "getBookiesRackInfo",
+        "produces" : [ "application/json" ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "object",
+              "additionalProperties" : {
+                "type" : "object",
+                "additionalProperties" : {
+                  "$ref" : "#/definitions/BookieInfo"
+                }
+              }
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          }
+        }
+      }
+    },
+    "/bookies/racks-info/{bookie}" : {
+      "get" : {
+        "tags" : [ "bookies" ],
+        "summary" : "Gets the rack placement information for a specific bookie in the cluster",
+        "description" : "",
+        "operationId" : "getBookieRackInfo",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "bookie",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/BookieInfo"
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          }
+        }
+      },
+      "post" : {
+        "tags" : [ "bookies" ],
+        "summary" : "Updates the rack placement information for a specific bookie in the cluster",
+        "description" : "",
+        "operationId" : "updateBookieRackInfo",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "bookie",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "group",
+          "in" : "query",
+          "required" : false,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          }
+        }
+      },
+      "delete" : {
+        "tags" : [ "bookies" ],
+        "summary" : "Removed the rack placement information for a specific bookie in the cluster",
+        "description" : "",
+        "operationId" : "deleteBookieRackInfo",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "bookie",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          }
+        }
+      }
+    },
+    "/broker-stats/allocator-stats/{allocator}" : {
+      "get" : {
+        "tags" : [ "broker-stats" ],
+        "summary" : "Get the stats for the Netty allocator. Available allocators are 'default' and 'ml-cache'",
+        "description" : "",
+        "operationId" : "getAllocatorStats",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "allocator",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/AllocatorStats"
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          }
+        }
+      }
+    },
+    "/broker-stats/bookieops" : {
+      "get" : {
+        "tags" : [ "broker-stats" ],
+        "summary" : "Get pending bookie client op stats by namesapce",
+        "description" : "",
+        "operationId" : "getPendingBookieOpsStats",
+        "produces" : [ "application/json" ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "object",
+              "additionalProperties" : {
+                "$ref" : "#/definitions/PendingBookieOpsStats"
+              }
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          }
+        }
+      }
+    },
+    "/broker-stats/broker-resource-availability/{tenant}/{namespace}" : {
+      "get" : {
+        "tags" : [ "broker-stats" ],
+        "summary" : "Broker availability report",
+        "description" : "This API gives the current broker availability in percent, each resource percentage usage is calculated and thensum of all of the resource usage percent is called broker-resource-availability<br/><br/>THIS API IS ONLY FOR USE BY TESTING FOR CONFIRMING NAMESPACE ALLOCATION ALGORITHM",
+        "operationId" : "getBrokerResourceAvailability",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "object",
+              "additionalProperties" : {
+                "$ref" : "#/definitions/ResourceUnit"
+              }
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "409" : {
+            "description" : "Load-manager doesn't support operation"
+          }
+        }
+      }
+    },
+    "/broker-stats/load-report" : {
+      "get" : {
+        "tags" : [ "broker-stats" ],
+        "summary" : "Get Load for this broker",
+        "description" : "consists of topics stats & systemResourceUsage",
+        "operationId" : "getLoadReport",
+        "produces" : [ "application/json" ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/LoadReport"
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          }
+        }
+      }
+    },
+    "/broker-stats/mbeans" : {
+      "get" : {
+        "tags" : [ "broker-stats" ],
+        "summary" : "Get all the mbean details of this broker JVM",
+        "description" : "",
+        "operationId" : "getMBeans",
+        "produces" : [ "application/json" ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "array",
+              "items" : {
+                "$ref" : "#/definitions/Metrics"
+              }
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          }
+        }
+      }
+    },
+    "/broker-stats/metrics" : {
+      "get" : {
+        "tags" : [ "broker-stats" ],
+        "summary" : "Gets the metrics for Monitoring",
+        "description" : "Requested should be executed by Monitoring agent on each broker to fetch the metrics",
+        "operationId" : "getMetrics",
+        "produces" : [ "application/json" ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "array",
+              "items" : {
+                "$ref" : "#/definitions/Metrics"
+              }
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          }
+        }
+      }
+    },
+    "/broker-stats/topics" : {
+      "get" : {
+        "tags" : [ "broker-stats" ],
+        "summary" : "Get all the topic stats by namespace",
+        "description" : "",
+        "operationId" : "getTopics2",
+        "produces" : [ "application/json" ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/OutputStream"
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          }
+        }
+      }
+    },
+    "/brokers/configuration" : {
+      "get" : {
+        "tags" : [ "brokers" ],
+        "summary" : "Get all updatable dynamic configurations's name",
+        "description" : "",
+        "operationId" : "getDynamicConfigurationName",
+        "produces" : [ "application/json" ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "array",
+              "items" : {
+                "type" : "object"
+              }
+            }
+          }
+        }
+      }
+    },
+    "/brokers/configuration/runtime" : {
+      "get" : {
+        "tags" : [ "brokers" ],
+        "summary" : "Get all runtime configurations. This operation requires Pulsar super-user privileges.",
+        "description" : "",
+        "operationId" : "getRuntimeConfiguration",
+        "produces" : [ "application/json" ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "object",
+              "additionalProperties" : {
+                "type" : "object"
+              }
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          }
+        }
+      }
+    },
+    "/brokers/configuration/values" : {
+      "get" : {
+        "tags" : [ "brokers" ],
+        "summary" : "Get value of all dynamic configurations' value overridden on local config",
+        "description" : "",
+        "operationId" : "getAllDynamicConfigurations",
+        "produces" : [ "application/json" ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "object",
+              "additionalProperties" : {
+                "type" : "object"
+              }
+            }
+          },
+          "404" : {
+            "description" : "Configuration not found"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          }
+        }
+      }
+    },
+    "/brokers/configuration/{configName}/{configValue}" : {
+      "post" : {
+        "tags" : [ "brokers" ],
+        "summary" : "Update dynamic serviceconfiguration into zk only. This operation requires Pulsar super-user privileges.",
+        "description" : "",
+        "operationId" : "updateDynamicConfiguration",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "configName",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "configValue",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "204" : {
+            "description" : "Service configuration updated successfully"
+          },
+          "403" : {
+            "description" : "You don't have admin permission to update service-configuration"
+          },
+          "404" : {
+            "description" : "Configuration not found"
+          },
+          "412" : {
+            "description" : "Invalid dynamic-config value"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          }
+        }
+      }
+    },
+    "/brokers/health" : {
+      "get" : {
+        "tags" : [ "brokers" ],
+        "summary" : "Run a healthcheck against the broker",
+        "description" : "",
+        "operationId" : "healthcheck",
+        "produces" : [ "application/json" ],
+        "responses" : {
+          "200" : {
+            "description" : "Everything is OK"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Cluster doesn't exist"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          }
+        }
+      }
+    },
+    "/brokers/internal-configuration" : {
+      "get" : {
+        "tags" : [ "brokers" ],
+        "summary" : "Get the internal configuration data",
+        "description" : "",
+        "operationId" : "getInternalConfigurationData",
+        "produces" : [ "application/json" ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/InternalConfigurationData"
+            }
+          }
+        }
+      }
+    },
+    "/brokers/{clusterName}/{broker-webserviceurl}/ownedNamespaces" : {
+      "get" : {
+        "tags" : [ "brokers" ],
+        "summary" : "Get the list of namespaces served by the specific broker",
+        "description" : "",
+        "operationId" : "getOwnedNamespaes",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "clusterName",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "broker-webserviceurl",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "object",
+              "additionalProperties" : {
+                "$ref" : "#/definitions/NamespaceOwnershipStatus"
+              }
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Cluster doesn't exist"
+          }
+        }
+      }
+    },
+    "/brokers/{cluster}" : {
+      "get" : {
+        "tags" : [ "brokers" ],
+        "summary" : "Get the list of active brokers (web service addresses) in the cluster.If authorization is not enabled, any cluster name is valid.",
+        "description" : "",
+        "operationId" : "getActiveBrokers",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "cluster",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "array",
+              "uniqueItems" : true,
+              "items" : {
+                "type" : "string"
+              }
+            }
+          },
+          "401" : {
+            "description" : "Authentication required"
+          },
+          "403" : {
+            "description" : "This operation requires super-user access"
+          },
+          "404" : {
+            "description" : "Cluster does not exist: cluster={clustername}"
+          }
+        }
+      }
+    },
+    "/clusters" : {
+      "get" : {
+        "tags" : [ "clusters" ],
+        "summary" : "Get the list of all the Pulsar clusters.",
+        "description" : "",
+        "operationId" : "getClusters",
+        "produces" : [ "application/json" ],
+        "responses" : {
+          "200" : {
+            "description" : "Return a list of clusters.",
+            "schema" : {
+              "type" : "array",
+              "uniqueItems" : true,
+              "items" : {
+                "type" : "string"
+              }
+            }
+          },
+          "500" : {
+            "description" : "Internal server error."
+          }
+        }
+      }
+    },
+    "/clusters/{cluster}" : {
+      "get" : {
+        "tags" : [ "clusters" ],
+        "summary" : "Get the configuration for the specified cluster.",
+        "description" : "This operation requires Pulsar superuser privileges.",
+        "operationId" : "getCluster",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "cluster",
+          "in" : "path",
+          "description" : "The cluster name",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "Return the cluster data.",
+            "schema" : {
+              "$ref" : "#/definitions/ClusterData"
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission."
+          },
+          "404" : {
+            "description" : "Cluster doesn't exist."
+          },
+          "500" : {
+            "description" : "Internal server error."
+          }
+        }
+      },
+      "post" : {
+        "tags" : [ "clusters" ],
+        "summary" : "Update the configuration for a cluster.",
+        "description" : "This operation requires Pulsar superuser privileges.",
+        "operationId" : "updateCluster",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "cluster",
+          "in" : "path",
+          "description" : "The cluster name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "in" : "body",
+          "name" : "body",
+          "description" : "The cluster data",
+          "required" : true,
+          "schema" : {
+            "$ref" : "#/definitions/ClusterData"
+          },
+          "x-examples" : {
+            "application/json" : "{\n   'serviceUrl': 'http://pulsar.example.com:8080',\n   'brokerServiceUrl': 'pulsar://pulsar.example.com:6651'\n}"
+          }
+        } ],
+        "responses" : {
+          "204" : {
+            "description" : "Cluster has been updated."
+          },
+          "403" : {
+            "description" : "Don't have admin permission or policies are read-only."
+          },
+          "404" : {
+            "description" : "Cluster doesn't exist."
+          },
+          "500" : {
+            "description" : "Internal server error."
+          }
+        }
+      },
+      "put" : {
+        "tags" : [ "clusters" ],
+        "summary" : "Create a new cluster.",
+        "description" : "This operation requires Pulsar superuser privileges, and the name cannot contain the '/' characters.",
+        "operationId" : "createCluster",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "cluster",
+          "in" : "path",
+          "description" : "The cluster name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "in" : "body",
+          "name" : "body",
+          "description" : "The cluster data",
+          "required" : true,
+          "schema" : {
+            "$ref" : "#/definitions/ClusterData"
+          },
+          "x-examples" : {
+            "application/json" : "{\n   'serviceUrl': 'http://pulsar.example.com:8080',\n   'brokerServiceUrl': 'pulsar://pulsar.example.com:6651',\n}"
+          }
+        } ],
+        "responses" : {
+          "204" : {
+            "description" : "Cluster has been created."
+          },
+          "403" : {
+            "description" : "You don't have admin permission to create the cluster."
+          },
+          "409" : {
+            "description" : "Cluster already exists."
+          },
+          "412" : {
+            "description" : "Cluster name is not valid."
+          },
+          "500" : {
+            "description" : "Internal server error."
+          }
+        }
+      },
+      "delete" : {
+        "tags" : [ "clusters" ],
+        "summary" : "Delete an existing cluster.",
+        "description" : "This operation requires Pulsar superuser privileges.",
+        "operationId" : "deleteCluster",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "cluster",
+          "in" : "path",
+          "description" : "The cluster name",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "204" : {
+            "description" : "Cluster has been deleted."
+          },
+          "403" : {
+            "description" : "Don't have admin permission or policies are read-only."
+          },
+          "404" : {
+            "description" : "Cluster doesn't exist."
+          },
+          "412" : {
+            "description" : "Cluster is not empty."
+          },
+          "500" : {
+            "description" : "Internal server error."
+          }
+        }
+      }
+    },
+    "/clusters/{cluster}/failureDomains" : {
+      "get" : {
+        "tags" : [ "clusters" ],
+        "summary" : "Get the cluster failure domains.",
+        "description" : "This operation requires Pulsar superuser privileges.",
+        "operationId" : "getFailureDomains",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "cluster",
+          "in" : "path",
+          "description" : "The cluster name",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "object",
+              "additionalProperties" : {
+                "$ref" : "#/definitions/FailureDomain"
+              }
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          }
+        }
+      }
+    },
+    "/clusters/{cluster}/failureDomains/{domainName}" : {
+      "get" : {
+        "tags" : [ "clusters" ],
+        "summary" : "Get a domain in a cluster",
+        "description" : "This operation requires Pulsar superuser privileges.",
+        "operationId" : "getDomain",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "cluster",
+          "in" : "path",
+          "description" : "The cluster name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "domainName",
+          "in" : "path",
+          "description" : "The failure domain name",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/FailureDomain"
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "FailureDomain doesn't exist"
+          },
+          "412" : {
+            "description" : "Cluster doesn't exist"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          }
+        }
+      },
+      "post" : {
+        "tags" : [ "clusters" ],
+        "summary" : "Set the failure domain of the cluster.",
+        "description" : "This operation requires Pulsar superuser privileges.",
+        "operationId" : "setFailureDomain",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "cluster",
+          "in" : "path",
+          "description" : "The cluster name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "domainName",
+          "in" : "path",
+          "description" : "The failure domain name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "in" : "body",
+          "name" : "body",
+          "description" : "The configuration data of a failure domain",
+          "required" : true,
+          "schema" : {
+            "$ref" : "#/definitions/FailureDomain"
+          }
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission."
+          },
+          "404" : {
+            "description" : "Failure domain doesn't exist."
+          },
+          "409" : {
+            "description" : "Broker already exists in another domain."
+          },
+          "412" : {
+            "description" : "Cluster doesn't exist."
+          },
+          "500" : {
+            "description" : "Internal server error."
+          }
+        }
+      },
+      "delete" : {
+        "tags" : [ "clusters" ],
+        "summary" : "Delete the failure domain of the cluster",
+        "description" : "This operation requires Pulsar superuser privileges.",
+        "operationId" : "deleteFailureDomain",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "cluster",
+          "in" : "path",
+          "description" : "The cluster name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "domainName",
+          "in" : "path",
+          "description" : "The failure domain name",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission or policy is read only"
+          },
+          "404" : {
+            "description" : "FailureDomain doesn't exist"
+          },
+          "412" : {
+            "description" : "Cluster doesn't exist"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          }
+        }
+      }
+    },
+    "/clusters/{cluster}/namespaceIsolationPolicies" : {
+      "get" : {
+        "tags" : [ "clusters" ],
+        "summary" : "Get the namespace isolation policies assigned to the cluster.",
+        "description" : "This operation requires Pulsar superuser privileges.",
+        "operationId" : "getNamespaceIsolationPolicies",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "cluster",
+          "in" : "path",
+          "description" : "The cluster name",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "object",
+              "additionalProperties" : {
+                "$ref" : "#/definitions/NamespaceIsolationData"
+              }
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission."
+          },
+          "404" : {
+            "description" : "Cluster doesn't exist."
+          },
+          "500" : {
+            "description" : "Internal server error."
+          }
+        }
+      }
+    },
+    "/clusters/{cluster}/namespaceIsolationPolicies/brokers" : {
+      "get" : {
+        "tags" : [ "clusters" ],
+        "summary" : "Get list of brokers with namespace-isolation policies attached to them.",
+        "description" : "This operation requires Pulsar superuser privileges.",
+        "operationId" : "getBrokersWithNamespaceIsolationPolicy",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "cluster",
+          "in" : "path",
+          "description" : "The cluster name",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "array",
+              "uniqueItems" : true,
+              "items" : {
+                "$ref" : "#/definitions/BrokerNamespaceIsolationData"
+              }
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission."
+          },
+          "404" : {
+            "description" : "Namespace-isolation policies not found."
+          },
+          "412" : {
+            "description" : "Cluster doesn't exist."
+          },
+          "500" : {
+            "description" : "Internal server error."
+          }
+        }
+      }
+    },
+    "/clusters/{cluster}/namespaceIsolationPolicies/brokers/{broker}" : {
+      "get" : {
+        "tags" : [ "clusters" ],
+        "summary" : "Get a broker with namespace-isolation policies attached to it.",
+        "description" : "This operation requires Pulsar superuser privileges.",
+        "operationId" : "getBrokerWithNamespaceIsolationPolicy",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "cluster",
+          "in" : "path",
+          "description" : "The cluster name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "broker",
+          "in" : "path",
+          "description" : "The broker name (<broker-hostname>:<web-service-port>)",
+          "required" : true,
+          "type" : "string",
+          "x-example" : "broker1:8080"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/BrokerNamespaceIsolationData"
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission."
+          },
+          "404" : {
+            "description" : "Namespace-isolation policies/ Broker not found."
+          },
+          "412" : {
+            "description" : "Cluster doesn't exist."
+          },
+          "500" : {
+            "description" : "Internal server error."
+          }
+        }
+      }
+    },
+    "/clusters/{cluster}/namespaceIsolationPolicies/{policyName}" : {
+      "get" : {
+        "tags" : [ "clusters" ],
+        "summary" : "Get the single namespace isolation policy assigned to the cluster.",
+        "description" : "This operation requires Pulsar superuser privileges.",
+        "operationId" : "getNamespaceIsolationPolicy",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "cluster",
+          "in" : "path",
+          "description" : "The cluster name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "policyName",
+          "in" : "path",
+          "description" : "The name of the namespace isolation policy",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/NamespaceIsolationData"
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission."
+          },
+          "404" : {
+            "description" : "Policy doesn't exist."
+          },
+          "412" : {
+            "description" : "Cluster doesn't exist."
+          },
+          "500" : {
+            "description" : "Internal server error."
+          }
+        }
+      },
+      "post" : {
+        "tags" : [ "clusters" ],
+        "summary" : "Set namespace isolation policy.",
+        "description" : "This operation requires Pulsar superuser privileges.",
+        "operationId" : "setNamespaceIsolationPolicy",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "cluster",
+          "in" : "path",
+          "description" : "The cluster name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "policyName",
+          "in" : "path",
+          "description" : "The namespace isolation policy name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "in" : "body",
+          "name" : "body",
+          "description" : "The namespace isolation policy data",
+          "required" : true,
+          "schema" : {
+            "$ref" : "#/definitions/NamespaceIsolationData"
+          }
+        } ],
+        "responses" : {
+          "400" : {
+            "description" : "Namespace isolation policy data is invalid."
+          },
+          "403" : {
+            "description" : "Don't have admin permission or policies are read-only."
+          },
+          "404" : {
+            "description" : "Namespace isolation policy doesn't exist."
+          },
+          "412" : {
+            "description" : "Cluster doesn't exist."
+          },
+          "500" : {
+            "description" : "Internal server error."
+          }
+        }
+      },
+      "delete" : {
+        "tags" : [ "clusters" ],
+        "summary" : "Delete namespace isolation policy.",
+        "description" : "This operation requires Pulsar superuser privileges.",
+        "operationId" : "deleteNamespaceIsolationPolicy",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "cluster",
+          "in" : "path",
+          "description" : "The cluster name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "policyName",
+          "in" : "path",
+          "description" : "The namespace isolation policy name",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission or policies are read only."
+          },
+          "404" : {
+            "description" : "Namespace isolation policy doesn't exist."
+          },
+          "412" : {
+            "description" : "Cluster doesn't exist."
+          },
+          "500" : {
+            "description" : "Internal server error."
+          }
+        }
+      }
+    },
+    "/clusters/{cluster}/peers" : {
+      "get" : {
+        "tags" : [ "clusters" ],
+        "summary" : "Get the peer-cluster data for the specified cluster.",
+        "description" : "This operation requires Pulsar superuser privileges.",
+        "operationId" : "getPeerCluster",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "cluster",
+          "in" : "path",
+          "description" : "The cluster name",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "array",
+              "uniqueItems" : true,
+              "items" : {
+                "type" : "string"
+              }
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission."
+          },
+          "404" : {
+            "description" : "Cluster doesn't exist."
+          },
+          "500" : {
+            "description" : "Internal server error."
+          }
+        }
+      },
+      "post" : {
+        "tags" : [ "clusters" ],
+        "summary" : "Update peer-cluster-list for a cluster.",
+        "description" : "This operation requires Pulsar superuser privileges.",
+        "operationId" : "setPeerClusterNames",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "cluster",
+          "in" : "path",
+          "description" : "The cluster name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "in" : "body",
+          "name" : "body",
+          "description" : "The list of peer cluster names",
+          "required" : true,
+          "schema" : {
+            "type" : "array",
+            "items" : {
+              "type" : "string"
+            }
+          },
+          "x-examples" : {
+            "application/json" : "[\n   'cluster-a',\n   'cluster-b'\n]"
+          }
+        } ],
+        "responses" : {
+          "204" : {
+            "description" : "Cluster has been updated."
+          },
+          "403" : {
+            "description" : "Don't have admin permission or policies are read-only."
+          },
+          "404" : {
+            "description" : "Cluster doesn't exist."
+          },
+          "412" : {
+            "description" : "Peer cluster doesn't exist."
+          },
+          "500" : {
+            "description" : "Internal server error."
+          }
+        }
+      }
+    },
+    "/namespaces/{cluster}/antiAffinity/{group}" : {
+      "get" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Get all namespaces that are grouped by given anti-affinity group in a given cluster. api can be only accessed by admin of any of the existing tenant",
+        "description" : "",
+        "operationId" : "getAntiAffinityNamespaces",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "cluster",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "group",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "tenant",
+          "in" : "query",
+          "required" : false,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "array",
+              "items" : {
+                "type" : "object"
+              }
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "412" : {
+            "description" : "Cluster not exist/Anti-affinity group can't be empty."
+          }
+        }
+      }
+    },
+    "/namespaces/{property}/{namespace}/persistence/bookieAffinity" : {
+      "get" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Get the bookie-affinity-group from namespace-local policy.",
+        "description" : "",
+        "operationId" : "getBookieAffinityGroup",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "property",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/BookieAffinityGroupData"
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace does not exist"
+          },
+          "409" : {
+            "description" : "Concurrent modification"
+          }
+        }
+      },
+      "delete" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Delete the bookie-affinity-group from namespace-local policy.",
+        "description" : "",
+        "operationId" : "deleteBookieAffinityGroup",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "property",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace does not exist"
+          },
+          "409" : {
+            "description" : "Concurrent modification"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}" : {
+      "get" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Get the list of all the namespaces for a certain tenant.",
+        "description" : "",
+        "operationId" : "getTenantNamespaces",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "array",
+              "uniqueItems" : true,
+              "items" : {
+                "type" : "string"
+              }
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Tenant doesn't exist"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}" : {
+      "get" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Get the dump all the policies specified for a namespace.",
+        "description" : "",
+        "operationId" : "getPolicies",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/Policies"
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Tenant or cluster or namespace doesn't exist"
+          }
+        }
+      },
+      "put" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Creates a new namespace with the specified policies",
+        "description" : "",
+        "operationId" : "createNamespace",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Tenant or cluster doesn't exist"
+          },
+          "409" : {
+            "description" : "Namespace already exists"
+          },
+          "412" : {
+            "description" : "Namespace name is not valid"
+          }
+        }
+      },
+      "delete" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Delete a namespace and all the topics under it.",
+        "description" : "",
+        "operationId" : "deleteNamespace",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Tenant or cluster or namespace doesn't exist"
+          },
+          "409" : {
+            "description" : "Namespace is not empty"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/antiAffinity" : {
+      "get" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Get anti-affinity group of a namespace.",
+        "description" : "",
+        "operationId" : "getNamespaceAntiAffinityGroup",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "string"
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Tenant or cluster or namespace doesn't exist"
+          }
+        }
+      },
+      "post" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Set anti-affinity group for a namespace",
+        "description" : "",
+        "operationId" : "setNamespaceAntiAffinityGroup",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Tenant or cluster or namespace doesn't exist"
+          },
+          "412" : {
+            "description" : "Invalid antiAffinityGroup"
+          }
+        }
+      },
+      "delete" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Remove anti-affinity group of a namespace.",
+        "description" : "",
+        "operationId" : "removeNamespaceAntiAffinityGroup",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace does not exist"
+          },
+          "409" : {
+            "description" : "Concurrent modification"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/backlogQuota" : {
+      "post" : {
+        "tags" : [ "namespaces" ],
+        "summary" : " Set a backlog quota for all the topics on a namespace.",
+        "description" : "",
+        "operationId" : "setBacklogQuota",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "backlogQuotaType",
+          "in" : "query",
+          "required" : false,
+          "type" : "string",
+          "enum" : [ "destination_storage" ]
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace does not exist"
+          },
+          "409" : {
+            "description" : "Concurrent modification"
+          },
+          "412" : {
+            "description" : "Specified backlog quota exceeds retention quota. Increase retention quota and retry request"
+          }
+        }
+      },
+      "delete" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Remove a backlog quota policy from a namespace.",
+        "description" : "",
+        "operationId" : "removeBacklogQuota",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "backlogQuotaType",
+          "in" : "query",
+          "required" : false,
+          "type" : "string",
+          "enum" : [ "destination_storage" ]
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace does not exist"
+          },
+          "409" : {
+            "description" : "Concurrent modification"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/backlogQuotaMap" : {
+      "get" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Get backlog quota map on a namespace.",
+        "description" : "",
+        "operationId" : "getBacklogQuotaMap",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "object",
+              "additionalProperties" : {
+                "type" : "object"
+              }
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace does not exist"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/bundles" : {
+      "get" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Get the bundles split data.",
+        "description" : "",
+        "operationId" : "getBundlesData",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/BundlesData"
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Tenant or cluster or namespace doesn't exist"
+          },
+          "412" : {
+            "description" : "Namespace is not setup to split in bundles"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/clearBacklog" : {
+      "post" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Clear backlog for all topics on a namespace.",
+        "description" : "",
+        "operationId" : "clearNamespaceBacklog",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace does not exist"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/clearBacklog/{subscription}" : {
+      "post" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Clear backlog for a given subscription on all topics on a namespace.",
+        "description" : "",
+        "operationId" : "clearNamespaceBacklogForSubscription",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "subscription",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace does not exist"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/compactionThreshold" : {
+      "get" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Maximum number of uncompacted bytes in topics before compaction is triggered.",
+        "description" : "The backlog size is compared to the threshold periodically. A threshold of 0 disabled automatic compaction",
+        "operationId" : "getCompactionThreshold",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "integer",
+              "format" : "int64"
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace doesn't exist"
+          }
+        }
+      },
+      "put" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Set maximum number of uncompacted bytes in a topic before compaction is triggered.",
+        "description" : "The backlog size is compared to the threshold periodically. A threshold of 0 disabled automatic compaction",
+        "operationId" : "setCompactionThreshold",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace doesn't exist"
+          },
+          "409" : {
+            "description" : "Concurrent modification"
+          },
+          "412" : {
+            "description" : "compactionThreshold value is not valid"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/deduplication" : {
+      "post" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Enable or disable broker side deduplication for all topics in a namespace",
+        "description" : "",
+        "operationId" : "modifyDeduplication",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Tenant or cluster or namespace doesn't exist"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/dispatchRate" : {
+      "get" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Get dispatch-rate configured for the namespace, -1 represents not configured yet",
+        "description" : "",
+        "operationId" : "getDispatchRate",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/DispatchRate"
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace does not exist"
+          }
+        }
+      },
+      "post" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Set dispatch-rate throttling for all topics of the namespace",
+        "description" : "",
+        "operationId" : "setDispatchRate",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/encryptionRequired" : {
+      "post" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Message encryption is required or not for all topics in a namespace",
+        "description" : "",
+        "operationId" : "modifyEncryptionRequired",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Tenant or cluster or namespace doesn't exist"
+          },
+          "409" : {
+            "description" : "Concurrent modification"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/maxConsumersPerSubscription" : {
+      "get" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Get maxConsumersPerSubscription config on a namespace.",
+        "description" : "",
+        "operationId" : "getMaxConsumersPerSubscription",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "integer",
+              "format" : "int32"
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace does not exist"
+          }
+        }
+      },
+      "post" : {
+        "tags" : [ "namespaces" ],
+        "summary" : " Set maxConsumersPerSubscription configuration on a namespace.",
+        "description" : "",
+        "operationId" : "setMaxConsumersPerSubscription",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace does not exist"
+          },
+          "409" : {
+            "description" : "Concurrent modification"
+          },
+          "412" : {
+            "description" : "maxConsumersPerSubscription value is not valid"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/maxConsumersPerTopic" : {
+      "get" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Get maxConsumersPerTopic config on a namespace.",
+        "description" : "",
+        "operationId" : "getMaxConsumersPerTopic",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "integer",
+              "format" : "int32"
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace does not exist"
+          }
+        }
+      },
+      "post" : {
+        "tags" : [ "namespaces" ],
+        "summary" : " Set maxConsumersPerTopic configuration on a namespace.",
+        "description" : "",
+        "operationId" : "setMaxConsumersPerTopic",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace does not exist"
+          },
+          "409" : {
+            "description" : "Concurrent modification"
+          },
+          "412" : {
+            "description" : "maxConsumersPerTopic value is not valid"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/maxProducersPerTopic" : {
+      "get" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Get maxProducersPerTopic config on a namespace.",
+        "description" : "",
+        "operationId" : "getMaxProducersPerTopic",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "integer",
+              "format" : "int32"
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace does not exist"
+          }
+        }
+      },
+      "post" : {
+        "tags" : [ "namespaces" ],
+        "summary" : " Set maxProducersPerTopic configuration on a namespace.",
+        "description" : "",
+        "operationId" : "setMaxProducersPerTopic",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace does not exist"
+          },
+          "409" : {
+            "description" : "Concurrent modification"
+          },
+          "412" : {
+            "description" : "maxProducersPerTopic value is not valid"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/messageTTL" : {
+      "get" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Get the message TTL for the namespace",
+        "description" : "",
+        "operationId" : "getNamespaceMessageTTL",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "integer",
+              "format" : "int32"
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Tenant or cluster or namespace doesn't exist"
+          }
+        }
+      },
+      "post" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Set message TTL in seconds for namespace",
+        "description" : "",
+        "operationId" : "setNamespaceMessageTTL",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Tenant or cluster or namespace doesn't exist"
+          },
+          "412" : {
+            "description" : "Invalid TTL"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/offloadDeletionLagMs" : {
+      "get" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Number of milliseconds to wait before deleting a ledger segment which has been offloaded from the Pulsar cluster's local storage (i.e. BookKeeper)",
+        "description" : "A negative value denotes that deletion has been completely disabled. 'null' denotes that the topics in the namespace will fall back to the broker default for deletion lag.",
+        "operationId" : "getOffloadDeletionLag",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "integer",
+              "format" : "int64"
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace doesn't exist"
+          }
+        }
+      },
+      "put" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Set number of milliseconds to wait before deleting a ledger segment which has been offloaded from the Pulsar cluster's local storage (i.e. BookKeeper)",
+        "description" : "A negative value disables the deletion completely.",
+        "operationId" : "setOffloadDeletionLag",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace doesn't exist"
+          },
+          "409" : {
+            "description" : "Concurrent modification"
+          },
+          "412" : {
+            "description" : "offloadDeletionLagMs value is not valid"
+          }
+        }
+      },
+      "delete" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Clear the namespace configured offload deletion lag. The topics in the namespace will fallback to using the default configured deletion lag for the broker",
+        "description" : "",
+        "operationId" : "clearOffloadDeletionLag",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace doesn't exist"
+          },
+          "409" : {
+            "description" : "Concurrent modification"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/offloadThreshold" : {
+      "get" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Maximum number of bytes stored on the pulsar cluster for a topic, before the broker will start offloading to longterm storage",
+        "description" : "A negative value disables automatic offloading",
+        "operationId" : "getOffloadThreshold",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "integer",
+              "format" : "int64"
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace doesn't exist"
+          }
+        }
+      },
+      "put" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Set maximum number of bytes stored on the pulsar cluster for a topic, before the broker will start offloading to longterm storage",
+        "description" : "A negative value disables automatic offloading",
+        "operationId" : "setOffloadThreshold",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace doesn't exist"
+          },
+          "409" : {
+            "description" : "Concurrent modification"
+          },
+          "412" : {
+            "description" : "offloadThreshold value is not valid"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/permissions" : {
+      "get" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Retrieve the permissions for a namespace.",
+        "description" : "",
+        "operationId" : "getPermissions",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "cluster",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "object",
+              "additionalProperties" : {
+                "type" : "object"
+              }
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Tenant or cluster or namespace doesn't exist"
+          },
+          "409" : {
+            "description" : "Namespace is not empty"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/permissions/{role}" : {
+      "post" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Grant a new permission to a role on a namespace.",
+        "description" : "",
+        "operationId" : "grantPermissionOnNamespace",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "role",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Tenant or cluster or namespace doesn't exist"
+          },
+          "409" : {
+            "description" : "Concurrent modification"
+          },
+          "501" : {
+            "description" : "Authorization is not enabled"
+          }
+        }
+      },
+      "delete" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Revoke all permissions to a role on a namespace.",
+        "description" : "",
+        "operationId" : "revokePermissionsOnNamespace",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "role",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Tenant or cluster or namespace doesn't exist"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/persistence" : {
+      "get" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Get the persistence configuration for a namespace.",
+        "description" : "",
+        "operationId" : "getPersistence",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/PersistencePolicies"
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace does not exist"
+          },
+          "409" : {
+            "description" : "Concurrent modification"
+          }
+        }
+      },
+      "post" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Set the persistence configuration for all the topics on a namespace.",
+        "description" : "",
+        "operationId" : "setPersistence",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "400" : {
+            "description" : "Invalid persistence policies"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace does not exist"
+          },
+          "409" : {
+            "description" : "Concurrent modification"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/persistence/bookieAffinity" : {
+      "post" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Set the bookie-affinity-group to namespace-persistent policy.",
+        "description" : "",
+        "operationId" : "setBookieAffinityGroup",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace does not exist"
+          },
+          "409" : {
+            "description" : "Concurrent modification"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/replication" : {
+      "get" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Get the replication clusters for a namespace.",
+        "description" : "",
+        "operationId" : "getNamespaceReplicationClusters",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "array",
+              "items" : {
+                "type" : "string"
+              }
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Tenant or cluster or namespace doesn't exist"
+          },
+          "412" : {
+            "description" : "Namespace is not global"
+          }
+        }
+      },
+      "post" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Set the replication clusters for a namespace.",
+        "description" : "",
+        "operationId" : "setNamespaceReplicationClusters",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Tenant or cluster or namespace doesn't exist"
+          },
+          "409" : {
+            "description" : "Peer-cluster can't be part of replication-cluster"
+          },
+          "412" : {
+            "description" : "Namespace is not global or invalid cluster ids"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/replicatorDispatchRate" : {
+      "get" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Get replicator dispatch-rate configured for the namespace, -1 represents not configured yet",
+        "description" : "",
+        "operationId" : "getReplicatorDispatchRate",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/DispatchRate"
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace does not exist"
+          }
+        }
+      },
+      "post" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Set replicator dispatch-rate throttling for all topics of the namespace",
+        "description" : "",
+        "operationId" : "setReplicatorDispatchRate",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/retention" : {
+      "get" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Get retention config on a namespace.",
+        "description" : "",
+        "operationId" : "getRetention",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/RetentionPolicies"
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace does not exist"
+          }
+        }
+      },
+      "post" : {
+        "tags" : [ "namespaces" ],
+        "summary" : " Set retention configuration on a namespace.",
+        "description" : "",
+        "operationId" : "setRetention",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace does not exist"
+          },
+          "409" : {
+            "description" : "Concurrent modification"
+          },
+          "412" : {
+            "description" : "Retention Quota must exceed backlog quota"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/schemaAutoUpdateCompatibilityStrategy" : {
+      "get" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "The strategy used to check the compatibility of new schemas, provided by producers, before automatically updating the schema",
+        "description" : "The value AutoUpdateDisabled prevents producers from updating the schema.  If set to AutoUpdateDisabled, schemas must be updated through the REST api",
+        "operationId" : "getSchemaAutoUpdateCompatibilityStrategy",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "string",
+              "enum" : [ "AutoUpdateDisabled", "Backward", "Forward", "Full", "AlwaysCompatible", "BackwardTransitive", "ForwardTransitive", "FullTransitive" ]
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace doesn't exist"
+          },
+          "409" : {
+            "description" : "Concurrent modification"
+          }
+        }
+      },
+      "put" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Update the strategy used to check the compatibility of new schemas, provided by producers, before automatically updating the schema",
+        "description" : "The value AutoUpdateDisabled prevents producers from updating the schema.  If set to AutoUpdateDisabled, schemas must be updated through the REST api",
+        "operationId" : "setSchemaAutoUpdateCompatibilityStrategy",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace doesn't exist"
+          },
+          "409" : {
+            "description" : "Concurrent modification"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/schemaValidationEnforced" : {
+      "get" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Get schema validation enforced flag for namespace.",
+        "description" : "If the flag is set to true, when a producer without a schema attempts to produce to a topic with schema in this namespace, the producer will be failed to connect. PLEASE be carefully on using this, since non-java clients don't support schema.if you enable this setting, it will cause non-java clients failed to produce.",
+        "operationId" : "getSchemaValidtionEnforced",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "boolean"
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Tenants or Namespace doesn't exist"
+          }
+        }
+      },
+      "post" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Set schema validation enforced flag on namespace.",
+        "description" : "If the flag is set to true, when a producer without a schema attempts to produce to a topic with schema in this namespace, the producer will be failed to connect. PLEASE be carefully on using this, since non-java clients don't support schema.if you enable this setting, it will cause non-java clients failed to produce.",
+        "operationId" : "setSchemaValidtionEnforced",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Tenant or Namespace doesn't exist"
+          },
+          "412" : {
+            "description" : "schemaValidationEnforced value is not valid"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/subscribeRate" : {
+      "get" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Get subscribe-rate configured for the namespace",
+        "description" : "",
+        "operationId" : "getSubscribeRate",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/SubscribeRate"
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace does not exist"
+          }
+        }
+      },
+      "post" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Set subscribe-rate throttling for all topics of the namespace",
+        "description" : "",
+        "operationId" : "setSubscribeRate",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/subscriptionAuthMode" : {
+      "post" : {
+        "tags" : [ "namespaces" ],
+        "summary" : " Set a subscription auth mode for all the topics on a namespace.",
+        "description" : "",
+        "operationId" : "setSubscriptionAuthMode",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace does not exist"
+          },
+          "409" : {
+            "description" : "Concurrent modification"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/subscriptionDispatchRate" : {
+      "get" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Get Subscription dispatch-rate configured for the namespace, -1 represents not configured yet",
+        "description" : "",
+        "operationId" : "getSubscriptionDispatchRate",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/DispatchRate"
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace does not exist"
+          }
+        }
+      },
+      "post" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Set Subscription dispatch-rate throttling for all topics of the namespace",
+        "description" : "",
+        "operationId" : "setSubscriptionDispatchRate",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/topics" : {
+      "get" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Get the list of all the topics under a certain namespace.",
+        "description" : "",
+        "operationId" : "getTopics",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "mode",
+          "in" : "query",
+          "required" : false,
+          "type" : "string",
+          "default" : "PERSISTENT",
+          "enum" : [ "PERSISTENT", "NON_PERSISTENT", "ALL" ]
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "array",
+              "uniqueItems" : true,
+              "items" : {
+                "type" : "string"
+              }
+            }
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Tenant or cluster or namespace doesn't exist"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/unload" : {
+      "put" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Unload namespace",
+        "description" : "Unload an active namespace from the current broker serving it. Performing this operation will let the brokerremoves all producers, consumers, and connections using this namespace, and close all topics (includingtheir persistent store). During that operation, the namespace is marked as tentatively unavailable until thebroker completes the unloading action. This operation requires strictly super user privileges, since it wouldresult in non-persistent message loss a [...]
+        "operationId" : "unloadNamespace",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Tenant or namespace doesn't exist"
+          },
+          "412" : {
+            "description" : "Namespace is already unloaded or Namespace has bundles activated"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/unsubscribe/{subscription}" : {
+      "post" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Unsubscribes the given subscription on all topics on a namespace.",
+        "description" : "",
+        "operationId" : "unsubscribeNamespace",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "cluster",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "subscription",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace does not exist"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/{bundle}" : {
+      "delete" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Delete a namespace bundle and all the topics under it.",
+        "description" : "",
+        "operationId" : "deleteNamespaceBundle",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "bundle",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Tenant or cluster or namespace doesn't exist"
+          },
+          "409" : {
+            "description" : "Namespace bundle is not empty"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/{bundle}/clearBacklog" : {
+      "post" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Clear backlog for all topics on a namespace bundle.",
+        "description" : "",
+        "operationId" : "clearNamespaceBundleBacklog",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "bundle",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace does not exist"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/{bundle}/clearBacklog/{subscription}" : {
+      "post" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Clear backlog for a given subscription on all topics on a namespace bundle.",
+        "description" : "",
+        "operationId" : "clearNamespaceBundleBacklogForSubscription",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "subscription",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "bundle",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace does not exist"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/{bundle}/split" : {
+      "put" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Split a namespace bundle",
+        "description" : "",
+        "operationId" : "splitNamespaceBundle",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "bundle",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        }, {
+          "name" : "unload",
+          "in" : "query",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/{bundle}/unload" : {
+      "put" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Unload a namespace bundle",
+        "description" : "",
+        "operationId" : "unloadNamespaceBundle",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "bundle",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          }
+        }
+      }
+    },
+    "/namespaces/{tenant}/{namespace}/{bundle}/unsubscribe/{subscription}" : {
+      "post" : {
+        "tags" : [ "namespaces" ],
+        "summary" : "Unsubscribes the given subscription on all topics on a namespace bundle.",
+        "description" : "",
+        "operationId" : "unsubscribeNamespaceBundle",
+        "consumes" : [ "application/json" ],
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "subscription",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "bundle",
+          "in" : "path",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace does not exist"
+          }
+        }
+      }
+    },
+    "/non-persistent/{tenant}/{namespace}" : {
+      "get" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Get the list of non-persistent topics under a namespace.",
+        "description" : "",
+        "operationId" : "getList",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "array",
+              "items" : {
+                "type" : "string"
+              }
+            }
+          },
+          "401" : {
+            "description" : "Don't have permission to manage resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "The tenant/namespace does not exist"
+          },
+          "412" : {
+            "description" : "Namespace name is not valid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/non-persistent/{tenant}/{namespace}/partitioned" : {
+      "get" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Get the list of partitioned topics under a namespace.",
+        "description" : "",
+        "operationId" : "getPartitionedTopicList",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "array",
+              "items" : {
+                "type" : "string"
+              }
+            }
+          },
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "tenant/namespace/topic doesn't exit"
+          },
+          "412" : {
+            "description" : "Namespace name is not valid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          }
+        }
+      }
+    },
+    "/non-persistent/{tenant}/{namespace}/{bundle}" : {
+      "get" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Get the list of non-persistent topics under a namespace bundle.",
+        "description" : "",
+        "operationId" : "getListFromBundle",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "bundle",
+          "in" : "path",
+          "description" : "Bundle range of a topic",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "array",
+              "items" : {
+                "type" : "string"
+              }
+            }
+          },
+          "401" : {
+            "description" : "Don't have permission to manage resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Namespace doesn't exist"
+          },
+          "412" : {
+            "description" : "Namespace name is not valid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/non-persistent/{tenant}/{namespace}/{topic}" : {
+      "put" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Create a non-partitioned topic.",
+        "description" : "This is the only REST endpoint from which non-partitioned topics could be created.",
+        "operationId" : "createNonPartitionedTopic",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "409" : {
+            "description" : "Partitioned topic already exist"
+          },
+          "412" : {
+            "description" : "Failed Reason : Name is invalid or Namespace does not have any clusters configured"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      },
+      "delete" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Delete a topic.",
+        "description" : "The topic cannot be deleted if delete is not forcefully and there's any active subscription or producer connected to the it. Force delete ignores connected clients and deletes topic by explicitly closing them.",
+        "operationId" : "deleteTopic",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "force",
+          "in" : "query",
+          "description" : "Stop all producer/consumer/replicator and delete topic forcefully",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic does not exist"
+          },
+          "412" : {
+            "description" : "Topic has active producers/subscriptions"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          }
+        }
+      }
+    },
+    "/non-persistent/{tenant}/{namespace}/{topic}/all_subscription/expireMessages/{expireTimeInSeconds}" : {
+      "post" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Expiry messages on all subscriptions of topic.",
+        "description" : "",
+        "operationId" : "expireMessagesForAllSubscriptions",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "expireTimeInSeconds",
+          "in" : "path",
+          "description" : "Expires beyond the specified number of seconds",
+          "required" : true,
+          "type" : "integer",
+          "default" : 0,
+          "format" : "int32"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant orsubscriber is not authorized to access this operation"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic or subscription does not exist"
+          },
+          "405" : {
+            "description" : "Expiry messages on a non-persistent topic is not allowed"
+          },
+          "412" : {
+            "description" : "Can't find owner for topic"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/non-persistent/{tenant}/{namespace}/{topic}/backlog" : {
+      "get" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Get estimated backlog for offline topic.",
+        "description" : "",
+        "operationId" : "getBacklog",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/PersistentOfflineTopicStats"
+            }
+          },
+          "404" : {
+            "description" : "Namespace does not exist"
+          },
+          "412" : {
+            "description" : "Topic name is not valid"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/non-persistent/{tenant}/{namespace}/{topic}/compaction" : {
+      "get" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Get the status of a compaction operation for a topic.",
+        "description" : "",
+        "operationId" : "compactionStatus",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/LongRunningProcessStatus"
+            }
+          },
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant orsubscriber is not authorized to access this operation"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic does not exist, or compaction hasn't run"
+          },
+          "405" : {
+            "description" : "Operation is not allowed on the persistent topic"
+          },
+          "412" : {
+            "description" : "Topic name is not valid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      },
+      "put" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Trigger a compaction operation on a topic.",
+        "description" : "",
+        "operationId" : "compact",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant orsubscriber is not authorized to access this operation"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic does not exist"
+          },
+          "405" : {
+            "description" : "Operation is not allowed on the persistent topic"
+          },
+          "409" : {
+            "description" : "Compaction already running"
+          },
+          "412" : {
+            "description" : "Topic name is not valid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/non-persistent/{tenant}/{namespace}/{topic}/internal-info" : {
+      "get" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Get the internal stats for the topic.",
+        "description" : "",
+        "operationId" : "getManagedLedgerInfo",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic does not exist"
+          },
+          "412" : {
+            "description" : "Topic name is not valid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/non-persistent/{tenant}/{namespace}/{topic}/internalStats" : {
+      "get" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Get the internal stats for the topic.",
+        "description" : "",
+        "operationId" : "getInternalStats",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/PersistentTopicInternalStats"
+            }
+          },
+          "401" : {
+            "description" : "Don't have permission to manage resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "The tenant/namespace/topic does not exist"
+          },
+          "412" : {
+            "description" : "Topic name is not valid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          }
+        }
+      }
+    },
+    "/non-persistent/{tenant}/{namespace}/{topic}/lastMessageId" : {
+      "get" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Return the last commit message id of topic",
+        "description" : "",
+        "operationId" : "getLastMessageId",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/MessageId"
+            }
+          },
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant orsubscriber is not authorized to access this operation"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic does not exist"
+          },
+          "405" : {
+            "description" : "Operation is not allowed on the persistent topic"
+          },
+          "412" : {
+            "description" : "Topic name is not valid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/non-persistent/{tenant}/{namespace}/{topic}/offload" : {
+      "get" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Offload a prefix of a topic to long term storage",
+        "description" : "",
+        "operationId" : "offloadStatus",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/OffloadProcessStatus"
+            }
+          },
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant orsubscriber is not authorized to access this operation"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic does not exist"
+          },
+          "405" : {
+            "description" : "Operation is not allowed on the persistent topic"
+          },
+          "412" : {
+            "description" : "Topic name is not valid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      },
+      "put" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Offload a prefix of a topic to long term storage",
+        "description" : "",
+        "operationId" : "triggerOffload",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant orsubscriber is not authorized to access this operation"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic does not exist"
+          },
+          "405" : {
+            "description" : "Operation is not allowed on the persistent topic"
+          },
+          "409" : {
+            "description" : "Offload already running"
+          },
+          "412" : {
+            "description" : "Topic name is not valid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/non-persistent/{tenant}/{namespace}/{topic}/partitioned-stats" : {
+      "get" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Get the stats for the partitioned topic.",
+        "description" : "",
+        "operationId" : "getPartitionedStats",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic does not exist"
+          },
+          "412" : {
+            "description" : "Partitioned topic name is invalid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/non-persistent/{tenant}/{namespace}/{topic}/partitions" : {
+      "get" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Get partitioned topic metadata.",
+        "description" : "",
+        "operationId" : "getPartitionedMetadata",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/PartitionedTopicMetadata"
+            }
+          },
+          "401" : {
+            "description" : "Don't have permission to manage resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "The tenant/namespace/topic does not exist"
+          },
+          "412" : {
+            "description" : "Topic name is not valid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate cluster configuration"
+          }
+        }
+      },
+      "post" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Increment partitons of an existing partitioned topic.",
+        "description" : "It only increments partitions of existing non-global partitioned-topic",
+        "operationId" : "updatePartitionedTopic",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "in" : "body",
+          "name" : "body",
+          "description" : "The number of partitions for the topic",
+          "required" : true,
+          "schema" : {
+            "type" : "integer",
+            "format" : "int32",
+            "default" : 0
+          }
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to adminisActions to be grantedtrate resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Tenant does not exist"
+          },
+          "406" : {
+            "description" : "The number of partitions should be more than 1"
+          },
+          "409" : {
+            "description" : "Partitioned topic does not exist"
+          },
+          "412" : {
+            "description" : "Partitioned topic name is invalid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          }
+        }
+      },
+      "put" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Create a partitioned topic.",
+        "description" : "It needs to be called before creating a producer on a partitioned topic.",
+        "operationId" : "createPartitionedTopic",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "in" : "body",
+          "name" : "body",
+          "description" : "The number of partitions for the topic",
+          "required" : true,
+          "schema" : {
+            "type" : "integer",
+            "format" : "int32",
+            "default" : 0
+          }
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to manage resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "The tenant/namespace does not exist"
+          },
+          "409" : {
+            "description" : "Partitioned topic already exists"
+          },
+          "412" : {
+            "description" : "Failed Reason : Name is invalid or Namespace does not have any clusters configured"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      },
+      "delete" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Delete a partitioned topic.",
+        "description" : "It will also delete all the partitions of the topic if it exists.",
+        "operationId" : "deletePartitionedTopic",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "force",
+          "in" : "query",
+          "description" : "Stop all producer/consumer/replicator and delete topic forcefully",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Partitioned topic does not exist"
+          },
+          "409" : {
+            "description" : "Concurrent modification"
+          },
+          "412" : {
+            "description" : "Partitioned topic name is invalid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          }
+        }
+      }
+    },
+    "/non-persistent/{tenant}/{namespace}/{topic}/permissions" : {
+      "get" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Get permissions on a topic.",
+        "description" : "Retrieve the effective permissions for a topic. These permissions are defined by the permissions set at thenamespace level combined (union) with any eventual specific permission set on the topic.",
+        "operationId" : "getPermissionsOnTopic",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "object",
+              "additionalProperties" : {
+                "type" : "object"
+              }
+            }
+          },
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "tenant/namespace/topic doesn't exit"
+          },
+          "412" : {
+            "description" : "Topic name is not valid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          }
+        }
+      }
+    },
+    "/non-persistent/{tenant}/{namespace}/{topic}/permissions/{role}" : {
+      "post" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Grant a new permission to a role on a single topic.",
+        "description" : "",
+        "operationId" : "grantPermissionsOnTopic",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "role",
+          "in" : "path",
+          "description" : "Client role to which grant permissions",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "in" : "body",
+          "name" : "body",
+          "description" : "Actions to be granted (produce,functions,consume)",
+          "required" : false,
+          "schema" : {
+            "type" : "array",
+            "items" : {
+              "type" : "string",
+              "enum" : [ "produce", "consume", "functions" ]
+            }
+          }
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "tenant/namespace/topic doesn't exit"
+          },
+          "409" : {
+            "description" : "Concurrent modification"
+          },
+          "412" : {
+            "description" : "Topic name is not valid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          }
+        }
+      },
+      "delete" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Revoke permissions on a topic.",
+        "description" : "Revoke permissions to a role on a single topic. If the permission was not set at the topiclevel, but rather at the namespace level, this operation will return an error (HTTP status code 412).",
+        "operationId" : "revokePermissionsOnTopic",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "role",
+          "in" : "path",
+          "description" : "Client role to which grant permissions",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "tenant/namespace/topic doesn't exit"
+          },
+          "412" : {
+            "description" : "Permissions are not set at the topic level"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          }
+        }
+      }
+    },
+    "/non-persistent/{tenant}/{namespace}/{topic}/stats" : {
+      "get" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Get the stats for the topic.",
+        "description" : "",
+        "operationId" : "getStats",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/NonPersistentTopicStats"
+            }
+          },
+          "401" : {
+            "description" : "Don't have permission to manage resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "The tenant/namespace/topic does not exist"
+          },
+          "412" : {
+            "description" : "Topic name is not valid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          }
+        }
+      }
+    },
+    "/non-persistent/{tenant}/{namespace}/{topic}/subscription/{subName}" : {
+      "delete" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Delete a subscription.",
+        "description" : "There should not be any active consumers on the subscription.",
+        "operationId" : "deleteSubscription",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "subName",
+          "in" : "path",
+          "description" : "Subscription to be deleted",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic does not exist"
+          },
+          "412" : {
+            "description" : "Subscription has active consumers"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/non-persistent/{tenant}/{namespace}/{topic}/subscription/{subName}/expireMessages/{expireTimeInSeconds}" : {
+      "post" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Expiry messages on a topic subscription.",
+        "description" : "",
+        "operationId" : "expireTopicMessages",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "subName",
+          "in" : "path",
+          "description" : "Subscription to be Expiry messages on",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "expireTimeInSeconds",
+          "in" : "path",
+          "description" : "Expires beyond the specified number of seconds",
+          "required" : true,
+          "type" : "integer",
+          "default" : 0,
+          "format" : "int32"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant orsubscriber is not authorized to access this operation"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic or subscription does not exist"
+          },
+          "405" : {
+            "description" : "Expiry messages on a non-persistent topic is not allowed"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/non-persistent/{tenant}/{namespace}/{topic}/subscription/{subName}/position/{messagePosition}" : {
+      "get" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Peek nth message on a topic subscription.",
+        "description" : "",
+        "operationId" : "peekNthMessage",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "subName",
+          "in" : "path",
+          "description" : "Subscribed message expired",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "messagePosition",
+          "in" : "path",
+          "description" : "The number of messages (default 1)",
+          "required" : true,
+          "type" : "integer",
+          "default" : 1,
+          "format" : "int32"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant orsubscriber is not authorized to access this operation"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic, subscription or the message position does not exist"
+          },
+          "405" : {
+            "description" : "Skipping messages on a non-persistent topic is not allowed"
+          },
+          "412" : {
+            "description" : "Topic name is not valid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/non-persistent/{tenant}/{namespace}/{topic}/subscription/{subName}/resetcursor" : {
+      "post" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Reset subscription to message position closest to given position.",
+        "description" : "It fence cursor and disconnects all active consumers before reseting cursor.",
+        "operationId" : "resetCursorOnPosition",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "subName",
+          "in" : "path",
+          "description" : "Subscription to reset position on",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        }, {
+          "in" : "body",
+          "name" : "messageId",
+          "description" : "messageId to reset back to (ledgerId:entryId)",
+          "required" : false,
+          "schema" : {
+            "$ref" : "#/definitions/MessageIdImpl"
+          }
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant orsubscriber is not authorized to access this operation"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic/Subscription does not exist"
+          },
+          "405" : {
+            "description" : "Not supported for partitioned topics"
+          },
+          "412" : {
+            "description" : "Unable to find position for position specified"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/non-persistent/{tenant}/{namespace}/{topic}/subscription/{subName}/resetcursor/{timestamp}" : {
+      "post" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Reset subscription to message position closest to absolute timestamp (in ms).",
+        "description" : "It fence cursor and disconnects all active consumers before reseting cursor.",
+        "operationId" : "resetCursor",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "subName",
+          "in" : "path",
+          "description" : "Subscription to reset position on",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "timestamp",
+          "in" : "path",
+          "description" : "time in minutes to reset back to (or minutes, hours,days,weeks eg:100m, 3h, 2d, 5w)",
+          "required" : true,
+          "type" : "integer",
+          "format" : "int64"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant orsubscriber is not authorized to access this operation"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic/Subscription does not exist"
+          },
+          "405" : {
+            "description" : "Method Not Allowed"
+          },
+          "412" : {
+            "description" : "Failed to reset cursor on subscription or Unable to find position for timestamp specified"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/non-persistent/{tenant}/{namespace}/{topic}/subscription/{subName}/skip/{numMessages}" : {
+      "post" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Skipping messages on a topic subscription.",
+        "description" : "",
+        "operationId" : "skipMessages",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "subName",
+          "in" : "path",
+          "description" : "Name of subscription",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "numMessages",
+          "in" : "path",
+          "description" : "The number of messages to skip",
+          "required" : true,
+          "type" : "integer",
+          "default" : 0,
+          "format" : "int32"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic or subscription does not exist"
+          },
+          "405" : {
+            "description" : "Skipping messages on a partitioned topic is not allowed"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/non-persistent/{tenant}/{namespace}/{topic}/subscription/{subName}/skip_all" : {
+      "post" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Skip all messages on a topic subscription.",
+        "description" : "Completely clears the backlog on the subscription.",
+        "operationId" : "skipAllMessages",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "subName",
+          "in" : "path",
+          "description" : "Name of subscription",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant orsubscriber is not authorized to access this operation"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic or subscription does not exist"
+          },
+          "405" : {
+            "description" : "Operation not allowed on non-persistent topic"
+          },
+          "412" : {
+            "description" : "Can't find owner for topic"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/non-persistent/{tenant}/{namespace}/{topic}/subscription/{subscriptionName}" : {
+      "put" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Reset subscription to message position closest to given position.",
+        "description" : "Creates a subscription on the topic at the specified message id",
+        "operationId" : "createSubscription",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "subscriptionName",
+          "in" : "path",
+          "description" : "Subscription to create position on",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "messageId where to create the subscription. It can be 'latest', 'earliest' or (ledgerId:entryId)",
+          "required" : false,
+          "type" : "boolean",
+          "default" : "latest",
+          "enum" : [ "latest", "earliest", "ledgerId:entryId" ]
+        }, {
+          "name" : "replicated",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean"
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant orsubscriber is not authorized to access this operation"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic/Subscription does not exist"
+          },
+          "405" : {
+            "description" : "Not supported for partitioned topics"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/non-persistent/{tenant}/{namespace}/{topic}/subscriptions" : {
+      "get" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Get the list of persistent subscriptions for a given topic.",
+        "description" : "",
+        "operationId" : "getSubscriptions",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "array",
+              "items" : {
+                "type" : "object"
+              }
+            }
+          },
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic does not exist"
+          },
+          "412" : {
+            "description" : "Topic name is not valid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/non-persistent/{tenant}/{namespace}/{topic}/terminate" : {
+      "post" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Terminate a topic. A topic that is terminated will not accept any more messages to be published and will let consumer to drain existing messages in backlog",
+        "description" : "",
+        "operationId" : "terminate",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/MessageId"
+            }
+          },
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant orsubscriber is not authorized to access this operation"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic does not exist"
+          },
+          "405" : {
+            "description" : "Termination of a partitioned topic is not allowed"
+          },
+          "412" : {
+            "description" : "Topic name is not valid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/non-persistent/{tenant}/{namespace}/{topic}/unload" : {
+      "put" : {
+        "tags" : [ "non-persistent topic" ],
+        "summary" : "Unload a topic",
+        "description" : "",
+        "operationId" : "unloadTopic",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "This operation requires super-user access"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "The tenant/namespace/topic does not exist"
+          },
+          "412" : {
+            "description" : "Topic name is not valid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/persistent/{tenant}/{namespace}" : {
+      "get" : {
+        "tags" : [ "persistent topic" ],
+        "summary" : "Get the list of topics under a namespace.",
+        "description" : "",
+        "operationId" : "getList",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "array",
+              "items" : {
+                "type" : "string"
+              }
+            }
+          },
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "tenant/namespace/topic doesn't exit"
+          },
+          "412" : {
+            "description" : "Namespace name is not valid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          }
+        }
+      }
+    },
+    "/persistent/{tenant}/{namespace}/partitioned" : {
+      "get" : {
+        "tags" : [ "persistent topic" ],
+        "summary" : "Get the list of partitioned topics under a namespace.",
+        "description" : "",
+        "operationId" : "getPartitionedTopicList",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "array",
+              "items" : {
+                "type" : "string"
+              }
+            }
+          },
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "tenant/namespace/topic doesn't exit"
+          },
+          "412" : {
+            "description" : "Namespace name is not valid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          }
+        }
+      }
+    },
+    "/persistent/{tenant}/{namespace}/{topic}" : {
+      "put" : {
+        "tags" : [ "persistent topic" ],
+        "summary" : "Create a non-partitioned topic.",
+        "description" : "This is the only REST endpoint from which non-partitioned topics could be created.",
+        "operationId" : "createNonPartitionedTopic",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "409" : {
+            "description" : "Partitioned topic already exist"
+          },
+          "412" : {
+            "description" : "Failed Reason : Name is invalid or Namespace does not have any clusters configured"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      },
+      "delete" : {
+        "tags" : [ "persistent topic" ],
+        "summary" : "Delete a topic.",
+        "description" : "The topic cannot be deleted if delete is not forcefully and there's any active subscription or producer connected to the it. Force delete ignores connected clients and deletes topic by explicitly closing them.",
+        "operationId" : "deleteTopic",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "force",
+          "in" : "query",
+          "description" : "Stop all producer/consumer/replicator and delete topic forcefully",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic does not exist"
+          },
+          "412" : {
+            "description" : "Topic has active producers/subscriptions"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          }
+        }
+      }
+    },
+    "/persistent/{tenant}/{namespace}/{topic}/all_subscription/expireMessages/{expireTimeInSeconds}" : {
+      "post" : {
+        "tags" : [ "persistent topic" ],
+        "summary" : "Expiry messages on all subscriptions of topic.",
+        "description" : "",
+        "operationId" : "expireMessagesForAllSubscriptions",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "expireTimeInSeconds",
+          "in" : "path",
+          "description" : "Expires beyond the specified number of seconds",
+          "required" : true,
+          "type" : "integer",
+          "default" : 0,
+          "format" : "int32"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant orsubscriber is not authorized to access this operation"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic or subscription does not exist"
+          },
+          "405" : {
+            "description" : "Expiry messages on a non-persistent topic is not allowed"
+          },
+          "412" : {
+            "description" : "Can't find owner for topic"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/persistent/{tenant}/{namespace}/{topic}/backlog" : {
+      "get" : {
+        "tags" : [ "persistent topic" ],
+        "summary" : "Get estimated backlog for offline topic.",
+        "description" : "",
+        "operationId" : "getBacklog",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/PersistentOfflineTopicStats"
+            }
+          },
+          "404" : {
+            "description" : "Namespace does not exist"
+          },
+          "412" : {
+            "description" : "Topic name is not valid"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/persistent/{tenant}/{namespace}/{topic}/compaction" : {
+      "get" : {
+        "tags" : [ "persistent topic" ],
+        "summary" : "Get the status of a compaction operation for a topic.",
+        "description" : "",
+        "operationId" : "compactionStatus",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/LongRunningProcessStatus"
+            }
+          },
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant orsubscriber is not authorized to access this operation"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic does not exist, or compaction hasn't run"
+          },
+          "405" : {
+            "description" : "Operation is not allowed on the persistent topic"
+          },
+          "412" : {
+            "description" : "Topic name is not valid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      },
+      "put" : {
+        "tags" : [ "persistent topic" ],
+        "summary" : "Trigger a compaction operation on a topic.",
+        "description" : "",
+        "operationId" : "compact",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant orsubscriber is not authorized to access this operation"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic does not exist"
+          },
+          "405" : {
+            "description" : "Operation is not allowed on the persistent topic"
+          },
+          "409" : {
+            "description" : "Compaction already running"
+          },
+          "412" : {
+            "description" : "Topic name is not valid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/persistent/{tenant}/{namespace}/{topic}/internal-info" : {
+      "get" : {
+        "tags" : [ "persistent topic" ],
+        "summary" : "Get the internal stats for the topic.",
+        "description" : "",
+        "operationId" : "getManagedLedgerInfo",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic does not exist"
+          },
+          "412" : {
+            "description" : "Topic name is not valid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/persistent/{tenant}/{namespace}/{topic}/internalStats" : {
+      "get" : {
+        "tags" : [ "persistent topic" ],
+        "summary" : "Get the internal stats for the topic.",
+        "description" : "",
+        "operationId" : "getInternalStats",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/PersistentTopicInternalStats"
+            }
+          },
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic does not exist"
+          },
+          "412" : {
+            "description" : "Topic name is not valid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/persistent/{tenant}/{namespace}/{topic}/lastMessageId" : {
+      "get" : {
+        "tags" : [ "persistent topic" ],
+        "summary" : "Return the last commit message id of topic",
+        "description" : "",
+        "operationId" : "getLastMessageId",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/MessageId"
+            }
+          },
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant orsubscriber is not authorized to access this operation"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic does not exist"
+          },
+          "405" : {
+            "description" : "Operation is not allowed on the persistent topic"
+          },
+          "412" : {
+            "description" : "Topic name is not valid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/persistent/{tenant}/{namespace}/{topic}/offload" : {
+      "get" : {
+        "tags" : [ "persistent topic" ],
+        "summary" : "Offload a prefix of a topic to long term storage",
+        "description" : "",
+        "operationId" : "offloadStatus",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/OffloadProcessStatus"
+            }
+          },
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant orsubscriber is not authorized to access this operation"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic does not exist"
+          },
+          "405" : {
+            "description" : "Operation is not allowed on the persistent topic"
+          },
+          "412" : {
+            "description" : "Topic name is not valid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      },
+      "put" : {
+        "tags" : [ "persistent topic" ],
+        "summary" : "Offload a prefix of a topic to long term storage",
+        "description" : "",
+        "operationId" : "triggerOffload",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant orsubscriber is not authorized to access this operation"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic does not exist"
+          },
+          "405" : {
+            "description" : "Operation is not allowed on the persistent topic"
+          },
+          "409" : {
+            "description" : "Offload already running"
+          },
+          "412" : {
+            "description" : "Topic name is not valid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/persistent/{tenant}/{namespace}/{topic}/partitioned-stats" : {
+      "get" : {
+        "tags" : [ "persistent topic" ],
+        "summary" : "Get the stats for the partitioned topic.",
+        "description" : "",
+        "operationId" : "getPartitionedStats",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic does not exist"
+          },
+          "412" : {
+            "description" : "Partitioned topic name is invalid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/persistent/{tenant}/{namespace}/{topic}/partitions" : {
+      "get" : {
+        "tags" : [ "persistent topic" ],
+        "summary" : "Get partitioned topic metadata.",
+        "description" : "",
+        "operationId" : "getPartitionedMetadata",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/PartitionedTopicMetadata"
+            }
+          },
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Tenant does not exist"
+          },
+          "409" : {
+            "description" : "Concurrent modification"
+          },
+          "412" : {
+            "description" : "Partitioned topic name is invalid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          }
+        }
+      },
+      "post" : {
+        "tags" : [ "persistent topic" ],
+        "summary" : "Increment partitons of an existing partitioned topic.",
+        "description" : "It only increments partitions of existing non-global partitioned-topic",
+        "operationId" : "updatePartitionedTopic",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "in" : "body",
+          "name" : "body",
+          "description" : "The number of partitions for the topic",
+          "required" : true,
+          "schema" : {
+            "type" : "integer",
+            "format" : "int32",
+            "default" : 0
+          }
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to adminisActions to be grantedtrate resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Tenant does not exist"
+          },
+          "406" : {
+            "description" : "The number of partitions should be more than 1"
+          },
+          "409" : {
+            "description" : "Partitioned topic does not exist"
+          },
+          "412" : {
+            "description" : "Partitioned topic name is invalid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          }
+        }
+      },
+      "put" : {
+        "tags" : [ "persistent topic" ],
+        "summary" : "Create a partitioned topic.",
+        "description" : "It needs to be called before creating a producer on a partitioned topic.",
+        "operationId" : "createPartitionedTopic",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "in" : "body",
+          "name" : "body",
+          "description" : "The number of partitions for the topic",
+          "required" : true,
+          "schema" : {
+            "type" : "integer",
+            "format" : "int32",
+            "default" : 0
+          }
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Tenant does not exist"
+          },
+          "409" : {
+            "description" : "Partitioned topic already exist"
+          },
+          "412" : {
+            "description" : "Failed Reason : Name is invalid or Namespace does not have any clusters configured"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      },
+      "delete" : {
+        "tags" : [ "persistent topic" ],
+        "summary" : "Delete a partitioned topic.",
+        "description" : "It will also delete all the partitions of the topic if it exists.",
+        "operationId" : "deletePartitionedTopic",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "force",
+          "in" : "query",
+          "description" : "Stop all producer/consumer/replicator and delete topic forcefully",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Partitioned topic does not exist"
+          },
+          "409" : {
+            "description" : "Concurrent modification"
+          },
+          "412" : {
+            "description" : "Partitioned topic name is invalid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          }
+        }
+      }
+    },
+    "/persistent/{tenant}/{namespace}/{topic}/permissions" : {
+      "get" : {
+        "tags" : [ "persistent topic" ],
+        "summary" : "Get permissions on a topic.",
+        "description" : "Retrieve the effective permissions for a topic. These permissions are defined by the permissions set at thenamespace level combined (union) with any eventual specific permission set on the topic.",
+        "operationId" : "getPermissionsOnTopic",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "type" : "object",
+              "additionalProperties" : {
+                "type" : "object"
+              }
+            }
+          },
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "tenant/namespace/topic doesn't exit"
+          },
+          "412" : {
+            "description" : "Topic name is not valid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          }
+        }
+      }
+    },
+    "/persistent/{tenant}/{namespace}/{topic}/permissions/{role}" : {
+      "post" : {
+        "tags" : [ "persistent topic" ],
+        "summary" : "Grant a new permission to a role on a single topic.",
+        "description" : "",
+        "operationId" : "grantPermissionsOnTopic",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "role",
+          "in" : "path",
+          "description" : "Client role to which grant permissions",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "in" : "body",
+          "name" : "body",
+          "description" : "Actions to be granted (produce,functions,consume)",
+          "required" : false,
+          "schema" : {
+            "type" : "array",
+            "items" : {
+              "type" : "string",
+              "enum" : [ "produce", "consume", "functions" ]
+            }
+          }
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "tenant/namespace/topic doesn't exit"
+          },
+          "409" : {
+            "description" : "Concurrent modification"
+          },
+          "412" : {
+            "description" : "Topic name is not valid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          }
+        }
+      },
+      "delete" : {
+        "tags" : [ "persistent topic" ],
+        "summary" : "Revoke permissions on a topic.",
+        "description" : "Revoke permissions to a role on a single topic. If the permission was not set at the topiclevel, but rather at the namespace level, this operation will return an error (HTTP status code 412).",
+        "operationId" : "revokePermissionsOnTopic",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "role",
+          "in" : "path",
+          "description" : "Client role to which grant permissions",
+          "required" : true,
+          "type" : "string"
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "tenant/namespace/topic doesn't exit"
+          },
+          "412" : {
+            "description" : "Permissions are not set at the topic level"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          }
+        }
+      }
+    },
+    "/persistent/{tenant}/{namespace}/{topic}/stats" : {
+      "get" : {
+        "tags" : [ "persistent topic" ],
+        "summary" : "Get the stats for the topic.",
+        "description" : "",
+        "operationId" : "getStats",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "schema" : {
+              "$ref" : "#/definitions/TopicStats"
+            }
+          },
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic does not exist"
+          },
+          "412" : {
+            "description" : "Topic name is not valid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/persistent/{tenant}/{namespace}/{topic}/subscription/{subName}" : {
+      "delete" : {
+        "tags" : [ "persistent topic" ],
+        "summary" : "Delete a subscription.",
+        "description" : "There should not be any active consumers on the subscription.",
+        "operationId" : "deleteSubscription",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "subName",
+          "in" : "path",
+          "description" : "Subscription to be deleted",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic does not exist"
+          },
+          "412" : {
+            "description" : "Subscription has active consumers"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/persistent/{tenant}/{namespace}/{topic}/subscription/{subName}/expireMessages/{expireTimeInSeconds}" : {
+      "post" : {
+        "tags" : [ "persistent topic" ],
+        "summary" : "Expiry messages on a topic subscription.",
+        "description" : "",
+        "operationId" : "expireTopicMessages",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "subName",
+          "in" : "path",
+          "description" : "Subscription to be Expiry messages on",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "expireTimeInSeconds",
+          "in" : "path",
+          "description" : "Expires beyond the specified number of seconds",
+          "required" : true,
+          "type" : "integer",
+          "default" : 0,
+          "format" : "int32"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant orsubscriber is not authorized to access this operation"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic or subscription does not exist"
+          },
+          "405" : {
+            "description" : "Expiry messages on a non-persistent topic is not allowed"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/persistent/{tenant}/{namespace}/{topic}/subscription/{subName}/position/{messagePosition}" : {
+      "get" : {
+        "tags" : [ "persistent topic" ],
+        "summary" : "Peek nth message on a topic subscription.",
+        "description" : "",
+        "operationId" : "peekNthMessage",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "subName",
+          "in" : "path",
+          "description" : "Subscribed message expired",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "messagePosition",
+          "in" : "path",
+          "description" : "The number of messages (default 1)",
+          "required" : true,
+          "type" : "integer",
+          "default" : 1,
+          "format" : "int32"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant orsubscriber is not authorized to access this operation"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic, subscription or the message position does not exist"
+          },
+          "405" : {
+            "description" : "Skipping messages on a non-persistent topic is not allowed"
+          },
+          "412" : {
+            "description" : "Topic name is not valid"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/persistent/{tenant}/{namespace}/{topic}/subscription/{subName}/resetcursor" : {
+      "post" : {
+        "tags" : [ "persistent topic" ],
+        "summary" : "Reset subscription to message position closest to given position.",
+        "description" : "It fence cursor and disconnects all active consumers before reseting cursor.",
+        "operationId" : "resetCursorOnPosition",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "subName",
+          "in" : "path",
+          "description" : "Subscription to reset position on",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        }, {
+          "in" : "body",
+          "name" : "messageId",
+          "description" : "messageId to reset back to (ledgerId:entryId)",
+          "required" : false,
+          "schema" : {
+            "$ref" : "#/definitions/MessageIdImpl"
+          }
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant orsubscriber is not authorized to access this operation"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic/Subscription does not exist"
+          },
+          "405" : {
+            "description" : "Not supported for partitioned topics"
+          },
+          "412" : {
+            "description" : "Unable to find position for position specified"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/persistent/{tenant}/{namespace}/{topic}/subscription/{subName}/resetcursor/{timestamp}" : {
+      "post" : {
+        "tags" : [ "persistent topic" ],
+        "summary" : "Reset subscription to message position closest to absolute timestamp (in ms).",
+        "description" : "It fence cursor and disconnects all active consumers before reseting cursor.",
+        "operationId" : "resetCursor",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
+          "in" : "path",
+          "description" : "Specify the namespace",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "topic",
+          "in" : "path",
+          "description" : "Specify topic name",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "subName",
+          "in" : "path",
+          "description" : "Subscription to reset position on",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "timestamp",
+          "in" : "path",
+          "description" : "time in minutes to reset back to (or minutes, hours,days,weeks eg:100m, 3h, 2d, 5w)",
+          "required" : true,
+          "type" : "integer",
+          "format" : "int64"
+        }, {
+          "name" : "authoritative",
+          "in" : "query",
+          "description" : "Is authentication required to perform this operation",
+          "required" : false,
+          "type" : "boolean",
+          "default" : false
+        } ],
+        "responses" : {
+          "401" : {
+            "description" : "Don't have permission to administrate resources on this tenant orsubscriber is not authorized to access this operation"
+          },
+          "403" : {
+            "description" : "Don't have admin permission"
+          },
+          "404" : {
+            "description" : "Topic/Subscription does not exist"
+          },
+          "405" : {
+            "description" : "Method Not Allowed"
+          },
+          "412" : {
+            "description" : "Failed to reset cursor on subscription or Unable to find position for timestamp specified"
+          },
+          "500" : {
+            "description" : "Internal server error"
+          },
+          "503" : {
+            "description" : "Failed to validate global cluster configuration"
+          }
+        }
+      }
+    },
+    "/persistent/{tenant}/{namespace}/{topic}/subscription/{subName}/skip/{numMessages}" : {
+      "post" : {
+        "tags" : [ "persistent topic" ],
+        "summary" : "Skipping messages on a topic subscription.",
+        "description" : "",
+        "operationId" : "skipMessages",
+        "produces" : [ "application/json" ],
+        "parameters" : [ {
+          "name" : "tenant",
+          "in" : "path",
+          "description" : "Specify the tenant",
+          "required" : true,
+          "type" : "string"
+        }, {
+          "name" : "namespace",
... 6426 lines suppressed ...