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/08/29 20:21:59 UTC

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

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 4926ada  Updated site at revision d8db529
4926ada is described below

commit 4926ada4dfec200ba3581310824c0dc8f4161ffe
Author: jenkins <bu...@apache.org>
AuthorDate: Thu Aug 29 20:21:50 2019 +0000

    Updated site at revision d8db529
---
 content/admin-rest-api.html                        |  2 +-
 content/admin-rest-api/index.html                  |  2 +-
 .../2.1.0-incubating/administration-dashboard.html |  2 +-
 .../administration-dashboard/index.html            |  2 +-
 .../zh-CN/2.1.0-incubating/administration-geo.html | 38 ++++-----
 .../2.1.0-incubating/administration-geo/index.html | 38 ++++-----
 .../2.1.0-incubating/administration-zk-bk.html     |  2 +-
 .../administration-zk-bk/index.html                |  2 +-
 .../2.1.0-incubating/cookbooks-deduplication.html  |  4 +-
 .../cookbooks-deduplication/index.html             |  4 +-
 .../2.1.1-incubating/administration-dashboard.html |  2 +-
 .../administration-dashboard/index.html            |  2 +-
 .../zh-CN/2.1.1-incubating/administration-geo.html | 38 ++++-----
 .../2.1.1-incubating/administration-geo/index.html | 38 ++++-----
 .../2.1.1-incubating/administration-zk-bk.html     |  2 +-
 .../administration-zk-bk/index.html                |  2 +-
 .../2.1.1-incubating/cookbooks-deduplication.html  |  4 +-
 .../cookbooks-deduplication/index.html             |  4 +-
 .../docs/zh-CN/2.2.0/administration-dashboard.html |  2 +-
 .../2.2.0/administration-dashboard/index.html      |  2 +-
 content/docs/zh-CN/2.2.0/administration-geo.html   | 38 ++++-----
 .../docs/zh-CN/2.2.0/administration-geo/index.html | 38 ++++-----
 content/docs/zh-CN/2.2.0/administration-zk-bk.html |  2 +-
 .../zh-CN/2.2.0/administration-zk-bk/index.html    |  2 +-
 .../docs/zh-CN/2.2.0/cookbooks-deduplication.html  |  4 +-
 .../zh-CN/2.2.0/cookbooks-deduplication/index.html |  4 +-
 .../docs/zh-CN/2.2.1/administration-dashboard.html |  2 +-
 .../2.2.1/administration-dashboard/index.html      |  2 +-
 content/docs/zh-CN/2.2.1/administration-geo.html   | 38 ++++-----
 .../docs/zh-CN/2.2.1/administration-geo/index.html | 38 ++++-----
 content/docs/zh-CN/2.2.1/administration-zk-bk.html |  2 +-
 .../zh-CN/2.2.1/administration-zk-bk/index.html    |  2 +-
 .../docs/zh-CN/2.2.1/cookbooks-deduplication.html  |  4 +-
 .../zh-CN/2.2.1/cookbooks-deduplication/index.html |  4 +-
 .../docs/zh-CN/2.3.0/administration-dashboard.html |  2 +-
 .../2.3.0/administration-dashboard/index.html      |  2 +-
 content/docs/zh-CN/2.3.0/administration-geo.html   | 38 ++++-----
 .../docs/zh-CN/2.3.0/administration-geo/index.html | 38 ++++-----
 content/docs/zh-CN/2.3.0/administration-zk-bk.html |  2 +-
 .../zh-CN/2.3.0/administration-zk-bk/index.html    |  2 +-
 .../docs/zh-CN/2.3.0/cookbooks-deduplication.html  |  4 +-
 .../zh-CN/2.3.0/cookbooks-deduplication/index.html |  4 +-
 .../docs/zh-CN/2.3.1/administration-dashboard.html |  2 +-
 .../2.3.1/administration-dashboard/index.html      |  2 +-
 content/docs/zh-CN/2.3.1/administration-geo.html   | 38 ++++-----
 .../docs/zh-CN/2.3.1/administration-geo/index.html | 38 ++++-----
 content/docs/zh-CN/2.3.1/administration-zk-bk.html |  2 +-
 .../zh-CN/2.3.1/administration-zk-bk/index.html    |  2 +-
 .../docs/zh-CN/2.3.1/cookbooks-deduplication.html  |  4 +-
 .../zh-CN/2.3.1/cookbooks-deduplication/index.html |  4 +-
 .../docs/zh-CN/2.3.2/administration-dashboard.html |  2 +-
 .../2.3.2/administration-dashboard/index.html      |  2 +-
 content/docs/zh-CN/2.3.2/administration-geo.html   | 82 +++++++++----------
 .../docs/zh-CN/2.3.2/administration-geo/index.html | 82 +++++++++----------
 content/docs/zh-CN/2.3.2/administration-zk-bk.html |  2 +-
 .../zh-CN/2.3.2/administration-zk-bk/index.html    |  2 +-
 .../docs/zh-CN/2.3.2/cookbooks-deduplication.html  |  4 +-
 .../zh-CN/2.3.2/cookbooks-deduplication/index.html |  4 +-
 content/docs/zh-CN/administration-dashboard.html   |  2 +-
 .../docs/zh-CN/administration-dashboard/index.html |  2 +-
 content/docs/zh-CN/administration-geo.html         | 82 +++++++++----------
 content/docs/zh-CN/administration-geo/index.html   | 82 +++++++++----------
 content/docs/zh-CN/administration-zk-bk.html       |  2 +-
 content/docs/zh-CN/administration-zk-bk/index.html |  2 +-
 content/docs/zh-CN/cookbooks-deduplication.html    |  4 +-
 .../docs/zh-CN/cookbooks-deduplication/index.html  |  4 +-
 content/docs/zh-CN/next/adaptors-kafka.html        |  2 +-
 content/docs/zh-CN/next/adaptors-kafka/index.html  |  2 +-
 content/docs/zh-CN/next/adaptors-spark.html        |  2 +-
 content/docs/zh-CN/next/adaptors-spark/index.html  |  2 +-
 content/docs/zh-CN/next/adaptors-storm.html        |  2 +-
 content/docs/zh-CN/next/adaptors-storm/index.html  |  2 +-
 content/docs/zh-CN/next/admin-api-brokers.html     |  2 +-
 .../docs/zh-CN/next/admin-api-brokers/index.html   |  2 +-
 content/docs/zh-CN/next/admin-api-clusters.html    |  2 +-
 .../docs/zh-CN/next/admin-api-clusters/index.html  |  2 +-
 content/docs/zh-CN/next/admin-api-namespaces.html  |  2 +-
 .../zh-CN/next/admin-api-namespaces/index.html     |  2 +-
 .../next/admin-api-non-persistent-topics.html      |  2 +-
 .../admin-api-non-persistent-topics/index.html     |  2 +-
 content/docs/zh-CN/next/admin-api-overview.html    |  2 +-
 .../docs/zh-CN/next/admin-api-overview/index.html  |  2 +-
 .../zh-CN/next/admin-api-partitioned-topics.html   |  2 +-
 .../next/admin-api-partitioned-topics/index.html   |  2 +-
 content/docs/zh-CN/next/admin-api-permissions.html |  2 +-
 .../zh-CN/next/admin-api-permissions/index.html    |  2 +-
 .../zh-CN/next/admin-api-persistent-topics.html    |  2 +-
 .../next/admin-api-persistent-topics/index.html    |  2 +-
 content/docs/zh-CN/next/admin-api-tenants.html     |  2 +-
 .../docs/zh-CN/next/admin-api-tenants/index.html   |  2 +-
 .../docs/zh-CN/next/administration-dashboard.html  |  4 +-
 .../zh-CN/next/administration-dashboard/index.html |  4 +-
 content/docs/zh-CN/next/administration-geo.html    | 92 +++++++++++-----------
 .../docs/zh-CN/next/administration-geo/index.html  | 92 +++++++++++-----------
 .../zh-CN/next/administration-load-balance.html    |  2 +-
 .../next/administration-load-balance/index.html    |  2 +-
 content/docs/zh-CN/next/administration-proxy.html  |  2 +-
 .../zh-CN/next/administration-proxy/index.html     |  2 +-
 content/docs/zh-CN/next/administration-stats.html  |  2 +-
 .../zh-CN/next/administration-stats/index.html     |  2 +-
 .../docs/zh-CN/next/administration-upgrade.html    |  2 +-
 .../zh-CN/next/administration-upgrade/index.html   |  2 +-
 content/docs/zh-CN/next/administration-zk-bk.html  |  4 +-
 .../zh-CN/next/administration-zk-bk/index.html     |  4 +-
 content/docs/zh-CN/next/client-libraries-cpp.html  |  2 +-
 .../zh-CN/next/client-libraries-cpp/index.html     |  2 +-
 content/docs/zh-CN/next/client-libraries-go.html   |  2 +-
 .../docs/zh-CN/next/client-libraries-go/index.html |  2 +-
 content/docs/zh-CN/next/client-libraries-java.html |  2 +-
 .../zh-CN/next/client-libraries-java/index.html    |  2 +-
 .../docs/zh-CN/next/client-libraries-python.html   |  2 +-
 .../zh-CN/next/client-libraries-python/index.html  |  2 +-
 .../zh-CN/next/client-libraries-websocket.html     |  2 +-
 .../next/client-libraries-websocket/index.html     |  2 +-
 content/docs/zh-CN/next/client-libraries.html      |  2 +-
 .../docs/zh-CN/next/client-libraries/index.html    |  2 +-
 .../zh-CN/next/concepts-architecture-overview.html |  2 +-
 .../next/concepts-architecture-overview/index.html |  2 +-
 .../docs/zh-CN/next/concepts-authentication.html   |  2 +-
 .../zh-CN/next/concepts-authentication/index.html  |  2 +-
 content/docs/zh-CN/next/concepts-clients.html      |  2 +-
 .../docs/zh-CN/next/concepts-clients/index.html    |  2 +-
 content/docs/zh-CN/next/concepts-messaging.html    |  2 +-
 .../docs/zh-CN/next/concepts-messaging/index.html  |  2 +-
 .../docs/zh-CN/next/concepts-multi-tenancy.html    |  2 +-
 .../zh-CN/next/concepts-multi-tenancy/index.html   |  2 +-
 content/docs/zh-CN/next/concepts-overview.html     |  2 +-
 .../docs/zh-CN/next/concepts-overview/index.html   |  2 +-
 content/docs/zh-CN/next/concepts-replication.html  |  2 +-
 .../zh-CN/next/concepts-replication/index.html     |  2 +-
 .../docs/zh-CN/next/concepts-tiered-storage.html   |  2 +-
 .../zh-CN/next/concepts-tiered-storage/index.html  |  2 +-
 .../docs/zh-CN/next/concepts-topic-compaction.html |  2 +-
 .../next/concepts-topic-compaction/index.html      |  2 +-
 .../zh-CN/next/cookbooks-bookkeepermetadata.html   |  2 +-
 .../next/cookbooks-bookkeepermetadata/index.html   |  2 +-
 content/docs/zh-CN/next/cookbooks-compaction.html  |  2 +-
 .../zh-CN/next/cookbooks-compaction/index.html     |  2 +-
 .../docs/zh-CN/next/cookbooks-deduplication.html   |  6 +-
 .../zh-CN/next/cookbooks-deduplication/index.html  |  6 +-
 content/docs/zh-CN/next/cookbooks-encryption.html  |  2 +-
 .../zh-CN/next/cookbooks-encryption/index.html     |  2 +-
 .../docs/zh-CN/next/cookbooks-message-queue.html   |  2 +-
 .../zh-CN/next/cookbooks-message-queue/index.html  |  2 +-
 .../docs/zh-CN/next/cookbooks-non-persistent.html  |  2 +-
 .../zh-CN/next/cookbooks-non-persistent/index.html |  2 +-
 content/docs/zh-CN/next/cookbooks-partitioned.html |  2 +-
 .../zh-CN/next/cookbooks-partitioned/index.html    |  2 +-
 .../zh-CN/next/cookbooks-retention-expiry.html     |  2 +-
 .../next/cookbooks-retention-expiry/index.html     |  2 +-
 .../docs/zh-CN/next/cookbooks-tiered-storage.html  |  2 +-
 .../zh-CN/next/cookbooks-tiered-storage/index.html |  2 +-
 content/docs/zh-CN/next/deploy-aws.html            |  2 +-
 content/docs/zh-CN/next/deploy-aws/index.html      |  2 +-
 .../next/deploy-bare-metal-multi-cluster.html      |  2 +-
 .../deploy-bare-metal-multi-cluster/index.html     |  2 +-
 content/docs/zh-CN/next/deploy-bare-metal.html     |  2 +-
 .../docs/zh-CN/next/deploy-bare-metal/index.html   |  2 +-
 content/docs/zh-CN/next/deploy-dcos.html           |  2 +-
 content/docs/zh-CN/next/deploy-dcos/index.html     |  2 +-
 content/docs/zh-CN/next/deploy-kubernetes.html     |  2 +-
 .../docs/zh-CN/next/deploy-kubernetes/index.html   |  2 +-
 content/docs/zh-CN/next/deploy-monitoring.html     |  2 +-
 .../docs/zh-CN/next/deploy-monitoring/index.html   |  2 +-
 .../docs/zh-CN/next/develop-binary-protocol.html   |  2 +-
 .../zh-CN/next/develop-binary-protocol/index.html  |  2 +-
 content/docs/zh-CN/next/develop-cpp.html           |  2 +-
 content/docs/zh-CN/next/develop-cpp/index.html     |  2 +-
 content/docs/zh-CN/next/develop-load-manager.html  |  2 +-
 .../zh-CN/next/develop-load-manager/index.html     |  2 +-
 content/docs/zh-CN/next/develop-tools.html         |  2 +-
 content/docs/zh-CN/next/develop-tools/index.html   |  2 +-
 content/docs/zh-CN/next/functions-api.html         |  2 +-
 content/docs/zh-CN/next/functions-api/index.html   |  2 +-
 content/docs/zh-CN/next/functions-cli.html         |  2 +-
 content/docs/zh-CN/next/functions-cli/index.html   |  2 +-
 content/docs/zh-CN/next/functions-debug.html       |  2 +-
 content/docs/zh-CN/next/functions-debug/index.html |  2 +-
 content/docs/zh-CN/next/functions-debugging.html   |  2 +-
 .../docs/zh-CN/next/functions-debugging/index.html |  2 +-
 content/docs/zh-CN/next/functions-deploy.html      |  2 +-
 .../docs/zh-CN/next/functions-deploy/index.html    |  2 +-
 content/docs/zh-CN/next/functions-deploying.html   |  2 +-
 .../docs/zh-CN/next/functions-deploying/index.html |  2 +-
 content/docs/zh-CN/next/functions-develop.html     |  2 +-
 .../docs/zh-CN/next/functions-develop/index.html   |  2 +-
 content/docs/zh-CN/next/functions-guarantees.html  |  2 +-
 .../zh-CN/next/functions-guarantees/index.html     |  2 +-
 content/docs/zh-CN/next/functions-metrics.html     |  2 +-
 .../docs/zh-CN/next/functions-metrics/index.html   |  2 +-
 .../docs/zh-CN/next/functions-overview-new.html    |  2 +-
 .../zh-CN/next/functions-overview-new/index.html   |  2 +-
 content/docs/zh-CN/next/functions-overview.html    |  2 +-
 .../docs/zh-CN/next/functions-overview/index.html  |  2 +-
 content/docs/zh-CN/next/functions-quickstart.html  |  2 +-
 .../zh-CN/next/functions-quickstart/index.html     |  2 +-
 content/docs/zh-CN/next/functions-runtime.html     |  2 +-
 .../docs/zh-CN/next/functions-runtime/index.html   |  2 +-
 content/docs/zh-CN/next/functions-state.html       |  2 +-
 content/docs/zh-CN/next/functions-state/index.html |  2 +-
 content/docs/zh-CN/next/functions-worker.html      |  2 +-
 .../docs/zh-CN/next/functions-worker/index.html    |  2 +-
 content/docs/zh-CN/next/io-cdc.html                |  2 +-
 content/docs/zh-CN/next/io-cdc/index.html          |  2 +-
 content/docs/zh-CN/next/io-connectors.html         |  2 +-
 content/docs/zh-CN/next/io-connectors/index.html   |  2 +-
 content/docs/zh-CN/next/io-develop.html            |  2 +-
 content/docs/zh-CN/next/io-develop/index.html      |  2 +-
 content/docs/zh-CN/next/io-managing.html           |  2 +-
 content/docs/zh-CN/next/io-managing/index.html     |  2 +-
 content/docs/zh-CN/next/io-overview.html           |  2 +-
 content/docs/zh-CN/next/io-overview/index.html     |  2 +-
 content/docs/zh-CN/next/io-quickstart.html         |  2 +-
 content/docs/zh-CN/next/io-quickstart/index.html   |  2 +-
 content/docs/zh-CN/next/pulsar-2.0.html            |  2 +-
 content/docs/zh-CN/next/pulsar-2.0/index.html      |  2 +-
 content/docs/zh-CN/next/pulsar-admin.html          |  2 +-
 content/docs/zh-CN/next/pulsar-admin/index.html    |  2 +-
 content/docs/zh-CN/next/reference-cli-tools.html   |  2 +-
 .../docs/zh-CN/next/reference-cli-tools/index.html |  2 +-
 .../docs/zh-CN/next/reference-configuration.html   |  2 +-
 .../zh-CN/next/reference-configuration/index.html  |  2 +-
 .../docs/zh-CN/next/reference-connector-admin.html |  2 +-
 .../next/reference-connector-admin/index.html      |  2 +-
 content/docs/zh-CN/next/reference-metrics.html     |  2 +-
 .../docs/zh-CN/next/reference-metrics/index.html   |  2 +-
 content/docs/zh-CN/next/reference-terminology.html |  2 +-
 .../zh-CN/next/reference-terminology/index.html    |  2 +-
 .../zh-CN/next/schema-evolution-compatibility.html |  2 +-
 .../next/schema-evolution-compatibility/index.html |  2 +-
 content/docs/zh-CN/next/schema-get-started.html    |  2 +-
 .../docs/zh-CN/next/schema-get-started/index.html  |  2 +-
 content/docs/zh-CN/next/schema-manage.html         |  2 +-
 content/docs/zh-CN/next/schema-manage/index.html   |  2 +-
 content/docs/zh-CN/next/schema-understand.html     |  2 +-
 .../docs/zh-CN/next/schema-understand/index.html   |  2 +-
 content/docs/zh-CN/next/security-athenz.html       |  2 +-
 content/docs/zh-CN/next/security-athenz/index.html |  2 +-
 .../docs/zh-CN/next/security-authorization.html    |  2 +-
 .../zh-CN/next/security-authorization/index.html   |  2 +-
 content/docs/zh-CN/next/security-encryption.html   |  2 +-
 .../docs/zh-CN/next/security-encryption/index.html |  2 +-
 content/docs/zh-CN/next/security-extending.html    |  2 +-
 .../docs/zh-CN/next/security-extending/index.html  |  2 +-
 content/docs/zh-CN/next/security-kerberos.html     |  2 +-
 .../docs/zh-CN/next/security-kerberos/index.html   |  2 +-
 content/docs/zh-CN/next/security-overview.html     |  2 +-
 .../docs/zh-CN/next/security-overview/index.html   |  2 +-
 .../zh-CN/next/security-tls-authentication.html    |  2 +-
 .../next/security-tls-authentication/index.html    |  2 +-
 .../docs/zh-CN/next/security-tls-transport.html    |  2 +-
 .../zh-CN/next/security-tls-transport/index.html   |  2 +-
 content/docs/zh-CN/next/security-token-admin.html  |  2 +-
 .../zh-CN/next/security-token-admin/index.html     |  2 +-
 content/docs/zh-CN/next/security-token-client.html |  2 +-
 .../zh-CN/next/security-token-client/index.html    |  2 +-
 .../zh-CN/next/sql-deployment-configurations.html  |  2 +-
 .../next/sql-deployment-configurations/index.html  |  2 +-
 content/docs/zh-CN/next/sql-getting-started.html   |  2 +-
 .../docs/zh-CN/next/sql-getting-started/index.html |  2 +-
 content/docs/zh-CN/next/sql-overview.html          |  2 +-
 content/docs/zh-CN/next/sql-overview/index.html    |  2 +-
 content/docs/zh-CN/next/standalone-docker.html     |  2 +-
 .../docs/zh-CN/next/standalone-docker/index.html   |  2 +-
 content/docs/zh-CN/next/standalone.html            |  2 +-
 content/docs/zh-CN/next/standalone/index.html      |  2 +-
 content/en/admin-rest-api.html                     |  2 +-
 content/en/admin-rest-api/index.html               |  2 +-
 content/en/functions-rest-api.html                 |  2 +-
 content/en/functions-rest-api/index.html           |  2 +-
 content/en/powered-by.html                         |  2 +-
 content/en/powered-by/index.html                   |  2 +-
 content/en/sink-rest-api.html                      |  2 +-
 content/en/sink-rest-api/index.html                |  2 +-
 content/en/source-rest-api.html                    |  2 +-
 content/en/source-rest-api/index.html              |  2 +-
 content/fr/admin-rest-api.html                     |  2 +-
 content/fr/admin-rest-api/index.html               |  2 +-
 content/fr/functions-rest-api.html                 |  2 +-
 content/fr/functions-rest-api/index.html           |  2 +-
 content/fr/powered-by.html                         |  2 +-
 content/fr/powered-by/index.html                   |  2 +-
 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/functions-rest-api.html                    |  2 +-
 content/functions-rest-api/index.html              |  2 +-
 content/ja/admin-rest-api.html                     |  2 +-
 content/ja/admin-rest-api/index.html               |  2 +-
 content/ja/functions-rest-api.html                 |  2 +-
 content/ja/functions-rest-api/index.html           |  2 +-
 content/ja/powered-by.html                         |  2 +-
 content/ja/powered-by/index.html                   |  2 +-
 content/ja/sink-rest-api.html                      |  2 +-
 content/ja/sink-rest-api/index.html                |  2 +-
 content/ja/source-rest-api.html                    |  2 +-
 content/ja/source-rest-api/index.html              |  2 +-
 content/js/custom.js                               | 15 +++-
 content/js/getSwaggerByVersion.js                  | 24 ++++++
 content/powered-by.html                            |  2 +-
 content/powered-by/index.html                      |  2 +-
 content/sink-rest-api.html                         |  2 +-
 content/sink-rest-api/index.html                   |  2 +-
 content/source-rest-api.html                       |  2 +-
 content/source-rest-api/index.html                 |  2 +-
 content/swagger/2.5.0-SNAPSHOT/swagger.json        | 16 ++--
 .../swagger/2.5.0-SNAPSHOT/swaggerfunctions.json   | 10 +--
 content/swagger/swagger.json                       | 16 ++--
 content/swagger/swaggerfunctions.json              | 10 +--
 content/zh-CN/admin-rest-api.html                  |  2 +-
 content/zh-CN/admin-rest-api/index.html            |  2 +-
 content/zh-CN/functions-rest-api.html              |  2 +-
 content/zh-CN/functions-rest-api/index.html        |  2 +-
 content/zh-CN/powered-by.html                      |  2 +-
 content/zh-CN/powered-by/index.html                |  2 +-
 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 +-
 320 files changed, 865 insertions(+), 834 deletions(-)

diff --git a/content/admin-rest-api.html b/content/admin-rest-api.html
index 738521f..93c6591 100644
--- a/content/admin-rest-api.html
+++ b/content/admin-rest-api.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swagger.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></script></ [...]
+      </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"><script base-url="/swagger/swagger.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section class="c [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/admin-rest-api/index.html b/content/admin-rest-api/index.html
index 738521f..93c6591 100644
--- a/content/admin-rest-api/index.html
+++ b/content/admin-rest-api/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swagger.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></script></ [...]
+      </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"><script base-url="/swagger/swagger.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section class="c [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
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 8dcd0f0..43bda77 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
@@ -100,7 +100,7 @@
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="known-issues"></a><a href="#known-issues" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <p>Pulsar <a href="/docs/zh-CN/2.1.0-incubating/security-overview#authentication-providers">authentication</a> is not supported at this point. The dashboard's data collector does not pass any authentication-related data and will be denied access if the Pulsar broker requires authentication.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/administration-geo"><span class="arrow-prev">← </span><span>Geo-replication</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a hr [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/administration-geo"><span class="arrow-prev">← </span><span>跨域复制</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known- [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
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 8dcd0f0..43bda77 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
@@ -100,7 +100,7 @@
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="known-issues"></a><a href="#known-issues" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <p>Pulsar <a href="/docs/zh-CN/2.1.0-incubating/security-overview#authentication-providers">authentication</a> is not supported at this point. The dashboard's data collector does not pass any authentication-related data and will be denied access if the Pulsar broker requires authentication.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/administration-geo"><span class="arrow-prev">← </span><span>Geo-replication</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a hr [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/administration-geo"><span class="arrow-prev">← </span><span>跨域复制</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known- [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.0-incubating/administration-geo.html b/content/docs/zh-CN/2.1.0-incubating/administration-geo.html
index 57da72a..68b57d8 100644
--- a/content/docs/zh-CN/2.1.0-incubating/administration-geo.html
+++ b/content/docs/zh-CN/2.1.0-incubating/administration-geo.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*Geo-replication* is the replication of persistently stored message data across multiple clusters of a Pulsar instance."/><meta name="docsearch:version" content="2.1.0-incubating"/><meta name [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*跨域复制* 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。"/><meta name="docsearch:version" content="2.1.0-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar geo- [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,40 +74,40 @@
                 };
               }
             });
-        </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 geo-replication</h1></header><article><div><span><p><em>Geo-replication</em> is the replication of persistently stored message data across multiple clusters of a Pulsar instance.</p>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
-<p>The diagram below illustrates the process of geo-replication across Pulsar clusters:</p>
-<p><img src="/docs/assets/geo-replication.png" alt="Replication Diagram"></p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Pulsar geo-replication</h1></header><article><div><span><p><em>跨域复制</em> 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。</p>
+<h2><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 [...]
+<p>下图说明了脉冲星在不同集群之间的跨域复制过程</p>
+<p><img src="/docs/assets/geo-replication.png" alt="复制图表"></p>
 <p>In this diagram, whenever producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong> publish messages to the topic <strong>T1</strong> on clusters <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong>, respectively, those messages are instantly replicated across clusters. Once replicated, consumers <strong>C1</strong> and <strong>C2</strong> can consume those messages from their respective clusters.</p>
 <p>Without geo-replication, consumers <strong>C1</strong> and <strong>C2</strong> wouldn't be able to consume messages published by producer <strong>P3</strong>.</p>
-<h2><a class="anchor" aria-hidden="true" id="geo-replication-and-pulsar-properties"></a><a href="#geo-replication-and-pulsar-properties" 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 [...]
-<p>Geo-replication must be enabled on a per-tenant basis in Pulsar. Geo-replication can be enabled between clusters only when a tenant has been created that allows access to both clusters.</p>
+<h2><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 [...]
+<p>在脉冲星中,我们限制了需要通过新增租户来激活跨域复制。 只有在创建了允许访问两个集群的租户时,才能在集群之间启用跨域复制。</p>
 <p>Although geo-replication must be enabled between two clusters, it's actually managed at the namespace level. You must do the following to enable geo-replication for a namespace:</p>
 <ul>
 <li><a href="#creating-global-namespaces">Create a global namespace</a></li>
 <li>Configure that namespace to replicate between two or more provisioned clusters</li>
 </ul>
 <p>Any message published on <em>any</em> topic in that namespace will then be replicated to all clusters in the specified set.</p>
-<h2><a class="anchor" aria-hidden="true" id="local-persistence-and-forwarding"></a><a href="#local-persistence-and-forwarding" 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. [...]
+<h2><a class="anchor" aria-hidden="true" id="本地存储和转发"></a><a href="#本地存储和转发" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
 <p>When messages are produced on a Pulsar topic, they are first persisted in the local cluster and then forwarded asynchronously to the remote clusters.</p>
-<p>In normal cases, when there are no connectivity issues, messages are replicated immediately, at the same time as they are dispatched to local consumers. Typically, end-to-end delivery latency is defined by the network <a href="https://en.wikipedia.org/wiki/Round-trip_delay_time">round-trip time</a> (RTT) between the remote regions.</p>
-<p>Applications can create producers and consumers in any of the clusters, even when the remote clusters are not reachable (like during a network partition).</p>
+<p>在正常情况下,当没有连接问题时,消息会立即复制,同时发送给本地消费者。 通常,端到端交付延迟由远程区域之间的网络往返时间<a href="https://en.wikipedia.org/wiki/Round-trip_delay_time"></a>(RTT)决定。</p>
+<p>应用程序可以在任何集群中创建生产者和消费者,即使无法访问远程集群(比如在网络分区期间)。</p>
 <blockquote>
-<h4><a class="anchor" aria-hidden="true" id="subscriptions-are-local-to-a-cluster"></a><a href="#subscriptions-are-local-to-a-cluster" 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 [...]
-<p>While producers and consumers can publish to and consume from any cluster in a Pulsar instance, subscriptions are local to the clusters in which they are created and cannot be transferred between clusters. If you do need to transfer a subscription, you’ll need to create a new subscription in the desired cluster.</p>
+<h4><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.6 [...]
+<p>虽然生产者和消费者可以在脉冲星实例中的任何集群中发布和消费,但是订阅是创建它们的集群的本地订阅,不能在集群之间传输。 如果确实需要传输订阅,则需要在所需的集群中创建新的订阅。</p>
 </blockquote>
 <p>In the example in the image above, the topic <strong>T1</strong> is being replicated between 3 clusters, <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong>.</p>
-<p>All messages produced in any cluster will be delivered to all subscriptions in all the other clusters. In this case, consumers <strong>C1</strong> and <strong>C2</strong> will receive all messages published by producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong>. Ordering is still guaranteed on a per-producer basis.</p>
-<h2><a class="anchor" aria-hidden="true" id="configuring-replication"></a><a href="#configuring-replication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
+<p>All messages produced in any cluster will be delivered to all subscriptions in all the other clusters. In this case, consumers <strong>C1</strong> and <strong>C2</strong> will receive all messages published by producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong>. 指令仍然在每个生产者的basis上有所保障。</p>
+<h2><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 [...]
 <p>As stated <a href="#geo-replication-and-pulsar-properties">above</a>, geo-replication in Pulsar is managed at the <a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#tenant">tenant</a> level.</p>
-<h3><a class="anchor" aria-hidden="true" id="granting-permissions-to-properties"></a><a href="#granting-permissions-to-properties" 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.5 [...]
+<h3><a class="anchor" aria-hidden="true" id="授予属性权限"></a><a href="#授予属性权限" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>To establish replication to a cluster, the tenant needs permission to use that cluster. This permission can be granted when the tenant is created or later on.</p>
 <p>At creation time, specify all the intended clusters:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin properties create my-tenant \</span>
   --admin-roles my-admin-role \
   --allowed-clusters us-west,us-east,us-cent
 </code></pre>
-<p>To update permissions of an existing tenant, use <code>update</code> instead of <code>create</code>.</p>
+<p>要更新现有租户的权限,请使用<code>update</code>而不是<code>create</code>。</p>
 <h3><a class="anchor" aria-hidden="true" id="creating-global-namespaces"></a><a href="#creating-global-namespaces" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
 <p>Replication must be used with <em>global</em> topics, meaning topics that belong to a global namespace and are thus not tied to any particular cluster.</p>
 <p>Global namespaces need to be created in the <code>global</code> virtual cluster. For example:</p>
@@ -120,7 +120,7 @@
 <p>The replication clusters for a namespace can be changed at any time, with no disruption to ongoing traffic. Replication channels will be immediately set up or stopped in all the clusters as soon as the configuration changes.</p>
 <h3><a class="anchor" aria-hidden="true" id="using-global-topics"></a><a href="#using-global-topics" 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.2 [...]
 <p>Once you've created a global namespace, any topics that producers or consumers create within that namespace will be global. Typically, each application will use the <code>serviceUrl</code> for the local cluster.</p>
-<h4><a class="anchor" aria-hidden="true" id="selective-replication"></a><a href="#selective-replication" 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 [...]
+<h4><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.09 [...]
 <p>By default, messages are replicated to all clusters configured for the namespace. You can restrict replication selectively by specifying a replication list for a message. That message will then be replicated only to the subset in the replication list.</p>
 <p>Below is an example for the <a href="/docs/zh-CN/2.1.0-incubating/client-libraries-java">Java API</a>. Note the use of the <code>setReplicationClusters</code> method when constructing the <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Message">Message</a>
  object:</p>
@@ -138,7 +138,7 @@ producer.newMessage()
         .setReplicationClusters(restrictReplicationTo)
         .send();
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="topic-stats"></a><a href="#topic-stats" 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 [...]
+<h4><a class="anchor" aria-hidden="true" id="topic统计数据"></a><a href="#topic统计数据" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
 <p>Topic-specific statistics for global topics are available via the <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin"><code>pulsar-admin</code></a> tool and <a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
  API:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin persistent stats persistent://my-tenant/my-namespace/my-topic</span>
@@ -149,7 +149,7 @@ producer.newMessage()
 <p>In Pulsar, a topic is automatically deleted when it's no longer used, that is to say, when no producers or consumers are connected <em>and</em> there are no subscriptions <em>and</em> no more messages are kept for retention. For global topics, each region will use a fault-tolerant mechanism to decide when it's safe to delete the topic locally.</p>
 <p>You can explicitly disable topic garbage collection by setting <code>brokerDeleteInactiveTopicsEnabled</code> to <code>false</code> in your <a href="reference-configuration#broker">broker configuration</a>.</p>
 <p>To delete a global topic, close all producers and consumers on the topic and delete all its local subscriptions in every replication cluster. When Pulsar determines that no valid subscription for the topic remains across the system, it will garbage collect the topic.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it w [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.0-incubating/administration-geo/index.html b/content/docs/zh-CN/2.1.0-incubating/administration-geo/index.html
index 57da72a..68b57d8 100644
--- a/content/docs/zh-CN/2.1.0-incubating/administration-geo/index.html
+++ b/content/docs/zh-CN/2.1.0-incubating/administration-geo/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*Geo-replication* is the replication of persistently stored message data across multiple clusters of a Pulsar instance."/><meta name="docsearch:version" content="2.1.0-incubating"/><meta name [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*跨域复制* 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。"/><meta name="docsearch:version" content="2.1.0-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar geo- [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,40 +74,40 @@
                 };
               }
             });
-        </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 geo-replication</h1></header><article><div><span><p><em>Geo-replication</em> is the replication of persistently stored message data across multiple clusters of a Pulsar instance.</p>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
-<p>The diagram below illustrates the process of geo-replication across Pulsar clusters:</p>
-<p><img src="/docs/assets/geo-replication.png" alt="Replication Diagram"></p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Pulsar geo-replication</h1></header><article><div><span><p><em>跨域复制</em> 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。</p>
+<h2><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 [...]
+<p>下图说明了脉冲星在不同集群之间的跨域复制过程</p>
+<p><img src="/docs/assets/geo-replication.png" alt="复制图表"></p>
 <p>In this diagram, whenever producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong> publish messages to the topic <strong>T1</strong> on clusters <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong>, respectively, those messages are instantly replicated across clusters. Once replicated, consumers <strong>C1</strong> and <strong>C2</strong> can consume those messages from their respective clusters.</p>
 <p>Without geo-replication, consumers <strong>C1</strong> and <strong>C2</strong> wouldn't be able to consume messages published by producer <strong>P3</strong>.</p>
-<h2><a class="anchor" aria-hidden="true" id="geo-replication-and-pulsar-properties"></a><a href="#geo-replication-and-pulsar-properties" 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 [...]
-<p>Geo-replication must be enabled on a per-tenant basis in Pulsar. Geo-replication can be enabled between clusters only when a tenant has been created that allows access to both clusters.</p>
+<h2><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 [...]
+<p>在脉冲星中,我们限制了需要通过新增租户来激活跨域复制。 只有在创建了允许访问两个集群的租户时,才能在集群之间启用跨域复制。</p>
 <p>Although geo-replication must be enabled between two clusters, it's actually managed at the namespace level. You must do the following to enable geo-replication for a namespace:</p>
 <ul>
 <li><a href="#creating-global-namespaces">Create a global namespace</a></li>
 <li>Configure that namespace to replicate between two or more provisioned clusters</li>
 </ul>
 <p>Any message published on <em>any</em> topic in that namespace will then be replicated to all clusters in the specified set.</p>
-<h2><a class="anchor" aria-hidden="true" id="local-persistence-and-forwarding"></a><a href="#local-persistence-and-forwarding" 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. [...]
+<h2><a class="anchor" aria-hidden="true" id="本地存储和转发"></a><a href="#本地存储和转发" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
 <p>When messages are produced on a Pulsar topic, they are first persisted in the local cluster and then forwarded asynchronously to the remote clusters.</p>
-<p>In normal cases, when there are no connectivity issues, messages are replicated immediately, at the same time as they are dispatched to local consumers. Typically, end-to-end delivery latency is defined by the network <a href="https://en.wikipedia.org/wiki/Round-trip_delay_time">round-trip time</a> (RTT) between the remote regions.</p>
-<p>Applications can create producers and consumers in any of the clusters, even when the remote clusters are not reachable (like during a network partition).</p>
+<p>在正常情况下,当没有连接问题时,消息会立即复制,同时发送给本地消费者。 通常,端到端交付延迟由远程区域之间的网络往返时间<a href="https://en.wikipedia.org/wiki/Round-trip_delay_time"></a>(RTT)决定。</p>
+<p>应用程序可以在任何集群中创建生产者和消费者,即使无法访问远程集群(比如在网络分区期间)。</p>
 <blockquote>
-<h4><a class="anchor" aria-hidden="true" id="subscriptions-are-local-to-a-cluster"></a><a href="#subscriptions-are-local-to-a-cluster" 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 [...]
-<p>While producers and consumers can publish to and consume from any cluster in a Pulsar instance, subscriptions are local to the clusters in which they are created and cannot be transferred between clusters. If you do need to transfer a subscription, you’ll need to create a new subscription in the desired cluster.</p>
+<h4><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.6 [...]
+<p>虽然生产者和消费者可以在脉冲星实例中的任何集群中发布和消费,但是订阅是创建它们的集群的本地订阅,不能在集群之间传输。 如果确实需要传输订阅,则需要在所需的集群中创建新的订阅。</p>
 </blockquote>
 <p>In the example in the image above, the topic <strong>T1</strong> is being replicated between 3 clusters, <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong>.</p>
-<p>All messages produced in any cluster will be delivered to all subscriptions in all the other clusters. In this case, consumers <strong>C1</strong> and <strong>C2</strong> will receive all messages published by producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong>. Ordering is still guaranteed on a per-producer basis.</p>
-<h2><a class="anchor" aria-hidden="true" id="configuring-replication"></a><a href="#configuring-replication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
+<p>All messages produced in any cluster will be delivered to all subscriptions in all the other clusters. In this case, consumers <strong>C1</strong> and <strong>C2</strong> will receive all messages published by producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong>. 指令仍然在每个生产者的basis上有所保障。</p>
+<h2><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 [...]
 <p>As stated <a href="#geo-replication-and-pulsar-properties">above</a>, geo-replication in Pulsar is managed at the <a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#tenant">tenant</a> level.</p>
-<h3><a class="anchor" aria-hidden="true" id="granting-permissions-to-properties"></a><a href="#granting-permissions-to-properties" 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.5 [...]
+<h3><a class="anchor" aria-hidden="true" id="授予属性权限"></a><a href="#授予属性权限" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>To establish replication to a cluster, the tenant needs permission to use that cluster. This permission can be granted when the tenant is created or later on.</p>
 <p>At creation time, specify all the intended clusters:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin properties create my-tenant \</span>
   --admin-roles my-admin-role \
   --allowed-clusters us-west,us-east,us-cent
 </code></pre>
-<p>To update permissions of an existing tenant, use <code>update</code> instead of <code>create</code>.</p>
+<p>要更新现有租户的权限,请使用<code>update</code>而不是<code>create</code>。</p>
 <h3><a class="anchor" aria-hidden="true" id="creating-global-namespaces"></a><a href="#creating-global-namespaces" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
 <p>Replication must be used with <em>global</em> topics, meaning topics that belong to a global namespace and are thus not tied to any particular cluster.</p>
 <p>Global namespaces need to be created in the <code>global</code> virtual cluster. For example:</p>
@@ -120,7 +120,7 @@
 <p>The replication clusters for a namespace can be changed at any time, with no disruption to ongoing traffic. Replication channels will be immediately set up or stopped in all the clusters as soon as the configuration changes.</p>
 <h3><a class="anchor" aria-hidden="true" id="using-global-topics"></a><a href="#using-global-topics" 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.2 [...]
 <p>Once you've created a global namespace, any topics that producers or consumers create within that namespace will be global. Typically, each application will use the <code>serviceUrl</code> for the local cluster.</p>
-<h4><a class="anchor" aria-hidden="true" id="selective-replication"></a><a href="#selective-replication" 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 [...]
+<h4><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.09 [...]
 <p>By default, messages are replicated to all clusters configured for the namespace. You can restrict replication selectively by specifying a replication list for a message. That message will then be replicated only to the subset in the replication list.</p>
 <p>Below is an example for the <a href="/docs/zh-CN/2.1.0-incubating/client-libraries-java">Java API</a>. Note the use of the <code>setReplicationClusters</code> method when constructing the <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Message">Message</a>
  object:</p>
@@ -138,7 +138,7 @@ producer.newMessage()
         .setReplicationClusters(restrictReplicationTo)
         .send();
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="topic-stats"></a><a href="#topic-stats" 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 [...]
+<h4><a class="anchor" aria-hidden="true" id="topic统计数据"></a><a href="#topic统计数据" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
 <p>Topic-specific statistics for global topics are available via the <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin"><code>pulsar-admin</code></a> tool and <a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
  API:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin persistent stats persistent://my-tenant/my-namespace/my-topic</span>
@@ -149,7 +149,7 @@ producer.newMessage()
 <p>In Pulsar, a topic is automatically deleted when it's no longer used, that is to say, when no producers or consumers are connected <em>and</em> there are no subscriptions <em>and</em> no more messages are kept for retention. For global topics, each region will use a fault-tolerant mechanism to decide when it's safe to delete the topic locally.</p>
 <p>You can explicitly disable topic garbage collection by setting <code>brokerDeleteInactiveTopicsEnabled</code> to <code>false</code> in your <a href="reference-configuration#broker">broker configuration</a>.</p>
 <p>To delete a global topic, close all producers and consumers on the topic and delete all its local subscriptions in every replication cluster. When Pulsar determines that no valid subscription for the topic remains across the system, it will garbage collect the topic.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it w [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.0-incubating/administration-zk-bk.html b/content/docs/zh-CN/2.1.0-incubating/administration-zk-bk.html
index 029c7ff..dc9b8d3 100644
--- a/content/docs/zh-CN/2.1.0-incubating/administration-zk-bk.html
+++ b/content/docs/zh-CN/2.1.0-incubating/administration-zk-bk.html
@@ -287,7 +287,7 @@ admin.namespaces().setPersistence(namespace, policies);
 <p>This diagram illustrates the role of ZooKeeper and BookKeeper in a Pulsar cluster:</p>
 <p><img src="/docs/assets/pulsar-system-architecture.png" alt="ZooKeeper and BookKeeper"></p>
 <p>Each Pulsar cluster consists of one or more message brokers. Each broker relies on an ensemble of bookies.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/administration-geo"><span>Geo-replication</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#d [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/administration-geo"><span>跨域复制</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-lo [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.0-incubating/administration-zk-bk/index.html b/content/docs/zh-CN/2.1.0-incubating/administration-zk-bk/index.html
index 029c7ff..dc9b8d3 100644
--- a/content/docs/zh-CN/2.1.0-incubating/administration-zk-bk/index.html
+++ b/content/docs/zh-CN/2.1.0-incubating/administration-zk-bk/index.html
@@ -287,7 +287,7 @@ admin.namespaces().setPersistence(namespace, policies);
 <p>This diagram illustrates the role of ZooKeeper and BookKeeper in a Pulsar cluster:</p>
 <p><img src="/docs/assets/pulsar-system-architecture.png" alt="ZooKeeper and BookKeeper"></p>
 <p>Each Pulsar cluster consists of one or more message brokers. Each broker relies on an ensemble of bookies.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/administration-geo"><span>Geo-replication</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#d [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/administration-geo"><span>跨域复制</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-lo [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.0-incubating/cookbooks-deduplication.html b/content/docs/zh-CN/2.1.0-incubating/cookbooks-deduplication.html
index 295c3b5..006aaa2 100644
--- a/content/docs/zh-CN/2.1.0-incubating/cookbooks-deduplication.html
+++ b/content/docs/zh-CN/2.1.0-incubating/cookbooks-deduplication.html
@@ -79,7 +79,7 @@
 <blockquote>
 <p>For a more thorough theoretical explanation of message deduplication, see the <a href="/docs/zh-CN/2.1.0-incubating/concepts-messaging#message-deduplication">Concepts and Architecture</a> document.</p>
 </blockquote>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" 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. [...]
+<h2><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 [...]
 <p>Message deduplication can be enabled and disabled on a per-namespace basis. By default, it is <em>disabled</em> on all namespaces and can enabled in the following ways:</p>
 <ul>
 <li>Using the <a href="#enabling"><code>pulsar-admin namespaces</code></a> interface</li>
@@ -163,7 +163,7 @@ Producer producer;
 
 Result result = client.createProducer(topic, producerConfig, producer);
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a href="#configura [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#configuration-for-message [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.0-incubating/cookbooks-deduplication/index.html b/content/docs/zh-CN/2.1.0-incubating/cookbooks-deduplication/index.html
index 295c3b5..006aaa2 100644
--- a/content/docs/zh-CN/2.1.0-incubating/cookbooks-deduplication/index.html
+++ b/content/docs/zh-CN/2.1.0-incubating/cookbooks-deduplication/index.html
@@ -79,7 +79,7 @@
 <blockquote>
 <p>For a more thorough theoretical explanation of message deduplication, see the <a href="/docs/zh-CN/2.1.0-incubating/concepts-messaging#message-deduplication">Concepts and Architecture</a> document.</p>
 </blockquote>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" 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. [...]
+<h2><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 [...]
 <p>Message deduplication can be enabled and disabled on a per-namespace basis. By default, it is <em>disabled</em> on all namespaces and can enabled in the following ways:</p>
 <ul>
 <li>Using the <a href="#enabling"><code>pulsar-admin namespaces</code></a> interface</li>
@@ -163,7 +163,7 @@ Producer producer;
 
 Result result = client.createProducer(topic, producerConfig, producer);
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a href="#configura [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#configuration-for-message [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
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 acf0e57..d4bbb1d 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
@@ -100,7 +100,7 @@
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="known-issues"></a><a href="#known-issues" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <p>Pulsar <a href="/docs/zh-CN/2.1.1-incubating/security-overview#authentication-providers">authentication</a> is not supported at this point. The dashboard's data collector does not pass any authentication-related data and will be denied access if the Pulsar broker requires authentication.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/administration-geo"><span class="arrow-prev">← </span><span>Geo-replication</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a hr [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/administration-geo"><span class="arrow-prev">← </span><span>跨域复制</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known- [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
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 acf0e57..d4bbb1d 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
@@ -100,7 +100,7 @@
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="known-issues"></a><a href="#known-issues" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <p>Pulsar <a href="/docs/zh-CN/2.1.1-incubating/security-overview#authentication-providers">authentication</a> is not supported at this point. The dashboard's data collector does not pass any authentication-related data and will be denied access if the Pulsar broker requires authentication.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/administration-geo"><span class="arrow-prev">← </span><span>Geo-replication</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a hr [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/administration-geo"><span class="arrow-prev">← </span><span>跨域复制</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known- [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.1-incubating/administration-geo.html b/content/docs/zh-CN/2.1.1-incubating/administration-geo.html
index eefe20b..1f980a7 100644
--- a/content/docs/zh-CN/2.1.1-incubating/administration-geo.html
+++ b/content/docs/zh-CN/2.1.1-incubating/administration-geo.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*Geo-replication* is the replication of persistently stored message data across multiple clusters of a Pulsar instance."/><meta name="docsearch:version" content="2.1.1-incubating"/><meta name [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*跨域复制* 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。"/><meta name="docsearch:version" content="2.1.1-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar geo- [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,40 +74,40 @@
                 };
               }
             });
-        </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 geo-replication</h1></header><article><div><span><p><em>Geo-replication</em> is the replication of persistently stored message data across multiple clusters of a Pulsar instance.</p>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
-<p>The diagram below illustrates the process of geo-replication across Pulsar clusters:</p>
-<p><img src="/docs/assets/geo-replication.png" alt="Replication Diagram"></p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Pulsar geo-replication</h1></header><article><div><span><p><em>跨域复制</em> 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。</p>
+<h2><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 [...]
+<p>下图说明了脉冲星在不同集群之间的跨域复制过程</p>
+<p><img src="/docs/assets/geo-replication.png" alt="复制图表"></p>
 <p>In this diagram, whenever producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong> publish messages to the topic <strong>T1</strong> on clusters <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong>, respectively, those messages are instantly replicated across clusters. Once replicated, consumers <strong>C1</strong> and <strong>C2</strong> can consume those messages from their respective clusters.</p>
 <p>Without geo-replication, consumers <strong>C1</strong> and <strong>C2</strong> wouldn't be able to consume messages published by producer <strong>P3</strong>.</p>
-<h2><a class="anchor" aria-hidden="true" id="geo-replication-and-pulsar-properties"></a><a href="#geo-replication-and-pulsar-properties" 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 [...]
-<p>Geo-replication must be enabled on a per-tenant basis in Pulsar. Geo-replication can be enabled between clusters only when a tenant has been created that allows access to both clusters.</p>
+<h2><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 [...]
+<p>在脉冲星中,我们限制了需要通过新增租户来激活跨域复制。 只有在创建了允许访问两个集群的租户时,才能在集群之间启用跨域复制。</p>
 <p>Although geo-replication must be enabled between two clusters, it's actually managed at the namespace level. You must do the following to enable geo-replication for a namespace:</p>
 <ul>
 <li><a href="#creating-global-namespaces">Create a global namespace</a></li>
 <li>Configure that namespace to replicate between two or more provisioned clusters</li>
 </ul>
 <p>Any message published on <em>any</em> topic in that namespace will then be replicated to all clusters in the specified set.</p>
-<h2><a class="anchor" aria-hidden="true" id="local-persistence-and-forwarding"></a><a href="#local-persistence-and-forwarding" 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. [...]
+<h2><a class="anchor" aria-hidden="true" id="本地存储和转发"></a><a href="#本地存储和转发" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
 <p>When messages are produced on a Pulsar topic, they are first persisted in the local cluster and then forwarded asynchronously to the remote clusters.</p>
-<p>In normal cases, when there are no connectivity issues, messages are replicated immediately, at the same time as they are dispatched to local consumers. Typically, end-to-end delivery latency is defined by the network <a href="https://en.wikipedia.org/wiki/Round-trip_delay_time">round-trip time</a> (RTT) between the remote regions.</p>
-<p>Applications can create producers and consumers in any of the clusters, even when the remote clusters are not reachable (like during a network partition).</p>
+<p>在正常情况下,当没有连接问题时,消息会立即复制,同时发送给本地消费者。 通常,端到端交付延迟由远程区域之间的网络往返时间<a href="https://en.wikipedia.org/wiki/Round-trip_delay_time"></a>(RTT)决定。</p>
+<p>应用程序可以在任何集群中创建生产者和消费者,即使无法访问远程集群(比如在网络分区期间)。</p>
 <blockquote>
-<h4><a class="anchor" aria-hidden="true" id="subscriptions-are-local-to-a-cluster"></a><a href="#subscriptions-are-local-to-a-cluster" 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 [...]
-<p>While producers and consumers can publish to and consume from any cluster in a Pulsar instance, subscriptions are local to the clusters in which they are created and cannot be transferred between clusters. If you do need to transfer a subscription, you’ll need to create a new subscription in the desired cluster.</p>
+<h4><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.6 [...]
+<p>虽然生产者和消费者可以在脉冲星实例中的任何集群中发布和消费,但是订阅是创建它们的集群的本地订阅,不能在集群之间传输。 如果确实需要传输订阅,则需要在所需的集群中创建新的订阅。</p>
 </blockquote>
 <p>In the example in the image above, the topic <strong>T1</strong> is being replicated between 3 clusters, <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong>.</p>
-<p>All messages produced in any cluster will be delivered to all subscriptions in all the other clusters. In this case, consumers <strong>C1</strong> and <strong>C2</strong> will receive all messages published by producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong>. Ordering is still guaranteed on a per-producer basis.</p>
-<h2><a class="anchor" aria-hidden="true" id="configuring-replication"></a><a href="#configuring-replication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
+<p>All messages produced in any cluster will be delivered to all subscriptions in all the other clusters. In this case, consumers <strong>C1</strong> and <strong>C2</strong> will receive all messages published by producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong>. 指令仍然在每个生产者的basis上有所保障。</p>
+<h2><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 [...]
 <p>As stated <a href="#geo-replication-and-pulsar-properties">above</a>, geo-replication in Pulsar is managed at the <a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#tenant">tenant</a> level.</p>
-<h3><a class="anchor" aria-hidden="true" id="granting-permissions-to-properties"></a><a href="#granting-permissions-to-properties" 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.5 [...]
+<h3><a class="anchor" aria-hidden="true" id="授予属性权限"></a><a href="#授予属性权限" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>To establish replication to a cluster, the tenant needs permission to use that cluster. This permission can be granted when the tenant is created or later on.</p>
 <p>At creation time, specify all the intended clusters:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin properties create my-tenant \</span>
   --admin-roles my-admin-role \
   --allowed-clusters us-west,us-east,us-cent
 </code></pre>
-<p>To update permissions of an existing tenant, use <code>update</code> instead of <code>create</code>.</p>
+<p>要更新现有租户的权限,请使用<code>update</code>而不是<code>create</code>。</p>
 <h3><a class="anchor" aria-hidden="true" id="creating-global-namespaces"></a><a href="#creating-global-namespaces" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
 <p>Replication must be used with <em>global</em> topics, meaning topics that belong to a global namespace and are thus not tied to any particular cluster.</p>
 <p>Global namespaces need to be created in the <code>global</code> virtual cluster. For example:</p>
@@ -120,7 +120,7 @@
 <p>The replication clusters for a namespace can be changed at any time, with no disruption to ongoing traffic. Replication channels will be immediately set up or stopped in all the clusters as soon as the configuration changes.</p>
 <h3><a class="anchor" aria-hidden="true" id="using-global-topics"></a><a href="#using-global-topics" 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.2 [...]
 <p>Once you've created a global namespace, any topics that producers or consumers create within that namespace will be global. Typically, each application will use the <code>serviceUrl</code> for the local cluster.</p>
-<h4><a class="anchor" aria-hidden="true" id="selective-replication"></a><a href="#selective-replication" 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 [...]
+<h4><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.09 [...]
 <p>By default, messages are replicated to all clusters configured for the namespace. You can restrict replication selectively by specifying a replication list for a message. That message will then be replicated only to the subset in the replication list.</p>
 <p>Below is an example for the <a href="/docs/zh-CN/2.1.1-incubating/client-libraries-java">Java API</a>. Note the use of the <code>setReplicationClusters</code> method when constructing the <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Message">Message</a>
  object:</p>
@@ -138,7 +138,7 @@ producer.newMessage()
         .setReplicationClusters(restrictReplicationTo)
         .send();
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="topic-stats"></a><a href="#topic-stats" 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 [...]
+<h4><a class="anchor" aria-hidden="true" id="topic统计数据"></a><a href="#topic统计数据" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
 <p>Topic-specific statistics for global topics are available via the <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin"><code>pulsar-admin</code></a> tool and <a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
  API:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin persistent stats persistent://my-tenant/my-namespace/my-topic</span>
@@ -149,7 +149,7 @@ producer.newMessage()
 <p>In Pulsar, a topic is automatically deleted when it's no longer used, that is to say, when no producers or consumers are connected <em>and</em> there are no subscriptions <em>and</em> no more messages are kept for retention. For global topics, each region will use a fault-tolerant mechanism to decide when it's safe to delete the topic locally.</p>
 <p>You can explicitly disable topic garbage collection by setting <code>brokerDeleteInactiveTopicsEnabled</code> to <code>false</code> in your <a href="reference-configuration#broker">broker configuration</a>.</p>
 <p>To delete a global topic, close all producers and consumers on the topic and delete all its local subscriptions in every replication cluster. When Pulsar determines that no valid subscription for the topic remains across the system, it will garbage collect the topic.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it w [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.1-incubating/administration-geo/index.html b/content/docs/zh-CN/2.1.1-incubating/administration-geo/index.html
index eefe20b..1f980a7 100644
--- a/content/docs/zh-CN/2.1.1-incubating/administration-geo/index.html
+++ b/content/docs/zh-CN/2.1.1-incubating/administration-geo/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*Geo-replication* is the replication of persistently stored message data across multiple clusters of a Pulsar instance."/><meta name="docsearch:version" content="2.1.1-incubating"/><meta name [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*跨域复制* 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。"/><meta name="docsearch:version" content="2.1.1-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar geo- [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,40 +74,40 @@
                 };
               }
             });
-        </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 geo-replication</h1></header><article><div><span><p><em>Geo-replication</em> is the replication of persistently stored message data across multiple clusters of a Pulsar instance.</p>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
-<p>The diagram below illustrates the process of geo-replication across Pulsar clusters:</p>
-<p><img src="/docs/assets/geo-replication.png" alt="Replication Diagram"></p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Pulsar geo-replication</h1></header><article><div><span><p><em>跨域复制</em> 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。</p>
+<h2><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 [...]
+<p>下图说明了脉冲星在不同集群之间的跨域复制过程</p>
+<p><img src="/docs/assets/geo-replication.png" alt="复制图表"></p>
 <p>In this diagram, whenever producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong> publish messages to the topic <strong>T1</strong> on clusters <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong>, respectively, those messages are instantly replicated across clusters. Once replicated, consumers <strong>C1</strong> and <strong>C2</strong> can consume those messages from their respective clusters.</p>
 <p>Without geo-replication, consumers <strong>C1</strong> and <strong>C2</strong> wouldn't be able to consume messages published by producer <strong>P3</strong>.</p>
-<h2><a class="anchor" aria-hidden="true" id="geo-replication-and-pulsar-properties"></a><a href="#geo-replication-and-pulsar-properties" 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 [...]
-<p>Geo-replication must be enabled on a per-tenant basis in Pulsar. Geo-replication can be enabled between clusters only when a tenant has been created that allows access to both clusters.</p>
+<h2><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 [...]
+<p>在脉冲星中,我们限制了需要通过新增租户来激活跨域复制。 只有在创建了允许访问两个集群的租户时,才能在集群之间启用跨域复制。</p>
 <p>Although geo-replication must be enabled between two clusters, it's actually managed at the namespace level. You must do the following to enable geo-replication for a namespace:</p>
 <ul>
 <li><a href="#creating-global-namespaces">Create a global namespace</a></li>
 <li>Configure that namespace to replicate between two or more provisioned clusters</li>
 </ul>
 <p>Any message published on <em>any</em> topic in that namespace will then be replicated to all clusters in the specified set.</p>
-<h2><a class="anchor" aria-hidden="true" id="local-persistence-and-forwarding"></a><a href="#local-persistence-and-forwarding" 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. [...]
+<h2><a class="anchor" aria-hidden="true" id="本地存储和转发"></a><a href="#本地存储和转发" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
 <p>When messages are produced on a Pulsar topic, they are first persisted in the local cluster and then forwarded asynchronously to the remote clusters.</p>
-<p>In normal cases, when there are no connectivity issues, messages are replicated immediately, at the same time as they are dispatched to local consumers. Typically, end-to-end delivery latency is defined by the network <a href="https://en.wikipedia.org/wiki/Round-trip_delay_time">round-trip time</a> (RTT) between the remote regions.</p>
-<p>Applications can create producers and consumers in any of the clusters, even when the remote clusters are not reachable (like during a network partition).</p>
+<p>在正常情况下,当没有连接问题时,消息会立即复制,同时发送给本地消费者。 通常,端到端交付延迟由远程区域之间的网络往返时间<a href="https://en.wikipedia.org/wiki/Round-trip_delay_time"></a>(RTT)决定。</p>
+<p>应用程序可以在任何集群中创建生产者和消费者,即使无法访问远程集群(比如在网络分区期间)。</p>
 <blockquote>
-<h4><a class="anchor" aria-hidden="true" id="subscriptions-are-local-to-a-cluster"></a><a href="#subscriptions-are-local-to-a-cluster" 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 [...]
-<p>While producers and consumers can publish to and consume from any cluster in a Pulsar instance, subscriptions are local to the clusters in which they are created and cannot be transferred between clusters. If you do need to transfer a subscription, you’ll need to create a new subscription in the desired cluster.</p>
+<h4><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.6 [...]
+<p>虽然生产者和消费者可以在脉冲星实例中的任何集群中发布和消费,但是订阅是创建它们的集群的本地订阅,不能在集群之间传输。 如果确实需要传输订阅,则需要在所需的集群中创建新的订阅。</p>
 </blockquote>
 <p>In the example in the image above, the topic <strong>T1</strong> is being replicated between 3 clusters, <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong>.</p>
-<p>All messages produced in any cluster will be delivered to all subscriptions in all the other clusters. In this case, consumers <strong>C1</strong> and <strong>C2</strong> will receive all messages published by producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong>. Ordering is still guaranteed on a per-producer basis.</p>
-<h2><a class="anchor" aria-hidden="true" id="configuring-replication"></a><a href="#configuring-replication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
+<p>All messages produced in any cluster will be delivered to all subscriptions in all the other clusters. In this case, consumers <strong>C1</strong> and <strong>C2</strong> will receive all messages published by producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong>. 指令仍然在每个生产者的basis上有所保障。</p>
+<h2><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 [...]
 <p>As stated <a href="#geo-replication-and-pulsar-properties">above</a>, geo-replication in Pulsar is managed at the <a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#tenant">tenant</a> level.</p>
-<h3><a class="anchor" aria-hidden="true" id="granting-permissions-to-properties"></a><a href="#granting-permissions-to-properties" 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.5 [...]
+<h3><a class="anchor" aria-hidden="true" id="授予属性权限"></a><a href="#授予属性权限" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>To establish replication to a cluster, the tenant needs permission to use that cluster. This permission can be granted when the tenant is created or later on.</p>
 <p>At creation time, specify all the intended clusters:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin properties create my-tenant \</span>
   --admin-roles my-admin-role \
   --allowed-clusters us-west,us-east,us-cent
 </code></pre>
-<p>To update permissions of an existing tenant, use <code>update</code> instead of <code>create</code>.</p>
+<p>要更新现有租户的权限,请使用<code>update</code>而不是<code>create</code>。</p>
 <h3><a class="anchor" aria-hidden="true" id="creating-global-namespaces"></a><a href="#creating-global-namespaces" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
 <p>Replication must be used with <em>global</em> topics, meaning topics that belong to a global namespace and are thus not tied to any particular cluster.</p>
 <p>Global namespaces need to be created in the <code>global</code> virtual cluster. For example:</p>
@@ -120,7 +120,7 @@
 <p>The replication clusters for a namespace can be changed at any time, with no disruption to ongoing traffic. Replication channels will be immediately set up or stopped in all the clusters as soon as the configuration changes.</p>
 <h3><a class="anchor" aria-hidden="true" id="using-global-topics"></a><a href="#using-global-topics" 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.2 [...]
 <p>Once you've created a global namespace, any topics that producers or consumers create within that namespace will be global. Typically, each application will use the <code>serviceUrl</code> for the local cluster.</p>
-<h4><a class="anchor" aria-hidden="true" id="selective-replication"></a><a href="#selective-replication" 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 [...]
+<h4><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.09 [...]
 <p>By default, messages are replicated to all clusters configured for the namespace. You can restrict replication selectively by specifying a replication list for a message. That message will then be replicated only to the subset in the replication list.</p>
 <p>Below is an example for the <a href="/docs/zh-CN/2.1.1-incubating/client-libraries-java">Java API</a>. Note the use of the <code>setReplicationClusters</code> method when constructing the <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Message">Message</a>
  object:</p>
@@ -138,7 +138,7 @@ producer.newMessage()
         .setReplicationClusters(restrictReplicationTo)
         .send();
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="topic-stats"></a><a href="#topic-stats" 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 [...]
+<h4><a class="anchor" aria-hidden="true" id="topic统计数据"></a><a href="#topic统计数据" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
 <p>Topic-specific statistics for global topics are available via the <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin"><code>pulsar-admin</code></a> tool and <a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
  API:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin persistent stats persistent://my-tenant/my-namespace/my-topic</span>
@@ -149,7 +149,7 @@ producer.newMessage()
 <p>In Pulsar, a topic is automatically deleted when it's no longer used, that is to say, when no producers or consumers are connected <em>and</em> there are no subscriptions <em>and</em> no more messages are kept for retention. For global topics, each region will use a fault-tolerant mechanism to decide when it's safe to delete the topic locally.</p>
 <p>You can explicitly disable topic garbage collection by setting <code>brokerDeleteInactiveTopicsEnabled</code> to <code>false</code> in your <a href="reference-configuration#broker">broker configuration</a>.</p>
 <p>To delete a global topic, close all producers and consumers on the topic and delete all its local subscriptions in every replication cluster. When Pulsar determines that no valid subscription for the topic remains across the system, it will garbage collect the topic.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it w [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.1-incubating/administration-zk-bk.html b/content/docs/zh-CN/2.1.1-incubating/administration-zk-bk.html
index 5ee02d9..be47832 100644
--- a/content/docs/zh-CN/2.1.1-incubating/administration-zk-bk.html
+++ b/content/docs/zh-CN/2.1.1-incubating/administration-zk-bk.html
@@ -287,7 +287,7 @@ admin.namespaces().setPersistence(namespace, policies);
 <p>This diagram illustrates the role of ZooKeeper and BookKeeper in a Pulsar cluster:</p>
 <p><img src="/docs/assets/pulsar-system-architecture.png" alt="ZooKeeper and BookKeeper"></p>
 <p>Each Pulsar cluster consists of one or more message brokers. Each broker relies on an ensemble of bookies.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/administration-geo"><span>Geo-replication</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#d [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/administration-geo"><span>跨域复制</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-lo [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.1-incubating/administration-zk-bk/index.html b/content/docs/zh-CN/2.1.1-incubating/administration-zk-bk/index.html
index 5ee02d9..be47832 100644
--- a/content/docs/zh-CN/2.1.1-incubating/administration-zk-bk/index.html
+++ b/content/docs/zh-CN/2.1.1-incubating/administration-zk-bk/index.html
@@ -287,7 +287,7 @@ admin.namespaces().setPersistence(namespace, policies);
 <p>This diagram illustrates the role of ZooKeeper and BookKeeper in a Pulsar cluster:</p>
 <p><img src="/docs/assets/pulsar-system-architecture.png" alt="ZooKeeper and BookKeeper"></p>
 <p>Each Pulsar cluster consists of one or more message brokers. Each broker relies on an ensemble of bookies.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/administration-geo"><span>Geo-replication</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#d [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/administration-geo"><span>跨域复制</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-lo [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.1-incubating/cookbooks-deduplication.html b/content/docs/zh-CN/2.1.1-incubating/cookbooks-deduplication.html
index 92f7ff1..1ad8bd0 100644
--- a/content/docs/zh-CN/2.1.1-incubating/cookbooks-deduplication.html
+++ b/content/docs/zh-CN/2.1.1-incubating/cookbooks-deduplication.html
@@ -79,7 +79,7 @@
 <blockquote>
 <p>For a more thorough theoretical explanation of message deduplication, see the <a href="/docs/zh-CN/2.1.1-incubating/concepts-messaging#message-deduplication">Concepts and Architecture</a> document.</p>
 </blockquote>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" 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. [...]
+<h2><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 [...]
 <p>Message deduplication can be enabled and disabled on a per-namespace basis. By default, it is <em>disabled</em> on all namespaces and can enabled in the following ways:</p>
 <ul>
 <li>Using the <a href="#enabling"><code>pulsar-admin namespaces</code></a> interface</li>
@@ -163,7 +163,7 @@ Producer producer;
 
 Result result = client.createProducer(topic, producerConfig, producer);
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a href="#configura [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#configuration-for-message [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.1-incubating/cookbooks-deduplication/index.html b/content/docs/zh-CN/2.1.1-incubating/cookbooks-deduplication/index.html
index 92f7ff1..1ad8bd0 100644
--- a/content/docs/zh-CN/2.1.1-incubating/cookbooks-deduplication/index.html
+++ b/content/docs/zh-CN/2.1.1-incubating/cookbooks-deduplication/index.html
@@ -79,7 +79,7 @@
 <blockquote>
 <p>For a more thorough theoretical explanation of message deduplication, see the <a href="/docs/zh-CN/2.1.1-incubating/concepts-messaging#message-deduplication">Concepts and Architecture</a> document.</p>
 </blockquote>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" 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. [...]
+<h2><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 [...]
 <p>Message deduplication can be enabled and disabled on a per-namespace basis. By default, it is <em>disabled</em> on all namespaces and can enabled in the following ways:</p>
 <ul>
 <li>Using the <a href="#enabling"><code>pulsar-admin namespaces</code></a> interface</li>
@@ -163,7 +163,7 @@ Producer producer;
 
 Result result = client.createProducer(topic, producerConfig, producer);
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a href="#configura [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#configuration-for-message [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
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 1bc13f8..41c1fdc 100644
--- a/content/docs/zh-CN/2.2.0/administration-dashboard.html
+++ b/content/docs/zh-CN/2.2.0/administration-dashboard.html
@@ -100,7 +100,7 @@
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="known-issues"></a><a href="#known-issues" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <p>Pulsar <a href="/docs/zh-CN/2.2.0/security-overview#authentication-providers">authentication</a> is not supported at this point. The dashboard's data collector does not pass any authentication-related data and will be denied access if the Pulsar broker requires authentication.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/administration-geo"><span class="arrow-prev">← </span><span>Geo-replication</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known-issues">Kno [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/administration-geo"><span class="arrow-prev">← </span><span>跨域复制</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known-issues">Known issues</ [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
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 1bc13f8..41c1fdc 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
@@ -100,7 +100,7 @@
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="known-issues"></a><a href="#known-issues" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <p>Pulsar <a href="/docs/zh-CN/2.2.0/security-overview#authentication-providers">authentication</a> is not supported at this point. The dashboard's data collector does not pass any authentication-related data and will be denied access if the Pulsar broker requires authentication.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/administration-geo"><span class="arrow-prev">← </span><span>Geo-replication</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known-issues">Kno [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/administration-geo"><span class="arrow-prev">← </span><span>跨域复制</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known-issues">Known issues</ [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.2.0/administration-geo.html b/content/docs/zh-CN/2.2.0/administration-geo.html
index 3d25740..c25dcc5 100644
--- a/content/docs/zh-CN/2.2.0/administration-geo.html
+++ b/content/docs/zh-CN/2.2.0/administration-geo.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*Geo-replication* is the replication of persistently stored message data across multiple clusters of a Pulsar instance."/><meta name="docsearch:version" content="2.2.0"/><meta name="docsearch [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*跨域复制* 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。"/><meta name="docsearch:version" content="2.2.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar geo-replication [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,40 +74,40 @@
                 };
               }
             });
-        </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 geo-replication</h1></header><article><div><span><p><em>Geo-replication</em> is the replication of persistently stored message data across multiple clusters of a Pulsar instance.</p>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
-<p>The diagram below illustrates the process of geo-replication across Pulsar clusters:</p>
-<p><img src="/docs/assets/geo-replication.png" alt="Replication Diagram"></p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Pulsar geo-replication</h1></header><article><div><span><p><em>跨域复制</em> 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。</p>
+<h2><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 [...]
+<p>下图说明了脉冲星在不同集群之间的跨域复制过程</p>
+<p><img src="/docs/assets/geo-replication.png" alt="复制图表"></p>
 <p>In this diagram, whenever producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong> publish messages to the topic <strong>T1</strong> on clusters <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong>, respectively, those messages are instantly replicated across clusters. Once replicated, consumers <strong>C1</strong> and <strong>C2</strong> can consume those messages from their respective clusters.</p>
 <p>Without geo-replication, consumers <strong>C1</strong> and <strong>C2</strong> wouldn't be able to consume messages published by producer <strong>P3</strong>.</p>
-<h2><a class="anchor" aria-hidden="true" id="geo-replication-and-pulsar-properties"></a><a href="#geo-replication-and-pulsar-properties" 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 [...]
-<p>Geo-replication must be enabled on a per-tenant basis in Pulsar. Geo-replication can be enabled between clusters only when a tenant has been created that allows access to both clusters.</p>
+<h2><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 [...]
+<p>在脉冲星中,我们限制了需要通过新增租户来激活跨域复制。 只有在创建了允许访问两个集群的租户时,才能在集群之间启用跨域复制。</p>
 <p>Although geo-replication must be enabled between two clusters, it's actually managed at the namespace level. You must do the following to enable geo-replication for a namespace:</p>
 <ul>
 <li><a href="#creating-global-namespaces">Create a global namespace</a></li>
 <li>Configure that namespace to replicate between two or more provisioned clusters</li>
 </ul>
 <p>Any message published on <em>any</em> topic in that namespace will then be replicated to all clusters in the specified set.</p>
-<h2><a class="anchor" aria-hidden="true" id="local-persistence-and-forwarding"></a><a href="#local-persistence-and-forwarding" 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. [...]
+<h2><a class="anchor" aria-hidden="true" id="本地存储和转发"></a><a href="#本地存储和转发" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
 <p>When messages are produced on a Pulsar topic, they are first persisted in the local cluster and then forwarded asynchronously to the remote clusters.</p>
-<p>In normal cases, when there are no connectivity issues, messages are replicated immediately, at the same time as they are dispatched to local consumers. Typically, end-to-end delivery latency is defined by the network <a href="https://en.wikipedia.org/wiki/Round-trip_delay_time">round-trip time</a> (RTT) between the remote regions.</p>
-<p>Applications can create producers and consumers in any of the clusters, even when the remote clusters are not reachable (like during a network partition).</p>
+<p>在正常情况下,当没有连接问题时,消息会立即复制,同时发送给本地消费者。 通常,端到端交付延迟由远程区域之间的网络往返时间<a href="https://en.wikipedia.org/wiki/Round-trip_delay_time"></a>(RTT)决定。</p>
+<p>应用程序可以在任何集群中创建生产者和消费者,即使无法访问远程集群(比如在网络分区期间)。</p>
 <blockquote>
-<h4><a class="anchor" aria-hidden="true" id="subscriptions-are-local-to-a-cluster"></a><a href="#subscriptions-are-local-to-a-cluster" 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 [...]
-<p>While producers and consumers can publish to and consume from any cluster in a Pulsar instance, subscriptions are local to the clusters in which they are created and cannot be transferred between clusters. If you do need to transfer a subscription, you’ll need to create a new subscription in the desired cluster.</p>
+<h4><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.6 [...]
+<p>虽然生产者和消费者可以在脉冲星实例中的任何集群中发布和消费,但是订阅是创建它们的集群的本地订阅,不能在集群之间传输。 如果确实需要传输订阅,则需要在所需的集群中创建新的订阅。</p>
 </blockquote>
 <p>In the example in the image above, the topic <strong>T1</strong> is being replicated between 3 clusters, <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong>.</p>
-<p>All messages produced in any cluster will be delivered to all subscriptions in all the other clusters. In this case, consumers <strong>C1</strong> and <strong>C2</strong> will receive all messages published by producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong>. Ordering is still guaranteed on a per-producer basis.</p>
-<h2><a class="anchor" aria-hidden="true" id="configuring-replication"></a><a href="#configuring-replication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
+<p>All messages produced in any cluster will be delivered to all subscriptions in all the other clusters. In this case, consumers <strong>C1</strong> and <strong>C2</strong> will receive all messages published by producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong>. 指令仍然在每个生产者的basis上有所保障。</p>
+<h2><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 [...]
 <p>As stated <a href="#geo-replication-and-pulsar-properties">above</a>, geo-replication in Pulsar is managed at the <a href="/docs/zh-CN/2.2.0/reference-terminology#tenant">tenant</a> level.</p>
-<h3><a class="anchor" aria-hidden="true" id="granting-permissions-to-properties"></a><a href="#granting-permissions-to-properties" 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.5 [...]
+<h3><a class="anchor" aria-hidden="true" id="授予属性权限"></a><a href="#授予属性权限" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>To establish replication to a cluster, the tenant needs permission to use that cluster. This permission can be granted when the tenant is created or later on.</p>
 <p>At creation time, specify all the intended clusters:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin properties create my-tenant \</span>
   --admin-roles my-admin-role \
   --allowed-clusters us-west,us-east,us-cent
 </code></pre>
-<p>To update permissions of an existing tenant, use <code>update</code> instead of <code>create</code>.</p>
+<p>要更新现有租户的权限,请使用<code>update</code>而不是<code>create</code>。</p>
 <h3><a class="anchor" aria-hidden="true" id="creating-global-namespaces"></a><a href="#creating-global-namespaces" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
 <p>Replication must be used with <em>global</em> topics, meaning topics that belong to a global namespace and are thus not tied to any particular cluster.</p>
 <p>Global namespaces need to be created in the <code>global</code> virtual cluster. For example:</p>
@@ -120,7 +120,7 @@
 <p>The replication clusters for a namespace can be changed at any time, with no disruption to ongoing traffic. Replication channels will be immediately set up or stopped in all the clusters as soon as the configuration changes.</p>
 <h3><a class="anchor" aria-hidden="true" id="using-global-topics"></a><a href="#using-global-topics" 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.2 [...]
 <p>Once you've created a global namespace, any topics that producers or consumers create within that namespace will be global. Typically, each application will use the <code>serviceUrl</code> for the local cluster.</p>
-<h4><a class="anchor" aria-hidden="true" id="selective-replication"></a><a href="#selective-replication" 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 [...]
+<h4><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.09 [...]
 <p>By default, messages are replicated to all clusters configured for the namespace. You can restrict replication selectively by specifying a replication list for a message. That message will then be replicated only to the subset in the replication list.</p>
 <p>Below is an example for the <a href="/docs/zh-CN/2.2.0/client-libraries-java">Java API</a>. Note the use of the <code>setReplicationClusters</code> method when constructing the <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Message">Message</a>
  object:</p>
@@ -138,7 +138,7 @@ producer.newMessage()
         .setReplicationClusters(restrictReplicationTo)
         .send();
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="topic-stats"></a><a href="#topic-stats" 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 [...]
+<h4><a class="anchor" aria-hidden="true" id="topic统计数据"></a><a href="#topic统计数据" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
 <p>Topic-specific statistics for global topics are available via the <a href="/docs/zh-CN/2.2.0/pulsar-admin"><code>pulsar-admin</code></a> tool and <a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
  API:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin persistent stats persistent://my-tenant/my-namespace/my-topic</span>
@@ -149,7 +149,7 @@ producer.newMessage()
 <p>In Pulsar, a topic is automatically deleted when it's no longer used, that is to say, when no producers or consumers are connected <em>and</em> there are no subscriptions <em>and</em> no more messages are kept for retention. For global topics, each region will use a fault-tolerant mechanism to decide when it's safe to delete the topic locally.</p>
 <p>You can explicitly disable topic garbage collection by setting <code>brokerDeleteInactiveTopicsEnabled</code> to <code>false</code> in your <a href="reference-configuration#broker">broker configuration</a>.</p>
 <p>To delete a global topic, close all producers and consumers on the topic and delete all its local subscriptions in every replication cluster. When Pulsar determines that no valid subscription for the topic remains across the system, it will garbage collect the topic.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a hr [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#跨域复制以及脉冲星特性 [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.2.0/administration-geo/index.html b/content/docs/zh-CN/2.2.0/administration-geo/index.html
index 3d25740..c25dcc5 100644
--- a/content/docs/zh-CN/2.2.0/administration-geo/index.html
+++ b/content/docs/zh-CN/2.2.0/administration-geo/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*Geo-replication* is the replication of persistently stored message data across multiple clusters of a Pulsar instance."/><meta name="docsearch:version" content="2.2.0"/><meta name="docsearch [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*跨域复制* 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。"/><meta name="docsearch:version" content="2.2.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar geo-replication [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,40 +74,40 @@
                 };
               }
             });
-        </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 geo-replication</h1></header><article><div><span><p><em>Geo-replication</em> is the replication of persistently stored message data across multiple clusters of a Pulsar instance.</p>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
-<p>The diagram below illustrates the process of geo-replication across Pulsar clusters:</p>
-<p><img src="/docs/assets/geo-replication.png" alt="Replication Diagram"></p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Pulsar geo-replication</h1></header><article><div><span><p><em>跨域复制</em> 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。</p>
+<h2><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 [...]
+<p>下图说明了脉冲星在不同集群之间的跨域复制过程</p>
+<p><img src="/docs/assets/geo-replication.png" alt="复制图表"></p>
 <p>In this diagram, whenever producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong> publish messages to the topic <strong>T1</strong> on clusters <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong>, respectively, those messages are instantly replicated across clusters. Once replicated, consumers <strong>C1</strong> and <strong>C2</strong> can consume those messages from their respective clusters.</p>
 <p>Without geo-replication, consumers <strong>C1</strong> and <strong>C2</strong> wouldn't be able to consume messages published by producer <strong>P3</strong>.</p>
-<h2><a class="anchor" aria-hidden="true" id="geo-replication-and-pulsar-properties"></a><a href="#geo-replication-and-pulsar-properties" 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 [...]
-<p>Geo-replication must be enabled on a per-tenant basis in Pulsar. Geo-replication can be enabled between clusters only when a tenant has been created that allows access to both clusters.</p>
+<h2><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 [...]
+<p>在脉冲星中,我们限制了需要通过新增租户来激活跨域复制。 只有在创建了允许访问两个集群的租户时,才能在集群之间启用跨域复制。</p>
 <p>Although geo-replication must be enabled between two clusters, it's actually managed at the namespace level. You must do the following to enable geo-replication for a namespace:</p>
 <ul>
 <li><a href="#creating-global-namespaces">Create a global namespace</a></li>
 <li>Configure that namespace to replicate between two or more provisioned clusters</li>
 </ul>
 <p>Any message published on <em>any</em> topic in that namespace will then be replicated to all clusters in the specified set.</p>
-<h2><a class="anchor" aria-hidden="true" id="local-persistence-and-forwarding"></a><a href="#local-persistence-and-forwarding" 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. [...]
+<h2><a class="anchor" aria-hidden="true" id="本地存储和转发"></a><a href="#本地存储和转发" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
 <p>When messages are produced on a Pulsar topic, they are first persisted in the local cluster and then forwarded asynchronously to the remote clusters.</p>
-<p>In normal cases, when there are no connectivity issues, messages are replicated immediately, at the same time as they are dispatched to local consumers. Typically, end-to-end delivery latency is defined by the network <a href="https://en.wikipedia.org/wiki/Round-trip_delay_time">round-trip time</a> (RTT) between the remote regions.</p>
-<p>Applications can create producers and consumers in any of the clusters, even when the remote clusters are not reachable (like during a network partition).</p>
+<p>在正常情况下,当没有连接问题时,消息会立即复制,同时发送给本地消费者。 通常,端到端交付延迟由远程区域之间的网络往返时间<a href="https://en.wikipedia.org/wiki/Round-trip_delay_time"></a>(RTT)决定。</p>
+<p>应用程序可以在任何集群中创建生产者和消费者,即使无法访问远程集群(比如在网络分区期间)。</p>
 <blockquote>
-<h4><a class="anchor" aria-hidden="true" id="subscriptions-are-local-to-a-cluster"></a><a href="#subscriptions-are-local-to-a-cluster" 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 [...]
-<p>While producers and consumers can publish to and consume from any cluster in a Pulsar instance, subscriptions are local to the clusters in which they are created and cannot be transferred between clusters. If you do need to transfer a subscription, you’ll need to create a new subscription in the desired cluster.</p>
+<h4><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.6 [...]
+<p>虽然生产者和消费者可以在脉冲星实例中的任何集群中发布和消费,但是订阅是创建它们的集群的本地订阅,不能在集群之间传输。 如果确实需要传输订阅,则需要在所需的集群中创建新的订阅。</p>
 </blockquote>
 <p>In the example in the image above, the topic <strong>T1</strong> is being replicated between 3 clusters, <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong>.</p>
-<p>All messages produced in any cluster will be delivered to all subscriptions in all the other clusters. In this case, consumers <strong>C1</strong> and <strong>C2</strong> will receive all messages published by producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong>. Ordering is still guaranteed on a per-producer basis.</p>
-<h2><a class="anchor" aria-hidden="true" id="configuring-replication"></a><a href="#configuring-replication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
+<p>All messages produced in any cluster will be delivered to all subscriptions in all the other clusters. In this case, consumers <strong>C1</strong> and <strong>C2</strong> will receive all messages published by producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong>. 指令仍然在每个生产者的basis上有所保障。</p>
+<h2><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 [...]
 <p>As stated <a href="#geo-replication-and-pulsar-properties">above</a>, geo-replication in Pulsar is managed at the <a href="/docs/zh-CN/2.2.0/reference-terminology#tenant">tenant</a> level.</p>
-<h3><a class="anchor" aria-hidden="true" id="granting-permissions-to-properties"></a><a href="#granting-permissions-to-properties" 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.5 [...]
+<h3><a class="anchor" aria-hidden="true" id="授予属性权限"></a><a href="#授予属性权限" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>To establish replication to a cluster, the tenant needs permission to use that cluster. This permission can be granted when the tenant is created or later on.</p>
 <p>At creation time, specify all the intended clusters:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin properties create my-tenant \</span>
   --admin-roles my-admin-role \
   --allowed-clusters us-west,us-east,us-cent
 </code></pre>
-<p>To update permissions of an existing tenant, use <code>update</code> instead of <code>create</code>.</p>
+<p>要更新现有租户的权限,请使用<code>update</code>而不是<code>create</code>。</p>
 <h3><a class="anchor" aria-hidden="true" id="creating-global-namespaces"></a><a href="#creating-global-namespaces" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
 <p>Replication must be used with <em>global</em> topics, meaning topics that belong to a global namespace and are thus not tied to any particular cluster.</p>
 <p>Global namespaces need to be created in the <code>global</code> virtual cluster. For example:</p>
@@ -120,7 +120,7 @@
 <p>The replication clusters for a namespace can be changed at any time, with no disruption to ongoing traffic. Replication channels will be immediately set up or stopped in all the clusters as soon as the configuration changes.</p>
 <h3><a class="anchor" aria-hidden="true" id="using-global-topics"></a><a href="#using-global-topics" 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.2 [...]
 <p>Once you've created a global namespace, any topics that producers or consumers create within that namespace will be global. Typically, each application will use the <code>serviceUrl</code> for the local cluster.</p>
-<h4><a class="anchor" aria-hidden="true" id="selective-replication"></a><a href="#selective-replication" 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 [...]
+<h4><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.09 [...]
 <p>By default, messages are replicated to all clusters configured for the namespace. You can restrict replication selectively by specifying a replication list for a message. That message will then be replicated only to the subset in the replication list.</p>
 <p>Below is an example for the <a href="/docs/zh-CN/2.2.0/client-libraries-java">Java API</a>. Note the use of the <code>setReplicationClusters</code> method when constructing the <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Message">Message</a>
  object:</p>
@@ -138,7 +138,7 @@ producer.newMessage()
         .setReplicationClusters(restrictReplicationTo)
         .send();
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="topic-stats"></a><a href="#topic-stats" 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 [...]
+<h4><a class="anchor" aria-hidden="true" id="topic统计数据"></a><a href="#topic统计数据" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
 <p>Topic-specific statistics for global topics are available via the <a href="/docs/zh-CN/2.2.0/pulsar-admin"><code>pulsar-admin</code></a> tool and <a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
  API:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin persistent stats persistent://my-tenant/my-namespace/my-topic</span>
@@ -149,7 +149,7 @@ producer.newMessage()
 <p>In Pulsar, a topic is automatically deleted when it's no longer used, that is to say, when no producers or consumers are connected <em>and</em> there are no subscriptions <em>and</em> no more messages are kept for retention. For global topics, each region will use a fault-tolerant mechanism to decide when it's safe to delete the topic locally.</p>
 <p>You can explicitly disable topic garbage collection by setting <code>brokerDeleteInactiveTopicsEnabled</code> to <code>false</code> in your <a href="reference-configuration#broker">broker configuration</a>.</p>
 <p>To delete a global topic, close all producers and consumers on the topic and delete all its local subscriptions in every replication cluster. When Pulsar determines that no valid subscription for the topic remains across the system, it will garbage collect the topic.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a hr [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#跨域复制以及脉冲星特性 [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.2.0/administration-zk-bk.html b/content/docs/zh-CN/2.2.0/administration-zk-bk.html
index 35cb322..e5ad617 100644
--- a/content/docs/zh-CN/2.2.0/administration-zk-bk.html
+++ b/content/docs/zh-CN/2.2.0/administration-zk-bk.html
@@ -287,7 +287,7 @@ admin.namespaces().setPersistence(namespace, policies);
 <p>This diagram illustrates the role of ZooKeeper and BookKeeper in a Pulsar cluster:</p>
 <p><img src="/docs/assets/pulsar-system-architecture.png" alt="ZooKeeper and BookKeeper"></p>
 <p>Each Pulsar cluster consists of one or more message brokers. Each broker relies on an ensemble of bookies.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/administration-geo"><span>Geo-replication</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-local-zookeep [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/administration-geo"><span>跨域复制</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-local-zookeeper">Deployi [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.2.0/administration-zk-bk/index.html b/content/docs/zh-CN/2.2.0/administration-zk-bk/index.html
index 35cb322..e5ad617 100644
--- a/content/docs/zh-CN/2.2.0/administration-zk-bk/index.html
+++ b/content/docs/zh-CN/2.2.0/administration-zk-bk/index.html
@@ -287,7 +287,7 @@ admin.namespaces().setPersistence(namespace, policies);
 <p>This diagram illustrates the role of ZooKeeper and BookKeeper in a Pulsar cluster:</p>
 <p><img src="/docs/assets/pulsar-system-architecture.png" alt="ZooKeeper and BookKeeper"></p>
 <p>Each Pulsar cluster consists of one or more message brokers. Each broker relies on an ensemble of bookies.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/administration-geo"><span>Geo-replication</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-local-zookeep [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/administration-geo"><span>跨域复制</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-local-zookeeper">Deployi [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.2.0/cookbooks-deduplication.html b/content/docs/zh-CN/2.2.0/cookbooks-deduplication.html
index 6bf8b77..6ce9857 100644
--- a/content/docs/zh-CN/2.2.0/cookbooks-deduplication.html
+++ b/content/docs/zh-CN/2.2.0/cookbooks-deduplication.html
@@ -79,7 +79,7 @@
 <blockquote>
 <p>For a more thorough theoretical explanation of message deduplication, see the <a href="/docs/zh-CN/2.2.0/concepts-messaging#message-deduplication">Concepts and Architecture</a> document.</p>
 </blockquote>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" 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. [...]
+<h2><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 [...]
 <p>Message deduplication can be enabled and disabled on a per-namespace basis. By default, it is <em>disabled</em> on all namespaces and can enabled in the following ways:</p>
 <ul>
 <li>Using the <a href="#enabling"><code>pulsar-admin namespaces</code></a> interface</li>
@@ -163,7 +163,7 @@ Producer producer;
 
 Result result = client.createProducer(topic, producerConfig, producer);
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a href="#configuration-for-message-dedup [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#configuration-for-message-deduplication">Config [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.2.0/cookbooks-deduplication/index.html b/content/docs/zh-CN/2.2.0/cookbooks-deduplication/index.html
index 6bf8b77..6ce9857 100644
--- a/content/docs/zh-CN/2.2.0/cookbooks-deduplication/index.html
+++ b/content/docs/zh-CN/2.2.0/cookbooks-deduplication/index.html
@@ -79,7 +79,7 @@
 <blockquote>
 <p>For a more thorough theoretical explanation of message deduplication, see the <a href="/docs/zh-CN/2.2.0/concepts-messaging#message-deduplication">Concepts and Architecture</a> document.</p>
 </blockquote>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" 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. [...]
+<h2><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 [...]
 <p>Message deduplication can be enabled and disabled on a per-namespace basis. By default, it is <em>disabled</em> on all namespaces and can enabled in the following ways:</p>
 <ul>
 <li>Using the <a href="#enabling"><code>pulsar-admin namespaces</code></a> interface</li>
@@ -163,7 +163,7 @@ Producer producer;
 
 Result result = client.createProducer(topic, producerConfig, producer);
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a href="#configuration-for-message-dedup [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#configuration-for-message-deduplication">Config [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
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 4c8acba..90bda21 100644
--- a/content/docs/zh-CN/2.2.1/administration-dashboard.html
+++ b/content/docs/zh-CN/2.2.1/administration-dashboard.html
@@ -100,7 +100,7 @@
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="known-issues"></a><a href="#known-issues" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <p>Pulsar <a href="/docs/zh-CN/2.2.1/security-overview#authentication-providers">authentication</a> is not supported at this point. The dashboard's data collector does not pass any authentication-related data and will be denied access if the Pulsar broker requires authentication.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/administration-geo"><span class="arrow-prev">← </span><span>Geo-replication</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known-issues">Kno [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/administration-geo"><span class="arrow-prev">← </span><span>跨域复制</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known-issues">Known issues</ [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
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 4c8acba..90bda21 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
@@ -100,7 +100,7 @@
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="known-issues"></a><a href="#known-issues" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <p>Pulsar <a href="/docs/zh-CN/2.2.1/security-overview#authentication-providers">authentication</a> is not supported at this point. The dashboard's data collector does not pass any authentication-related data and will be denied access if the Pulsar broker requires authentication.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/administration-geo"><span class="arrow-prev">← </span><span>Geo-replication</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known-issues">Kno [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/administration-geo"><span class="arrow-prev">← </span><span>跨域复制</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known-issues">Known issues</ [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.2.1/administration-geo.html b/content/docs/zh-CN/2.2.1/administration-geo.html
index 10809ad..8c2c0bf 100644
--- a/content/docs/zh-CN/2.2.1/administration-geo.html
+++ b/content/docs/zh-CN/2.2.1/administration-geo.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*Geo-replication* is the replication of persistently stored message data across multiple clusters of a Pulsar instance."/><meta name="docsearch:version" content="2.2.1"/><meta name="docsearch [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*跨域复制* 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。"/><meta name="docsearch:version" content="2.2.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar geo-replication [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,40 +74,40 @@
                 };
               }
             });
-        </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 geo-replication</h1></header><article><div><span><p><em>Geo-replication</em> is the replication of persistently stored message data across multiple clusters of a Pulsar instance.</p>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
-<p>The diagram below illustrates the process of geo-replication across Pulsar clusters:</p>
-<p><img src="/docs/assets/geo-replication.png" alt="Replication Diagram"></p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Pulsar geo-replication</h1></header><article><div><span><p><em>跨域复制</em> 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。</p>
+<h2><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 [...]
+<p>下图说明了脉冲星在不同集群之间的跨域复制过程</p>
+<p><img src="/docs/assets/geo-replication.png" alt="复制图表"></p>
 <p>In this diagram, whenever producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong> publish messages to the topic <strong>T1</strong> on clusters <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong>, respectively, those messages are instantly replicated across clusters. Once replicated, consumers <strong>C1</strong> and <strong>C2</strong> can consume those messages from their respective clusters.</p>
 <p>Without geo-replication, consumers <strong>C1</strong> and <strong>C2</strong> wouldn't be able to consume messages published by producer <strong>P3</strong>.</p>
-<h2><a class="anchor" aria-hidden="true" id="geo-replication-and-pulsar-properties"></a><a href="#geo-replication-and-pulsar-properties" 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 [...]
-<p>Geo-replication must be enabled on a per-tenant basis in Pulsar. Geo-replication can be enabled between clusters only when a tenant has been created that allows access to both clusters.</p>
+<h2><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 [...]
+<p>在脉冲星中,我们限制了需要通过新增租户来激活跨域复制。 只有在创建了允许访问两个集群的租户时,才能在集群之间启用跨域复制。</p>
 <p>Although geo-replication must be enabled between two clusters, it's actually managed at the namespace level. You must do the following to enable geo-replication for a namespace:</p>
 <ul>
 <li><a href="#creating-global-namespaces">Create a global namespace</a></li>
 <li>Configure that namespace to replicate between two or more provisioned clusters</li>
 </ul>
 <p>Any message published on <em>any</em> topic in that namespace will then be replicated to all clusters in the specified set.</p>
-<h2><a class="anchor" aria-hidden="true" id="local-persistence-and-forwarding"></a><a href="#local-persistence-and-forwarding" 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. [...]
+<h2><a class="anchor" aria-hidden="true" id="本地存储和转发"></a><a href="#本地存储和转发" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
 <p>When messages are produced on a Pulsar topic, they are first persisted in the local cluster and then forwarded asynchronously to the remote clusters.</p>
-<p>In normal cases, when there are no connectivity issues, messages are replicated immediately, at the same time as they are dispatched to local consumers. Typically, end-to-end delivery latency is defined by the network <a href="https://en.wikipedia.org/wiki/Round-trip_delay_time">round-trip time</a> (RTT) between the remote regions.</p>
-<p>Applications can create producers and consumers in any of the clusters, even when the remote clusters are not reachable (like during a network partition).</p>
+<p>在正常情况下,当没有连接问题时,消息会立即复制,同时发送给本地消费者。 通常,端到端交付延迟由远程区域之间的网络往返时间<a href="https://en.wikipedia.org/wiki/Round-trip_delay_time"></a>(RTT)决定。</p>
+<p>应用程序可以在任何集群中创建生产者和消费者,即使无法访问远程集群(比如在网络分区期间)。</p>
 <blockquote>
-<h4><a class="anchor" aria-hidden="true" id="subscriptions-are-local-to-a-cluster"></a><a href="#subscriptions-are-local-to-a-cluster" 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 [...]
-<p>While producers and consumers can publish to and consume from any cluster in a Pulsar instance, subscriptions are local to the clusters in which they are created and cannot be transferred between clusters. If you do need to transfer a subscription, you’ll need to create a new subscription in the desired cluster.</p>
+<h4><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.6 [...]
+<p>虽然生产者和消费者可以在脉冲星实例中的任何集群中发布和消费,但是订阅是创建它们的集群的本地订阅,不能在集群之间传输。 如果确实需要传输订阅,则需要在所需的集群中创建新的订阅。</p>
 </blockquote>
 <p>In the example in the image above, the topic <strong>T1</strong> is being replicated between 3 clusters, <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong>.</p>
-<p>All messages produced in any cluster will be delivered to all subscriptions in all the other clusters. In this case, consumers <strong>C1</strong> and <strong>C2</strong> will receive all messages published by producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong>. Ordering is still guaranteed on a per-producer basis.</p>
-<h2><a class="anchor" aria-hidden="true" id="configuring-replication"></a><a href="#configuring-replication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
+<p>All messages produced in any cluster will be delivered to all subscriptions in all the other clusters. In this case, consumers <strong>C1</strong> and <strong>C2</strong> will receive all messages published by producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong>. 指令仍然在每个生产者的basis上有所保障。</p>
+<h2><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 [...]
 <p>As stated <a href="#geo-replication-and-pulsar-properties">above</a>, geo-replication in Pulsar is managed at the <a href="/docs/zh-CN/2.2.1/reference-terminology#tenant">tenant</a> level.</p>
-<h3><a class="anchor" aria-hidden="true" id="granting-permissions-to-properties"></a><a href="#granting-permissions-to-properties" 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.5 [...]
+<h3><a class="anchor" aria-hidden="true" id="授予属性权限"></a><a href="#授予属性权限" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>To establish replication to a cluster, the tenant needs permission to use that cluster. This permission can be granted when the tenant is created or later on.</p>
 <p>At creation time, specify all the intended clusters:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin properties create my-tenant \</span>
   --admin-roles my-admin-role \
   --allowed-clusters us-west,us-east,us-cent
 </code></pre>
-<p>To update permissions of an existing tenant, use <code>update</code> instead of <code>create</code>.</p>
+<p>要更新现有租户的权限,请使用<code>update</code>而不是<code>create</code>。</p>
 <h3><a class="anchor" aria-hidden="true" id="creating-global-namespaces"></a><a href="#creating-global-namespaces" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
 <p>Replication must be used with <em>global</em> topics, meaning topics that belong to a global namespace and are thus not tied to any particular cluster.</p>
 <p>Global namespaces need to be created in the <code>global</code> virtual cluster. For example:</p>
@@ -120,7 +120,7 @@
 <p>The replication clusters for a namespace can be changed at any time, with no disruption to ongoing traffic. Replication channels will be immediately set up or stopped in all the clusters as soon as the configuration changes.</p>
 <h3><a class="anchor" aria-hidden="true" id="using-global-topics"></a><a href="#using-global-topics" 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.2 [...]
 <p>Once you've created a global namespace, any topics that producers or consumers create within that namespace will be global. Typically, each application will use the <code>serviceUrl</code> for the local cluster.</p>
-<h4><a class="anchor" aria-hidden="true" id="selective-replication"></a><a href="#selective-replication" 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 [...]
+<h4><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.09 [...]
 <p>By default, messages are replicated to all clusters configured for the namespace. You can restrict replication selectively by specifying a replication list for a message. That message will then be replicated only to the subset in the replication list.</p>
 <p>Below is an example for the <a href="/docs/zh-CN/2.2.1/client-libraries-java">Java API</a>. Note the use of the <code>setReplicationClusters</code> method when constructing the <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Message">Message</a>
  object:</p>
@@ -138,7 +138,7 @@ producer.newMessage()
         .setReplicationClusters(restrictReplicationTo)
         .send();
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="topic-stats"></a><a href="#topic-stats" 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 [...]
+<h4><a class="anchor" aria-hidden="true" id="topic统计数据"></a><a href="#topic统计数据" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
 <p>Topic-specific statistics for global topics are available via the <a href="/docs/zh-CN/2.2.1/pulsar-admin"><code>pulsar-admin</code></a> tool and <a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
  API:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin persistent stats persistent://my-tenant/my-namespace/my-topic</span>
@@ -149,7 +149,7 @@ producer.newMessage()
 <p>In Pulsar, a topic is automatically deleted when it's no longer used, that is to say, when no producers or consumers are connected <em>and</em> there are no subscriptions <em>and</em> no more messages are kept for retention. For global topics, each region will use a fault-tolerant mechanism to decide when it's safe to delete the topic locally.</p>
 <p>You can explicitly disable topic garbage collection by setting <code>brokerDeleteInactiveTopicsEnabled</code> to <code>false</code> in your <a href="reference-configuration#broker">broker configuration</a>.</p>
 <p>To delete a global topic, close all producers and consumers on the topic and delete all its local subscriptions in every replication cluster. When Pulsar determines that no valid subscription for the topic remains across the system, it will garbage collect the topic.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a hr [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#跨域复制以及脉冲星特性 [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.2.1/administration-geo/index.html b/content/docs/zh-CN/2.2.1/administration-geo/index.html
index 10809ad..8c2c0bf 100644
--- a/content/docs/zh-CN/2.2.1/administration-geo/index.html
+++ b/content/docs/zh-CN/2.2.1/administration-geo/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*Geo-replication* is the replication of persistently stored message data across multiple clusters of a Pulsar instance."/><meta name="docsearch:version" content="2.2.1"/><meta name="docsearch [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*跨域复制* 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。"/><meta name="docsearch:version" content="2.2.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar geo-replication [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,40 +74,40 @@
                 };
               }
             });
-        </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 geo-replication</h1></header><article><div><span><p><em>Geo-replication</em> is the replication of persistently stored message data across multiple clusters of a Pulsar instance.</p>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
-<p>The diagram below illustrates the process of geo-replication across Pulsar clusters:</p>
-<p><img src="/docs/assets/geo-replication.png" alt="Replication Diagram"></p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Pulsar geo-replication</h1></header><article><div><span><p><em>跨域复制</em> 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。</p>
+<h2><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 [...]
+<p>下图说明了脉冲星在不同集群之间的跨域复制过程</p>
+<p><img src="/docs/assets/geo-replication.png" alt="复制图表"></p>
 <p>In this diagram, whenever producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong> publish messages to the topic <strong>T1</strong> on clusters <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong>, respectively, those messages are instantly replicated across clusters. Once replicated, consumers <strong>C1</strong> and <strong>C2</strong> can consume those messages from their respective clusters.</p>
 <p>Without geo-replication, consumers <strong>C1</strong> and <strong>C2</strong> wouldn't be able to consume messages published by producer <strong>P3</strong>.</p>
-<h2><a class="anchor" aria-hidden="true" id="geo-replication-and-pulsar-properties"></a><a href="#geo-replication-and-pulsar-properties" 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 [...]
-<p>Geo-replication must be enabled on a per-tenant basis in Pulsar. Geo-replication can be enabled between clusters only when a tenant has been created that allows access to both clusters.</p>
+<h2><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 [...]
+<p>在脉冲星中,我们限制了需要通过新增租户来激活跨域复制。 只有在创建了允许访问两个集群的租户时,才能在集群之间启用跨域复制。</p>
 <p>Although geo-replication must be enabled between two clusters, it's actually managed at the namespace level. You must do the following to enable geo-replication for a namespace:</p>
 <ul>
 <li><a href="#creating-global-namespaces">Create a global namespace</a></li>
 <li>Configure that namespace to replicate between two or more provisioned clusters</li>
 </ul>
 <p>Any message published on <em>any</em> topic in that namespace will then be replicated to all clusters in the specified set.</p>
-<h2><a class="anchor" aria-hidden="true" id="local-persistence-and-forwarding"></a><a href="#local-persistence-and-forwarding" 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. [...]
+<h2><a class="anchor" aria-hidden="true" id="本地存储和转发"></a><a href="#本地存储和转发" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
 <p>When messages are produced on a Pulsar topic, they are first persisted in the local cluster and then forwarded asynchronously to the remote clusters.</p>
-<p>In normal cases, when there are no connectivity issues, messages are replicated immediately, at the same time as they are dispatched to local consumers. Typically, end-to-end delivery latency is defined by the network <a href="https://en.wikipedia.org/wiki/Round-trip_delay_time">round-trip time</a> (RTT) between the remote regions.</p>
-<p>Applications can create producers and consumers in any of the clusters, even when the remote clusters are not reachable (like during a network partition).</p>
+<p>在正常情况下,当没有连接问题时,消息会立即复制,同时发送给本地消费者。 通常,端到端交付延迟由远程区域之间的网络往返时间<a href="https://en.wikipedia.org/wiki/Round-trip_delay_time"></a>(RTT)决定。</p>
+<p>应用程序可以在任何集群中创建生产者和消费者,即使无法访问远程集群(比如在网络分区期间)。</p>
 <blockquote>
-<h4><a class="anchor" aria-hidden="true" id="subscriptions-are-local-to-a-cluster"></a><a href="#subscriptions-are-local-to-a-cluster" 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 [...]
-<p>While producers and consumers can publish to and consume from any cluster in a Pulsar instance, subscriptions are local to the clusters in which they are created and cannot be transferred between clusters. If you do need to transfer a subscription, you’ll need to create a new subscription in the desired cluster.</p>
+<h4><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.6 [...]
+<p>虽然生产者和消费者可以在脉冲星实例中的任何集群中发布和消费,但是订阅是创建它们的集群的本地订阅,不能在集群之间传输。 如果确实需要传输订阅,则需要在所需的集群中创建新的订阅。</p>
 </blockquote>
 <p>In the example in the image above, the topic <strong>T1</strong> is being replicated between 3 clusters, <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong>.</p>
-<p>All messages produced in any cluster will be delivered to all subscriptions in all the other clusters. In this case, consumers <strong>C1</strong> and <strong>C2</strong> will receive all messages published by producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong>. Ordering is still guaranteed on a per-producer basis.</p>
-<h2><a class="anchor" aria-hidden="true" id="configuring-replication"></a><a href="#configuring-replication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
+<p>All messages produced in any cluster will be delivered to all subscriptions in all the other clusters. In this case, consumers <strong>C1</strong> and <strong>C2</strong> will receive all messages published by producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong>. 指令仍然在每个生产者的basis上有所保障。</p>
+<h2><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 [...]
 <p>As stated <a href="#geo-replication-and-pulsar-properties">above</a>, geo-replication in Pulsar is managed at the <a href="/docs/zh-CN/2.2.1/reference-terminology#tenant">tenant</a> level.</p>
-<h3><a class="anchor" aria-hidden="true" id="granting-permissions-to-properties"></a><a href="#granting-permissions-to-properties" 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.5 [...]
+<h3><a class="anchor" aria-hidden="true" id="授予属性权限"></a><a href="#授予属性权限" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>To establish replication to a cluster, the tenant needs permission to use that cluster. This permission can be granted when the tenant is created or later on.</p>
 <p>At creation time, specify all the intended clusters:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin properties create my-tenant \</span>
   --admin-roles my-admin-role \
   --allowed-clusters us-west,us-east,us-cent
 </code></pre>
-<p>To update permissions of an existing tenant, use <code>update</code> instead of <code>create</code>.</p>
+<p>要更新现有租户的权限,请使用<code>update</code>而不是<code>create</code>。</p>
 <h3><a class="anchor" aria-hidden="true" id="creating-global-namespaces"></a><a href="#creating-global-namespaces" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
 <p>Replication must be used with <em>global</em> topics, meaning topics that belong to a global namespace and are thus not tied to any particular cluster.</p>
 <p>Global namespaces need to be created in the <code>global</code> virtual cluster. For example:</p>
@@ -120,7 +120,7 @@
 <p>The replication clusters for a namespace can be changed at any time, with no disruption to ongoing traffic. Replication channels will be immediately set up or stopped in all the clusters as soon as the configuration changes.</p>
 <h3><a class="anchor" aria-hidden="true" id="using-global-topics"></a><a href="#using-global-topics" 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.2 [...]
 <p>Once you've created a global namespace, any topics that producers or consumers create within that namespace will be global. Typically, each application will use the <code>serviceUrl</code> for the local cluster.</p>
-<h4><a class="anchor" aria-hidden="true" id="selective-replication"></a><a href="#selective-replication" 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 [...]
+<h4><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.09 [...]
 <p>By default, messages are replicated to all clusters configured for the namespace. You can restrict replication selectively by specifying a replication list for a message. That message will then be replicated only to the subset in the replication list.</p>
 <p>Below is an example for the <a href="/docs/zh-CN/2.2.1/client-libraries-java">Java API</a>. Note the use of the <code>setReplicationClusters</code> method when constructing the <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Message">Message</a>
  object:</p>
@@ -138,7 +138,7 @@ producer.newMessage()
         .setReplicationClusters(restrictReplicationTo)
         .send();
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="topic-stats"></a><a href="#topic-stats" 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 [...]
+<h4><a class="anchor" aria-hidden="true" id="topic统计数据"></a><a href="#topic统计数据" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
 <p>Topic-specific statistics for global topics are available via the <a href="/docs/zh-CN/2.2.1/pulsar-admin"><code>pulsar-admin</code></a> tool and <a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
  API:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin persistent stats persistent://my-tenant/my-namespace/my-topic</span>
@@ -149,7 +149,7 @@ producer.newMessage()
 <p>In Pulsar, a topic is automatically deleted when it's no longer used, that is to say, when no producers or consumers are connected <em>and</em> there are no subscriptions <em>and</em> no more messages are kept for retention. For global topics, each region will use a fault-tolerant mechanism to decide when it's safe to delete the topic locally.</p>
 <p>You can explicitly disable topic garbage collection by setting <code>brokerDeleteInactiveTopicsEnabled</code> to <code>false</code> in your <a href="reference-configuration#broker">broker configuration</a>.</p>
 <p>To delete a global topic, close all producers and consumers on the topic and delete all its local subscriptions in every replication cluster. When Pulsar determines that no valid subscription for the topic remains across the system, it will garbage collect the topic.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a hr [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#跨域复制以及脉冲星特性 [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.2.1/administration-zk-bk.html b/content/docs/zh-CN/2.2.1/administration-zk-bk.html
index 0f27414..a7988b0 100644
--- a/content/docs/zh-CN/2.2.1/administration-zk-bk.html
+++ b/content/docs/zh-CN/2.2.1/administration-zk-bk.html
@@ -287,7 +287,7 @@ admin.namespaces().setPersistence(namespace, policies);
 <p>This diagram illustrates the role of ZooKeeper and BookKeeper in a Pulsar cluster:</p>
 <p><img src="/docs/assets/pulsar-system-architecture.png" alt="ZooKeeper and BookKeeper"></p>
 <p>Each Pulsar cluster consists of one or more message brokers. Each broker relies on an ensemble of bookies.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/administration-geo"><span>Geo-replication</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-local-zookeep [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/administration-geo"><span>跨域复制</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-local-zookeeper">Deployi [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.2.1/administration-zk-bk/index.html b/content/docs/zh-CN/2.2.1/administration-zk-bk/index.html
index 0f27414..a7988b0 100644
--- a/content/docs/zh-CN/2.2.1/administration-zk-bk/index.html
+++ b/content/docs/zh-CN/2.2.1/administration-zk-bk/index.html
@@ -287,7 +287,7 @@ admin.namespaces().setPersistence(namespace, policies);
 <p>This diagram illustrates the role of ZooKeeper and BookKeeper in a Pulsar cluster:</p>
 <p><img src="/docs/assets/pulsar-system-architecture.png" alt="ZooKeeper and BookKeeper"></p>
 <p>Each Pulsar cluster consists of one or more message brokers. Each broker relies on an ensemble of bookies.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/administration-geo"><span>Geo-replication</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-local-zookeep [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/administration-geo"><span>跨域复制</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-local-zookeeper">Deployi [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.2.1/cookbooks-deduplication.html b/content/docs/zh-CN/2.2.1/cookbooks-deduplication.html
index efa1f58..bd8d74c 100644
--- a/content/docs/zh-CN/2.2.1/cookbooks-deduplication.html
+++ b/content/docs/zh-CN/2.2.1/cookbooks-deduplication.html
@@ -79,7 +79,7 @@
 <blockquote>
 <p>For a more thorough theoretical explanation of message deduplication, see the <a href="/docs/zh-CN/2.2.1/concepts-messaging#message-deduplication">Concepts and Architecture</a> document.</p>
 </blockquote>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" 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. [...]
+<h2><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 [...]
 <p>Message deduplication can be enabled and disabled on a per-namespace basis. By default, it is <em>disabled</em> on all namespaces and can enabled in the following ways:</p>
 <ul>
 <li>Using the <a href="#enabling"><code>pulsar-admin namespaces</code></a> interface</li>
@@ -163,7 +163,7 @@ Producer producer;
 
 Result result = client.createProducer(topic, producerConfig, producer);
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a href="#configuration-for-message-dedup [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#configuration-for-message-deduplication">Config [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.2.1/cookbooks-deduplication/index.html b/content/docs/zh-CN/2.2.1/cookbooks-deduplication/index.html
index efa1f58..bd8d74c 100644
--- a/content/docs/zh-CN/2.2.1/cookbooks-deduplication/index.html
+++ b/content/docs/zh-CN/2.2.1/cookbooks-deduplication/index.html
@@ -79,7 +79,7 @@
 <blockquote>
 <p>For a more thorough theoretical explanation of message deduplication, see the <a href="/docs/zh-CN/2.2.1/concepts-messaging#message-deduplication">Concepts and Architecture</a> document.</p>
 </blockquote>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" 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. [...]
+<h2><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 [...]
 <p>Message deduplication can be enabled and disabled on a per-namespace basis. By default, it is <em>disabled</em> on all namespaces and can enabled in the following ways:</p>
 <ul>
 <li>Using the <a href="#enabling"><code>pulsar-admin namespaces</code></a> interface</li>
@@ -163,7 +163,7 @@ Producer producer;
 
 Result result = client.createProducer(topic, producerConfig, producer);
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a href="#configuration-for-message-dedup [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#configuration-for-message-deduplication">Config [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
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 ef71177..eac6d2f 100644
--- a/content/docs/zh-CN/2.3.0/administration-dashboard.html
+++ b/content/docs/zh-CN/2.3.0/administration-dashboard.html
@@ -100,7 +100,7 @@
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="known-issues"></a><a href="#known-issues" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <p>Pulsar <a href="/docs/zh-CN/2.3.0/security-overview#authentication-providers">authentication</a> is not supported at this point. The dashboard's data collector does not pass any authentication-related data and will be denied access if the Pulsar broker requires authentication.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.0/administration-geo"><span class="arrow-prev">← </span><span>Geo-replication</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.0/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known-issues">Kno [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.0/administration-geo"><span class="arrow-prev">← </span><span>跨域复制</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.0/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known-issues">Known issues</ [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
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 ef71177..eac6d2f 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
@@ -100,7 +100,7 @@
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="known-issues"></a><a href="#known-issues" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <p>Pulsar <a href="/docs/zh-CN/2.3.0/security-overview#authentication-providers">authentication</a> is not supported at this point. The dashboard's data collector does not pass any authentication-related data and will be denied access if the Pulsar broker requires authentication.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.0/administration-geo"><span class="arrow-prev">← </span><span>Geo-replication</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.0/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known-issues">Kno [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.0/administration-geo"><span class="arrow-prev">← </span><span>跨域复制</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.0/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known-issues">Known issues</ [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.3.0/administration-geo.html b/content/docs/zh-CN/2.3.0/administration-geo.html
index 73b1c2d..eb9ca6f 100644
--- a/content/docs/zh-CN/2.3.0/administration-geo.html
+++ b/content/docs/zh-CN/2.3.0/administration-geo.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*Geo-replication* is the replication of persistently stored message data across multiple clusters of a Pulsar instance."/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*跨域复制* 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar geo-replication [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,40 +74,40 @@
                 };
               }
             });
-        </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 geo-replication</h1></header><article><div><span><p><em>Geo-replication</em> is the replication of persistently stored message data across multiple clusters of a Pulsar instance.</p>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
-<p>The diagram below illustrates the process of geo-replication across Pulsar clusters:</p>
-<p><img src="/docs/assets/geo-replication.png" alt="Replication Diagram"></p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Pulsar geo-replication</h1></header><article><div><span><p><em>跨域复制</em> 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。</p>
+<h2><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 [...]
+<p>下图说明了脉冲星在不同集群之间的跨域复制过程</p>
+<p><img src="/docs/assets/geo-replication.png" alt="复制图表"></p>
 <p>In this diagram, whenever producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong> publish messages to the topic <strong>T1</strong> on clusters <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong>, respectively, those messages are instantly replicated across clusters. Once replicated, consumers <strong>C1</strong> and <strong>C2</strong> can consume those messages from their respective clusters.</p>
 <p>Without geo-replication, consumers <strong>C1</strong> and <strong>C2</strong> wouldn't be able to consume messages published by producer <strong>P3</strong>.</p>
-<h2><a class="anchor" aria-hidden="true" id="geo-replication-and-pulsar-properties"></a><a href="#geo-replication-and-pulsar-properties" 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 [...]
-<p>Geo-replication must be enabled on a per-tenant basis in Pulsar. Geo-replication can be enabled between clusters only when a tenant has been created that allows access to both clusters.</p>
+<h2><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 [...]
+<p>在脉冲星中,我们限制了需要通过新增租户来激活跨域复制。 只有在创建了允许访问两个集群的租户时,才能在集群之间启用跨域复制。</p>
 <p>Although geo-replication must be enabled between two clusters, it's actually managed at the namespace level. You must do the following to enable geo-replication for a namespace:</p>
 <ul>
 <li><a href="#creating-global-namespaces">Create a global namespace</a></li>
 <li>Configure that namespace to replicate between two or more provisioned clusters</li>
 </ul>
 <p>Any message published on <em>any</em> topic in that namespace will then be replicated to all clusters in the specified set.</p>
-<h2><a class="anchor" aria-hidden="true" id="local-persistence-and-forwarding"></a><a href="#local-persistence-and-forwarding" 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. [...]
+<h2><a class="anchor" aria-hidden="true" id="本地存储和转发"></a><a href="#本地存储和转发" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
 <p>When messages are produced on a Pulsar topic, they are first persisted in the local cluster and then forwarded asynchronously to the remote clusters.</p>
-<p>In normal cases, when there are no connectivity issues, messages are replicated immediately, at the same time as they are dispatched to local consumers. Typically, end-to-end delivery latency is defined by the network <a href="https://en.wikipedia.org/wiki/Round-trip_delay_time">round-trip time</a> (RTT) between the remote regions.</p>
-<p>Applications can create producers and consumers in any of the clusters, even when the remote clusters are not reachable (like during a network partition).</p>
+<p>在正常情况下,当没有连接问题时,消息会立即复制,同时发送给本地消费者。 通常,端到端交付延迟由远程区域之间的网络往返时间<a href="https://en.wikipedia.org/wiki/Round-trip_delay_time"></a>(RTT)决定。</p>
+<p>应用程序可以在任何集群中创建生产者和消费者,即使无法访问远程集群(比如在网络分区期间)。</p>
 <blockquote>
-<h4><a class="anchor" aria-hidden="true" id="subscriptions-are-local-to-a-cluster"></a><a href="#subscriptions-are-local-to-a-cluster" 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 [...]
-<p>While producers and consumers can publish to and consume from any cluster in a Pulsar instance, subscriptions are local to the clusters in which they are created and cannot be transferred between clusters. If you do need to transfer a subscription, you’ll need to create a new subscription in the desired cluster.</p>
+<h4><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.6 [...]
+<p>虽然生产者和消费者可以在脉冲星实例中的任何集群中发布和消费,但是订阅是创建它们的集群的本地订阅,不能在集群之间传输。 如果确实需要传输订阅,则需要在所需的集群中创建新的订阅。</p>
 </blockquote>
 <p>In the example in the image above, the topic <strong>T1</strong> is being replicated between 3 clusters, <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong>.</p>
-<p>All messages produced in any cluster will be delivered to all subscriptions in all the other clusters. In this case, consumers <strong>C1</strong> and <strong>C2</strong> will receive all messages published by producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong>. Ordering is still guaranteed on a per-producer basis.</p>
-<h2><a class="anchor" aria-hidden="true" id="configuring-replication"></a><a href="#configuring-replication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
+<p>All messages produced in any cluster will be delivered to all subscriptions in all the other clusters. In this case, consumers <strong>C1</strong> and <strong>C2</strong> will receive all messages published by producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong>. 指令仍然在每个生产者的basis上有所保障。</p>
+<h2><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 [...]
 <p>As stated <a href="#geo-replication-and-pulsar-properties">above</a>, geo-replication in Pulsar is managed at the <a href="/docs/zh-CN/2.3.0/reference-terminology#tenant">tenant</a> level.</p>
-<h3><a class="anchor" aria-hidden="true" id="granting-permissions-to-properties"></a><a href="#granting-permissions-to-properties" 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.5 [...]
+<h3><a class="anchor" aria-hidden="true" id="授予属性权限"></a><a href="#授予属性权限" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>To establish replication to a cluster, the tenant needs permission to use that cluster. This permission can be granted when the tenant is created or later on.</p>
 <p>At creation time, specify all the intended clusters:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin properties create my-tenant \</span>
   --admin-roles my-admin-role \
   --allowed-clusters us-west,us-east,us-cent
 </code></pre>
-<p>To update permissions of an existing tenant, use <code>update</code> instead of <code>create</code>.</p>
+<p>要更新现有租户的权限,请使用<code>update</code>而不是<code>create</code>。</p>
 <h3><a class="anchor" aria-hidden="true" id="creating-global-namespaces"></a><a href="#creating-global-namespaces" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
 <p>Replication must be used with <em>global</em> topics, meaning topics that belong to a global namespace and are thus not tied to any particular cluster.</p>
 <p>Global namespaces need to be created in the <code>global</code> virtual cluster. For example:</p>
@@ -120,7 +120,7 @@
 <p>The replication clusters for a namespace can be changed at any time, with no disruption to ongoing traffic. Replication channels will be immediately set up or stopped in all the clusters as soon as the configuration changes.</p>
 <h3><a class="anchor" aria-hidden="true" id="using-global-topics"></a><a href="#using-global-topics" 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.2 [...]
 <p>Once you've created a global namespace, any topics that producers or consumers create within that namespace will be global. Typically, each application will use the <code>serviceUrl</code> for the local cluster.</p>
-<h4><a class="anchor" aria-hidden="true" id="selective-replication"></a><a href="#selective-replication" 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 [...]
+<h4><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.09 [...]
 <p>By default, messages are replicated to all clusters configured for the namespace. You can restrict replication selectively by specifying a replication list for a message. That message will then be replicated only to the subset in the replication list.</p>
 <p>Below is an example for the <a href="/docs/zh-CN/2.3.0/client-libraries-java">Java API</a>. Note the use of the <code>setReplicationClusters</code> method when constructing the <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Message">Message</a>
  object:</p>
@@ -138,7 +138,7 @@ producer.newMessage()
         .setReplicationClusters(restrictReplicationTo)
         .send();
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="topic-stats"></a><a href="#topic-stats" 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 [...]
+<h4><a class="anchor" aria-hidden="true" id="topic统计数据"></a><a href="#topic统计数据" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
 <p>Topic-specific statistics for global topics are available via the <a href="/docs/zh-CN/2.3.0/pulsar-admin"><code>pulsar-admin</code></a> tool and <a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
  API:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin persistent stats persistent://my-tenant/my-namespace/my-topic</span>
@@ -149,7 +149,7 @@ producer.newMessage()
 <p>In Pulsar, a topic is automatically deleted when it's no longer used, that is to say, when no producers or consumers are connected <em>and</em> there are no subscriptions <em>and</em> no more messages are kept for retention. For global topics, each region will use a fault-tolerant mechanism to decide when it's safe to delete the topic locally.</p>
 <p>You can explicitly disable topic garbage collection by setting <code>brokerDeleteInactiveTopicsEnabled</code> to <code>false</code> in your <a href="reference-configuration#broker">broker configuration</a>.</p>
 <p>To delete a global topic, close all producers and consumers on the topic and delete all its local subscriptions in every replication cluster. When Pulsar determines that no valid subscription for the topic remains across the system, it will garbage collect the topic.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.0/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.0/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a hr [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.0/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.0/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#跨域复制以及脉冲星特性 [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.3.0/administration-geo/index.html b/content/docs/zh-CN/2.3.0/administration-geo/index.html
index 73b1c2d..eb9ca6f 100644
--- a/content/docs/zh-CN/2.3.0/administration-geo/index.html
+++ b/content/docs/zh-CN/2.3.0/administration-geo/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*Geo-replication* is the replication of persistently stored message data across multiple clusters of a Pulsar instance."/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*跨域复制* 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar geo-replication [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,40 +74,40 @@
                 };
               }
             });
-        </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 geo-replication</h1></header><article><div><span><p><em>Geo-replication</em> is the replication of persistently stored message data across multiple clusters of a Pulsar instance.</p>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
-<p>The diagram below illustrates the process of geo-replication across Pulsar clusters:</p>
-<p><img src="/docs/assets/geo-replication.png" alt="Replication Diagram"></p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Pulsar geo-replication</h1></header><article><div><span><p><em>跨域复制</em> 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。</p>
+<h2><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 [...]
+<p>下图说明了脉冲星在不同集群之间的跨域复制过程</p>
+<p><img src="/docs/assets/geo-replication.png" alt="复制图表"></p>
 <p>In this diagram, whenever producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong> publish messages to the topic <strong>T1</strong> on clusters <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong>, respectively, those messages are instantly replicated across clusters. Once replicated, consumers <strong>C1</strong> and <strong>C2</strong> can consume those messages from their respective clusters.</p>
 <p>Without geo-replication, consumers <strong>C1</strong> and <strong>C2</strong> wouldn't be able to consume messages published by producer <strong>P3</strong>.</p>
-<h2><a class="anchor" aria-hidden="true" id="geo-replication-and-pulsar-properties"></a><a href="#geo-replication-and-pulsar-properties" 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 [...]
-<p>Geo-replication must be enabled on a per-tenant basis in Pulsar. Geo-replication can be enabled between clusters only when a tenant has been created that allows access to both clusters.</p>
+<h2><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 [...]
+<p>在脉冲星中,我们限制了需要通过新增租户来激活跨域复制。 只有在创建了允许访问两个集群的租户时,才能在集群之间启用跨域复制。</p>
 <p>Although geo-replication must be enabled between two clusters, it's actually managed at the namespace level. You must do the following to enable geo-replication for a namespace:</p>
 <ul>
 <li><a href="#creating-global-namespaces">Create a global namespace</a></li>
 <li>Configure that namespace to replicate between two or more provisioned clusters</li>
 </ul>
 <p>Any message published on <em>any</em> topic in that namespace will then be replicated to all clusters in the specified set.</p>
-<h2><a class="anchor" aria-hidden="true" id="local-persistence-and-forwarding"></a><a href="#local-persistence-and-forwarding" 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. [...]
+<h2><a class="anchor" aria-hidden="true" id="本地存储和转发"></a><a href="#本地存储和转发" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
 <p>When messages are produced on a Pulsar topic, they are first persisted in the local cluster and then forwarded asynchronously to the remote clusters.</p>
-<p>In normal cases, when there are no connectivity issues, messages are replicated immediately, at the same time as they are dispatched to local consumers. Typically, end-to-end delivery latency is defined by the network <a href="https://en.wikipedia.org/wiki/Round-trip_delay_time">round-trip time</a> (RTT) between the remote regions.</p>
-<p>Applications can create producers and consumers in any of the clusters, even when the remote clusters are not reachable (like during a network partition).</p>
+<p>在正常情况下,当没有连接问题时,消息会立即复制,同时发送给本地消费者。 通常,端到端交付延迟由远程区域之间的网络往返时间<a href="https://en.wikipedia.org/wiki/Round-trip_delay_time"></a>(RTT)决定。</p>
+<p>应用程序可以在任何集群中创建生产者和消费者,即使无法访问远程集群(比如在网络分区期间)。</p>
 <blockquote>
-<h4><a class="anchor" aria-hidden="true" id="subscriptions-are-local-to-a-cluster"></a><a href="#subscriptions-are-local-to-a-cluster" 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 [...]
-<p>While producers and consumers can publish to and consume from any cluster in a Pulsar instance, subscriptions are local to the clusters in which they are created and cannot be transferred between clusters. If you do need to transfer a subscription, you’ll need to create a new subscription in the desired cluster.</p>
+<h4><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.6 [...]
+<p>虽然生产者和消费者可以在脉冲星实例中的任何集群中发布和消费,但是订阅是创建它们的集群的本地订阅,不能在集群之间传输。 如果确实需要传输订阅,则需要在所需的集群中创建新的订阅。</p>
 </blockquote>
 <p>In the example in the image above, the topic <strong>T1</strong> is being replicated between 3 clusters, <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong>.</p>
-<p>All messages produced in any cluster will be delivered to all subscriptions in all the other clusters. In this case, consumers <strong>C1</strong> and <strong>C2</strong> will receive all messages published by producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong>. Ordering is still guaranteed on a per-producer basis.</p>
-<h2><a class="anchor" aria-hidden="true" id="configuring-replication"></a><a href="#configuring-replication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
+<p>All messages produced in any cluster will be delivered to all subscriptions in all the other clusters. In this case, consumers <strong>C1</strong> and <strong>C2</strong> will receive all messages published by producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong>. 指令仍然在每个生产者的basis上有所保障。</p>
+<h2><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 [...]
 <p>As stated <a href="#geo-replication-and-pulsar-properties">above</a>, geo-replication in Pulsar is managed at the <a href="/docs/zh-CN/2.3.0/reference-terminology#tenant">tenant</a> level.</p>
-<h3><a class="anchor" aria-hidden="true" id="granting-permissions-to-properties"></a><a href="#granting-permissions-to-properties" 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.5 [...]
+<h3><a class="anchor" aria-hidden="true" id="授予属性权限"></a><a href="#授予属性权限" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>To establish replication to a cluster, the tenant needs permission to use that cluster. This permission can be granted when the tenant is created or later on.</p>
 <p>At creation time, specify all the intended clusters:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin properties create my-tenant \</span>
   --admin-roles my-admin-role \
   --allowed-clusters us-west,us-east,us-cent
 </code></pre>
-<p>To update permissions of an existing tenant, use <code>update</code> instead of <code>create</code>.</p>
+<p>要更新现有租户的权限,请使用<code>update</code>而不是<code>create</code>。</p>
 <h3><a class="anchor" aria-hidden="true" id="creating-global-namespaces"></a><a href="#creating-global-namespaces" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
 <p>Replication must be used with <em>global</em> topics, meaning topics that belong to a global namespace and are thus not tied to any particular cluster.</p>
 <p>Global namespaces need to be created in the <code>global</code> virtual cluster. For example:</p>
@@ -120,7 +120,7 @@
 <p>The replication clusters for a namespace can be changed at any time, with no disruption to ongoing traffic. Replication channels will be immediately set up or stopped in all the clusters as soon as the configuration changes.</p>
 <h3><a class="anchor" aria-hidden="true" id="using-global-topics"></a><a href="#using-global-topics" 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.2 [...]
 <p>Once you've created a global namespace, any topics that producers or consumers create within that namespace will be global. Typically, each application will use the <code>serviceUrl</code> for the local cluster.</p>
-<h4><a class="anchor" aria-hidden="true" id="selective-replication"></a><a href="#selective-replication" 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 [...]
+<h4><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.09 [...]
 <p>By default, messages are replicated to all clusters configured for the namespace. You can restrict replication selectively by specifying a replication list for a message. That message will then be replicated only to the subset in the replication list.</p>
 <p>Below is an example for the <a href="/docs/zh-CN/2.3.0/client-libraries-java">Java API</a>. Note the use of the <code>setReplicationClusters</code> method when constructing the <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Message">Message</a>
  object:</p>
@@ -138,7 +138,7 @@ producer.newMessage()
         .setReplicationClusters(restrictReplicationTo)
         .send();
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="topic-stats"></a><a href="#topic-stats" 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 [...]
+<h4><a class="anchor" aria-hidden="true" id="topic统计数据"></a><a href="#topic统计数据" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
 <p>Topic-specific statistics for global topics are available via the <a href="/docs/zh-CN/2.3.0/pulsar-admin"><code>pulsar-admin</code></a> tool and <a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
  API:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin persistent stats persistent://my-tenant/my-namespace/my-topic</span>
@@ -149,7 +149,7 @@ producer.newMessage()
 <p>In Pulsar, a topic is automatically deleted when it's no longer used, that is to say, when no producers or consumers are connected <em>and</em> there are no subscriptions <em>and</em> no more messages are kept for retention. For global topics, each region will use a fault-tolerant mechanism to decide when it's safe to delete the topic locally.</p>
 <p>You can explicitly disable topic garbage collection by setting <code>brokerDeleteInactiveTopicsEnabled</code> to <code>false</code> in your <a href="reference-configuration#broker">broker configuration</a>.</p>
 <p>To delete a global topic, close all producers and consumers on the topic and delete all its local subscriptions in every replication cluster. When Pulsar determines that no valid subscription for the topic remains across the system, it will garbage collect the topic.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.0/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.0/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a hr [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.0/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.0/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#跨域复制以及脉冲星特性 [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.3.0/administration-zk-bk.html b/content/docs/zh-CN/2.3.0/administration-zk-bk.html
index c14e565..bf7acb2 100644
--- a/content/docs/zh-CN/2.3.0/administration-zk-bk.html
+++ b/content/docs/zh-CN/2.3.0/administration-zk-bk.html
@@ -288,7 +288,7 @@ admin.namespaces().setPersistence(namespace, policies);
 <p>This diagram illustrates the role of ZooKeeper and BookKeeper in a Pulsar cluster:</p>
 <p><img src="/docs/assets/pulsar-system-architecture.png" alt="ZooKeeper and BookKeeper"></p>
 <p>Each Pulsar cluster consists of one or more message brokers. Each broker relies on an ensemble of bookies.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.0/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.0/administration-geo"><span>Geo-replication</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-local-zookeep [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.0/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.0/administration-geo"><span>跨域复制</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-local-zookeeper">Deployi [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.3.0/administration-zk-bk/index.html b/content/docs/zh-CN/2.3.0/administration-zk-bk/index.html
index c14e565..bf7acb2 100644
--- a/content/docs/zh-CN/2.3.0/administration-zk-bk/index.html
+++ b/content/docs/zh-CN/2.3.0/administration-zk-bk/index.html
@@ -288,7 +288,7 @@ admin.namespaces().setPersistence(namespace, policies);
 <p>This diagram illustrates the role of ZooKeeper and BookKeeper in a Pulsar cluster:</p>
 <p><img src="/docs/assets/pulsar-system-architecture.png" alt="ZooKeeper and BookKeeper"></p>
 <p>Each Pulsar cluster consists of one or more message brokers. Each broker relies on an ensemble of bookies.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.0/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.0/administration-geo"><span>Geo-replication</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-local-zookeep [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.0/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.0/administration-geo"><span>跨域复制</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-local-zookeeper">Deployi [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.3.0/cookbooks-deduplication.html b/content/docs/zh-CN/2.3.0/cookbooks-deduplication.html
index 5ed4b36..b8be0a4 100644
--- a/content/docs/zh-CN/2.3.0/cookbooks-deduplication.html
+++ b/content/docs/zh-CN/2.3.0/cookbooks-deduplication.html
@@ -79,7 +79,7 @@
 <blockquote>
 <p>For a more thorough theoretical explanation of message deduplication, see the <a href="/docs/zh-CN/2.3.0/concepts-messaging#message-deduplication">Concepts and Architecture</a> document.</p>
 </blockquote>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" 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. [...]
+<h2><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 [...]
 <p>Message deduplication can be enabled and disabled on a per-namespace basis. By default, it is <em>disabled</em> on all namespaces and can enabled in the following ways:</p>
 <ul>
 <li>Using the <a href="#enabling"><code>pulsar-admin namespaces</code></a> interface</li>
@@ -163,7 +163,7 @@ Producer producer;
 
 Result result = client.createProducer(topic, producerConfig, producer);
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.0/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.0/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a href="#configuration-for-message-dedup [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.0/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.0/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#configuration-for-message-deduplication">Config [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.3.0/cookbooks-deduplication/index.html b/content/docs/zh-CN/2.3.0/cookbooks-deduplication/index.html
index 5ed4b36..b8be0a4 100644
--- a/content/docs/zh-CN/2.3.0/cookbooks-deduplication/index.html
+++ b/content/docs/zh-CN/2.3.0/cookbooks-deduplication/index.html
@@ -79,7 +79,7 @@
 <blockquote>
 <p>For a more thorough theoretical explanation of message deduplication, see the <a href="/docs/zh-CN/2.3.0/concepts-messaging#message-deduplication">Concepts and Architecture</a> document.</p>
 </blockquote>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" 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. [...]
+<h2><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 [...]
 <p>Message deduplication can be enabled and disabled on a per-namespace basis. By default, it is <em>disabled</em> on all namespaces and can enabled in the following ways:</p>
 <ul>
 <li>Using the <a href="#enabling"><code>pulsar-admin namespaces</code></a> interface</li>
@@ -163,7 +163,7 @@ Producer producer;
 
 Result result = client.createProducer(topic, producerConfig, producer);
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.0/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.0/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a href="#configuration-for-message-dedup [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.0/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.0/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#configuration-for-message-deduplication">Config [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
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 adf1283..97a6336 100644
--- a/content/docs/zh-CN/2.3.1/administration-dashboard.html
+++ b/content/docs/zh-CN/2.3.1/administration-dashboard.html
@@ -111,7 +111,7 @@
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="known-issues"></a><a href="#known-issues" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <p>Only Pulsar Token <a href="/docs/zh-CN/2.3.1/security-overview#authentication-providers">authentication</a> is supported as of now.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.1/administration-geo"><span class="arrow-prev">← </span><span>Geo-replication</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.1/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known-issues">Kno [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.1/administration-geo"><span class="arrow-prev">← </span><span>跨域复制</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.1/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known-issues">Known issues</ [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
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 adf1283..97a6336 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
@@ -111,7 +111,7 @@
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="known-issues"></a><a href="#known-issues" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <p>Only Pulsar Token <a href="/docs/zh-CN/2.3.1/security-overview#authentication-providers">authentication</a> is supported as of now.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.1/administration-geo"><span class="arrow-prev">← </span><span>Geo-replication</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.1/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known-issues">Kno [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.1/administration-geo"><span class="arrow-prev">← </span><span>跨域复制</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.1/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known-issues">Known issues</ [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.3.1/administration-geo.html b/content/docs/zh-CN/2.3.1/administration-geo.html
index 748ed2d..48566c0 100644
--- a/content/docs/zh-CN/2.3.1/administration-geo.html
+++ b/content/docs/zh-CN/2.3.1/administration-geo.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*Geo-replication* is the replication of persistently stored message data across multiple clusters of a Pulsar instance."/><meta name="docsearch:version" content="2.3.1"/><meta name="docsearch [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*跨域复制* 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。"/><meta name="docsearch:version" content="2.3.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar geo-replication [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,40 +74,40 @@
                 };
               }
             });
-        </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 geo-replication</h1></header><article><div><span><p><em>Geo-replication</em> is the replication of persistently stored message data across multiple clusters of a Pulsar instance.</p>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
-<p>The diagram below illustrates the process of geo-replication across Pulsar clusters:</p>
-<p><img src="/docs/assets/geo-replication.png" alt="Replication Diagram"></p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Pulsar geo-replication</h1></header><article><div><span><p><em>跨域复制</em> 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。</p>
+<h2><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 [...]
+<p>下图说明了脉冲星在不同集群之间的跨域复制过程</p>
+<p><img src="/docs/assets/geo-replication.png" alt="复制图表"></p>
 <p>In this diagram, whenever producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong> publish messages to the topic <strong>T1</strong> on clusters <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong>, respectively, those messages are instantly replicated across clusters. Once replicated, consumers <strong>C1</strong> and <strong>C2</strong> can consume those messages from their respective clusters.</p>
 <p>Without geo-replication, consumers <strong>C1</strong> and <strong>C2</strong> wouldn't be able to consume messages published by producer <strong>P3</strong>.</p>
-<h2><a class="anchor" aria-hidden="true" id="geo-replication-and-pulsar-properties"></a><a href="#geo-replication-and-pulsar-properties" 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 [...]
-<p>Geo-replication must be enabled on a per-tenant basis in Pulsar. Geo-replication can be enabled between clusters only when a tenant has been created that allows access to both clusters.</p>
+<h2><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 [...]
+<p>在脉冲星中,我们限制了需要通过新增租户来激活跨域复制。 只有在创建了允许访问两个集群的租户时,才能在集群之间启用跨域复制。</p>
 <p>Although geo-replication must be enabled between two clusters, it's actually managed at the namespace level. You must do the following to enable geo-replication for a namespace:</p>
 <ul>
 <li><a href="#creating-global-namespaces">Create a global namespace</a></li>
 <li>Configure that namespace to replicate between two or more provisioned clusters</li>
 </ul>
 <p>Any message published on <em>any</em> topic in that namespace will then be replicated to all clusters in the specified set.</p>
-<h2><a class="anchor" aria-hidden="true" id="local-persistence-and-forwarding"></a><a href="#local-persistence-and-forwarding" 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. [...]
+<h2><a class="anchor" aria-hidden="true" id="本地存储和转发"></a><a href="#本地存储和转发" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
 <p>When messages are produced on a Pulsar topic, they are first persisted in the local cluster and then forwarded asynchronously to the remote clusters.</p>
-<p>In normal cases, when there are no connectivity issues, messages are replicated immediately, at the same time as they are dispatched to local consumers. Typically, end-to-end delivery latency is defined by the network <a href="https://en.wikipedia.org/wiki/Round-trip_delay_time">round-trip time</a> (RTT) between the remote regions.</p>
-<p>Applications can create producers and consumers in any of the clusters, even when the remote clusters are not reachable (like during a network partition).</p>
+<p>在正常情况下,当没有连接问题时,消息会立即复制,同时发送给本地消费者。 通常,端到端交付延迟由远程区域之间的网络往返时间<a href="https://en.wikipedia.org/wiki/Round-trip_delay_time"></a>(RTT)决定。</p>
+<p>应用程序可以在任何集群中创建生产者和消费者,即使无法访问远程集群(比如在网络分区期间)。</p>
 <blockquote>
-<h4><a class="anchor" aria-hidden="true" id="subscriptions-are-local-to-a-cluster"></a><a href="#subscriptions-are-local-to-a-cluster" 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 [...]
-<p>While producers and consumers can publish to and consume from any cluster in a Pulsar instance, subscriptions are local to the clusters in which they are created and cannot be transferred between clusters. If you do need to transfer a subscription, you’ll need to create a new subscription in the desired cluster.</p>
+<h4><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.6 [...]
+<p>虽然生产者和消费者可以在脉冲星实例中的任何集群中发布和消费,但是订阅是创建它们的集群的本地订阅,不能在集群之间传输。 如果确实需要传输订阅,则需要在所需的集群中创建新的订阅。</p>
 </blockquote>
 <p>In the example in the image above, the topic <strong>T1</strong> is being replicated between 3 clusters, <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong>.</p>
-<p>All messages produced in any cluster will be delivered to all subscriptions in all the other clusters. In this case, consumers <strong>C1</strong> and <strong>C2</strong> will receive all messages published by producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong>. Ordering is still guaranteed on a per-producer basis.</p>
-<h2><a class="anchor" aria-hidden="true" id="configuring-replication"></a><a href="#configuring-replication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
+<p>All messages produced in any cluster will be delivered to all subscriptions in all the other clusters. In this case, consumers <strong>C1</strong> and <strong>C2</strong> will receive all messages published by producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong>. 指令仍然在每个生产者的basis上有所保障。</p>
+<h2><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 [...]
 <p>As stated <a href="#geo-replication-and-pulsar-properties">above</a>, geo-replication in Pulsar is managed at the <a href="/docs/zh-CN/2.3.1/reference-terminology#tenant">tenant</a> level.</p>
-<h3><a class="anchor" aria-hidden="true" id="granting-permissions-to-properties"></a><a href="#granting-permissions-to-properties" 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.5 [...]
+<h3><a class="anchor" aria-hidden="true" id="授予属性权限"></a><a href="#授予属性权限" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>To establish replication to a cluster, the tenant needs permission to use that cluster. This permission can be granted when the tenant is created or later on.</p>
 <p>At creation time, specify all the intended clusters:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin properties create my-tenant \</span>
   --admin-roles my-admin-role \
   --allowed-clusters us-west,us-east,us-cent
 </code></pre>
-<p>To update permissions of an existing tenant, use <code>update</code> instead of <code>create</code>.</p>
+<p>要更新现有租户的权限,请使用<code>update</code>而不是<code>create</code>。</p>
 <h3><a class="anchor" aria-hidden="true" id="creating-global-namespaces"></a><a href="#creating-global-namespaces" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
 <p>Replication must be used with <em>global</em> topics, meaning topics that belong to a global namespace and are thus not tied to any particular cluster.</p>
 <p>Global namespaces need to be created in the <code>global</code> virtual cluster. For example:</p>
@@ -120,7 +120,7 @@
 <p>The replication clusters for a namespace can be changed at any time, with no disruption to ongoing traffic. Replication channels will be immediately set up or stopped in all the clusters as soon as the configuration changes.</p>
 <h3><a class="anchor" aria-hidden="true" id="using-global-topics"></a><a href="#using-global-topics" 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.2 [...]
 <p>Once you've created a global namespace, any topics that producers or consumers create within that namespace will be global. Typically, each application will use the <code>serviceUrl</code> for the local cluster.</p>
-<h4><a class="anchor" aria-hidden="true" id="selective-replication"></a><a href="#selective-replication" 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 [...]
+<h4><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.09 [...]
 <p>By default, messages are replicated to all clusters configured for the namespace. You can restrict replication selectively by specifying a replication list for a message. That message will then be replicated only to the subset in the replication list.</p>
 <p>Below is an example for the <a href="/docs/zh-CN/2.3.1/client-libraries-java">Java API</a>. Note the use of the <code>setReplicationClusters</code> method when constructing the <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Message">Message</a>
  object:</p>
@@ -138,7 +138,7 @@ producer.newMessage()
         .setReplicationClusters(restrictReplicationTo)
         .send();
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="topic-stats"></a><a href="#topic-stats" 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 [...]
+<h4><a class="anchor" aria-hidden="true" id="topic统计数据"></a><a href="#topic统计数据" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
 <p>Topic-specific statistics for global topics are available via the <a href="/docs/zh-CN/2.3.1/pulsar-admin"><code>pulsar-admin</code></a> tool and <a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
  API:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin persistent stats persistent://my-tenant/my-namespace/my-topic</span>
@@ -149,7 +149,7 @@ producer.newMessage()
 <p>In Pulsar, a topic is automatically deleted when it's no longer used, that is to say, when no producers or consumers are connected <em>and</em> there are no subscriptions <em>and</em> no more messages are kept for retention. For global topics, each region will use a fault-tolerant mechanism to decide when it's safe to delete the topic locally.</p>
 <p>You can explicitly disable topic garbage collection by setting <code>brokerDeleteInactiveTopicsEnabled</code> to <code>false</code> in your <a href="reference-configuration#broker">broker configuration</a>.</p>
 <p>To delete a global topic, close all producers and consumers on the topic and delete all its local subscriptions in every replication cluster. When Pulsar determines that no valid subscription for the topic remains across the system, it will garbage collect the topic.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.1/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.1/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a hr [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.1/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.1/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#跨域复制以及脉冲星特性 [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.3.1/administration-geo/index.html b/content/docs/zh-CN/2.3.1/administration-geo/index.html
index 748ed2d..48566c0 100644
--- a/content/docs/zh-CN/2.3.1/administration-geo/index.html
+++ b/content/docs/zh-CN/2.3.1/administration-geo/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*Geo-replication* is the replication of persistently stored message data across multiple clusters of a Pulsar instance."/><meta name="docsearch:version" content="2.3.1"/><meta name="docsearch [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*跨域复制* 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。"/><meta name="docsearch:version" content="2.3.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar geo-replication [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,40 +74,40 @@
                 };
               }
             });
-        </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 geo-replication</h1></header><article><div><span><p><em>Geo-replication</em> is the replication of persistently stored message data across multiple clusters of a Pulsar instance.</p>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
-<p>The diagram below illustrates the process of geo-replication across Pulsar clusters:</p>
-<p><img src="/docs/assets/geo-replication.png" alt="Replication Diagram"></p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Pulsar geo-replication</h1></header><article><div><span><p><em>跨域复制</em> 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。</p>
+<h2><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 [...]
+<p>下图说明了脉冲星在不同集群之间的跨域复制过程</p>
+<p><img src="/docs/assets/geo-replication.png" alt="复制图表"></p>
 <p>In this diagram, whenever producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong> publish messages to the topic <strong>T1</strong> on clusters <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong>, respectively, those messages are instantly replicated across clusters. Once replicated, consumers <strong>C1</strong> and <strong>C2</strong> can consume those messages from their respective clusters.</p>
 <p>Without geo-replication, consumers <strong>C1</strong> and <strong>C2</strong> wouldn't be able to consume messages published by producer <strong>P3</strong>.</p>
-<h2><a class="anchor" aria-hidden="true" id="geo-replication-and-pulsar-properties"></a><a href="#geo-replication-and-pulsar-properties" 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 [...]
-<p>Geo-replication must be enabled on a per-tenant basis in Pulsar. Geo-replication can be enabled between clusters only when a tenant has been created that allows access to both clusters.</p>
+<h2><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 [...]
+<p>在脉冲星中,我们限制了需要通过新增租户来激活跨域复制。 只有在创建了允许访问两个集群的租户时,才能在集群之间启用跨域复制。</p>
 <p>Although geo-replication must be enabled between two clusters, it's actually managed at the namespace level. You must do the following to enable geo-replication for a namespace:</p>
 <ul>
 <li><a href="#creating-global-namespaces">Create a global namespace</a></li>
 <li>Configure that namespace to replicate between two or more provisioned clusters</li>
 </ul>
 <p>Any message published on <em>any</em> topic in that namespace will then be replicated to all clusters in the specified set.</p>
-<h2><a class="anchor" aria-hidden="true" id="local-persistence-and-forwarding"></a><a href="#local-persistence-and-forwarding" 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. [...]
+<h2><a class="anchor" aria-hidden="true" id="本地存储和转发"></a><a href="#本地存储和转发" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
 <p>When messages are produced on a Pulsar topic, they are first persisted in the local cluster and then forwarded asynchronously to the remote clusters.</p>
-<p>In normal cases, when there are no connectivity issues, messages are replicated immediately, at the same time as they are dispatched to local consumers. Typically, end-to-end delivery latency is defined by the network <a href="https://en.wikipedia.org/wiki/Round-trip_delay_time">round-trip time</a> (RTT) between the remote regions.</p>
-<p>Applications can create producers and consumers in any of the clusters, even when the remote clusters are not reachable (like during a network partition).</p>
+<p>在正常情况下,当没有连接问题时,消息会立即复制,同时发送给本地消费者。 通常,端到端交付延迟由远程区域之间的网络往返时间<a href="https://en.wikipedia.org/wiki/Round-trip_delay_time"></a>(RTT)决定。</p>
+<p>应用程序可以在任何集群中创建生产者和消费者,即使无法访问远程集群(比如在网络分区期间)。</p>
 <blockquote>
-<h4><a class="anchor" aria-hidden="true" id="subscriptions-are-local-to-a-cluster"></a><a href="#subscriptions-are-local-to-a-cluster" 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 [...]
-<p>While producers and consumers can publish to and consume from any cluster in a Pulsar instance, subscriptions are local to the clusters in which they are created and cannot be transferred between clusters. If you do need to transfer a subscription, you’ll need to create a new subscription in the desired cluster.</p>
+<h4><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.6 [...]
+<p>虽然生产者和消费者可以在脉冲星实例中的任何集群中发布和消费,但是订阅是创建它们的集群的本地订阅,不能在集群之间传输。 如果确实需要传输订阅,则需要在所需的集群中创建新的订阅。</p>
 </blockquote>
 <p>In the example in the image above, the topic <strong>T1</strong> is being replicated between 3 clusters, <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong>.</p>
-<p>All messages produced in any cluster will be delivered to all subscriptions in all the other clusters. In this case, consumers <strong>C1</strong> and <strong>C2</strong> will receive all messages published by producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong>. Ordering is still guaranteed on a per-producer basis.</p>
-<h2><a class="anchor" aria-hidden="true" id="configuring-replication"></a><a href="#configuring-replication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
+<p>All messages produced in any cluster will be delivered to all subscriptions in all the other clusters. In this case, consumers <strong>C1</strong> and <strong>C2</strong> will receive all messages published by producers <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong>. 指令仍然在每个生产者的basis上有所保障。</p>
+<h2><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 [...]
 <p>As stated <a href="#geo-replication-and-pulsar-properties">above</a>, geo-replication in Pulsar is managed at the <a href="/docs/zh-CN/2.3.1/reference-terminology#tenant">tenant</a> level.</p>
-<h3><a class="anchor" aria-hidden="true" id="granting-permissions-to-properties"></a><a href="#granting-permissions-to-properties" 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.5 [...]
+<h3><a class="anchor" aria-hidden="true" id="授予属性权限"></a><a href="#授予属性权限" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>To establish replication to a cluster, the tenant needs permission to use that cluster. This permission can be granted when the tenant is created or later on.</p>
 <p>At creation time, specify all the intended clusters:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin properties create my-tenant \</span>
   --admin-roles my-admin-role \
   --allowed-clusters us-west,us-east,us-cent
 </code></pre>
-<p>To update permissions of an existing tenant, use <code>update</code> instead of <code>create</code>.</p>
+<p>要更新现有租户的权限,请使用<code>update</code>而不是<code>create</code>。</p>
 <h3><a class="anchor" aria-hidden="true" id="creating-global-namespaces"></a><a href="#creating-global-namespaces" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
 <p>Replication must be used with <em>global</em> topics, meaning topics that belong to a global namespace and are thus not tied to any particular cluster.</p>
 <p>Global namespaces need to be created in the <code>global</code> virtual cluster. For example:</p>
@@ -120,7 +120,7 @@
 <p>The replication clusters for a namespace can be changed at any time, with no disruption to ongoing traffic. Replication channels will be immediately set up or stopped in all the clusters as soon as the configuration changes.</p>
 <h3><a class="anchor" aria-hidden="true" id="using-global-topics"></a><a href="#using-global-topics" 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.2 [...]
 <p>Once you've created a global namespace, any topics that producers or consumers create within that namespace will be global. Typically, each application will use the <code>serviceUrl</code> for the local cluster.</p>
-<h4><a class="anchor" aria-hidden="true" id="selective-replication"></a><a href="#selective-replication" 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 [...]
+<h4><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.09 [...]
 <p>By default, messages are replicated to all clusters configured for the namespace. You can restrict replication selectively by specifying a replication list for a message. That message will then be replicated only to the subset in the replication list.</p>
 <p>Below is an example for the <a href="/docs/zh-CN/2.3.1/client-libraries-java">Java API</a>. Note the use of the <code>setReplicationClusters</code> method when constructing the <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Message">Message</a>
  object:</p>
@@ -138,7 +138,7 @@ producer.newMessage()
         .setReplicationClusters(restrictReplicationTo)
         .send();
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="topic-stats"></a><a href="#topic-stats" 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 [...]
+<h4><a class="anchor" aria-hidden="true" id="topic统计数据"></a><a href="#topic统计数据" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
 <p>Topic-specific statistics for global topics are available via the <a href="/docs/zh-CN/2.3.1/pulsar-admin"><code>pulsar-admin</code></a> tool and <a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
  API:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin persistent stats persistent://my-tenant/my-namespace/my-topic</span>
@@ -149,7 +149,7 @@ producer.newMessage()
 <p>In Pulsar, a topic is automatically deleted when it's no longer used, that is to say, when no producers or consumers are connected <em>and</em> there are no subscriptions <em>and</em> no more messages are kept for retention. For global topics, each region will use a fault-tolerant mechanism to decide when it's safe to delete the topic locally.</p>
 <p>You can explicitly disable topic garbage collection by setting <code>brokerDeleteInactiveTopicsEnabled</code> to <code>false</code> in your <a href="reference-configuration#broker">broker configuration</a>.</p>
 <p>To delete a global topic, close all producers and consumers on the topic and delete all its local subscriptions in every replication cluster. When Pulsar determines that no valid subscription for the topic remains across the system, it will garbage collect the topic.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.1/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.1/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a hr [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.1/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.1/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#跨域复制以及脉冲星特性 [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.3.1/administration-zk-bk.html b/content/docs/zh-CN/2.3.1/administration-zk-bk.html
index 9d46c6a..f6ca073 100644
--- a/content/docs/zh-CN/2.3.1/administration-zk-bk.html
+++ b/content/docs/zh-CN/2.3.1/administration-zk-bk.html
@@ -288,7 +288,7 @@ admin.namespaces().setPersistence(namespace, policies);
 <p>This diagram illustrates the role of ZooKeeper and BookKeeper in a Pulsar cluster:</p>
 <p><img src="/docs/assets/pulsar-system-architecture.png" alt="ZooKeeper and BookKeeper"></p>
 <p>Each Pulsar cluster consists of one or more message brokers. Each broker relies on an ensemble of bookies.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.1/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.1/administration-geo"><span>Geo-replication</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-local-zookeep [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.1/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.1/administration-geo"><span>跨域复制</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-local-zookeeper">Deployi [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.3.1/administration-zk-bk/index.html b/content/docs/zh-CN/2.3.1/administration-zk-bk/index.html
index 9d46c6a..f6ca073 100644
--- a/content/docs/zh-CN/2.3.1/administration-zk-bk/index.html
+++ b/content/docs/zh-CN/2.3.1/administration-zk-bk/index.html
@@ -288,7 +288,7 @@ admin.namespaces().setPersistence(namespace, policies);
 <p>This diagram illustrates the role of ZooKeeper and BookKeeper in a Pulsar cluster:</p>
 <p><img src="/docs/assets/pulsar-system-architecture.png" alt="ZooKeeper and BookKeeper"></p>
 <p>Each Pulsar cluster consists of one or more message brokers. Each broker relies on an ensemble of bookies.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.1/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.1/administration-geo"><span>Geo-replication</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-local-zookeep [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.1/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.1/administration-geo"><span>跨域复制</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-local-zookeeper">Deployi [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.3.1/cookbooks-deduplication.html b/content/docs/zh-CN/2.3.1/cookbooks-deduplication.html
index badb47c..2d4201d 100644
--- a/content/docs/zh-CN/2.3.1/cookbooks-deduplication.html
+++ b/content/docs/zh-CN/2.3.1/cookbooks-deduplication.html
@@ -79,7 +79,7 @@
 <blockquote>
 <p>For a more thorough theoretical explanation of message deduplication, see the <a href="/docs/zh-CN/2.3.1/concepts-messaging#message-deduplication">Concepts and Architecture</a> document.</p>
 </blockquote>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" 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. [...]
+<h2><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 [...]
 <p>Message deduplication can be enabled and disabled on a per-namespace basis. By default, it is <em>disabled</em> on all namespaces and can enabled in the following ways:</p>
 <ul>
 <li>Using the <a href="#enabling"><code>pulsar-admin namespaces</code></a> interface</li>
@@ -163,7 +163,7 @@ Producer producer;
 
 Result result = client.createProducer(topic, producerConfig, producer);
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.1/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.1/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a href="#configuration-for-message-dedup [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.1/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.1/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#configuration-for-message-deduplication">Config [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.3.1/cookbooks-deduplication/index.html b/content/docs/zh-CN/2.3.1/cookbooks-deduplication/index.html
index badb47c..2d4201d 100644
--- a/content/docs/zh-CN/2.3.1/cookbooks-deduplication/index.html
+++ b/content/docs/zh-CN/2.3.1/cookbooks-deduplication/index.html
@@ -79,7 +79,7 @@
 <blockquote>
 <p>For a more thorough theoretical explanation of message deduplication, see the <a href="/docs/zh-CN/2.3.1/concepts-messaging#message-deduplication">Concepts and Architecture</a> document.</p>
 </blockquote>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" 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. [...]
+<h2><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 [...]
 <p>Message deduplication can be enabled and disabled on a per-namespace basis. By default, it is <em>disabled</em> on all namespaces and can enabled in the following ways:</p>
 <ul>
 <li>Using the <a href="#enabling"><code>pulsar-admin namespaces</code></a> interface</li>
@@ -163,7 +163,7 @@ Producer producer;
 
 Result result = client.createProducer(topic, producerConfig, producer);
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.1/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.1/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a href="#configuration-for-message-dedup [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.1/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.1/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#configuration-for-message-deduplication">Config [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.3.2/administration-dashboard.html b/content/docs/zh-CN/2.3.2/administration-dashboard.html
index 9da21b2..fbb1a56 100644
--- a/content/docs/zh-CN/2.3.2/administration-dashboard.html
+++ b/content/docs/zh-CN/2.3.2/administration-dashboard.html
@@ -111,7 +111,7 @@
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="known-issues"></a><a href="#known-issues" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <p>Only Pulsar Token <a href="/docs/zh-CN/2.3.2/security-overview#authentication-providers">authentication</a> is supported as of now.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.2/administration-geo"><span class="arrow-prev">← </span><span>Geo-replication</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.2/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known-issues">Kno [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.2/administration-geo"><span class="arrow-prev">← </span><span>跨域复制</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.2/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known-issues">Known issues</ [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.3.2/administration-dashboard/index.html b/content/docs/zh-CN/2.3.2/administration-dashboard/index.html
index 9da21b2..fbb1a56 100644
--- a/content/docs/zh-CN/2.3.2/administration-dashboard/index.html
+++ b/content/docs/zh-CN/2.3.2/administration-dashboard/index.html
@@ -111,7 +111,7 @@
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="known-issues"></a><a href="#known-issues" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <p>Only Pulsar Token <a href="/docs/zh-CN/2.3.2/security-overview#authentication-providers">authentication</a> is supported as of now.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.2/administration-geo"><span class="arrow-prev">← </span><span>Geo-replication</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.2/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known-issues">Kno [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.2/administration-geo"><span class="arrow-prev">← </span><span>跨域复制</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.2/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known-issues">Known issues</ [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.3.2/administration-geo.html b/content/docs/zh-CN/2.3.2/administration-geo.html
index f4505e6..57e6f9c 100644
--- a/content/docs/zh-CN/2.3.2/administration-geo.html
+++ b/content/docs/zh-CN/2.3.2/administration-geo.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*Geo-replication* is the replication of persistently stored message data across multiple clusters of a Pulsar instance."/><meta name="docsearch:version" content="2.3.2"/><meta name="docsearch [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*跨域复制* 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。"/><meta name="docsearch:version" content="2.3.2"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar geo-replication [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,54 +74,54 @@
                 };
               }
             });
-        </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 geo-replication</h1></header><article><div><span><p><em>Geo-replication</em> is the replication of persistently stored message data across multiple clusters of a Pulsar instance.</p>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
-<p>The diagram below illustrates the process of geo-replication across Pulsar clusters:</p>
-<p><img src="/docs/assets/geo-replication.png" alt="Replication Diagram"></p>
-<p>In this diagram, whenever <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong> producers publish messages to the <strong>T1</strong> topic on <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong> clusters respectively, those messages are instantly replicated across clusters. Once replicated, <strong>C1</strong> and <strong>C2</strong> consumers can consume those messages from their respective clusters.</p>
-<p>Without geo-replication, <strong>C1</strong> and <strong>C2</strong> consumers are not able to consume messages published by <strong>P3</strong> producer.</p>
-<h2><a class="anchor" aria-hidden="true" id="geo-replication-and-pulsar-properties"></a><a href="#geo-replication-and-pulsar-properties" 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 [...]
+        </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 geo-replication</h1></header><article><div><span><p><em>跨域复制</em> 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。</p>
+<h2><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 [...]
+<p>下图说明了脉冲星在不同集群之间的跨域复制过程</p>
+<p><img src="/docs/assets/geo-replication.png" alt="复制图表"></p>
+<p>在这个图中,每当<strong>P1</strong>、<strong>P2</strong>和<strong>P3</strong>的生产者分别在<strong>集群A</strong>、<strong>集群B</strong>和<strong>集群C</strong>向</strong>T1</strong> topic发送消息时,这些消息就会进行实时的跨集群复制 一旦复制,<strong>C1</strong>和<strong>C2</strong>的客户就可以从各自的集群中使用这些消息。</p>
+<p>没有进行跨域复制前,<strong>C1</strong>和<strong>C2</strong>消费者不能使用<strong>P3</strong>生产者发布的消息</p>
+<h2><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 [...]
 <p>Geo-replication must be enabled on a per-tenant basis in Pulsar. Geo-replication can be enabled between clusters only when a tenant has been created that allows access to both clusters.</p>
 <p>Although geo-replication must be enabled between two clusters, it's actually managed at the namespace level. You must complete the following tasks to enable geo-replication for a namespace:</p>
 <ul>
-<li><a href="#enabling-geo-replication-namespaces">Enable geo-replication namespaces</a></li>
-<li>Configure that namespace to replicate across two or more provisioned clusters</li>
+<li><a href="#enabling-geo-replication-namespaces">激活geo-replication名称空间</a></li>
+<li>配置该名称空间使其可以跨两个或多个集群复制</li>
 </ul>
-<p>Any message published on <em>any</em> topic in that namespace will be replicated to all clusters in the specified set.</p>
-<h2><a class="anchor" aria-hidden="true" id="local-persistence-and-forwarding"></a><a href="#local-persistence-and-forwarding" 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. [...]
-<p>When messages are produced on a Pulsar topic, they are first persisted in the local cluster, and then forwarded asynchronously to the remote clusters.</p>
-<p>In normal cases, when there are no connectivity issues, messages are replicated immediately, at the same time as they are dispatched to local consumers. Typically, end-to-end delivery latency is defined by the network <a href="https://en.wikipedia.org/wiki/Round-trip_delay_time">round-trip time</a> (RTT) between the remote regions.</p>
-<p>Applications can create producers and consumers in any of the clusters, even when the remote clusters are not reachable (like during a network partition).</p>
+<p>该名称空间中在<em>任何</em>topic上发布的任何消息都将复制到指定集合中的所有集群。</p>
+<h2><a class="anchor" aria-hidden="true" id="本地存储和转发"></a><a href="#本地存储和转发" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>当信息在脉冲星topic上生成时,它们首先会被保存在本地集群中,然后异步转发到远程集群。</p>
+<p>在正常情况下,当没有连接问题时,消息会立即复制,同时发送给本地消费者。 通常,端到端交付延迟由远程区域之间的网络往返时间<a href="https://en.wikipedia.org/wiki/Round-trip_delay_time"></a>(RTT)决定。</p>
+<p>应用程序可以在任何集群中创建生产者和消费者,即使无法访问远程集群(比如在网络分区期间)。</p>
 <blockquote>
-<h4><a class="anchor" aria-hidden="true" id="subscriptions-are-local-to-a-cluster"></a><a href="#subscriptions-are-local-to-a-cluster" 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 [...]
-<p>While producers and consumers can publish to and consume from any cluster in a Pulsar instance, subscriptions are local to the clusters in which they are created and cannot be transferred between clusters. If you do need to transfer a subscription, you’ll need to create a new subscription in the desired cluster.</p>
+<h4><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.6 [...]
+<p>虽然生产者和消费者可以在脉冲星实例中的任何集群中发布和消费,但是订阅是创建它们的集群的本地订阅,不能在集群之间传输。 如果确实需要传输订阅,则需要在所需的集群中创建新的订阅。</p>
 </blockquote>
-<p>In the aforementioned example, the <strong>T1</strong> topic is being replicated among three clusters, <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong>.</p>
-<p>All messages produced in any of the three clusters are delivered to all subscriptions in other clusters. In this case, <strong>C1</strong> and <strong>C2</strong> consumers will receive all messages published by <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong> producers. Ordering is still guaranteed on a per-producer basis.</p>
-<h2><a class="anchor" aria-hidden="true" id="configuring-replication"></a><a href="#configuring-replication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
-<p>As stated in <a href="#geo-replication-and-pulsar-properties">Geo-replication and Pulsar properties</a> section, geo-replication in Pulsar is managed at the <a href="/docs/zh-CN/2.3.2/reference-terminology#tenant">tenant</a> level.</p>
-<h3><a class="anchor" aria-hidden="true" id="granting-permissions-to-properties"></a><a href="#granting-permissions-to-properties" 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.5 [...]
+<p>在这个案例中,<strong>T1</strong>主题被复制到三个集群中,<strong>集群A</strong>、<strong>集群B</strong>和<strong>集群C</strong>。</p>
+<p>这三个集群中的任何一个集群生成的所有消息都交付给其他集群中的所有订阅。 在这种情况下,<strong>C1</strong>和<strong>C2</strong>的消费者将接收到由<strong>P1</strong>,<strong>P2</strong>,<strong>P3</strong>生产者发出的全部信息。 指令仍然在每个生产者的basis上有所保障。</p>
+<h2><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 [...]
+<p>正如在<a href="#geo-replication-and-pulsar-properties">Geo-replication和脉冲星属性</a>一节中所述,脉冲星中的Geo-replication是在<a href="/docs/zh-CN/2.3.2/reference-terminology#tenant">租户级别</a>进行管理的。</p>
+<h3><a class="anchor" aria-hidden="true" id="授予属性权限"></a><a href="#授予属性权限" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>To replicate to a cluster, the tenant needs permission to use that cluster. You can grant permission to the tenant when you create it or grant later.</p>
-<p>Specify all the intended clusters when creating a tenant:</p>
+<p>在创建租户时指定所有预期的集群</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin tenants create my-tenant \</span>
   --admin-roles my-admin-role \
   --allowed-clusters us-west,us-east,us-cent
 </code></pre>
-<p>To update permissions of an existing tenant, use <code>update</code> instead of <code>create</code>.</p>
-<h3><a class="anchor" aria-hidden="true" id="enabling-geo-replication-namespaces"></a><a href="#enabling-geo-replication-namespaces" 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 [...]
-<p>You can create a namespace with the following command sample.</p>
+<p>要更新现有租户的权限,请使用<code>update</code>而不是<code>create</code>。</p>
+<h3><a class="anchor" aria-hidden="true" id="激活geo-replication名称空间"></a><a href="#激活geo-replication名称空间" 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 [...]
+<p>你可以使用如下示例命令创建名称空间。</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin namespaces create my-tenant/my-namespace</span>
 </code></pre>
 <p>Initially, the namespace is not assigned to any cluster. You can assign the namespace to clusters using the <code>set-clusters</code> subcommand:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin namespaces <span class="hljs-built_in">set</span>-clusters my-tenant/my-namespace \</span>
   --clusters us-west,us-east,us-cent
 </code></pre>
-<p>The replication clusters for a namespace can be changed at any time, without disruption to ongoing traffic. Replication channels are immediately set up or stopped in all clusters as soon as the configuration changes.</p>
-<h3><a class="anchor" aria-hidden="true" id="using-topics-with-geo-replication"></a><a href="#using-topics-with-geo-replication" 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.5S1 [...]
-<p>Once you've created a geo-replication namespace, any topics that producers or consumers create within that namespace will be replicated across clusters. Typically, each application will use the <code>serviceUrl</code> for the local cluster.</p>
-<h4><a class="anchor" aria-hidden="true" id="selective-replication"></a><a href="#selective-replication" 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 [...]
-<p>By default, messages are replicated to all clusters configured for the namespace. You can restrict replication selectively by specifying a replication list for a message, and then that message will be replicated only to the subset in the replication list.</p>
-<p>The following is an example for the <a href="/docs/zh-CN/2.3.2/client-libraries-java">Java API</a>. Note the use of the <code>setReplicationClusters</code> method when constructing the <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Message">Message</a>
+<p>你可以随时更改名称空间的复制集群,而不会中断正在进行的通信。 一旦配置发生更改,复制通道将立即在所有集群中设置或停止。</p>
+<h3><a class="anchor" aria-hidden="true" id="使用带有topic的跨域复制"></a><a href="#使用带有topic的跨域复制" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p>一旦创建了跨域复制名称空间,生产者或消费者在该名称空间中创建的任何topic都将进行跨集群复制。 Typically, each application will use the <code>serviceUrl</code> for the local cluster.</p>
+<h4><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.09 [...]
+<p>By default, messages are replicated to all clusters configured for the namespace. 您可以通过为消息指定复制列表来选择性地限制复制,然后该消息将只复制到复制列表中的子集。</p>
+<p>下面是<a href="/docs/zh-CN/2.3.2/client-libraries-java">Java API</a>的一个示例。 Note the use of the <code>setReplicationClusters</code> method when constructing the <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Message">Message</a>
  object:</p>
 <pre><code class="hljs css language-java">List&lt;String&gt; restrictReplicationTo = Arrays.asList(
         <span class="hljs-string">"us-west"</span>,
@@ -137,23 +137,23 @@ producer.newMessage()
         .setReplicationClusters(restrictReplicationTo)
         .send();
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="topic-stats"></a><a href="#topic-stats" 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 [...]
-<p>Topic-specific statistics for geo-replication topics are available via the <a href="/docs/zh-CN/2.3.2/pulsar-admin"><code>pulsar-admin</code></a> tool and <a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
- API:</p>
+<h4><a class="anchor" aria-hidden="true" id="topic统计数据"></a><a href="#topic统计数据" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
+<p>特定主题的地跨域复制统计信息可以通过<a href="/docs/zh-CN/2.3.2/pulsar-admin"><code>pulse -admin</code></a>工具和<a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
+ API查看</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin persistent stats persistent://my-tenant/my-namespace/my-topic</span>
 </code></pre>
-<p>Each cluster reports its own local stats, including the incoming and outgoing replication rates and backlogs.</p>
-<h4><a class="anchor" aria-hidden="true" id="deleting-a-geo-replication-topic"></a><a href="#deleting-a-geo-replication-topic" 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. [...]
+<p>每个集群会生成自己的本地统计信息报告,包括传入和传出的复制率和队列容量。</p>
+<h4><a class="anchor" aria-hidden="true" id="删除跨域复制topic"></a><a href="#删除跨域复制topic" 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 [...]
 <p>Given that geo-replication topics exist in multiple regions, it's not possible to directly delete a geo-replication topic. Instead, you should rely on automatic topic garbage collection.</p>
 <p>In Pulsar, a topic is automatically deleted when it meets the following three conditions:</p>
 <ul>
 <li>when no producers or consumers are connected to it;</li>
 <li>there are no subscriptions to it;</li>
-<li>no more messages are kept for retention. For geo-replication topics, each region uses a fault-tolerant mechanism to decide when it's safe to delete the topic locally.</li>
+<li>no more messages are kept for retention. 对于跨域复制topic,每个区域都使用容错机制来决定何时在本地安全删除该主题。</li>
 </ul>
-<p>You can explicitly disable topic garbage collection by setting <code>brokerDeleteInactiveTopicsEnabled</code> to <code>false</code> in your <a href="/docs/zh-CN/2.3.2/reference-configuration#broker">broker configuration</a>.</p>
-<p>To delete a geo-replication topic, close all producers and consumers on the topic, and delete all of its local subscriptions in every replication cluster. When Pulsar determines that no valid subscription for the topic remains across the system, it will garbage collect the topic.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.2/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.2/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a hr [...]
+<p>可以通过在<a href="/docs/zh-CN/2.3.2/reference-configuration#broker">代理配置</a>中设置<code>brokerDeleteInactiveTopicsEnabled</code>为<code>false</code>来显式禁用主题垃圾收集。</p>
+<p>要删除跨域复制主题,请关闭该主题上的所有生产者和消费者,并删除每个复制集群中的所有本地订阅。 When Pulsar determines that no valid subscription for the topic remains across the system, it will garbage collect the topic.</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.2/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.2/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#跨域复制以及脉冲星特性 [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.3.2/administration-geo/index.html b/content/docs/zh-CN/2.3.2/administration-geo/index.html
index f4505e6..57e6f9c 100644
--- a/content/docs/zh-CN/2.3.2/administration-geo/index.html
+++ b/content/docs/zh-CN/2.3.2/administration-geo/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*Geo-replication* is the replication of persistently stored message data across multiple clusters of a Pulsar instance."/><meta name="docsearch:version" content="2.3.2"/><meta name="docsearch [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*跨域复制* 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。"/><meta name="docsearch:version" content="2.3.2"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar geo-replication [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,54 +74,54 @@
                 };
               }
             });
-        </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 geo-replication</h1></header><article><div><span><p><em>Geo-replication</em> is the replication of persistently stored message data across multiple clusters of a Pulsar instance.</p>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
-<p>The diagram below illustrates the process of geo-replication across Pulsar clusters:</p>
-<p><img src="/docs/assets/geo-replication.png" alt="Replication Diagram"></p>
-<p>In this diagram, whenever <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong> producers publish messages to the <strong>T1</strong> topic on <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong> clusters respectively, those messages are instantly replicated across clusters. Once replicated, <strong>C1</strong> and <strong>C2</strong> consumers can consume those messages from their respective clusters.</p>
-<p>Without geo-replication, <strong>C1</strong> and <strong>C2</strong> consumers are not able to consume messages published by <strong>P3</strong> producer.</p>
-<h2><a class="anchor" aria-hidden="true" id="geo-replication-and-pulsar-properties"></a><a href="#geo-replication-and-pulsar-properties" 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 [...]
+        </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 geo-replication</h1></header><article><div><span><p><em>跨域复制</em> 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。</p>
+<h2><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 [...]
+<p>下图说明了脉冲星在不同集群之间的跨域复制过程</p>
+<p><img src="/docs/assets/geo-replication.png" alt="复制图表"></p>
+<p>在这个图中,每当<strong>P1</strong>、<strong>P2</strong>和<strong>P3</strong>的生产者分别在<strong>集群A</strong>、<strong>集群B</strong>和<strong>集群C</strong>向</strong>T1</strong> topic发送消息时,这些消息就会进行实时的跨集群复制 一旦复制,<strong>C1</strong>和<strong>C2</strong>的客户就可以从各自的集群中使用这些消息。</p>
+<p>没有进行跨域复制前,<strong>C1</strong>和<strong>C2</strong>消费者不能使用<strong>P3</strong>生产者发布的消息</p>
+<h2><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 [...]
 <p>Geo-replication must be enabled on a per-tenant basis in Pulsar. Geo-replication can be enabled between clusters only when a tenant has been created that allows access to both clusters.</p>
 <p>Although geo-replication must be enabled between two clusters, it's actually managed at the namespace level. You must complete the following tasks to enable geo-replication for a namespace:</p>
 <ul>
-<li><a href="#enabling-geo-replication-namespaces">Enable geo-replication namespaces</a></li>
-<li>Configure that namespace to replicate across two or more provisioned clusters</li>
+<li><a href="#enabling-geo-replication-namespaces">激活geo-replication名称空间</a></li>
+<li>配置该名称空间使其可以跨两个或多个集群复制</li>
 </ul>
-<p>Any message published on <em>any</em> topic in that namespace will be replicated to all clusters in the specified set.</p>
-<h2><a class="anchor" aria-hidden="true" id="local-persistence-and-forwarding"></a><a href="#local-persistence-and-forwarding" 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. [...]
-<p>When messages are produced on a Pulsar topic, they are first persisted in the local cluster, and then forwarded asynchronously to the remote clusters.</p>
-<p>In normal cases, when there are no connectivity issues, messages are replicated immediately, at the same time as they are dispatched to local consumers. Typically, end-to-end delivery latency is defined by the network <a href="https://en.wikipedia.org/wiki/Round-trip_delay_time">round-trip time</a> (RTT) between the remote regions.</p>
-<p>Applications can create producers and consumers in any of the clusters, even when the remote clusters are not reachable (like during a network partition).</p>
+<p>该名称空间中在<em>任何</em>topic上发布的任何消息都将复制到指定集合中的所有集群。</p>
+<h2><a class="anchor" aria-hidden="true" id="本地存储和转发"></a><a href="#本地存储和转发" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>当信息在脉冲星topic上生成时,它们首先会被保存在本地集群中,然后异步转发到远程集群。</p>
+<p>在正常情况下,当没有连接问题时,消息会立即复制,同时发送给本地消费者。 通常,端到端交付延迟由远程区域之间的网络往返时间<a href="https://en.wikipedia.org/wiki/Round-trip_delay_time"></a>(RTT)决定。</p>
+<p>应用程序可以在任何集群中创建生产者和消费者,即使无法访问远程集群(比如在网络分区期间)。</p>
 <blockquote>
-<h4><a class="anchor" aria-hidden="true" id="subscriptions-are-local-to-a-cluster"></a><a href="#subscriptions-are-local-to-a-cluster" 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 [...]
-<p>While producers and consumers can publish to and consume from any cluster in a Pulsar instance, subscriptions are local to the clusters in which they are created and cannot be transferred between clusters. If you do need to transfer a subscription, you’ll need to create a new subscription in the desired cluster.</p>
+<h4><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.6 [...]
+<p>虽然生产者和消费者可以在脉冲星实例中的任何集群中发布和消费,但是订阅是创建它们的集群的本地订阅,不能在集群之间传输。 如果确实需要传输订阅,则需要在所需的集群中创建新的订阅。</p>
 </blockquote>
-<p>In the aforementioned example, the <strong>T1</strong> topic is being replicated among three clusters, <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong>.</p>
-<p>All messages produced in any of the three clusters are delivered to all subscriptions in other clusters. In this case, <strong>C1</strong> and <strong>C2</strong> consumers will receive all messages published by <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong> producers. Ordering is still guaranteed on a per-producer basis.</p>
-<h2><a class="anchor" aria-hidden="true" id="configuring-replication"></a><a href="#configuring-replication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
-<p>As stated in <a href="#geo-replication-and-pulsar-properties">Geo-replication and Pulsar properties</a> section, geo-replication in Pulsar is managed at the <a href="/docs/zh-CN/2.3.2/reference-terminology#tenant">tenant</a> level.</p>
-<h3><a class="anchor" aria-hidden="true" id="granting-permissions-to-properties"></a><a href="#granting-permissions-to-properties" 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.5 [...]
+<p>在这个案例中,<strong>T1</strong>主题被复制到三个集群中,<strong>集群A</strong>、<strong>集群B</strong>和<strong>集群C</strong>。</p>
+<p>这三个集群中的任何一个集群生成的所有消息都交付给其他集群中的所有订阅。 在这种情况下,<strong>C1</strong>和<strong>C2</strong>的消费者将接收到由<strong>P1</strong>,<strong>P2</strong>,<strong>P3</strong>生产者发出的全部信息。 指令仍然在每个生产者的basis上有所保障。</p>
+<h2><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 [...]
+<p>正如在<a href="#geo-replication-and-pulsar-properties">Geo-replication和脉冲星属性</a>一节中所述,脉冲星中的Geo-replication是在<a href="/docs/zh-CN/2.3.2/reference-terminology#tenant">租户级别</a>进行管理的。</p>
+<h3><a class="anchor" aria-hidden="true" id="授予属性权限"></a><a href="#授予属性权限" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>To replicate to a cluster, the tenant needs permission to use that cluster. You can grant permission to the tenant when you create it or grant later.</p>
-<p>Specify all the intended clusters when creating a tenant:</p>
+<p>在创建租户时指定所有预期的集群</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin tenants create my-tenant \</span>
   --admin-roles my-admin-role \
   --allowed-clusters us-west,us-east,us-cent
 </code></pre>
-<p>To update permissions of an existing tenant, use <code>update</code> instead of <code>create</code>.</p>
-<h3><a class="anchor" aria-hidden="true" id="enabling-geo-replication-namespaces"></a><a href="#enabling-geo-replication-namespaces" 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 [...]
-<p>You can create a namespace with the following command sample.</p>
+<p>要更新现有租户的权限,请使用<code>update</code>而不是<code>create</code>。</p>
+<h3><a class="anchor" aria-hidden="true" id="激活geo-replication名称空间"></a><a href="#激活geo-replication名称空间" 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 [...]
+<p>你可以使用如下示例命令创建名称空间。</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin namespaces create my-tenant/my-namespace</span>
 </code></pre>
 <p>Initially, the namespace is not assigned to any cluster. You can assign the namespace to clusters using the <code>set-clusters</code> subcommand:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin namespaces <span class="hljs-built_in">set</span>-clusters my-tenant/my-namespace \</span>
   --clusters us-west,us-east,us-cent
 </code></pre>
-<p>The replication clusters for a namespace can be changed at any time, without disruption to ongoing traffic. Replication channels are immediately set up or stopped in all clusters as soon as the configuration changes.</p>
-<h3><a class="anchor" aria-hidden="true" id="using-topics-with-geo-replication"></a><a href="#using-topics-with-geo-replication" 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.5S1 [...]
-<p>Once you've created a geo-replication namespace, any topics that producers or consumers create within that namespace will be replicated across clusters. Typically, each application will use the <code>serviceUrl</code> for the local cluster.</p>
-<h4><a class="anchor" aria-hidden="true" id="selective-replication"></a><a href="#selective-replication" 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 [...]
-<p>By default, messages are replicated to all clusters configured for the namespace. You can restrict replication selectively by specifying a replication list for a message, and then that message will be replicated only to the subset in the replication list.</p>
-<p>The following is an example for the <a href="/docs/zh-CN/2.3.2/client-libraries-java">Java API</a>. Note the use of the <code>setReplicationClusters</code> method when constructing the <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Message">Message</a>
+<p>你可以随时更改名称空间的复制集群,而不会中断正在进行的通信。 一旦配置发生更改,复制通道将立即在所有集群中设置或停止。</p>
+<h3><a class="anchor" aria-hidden="true" id="使用带有topic的跨域复制"></a><a href="#使用带有topic的跨域复制" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p>一旦创建了跨域复制名称空间,生产者或消费者在该名称空间中创建的任何topic都将进行跨集群复制。 Typically, each application will use the <code>serviceUrl</code> for the local cluster.</p>
+<h4><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.09 [...]
+<p>By default, messages are replicated to all clusters configured for the namespace. 您可以通过为消息指定复制列表来选择性地限制复制,然后该消息将只复制到复制列表中的子集。</p>
+<p>下面是<a href="/docs/zh-CN/2.3.2/client-libraries-java">Java API</a>的一个示例。 Note the use of the <code>setReplicationClusters</code> method when constructing the <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Message">Message</a>
  object:</p>
 <pre><code class="hljs css language-java">List&lt;String&gt; restrictReplicationTo = Arrays.asList(
         <span class="hljs-string">"us-west"</span>,
@@ -137,23 +137,23 @@ producer.newMessage()
         .setReplicationClusters(restrictReplicationTo)
         .send();
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="topic-stats"></a><a href="#topic-stats" 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 [...]
-<p>Topic-specific statistics for geo-replication topics are available via the <a href="/docs/zh-CN/2.3.2/pulsar-admin"><code>pulsar-admin</code></a> tool and <a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
- API:</p>
+<h4><a class="anchor" aria-hidden="true" id="topic统计数据"></a><a href="#topic统计数据" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
+<p>特定主题的地跨域复制统计信息可以通过<a href="/docs/zh-CN/2.3.2/pulsar-admin"><code>pulse -admin</code></a>工具和<a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
+ API查看</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin persistent stats persistent://my-tenant/my-namespace/my-topic</span>
 </code></pre>
-<p>Each cluster reports its own local stats, including the incoming and outgoing replication rates and backlogs.</p>
-<h4><a class="anchor" aria-hidden="true" id="deleting-a-geo-replication-topic"></a><a href="#deleting-a-geo-replication-topic" 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. [...]
+<p>每个集群会生成自己的本地统计信息报告,包括传入和传出的复制率和队列容量。</p>
+<h4><a class="anchor" aria-hidden="true" id="删除跨域复制topic"></a><a href="#删除跨域复制topic" 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 [...]
 <p>Given that geo-replication topics exist in multiple regions, it's not possible to directly delete a geo-replication topic. Instead, you should rely on automatic topic garbage collection.</p>
 <p>In Pulsar, a topic is automatically deleted when it meets the following three conditions:</p>
 <ul>
 <li>when no producers or consumers are connected to it;</li>
 <li>there are no subscriptions to it;</li>
-<li>no more messages are kept for retention. For geo-replication topics, each region uses a fault-tolerant mechanism to decide when it's safe to delete the topic locally.</li>
+<li>no more messages are kept for retention. 对于跨域复制topic,每个区域都使用容错机制来决定何时在本地安全删除该主题。</li>
 </ul>
-<p>You can explicitly disable topic garbage collection by setting <code>brokerDeleteInactiveTopicsEnabled</code> to <code>false</code> in your <a href="/docs/zh-CN/2.3.2/reference-configuration#broker">broker configuration</a>.</p>
-<p>To delete a geo-replication topic, close all producers and consumers on the topic, and delete all of its local subscriptions in every replication cluster. When Pulsar determines that no valid subscription for the topic remains across the system, it will garbage collect the topic.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.2/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.2/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a hr [...]
+<p>可以通过在<a href="/docs/zh-CN/2.3.2/reference-configuration#broker">代理配置</a>中设置<code>brokerDeleteInactiveTopicsEnabled</code>为<code>false</code>来显式禁用主题垃圾收集。</p>
+<p>要删除跨域复制主题,请关闭该主题上的所有生产者和消费者,并删除每个复制集群中的所有本地订阅。 When Pulsar determines that no valid subscription for the topic remains across the system, it will garbage collect the topic.</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.2/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.2/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#跨域复制以及脉冲星特性 [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.3.2/administration-zk-bk.html b/content/docs/zh-CN/2.3.2/administration-zk-bk.html
index 1ed754b..6754c40 100644
--- a/content/docs/zh-CN/2.3.2/administration-zk-bk.html
+++ b/content/docs/zh-CN/2.3.2/administration-zk-bk.html
@@ -288,7 +288,7 @@ admin.namespaces().setPersistence(namespace, policies);
 <p>This diagram illustrates the role of ZooKeeper and BookKeeper in a Pulsar cluster:</p>
 <p><img src="/docs/assets/pulsar-system-architecture.png" alt="ZooKeeper and BookKeeper"></p>
 <p>Each Pulsar cluster consists of one or more message brokers. Each broker relies on an ensemble of bookies.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.2/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.2/administration-geo"><span>Geo-replication</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-local-zookeep [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.2/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.2/administration-geo"><span>跨域复制</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-local-zookeeper">Deployi [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.3.2/administration-zk-bk/index.html b/content/docs/zh-CN/2.3.2/administration-zk-bk/index.html
index 1ed754b..6754c40 100644
--- a/content/docs/zh-CN/2.3.2/administration-zk-bk/index.html
+++ b/content/docs/zh-CN/2.3.2/administration-zk-bk/index.html
@@ -288,7 +288,7 @@ admin.namespaces().setPersistence(namespace, policies);
 <p>This diagram illustrates the role of ZooKeeper and BookKeeper in a Pulsar cluster:</p>
 <p><img src="/docs/assets/pulsar-system-architecture.png" alt="ZooKeeper and BookKeeper"></p>
 <p>Each Pulsar cluster consists of one or more message brokers. Each broker relies on an ensemble of bookies.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.2/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.2/administration-geo"><span>Geo-replication</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-local-zookeep [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.2/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.2/administration-geo"><span>跨域复制</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-local-zookeeper">Deployi [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.3.2/cookbooks-deduplication.html b/content/docs/zh-CN/2.3.2/cookbooks-deduplication.html
index fedb94e..4af3142 100644
--- a/content/docs/zh-CN/2.3.2/cookbooks-deduplication.html
+++ b/content/docs/zh-CN/2.3.2/cookbooks-deduplication.html
@@ -79,7 +79,7 @@
 <blockquote>
 <p>For a more thorough theoretical explanation of message deduplication, see the <a href="/docs/zh-CN/2.3.2/concepts-messaging#message-deduplication">Concepts and Architecture</a> document.</p>
 </blockquote>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" 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. [...]
+<h2><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 [...]
 <p>Message deduplication can be enabled and disabled on a per-namespace basis. By default, it is <em>disabled</em> on all namespaces and can enabled in the following ways:</p>
 <ul>
 <li>Using the <a href="#enabling"><code>pulsar-admin namespaces</code></a> interface</li>
@@ -163,7 +163,7 @@ Producer producer;
 
 Result result = client.createProducer(topic, producerConfig, producer);
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.2/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.2/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a href="#configuration-for-message-dedup [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.2/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.2/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#configuration-for-message-deduplication">Config [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.3.2/cookbooks-deduplication/index.html b/content/docs/zh-CN/2.3.2/cookbooks-deduplication/index.html
index fedb94e..4af3142 100644
--- a/content/docs/zh-CN/2.3.2/cookbooks-deduplication/index.html
+++ b/content/docs/zh-CN/2.3.2/cookbooks-deduplication/index.html
@@ -79,7 +79,7 @@
 <blockquote>
 <p>For a more thorough theoretical explanation of message deduplication, see the <a href="/docs/zh-CN/2.3.2/concepts-messaging#message-deduplication">Concepts and Architecture</a> document.</p>
 </blockquote>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" 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. [...]
+<h2><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 [...]
 <p>Message deduplication can be enabled and disabled on a per-namespace basis. By default, it is <em>disabled</em> on all namespaces and can enabled in the following ways:</p>
 <ul>
 <li>Using the <a href="#enabling"><code>pulsar-admin namespaces</code></a> interface</li>
@@ -163,7 +163,7 @@ Producer producer;
 
 Result result = client.createProducer(topic, producerConfig, producer);
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.2/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.2/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a href="#configuration-for-message-dedup [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.3.2/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/2.3.2/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#configuration-for-message-deduplication">Config [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/administration-dashboard.html b/content/docs/zh-CN/administration-dashboard.html
index 2e7587c..56e98b0 100644
--- a/content/docs/zh-CN/administration-dashboard.html
+++ b/content/docs/zh-CN/administration-dashboard.html
@@ -111,7 +111,7 @@
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="known-issues"></a><a href="#known-issues" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <p>Only Pulsar Token <a href="/docs/zh-CN/security-overview#authentication-providers">authentication</a> is supported as of now.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/administration-geo"><span class="arrow-prev">← </span><span>Geo-replication</span></a><a class="docs-next button" href="/docs/zh-CN/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known-issues">Known issues</a [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/administration-geo"><span class="arrow-prev">← </span><span>跨域复制</span></a><a class="docs-next button" href="/docs/zh-CN/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known-issues">Known issues</a></li></ul> [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/administration-dashboard/index.html b/content/docs/zh-CN/administration-dashboard/index.html
index 2e7587c..56e98b0 100644
--- a/content/docs/zh-CN/administration-dashboard/index.html
+++ b/content/docs/zh-CN/administration-dashboard/index.html
@@ -111,7 +111,7 @@
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="known-issues"></a><a href="#known-issues" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <p>Only Pulsar Token <a href="/docs/zh-CN/security-overview#authentication-providers">authentication</a> is supported as of now.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/administration-geo"><span class="arrow-prev">← </span><span>Geo-replication</span></a><a class="docs-next button" href="/docs/zh-CN/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known-issues">Known issues</a [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/administration-geo"><span class="arrow-prev">← </span><span>跨域复制</span></a><a class="docs-next button" href="/docs/zh-CN/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known-issues">Known issues</a></li></ul> [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/administration-geo.html b/content/docs/zh-CN/administration-geo.html
index 94c3e20..0116182 100644
--- a/content/docs/zh-CN/administration-geo.html
+++ b/content/docs/zh-CN/administration-geo.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*Geo-replication* is the replication of persistently stored message data across multiple clusters of a Pulsar instance."/><meta name="docsearch:version" content="2.4.0"/><meta name="docsearch [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*跨域复制* 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。"/><meta name="docsearch:version" content="2.4.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar geo-replication [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,54 +74,54 @@
                 };
               }
             });
-        </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 geo-replication</h1></header><article><div><span><p><em>Geo-replication</em> is the replication of persistently stored message data across multiple clusters of a Pulsar instance.</p>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
-<p>The diagram below illustrates the process of geo-replication across Pulsar clusters:</p>
-<p><img src="/docs/assets/geo-replication.png" alt="Replication Diagram"></p>
-<p>In this diagram, whenever <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong> producers publish messages to the <strong>T1</strong> topic on <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong> clusters respectively, those messages are instantly replicated across clusters. Once replicated, <strong>C1</strong> and <strong>C2</strong> consumers can consume those messages from their respective clusters.</p>
-<p>Without geo-replication, <strong>C1</strong> and <strong>C2</strong> consumers are not able to consume messages published by <strong>P3</strong> producer.</p>
-<h2><a class="anchor" aria-hidden="true" id="geo-replication-and-pulsar-properties"></a><a href="#geo-replication-and-pulsar-properties" 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 [...]
+        </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 geo-replication</h1></header><article><div><span><p><em>跨域复制</em> 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。</p>
+<h2><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 [...]
+<p>下图说明了脉冲星在不同集群之间的跨域复制过程</p>
+<p><img src="/docs/assets/geo-replication.png" alt="复制图表"></p>
+<p>在这个图中,每当<strong>P1</strong>、<strong>P2</strong>和<strong>P3</strong>的生产者分别在<strong>集群A</strong>、<strong>集群B</strong>和<strong>集群C</strong>向</strong>T1</strong> topic发送消息时,这些消息就会进行实时的跨集群复制 一旦复制,<strong>C1</strong>和<strong>C2</strong>的客户就可以从各自的集群中使用这些消息。</p>
+<p>没有进行跨域复制前,<strong>C1</strong>和<strong>C2</strong>消费者不能使用<strong>P3</strong>生产者发布的消息</p>
+<h2><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 [...]
 <p>Geo-replication must be enabled on a per-tenant basis in Pulsar. Geo-replication can be enabled between clusters only when a tenant has been created that allows access to both clusters.</p>
 <p>Although geo-replication must be enabled between two clusters, it's actually managed at the namespace level. You must complete the following tasks to enable geo-replication for a namespace:</p>
 <ul>
-<li><a href="#enabling-geo-replication-namespaces">Enable geo-replication namespaces</a></li>
-<li>Configure that namespace to replicate across two or more provisioned clusters</li>
+<li><a href="#enabling-geo-replication-namespaces">激活geo-replication名称空间</a></li>
+<li>配置该名称空间使其可以跨两个或多个集群复制</li>
 </ul>
-<p>Any message published on <em>any</em> topic in that namespace will be replicated to all clusters in the specified set.</p>
-<h2><a class="anchor" aria-hidden="true" id="local-persistence-and-forwarding"></a><a href="#local-persistence-and-forwarding" 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. [...]
-<p>When messages are produced on a Pulsar topic, they are first persisted in the local cluster, and then forwarded asynchronously to the remote clusters.</p>
-<p>In normal cases, when there are no connectivity issues, messages are replicated immediately, at the same time as they are dispatched to local consumers. Typically, end-to-end delivery latency is defined by the network <a href="https://en.wikipedia.org/wiki/Round-trip_delay_time">round-trip time</a> (RTT) between the remote regions.</p>
-<p>Applications can create producers and consumers in any of the clusters, even when the remote clusters are not reachable (like during a network partition).</p>
+<p>该名称空间中在<em>任何</em>topic上发布的任何消息都将复制到指定集合中的所有集群。</p>
+<h2><a class="anchor" aria-hidden="true" id="本地存储和转发"></a><a href="#本地存储和转发" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>当信息在脉冲星topic上生成时,它们首先会被保存在本地集群中,然后异步转发到远程集群。</p>
+<p>在正常情况下,当没有连接问题时,消息会立即复制,同时发送给本地消费者。 通常,端到端交付延迟由远程区域之间的网络往返时间<a href="https://en.wikipedia.org/wiki/Round-trip_delay_time"></a>(RTT)决定。</p>
+<p>应用程序可以在任何集群中创建生产者和消费者,即使无法访问远程集群(比如在网络分区期间)。</p>
 <blockquote>
-<h4><a class="anchor" aria-hidden="true" id="subscriptions-are-local-to-a-cluster"></a><a href="#subscriptions-are-local-to-a-cluster" 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 [...]
-<p>While producers and consumers can publish to and consume from any cluster in a Pulsar instance, subscriptions are local to the clusters in which they are created and cannot be transferred between clusters. If you do need to transfer a subscription, you’ll need to create a new subscription in the desired cluster.</p>
+<h4><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.6 [...]
+<p>虽然生产者和消费者可以在脉冲星实例中的任何集群中发布和消费,但是订阅是创建它们的集群的本地订阅,不能在集群之间传输。 如果确实需要传输订阅,则需要在所需的集群中创建新的订阅。</p>
 </blockquote>
-<p>In the aforementioned example, the <strong>T1</strong> topic is being replicated among three clusters, <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong>.</p>
-<p>All messages produced in any of the three clusters are delivered to all subscriptions in other clusters. In this case, <strong>C1</strong> and <strong>C2</strong> consumers will receive all messages published by <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong> producers. Ordering is still guaranteed on a per-producer basis.</p>
-<h2><a class="anchor" aria-hidden="true" id="configuring-replication"></a><a href="#configuring-replication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
-<p>As stated in <a href="#geo-replication-and-pulsar-properties">Geo-replication and Pulsar properties</a> section, geo-replication in Pulsar is managed at the <a href="/docs/zh-CN/reference-terminology#tenant">tenant</a> level.</p>
-<h3><a class="anchor" aria-hidden="true" id="granting-permissions-to-properties"></a><a href="#granting-permissions-to-properties" 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.5 [...]
+<p>在这个案例中,<strong>T1</strong>主题被复制到三个集群中,<strong>集群A</strong>、<strong>集群B</strong>和<strong>集群C</strong>。</p>
+<p>这三个集群中的任何一个集群生成的所有消息都交付给其他集群中的所有订阅。 在这种情况下,<strong>C1</strong>和<strong>C2</strong>的消费者将接收到由<strong>P1</strong>,<strong>P2</strong>,<strong>P3</strong>生产者发出的全部信息。 指令仍然在每个生产者的basis上有所保障。</p>
+<h2><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 [...]
+<p>正如在<a href="#geo-replication-and-pulsar-properties">Geo-replication和脉冲星属性</a>一节中所述,脉冲星中的Geo-replication是在<a href="/docs/zh-CN/reference-terminology#tenant">租户级别</a>进行管理的。</p>
+<h3><a class="anchor" aria-hidden="true" id="授予属性权限"></a><a href="#授予属性权限" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>To replicate to a cluster, the tenant needs permission to use that cluster. You can grant permission to the tenant when you create it or grant later.</p>
-<p>Specify all the intended clusters when creating a tenant:</p>
+<p>在创建租户时指定所有预期的集群</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin tenants create my-tenant \</span>
   --admin-roles my-admin-role \
   --allowed-clusters us-west,us-east,us-cent
 </code></pre>
-<p>To update permissions of an existing tenant, use <code>update</code> instead of <code>create</code>.</p>
-<h3><a class="anchor" aria-hidden="true" id="enabling-geo-replication-namespaces"></a><a href="#enabling-geo-replication-namespaces" 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 [...]
-<p>You can create a namespace with the following command sample.</p>
+<p>要更新现有租户的权限,请使用<code>update</code>而不是<code>create</code>。</p>
+<h3><a class="anchor" aria-hidden="true" id="激活geo-replication名称空间"></a><a href="#激活geo-replication名称空间" 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 [...]
+<p>你可以使用如下示例命令创建名称空间。</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin namespaces create my-tenant/my-namespace</span>
 </code></pre>
 <p>Initially, the namespace is not assigned to any cluster. You can assign the namespace to clusters using the <code>set-clusters</code> subcommand:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin namespaces <span class="hljs-built_in">set</span>-clusters my-tenant/my-namespace \</span>
   --clusters us-west,us-east,us-cent
 </code></pre>
-<p>The replication clusters for a namespace can be changed at any time, without disruption to ongoing traffic. Replication channels are immediately set up or stopped in all clusters as soon as the configuration changes.</p>
-<h3><a class="anchor" aria-hidden="true" id="using-topics-with-geo-replication"></a><a href="#using-topics-with-geo-replication" 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.5S1 [...]
-<p>Once you've created a geo-replication namespace, any topics that producers or consumers create within that namespace will be replicated across clusters. Typically, each application will use the <code>serviceUrl</code> for the local cluster.</p>
-<h4><a class="anchor" aria-hidden="true" id="selective-replication"></a><a href="#selective-replication" 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 [...]
-<p>By default, messages are replicated to all clusters configured for the namespace. You can restrict replication selectively by specifying a replication list for a message, and then that message will be replicated only to the subset in the replication list.</p>
-<p>The following is an example for the <a href="/docs/zh-CN/client-libraries-java">Java API</a>. Note the use of the <code>setReplicationClusters</code> method when constructing the <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Message">Message</a>
+<p>你可以随时更改名称空间的复制集群,而不会中断正在进行的通信。 一旦配置发生更改,复制通道将立即在所有集群中设置或停止。</p>
+<h3><a class="anchor" aria-hidden="true" id="使用带有topic的跨域复制"></a><a href="#使用带有topic的跨域复制" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p>一旦创建了跨域复制名称空间,生产者或消费者在该名称空间中创建的任何topic都将进行跨集群复制。 Typically, each application will use the <code>serviceUrl</code> for the local cluster.</p>
+<h4><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.09 [...]
+<p>By default, messages are replicated to all clusters configured for the namespace. 您可以通过为消息指定复制列表来选择性地限制复制,然后该消息将只复制到复制列表中的子集。</p>
+<p>下面是<a href="/docs/zh-CN/client-libraries-java">Java API</a>的一个示例。 Note the use of the <code>setReplicationClusters</code> method when constructing the <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Message">Message</a>
  object:</p>
 <pre><code class="hljs css language-java">List&lt;String&gt; restrictReplicationTo = Arrays.asList(
         <span class="hljs-string">"us-west"</span>,
@@ -137,23 +137,23 @@ producer.newMessage()
         .setReplicationClusters(restrictReplicationTo)
         .send();
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="topic-stats"></a><a href="#topic-stats" 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 [...]
-<p>Topic-specific statistics for geo-replication topics are available via the <a href="/docs/zh-CN/pulsar-admin"><code>pulsar-admin</code></a> tool and <a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
- API:</p>
+<h4><a class="anchor" aria-hidden="true" id="topic统计数据"></a><a href="#topic统计数据" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
+<p>特定主题的地跨域复制统计信息可以通过<a href="/docs/zh-CN/pulsar-admin"><code>pulse -admin</code></a>工具和<a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
+ API查看</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin persistent stats persistent://my-tenant/my-namespace/my-topic</span>
 </code></pre>
-<p>Each cluster reports its own local stats, including the incoming and outgoing replication rates and backlogs.</p>
-<h4><a class="anchor" aria-hidden="true" id="deleting-a-geo-replication-topic"></a><a href="#deleting-a-geo-replication-topic" 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. [...]
+<p>每个集群会生成自己的本地统计信息报告,包括传入和传出的复制率和队列容量。</p>
+<h4><a class="anchor" aria-hidden="true" id="删除跨域复制topic"></a><a href="#删除跨域复制topic" 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 [...]
 <p>Given that geo-replication topics exist in multiple regions, it's not possible to directly delete a geo-replication topic. Instead, you should rely on automatic topic garbage collection.</p>
 <p>In Pulsar, a topic is automatically deleted when it meets the following three conditions:</p>
 <ul>
 <li>when no producers or consumers are connected to it;</li>
 <li>there are no subscriptions to it;</li>
-<li>no more messages are kept for retention. For geo-replication topics, each region uses a fault-tolerant mechanism to decide when it's safe to delete the topic locally.</li>
+<li>no more messages are kept for retention. 对于跨域复制topic,每个区域都使用容错机制来决定何时在本地安全删除该主题。</li>
 </ul>
-<p>You can explicitly disable topic garbage collection by setting <code>brokerDeleteInactiveTopicsEnabled</code> to <code>false</code> in your <a href="/docs/zh-CN/reference-configuration#broker">broker configuration</a>.</p>
-<p>To delete a geo-replication topic, close all producers and consumers on the topic, and delete all of its local subscriptions in every replication cluster. When Pulsar determines that no valid subscription for the topic remains across the system, it will garbage collect the topic.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a href="#geo-rep [...]
+<p>可以通过在<a href="/docs/zh-CN/reference-configuration#broker">代理配置</a>中设置<code>brokerDeleteInactiveTopicsEnabled</code>为<code>false</code>来显式禁用主题垃圾收集。</p>
+<p>要删除跨域复制主题,请关闭该主题上的所有生产者和消费者,并删除每个复制集群中的所有本地订阅。 When Pulsar determines that no valid subscription for the topic remains across the system, it will garbage collect the topic.</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#跨域复制以及脉冲星特性">跨域复制以及脉冲星特 [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/administration-geo/index.html b/content/docs/zh-CN/administration-geo/index.html
index 94c3e20..0116182 100644
--- a/content/docs/zh-CN/administration-geo/index.html
+++ b/content/docs/zh-CN/administration-geo/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*Geo-replication* is the replication of persistently stored message data across multiple clusters of a Pulsar instance."/><meta name="docsearch:version" content="2.4.0"/><meta name="docsearch [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*跨域复制* 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。"/><meta name="docsearch:version" content="2.4.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Pulsar geo-replication [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,54 +74,54 @@
                 };
               }
             });
-        </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 geo-replication</h1></header><article><div><span><p><em>Geo-replication</em> is the replication of persistently stored message data across multiple clusters of a Pulsar instance.</p>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
-<p>The diagram below illustrates the process of geo-replication across Pulsar clusters:</p>
-<p><img src="/docs/assets/geo-replication.png" alt="Replication Diagram"></p>
-<p>In this diagram, whenever <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong> producers publish messages to the <strong>T1</strong> topic on <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong> clusters respectively, those messages are instantly replicated across clusters. Once replicated, <strong>C1</strong> and <strong>C2</strong> consumers can consume those messages from their respective clusters.</p>
-<p>Without geo-replication, <strong>C1</strong> and <strong>C2</strong> consumers are not able to consume messages published by <strong>P3</strong> producer.</p>
-<h2><a class="anchor" aria-hidden="true" id="geo-replication-and-pulsar-properties"></a><a href="#geo-replication-and-pulsar-properties" 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 [...]
+        </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 geo-replication</h1></header><article><div><span><p><em>跨域复制</em> 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。</p>
+<h2><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 [...]
+<p>下图说明了脉冲星在不同集群之间的跨域复制过程</p>
+<p><img src="/docs/assets/geo-replication.png" alt="复制图表"></p>
+<p>在这个图中,每当<strong>P1</strong>、<strong>P2</strong>和<strong>P3</strong>的生产者分别在<strong>集群A</strong>、<strong>集群B</strong>和<strong>集群C</strong>向</strong>T1</strong> topic发送消息时,这些消息就会进行实时的跨集群复制 一旦复制,<strong>C1</strong>和<strong>C2</strong>的客户就可以从各自的集群中使用这些消息。</p>
+<p>没有进行跨域复制前,<strong>C1</strong>和<strong>C2</strong>消费者不能使用<strong>P3</strong>生产者发布的消息</p>
+<h2><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 [...]
 <p>Geo-replication must be enabled on a per-tenant basis in Pulsar. Geo-replication can be enabled between clusters only when a tenant has been created that allows access to both clusters.</p>
 <p>Although geo-replication must be enabled between two clusters, it's actually managed at the namespace level. You must complete the following tasks to enable geo-replication for a namespace:</p>
 <ul>
-<li><a href="#enabling-geo-replication-namespaces">Enable geo-replication namespaces</a></li>
-<li>Configure that namespace to replicate across two or more provisioned clusters</li>
+<li><a href="#enabling-geo-replication-namespaces">激活geo-replication名称空间</a></li>
+<li>配置该名称空间使其可以跨两个或多个集群复制</li>
 </ul>
-<p>Any message published on <em>any</em> topic in that namespace will be replicated to all clusters in the specified set.</p>
-<h2><a class="anchor" aria-hidden="true" id="local-persistence-and-forwarding"></a><a href="#local-persistence-and-forwarding" 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. [...]
-<p>When messages are produced on a Pulsar topic, they are first persisted in the local cluster, and then forwarded asynchronously to the remote clusters.</p>
-<p>In normal cases, when there are no connectivity issues, messages are replicated immediately, at the same time as they are dispatched to local consumers. Typically, end-to-end delivery latency is defined by the network <a href="https://en.wikipedia.org/wiki/Round-trip_delay_time">round-trip time</a> (RTT) between the remote regions.</p>
-<p>Applications can create producers and consumers in any of the clusters, even when the remote clusters are not reachable (like during a network partition).</p>
+<p>该名称空间中在<em>任何</em>topic上发布的任何消息都将复制到指定集合中的所有集群。</p>
+<h2><a class="anchor" aria-hidden="true" id="本地存储和转发"></a><a href="#本地存储和转发" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>当信息在脉冲星topic上生成时,它们首先会被保存在本地集群中,然后异步转发到远程集群。</p>
+<p>在正常情况下,当没有连接问题时,消息会立即复制,同时发送给本地消费者。 通常,端到端交付延迟由远程区域之间的网络往返时间<a href="https://en.wikipedia.org/wiki/Round-trip_delay_time"></a>(RTT)决定。</p>
+<p>应用程序可以在任何集群中创建生产者和消费者,即使无法访问远程集群(比如在网络分区期间)。</p>
 <blockquote>
-<h4><a class="anchor" aria-hidden="true" id="subscriptions-are-local-to-a-cluster"></a><a href="#subscriptions-are-local-to-a-cluster" 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 [...]
-<p>While producers and consumers can publish to and consume from any cluster in a Pulsar instance, subscriptions are local to the clusters in which they are created and cannot be transferred between clusters. If you do need to transfer a subscription, you’ll need to create a new subscription in the desired cluster.</p>
+<h4><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.6 [...]
+<p>虽然生产者和消费者可以在脉冲星实例中的任何集群中发布和消费,但是订阅是创建它们的集群的本地订阅,不能在集群之间传输。 如果确实需要传输订阅,则需要在所需的集群中创建新的订阅。</p>
 </blockquote>
-<p>In the aforementioned example, the <strong>T1</strong> topic is being replicated among three clusters, <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong>.</p>
-<p>All messages produced in any of the three clusters are delivered to all subscriptions in other clusters. In this case, <strong>C1</strong> and <strong>C2</strong> consumers will receive all messages published by <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong> producers. Ordering is still guaranteed on a per-producer basis.</p>
-<h2><a class="anchor" aria-hidden="true" id="configuring-replication"></a><a href="#configuring-replication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
-<p>As stated in <a href="#geo-replication-and-pulsar-properties">Geo-replication and Pulsar properties</a> section, geo-replication in Pulsar is managed at the <a href="/docs/zh-CN/reference-terminology#tenant">tenant</a> level.</p>
-<h3><a class="anchor" aria-hidden="true" id="granting-permissions-to-properties"></a><a href="#granting-permissions-to-properties" 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.5 [...]
+<p>在这个案例中,<strong>T1</strong>主题被复制到三个集群中,<strong>集群A</strong>、<strong>集群B</strong>和<strong>集群C</strong>。</p>
+<p>这三个集群中的任何一个集群生成的所有消息都交付给其他集群中的所有订阅。 在这种情况下,<strong>C1</strong>和<strong>C2</strong>的消费者将接收到由<strong>P1</strong>,<strong>P2</strong>,<strong>P3</strong>生产者发出的全部信息。 指令仍然在每个生产者的basis上有所保障。</p>
+<h2><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 [...]
+<p>正如在<a href="#geo-replication-and-pulsar-properties">Geo-replication和脉冲星属性</a>一节中所述,脉冲星中的Geo-replication是在<a href="/docs/zh-CN/reference-terminology#tenant">租户级别</a>进行管理的。</p>
+<h3><a class="anchor" aria-hidden="true" id="授予属性权限"></a><a href="#授予属性权限" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <p>To replicate to a cluster, the tenant needs permission to use that cluster. You can grant permission to the tenant when you create it or grant later.</p>
-<p>Specify all the intended clusters when creating a tenant:</p>
+<p>在创建租户时指定所有预期的集群</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin tenants create my-tenant \</span>
   --admin-roles my-admin-role \
   --allowed-clusters us-west,us-east,us-cent
 </code></pre>
-<p>To update permissions of an existing tenant, use <code>update</code> instead of <code>create</code>.</p>
-<h3><a class="anchor" aria-hidden="true" id="enabling-geo-replication-namespaces"></a><a href="#enabling-geo-replication-namespaces" 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 [...]
-<p>You can create a namespace with the following command sample.</p>
+<p>要更新现有租户的权限,请使用<code>update</code>而不是<code>create</code>。</p>
+<h3><a class="anchor" aria-hidden="true" id="激活geo-replication名称空间"></a><a href="#激活geo-replication名称空间" 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 [...]
+<p>你可以使用如下示例命令创建名称空间。</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin namespaces create my-tenant/my-namespace</span>
 </code></pre>
 <p>Initially, the namespace is not assigned to any cluster. You can assign the namespace to clusters using the <code>set-clusters</code> subcommand:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin namespaces <span class="hljs-built_in">set</span>-clusters my-tenant/my-namespace \</span>
   --clusters us-west,us-east,us-cent
 </code></pre>
-<p>The replication clusters for a namespace can be changed at any time, without disruption to ongoing traffic. Replication channels are immediately set up or stopped in all clusters as soon as the configuration changes.</p>
-<h3><a class="anchor" aria-hidden="true" id="using-topics-with-geo-replication"></a><a href="#using-topics-with-geo-replication" 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.5S1 [...]
-<p>Once you've created a geo-replication namespace, any topics that producers or consumers create within that namespace will be replicated across clusters. Typically, each application will use the <code>serviceUrl</code> for the local cluster.</p>
-<h4><a class="anchor" aria-hidden="true" id="selective-replication"></a><a href="#selective-replication" 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 [...]
-<p>By default, messages are replicated to all clusters configured for the namespace. You can restrict replication selectively by specifying a replication list for a message, and then that message will be replicated only to the subset in the replication list.</p>
-<p>The following is an example for the <a href="/docs/zh-CN/client-libraries-java">Java API</a>. Note the use of the <code>setReplicationClusters</code> method when constructing the <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Message">Message</a>
+<p>你可以随时更改名称空间的复制集群,而不会中断正在进行的通信。 一旦配置发生更改,复制通道将立即在所有集群中设置或停止。</p>
+<h3><a class="anchor" aria-hidden="true" id="使用带有topic的跨域复制"></a><a href="#使用带有topic的跨域复制" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p>一旦创建了跨域复制名称空间,生产者或消费者在该名称空间中创建的任何topic都将进行跨集群复制。 Typically, each application will use the <code>serviceUrl</code> for the local cluster.</p>
+<h4><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.09 [...]
+<p>By default, messages are replicated to all clusters configured for the namespace. 您可以通过为消息指定复制列表来选择性地限制复制,然后该消息将只复制到复制列表中的子集。</p>
+<p>下面是<a href="/docs/zh-CN/client-libraries-java">Java API</a>的一个示例。 Note the use of the <code>setReplicationClusters</code> method when constructing the <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Message">Message</a>
  object:</p>
 <pre><code class="hljs css language-java">List&lt;String&gt; restrictReplicationTo = Arrays.asList(
         <span class="hljs-string">"us-west"</span>,
@@ -137,23 +137,23 @@ producer.newMessage()
         .setReplicationClusters(restrictReplicationTo)
         .send();
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="topic-stats"></a><a href="#topic-stats" 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 [...]
-<p>Topic-specific statistics for geo-replication topics are available via the <a href="/docs/zh-CN/pulsar-admin"><code>pulsar-admin</code></a> tool and <a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
- API:</p>
+<h4><a class="anchor" aria-hidden="true" id="topic统计数据"></a><a href="#topic统计数据" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
+<p>特定主题的地跨域复制统计信息可以通过<a href="/docs/zh-CN/pulsar-admin"><code>pulse -admin</code></a>工具和<a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
+ API查看</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin persistent stats persistent://my-tenant/my-namespace/my-topic</span>
 </code></pre>
-<p>Each cluster reports its own local stats, including the incoming and outgoing replication rates and backlogs.</p>
-<h4><a class="anchor" aria-hidden="true" id="deleting-a-geo-replication-topic"></a><a href="#deleting-a-geo-replication-topic" 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. [...]
+<p>每个集群会生成自己的本地统计信息报告,包括传入和传出的复制率和队列容量。</p>
+<h4><a class="anchor" aria-hidden="true" id="删除跨域复制topic"></a><a href="#删除跨域复制topic" 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 [...]
 <p>Given that geo-replication topics exist in multiple regions, it's not possible to directly delete a geo-replication topic. Instead, you should rely on automatic topic garbage collection.</p>
 <p>In Pulsar, a topic is automatically deleted when it meets the following three conditions:</p>
 <ul>
 <li>when no producers or consumers are connected to it;</li>
 <li>there are no subscriptions to it;</li>
-<li>no more messages are kept for retention. For geo-replication topics, each region uses a fault-tolerant mechanism to decide when it's safe to delete the topic locally.</li>
+<li>no more messages are kept for retention. 对于跨域复制topic,每个区域都使用容错机制来决定何时在本地安全删除该主题。</li>
 </ul>
-<p>You can explicitly disable topic garbage collection by setting <code>brokerDeleteInactiveTopicsEnabled</code> to <code>false</code> in your <a href="/docs/zh-CN/reference-configuration#broker">broker configuration</a>.</p>
-<p>To delete a geo-replication topic, close all producers and consumers on the topic, and delete all of its local subscriptions in every replication cluster. When Pulsar determines that no valid subscription for the topic remains across the system, it will garbage collect the topic.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a href="#geo-rep [...]
+<p>可以通过在<a href="/docs/zh-CN/reference-configuration#broker">代理配置</a>中设置<code>brokerDeleteInactiveTopicsEnabled</code>为<code>false</code>来显式禁用主题垃圾收集。</p>
+<p>要删除跨域复制主题,请关闭该主题上的所有生产者和消费者,并删除每个复制集群中的所有本地订阅。 When Pulsar determines that no valid subscription for the topic remains across the system, it will garbage collect the topic.</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#跨域复制以及脉冲星特性">跨域复制以及脉冲星特 [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/administration-zk-bk.html b/content/docs/zh-CN/administration-zk-bk.html
index d7e537f..5fe4b3b 100644
--- a/content/docs/zh-CN/administration-zk-bk.html
+++ b/content/docs/zh-CN/administration-zk-bk.html
@@ -291,7 +291,7 @@ admin.namespaces().setPersistence(namespace, policies);
 <p>This diagram illustrates the role of ZooKeeper and BookKeeper in a Pulsar cluster:</p>
 <p><img src="/docs/assets/pulsar-system-architecture.png" alt="ZooKeeper and BookKeeper"></p>
 <p>Each Pulsar cluster consists of one or more message brokers. Each broker relies on an ensemble of bookies.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/administration-geo"><span>Geo-replication</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-local-zookeeper">Deployin [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/administration-geo"><span>跨域复制</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-local-zookeeper">Deploying local Zoo [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/administration-zk-bk/index.html b/content/docs/zh-CN/administration-zk-bk/index.html
index d7e537f..5fe4b3b 100644
--- a/content/docs/zh-CN/administration-zk-bk/index.html
+++ b/content/docs/zh-CN/administration-zk-bk/index.html
@@ -291,7 +291,7 @@ admin.namespaces().setPersistence(namespace, policies);
 <p>This diagram illustrates the role of ZooKeeper and BookKeeper in a Pulsar cluster:</p>
 <p><img src="/docs/assets/pulsar-system-architecture.png" alt="ZooKeeper and BookKeeper"></p>
 <p>Each Pulsar cluster consists of one or more message brokers. Each broker relies on an ensemble of bookies.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/administration-geo"><span>Geo-replication</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-local-zookeeper">Deployin [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/administration-geo"><span>跨域复制</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-local-zookeeper">Deploying local Zoo [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/cookbooks-deduplication.html b/content/docs/zh-CN/cookbooks-deduplication.html
index f577d3d..7cb6621 100644
--- a/content/docs/zh-CN/cookbooks-deduplication.html
+++ b/content/docs/zh-CN/cookbooks-deduplication.html
@@ -79,7 +79,7 @@
 <blockquote>
 <p>For a more thorough theoretical explanation of message deduplication, see the <a href="/docs/zh-CN/concepts-messaging#message-deduplication">Concepts and Architecture</a> document.</p>
 </blockquote>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" 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. [...]
+<h2><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 [...]
 <p>Message deduplication can be enabled and disabled on a per-namespace basis. By default, it is <em>disabled</em> on all namespaces and can enabled in the following ways:</p>
 <ul>
 <li>Using the <a href="#enabling"><code>pulsar-admin namespaces</code></a> interface</li>
@@ -163,7 +163,7 @@ Producer producer;
 
 Result result = client.createProducer(topic, producerConfig, producer);
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a href="#configuration-for-message-deduplication">Co [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#configuration-for-message-deduplication">Configuration for  [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/cookbooks-deduplication/index.html b/content/docs/zh-CN/cookbooks-deduplication/index.html
index f577d3d..7cb6621 100644
--- a/content/docs/zh-CN/cookbooks-deduplication/index.html
+++ b/content/docs/zh-CN/cookbooks-deduplication/index.html
@@ -79,7 +79,7 @@
 <blockquote>
 <p>For a more thorough theoretical explanation of message deduplication, see the <a href="/docs/zh-CN/concepts-messaging#message-deduplication">Concepts and Architecture</a> document.</p>
 </blockquote>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" 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. [...]
+<h2><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 [...]
 <p>Message deduplication can be enabled and disabled on a per-namespace basis. By default, it is <em>disabled</em> on all namespaces and can enabled in the following ways:</p>
 <ul>
 <li>Using the <a href="#enabling"><code>pulsar-admin namespaces</code></a> interface</li>
@@ -163,7 +163,7 @@ Producer producer;
 
 Result result = client.createProducer(topic, producerConfig, producer);
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a href="#configuration-for-message-deduplication">Co [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#configuration-for-message-deduplication">Configuration for  [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/next/adaptors-kafka.html b/content/docs/zh-CN/next/adaptors-kafka.html
index d5699c0..e0c8260 100644
--- a/content/docs/zh-CN/next/adaptors-kafka.html
+++ b/content/docs/zh-CN/next/adaptors-kafka.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/adaptors-kafka/index.html b/content/docs/zh-CN/next/adaptors-kafka/index.html
index d5699c0..e0c8260 100644
--- a/content/docs/zh-CN/next/adaptors-kafka/index.html
+++ b/content/docs/zh-CN/next/adaptors-kafka/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/adaptors-spark.html b/content/docs/zh-CN/next/adaptors-spark.html
index db05f66..850095b 100644
--- a/content/docs/zh-CN/next/adaptors-spark.html
+++ b/content/docs/zh-CN/next/adaptors-spark.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/adaptors-spark/index.html b/content/docs/zh-CN/next/adaptors-spark/index.html
index db05f66..850095b 100644
--- a/content/docs/zh-CN/next/adaptors-spark/index.html
+++ b/content/docs/zh-CN/next/adaptors-spark/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/adaptors-storm.html b/content/docs/zh-CN/next/adaptors-storm.html
index e45225f..ada6959 100644
--- a/content/docs/zh-CN/next/adaptors-storm.html
+++ b/content/docs/zh-CN/next/adaptors-storm.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/adaptors-storm/index.html b/content/docs/zh-CN/next/adaptors-storm/index.html
index e45225f..ada6959 100644
--- a/content/docs/zh-CN/next/adaptors-storm/index.html
+++ b/content/docs/zh-CN/next/adaptors-storm/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/admin-api-brokers.html b/content/docs/zh-CN/next/admin-api-brokers.html
index 1c2d7b1..733592e 100644
--- a/content/docs/zh-CN/next/admin-api-brokers.html
+++ b/content/docs/zh-CN/next/admin-api-brokers.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/admin-api-brokers/index.html b/content/docs/zh-CN/next/admin-api-brokers/index.html
index 1c2d7b1..733592e 100644
--- a/content/docs/zh-CN/next/admin-api-brokers/index.html
+++ b/content/docs/zh-CN/next/admin-api-brokers/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/admin-api-clusters.html b/content/docs/zh-CN/next/admin-api-clusters.html
index aed8057..f4acb37 100644
--- a/content/docs/zh-CN/next/admin-api-clusters.html
+++ b/content/docs/zh-CN/next/admin-api-clusters.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/admin-api-clusters/index.html b/content/docs/zh-CN/next/admin-api-clusters/index.html
index aed8057..f4acb37 100644
--- a/content/docs/zh-CN/next/admin-api-clusters/index.html
+++ b/content/docs/zh-CN/next/admin-api-clusters/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/admin-api-namespaces.html b/content/docs/zh-CN/next/admin-api-namespaces.html
index 6fff37e..37d32e7 100644
--- a/content/docs/zh-CN/next/admin-api-namespaces.html
+++ b/content/docs/zh-CN/next/admin-api-namespaces.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/admin-api-namespaces/index.html b/content/docs/zh-CN/next/admin-api-namespaces/index.html
index 6fff37e..37d32e7 100644
--- a/content/docs/zh-CN/next/admin-api-namespaces/index.html
+++ b/content/docs/zh-CN/next/admin-api-namespaces/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/admin-api-non-persistent-topics.html b/content/docs/zh-CN/next/admin-api-non-persistent-topics.html
index 1395214..ff776f8 100644
--- a/content/docs/zh-CN/next/admin-api-non-persistent-topics.html
+++ b/content/docs/zh-CN/next/admin-api-non-persistent-topics.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/admin-api-non-persistent-topics/index.html b/content/docs/zh-CN/next/admin-api-non-persistent-topics/index.html
index 1395214..ff776f8 100644
--- a/content/docs/zh-CN/next/admin-api-non-persistent-topics/index.html
+++ b/content/docs/zh-CN/next/admin-api-non-persistent-topics/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/admin-api-overview.html b/content/docs/zh-CN/next/admin-api-overview.html
index 7ebb1f1..d2f3545 100644
--- a/content/docs/zh-CN/next/admin-api-overview.html
+++ b/content/docs/zh-CN/next/admin-api-overview.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/admin-api-overview/index.html b/content/docs/zh-CN/next/admin-api-overview/index.html
index 7ebb1f1..d2f3545 100644
--- a/content/docs/zh-CN/next/admin-api-overview/index.html
+++ b/content/docs/zh-CN/next/admin-api-overview/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/admin-api-partitioned-topics.html b/content/docs/zh-CN/next/admin-api-partitioned-topics.html
index efea4da..3ddead7 100644
--- a/content/docs/zh-CN/next/admin-api-partitioned-topics.html
+++ b/content/docs/zh-CN/next/admin-api-partitioned-topics.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/admin-api-partitioned-topics/index.html b/content/docs/zh-CN/next/admin-api-partitioned-topics/index.html
index efea4da..3ddead7 100644
--- a/content/docs/zh-CN/next/admin-api-partitioned-topics/index.html
+++ b/content/docs/zh-CN/next/admin-api-partitioned-topics/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/admin-api-permissions.html b/content/docs/zh-CN/next/admin-api-permissions.html
index 18c0cca..9c87df7 100644
--- a/content/docs/zh-CN/next/admin-api-permissions.html
+++ b/content/docs/zh-CN/next/admin-api-permissions.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/admin-api-permissions/index.html b/content/docs/zh-CN/next/admin-api-permissions/index.html
index 18c0cca..9c87df7 100644
--- a/content/docs/zh-CN/next/admin-api-permissions/index.html
+++ b/content/docs/zh-CN/next/admin-api-permissions/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/admin-api-persistent-topics.html b/content/docs/zh-CN/next/admin-api-persistent-topics.html
index 8b82935..7ce0cbe 100644
--- a/content/docs/zh-CN/next/admin-api-persistent-topics.html
+++ b/content/docs/zh-CN/next/admin-api-persistent-topics.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/admin-api-persistent-topics/index.html b/content/docs/zh-CN/next/admin-api-persistent-topics/index.html
index 8b82935..7ce0cbe 100644
--- a/content/docs/zh-CN/next/admin-api-persistent-topics/index.html
+++ b/content/docs/zh-CN/next/admin-api-persistent-topics/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/admin-api-tenants.html b/content/docs/zh-CN/next/admin-api-tenants.html
index a59459c..157f2c0 100644
--- a/content/docs/zh-CN/next/admin-api-tenants.html
+++ b/content/docs/zh-CN/next/admin-api-tenants.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/admin-api-tenants/index.html b/content/docs/zh-CN/next/admin-api-tenants/index.html
index a59459c..157f2c0 100644
--- a/content/docs/zh-CN/next/admin-api-tenants/index.html
+++ b/content/docs/zh-CN/next/admin-api-tenants/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/administration-dashboard.html b/content/docs/zh-CN/next/administration-dashboard.html
index a412d7e..8d86291 100644
--- a/content/docs/zh-CN/next/administration-dashboard.html
+++ b/content/docs/zh-CN/next/administration-dashboard.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -110,7 +110,7 @@
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="known-issues"></a><a href="#known-issues" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <p>Only Pulsar Token <a href="/docs/zh-CN/next/security-overview#authentication-providers">authentication</a> is supported as of now.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/administration-geo"><span class="arrow-prev">← </span><span>Geo-replication</span></a><a class="docs-next button" href="/docs/zh-CN/next/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known-issues">Known [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/administration-geo"><span class="arrow-prev">← </span><span>跨域复制</span></a><a class="docs-next button" href="/docs/zh-CN/next/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known-issues">Known issues</a> [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/next/administration-dashboard/index.html b/content/docs/zh-CN/next/administration-dashboard/index.html
index a412d7e..8d86291 100644
--- a/content/docs/zh-CN/next/administration-dashboard/index.html
+++ b/content/docs/zh-CN/next/administration-dashboard/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -110,7 +110,7 @@
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="known-issues"></a><a href="#known-issues" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <p>Only Pulsar Token <a href="/docs/zh-CN/next/security-overview#authentication-providers">authentication</a> is supported as of now.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/administration-geo"><span class="arrow-prev">← </span><span>Geo-replication</span></a><a class="docs-next button" href="/docs/zh-CN/next/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known-issues">Known [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/administration-geo"><span class="arrow-prev">← </span><span>跨域复制</span></a><a class="docs-next button" href="/docs/zh-CN/next/administration-stats"><span>Pulsar statistics</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install">Install</a><ul class="toc-headings"><li><a href="#known-issues">Known issues</a> [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/next/administration-geo.html b/content/docs/zh-CN/next/administration-geo.html
index 88f7965..e117431 100644
--- a/content/docs/zh-CN/next/administration-geo.html
+++ b/content/docs/zh-CN/next/administration-geo.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*Geo-replication* is the replication of persistently stored message data across multiple clusters of a Pulsar instance."/><meta name="docsearch:version" content="next"/><meta name="docsearch: [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>脉冲星的跨域复制 · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*跨域复制* 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="脉冲星的跨域复制 · Apache Pulsar"/><meta prop [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -74,54 +74,54 @@
                 };
               }
             });
-        </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 geo-replication</h1></header><article><div><span><p><em>Geo-replication</em> is the replication of persistently stored message data across multiple clusters of a Pulsar instance.</p>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
-<p>The diagram below illustrates the process of geo-replication across Pulsar clusters:</p>
-<p><img src="/docs/assets/geo-replication.png" alt="Replication Diagram"></p>
-<p>In this diagram, whenever <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong> producers publish messages to the <strong>T1</strong> topic on <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong> clusters respectively, those messages are instantly replicated across clusters. Once replicated, <strong>C1</strong> and <strong>C2</strong> consumers can consume those messages from their respective clusters.</p>
-<p>Without geo-replication, <strong>C1</strong> and <strong>C2</strong> consumers are not able to consume messages published by <strong>P3</strong> producer.</p>
-<h2><a class="anchor" aria-hidden="true" id="geo-replication-and-pulsar-properties"></a><a href="#geo-replication-and-pulsar-properties" 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 [...]
-<p>Geo-replication must be enabled on a per-tenant basis in Pulsar. Geo-replication can be enabled between clusters only when a tenant has been created that allows access to both clusters.</p>
-<p>Although geo-replication must be enabled between two clusters, it's actually managed at the namespace level. You must complete the following tasks to enable geo-replication for a namespace:</p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">脉冲星的跨域复制</h1></header><article><div><span><p><em>跨域复制</em> 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。</p>
+<h2><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 [...]
+<p>下图说明了脉冲星在不同集群之间的跨域复制过程</p>
+<p><img src="/docs/assets/geo-replication.png" alt="复制图表"></p>
+<p>在这个图中,每当<strong>P1</strong>、<strong>P2</strong>和<strong>P3</strong>的生产者分别在<strong>集群A</strong>、<strong>集群B</strong>和<strong>集群C</strong>向</strong>T1</strong> topic发送消息时,这些消息就会进行实时的跨集群复制 一旦复制,<strong>C1</strong>和<strong>C2</strong>的客户就可以从各自的集群中使用这些消息。</p>
+<p>没有进行跨域复制前,<strong>C1</strong>和<strong>C2</strong>消费者不能使用<strong>P3</strong>生产者发布的消息</p>
+<h2><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 [...]
+<p>在脉冲星中,我们限制了需要通过新增租户来激活跨域复制。 只有在创建了允许访问两个集群的租户时,才能在集群之间启用跨域复制。</p>
+<p>虽然必须在两个集群之间启用地理复制,但它实际上是在名称空间级别进行管理的。你必须完成以下任务才能启用名称空间的地理复制:</p>
 <ul>
-<li><a href="#enabling-geo-replication-namespaces">Enable geo-replication namespaces</a></li>
-<li>Configure that namespace to replicate across two or more provisioned clusters</li>
+<li><a href="#enabling-geo-replication-namespaces">激活geo-replication名称空间</a></li>
+<li>配置该名称空间使其可以跨两个或多个集群复制</li>
 </ul>
-<p>Any message published on <em>any</em> topic in that namespace will be replicated to all clusters in the specified set.</p>
-<h2><a class="anchor" aria-hidden="true" id="local-persistence-and-forwarding"></a><a href="#local-persistence-and-forwarding" 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. [...]
-<p>When messages are produced on a Pulsar topic, they are first persisted in the local cluster, and then forwarded asynchronously to the remote clusters.</p>
-<p>In normal cases, when there are no connectivity issues, messages are replicated immediately, at the same time as they are dispatched to local consumers. Typically, end-to-end delivery latency is defined by the network <a href="https://en.wikipedia.org/wiki/Round-trip_delay_time">round-trip time</a> (RTT) between the remote regions.</p>
-<p>Applications can create producers and consumers in any of the clusters, even when the remote clusters are not reachable (like during a network partition).</p>
+<p>该名称空间中在<em>任何</em>topic上发布的任何消息都将复制到指定集合中的所有集群。</p>
+<h2><a class="anchor" aria-hidden="true" id="本地存储和转发"></a><a href="#本地存储和转发" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>当信息在脉冲星topic上生成时,它们首先会被保存在本地集群中,然后异步转发到远程集群。</p>
+<p>在正常情况下,当没有连接问题时,消息会立即复制,同时发送给本地消费者。 通常,端到端交付延迟由远程区域之间的网络往返时间<a href="https://en.wikipedia.org/wiki/Round-trip_delay_time"></a>(RTT)决定。</p>
+<p>应用程序可以在任何集群中创建生产者和消费者,即使无法访问远程集群(比如在网络分区期间)。</p>
 <blockquote>
-<h4><a class="anchor" aria-hidden="true" id="subscriptions-are-local-to-a-cluster"></a><a href="#subscriptions-are-local-to-a-cluster" 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 [...]
-<p>While producers and consumers can publish to and consume from any cluster in a Pulsar instance, subscriptions are local to the clusters in which they are created and cannot be transferred between clusters. If you do need to transfer a subscription, you’ll need to create a new subscription in the desired cluster.</p>
+<h4><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.6 [...]
+<p>虽然生产者和消费者可以在脉冲星实例中的任何集群中发布和消费,但是订阅是创建它们的集群的本地订阅,不能在集群之间传输。 如果确实需要传输订阅,则需要在所需的集群中创建新的订阅。</p>
 </blockquote>
-<p>In the aforementioned example, the <strong>T1</strong> topic is being replicated among three clusters, <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong>.</p>
-<p>All messages produced in any of the three clusters are delivered to all subscriptions in other clusters. In this case, <strong>C1</strong> and <strong>C2</strong> consumers will receive all messages published by <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong> producers. Ordering is still guaranteed on a per-producer basis.</p>
-<h2><a class="anchor" aria-hidden="true" id="configuring-replication"></a><a href="#configuring-replication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
-<p>As stated in <a href="#geo-replication-and-pulsar-properties">Geo-replication and Pulsar properties</a> section, geo-replication in Pulsar is managed at the <a href="/docs/zh-CN/next/reference-terminology#tenant">tenant</a> level.</p>
-<h3><a class="anchor" aria-hidden="true" id="granting-permissions-to-properties"></a><a href="#granting-permissions-to-properties" 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.5 [...]
-<p>To replicate to a cluster, the tenant needs permission to use that cluster. You can grant permission to the tenant when you create it or grant later.</p>
-<p>Specify all the intended clusters when creating a tenant:</p>
+<p>在这个案例中,<strong>T1</strong>主题被复制到三个集群中,<strong>集群A</strong>、<strong>集群B</strong>和<strong>集群C</strong>。</p>
+<p>这三个集群中的任何一个集群生成的所有消息都交付给其他集群中的所有订阅。 在这种情况下,<strong>C1</strong>和<strong>C2</strong>的消费者将接收到由<strong>P1</strong>,<strong>P2</strong>,<strong>P3</strong>生产者发出的全部信息。 指令仍然在每个生产者的basis上有所保障。</p>
+<h2><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 [...]
+<p>正如在<a href="#geo-replication-and-pulsar-properties">Geo-replication和脉冲星属性</a>一节中所述,脉冲星中的Geo-replication是在<a href="/docs/zh-CN/next/reference-terminology#tenant">租户级别</a>进行管理的。</p>
+<h3><a class="anchor" aria-hidden="true" id="授予属性权限"></a><a href="#授予属性权限" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<p>要复制到集群,租户需要使用该集群的权限。您可以在创建租户时或稍后向租户授予权限。</p>
+<p>在创建租户时指定所有预期的集群</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin tenants create my-tenant \</span>
   --admin-roles my-admin-role \
   --allowed-clusters us-west,us-east,us-cent
 </code></pre>
-<p>To update permissions of an existing tenant, use <code>update</code> instead of <code>create</code>.</p>
-<h3><a class="anchor" aria-hidden="true" id="enabling-geo-replication-namespaces"></a><a href="#enabling-geo-replication-namespaces" 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 [...]
-<p>You can create a namespace with the following command sample.</p>
+<p>要更新现有租户的权限,请使用<code>update</code>而不是<code>create</code>。</p>
+<h3><a class="anchor" aria-hidden="true" id="激活geo-replication名称空间"></a><a href="#激活geo-replication名称空间" 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 [...]
+<p>你可以使用如下示例命令创建名称空间。</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin namespaces create my-tenant/my-namespace</span>
 </code></pre>
 <p>Initially, the namespace is not assigned to any cluster. You can assign the namespace to clusters using the <code>set-clusters</code> subcommand:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin namespaces <span class="hljs-built_in">set</span>-clusters my-tenant/my-namespace \</span>
   --clusters us-west,us-east,us-cent
 </code></pre>
-<p>The replication clusters for a namespace can be changed at any time, without disruption to ongoing traffic. Replication channels are immediately set up or stopped in all clusters as soon as the configuration changes.</p>
-<h3><a class="anchor" aria-hidden="true" id="using-topics-with-geo-replication"></a><a href="#using-topics-with-geo-replication" 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.5S1 [...]
-<p>Once you've created a geo-replication namespace, any topics that producers or consumers create within that namespace will be replicated across clusters. Typically, each application will use the <code>serviceUrl</code> for the local cluster.</p>
-<h4><a class="anchor" aria-hidden="true" id="selective-replication"></a><a href="#selective-replication" 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 [...]
-<p>By default, messages are replicated to all clusters configured for the namespace. You can restrict replication selectively by specifying a replication list for a message, and then that message will be replicated only to the subset in the replication list.</p>
-<p>The following is an example for the <a href="/docs/zh-CN/next/client-libraries-java">Java API</a>. Note the use of the <code>setReplicationClusters</code> method when constructing the <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Message">Message</a>
+<p>你可以随时更改名称空间的复制集群,而不会中断正在进行的通信。 一旦配置发生更改,复制通道将立即在所有集群中设置或停止。</p>
+<h3><a class="anchor" aria-hidden="true" id="使用带有topic的跨域复制"></a><a href="#使用带有topic的跨域复制" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p>一旦创建了跨域复制名称空间,生产者或消费者在该名称空间中创建的任何topic都将进行跨集群复制。 Typically, each application will use the <code>serviceUrl</code> for the local cluster.</p>
+<h4><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.09 [...]
+<p>By default, messages are replicated to all clusters configured for the namespace. 您可以通过为消息指定复制列表来选择性地限制复制,然后该消息将只复制到复制列表中的子集。</p>
+<p>下面是<a href="/docs/zh-CN/next/client-libraries-java">Java API</a>的一个示例。 Note the use of the <code>setReplicationClusters</code> method when constructing the <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Message">Message</a>
  object:</p>
 <pre><code class="hljs css language-java">List&lt;String&gt; restrictReplicationTo = Arrays.asList(
         <span class="hljs-string">"us-west"</span>,
@@ -137,18 +137,18 @@ producer.newMessage()
         .setReplicationClusters(restrictReplicationTo)
         .send();
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="topic-stats"></a><a href="#topic-stats" 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 [...]
-<p>Topic-specific statistics for geo-replication topics are available via the <a href="/docs/zh-CN/next/pulsar-admin"><code>pulsar-admin</code></a> tool and <a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
- API:</p>
+<h4><a class="anchor" aria-hidden="true" id="topic统计数据"></a><a href="#topic统计数据" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
+<p>特定主题的地跨域复制统计信息可以通过<a href="/docs/zh-CN/next/pulsar-admin"><code>pulse -admin</code></a>工具和<a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
+ API查看</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin persistent stats persistent://my-tenant/my-namespace/my-topic</span>
 </code></pre>
-<p>Each cluster reports its own local stats, including the incoming and outgoing replication rates and backlogs.</p>
-<h4><a class="anchor" aria-hidden="true" id="deleting-a-geo-replication-topic"></a><a href="#deleting-a-geo-replication-topic" 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. [...]
-<p>Given that geo-replication topics exist in multiple regions, it's not possible to directly delete a geo-replication topic. Instead, you should rely on automatic topic garbage collection.</p>
-<p>In Pulsar, a topic is automatically deleted when it meets the following three conditions: - when no producers or consumers are connected to it; - there are no subscriptions to it; - no more messages are kept for retention. For geo-replication topics, each region uses a fault-tolerant mechanism to decide when it's safe to delete the topic locally.</p>
-<p>You can explicitly disable topic garbage collection by setting <code>brokerDeleteInactiveTopicsEnabled</code> to <code>false</code> in your <a href="/docs/zh-CN/next/reference-configuration#broker">broker configuration</a>.</p>
-<p>To delete a geo-replication topic, close all producers and consumers on the topic, and delete all of its local subscriptions in every replication cluster. When Pulsar determines that no valid subscription for the topic remains across the system, it will garbage collect the topic.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/next/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a href [...]
+<p>每个集群会生成自己的本地统计信息报告,包括传入和传出的复制率和队列容量。</p>
+<h4><a class="anchor" aria-hidden="true" id="删除跨域复制topic"></a><a href="#删除跨域复制topic" 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 [...]
+<p>由于地理复制主题存在于多个区域,因此不可能直接删除地理复制主题。相反地,您应该依赖于自动垃圾回收机制。</p>
+<p>在脉冲星中,当一个topic满足以下三个条件时会被自动删除,即: -当没有生产者或消费者连接到该主题时; -没有订阅; -不再保留任何信息以供保留。 对于跨域复制topic,每个区域都使用容错机制来决定何时在本地安全删除该主题。</p>
+<p>可以通过在<a href="/docs/zh-CN/next/reference-configuration#broker">代理配置</a>中设置<code>brokerDeleteInactiveTopicsEnabled</code>为<code>false</code>来显式禁用主题垃圾收集。</p>
+<p>要删除跨域复制主题,请关闭该主题上的所有生产者和消费者,并删除每个复制集群中的所有本地订阅。 When Pulsar determines that no valid subscription for the topic remains across the system, it will garbage collect the topic.</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/next/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#跨域复制以及脉冲星特性"> [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/next/administration-geo/index.html b/content/docs/zh-CN/next/administration-geo/index.html
index 88f7965..e117431 100644
--- a/content/docs/zh-CN/next/administration-geo/index.html
+++ b/content/docs/zh-CN/next/administration-geo/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar geo-replication · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*Geo-replication* is the replication of persistently stored message data across multiple clusters of a Pulsar instance."/><meta name="docsearch:version" content="next"/><meta name="docsearch: [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>脉冲星的跨域复制 · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*跨域复制* 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="脉冲星的跨域复制 · Apache Pulsar"/><meta prop [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -74,54 +74,54 @@
                 };
               }
             });
-        </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 geo-replication</h1></header><article><div><span><p><em>Geo-replication</em> is the replication of persistently stored message data across multiple clusters of a Pulsar instance.</p>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
-<p>The diagram below illustrates the process of geo-replication across Pulsar clusters:</p>
-<p><img src="/docs/assets/geo-replication.png" alt="Replication Diagram"></p>
-<p>In this diagram, whenever <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong> producers publish messages to the <strong>T1</strong> topic on <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong> clusters respectively, those messages are instantly replicated across clusters. Once replicated, <strong>C1</strong> and <strong>C2</strong> consumers can consume those messages from their respective clusters.</p>
-<p>Without geo-replication, <strong>C1</strong> and <strong>C2</strong> consumers are not able to consume messages published by <strong>P3</strong> producer.</p>
-<h2><a class="anchor" aria-hidden="true" id="geo-replication-and-pulsar-properties"></a><a href="#geo-replication-and-pulsar-properties" 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 [...]
-<p>Geo-replication must be enabled on a per-tenant basis in Pulsar. Geo-replication can be enabled between clusters only when a tenant has been created that allows access to both clusters.</p>
-<p>Although geo-replication must be enabled between two clusters, it's actually managed at the namespace level. You must complete the following tasks to enable geo-replication for a namespace:</p>
+        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">脉冲星的跨域复制</h1></header><article><div><span><p><em>跨域复制</em> 是指在脉冲星实例中对多个集群中永久存储消息数据的复制。</p>
+<h2><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 [...]
+<p>下图说明了脉冲星在不同集群之间的跨域复制过程</p>
+<p><img src="/docs/assets/geo-replication.png" alt="复制图表"></p>
+<p>在这个图中,每当<strong>P1</strong>、<strong>P2</strong>和<strong>P3</strong>的生产者分别在<strong>集群A</strong>、<strong>集群B</strong>和<strong>集群C</strong>向</strong>T1</strong> topic发送消息时,这些消息就会进行实时的跨集群复制 一旦复制,<strong>C1</strong>和<strong>C2</strong>的客户就可以从各自的集群中使用这些消息。</p>
+<p>没有进行跨域复制前,<strong>C1</strong>和<strong>C2</strong>消费者不能使用<strong>P3</strong>生产者发布的消息</p>
+<h2><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 [...]
+<p>在脉冲星中,我们限制了需要通过新增租户来激活跨域复制。 只有在创建了允许访问两个集群的租户时,才能在集群之间启用跨域复制。</p>
+<p>虽然必须在两个集群之间启用地理复制,但它实际上是在名称空间级别进行管理的。你必须完成以下任务才能启用名称空间的地理复制:</p>
 <ul>
-<li><a href="#enabling-geo-replication-namespaces">Enable geo-replication namespaces</a></li>
-<li>Configure that namespace to replicate across two or more provisioned clusters</li>
+<li><a href="#enabling-geo-replication-namespaces">激活geo-replication名称空间</a></li>
+<li>配置该名称空间使其可以跨两个或多个集群复制</li>
 </ul>
-<p>Any message published on <em>any</em> topic in that namespace will be replicated to all clusters in the specified set.</p>
-<h2><a class="anchor" aria-hidden="true" id="local-persistence-and-forwarding"></a><a href="#local-persistence-and-forwarding" 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. [...]
-<p>When messages are produced on a Pulsar topic, they are first persisted in the local cluster, and then forwarded asynchronously to the remote clusters.</p>
-<p>In normal cases, when there are no connectivity issues, messages are replicated immediately, at the same time as they are dispatched to local consumers. Typically, end-to-end delivery latency is defined by the network <a href="https://en.wikipedia.org/wiki/Round-trip_delay_time">round-trip time</a> (RTT) between the remote regions.</p>
-<p>Applications can create producers and consumers in any of the clusters, even when the remote clusters are not reachable (like during a network partition).</p>
+<p>该名称空间中在<em>任何</em>topic上发布的任何消息都将复制到指定集合中的所有集群。</p>
+<h2><a class="anchor" aria-hidden="true" id="本地存储和转发"></a><a href="#本地存储和转发" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>当信息在脉冲星topic上生成时,它们首先会被保存在本地集群中,然后异步转发到远程集群。</p>
+<p>在正常情况下,当没有连接问题时,消息会立即复制,同时发送给本地消费者。 通常,端到端交付延迟由远程区域之间的网络往返时间<a href="https://en.wikipedia.org/wiki/Round-trip_delay_time"></a>(RTT)决定。</p>
+<p>应用程序可以在任何集群中创建生产者和消费者,即使无法访问远程集群(比如在网络分区期间)。</p>
 <blockquote>
-<h4><a class="anchor" aria-hidden="true" id="subscriptions-are-local-to-a-cluster"></a><a href="#subscriptions-are-local-to-a-cluster" 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 [...]
-<p>While producers and consumers can publish to and consume from any cluster in a Pulsar instance, subscriptions are local to the clusters in which they are created and cannot be transferred between clusters. If you do need to transfer a subscription, you’ll need to create a new subscription in the desired cluster.</p>
+<h4><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.6 [...]
+<p>虽然生产者和消费者可以在脉冲星实例中的任何集群中发布和消费,但是订阅是创建它们的集群的本地订阅,不能在集群之间传输。 如果确实需要传输订阅,则需要在所需的集群中创建新的订阅。</p>
 </blockquote>
-<p>In the aforementioned example, the <strong>T1</strong> topic is being replicated among three clusters, <strong>Cluster-A</strong>, <strong>Cluster-B</strong>, and <strong>Cluster-C</strong>.</p>
-<p>All messages produced in any of the three clusters are delivered to all subscriptions in other clusters. In this case, <strong>C1</strong> and <strong>C2</strong> consumers will receive all messages published by <strong>P1</strong>, <strong>P2</strong>, and <strong>P3</strong> producers. Ordering is still guaranteed on a per-producer basis.</p>
-<h2><a class="anchor" aria-hidden="true" id="configuring-replication"></a><a href="#configuring-replication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
-<p>As stated in <a href="#geo-replication-and-pulsar-properties">Geo-replication and Pulsar properties</a> section, geo-replication in Pulsar is managed at the <a href="/docs/zh-CN/next/reference-terminology#tenant">tenant</a> level.</p>
-<h3><a class="anchor" aria-hidden="true" id="granting-permissions-to-properties"></a><a href="#granting-permissions-to-properties" 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.5 [...]
-<p>To replicate to a cluster, the tenant needs permission to use that cluster. You can grant permission to the tenant when you create it or grant later.</p>
-<p>Specify all the intended clusters when creating a tenant:</p>
+<p>在这个案例中,<strong>T1</strong>主题被复制到三个集群中,<strong>集群A</strong>、<strong>集群B</strong>和<strong>集群C</strong>。</p>
+<p>这三个集群中的任何一个集群生成的所有消息都交付给其他集群中的所有订阅。 在这种情况下,<strong>C1</strong>和<strong>C2</strong>的消费者将接收到由<strong>P1</strong>,<strong>P2</strong>,<strong>P3</strong>生产者发出的全部信息。 指令仍然在每个生产者的basis上有所保障。</p>
+<h2><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 [...]
+<p>正如在<a href="#geo-replication-and-pulsar-properties">Geo-replication和脉冲星属性</a>一节中所述,脉冲星中的Geo-replication是在<a href="/docs/zh-CN/next/reference-terminology#tenant">租户级别</a>进行管理的。</p>
+<h3><a class="anchor" aria-hidden="true" id="授予属性权限"></a><a href="#授予属性权限" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<p>要复制到集群,租户需要使用该集群的权限。您可以在创建租户时或稍后向租户授予权限。</p>
+<p>在创建租户时指定所有预期的集群</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin tenants create my-tenant \</span>
   --admin-roles my-admin-role \
   --allowed-clusters us-west,us-east,us-cent
 </code></pre>
-<p>To update permissions of an existing tenant, use <code>update</code> instead of <code>create</code>.</p>
-<h3><a class="anchor" aria-hidden="true" id="enabling-geo-replication-namespaces"></a><a href="#enabling-geo-replication-namespaces" 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 [...]
-<p>You can create a namespace with the following command sample.</p>
+<p>要更新现有租户的权限,请使用<code>update</code>而不是<code>create</code>。</p>
+<h3><a class="anchor" aria-hidden="true" id="激活geo-replication名称空间"></a><a href="#激活geo-replication名称空间" 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 [...]
+<p>你可以使用如下示例命令创建名称空间。</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin namespaces create my-tenant/my-namespace</span>
 </code></pre>
 <p>Initially, the namespace is not assigned to any cluster. You can assign the namespace to clusters using the <code>set-clusters</code> subcommand:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin namespaces <span class="hljs-built_in">set</span>-clusters my-tenant/my-namespace \</span>
   --clusters us-west,us-east,us-cent
 </code></pre>
-<p>The replication clusters for a namespace can be changed at any time, without disruption to ongoing traffic. Replication channels are immediately set up or stopped in all clusters as soon as the configuration changes.</p>
-<h3><a class="anchor" aria-hidden="true" id="using-topics-with-geo-replication"></a><a href="#using-topics-with-geo-replication" 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.5S1 [...]
-<p>Once you've created a geo-replication namespace, any topics that producers or consumers create within that namespace will be replicated across clusters. Typically, each application will use the <code>serviceUrl</code> for the local cluster.</p>
-<h4><a class="anchor" aria-hidden="true" id="selective-replication"></a><a href="#selective-replication" 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 [...]
-<p>By default, messages are replicated to all clusters configured for the namespace. You can restrict replication selectively by specifying a replication list for a message, and then that message will be replicated only to the subset in the replication list.</p>
-<p>The following is an example for the <a href="/docs/zh-CN/next/client-libraries-java">Java API</a>. Note the use of the <code>setReplicationClusters</code> method when constructing the <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Message">Message</a>
+<p>你可以随时更改名称空间的复制集群,而不会中断正在进行的通信。 一旦配置发生更改,复制通道将立即在所有集群中设置或停止。</p>
+<h3><a class="anchor" aria-hidden="true" id="使用带有topic的跨域复制"></a><a href="#使用带有topic的跨域复制" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p>一旦创建了跨域复制名称空间,生产者或消费者在该名称空间中创建的任何topic都将进行跨集群复制。 Typically, each application will use the <code>serviceUrl</code> for the local cluster.</p>
+<h4><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.09 [...]
+<p>By default, messages are replicated to all clusters configured for the namespace. 您可以通过为消息指定复制列表来选择性地限制复制,然后该消息将只复制到复制列表中的子集。</p>
+<p>下面是<a href="/docs/zh-CN/next/client-libraries-java">Java API</a>的一个示例。 Note the use of the <code>setReplicationClusters</code> method when constructing the <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Message">Message</a>
  object:</p>
 <pre><code class="hljs css language-java">List&lt;String&gt; restrictReplicationTo = Arrays.asList(
         <span class="hljs-string">"us-west"</span>,
@@ -137,18 +137,18 @@ producer.newMessage()
         .setReplicationClusters(restrictReplicationTo)
         .send();
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="topic-stats"></a><a href="#topic-stats" 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 [...]
-<p>Topic-specific statistics for geo-replication topics are available via the <a href="/docs/zh-CN/next/pulsar-admin"><code>pulsar-admin</code></a> tool and <a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
- API:</p>
+<h4><a class="anchor" aria-hidden="true" id="topic统计数据"></a><a href="#topic统计数据" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
+<p>特定主题的地跨域复制统计信息可以通过<a href="/docs/zh-CN/next/pulsar-admin"><code>pulse -admin</code></a>工具和<a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
+ API查看</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin persistent stats persistent://my-tenant/my-namespace/my-topic</span>
 </code></pre>
-<p>Each cluster reports its own local stats, including the incoming and outgoing replication rates and backlogs.</p>
-<h4><a class="anchor" aria-hidden="true" id="deleting-a-geo-replication-topic"></a><a href="#deleting-a-geo-replication-topic" 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. [...]
-<p>Given that geo-replication topics exist in multiple regions, it's not possible to directly delete a geo-replication topic. Instead, you should rely on automatic topic garbage collection.</p>
-<p>In Pulsar, a topic is automatically deleted when it meets the following three conditions: - when no producers or consumers are connected to it; - there are no subscriptions to it; - no more messages are kept for retention. For geo-replication topics, each region uses a fault-tolerant mechanism to decide when it's safe to delete the topic locally.</p>
-<p>You can explicitly disable topic garbage collection by setting <code>brokerDeleteInactiveTopicsEnabled</code> to <code>false</code> in your <a href="/docs/zh-CN/next/reference-configuration#broker">broker configuration</a>.</p>
-<p>To delete a geo-replication topic, close all producers and consumers on the topic, and delete all of its local subscriptions in every replication cluster. When Pulsar determines that no valid subscription for the topic remains across the system, it will garbage collect the topic.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/next/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a href [...]
+<p>每个集群会生成自己的本地统计信息报告,包括传入和传出的复制率和队列容量。</p>
+<h4><a class="anchor" aria-hidden="true" id="删除跨域复制topic"></a><a href="#删除跨域复制topic" 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 [...]
+<p>由于地理复制主题存在于多个区域,因此不可能直接删除地理复制主题。相反地,您应该依赖于自动垃圾回收机制。</p>
+<p>在脉冲星中,当一个topic满足以下三个条件时会被自动删除,即: -当没有生产者或消费者连接到该主题时; -没有订阅; -不再保留任何信息以供保留。 对于跨域复制topic,每个区域都使用容错机制来决定何时在本地安全删除该主题。</p>
+<p>可以通过在<a href="/docs/zh-CN/next/reference-configuration#broker">代理配置</a>中设置<code>brokerDeleteInactiveTopicsEnabled</code>为<code>false</code>来显式禁用主题垃圾收集。</p>
+<p>要删除跨域复制主题,请关闭该主题上的所有生产者和消费者,并删除每个复制集群中的所有本地订阅。 When Pulsar determines that no valid subscription for the topic remains across the system, it will garbage collect the topic.</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/administration-zk-bk"><span class="arrow-prev">← </span><span class="function-name-prevnext">ZooKeeper and BookKeeper</span></a><a class="docs-next button" href="/docs/zh-CN/next/administration-dashboard"><span>仪表盘</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#跨域复制以及脉冲星特性"> [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/next/administration-load-balance.html b/content/docs/zh-CN/next/administration-load-balance.html
index afbbd54..daf131b 100644
--- a/content/docs/zh-CN/next/administration-load-balance.html
+++ b/content/docs/zh-CN/next/administration-load-balance.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/administration-load-balance/index.html b/content/docs/zh-CN/next/administration-load-balance/index.html
index afbbd54..daf131b 100644
--- a/content/docs/zh-CN/next/administration-load-balance/index.html
+++ b/content/docs/zh-CN/next/administration-load-balance/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/administration-proxy.html b/content/docs/zh-CN/next/administration-proxy.html
index 311d924..793449c 100644
--- a/content/docs/zh-CN/next/administration-proxy.html
+++ b/content/docs/zh-CN/next/administration-proxy.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/administration-proxy/index.html b/content/docs/zh-CN/next/administration-proxy/index.html
index 311d924..793449c 100644
--- a/content/docs/zh-CN/next/administration-proxy/index.html
+++ b/content/docs/zh-CN/next/administration-proxy/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/administration-stats.html b/content/docs/zh-CN/next/administration-stats.html
index b883022..93c2785 100644
--- a/content/docs/zh-CN/next/administration-stats.html
+++ b/content/docs/zh-CN/next/administration-stats.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/administration-stats/index.html b/content/docs/zh-CN/next/administration-stats/index.html
index b883022..93c2785 100644
--- a/content/docs/zh-CN/next/administration-stats/index.html
+++ b/content/docs/zh-CN/next/administration-stats/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/administration-upgrade.html b/content/docs/zh-CN/next/administration-upgrade.html
index 51e2571..57b1cbd 100644
--- a/content/docs/zh-CN/next/administration-upgrade.html
+++ b/content/docs/zh-CN/next/administration-upgrade.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/administration-upgrade/index.html b/content/docs/zh-CN/next/administration-upgrade/index.html
index 51e2571..57b1cbd 100644
--- a/content/docs/zh-CN/next/administration-upgrade/index.html
+++ b/content/docs/zh-CN/next/administration-upgrade/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/administration-zk-bk.html b/content/docs/zh-CN/next/administration-zk-bk.html
index 38373fc..01144b3 100644
--- a/content/docs/zh-CN/next/administration-zk-bk.html
+++ b/content/docs/zh-CN/next/administration-zk-bk.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -291,7 +291,7 @@ admin.namespaces().setPersistence(namespace, policies);
 <p>This diagram illustrates the role of ZooKeeper and BookKeeper in a Pulsar cluster:</p>
 <p><img src="/docs/assets/pulsar-system-architecture.png" alt="ZooKeeper and BookKeeper"></p>
 <p>Each Pulsar cluster consists of one or more message brokers. Each broker relies on an ensemble of bookies.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/next/administration-geo"><span>Geo-replication</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-local-zookeeper [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/next/administration-geo"><span>跨域复制</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-local-zookeeper">Deploying [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/next/administration-zk-bk/index.html b/content/docs/zh-CN/next/administration-zk-bk/index.html
index 38373fc..01144b3 100644
--- a/content/docs/zh-CN/next/administration-zk-bk/index.html
+++ b/content/docs/zh-CN/next/administration-zk-bk/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -291,7 +291,7 @@ admin.namespaces().setPersistence(namespace, policies);
 <p>This diagram illustrates the role of ZooKeeper and BookKeeper in a Pulsar cluster:</p>
 <p><img src="/docs/assets/pulsar-system-architecture.png" alt="ZooKeeper and BookKeeper"></p>
 <p>Each Pulsar cluster consists of one or more message brokers. Each broker relies on an ensemble of bookies.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/next/administration-geo"><span>Geo-replication</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-local-zookeeper [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/deploy-monitoring"><span class="arrow-prev">← </span><span>Monitoring</span></a><a class="docs-next button" href="/docs/zh-CN/next/administration-geo"><span>跨域复制</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#zookeeper">ZooKeeper</a><ul class="toc-headings"><li><a href="#deploying-local-zookeeper">Deploying [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/next/client-libraries-cpp.html b/content/docs/zh-CN/next/client-libraries-cpp.html
index 4a00d66..f80c040 100644
--- a/content/docs/zh-CN/next/client-libraries-cpp.html
+++ b/content/docs/zh-CN/next/client-libraries-cpp.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/client-libraries-cpp/index.html b/content/docs/zh-CN/next/client-libraries-cpp/index.html
index 4a00d66..f80c040 100644
--- a/content/docs/zh-CN/next/client-libraries-cpp/index.html
+++ b/content/docs/zh-CN/next/client-libraries-cpp/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/client-libraries-go.html b/content/docs/zh-CN/next/client-libraries-go.html
index 0433a24..23fbd28 100644
--- a/content/docs/zh-CN/next/client-libraries-go.html
+++ b/content/docs/zh-CN/next/client-libraries-go.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/client-libraries-go/index.html b/content/docs/zh-CN/next/client-libraries-go/index.html
index 0433a24..23fbd28 100644
--- a/content/docs/zh-CN/next/client-libraries-go/index.html
+++ b/content/docs/zh-CN/next/client-libraries-go/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/client-libraries-java.html b/content/docs/zh-CN/next/client-libraries-java.html
index 0880c26..be21469 100644
--- a/content/docs/zh-CN/next/client-libraries-java.html
+++ b/content/docs/zh-CN/next/client-libraries-java.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/client-libraries-java/index.html b/content/docs/zh-CN/next/client-libraries-java/index.html
index 0880c26..be21469 100644
--- a/content/docs/zh-CN/next/client-libraries-java/index.html
+++ b/content/docs/zh-CN/next/client-libraries-java/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/client-libraries-python.html b/content/docs/zh-CN/next/client-libraries-python.html
index 7a6d95c..9b4c655 100644
--- a/content/docs/zh-CN/next/client-libraries-python.html
+++ b/content/docs/zh-CN/next/client-libraries-python.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/client-libraries-python/index.html b/content/docs/zh-CN/next/client-libraries-python/index.html
index 7a6d95c..9b4c655 100644
--- a/content/docs/zh-CN/next/client-libraries-python/index.html
+++ b/content/docs/zh-CN/next/client-libraries-python/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/client-libraries-websocket.html b/content/docs/zh-CN/next/client-libraries-websocket.html
index baf2e91..68f7641 100644
--- a/content/docs/zh-CN/next/client-libraries-websocket.html
+++ b/content/docs/zh-CN/next/client-libraries-websocket.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
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 baf2e91..68f7641 100644
--- a/content/docs/zh-CN/next/client-libraries-websocket/index.html
+++ b/content/docs/zh-CN/next/client-libraries-websocket/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/client-libraries.html b/content/docs/zh-CN/next/client-libraries.html
index dd92e0d..14d9d55 100644
--- a/content/docs/zh-CN/next/client-libraries.html
+++ b/content/docs/zh-CN/next/client-libraries.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/client-libraries/index.html b/content/docs/zh-CN/next/client-libraries/index.html
index dd92e0d..14d9d55 100644
--- a/content/docs/zh-CN/next/client-libraries/index.html
+++ b/content/docs/zh-CN/next/client-libraries/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/concepts-architecture-overview.html b/content/docs/zh-CN/next/concepts-architecture-overview.html
index 14fc591..7973e61 100644
--- a/content/docs/zh-CN/next/concepts-architecture-overview.html
+++ b/content/docs/zh-CN/next/concepts-architecture-overview.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/concepts-architecture-overview/index.html b/content/docs/zh-CN/next/concepts-architecture-overview/index.html
index 14fc591..7973e61 100644
--- a/content/docs/zh-CN/next/concepts-architecture-overview/index.html
+++ b/content/docs/zh-CN/next/concepts-architecture-overview/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/concepts-authentication.html b/content/docs/zh-CN/next/concepts-authentication.html
index 60db9a3..bd4a1ae 100644
--- a/content/docs/zh-CN/next/concepts-authentication.html
+++ b/content/docs/zh-CN/next/concepts-authentication.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/concepts-authentication/index.html b/content/docs/zh-CN/next/concepts-authentication/index.html
index 60db9a3..bd4a1ae 100644
--- a/content/docs/zh-CN/next/concepts-authentication/index.html
+++ b/content/docs/zh-CN/next/concepts-authentication/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/concepts-clients.html b/content/docs/zh-CN/next/concepts-clients.html
index 574dd0f..81ac918 100644
--- a/content/docs/zh-CN/next/concepts-clients.html
+++ b/content/docs/zh-CN/next/concepts-clients.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/concepts-clients/index.html b/content/docs/zh-CN/next/concepts-clients/index.html
index 574dd0f..81ac918 100644
--- a/content/docs/zh-CN/next/concepts-clients/index.html
+++ b/content/docs/zh-CN/next/concepts-clients/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/concepts-messaging.html b/content/docs/zh-CN/next/concepts-messaging.html
index 07048c8..bbdf299 100644
--- a/content/docs/zh-CN/next/concepts-messaging.html
+++ b/content/docs/zh-CN/next/concepts-messaging.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/concepts-messaging/index.html b/content/docs/zh-CN/next/concepts-messaging/index.html
index 07048c8..bbdf299 100644
--- a/content/docs/zh-CN/next/concepts-messaging/index.html
+++ b/content/docs/zh-CN/next/concepts-messaging/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/concepts-multi-tenancy.html b/content/docs/zh-CN/next/concepts-multi-tenancy.html
index 65987bf..f4a596f 100644
--- a/content/docs/zh-CN/next/concepts-multi-tenancy.html
+++ b/content/docs/zh-CN/next/concepts-multi-tenancy.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/concepts-multi-tenancy/index.html b/content/docs/zh-CN/next/concepts-multi-tenancy/index.html
index 65987bf..f4a596f 100644
--- a/content/docs/zh-CN/next/concepts-multi-tenancy/index.html
+++ b/content/docs/zh-CN/next/concepts-multi-tenancy/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/concepts-overview.html b/content/docs/zh-CN/next/concepts-overview.html
index 23db097..4225c48 100644
--- a/content/docs/zh-CN/next/concepts-overview.html
+++ b/content/docs/zh-CN/next/concepts-overview.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/concepts-overview/index.html b/content/docs/zh-CN/next/concepts-overview/index.html
index 23db097..4225c48 100644
--- a/content/docs/zh-CN/next/concepts-overview/index.html
+++ b/content/docs/zh-CN/next/concepts-overview/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/concepts-replication.html b/content/docs/zh-CN/next/concepts-replication.html
index 12a7e76..2e83d96 100644
--- a/content/docs/zh-CN/next/concepts-replication.html
+++ b/content/docs/zh-CN/next/concepts-replication.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/concepts-replication/index.html b/content/docs/zh-CN/next/concepts-replication/index.html
index 12a7e76..2e83d96 100644
--- a/content/docs/zh-CN/next/concepts-replication/index.html
+++ b/content/docs/zh-CN/next/concepts-replication/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/concepts-tiered-storage.html b/content/docs/zh-CN/next/concepts-tiered-storage.html
index 18f339a..0f74d3d 100644
--- a/content/docs/zh-CN/next/concepts-tiered-storage.html
+++ b/content/docs/zh-CN/next/concepts-tiered-storage.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/concepts-tiered-storage/index.html b/content/docs/zh-CN/next/concepts-tiered-storage/index.html
index 18f339a..0f74d3d 100644
--- a/content/docs/zh-CN/next/concepts-tiered-storage/index.html
+++ b/content/docs/zh-CN/next/concepts-tiered-storage/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/concepts-topic-compaction.html b/content/docs/zh-CN/next/concepts-topic-compaction.html
index f535571..35a603d 100644
--- a/content/docs/zh-CN/next/concepts-topic-compaction.html
+++ b/content/docs/zh-CN/next/concepts-topic-compaction.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/concepts-topic-compaction/index.html b/content/docs/zh-CN/next/concepts-topic-compaction/index.html
index f535571..35a603d 100644
--- a/content/docs/zh-CN/next/concepts-topic-compaction/index.html
+++ b/content/docs/zh-CN/next/concepts-topic-compaction/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/cookbooks-bookkeepermetadata.html b/content/docs/zh-CN/next/cookbooks-bookkeepermetadata.html
index 191afb1..707ed18 100644
--- a/content/docs/zh-CN/next/cookbooks-bookkeepermetadata.html
+++ b/content/docs/zh-CN/next/cookbooks-bookkeepermetadata.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/cookbooks-bookkeepermetadata/index.html b/content/docs/zh-CN/next/cookbooks-bookkeepermetadata/index.html
index 191afb1..707ed18 100644
--- a/content/docs/zh-CN/next/cookbooks-bookkeepermetadata/index.html
+++ b/content/docs/zh-CN/next/cookbooks-bookkeepermetadata/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/cookbooks-compaction.html b/content/docs/zh-CN/next/cookbooks-compaction.html
index ec0158d..1a1eeb7 100644
--- a/content/docs/zh-CN/next/cookbooks-compaction.html
+++ b/content/docs/zh-CN/next/cookbooks-compaction.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/cookbooks-compaction/index.html b/content/docs/zh-CN/next/cookbooks-compaction/index.html
index ec0158d..1a1eeb7 100644
--- a/content/docs/zh-CN/next/cookbooks-compaction/index.html
+++ b/content/docs/zh-CN/next/cookbooks-compaction/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/cookbooks-deduplication.html b/content/docs/zh-CN/next/cookbooks-deduplication.html
index cd766c0..62521c9 100644
--- a/content/docs/zh-CN/next/cookbooks-deduplication.html
+++ b/content/docs/zh-CN/next/cookbooks-deduplication.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -79,7 +79,7 @@
 <blockquote>
 <p>For a more thorough theoretical explanation of message deduplication, see the <a href="/docs/zh-CN/next/concepts-messaging#message-deduplication">Concepts and Architecture</a> document.</p>
 </blockquote>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" 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. [...]
+<h2><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 [...]
 <p>Message deduplication can be enabled and disabled on a per-namespace basis. By default, it is <em>disabled</em> on all namespaces and can enabled in the following ways:</p>
 <ul>
 <li>Using the <a href="#enabling"><code>pulsar-admin namespaces</code></a> interface</li>
@@ -163,7 +163,7 @@ Producer producer;
 
 Result result = client.createProducer(topic, producerConfig, producer);
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/next/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a href="#configuration-for-message-dedupli [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/next/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#configuration-for-message-deduplication">Configur [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/next/cookbooks-deduplication/index.html b/content/docs/zh-CN/next/cookbooks-deduplication/index.html
index cd766c0..62521c9 100644
--- a/content/docs/zh-CN/next/cookbooks-deduplication/index.html
+++ b/content/docs/zh-CN/next/cookbooks-deduplication/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -79,7 +79,7 @@
 <blockquote>
 <p>For a more thorough theoretical explanation of message deduplication, see the <a href="/docs/zh-CN/next/concepts-messaging#message-deduplication">Concepts and Architecture</a> document.</p>
 </blockquote>
-<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" 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. [...]
+<h2><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 [...]
 <p>Message deduplication can be enabled and disabled on a per-namespace basis. By default, it is <em>disabled</em> on all namespaces and can enabled in the following ways:</p>
 <ul>
 <li>Using the <a href="#enabling"><code>pulsar-admin namespaces</code></a> interface</li>
@@ -163,7 +163,7 @@ Producer producer;
 
 Result result = client.createProducer(topic, producerConfig, producer);
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/next/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#how-it-works">How it works</a></li><li><a href="#configuration-for-message-dedupli [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/cookbooks-compaction"><span class="arrow-prev">← </span><span>Topic compaction</span></a><a class="docs-next button" href="/docs/zh-CN/next/cookbooks-non-persistent"><span>非持久化消息</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#运作模式">运作模式</a></li><li><a href="#configuration-for-message-deduplication">Configur [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/next/cookbooks-encryption.html b/content/docs/zh-CN/next/cookbooks-encryption.html
index 4c2364d..6a8d1ba 100644
--- a/content/docs/zh-CN/next/cookbooks-encryption.html
+++ b/content/docs/zh-CN/next/cookbooks-encryption.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/cookbooks-encryption/index.html b/content/docs/zh-CN/next/cookbooks-encryption/index.html
index 4c2364d..6a8d1ba 100644
--- a/content/docs/zh-CN/next/cookbooks-encryption/index.html
+++ b/content/docs/zh-CN/next/cookbooks-encryption/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/cookbooks-message-queue.html b/content/docs/zh-CN/next/cookbooks-message-queue.html
index b6f08f4..a88b5b9 100644
--- a/content/docs/zh-CN/next/cookbooks-message-queue.html
+++ b/content/docs/zh-CN/next/cookbooks-message-queue.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/cookbooks-message-queue/index.html b/content/docs/zh-CN/next/cookbooks-message-queue/index.html
index b6f08f4..a88b5b9 100644
--- a/content/docs/zh-CN/next/cookbooks-message-queue/index.html
+++ b/content/docs/zh-CN/next/cookbooks-message-queue/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/cookbooks-non-persistent.html b/content/docs/zh-CN/next/cookbooks-non-persistent.html
index e22a098..c3f5645 100644
--- a/content/docs/zh-CN/next/cookbooks-non-persistent.html
+++ b/content/docs/zh-CN/next/cookbooks-non-persistent.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/cookbooks-non-persistent/index.html b/content/docs/zh-CN/next/cookbooks-non-persistent/index.html
index e22a098..c3f5645 100644
--- a/content/docs/zh-CN/next/cookbooks-non-persistent/index.html
+++ b/content/docs/zh-CN/next/cookbooks-non-persistent/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/cookbooks-partitioned.html b/content/docs/zh-CN/next/cookbooks-partitioned.html
index cfcdd1a..c89c741 100644
--- a/content/docs/zh-CN/next/cookbooks-partitioned.html
+++ b/content/docs/zh-CN/next/cookbooks-partitioned.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/cookbooks-partitioned/index.html b/content/docs/zh-CN/next/cookbooks-partitioned/index.html
index cfcdd1a..c89c741 100644
--- a/content/docs/zh-CN/next/cookbooks-partitioned/index.html
+++ b/content/docs/zh-CN/next/cookbooks-partitioned/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/cookbooks-retention-expiry.html b/content/docs/zh-CN/next/cookbooks-retention-expiry.html
index 9fa485d..bd10f94 100644
--- a/content/docs/zh-CN/next/cookbooks-retention-expiry.html
+++ b/content/docs/zh-CN/next/cookbooks-retention-expiry.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/cookbooks-retention-expiry/index.html b/content/docs/zh-CN/next/cookbooks-retention-expiry/index.html
index 9fa485d..bd10f94 100644
--- a/content/docs/zh-CN/next/cookbooks-retention-expiry/index.html
+++ b/content/docs/zh-CN/next/cookbooks-retention-expiry/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/cookbooks-tiered-storage.html b/content/docs/zh-CN/next/cookbooks-tiered-storage.html
index 339c44e..ea07519 100644
--- a/content/docs/zh-CN/next/cookbooks-tiered-storage.html
+++ b/content/docs/zh-CN/next/cookbooks-tiered-storage.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/cookbooks-tiered-storage/index.html b/content/docs/zh-CN/next/cookbooks-tiered-storage/index.html
index 339c44e..ea07519 100644
--- a/content/docs/zh-CN/next/cookbooks-tiered-storage/index.html
+++ b/content/docs/zh-CN/next/cookbooks-tiered-storage/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/deploy-aws.html b/content/docs/zh-CN/next/deploy-aws.html
index 870cbac..e2cd5b6 100644
--- a/content/docs/zh-CN/next/deploy-aws.html
+++ b/content/docs/zh-CN/next/deploy-aws.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/deploy-aws/index.html b/content/docs/zh-CN/next/deploy-aws/index.html
index 870cbac..e2cd5b6 100644
--- a/content/docs/zh-CN/next/deploy-aws/index.html
+++ b/content/docs/zh-CN/next/deploy-aws/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/deploy-bare-metal-multi-cluster.html b/content/docs/zh-CN/next/deploy-bare-metal-multi-cluster.html
index cdb7013..71bd46d 100644
--- a/content/docs/zh-CN/next/deploy-bare-metal-multi-cluster.html
+++ b/content/docs/zh-CN/next/deploy-bare-metal-multi-cluster.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/deploy-bare-metal-multi-cluster/index.html b/content/docs/zh-CN/next/deploy-bare-metal-multi-cluster/index.html
index cdb7013..71bd46d 100644
--- a/content/docs/zh-CN/next/deploy-bare-metal-multi-cluster/index.html
+++ b/content/docs/zh-CN/next/deploy-bare-metal-multi-cluster/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/deploy-bare-metal.html b/content/docs/zh-CN/next/deploy-bare-metal.html
index 01e2018..1dd3bed 100644
--- a/content/docs/zh-CN/next/deploy-bare-metal.html
+++ b/content/docs/zh-CN/next/deploy-bare-metal.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/deploy-bare-metal/index.html b/content/docs/zh-CN/next/deploy-bare-metal/index.html
index 01e2018..1dd3bed 100644
--- a/content/docs/zh-CN/next/deploy-bare-metal/index.html
+++ b/content/docs/zh-CN/next/deploy-bare-metal/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/deploy-dcos.html b/content/docs/zh-CN/next/deploy-dcos.html
index 1c88089..3f62e59 100644
--- a/content/docs/zh-CN/next/deploy-dcos.html
+++ b/content/docs/zh-CN/next/deploy-dcos.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/deploy-dcos/index.html b/content/docs/zh-CN/next/deploy-dcos/index.html
index 1c88089..3f62e59 100644
--- a/content/docs/zh-CN/next/deploy-dcos/index.html
+++ b/content/docs/zh-CN/next/deploy-dcos/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/deploy-kubernetes.html b/content/docs/zh-CN/next/deploy-kubernetes.html
index 6480fa4..5c30624 100644
--- a/content/docs/zh-CN/next/deploy-kubernetes.html
+++ b/content/docs/zh-CN/next/deploy-kubernetes.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/deploy-kubernetes/index.html b/content/docs/zh-CN/next/deploy-kubernetes/index.html
index 6480fa4..5c30624 100644
--- a/content/docs/zh-CN/next/deploy-kubernetes/index.html
+++ b/content/docs/zh-CN/next/deploy-kubernetes/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/deploy-monitoring.html b/content/docs/zh-CN/next/deploy-monitoring.html
index 8d04309..042c93a 100644
--- a/content/docs/zh-CN/next/deploy-monitoring.html
+++ b/content/docs/zh-CN/next/deploy-monitoring.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/deploy-monitoring/index.html b/content/docs/zh-CN/next/deploy-monitoring/index.html
index 8d04309..042c93a 100644
--- a/content/docs/zh-CN/next/deploy-monitoring/index.html
+++ b/content/docs/zh-CN/next/deploy-monitoring/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/develop-binary-protocol.html b/content/docs/zh-CN/next/develop-binary-protocol.html
index 071d783..86b67ac 100644
--- a/content/docs/zh-CN/next/develop-binary-protocol.html
+++ b/content/docs/zh-CN/next/develop-binary-protocol.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
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 071d783..86b67ac 100644
--- a/content/docs/zh-CN/next/develop-binary-protocol/index.html
+++ b/content/docs/zh-CN/next/develop-binary-protocol/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/develop-cpp.html b/content/docs/zh-CN/next/develop-cpp.html
index 30e2168..bc19849 100644
--- a/content/docs/zh-CN/next/develop-cpp.html
+++ b/content/docs/zh-CN/next/develop-cpp.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/develop-cpp/index.html b/content/docs/zh-CN/next/develop-cpp/index.html
index 30e2168..bc19849 100644
--- a/content/docs/zh-CN/next/develop-cpp/index.html
+++ b/content/docs/zh-CN/next/develop-cpp/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/develop-load-manager.html b/content/docs/zh-CN/next/develop-load-manager.html
index 3a7e66e..d0abd1a 100644
--- a/content/docs/zh-CN/next/develop-load-manager.html
+++ b/content/docs/zh-CN/next/develop-load-manager.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/develop-load-manager/index.html b/content/docs/zh-CN/next/develop-load-manager/index.html
index 3a7e66e..d0abd1a 100644
--- a/content/docs/zh-CN/next/develop-load-manager/index.html
+++ b/content/docs/zh-CN/next/develop-load-manager/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/develop-tools.html b/content/docs/zh-CN/next/develop-tools.html
index 89a992e..75847f4 100644
--- a/content/docs/zh-CN/next/develop-tools.html
+++ b/content/docs/zh-CN/next/develop-tools.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/develop-tools/index.html b/content/docs/zh-CN/next/develop-tools/index.html
index 89a992e..75847f4 100644
--- a/content/docs/zh-CN/next/develop-tools/index.html
+++ b/content/docs/zh-CN/next/develop-tools/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/functions-api.html b/content/docs/zh-CN/next/functions-api.html
index e26e4e5..5964caa 100644
--- a/content/docs/zh-CN/next/functions-api.html
+++ b/content/docs/zh-CN/next/functions-api.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/functions-api/index.html b/content/docs/zh-CN/next/functions-api/index.html
index e26e4e5..5964caa 100644
--- a/content/docs/zh-CN/next/functions-api/index.html
+++ b/content/docs/zh-CN/next/functions-api/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/functions-cli.html b/content/docs/zh-CN/next/functions-cli.html
index d9e07cb..a9185b1 100644
--- a/content/docs/zh-CN/next/functions-cli.html
+++ b/content/docs/zh-CN/next/functions-cli.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/functions-cli/index.html b/content/docs/zh-CN/next/functions-cli/index.html
index d9e07cb..a9185b1 100644
--- a/content/docs/zh-CN/next/functions-cli/index.html
+++ b/content/docs/zh-CN/next/functions-cli/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/functions-debug.html b/content/docs/zh-CN/next/functions-debug.html
index ef0f834..f63f526 100644
--- a/content/docs/zh-CN/next/functions-debug.html
+++ b/content/docs/zh-CN/next/functions-debug.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/functions-debug/index.html b/content/docs/zh-CN/next/functions-debug/index.html
index ef0f834..f63f526 100644
--- a/content/docs/zh-CN/next/functions-debug/index.html
+++ b/content/docs/zh-CN/next/functions-debug/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/functions-debugging.html b/content/docs/zh-CN/next/functions-debugging.html
index ff71d98..7f756bb 100644
--- a/content/docs/zh-CN/next/functions-debugging.html
+++ b/content/docs/zh-CN/next/functions-debugging.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/functions-debugging/index.html b/content/docs/zh-CN/next/functions-debugging/index.html
index ff71d98..7f756bb 100644
--- a/content/docs/zh-CN/next/functions-debugging/index.html
+++ b/content/docs/zh-CN/next/functions-debugging/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/functions-deploy.html b/content/docs/zh-CN/next/functions-deploy.html
index ef9bbac..a16fa64 100644
--- a/content/docs/zh-CN/next/functions-deploy.html
+++ b/content/docs/zh-CN/next/functions-deploy.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/functions-deploy/index.html b/content/docs/zh-CN/next/functions-deploy/index.html
index ef9bbac..a16fa64 100644
--- a/content/docs/zh-CN/next/functions-deploy/index.html
+++ b/content/docs/zh-CN/next/functions-deploy/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/functions-deploying.html b/content/docs/zh-CN/next/functions-deploying.html
index 6115637..d510667 100644
--- a/content/docs/zh-CN/next/functions-deploying.html
+++ b/content/docs/zh-CN/next/functions-deploying.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/functions-deploying/index.html b/content/docs/zh-CN/next/functions-deploying/index.html
index 6115637..d510667 100644
--- a/content/docs/zh-CN/next/functions-deploying/index.html
+++ b/content/docs/zh-CN/next/functions-deploying/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/functions-develop.html b/content/docs/zh-CN/next/functions-develop.html
index 35c6234..0f5b977 100644
--- a/content/docs/zh-CN/next/functions-develop.html
+++ b/content/docs/zh-CN/next/functions-develop.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/functions-develop/index.html b/content/docs/zh-CN/next/functions-develop/index.html
index 35c6234..0f5b977 100644
--- a/content/docs/zh-CN/next/functions-develop/index.html
+++ b/content/docs/zh-CN/next/functions-develop/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/functions-guarantees.html b/content/docs/zh-CN/next/functions-guarantees.html
index fc77223..2422b07 100644
--- a/content/docs/zh-CN/next/functions-guarantees.html
+++ b/content/docs/zh-CN/next/functions-guarantees.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/functions-guarantees/index.html b/content/docs/zh-CN/next/functions-guarantees/index.html
index fc77223..2422b07 100644
--- a/content/docs/zh-CN/next/functions-guarantees/index.html
+++ b/content/docs/zh-CN/next/functions-guarantees/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/functions-metrics.html b/content/docs/zh-CN/next/functions-metrics.html
index d3effd6..e4e172f 100644
--- a/content/docs/zh-CN/next/functions-metrics.html
+++ b/content/docs/zh-CN/next/functions-metrics.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/functions-metrics/index.html b/content/docs/zh-CN/next/functions-metrics/index.html
index d3effd6..e4e172f 100644
--- a/content/docs/zh-CN/next/functions-metrics/index.html
+++ b/content/docs/zh-CN/next/functions-metrics/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/functions-overview-new.html b/content/docs/zh-CN/next/functions-overview-new.html
index 6a9f67c..36e41bb 100644
--- a/content/docs/zh-CN/next/functions-overview-new.html
+++ b/content/docs/zh-CN/next/functions-overview-new.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/functions-overview-new/index.html b/content/docs/zh-CN/next/functions-overview-new/index.html
index 6a9f67c..36e41bb 100644
--- a/content/docs/zh-CN/next/functions-overview-new/index.html
+++ b/content/docs/zh-CN/next/functions-overview-new/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/functions-overview.html b/content/docs/zh-CN/next/functions-overview.html
index 33f7b55..689edad 100644
--- a/content/docs/zh-CN/next/functions-overview.html
+++ b/content/docs/zh-CN/next/functions-overview.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/functions-overview/index.html b/content/docs/zh-CN/next/functions-overview/index.html
index 33f7b55..689edad 100644
--- a/content/docs/zh-CN/next/functions-overview/index.html
+++ b/content/docs/zh-CN/next/functions-overview/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/functions-quickstart.html b/content/docs/zh-CN/next/functions-quickstart.html
index 70dc19f..ee23b18 100644
--- a/content/docs/zh-CN/next/functions-quickstart.html
+++ b/content/docs/zh-CN/next/functions-quickstart.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/functions-quickstart/index.html b/content/docs/zh-CN/next/functions-quickstart/index.html
index 70dc19f..ee23b18 100644
--- a/content/docs/zh-CN/next/functions-quickstart/index.html
+++ b/content/docs/zh-CN/next/functions-quickstart/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/functions-runtime.html b/content/docs/zh-CN/next/functions-runtime.html
index 0620de1..abd5a6a 100644
--- a/content/docs/zh-CN/next/functions-runtime.html
+++ b/content/docs/zh-CN/next/functions-runtime.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/functions-runtime/index.html b/content/docs/zh-CN/next/functions-runtime/index.html
index 0620de1..abd5a6a 100644
--- a/content/docs/zh-CN/next/functions-runtime/index.html
+++ b/content/docs/zh-CN/next/functions-runtime/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/functions-state.html b/content/docs/zh-CN/next/functions-state.html
index 8f3053f..bb7fd7f 100644
--- a/content/docs/zh-CN/next/functions-state.html
+++ b/content/docs/zh-CN/next/functions-state.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/functions-state/index.html b/content/docs/zh-CN/next/functions-state/index.html
index 8f3053f..bb7fd7f 100644
--- a/content/docs/zh-CN/next/functions-state/index.html
+++ b/content/docs/zh-CN/next/functions-state/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/functions-worker.html b/content/docs/zh-CN/next/functions-worker.html
index df6c8a2..c8f2096 100644
--- a/content/docs/zh-CN/next/functions-worker.html
+++ b/content/docs/zh-CN/next/functions-worker.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/functions-worker/index.html b/content/docs/zh-CN/next/functions-worker/index.html
index df6c8a2..c8f2096 100644
--- a/content/docs/zh-CN/next/functions-worker/index.html
+++ b/content/docs/zh-CN/next/functions-worker/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/io-cdc.html b/content/docs/zh-CN/next/io-cdc.html
index c98a474..614c02f 100644
--- a/content/docs/zh-CN/next/io-cdc.html
+++ b/content/docs/zh-CN/next/io-cdc.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/io-cdc/index.html b/content/docs/zh-CN/next/io-cdc/index.html
index c98a474..614c02f 100644
--- a/content/docs/zh-CN/next/io-cdc/index.html
+++ b/content/docs/zh-CN/next/io-cdc/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/io-connectors.html b/content/docs/zh-CN/next/io-connectors.html
index 0aca94b..20b0238 100644
--- a/content/docs/zh-CN/next/io-connectors.html
+++ b/content/docs/zh-CN/next/io-connectors.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/io-connectors/index.html b/content/docs/zh-CN/next/io-connectors/index.html
index 0aca94b..20b0238 100644
--- a/content/docs/zh-CN/next/io-connectors/index.html
+++ b/content/docs/zh-CN/next/io-connectors/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/io-develop.html b/content/docs/zh-CN/next/io-develop.html
index 67b08b2..eb6a914 100644
--- a/content/docs/zh-CN/next/io-develop.html
+++ b/content/docs/zh-CN/next/io-develop.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/io-develop/index.html b/content/docs/zh-CN/next/io-develop/index.html
index 67b08b2..eb6a914 100644
--- a/content/docs/zh-CN/next/io-develop/index.html
+++ b/content/docs/zh-CN/next/io-develop/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/io-managing.html b/content/docs/zh-CN/next/io-managing.html
index 97bf27d..ba71cad 100644
--- a/content/docs/zh-CN/next/io-managing.html
+++ b/content/docs/zh-CN/next/io-managing.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/io-managing/index.html b/content/docs/zh-CN/next/io-managing/index.html
index 97bf27d..ba71cad 100644
--- a/content/docs/zh-CN/next/io-managing/index.html
+++ b/content/docs/zh-CN/next/io-managing/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/io-overview.html b/content/docs/zh-CN/next/io-overview.html
index 2e5e1d1..9340d56 100644
--- a/content/docs/zh-CN/next/io-overview.html
+++ b/content/docs/zh-CN/next/io-overview.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/io-overview/index.html b/content/docs/zh-CN/next/io-overview/index.html
index 2e5e1d1..9340d56 100644
--- a/content/docs/zh-CN/next/io-overview/index.html
+++ b/content/docs/zh-CN/next/io-overview/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/io-quickstart.html b/content/docs/zh-CN/next/io-quickstart.html
index 421cfec..cc26b47 100644
--- a/content/docs/zh-CN/next/io-quickstart.html
+++ b/content/docs/zh-CN/next/io-quickstart.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/io-quickstart/index.html b/content/docs/zh-CN/next/io-quickstart/index.html
index 421cfec..cc26b47 100644
--- a/content/docs/zh-CN/next/io-quickstart/index.html
+++ b/content/docs/zh-CN/next/io-quickstart/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/pulsar-2.0.html b/content/docs/zh-CN/next/pulsar-2.0.html
index d12b91a..60224c5 100644
--- a/content/docs/zh-CN/next/pulsar-2.0.html
+++ b/content/docs/zh-CN/next/pulsar-2.0.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/pulsar-2.0/index.html b/content/docs/zh-CN/next/pulsar-2.0/index.html
index d12b91a..60224c5 100644
--- a/content/docs/zh-CN/next/pulsar-2.0/index.html
+++ b/content/docs/zh-CN/next/pulsar-2.0/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/pulsar-admin.html b/content/docs/zh-CN/next/pulsar-admin.html
index 8e5ca45..8f6c71a 100644
--- a/content/docs/zh-CN/next/pulsar-admin.html
+++ b/content/docs/zh-CN/next/pulsar-admin.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/pulsar-admin/index.html b/content/docs/zh-CN/next/pulsar-admin/index.html
index 8e5ca45..8f6c71a 100644
--- a/content/docs/zh-CN/next/pulsar-admin/index.html
+++ b/content/docs/zh-CN/next/pulsar-admin/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/reference-cli-tools.html b/content/docs/zh-CN/next/reference-cli-tools.html
index 6820ac6..012c7c3 100644
--- a/content/docs/zh-CN/next/reference-cli-tools.html
+++ b/content/docs/zh-CN/next/reference-cli-tools.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/reference-cli-tools/index.html b/content/docs/zh-CN/next/reference-cli-tools/index.html
index 6820ac6..012c7c3 100644
--- a/content/docs/zh-CN/next/reference-cli-tools/index.html
+++ b/content/docs/zh-CN/next/reference-cli-tools/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/reference-configuration.html b/content/docs/zh-CN/next/reference-configuration.html
index 6eac93d..2676188 100644
--- a/content/docs/zh-CN/next/reference-configuration.html
+++ b/content/docs/zh-CN/next/reference-configuration.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/reference-configuration/index.html b/content/docs/zh-CN/next/reference-configuration/index.html
index 6eac93d..2676188 100644
--- a/content/docs/zh-CN/next/reference-configuration/index.html
+++ b/content/docs/zh-CN/next/reference-configuration/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/reference-connector-admin.html b/content/docs/zh-CN/next/reference-connector-admin.html
index 55d2a40..e6d84ab 100644
--- a/content/docs/zh-CN/next/reference-connector-admin.html
+++ b/content/docs/zh-CN/next/reference-connector-admin.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/reference-connector-admin/index.html b/content/docs/zh-CN/next/reference-connector-admin/index.html
index 55d2a40..e6d84ab 100644
--- a/content/docs/zh-CN/next/reference-connector-admin/index.html
+++ b/content/docs/zh-CN/next/reference-connector-admin/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/reference-metrics.html b/content/docs/zh-CN/next/reference-metrics.html
index 6f62105..a311d27 100644
--- a/content/docs/zh-CN/next/reference-metrics.html
+++ b/content/docs/zh-CN/next/reference-metrics.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/reference-metrics/index.html b/content/docs/zh-CN/next/reference-metrics/index.html
index 6f62105..a311d27 100644
--- a/content/docs/zh-CN/next/reference-metrics/index.html
+++ b/content/docs/zh-CN/next/reference-metrics/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/reference-terminology.html b/content/docs/zh-CN/next/reference-terminology.html
index 41f987d..5a14577 100644
--- a/content/docs/zh-CN/next/reference-terminology.html
+++ b/content/docs/zh-CN/next/reference-terminology.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/reference-terminology/index.html b/content/docs/zh-CN/next/reference-terminology/index.html
index 41f987d..5a14577 100644
--- a/content/docs/zh-CN/next/reference-terminology/index.html
+++ b/content/docs/zh-CN/next/reference-terminology/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/schema-evolution-compatibility.html b/content/docs/zh-CN/next/schema-evolution-compatibility.html
index 96925be..6cb2253 100644
--- a/content/docs/zh-CN/next/schema-evolution-compatibility.html
+++ b/content/docs/zh-CN/next/schema-evolution-compatibility.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/schema-evolution-compatibility/index.html b/content/docs/zh-CN/next/schema-evolution-compatibility/index.html
index 96925be..6cb2253 100644
--- a/content/docs/zh-CN/next/schema-evolution-compatibility/index.html
+++ b/content/docs/zh-CN/next/schema-evolution-compatibility/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/schema-get-started.html b/content/docs/zh-CN/next/schema-get-started.html
index e6a3f94..914d3b1 100644
--- a/content/docs/zh-CN/next/schema-get-started.html
+++ b/content/docs/zh-CN/next/schema-get-started.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/schema-get-started/index.html b/content/docs/zh-CN/next/schema-get-started/index.html
index e6a3f94..914d3b1 100644
--- a/content/docs/zh-CN/next/schema-get-started/index.html
+++ b/content/docs/zh-CN/next/schema-get-started/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/schema-manage.html b/content/docs/zh-CN/next/schema-manage.html
index 28521ee..1e46893 100644
--- a/content/docs/zh-CN/next/schema-manage.html
+++ b/content/docs/zh-CN/next/schema-manage.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/schema-manage/index.html b/content/docs/zh-CN/next/schema-manage/index.html
index 28521ee..1e46893 100644
--- a/content/docs/zh-CN/next/schema-manage/index.html
+++ b/content/docs/zh-CN/next/schema-manage/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/schema-understand.html b/content/docs/zh-CN/next/schema-understand.html
index 3b5433f..0862ae2 100644
--- a/content/docs/zh-CN/next/schema-understand.html
+++ b/content/docs/zh-CN/next/schema-understand.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/schema-understand/index.html b/content/docs/zh-CN/next/schema-understand/index.html
index 3b5433f..0862ae2 100644
--- a/content/docs/zh-CN/next/schema-understand/index.html
+++ b/content/docs/zh-CN/next/schema-understand/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/security-athenz.html b/content/docs/zh-CN/next/security-athenz.html
index 214cce7..c0df9aa 100644
--- a/content/docs/zh-CN/next/security-athenz.html
+++ b/content/docs/zh-CN/next/security-athenz.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/security-athenz/index.html b/content/docs/zh-CN/next/security-athenz/index.html
index 214cce7..c0df9aa 100644
--- a/content/docs/zh-CN/next/security-athenz/index.html
+++ b/content/docs/zh-CN/next/security-athenz/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/security-authorization.html b/content/docs/zh-CN/next/security-authorization.html
index 0964733..b8d0a14 100644
--- a/content/docs/zh-CN/next/security-authorization.html
+++ b/content/docs/zh-CN/next/security-authorization.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/security-authorization/index.html b/content/docs/zh-CN/next/security-authorization/index.html
index 0964733..b8d0a14 100644
--- a/content/docs/zh-CN/next/security-authorization/index.html
+++ b/content/docs/zh-CN/next/security-authorization/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/security-encryption.html b/content/docs/zh-CN/next/security-encryption.html
index 6c34301..9af7dad 100644
--- a/content/docs/zh-CN/next/security-encryption.html
+++ b/content/docs/zh-CN/next/security-encryption.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/security-encryption/index.html b/content/docs/zh-CN/next/security-encryption/index.html
index 6c34301..9af7dad 100644
--- a/content/docs/zh-CN/next/security-encryption/index.html
+++ b/content/docs/zh-CN/next/security-encryption/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/security-extending.html b/content/docs/zh-CN/next/security-extending.html
index 29d839f..6b78501 100644
--- a/content/docs/zh-CN/next/security-extending.html
+++ b/content/docs/zh-CN/next/security-extending.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/security-extending/index.html b/content/docs/zh-CN/next/security-extending/index.html
index 29d839f..6b78501 100644
--- a/content/docs/zh-CN/next/security-extending/index.html
+++ b/content/docs/zh-CN/next/security-extending/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/security-kerberos.html b/content/docs/zh-CN/next/security-kerberos.html
index 3554caa..aaf3e54 100644
--- a/content/docs/zh-CN/next/security-kerberos.html
+++ b/content/docs/zh-CN/next/security-kerberos.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/security-kerberos/index.html b/content/docs/zh-CN/next/security-kerberos/index.html
index 3554caa..aaf3e54 100644
--- a/content/docs/zh-CN/next/security-kerberos/index.html
+++ b/content/docs/zh-CN/next/security-kerberos/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/security-overview.html b/content/docs/zh-CN/next/security-overview.html
index 8758d64..bed2973 100644
--- a/content/docs/zh-CN/next/security-overview.html
+++ b/content/docs/zh-CN/next/security-overview.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/security-overview/index.html b/content/docs/zh-CN/next/security-overview/index.html
index 8758d64..bed2973 100644
--- a/content/docs/zh-CN/next/security-overview/index.html
+++ b/content/docs/zh-CN/next/security-overview/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/security-tls-authentication.html b/content/docs/zh-CN/next/security-tls-authentication.html
index 50df8ed..2d59b34 100644
--- a/content/docs/zh-CN/next/security-tls-authentication.html
+++ b/content/docs/zh-CN/next/security-tls-authentication.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/security-tls-authentication/index.html b/content/docs/zh-CN/next/security-tls-authentication/index.html
index 50df8ed..2d59b34 100644
--- a/content/docs/zh-CN/next/security-tls-authentication/index.html
+++ b/content/docs/zh-CN/next/security-tls-authentication/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/security-tls-transport.html b/content/docs/zh-CN/next/security-tls-transport.html
index 81df6f3..d1f2d64 100644
--- a/content/docs/zh-CN/next/security-tls-transport.html
+++ b/content/docs/zh-CN/next/security-tls-transport.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/security-tls-transport/index.html b/content/docs/zh-CN/next/security-tls-transport/index.html
index 81df6f3..d1f2d64 100644
--- a/content/docs/zh-CN/next/security-tls-transport/index.html
+++ b/content/docs/zh-CN/next/security-tls-transport/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/security-token-admin.html b/content/docs/zh-CN/next/security-token-admin.html
index 4113170..70ebe06 100644
--- a/content/docs/zh-CN/next/security-token-admin.html
+++ b/content/docs/zh-CN/next/security-token-admin.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/security-token-admin/index.html b/content/docs/zh-CN/next/security-token-admin/index.html
index 4113170..70ebe06 100644
--- a/content/docs/zh-CN/next/security-token-admin/index.html
+++ b/content/docs/zh-CN/next/security-token-admin/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/security-token-client.html b/content/docs/zh-CN/next/security-token-client.html
index 11aa7b1..940698d 100644
--- a/content/docs/zh-CN/next/security-token-client.html
+++ b/content/docs/zh-CN/next/security-token-client.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/security-token-client/index.html b/content/docs/zh-CN/next/security-token-client/index.html
index 11aa7b1..940698d 100644
--- a/content/docs/zh-CN/next/security-token-client/index.html
+++ b/content/docs/zh-CN/next/security-token-client/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/sql-deployment-configurations.html b/content/docs/zh-CN/next/sql-deployment-configurations.html
index b48db55..25b9b2b 100644
--- a/content/docs/zh-CN/next/sql-deployment-configurations.html
+++ b/content/docs/zh-CN/next/sql-deployment-configurations.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/sql-deployment-configurations/index.html b/content/docs/zh-CN/next/sql-deployment-configurations/index.html
index b48db55..25b9b2b 100644
--- a/content/docs/zh-CN/next/sql-deployment-configurations/index.html
+++ b/content/docs/zh-CN/next/sql-deployment-configurations/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/sql-getting-started.html b/content/docs/zh-CN/next/sql-getting-started.html
index 3cea461..bb5e83c 100644
--- a/content/docs/zh-CN/next/sql-getting-started.html
+++ b/content/docs/zh-CN/next/sql-getting-started.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/sql-getting-started/index.html b/content/docs/zh-CN/next/sql-getting-started/index.html
index 3cea461..bb5e83c 100644
--- a/content/docs/zh-CN/next/sql-getting-started/index.html
+++ b/content/docs/zh-CN/next/sql-getting-started/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/sql-overview.html b/content/docs/zh-CN/next/sql-overview.html
index 4a9db0e..44b7da4 100644
--- a/content/docs/zh-CN/next/sql-overview.html
+++ b/content/docs/zh-CN/next/sql-overview.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/sql-overview/index.html b/content/docs/zh-CN/next/sql-overview/index.html
index 4a9db0e..44b7da4 100644
--- a/content/docs/zh-CN/next/sql-overview/index.html
+++ b/content/docs/zh-CN/next/sql-overview/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/standalone-docker.html b/content/docs/zh-CN/next/standalone-docker.html
index a69fdbd..bedb837 100644
--- a/content/docs/zh-CN/next/standalone-docker.html
+++ b/content/docs/zh-CN/next/standalone-docker.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/standalone-docker/index.html b/content/docs/zh-CN/next/standalone-docker/index.html
index a69fdbd..bedb837 100644
--- a/content/docs/zh-CN/next/standalone-docker/index.html
+++ b/content/docs/zh-CN/next/standalone-docker/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/standalone.html b/content/docs/zh-CN/next/standalone.html
index 8c0d643..c2884af 100644
--- a/content/docs/zh-CN/next/standalone.html
+++ b/content/docs/zh-CN/next/standalone.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/zh-CN/next/standalone/index.html b/content/docs/zh-CN/next/standalone/index.html
index 8c0d643..c2884af 100644
--- a/content/docs/zh-CN/next/standalone/index.html
+++ b/content/docs/zh-CN/next/standalone/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </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="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/en/admin-rest-api.html b/content/en/admin-rest-api.html
index 738521f..93c6591 100644
--- a/content/en/admin-rest-api.html
+++ b/content/en/admin-rest-api.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swagger.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></script></ [...]
+      </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"><script base-url="/swagger/swagger.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section class="c [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/en/admin-rest-api/index.html b/content/en/admin-rest-api/index.html
index 738521f..93c6591 100644
--- a/content/en/admin-rest-api/index.html
+++ b/content/en/admin-rest-api/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swagger.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></script></ [...]
+      </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"><script base-url="/swagger/swagger.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section class="c [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/en/functions-rest-api.html b/content/en/functions-rest-api.html
index 98cf5d7..ccd2720 100644
--- a/content/en/functions-rest-api.html
+++ b/content/en/functions-rest-api.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swaggerfunctions.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></ [...]
+      </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"><script base-url="/swagger/swaggerfunctions.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/en/functions-rest-api/index.html b/content/en/functions-rest-api/index.html
index 98cf5d7..ccd2720 100644
--- a/content/en/functions-rest-api/index.html
+++ b/content/en/functions-rest-api/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swaggerfunctions.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></ [...]
+      </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"><script base-url="/swagger/swaggerfunctions.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/en/powered-by.html b/content/en/powered-by.html
index df8de13..acea414 100644
--- a/content/en/powered-by.html
+++ b/content/en/powered-by.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Companies using or contributing to Apache Pulsar</h1><hr/></header><div class="logo-wrapper"><div  [...]
+      </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>Companies using or contributing to Apache Pulsar</h1><hr/></header><div class="logo-wrapper"><div  [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/en/powered-by/index.html b/content/en/powered-by/index.html
index df8de13..acea414 100644
--- a/content/en/powered-by/index.html
+++ b/content/en/powered-by/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Companies using or contributing to Apache Pulsar</h1><hr/></header><div class="logo-wrapper"><div  [...]
+      </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>Companies using or contributing to Apache Pulsar</h1><hr/></header><div class="logo-wrapper"><div  [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/en/sink-rest-api.html b/content/en/sink-rest-api.html
index 785be8b..b059a22 100644
--- a/content/en/sink-rest-api.html
+++ b/content/en/sink-rest-api.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swaggersink.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></scrip [...]
+      </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"><script base-url="/swagger/swaggersink.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section clas [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/en/sink-rest-api/index.html b/content/en/sink-rest-api/index.html
index 785be8b..b059a22 100644
--- a/content/en/sink-rest-api/index.html
+++ b/content/en/sink-rest-api/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swaggersink.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></scrip [...]
+      </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"><script base-url="/swagger/swaggersink.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section clas [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/en/source-rest-api.html b/content/en/source-rest-api.html
index fff689f..6be154a 100644
--- a/content/en/source-rest-api.html
+++ b/content/en/source-rest-api.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swaggersource.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></scr [...]
+      </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"><script base-url="/swagger/swaggersource.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section cl [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/en/source-rest-api/index.html b/content/en/source-rest-api/index.html
index fff689f..6be154a 100644
--- a/content/en/source-rest-api/index.html
+++ b/content/en/source-rest-api/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swaggersource.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></scr [...]
+      </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"><script base-url="/swagger/swaggersource.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section cl [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/fr/admin-rest-api.html b/content/fr/admin-rest-api.html
index 4cc1895..66276fa 100644
--- a/content/fr/admin-rest-api.html
+++ b/content/fr/admin-rest-api.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swagger.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></script></ [...]
+      </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"><script base-url="/swagger/swagger.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section class="c [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/fr/admin-rest-api/index.html b/content/fr/admin-rest-api/index.html
index 4cc1895..66276fa 100644
--- a/content/fr/admin-rest-api/index.html
+++ b/content/fr/admin-rest-api/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swagger.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></script></ [...]
+      </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"><script base-url="/swagger/swagger.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section class="c [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/fr/functions-rest-api.html b/content/fr/functions-rest-api.html
index bbb76cb..fd725d2 100644
--- a/content/fr/functions-rest-api.html
+++ b/content/fr/functions-rest-api.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swaggerfunctions.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></ [...]
+      </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"><script base-url="/swagger/swaggerfunctions.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/fr/functions-rest-api/index.html b/content/fr/functions-rest-api/index.html
index bbb76cb..fd725d2 100644
--- a/content/fr/functions-rest-api/index.html
+++ b/content/fr/functions-rest-api/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swaggerfunctions.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></ [...]
+      </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"><script base-url="/swagger/swaggerfunctions.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/fr/powered-by.html b/content/fr/powered-by.html
index 64d99ab..9a5c892 100644
--- a/content/fr/powered-by.html
+++ b/content/fr/powered-by.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Companies using or contributing to Apache Pulsar</h1><hr/></header><div class="logo-wrapper"><div  [...]
+      </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>Companies using or contributing to Apache Pulsar</h1><hr/></header><div class="logo-wrapper"><div  [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/fr/powered-by/index.html b/content/fr/powered-by/index.html
index 64d99ab..9a5c892 100644
--- a/content/fr/powered-by/index.html
+++ b/content/fr/powered-by/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Companies using or contributing to Apache Pulsar</h1><hr/></header><div class="logo-wrapper"><div  [...]
+      </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>Companies using or contributing to Apache Pulsar</h1><hr/></header><div class="logo-wrapper"><div  [...]
       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 c19c214..bf57f4c 100644
--- a/content/fr/sink-rest-api.html
+++ b/content/fr/sink-rest-api.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swaggersink.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></scrip [...]
+      </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"><script base-url="/swagger/swaggersink.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section clas [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/fr/sink-rest-api/index.html b/content/fr/sink-rest-api/index.html
index c19c214..bf57f4c 100644
--- a/content/fr/sink-rest-api/index.html
+++ b/content/fr/sink-rest-api/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swaggersink.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></scrip [...]
+      </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"><script base-url="/swagger/swaggersink.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section clas [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/fr/source-rest-api.html b/content/fr/source-rest-api.html
index adb6205..a50679a 100644
--- a/content/fr/source-rest-api.html
+++ b/content/fr/source-rest-api.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swaggersource.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></scr [...]
+      </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"><script base-url="/swagger/swaggersource.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section cl [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/fr/source-rest-api/index.html b/content/fr/source-rest-api/index.html
index adb6205..a50679a 100644
--- a/content/fr/source-rest-api/index.html
+++ b/content/fr/source-rest-api/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swaggersource.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></scr [...]
+      </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"><script base-url="/swagger/swaggersource.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section cl [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/functions-rest-api.html b/content/functions-rest-api.html
index 98cf5d7..ccd2720 100644
--- a/content/functions-rest-api.html
+++ b/content/functions-rest-api.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swaggerfunctions.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></ [...]
+      </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"><script base-url="/swagger/swaggerfunctions.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/functions-rest-api/index.html b/content/functions-rest-api/index.html
index 98cf5d7..ccd2720 100644
--- a/content/functions-rest-api/index.html
+++ b/content/functions-rest-api/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swaggerfunctions.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></ [...]
+      </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"><script base-url="/swagger/swaggerfunctions.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/ja/admin-rest-api.html b/content/ja/admin-rest-api.html
index efb5254..d2e5d83 100644
--- a/content/ja/admin-rest-api.html
+++ b/content/ja/admin-rest-api.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swagger.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></script></ [...]
+      </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"><script base-url="/swagger/swagger.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section class="c [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/ja/admin-rest-api/index.html b/content/ja/admin-rest-api/index.html
index efb5254..d2e5d83 100644
--- a/content/ja/admin-rest-api/index.html
+++ b/content/ja/admin-rest-api/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swagger.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></script></ [...]
+      </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"><script base-url="/swagger/swagger.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section class="c [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/ja/functions-rest-api.html b/content/ja/functions-rest-api.html
index 62768c0..39731ea 100644
--- a/content/ja/functions-rest-api.html
+++ b/content/ja/functions-rest-api.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swaggerfunctions.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></ [...]
+      </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"><script base-url="/swagger/swaggerfunctions.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/ja/functions-rest-api/index.html b/content/ja/functions-rest-api/index.html
index 62768c0..39731ea 100644
--- a/content/ja/functions-rest-api/index.html
+++ b/content/ja/functions-rest-api/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swaggerfunctions.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></ [...]
+      </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"><script base-url="/swagger/swaggerfunctions.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/ja/powered-by.html b/content/ja/powered-by.html
index feea5b9..92f7dad 100644
--- a/content/ja/powered-by.html
+++ b/content/ja/powered-by.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Companies using or contributing to Apache Pulsar</h1><hr/></header><div class="logo-wrapper"><div  [...]
+      </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>Companies using or contributing to Apache Pulsar</h1><hr/></header><div class="logo-wrapper"><div  [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/ja/powered-by/index.html b/content/ja/powered-by/index.html
index feea5b9..92f7dad 100644
--- a/content/ja/powered-by/index.html
+++ b/content/ja/powered-by/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Companies using or contributing to Apache Pulsar</h1><hr/></header><div class="logo-wrapper"><div  [...]
+      </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>Companies using or contributing to Apache Pulsar</h1><hr/></header><div class="logo-wrapper"><div  [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/ja/sink-rest-api.html b/content/ja/sink-rest-api.html
index 889ea86..7bce386 100644
--- a/content/ja/sink-rest-api.html
+++ b/content/ja/sink-rest-api.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swaggersink.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></scrip [...]
+      </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"><script base-url="/swagger/swaggersink.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section clas [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/ja/sink-rest-api/index.html b/content/ja/sink-rest-api/index.html
index 889ea86..7bce386 100644
--- a/content/ja/sink-rest-api/index.html
+++ b/content/ja/sink-rest-api/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swaggersink.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></scrip [...]
+      </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"><script base-url="/swagger/swaggersink.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section clas [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/ja/source-rest-api.html b/content/ja/source-rest-api.html
index 379dd15..8e128b3 100644
--- a/content/ja/source-rest-api.html
+++ b/content/ja/source-rest-api.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swaggersource.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></scr [...]
+      </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"><script base-url="/swagger/swaggersource.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section cl [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/ja/source-rest-api/index.html b/content/ja/source-rest-api/index.html
index 379dd15..8e128b3 100644
--- a/content/ja/source-rest-api/index.html
+++ b/content/ja/source-rest-api/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swaggersource.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></scr [...]
+      </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"><script base-url="/swagger/swaggersource.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section cl [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/js/custom.js b/content/js/custom.js
index 555fd41..6b4ac94 100644
--- a/content/js/custom.js
+++ b/content/js/custom.js
@@ -64,6 +64,13 @@ window.addEventListener('load', function() {
     }
   });
 
+  const href = document.querySelector('a[href="/en/versions"]');
+  let version = href.textContent;
+
+  if (version === 'next') {
+    version = 'master'
+  }
+
   // setup rest api menu items in nav bar
   const restapis = document.querySelector("a[href='#restapis']").parentNode;
   const restapisMenu =
@@ -71,10 +78,10 @@ window.addEventListener('load', function() {
     '<a id="restapis-menu" href="#">REST APIs <span style="font-size: 0.75em">&nbsp;▼</span></a>' +
     '<div id="restapis-dropdown" class="hide">' +
       '<ul id="restapis-dropdown-items">' +
-        '<li><a href="/admin-rest-api">Admin REST API </a></li>' +
-        '<li><a href="/functions-rest-api">Functions </a></li>' +
-        '<li><a href="/source-rest-api">Sources </a></li>' +
-        '<li><a href="/sink-rest-api">Sinks </a></li>' +
+        '<li><a href="/admin-rest-api?version=' + version + '">Admin REST API </a></li>' +
+        '<li><a href="/functions-rest-api?version=' + version + '">Functions </a></li>' +
+        '<li><a href="/source-rest-api?version=' + version + '">Sources </a></li>' +
+        '<li><a href="/sink-rest-api?version=' + version + '">Sinks </a></li>' +
       '</ul>' +
     '</div>' +
     '</li>';
diff --git a/content/js/getSwaggerByVersion.js b/content/js/getSwaggerByVersion.js
new file mode 100644
index 0000000..4f3d2ca
--- /dev/null
+++ b/content/js/getSwaggerByVersion.js
@@ -0,0 +1,24 @@
+function getSwaggerByVersion(){
+    var params = window.location.search
+    params = params.replace('?', '')
+    const paramsList = params.split('&')
+    var version = 'master'
+    for (var i in paramsList) {
+        var param = paramsList[i].split('=')
+        if (param[0] === 'version') {
+            version = param[1]
+        }
+    }
+    const wrapper = document.querySelector('.pageContainer .wrapper')
+    const redoc = document.createElement('redoc');
+    redoc.setAttribute('spec-url', '/swagger/' + version + '/swagger.json')
+    redoc.setAttribute('lazy-rendering', 'true')
+    const redocLink = document.createElement('script');
+    redocLink.setAttribute('src', 'https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js')
+    const script = document.querySelector('.pageContainer .wrapper script')
+
+    wrapper.insertBefore(redoc, script)
+    wrapper.insertBefore(redocLink, script)
+
+}
+window.onload=getSwaggerByVersion
diff --git a/content/powered-by.html b/content/powered-by.html
index df8de13..acea414 100644
--- a/content/powered-by.html
+++ b/content/powered-by.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Companies using or contributing to Apache Pulsar</h1><hr/></header><div class="logo-wrapper"><div  [...]
+      </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>Companies using or contributing to Apache Pulsar</h1><hr/></header><div class="logo-wrapper"><div  [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/powered-by/index.html b/content/powered-by/index.html
index df8de13..acea414 100644
--- a/content/powered-by/index.html
+++ b/content/powered-by/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Companies using or contributing to Apache Pulsar</h1><hr/></header><div class="logo-wrapper"><div  [...]
+      </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>Companies using or contributing to Apache Pulsar</h1><hr/></header><div class="logo-wrapper"><div  [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/sink-rest-api.html b/content/sink-rest-api.html
index 785be8b..b059a22 100644
--- a/content/sink-rest-api.html
+++ b/content/sink-rest-api.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swaggersink.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></scrip [...]
+      </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"><script base-url="/swagger/swaggersink.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section clas [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/sink-rest-api/index.html b/content/sink-rest-api/index.html
index 785be8b..b059a22 100644
--- a/content/sink-rest-api/index.html
+++ b/content/sink-rest-api/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swaggersink.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></scrip [...]
+      </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"><script base-url="/swagger/swaggersink.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section clas [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/source-rest-api.html b/content/source-rest-api.html
index fff689f..6be154a 100644
--- a/content/source-rest-api.html
+++ b/content/source-rest-api.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swaggersource.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></scr [...]
+      </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"><script base-url="/swagger/swaggersource.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section cl [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/source-rest-api/index.html b/content/source-rest-api/index.html
index fff689f..6be154a 100644
--- a/content/source-rest-api/index.html
+++ b/content/source-rest-api/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swaggersource.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></scr [...]
+      </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"><script base-url="/swagger/swaggersource.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section cl [...]
       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
index 12be436..9b17c53 100644
--- a/content/swagger/2.5.0-SNAPSHOT/swagger.json
+++ b/content/swagger/2.5.0-SNAPSHOT/swagger.json
@@ -8866,6 +8866,14 @@
           "type" : "number",
           "format" : "double"
         },
+        "msgThroughputIn" : {
+          "type" : "number",
+          "format" : "double"
+        },
+        "msgThroughputOut" : {
+          "type" : "number",
+          "format" : "double"
+        },
         "cpu" : {
           "$ref" : "#/definitions/ResourceUsage"
         },
@@ -8885,14 +8893,6 @@
           "type" : "integer",
           "format" : "int64"
         },
-        "msgThroughputIn" : {
-          "type" : "number",
-          "format" : "double"
-        },
-        "msgThroughputOut" : {
-          "type" : "number",
-          "format" : "double"
-        },
         "underLoaded" : {
           "type" : "boolean"
         },
diff --git a/content/swagger/2.5.0-SNAPSHOT/swaggerfunctions.json b/content/swagger/2.5.0-SNAPSHOT/swaggerfunctions.json
index 782098a..494d891 100644
--- a/content/swagger/2.5.0-SNAPSHOT/swaggerfunctions.json
+++ b/content/swagger/2.5.0-SNAPSHOT/swaggerfunctions.json
@@ -1362,14 +1362,11 @@
         "topicName" : {
           "type" : "string"
         },
-        "replicatedFrom" : {
-          "type" : "string"
-        },
         "producerName" : {
           "type" : "string"
         },
-        "messageId" : {
-          "$ref" : "#/definitions/MessageId"
+        "replicatedFrom" : {
+          "type" : "string"
         },
         "sequenceId" : {
           "type" : "integer",
@@ -1392,6 +1389,9 @@
         "encryptionCtx" : {
           "$ref" : "#/definitions/EncryptionContext"
         },
+        "messageId" : {
+          "$ref" : "#/definitions/MessageId"
+        },
         "redeliveryCount" : {
           "type" : "integer",
           "format" : "int32"
diff --git a/content/swagger/swagger.json b/content/swagger/swagger.json
index 12be436..9b17c53 100644
--- a/content/swagger/swagger.json
+++ b/content/swagger/swagger.json
@@ -8866,6 +8866,14 @@
           "type" : "number",
           "format" : "double"
         },
+        "msgThroughputIn" : {
+          "type" : "number",
+          "format" : "double"
+        },
+        "msgThroughputOut" : {
+          "type" : "number",
+          "format" : "double"
+        },
         "cpu" : {
           "$ref" : "#/definitions/ResourceUsage"
         },
@@ -8885,14 +8893,6 @@
           "type" : "integer",
           "format" : "int64"
         },
-        "msgThroughputIn" : {
-          "type" : "number",
-          "format" : "double"
-        },
-        "msgThroughputOut" : {
-          "type" : "number",
-          "format" : "double"
-        },
         "underLoaded" : {
           "type" : "boolean"
         },
diff --git a/content/swagger/swaggerfunctions.json b/content/swagger/swaggerfunctions.json
index 782098a..494d891 100644
--- a/content/swagger/swaggerfunctions.json
+++ b/content/swagger/swaggerfunctions.json
@@ -1362,14 +1362,11 @@
         "topicName" : {
           "type" : "string"
         },
-        "replicatedFrom" : {
-          "type" : "string"
-        },
         "producerName" : {
           "type" : "string"
         },
-        "messageId" : {
-          "$ref" : "#/definitions/MessageId"
+        "replicatedFrom" : {
+          "type" : "string"
         },
         "sequenceId" : {
           "type" : "integer",
@@ -1392,6 +1389,9 @@
         "encryptionCtx" : {
           "$ref" : "#/definitions/EncryptionContext"
         },
+        "messageId" : {
+          "$ref" : "#/definitions/MessageId"
+        },
         "redeliveryCount" : {
           "type" : "integer",
           "format" : "int32"
diff --git a/content/zh-CN/admin-rest-api.html b/content/zh-CN/admin-rest-api.html
index c8b6e78..d955a6e 100644
--- a/content/zh-CN/admin-rest-api.html
+++ b/content/zh-CN/admin-rest-api.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swagger.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></script></ [...]
+      </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"><script base-url="/swagger/swagger.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section class="c [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/zh-CN/admin-rest-api/index.html b/content/zh-CN/admin-rest-api/index.html
index c8b6e78..d955a6e 100644
--- a/content/zh-CN/admin-rest-api/index.html
+++ b/content/zh-CN/admin-rest-api/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swagger.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></script></ [...]
+      </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"><script base-url="/swagger/swagger.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section class="c [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/zh-CN/functions-rest-api.html b/content/zh-CN/functions-rest-api.html
index b4417c8..4afa0b2 100644
--- a/content/zh-CN/functions-rest-api.html
+++ b/content/zh-CN/functions-rest-api.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swaggerfunctions.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></ [...]
+      </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"><script base-url="/swagger/swaggerfunctions.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/zh-CN/functions-rest-api/index.html b/content/zh-CN/functions-rest-api/index.html
index b4417c8..4afa0b2 100644
--- a/content/zh-CN/functions-rest-api/index.html
+++ b/content/zh-CN/functions-rest-api/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swaggerfunctions.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></ [...]
+      </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"><script base-url="/swagger/swaggerfunctions.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/zh-CN/powered-by.html b/content/zh-CN/powered-by.html
index 5cec1b6..e47cdc6 100644
--- a/content/zh-CN/powered-by.html
+++ b/content/zh-CN/powered-by.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Companies using or contributing to Apache Pulsar</h1><hr/></header><div class="logo-wrapper"><div  [...]
+      </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>Companies using or contributing to Apache Pulsar</h1><hr/></header><div class="logo-wrapper"><div  [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/zh-CN/powered-by/index.html b/content/zh-CN/powered-by/index.html
index 5cec1b6..e47cdc6 100644
--- a/content/zh-CN/powered-by/index.html
+++ b/content/zh-CN/powered-by/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Companies using or contributing to Apache Pulsar</h1><hr/></header><div class="logo-wrapper"><div  [...]
+      </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>Companies using or contributing to Apache Pulsar</h1><hr/></header><div class="logo-wrapper"><div  [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/zh-CN/sink-rest-api.html b/content/zh-CN/sink-rest-api.html
index 49a848d..24db3b5 100644
--- a/content/zh-CN/sink-rest-api.html
+++ b/content/zh-CN/sink-rest-api.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swaggersink.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></scrip [...]
+      </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"><script base-url="/swagger/swaggersink.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section clas [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/zh-CN/sink-rest-api/index.html b/content/zh-CN/sink-rest-api/index.html
index 49a848d..24db3b5 100644
--- a/content/zh-CN/sink-rest-api/index.html
+++ b/content/zh-CN/sink-rest-api/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swaggersink.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></scrip [...]
+      </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"><script base-url="/swagger/swaggersink.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section clas [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/zh-CN/source-rest-api.html b/content/zh-CN/source-rest-api.html
index b9cba32..b108e88 100644
--- a/content/zh-CN/source-rest-api.html
+++ b/content/zh-CN/source-rest-api.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swaggersource.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></scr [...]
+      </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"><script base-url="/swagger/swaggersource.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section cl [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/zh-CN/source-rest-api/index.html b/content/zh-CN/source-rest-api/index.html
index b9cba32..b108e88 100644
--- a/content/zh-CN/source-rest-api/index.html
+++ b/content/zh-CN/source-rest-api/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><redoc spec-url="/swagger/swaggersource.json" lazy-rendering="true"></redoc><script src="https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"></scr [...]
+      </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"><script base-url="/swagger/swaggersource.json" src="js/getSwaggerByVersion.js"></script></div></div></div><footer class="nav-footer" id="footer"><section cl [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +