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/03/25 08:55:28 UTC

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

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 15b52b8  Updated site at revision 1921bd9
15b52b8 is described below

commit 15b52b82d37628067ae05cb5e4e9c6e1629b5276
Author: jenkins <bu...@apache.org>
AuthorDate: Mon Mar 25 08:55:20 2019 +0000

    Updated site at revision 1921bd9
---
 .../admin-api-partitioned-topics.html              |  4 +-
 .../admin-api-partitioned-topics/index.html        |  4 +-
 .../2.1.0-incubating/client-libraries-go.html      |  8 +--
 .../client-libraries-go/index.html                 |  8 +--
 .../2.1.0-incubating/client-libraries-java.html    | 10 +--
 .../client-libraries-java/index.html               | 10 +--
 .../client-libraries-websocket.html                |  2 +-
 .../client-libraries-websocket/index.html          |  2 +-
 .../concepts-architecture-overview.html            |  2 +-
 .../concepts-architecture-overview/index.html      |  2 +-
 .../zh-CN/2.1.0-incubating/concepts-messaging.html |  6 +-
 .../2.1.0-incubating/concepts-messaging/index.html |  6 +-
 .../2.1.0-incubating/cookbooks-compaction.html     |  4 +-
 .../cookbooks-compaction/index.html                |  4 +-
 .../2.1.0-incubating/cookbooks-deduplication.html  |  6 +-
 .../cookbooks-deduplication/index.html             |  6 +-
 .../2.1.0-incubating/cookbooks-encryption.html     |  2 +-
 .../cookbooks-encryption/index.html                |  2 +-
 .../2.1.0-incubating/cookbooks-non-persistent.html |  2 +-
 .../cookbooks-non-persistent/index.html            |  2 +-
 .../2.1.0-incubating/cookbooks-partitioned.html    | 14 ++--
 .../cookbooks-partitioned/index.html               | 14 ++--
 .../cookbooks-retention-expiry.html                | 18 ++---
 .../cookbooks-retention-expiry/index.html          | 18 ++---
 .../deploy-bare-metal-multi-cluster.html           |  4 +-
 .../deploy-bare-metal-multi-cluster/index.html     |  4 +-
 .../zh-CN/2.1.0-incubating/deploy-bare-metal.html  | 34 +++++-----
 .../2.1.0-incubating/deploy-bare-metal/index.html  | 34 +++++-----
 .../docs/zh-CN/2.1.0-incubating/functions-api.html |  6 +-
 .../2.1.0-incubating/functions-api/index.html      |  6 +-
 .../2.1.0-incubating/functions-deploying.html      |  6 +-
 .../functions-deploying/index.html                 |  6 +-
 .../zh-CN/2.1.0-incubating/functions-overview.html |  4 +-
 .../2.1.0-incubating/functions-overview/index.html |  4 +-
 .../2.1.0-incubating/functions-quickstart.html     |  2 +-
 .../functions-quickstart/index.html                |  2 +-
 .../admin-api-partitioned-topics.html              |  4 +-
 .../admin-api-partitioned-topics/index.html        |  4 +-
 .../2.1.1-incubating/client-libraries-go.html      |  8 +--
 .../client-libraries-go/index.html                 |  8 +--
 .../2.1.1-incubating/client-libraries-java.html    | 10 +--
 .../client-libraries-java/index.html               | 10 +--
 .../client-libraries-websocket.html                |  2 +-
 .../client-libraries-websocket/index.html          |  2 +-
 .../concepts-architecture-overview.html            |  2 +-
 .../concepts-architecture-overview/index.html      |  2 +-
 .../zh-CN/2.1.1-incubating/concepts-messaging.html |  6 +-
 .../2.1.1-incubating/concepts-messaging/index.html |  6 +-
 .../2.1.1-incubating/cookbooks-compaction.html     |  4 +-
 .../cookbooks-compaction/index.html                |  4 +-
 .../2.1.1-incubating/cookbooks-deduplication.html  |  6 +-
 .../cookbooks-deduplication/index.html             |  6 +-
 .../2.1.1-incubating/cookbooks-encryption.html     |  2 +-
 .../cookbooks-encryption/index.html                |  2 +-
 .../2.1.1-incubating/cookbooks-non-persistent.html |  2 +-
 .../cookbooks-non-persistent/index.html            |  2 +-
 .../2.1.1-incubating/cookbooks-partitioned.html    | 14 ++--
 .../cookbooks-partitioned/index.html               | 14 ++--
 .../cookbooks-retention-expiry.html                | 18 ++---
 .../cookbooks-retention-expiry/index.html          | 18 ++---
 .../deploy-bare-metal-multi-cluster.html           |  4 +-
 .../deploy-bare-metal-multi-cluster/index.html     |  4 +-
 .../zh-CN/2.1.1-incubating/deploy-bare-metal.html  | 34 +++++-----
 .../2.1.1-incubating/deploy-bare-metal/index.html  | 34 +++++-----
 .../docs/zh-CN/2.1.1-incubating/functions-api.html |  6 +-
 .../2.1.1-incubating/functions-api/index.html      |  6 +-
 .../2.1.1-incubating/functions-deploying.html      |  6 +-
 .../functions-deploying/index.html                 |  6 +-
 .../zh-CN/2.1.1-incubating/functions-overview.html |  4 +-
 .../2.1.1-incubating/functions-overview/index.html |  4 +-
 .../2.1.1-incubating/functions-quickstart.html     |  2 +-
 .../functions-quickstart/index.html                |  2 +-
 .../zh-CN/2.2.0/admin-api-partitioned-topics.html  |  4 +-
 .../2.2.0/admin-api-partitioned-topics/index.html  |  4 +-
 content/docs/zh-CN/2.2.0/client-libraries-go.html  |  8 +--
 .../zh-CN/2.2.0/client-libraries-go/index.html     |  8 +--
 .../docs/zh-CN/2.2.0/client-libraries-java.html    | 10 +--
 .../zh-CN/2.2.0/client-libraries-java/index.html   | 10 +--
 .../zh-CN/2.2.0/client-libraries-websocket.html    |  2 +-
 .../2.2.0/client-libraries-websocket/index.html    |  2 +-
 .../2.2.0/concepts-architecture-overview.html      |  2 +-
 .../concepts-architecture-overview/index.html      |  2 +-
 content/docs/zh-CN/2.2.0/concepts-messaging.html   |  6 +-
 .../docs/zh-CN/2.2.0/concepts-messaging/index.html |  6 +-
 content/docs/zh-CN/2.2.0/cookbooks-compaction.html |  4 +-
 .../zh-CN/2.2.0/cookbooks-compaction/index.html    |  4 +-
 .../docs/zh-CN/2.2.0/cookbooks-deduplication.html  |  6 +-
 .../zh-CN/2.2.0/cookbooks-deduplication/index.html |  6 +-
 content/docs/zh-CN/2.2.0/cookbooks-encryption.html |  2 +-
 .../zh-CN/2.2.0/cookbooks-encryption/index.html    |  2 +-
 .../docs/zh-CN/2.2.0/cookbooks-non-persistent.html |  2 +-
 .../2.2.0/cookbooks-non-persistent/index.html      |  2 +-
 .../docs/zh-CN/2.2.0/cookbooks-partitioned.html    | 14 ++--
 .../zh-CN/2.2.0/cookbooks-partitioned/index.html   | 14 ++--
 .../zh-CN/2.2.0/cookbooks-retention-expiry.html    | 18 ++---
 .../2.2.0/cookbooks-retention-expiry/index.html    | 18 ++---
 .../2.2.0/deploy-bare-metal-multi-cluster.html     |  4 +-
 .../deploy-bare-metal-multi-cluster/index.html     |  4 +-
 content/docs/zh-CN/2.2.0/deploy-bare-metal.html    | 40 ++++++------
 .../docs/zh-CN/2.2.0/deploy-bare-metal/index.html  | 40 ++++++------
 content/docs/zh-CN/2.2.0/functions-api.html        |  6 +-
 content/docs/zh-CN/2.2.0/functions-api/index.html  |  6 +-
 content/docs/zh-CN/2.2.0/functions-deploying.html  |  6 +-
 .../zh-CN/2.2.0/functions-deploying/index.html     |  6 +-
 content/docs/zh-CN/2.2.0/functions-overview.html   |  4 +-
 .../docs/zh-CN/2.2.0/functions-overview/index.html |  4 +-
 content/docs/zh-CN/2.2.0/functions-quickstart.html |  2 +-
 .../zh-CN/2.2.0/functions-quickstart/index.html    |  2 +-
 content/docs/zh-CN/2.2.0/standalone.html           |  4 +-
 content/docs/zh-CN/2.2.0/standalone/index.html     |  4 +-
 .../zh-CN/2.2.1/admin-api-partitioned-topics.html  |  4 +-
 .../2.2.1/admin-api-partitioned-topics/index.html  |  4 +-
 content/docs/zh-CN/2.2.1/client-libraries-go.html  | 10 +--
 .../zh-CN/2.2.1/client-libraries-go/index.html     | 10 +--
 .../docs/zh-CN/2.2.1/client-libraries-java.html    | 14 ++--
 .../zh-CN/2.2.1/client-libraries-java/index.html   | 14 ++--
 .../zh-CN/2.2.1/client-libraries-websocket.html    |  2 +-
 .../2.2.1/client-libraries-websocket/index.html    |  2 +-
 .../2.2.1/concepts-architecture-overview.html      |  2 +-
 .../concepts-architecture-overview/index.html      |  2 +-
 content/docs/zh-CN/2.2.1/concepts-messaging.html   |  6 +-
 .../docs/zh-CN/2.2.1/concepts-messaging/index.html |  6 +-
 content/docs/zh-CN/2.2.1/cookbooks-compaction.html |  4 +-
 .../zh-CN/2.2.1/cookbooks-compaction/index.html    |  4 +-
 .../docs/zh-CN/2.2.1/cookbooks-deduplication.html  |  6 +-
 .../zh-CN/2.2.1/cookbooks-deduplication/index.html |  6 +-
 content/docs/zh-CN/2.2.1/cookbooks-encryption.html |  2 +-
 .../zh-CN/2.2.1/cookbooks-encryption/index.html    |  2 +-
 .../docs/zh-CN/2.2.1/cookbooks-non-persistent.html |  2 +-
 .../2.2.1/cookbooks-non-persistent/index.html      |  2 +-
 .../docs/zh-CN/2.2.1/cookbooks-partitioned.html    | 14 ++--
 .../zh-CN/2.2.1/cookbooks-partitioned/index.html   | 14 ++--
 .../zh-CN/2.2.1/cookbooks-retention-expiry.html    | 18 ++---
 .../2.2.1/cookbooks-retention-expiry/index.html    | 18 ++---
 .../2.2.1/deploy-bare-metal-multi-cluster.html     |  4 +-
 .../deploy-bare-metal-multi-cluster/index.html     |  4 +-
 content/docs/zh-CN/2.2.1/deploy-bare-metal.html    | 40 ++++++------
 .../docs/zh-CN/2.2.1/deploy-bare-metal/index.html  | 40 ++++++------
 content/docs/zh-CN/2.2.1/functions-api.html        |  6 +-
 content/docs/zh-CN/2.2.1/functions-api/index.html  |  6 +-
 content/docs/zh-CN/2.2.1/functions-deploying.html  |  6 +-
 .../zh-CN/2.2.1/functions-deploying/index.html     |  6 +-
 content/docs/zh-CN/2.2.1/functions-overview.html   |  6 +-
 .../docs/zh-CN/2.2.1/functions-overview/index.html |  6 +-
 content/docs/zh-CN/2.2.1/functions-quickstart.html |  2 +-
 .../zh-CN/2.2.1/functions-quickstart/index.html    |  2 +-
 content/docs/zh-CN/2.2.1/standalone.html           |  4 +-
 content/docs/zh-CN/2.2.1/standalone/index.html     |  4 +-
 .../docs/zh-CN/admin-api-partitioned-topics.html   |  4 +-
 .../zh-CN/admin-api-partitioned-topics/index.html  |  4 +-
 content/docs/zh-CN/administration-proxy.html       | 12 ++--
 content/docs/zh-CN/administration-proxy/index.html | 12 ++--
 content/docs/zh-CN/client-libraries-go.html        | 10 +--
 content/docs/zh-CN/client-libraries-go/index.html  | 10 +--
 content/docs/zh-CN/client-libraries-java.html      | 14 ++--
 .../docs/zh-CN/client-libraries-java/index.html    | 14 ++--
 content/docs/zh-CN/client-libraries-python.html    |  2 +-
 .../docs/zh-CN/client-libraries-python/index.html  |  2 +-
 content/docs/zh-CN/client-libraries-websocket.html |  2 +-
 .../zh-CN/client-libraries-websocket/index.html    |  2 +-
 .../docs/zh-CN/concepts-architecture-overview.html |  2 +-
 .../concepts-architecture-overview/index.html      |  2 +-
 content/docs/zh-CN/concepts-messaging.html         |  6 +-
 content/docs/zh-CN/concepts-messaging/index.html   |  6 +-
 content/docs/zh-CN/cookbooks-compaction.html       |  4 +-
 content/docs/zh-CN/cookbooks-compaction/index.html |  4 +-
 content/docs/zh-CN/cookbooks-deduplication.html    |  6 +-
 .../docs/zh-CN/cookbooks-deduplication/index.html  |  6 +-
 content/docs/zh-CN/cookbooks-encryption.html       |  2 +-
 content/docs/zh-CN/cookbooks-encryption/index.html |  2 +-
 content/docs/zh-CN/cookbooks-non-persistent.html   |  2 +-
 .../docs/zh-CN/cookbooks-non-persistent/index.html |  2 +-
 content/docs/zh-CN/cookbooks-partitioned.html      | 14 ++--
 .../docs/zh-CN/cookbooks-partitioned/index.html    | 14 ++--
 content/docs/zh-CN/cookbooks-retention-expiry.html | 22 +++----
 .../zh-CN/cookbooks-retention-expiry/index.html    | 22 +++----
 .../zh-CN/deploy-bare-metal-multi-cluster.html     |  4 +-
 .../deploy-bare-metal-multi-cluster/index.html     |  4 +-
 content/docs/zh-CN/deploy-bare-metal.html          | 42 ++++++------
 content/docs/zh-CN/deploy-bare-metal/index.html    | 42 ++++++------
 content/docs/zh-CN/functions-api.html              |  6 +-
 content/docs/zh-CN/functions-api/index.html        |  6 +-
 content/docs/zh-CN/functions-deploying.html        |  6 +-
 content/docs/zh-CN/functions-deploying/index.html  |  6 +-
 content/docs/zh-CN/functions-overview.html         |  6 +-
 content/docs/zh-CN/functions-overview/index.html   |  6 +-
 content/docs/zh-CN/functions-quickstart.html       |  4 +-
 content/docs/zh-CN/functions-quickstart/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   | 20 +++---
 .../next/admin-api-partitioned-topics/index.html   | 20 +++---
 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-schemas.html     |  2 +-
 .../docs/zh-CN/next/admin-api-schemas/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  |  2 +-
 .../zh-CN/next/administration-dashboard/index.html |  2 +-
 content/docs/zh-CN/next/administration-geo.html    |  2 +-
 .../docs/zh-CN/next/administration-geo/index.html  |  2 +-
 .../next/administration-load-distribution.html     |  2 +-
 .../administration-load-distribution/index.html    |  2 +-
 content/docs/zh-CN/next/administration-proxy.html  | 26 ++++----
 .../zh-CN/next/administration-proxy/index.html     | 26 ++++----
 content/docs/zh-CN/next/administration-stats.html  |  2 +-
 .../zh-CN/next/administration-stats/index.html     |  2 +-
 content/docs/zh-CN/next/administration-zk-bk.html  |  2 +-
 .../zh-CN/next/administration-zk-bk/index.html     |  2 +-
 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   | 10 +--
 .../docs/zh-CN/next/client-libraries-go/index.html | 10 +--
 content/docs/zh-CN/next/client-libraries-java.html |  4 +-
 .../zh-CN/next/client-libraries-java/index.html    |  4 +-
 .../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     |  4 +-
 .../next/client-libraries-websocket/index.html     |  4 +-
 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 |  4 +-
 .../next/concepts-architecture-overview/index.html |  4 +-
 .../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    |  8 +--
 .../docs/zh-CN/next/concepts-messaging/index.html  |  8 +--
 .../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-schema-registry.html  |  2 +-
 .../zh-CN/next/concepts-schema-registry/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  |  6 +-
 .../zh-CN/next/cookbooks-compaction/index.html     |  6 +-
 .../docs/zh-CN/next/cookbooks-deduplication.html   |  8 +--
 .../zh-CN/next/cookbooks-deduplication/index.html  |  8 +--
 content/docs/zh-CN/next/cookbooks-encryption.html  |  4 +-
 .../zh-CN/next/cookbooks-encryption/index.html     |  4 +-
 .../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  |  4 +-
 .../zh-CN/next/cookbooks-non-persistent/index.html |  4 +-
 content/docs/zh-CN/next/cookbooks-partitioned.html | 16 ++---
 .../zh-CN/next/cookbooks-partitioned/index.html    | 16 ++---
 .../zh-CN/next/cookbooks-retention-expiry.html     | 20 +++---
 .../next/cookbooks-retention-expiry/index.html     | 20 +++---
 .../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      |  6 +-
 .../deploy-bare-metal-multi-cluster/index.html     |  6 +-
 content/docs/zh-CN/next/deploy-bare-metal.html     | 76 +++++++++++-----------
 .../docs/zh-CN/next/deploy-bare-metal/index.html   | 76 +++++++++++-----------
 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-schema.html        |  2 +-
 content/docs/zh-CN/next/develop-schema/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         |  8 +--
 content/docs/zh-CN/next/functions-api/index.html   |  8 +--
 content/docs/zh-CN/next/functions-deploying.html   |  8 +--
 .../docs/zh-CN/next/functions-deploying/index.html |  8 +--
 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 +-
 content/docs/zh-CN/next/functions-overview.html    |  6 +-
 .../docs/zh-CN/next/functions-overview/index.html  |  6 +-
 content/docs/zh-CN/next/functions-quickstart.html  |  4 +-
 .../zh-CN/next/functions-quickstart/index.html     |  4 +-
 content/docs/zh-CN/next/functions-state.html       |  2 +-
 content/docs/zh-CN/next/functions-state/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 +-
 content/docs/zh-CN/next/reference-terminology.html |  2 +-
 .../zh-CN/next/reference-terminology/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-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            |  6 +-
 content/docs/zh-CN/next/standalone/index.html      |  6 +-
 content/docs/zh-CN/reference-cli-tools.html        |  2 +-
 content/docs/zh-CN/reference-cli-tools/index.html  |  2 +-
 content/docs/zh-CN/standalone.html                 |  4 +-
 content/docs/zh-CN/standalone/index.html           |  4 +-
 content/swagger/swagger.json                       | 38 +++++------
 367 files changed, 1141 insertions(+), 1141 deletions(-)

diff --git a/content/docs/zh-CN/2.1.0-incubating/admin-api-partitioned-topics.html b/content/docs/zh-CN/2.1.0-incubating/admin-api-partitioned-topics.html
index 67be6c5..7b842a7 100644
--- a/content/docs/zh-CN/2.1.0-incubating/admin-api-partitioned-topics.html
+++ b/content/docs/zh-CN/2.1.0-incubating/admin-api-partitioned-topics.html
@@ -78,7 +78,7 @@
 <h3><a class="anchor" aria-hidden="true" id="创建"></a><a href="#创建" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c [...]
 <p>在 Pulsar 中, 必须显式的创建分区主题。创建新的分区主题时,您需要提供主题的名称以及所需的分区的数量。</p>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-admin"></a><a href="#pulsar-admin" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>你可以使用<a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#create-partitioned-topic"><code>create-partitioned-topic</code></a>命令创建partitioned topic,并指定topic的名字;使用<code>-p</code> 或 <code>--partitions</code>标志指定分区数。 这里有一个示例:</p>
+<p>你可以使用<a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#create-partitioned-topic"><code>create-partitioned-topic</code></a>命令创建partitioned topic,并指定topic的名字;使用<code>-p</code> 或 <code>--partitions</code>标志指定分区数。 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin topics create-partitioned-topic \</span>
   persistent://my-tenant/my-namespace/my-topic \
   --partitions 4
@@ -102,7 +102,7 @@ admin.persistentTopics().createPartitionedTopic(topicName, numPartitions);
 </tbody>
 </table>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-admin-1"></a><a href="#pulsar-admin-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
-<p>You can see the number of partitions in a partitioned topic using the <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#get-partitioned-topic-metadata"><code>get-partitioned-topic-metadata</code></a> subcommand. 这里有一个示例:</p>
+<p>You can see the number of partitions in a partitioned topic using the <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#get-partitioned-topic-metadata"><code>get-partitioned-topic-metadata</code></a> subcommand. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics get-partitioned-topic-metadata \</span>
   persistent://my-tenant/my-namespace/my-topic
 {
diff --git a/content/docs/zh-CN/2.1.0-incubating/admin-api-partitioned-topics/index.html b/content/docs/zh-CN/2.1.0-incubating/admin-api-partitioned-topics/index.html
index 67be6c5..7b842a7 100644
--- a/content/docs/zh-CN/2.1.0-incubating/admin-api-partitioned-topics/index.html
+++ b/content/docs/zh-CN/2.1.0-incubating/admin-api-partitioned-topics/index.html
@@ -78,7 +78,7 @@
 <h3><a class="anchor" aria-hidden="true" id="创建"></a><a href="#创建" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c [...]
 <p>在 Pulsar 中, 必须显式的创建分区主题。创建新的分区主题时,您需要提供主题的名称以及所需的分区的数量。</p>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-admin"></a><a href="#pulsar-admin" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>你可以使用<a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#create-partitioned-topic"><code>create-partitioned-topic</code></a>命令创建partitioned topic,并指定topic的名字;使用<code>-p</code> 或 <code>--partitions</code>标志指定分区数。 这里有一个示例:</p>
+<p>你可以使用<a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#create-partitioned-topic"><code>create-partitioned-topic</code></a>命令创建partitioned topic,并指定topic的名字;使用<code>-p</code> 或 <code>--partitions</code>标志指定分区数。 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin topics create-partitioned-topic \</span>
   persistent://my-tenant/my-namespace/my-topic \
   --partitions 4
@@ -102,7 +102,7 @@ admin.persistentTopics().createPartitionedTopic(topicName, numPartitions);
 </tbody>
 </table>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-admin-1"></a><a href="#pulsar-admin-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
-<p>You can see the number of partitions in a partitioned topic using the <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#get-partitioned-topic-metadata"><code>get-partitioned-topic-metadata</code></a> subcommand. 这里有一个示例:</p>
+<p>You can see the number of partitions in a partitioned topic using the <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#get-partitioned-topic-metadata"><code>get-partitioned-topic-metadata</code></a> subcommand. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics get-partitioned-topic-metadata \</span>
   persistent://my-tenant/my-namespace/my-topic
 {
diff --git a/content/docs/zh-CN/2.1.0-incubating/client-libraries-go.html b/content/docs/zh-CN/2.1.0-incubating/client-libraries-go.html
index f081884..b7345dc 100644
--- a/content/docs/zh-CN/2.1.0-incubating/client-libraries-go.html
+++ b/content/docs/zh-CN/2.1.0-incubating/client-libraries-go.html
@@ -104,7 +104,7 @@
 <pre><code class="hljs css language-http">pulsar+ssl://pulsar.us-west.example.com:6651
 </code></pre>
 <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>In order to interact with Pulsar, you'll first need a <code>Client</code> object. You can create a client object using the <code>NewClient</code> function, passing in a <code>ClientOptions</code> object (more on configuration <a href="#client-configuration">below</a>). 这里有一个示例:</p>
+<p>In order to interact with Pulsar, you'll first need a <code>Client</code> object. You can create a client object using the <code>NewClient</code> function, passing in a <code>ClientOptions</code> object (more on configuration <a href="#client-configuration">below</a>). 下面是一个示例:</p>
 <pre><code class="hljs css language-go"><span class="hljs-keyword">import</span> (
     <span class="hljs-string">"log"</span>
     <span class="hljs-string">"runtime"</span>
@@ -358,7 +358,7 @@ consumer, err := client.Subscribe(consumerOpts)
 </tbody>
 </table>
 <h2><a class="anchor" aria-hidden="true" id="readers"></a><a href="#readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
-<p>Pulsar readers process messages from Pulsar topics. Readers are different from consumers because with readers you need to explicitly specify which message in the stream you want to begin with (consumers, on the other hand, automatically begin with the most recent unacked message). You can <a href="#reader-configuration">configure</a> Go readers using a <code>ReaderOptions</code> object. 这里有一个示例:</p>
+<p>Pulsar readers process messages from Pulsar topics. Readers are different from consumers because with readers you need to explicitly specify which message in the stream you want to begin with (consumers, on the other hand, automatically begin with the most recent unacked message). You can <a href="#reader-configuration">configure</a> Go readers using a <code>ReaderOptions</code> object. 下面是一个示例:</p>
 <pre><code class="hljs css language-go">reader, err := client.CreateReader(pulsar.ReaderOptions{
     Topic: <span class="hljs-string">"my-golang-topic"</span>,
     StartMessageId: pulsar.LatestMessage,
@@ -418,7 +418,7 @@ consumer, err := client.Subscribe(consumerOpts)
     }
 }
 </code></pre>
-<p>In the example above, the reader begins reading from the earliest available message (specified by <code>pulsar.EarliestMessage</code>). The reader can also begin reading from the latest message (<code>pulsar.LatestMessage</code>) or some other message ID specified by bytes using the <code>DeserializeMessageID</code> function, which takes a byte array and returns a <code>MessageID</code> object. 这里有一个示例:</p>
+<p>In the example above, the reader begins reading from the earliest available message (specified by <code>pulsar.EarliestMessage</code>). The reader can also begin reading from the latest message (<code>pulsar.LatestMessage</code>) or some other message ID specified by bytes using the <code>DeserializeMessageID</code> function, which takes a byte array and returns a <code>MessageID</code> object. 下面是一个示例:</p>
 <pre><code class="hljs css language-go">lastSavedId := <span class="hljs-comment">// Read last saved message id from external store as byte[]</span>
 
 reader, err := client.CreateReader(pulsar.ReaderOptions{
@@ -476,7 +476,7 @@ reader, err := client.CreateReader(pulsar.ReaderOptions{
 <li>Set <code>TLSTrustCertsFilePath</code> to the path to the TLS certs used by your client and the Pulsar broker</li>
 <li>Configure <code>Authentication</code> option</li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-go">opts := pulsar.ClientOptions{
     URL: <span class="hljs-string">"pulsar+ssl://my-cluster.com:6651"</span>,
     TLSTrustCertsFilePath: <span class="hljs-string">"/path/to/certs/my-cert.csr"</span>,
diff --git a/content/docs/zh-CN/2.1.0-incubating/client-libraries-go/index.html b/content/docs/zh-CN/2.1.0-incubating/client-libraries-go/index.html
index f081884..b7345dc 100644
--- a/content/docs/zh-CN/2.1.0-incubating/client-libraries-go/index.html
+++ b/content/docs/zh-CN/2.1.0-incubating/client-libraries-go/index.html
@@ -104,7 +104,7 @@
 <pre><code class="hljs css language-http">pulsar+ssl://pulsar.us-west.example.com:6651
 </code></pre>
 <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>In order to interact with Pulsar, you'll first need a <code>Client</code> object. You can create a client object using the <code>NewClient</code> function, passing in a <code>ClientOptions</code> object (more on configuration <a href="#client-configuration">below</a>). 这里有一个示例:</p>
+<p>In order to interact with Pulsar, you'll first need a <code>Client</code> object. You can create a client object using the <code>NewClient</code> function, passing in a <code>ClientOptions</code> object (more on configuration <a href="#client-configuration">below</a>). 下面是一个示例:</p>
 <pre><code class="hljs css language-go"><span class="hljs-keyword">import</span> (
     <span class="hljs-string">"log"</span>
     <span class="hljs-string">"runtime"</span>
@@ -358,7 +358,7 @@ consumer, err := client.Subscribe(consumerOpts)
 </tbody>
 </table>
 <h2><a class="anchor" aria-hidden="true" id="readers"></a><a href="#readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
-<p>Pulsar readers process messages from Pulsar topics. Readers are different from consumers because with readers you need to explicitly specify which message in the stream you want to begin with (consumers, on the other hand, automatically begin with the most recent unacked message). You can <a href="#reader-configuration">configure</a> Go readers using a <code>ReaderOptions</code> object. 这里有一个示例:</p>
+<p>Pulsar readers process messages from Pulsar topics. Readers are different from consumers because with readers you need to explicitly specify which message in the stream you want to begin with (consumers, on the other hand, automatically begin with the most recent unacked message). You can <a href="#reader-configuration">configure</a> Go readers using a <code>ReaderOptions</code> object. 下面是一个示例:</p>
 <pre><code class="hljs css language-go">reader, err := client.CreateReader(pulsar.ReaderOptions{
     Topic: <span class="hljs-string">"my-golang-topic"</span>,
     StartMessageId: pulsar.LatestMessage,
@@ -418,7 +418,7 @@ consumer, err := client.Subscribe(consumerOpts)
     }
 }
 </code></pre>
-<p>In the example above, the reader begins reading from the earliest available message (specified by <code>pulsar.EarliestMessage</code>). The reader can also begin reading from the latest message (<code>pulsar.LatestMessage</code>) or some other message ID specified by bytes using the <code>DeserializeMessageID</code> function, which takes a byte array and returns a <code>MessageID</code> object. 这里有一个示例:</p>
+<p>In the example above, the reader begins reading from the earliest available message (specified by <code>pulsar.EarliestMessage</code>). The reader can also begin reading from the latest message (<code>pulsar.LatestMessage</code>) or some other message ID specified by bytes using the <code>DeserializeMessageID</code> function, which takes a byte array and returns a <code>MessageID</code> object. 下面是一个示例:</p>
 <pre><code class="hljs css language-go">lastSavedId := <span class="hljs-comment">// Read last saved message id from external store as byte[]</span>
 
 reader, err := client.CreateReader(pulsar.ReaderOptions{
@@ -476,7 +476,7 @@ reader, err := client.CreateReader(pulsar.ReaderOptions{
 <li>Set <code>TLSTrustCertsFilePath</code> to the path to the TLS certs used by your client and the Pulsar broker</li>
 <li>Configure <code>Authentication</code> option</li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-go">opts := pulsar.ClientOptions{
     URL: <span class="hljs-string">"pulsar+ssl://my-cluster.com:6651"</span>,
     TLSTrustCertsFilePath: <span class="hljs-string">"/path/to/certs/my-cert.csr"</span>,
diff --git a/content/docs/zh-CN/2.1.0-incubating/client-libraries-java.html b/content/docs/zh-CN/2.1.0-incubating/client-libraries-java.html
index 07a6348..0522c83 100644
--- a/content/docs/zh-CN/2.1.0-incubating/client-libraries-java.html
+++ b/content/docs/zh-CN/2.1.0-incubating/client-libraries-java.html
@@ -168,7 +168,7 @@ client.close();</p>
 </code></pre>
 <p>' %}</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.09 [...]
-<p>如果实例化 <code>生产者</code> 对象时仅指定主题topic名称 (如上面的示例所示), 则生产者将使用默认配置。 要使用非默认配置, 你可以设置多种可配置的参数。 有关完整列表, 请参阅 {@inject javadoc:ProducerBuilder:/client/org/apache/pulsar/client/api/ProducerBuilder} 类javadoc文档。 这里有一个示例:</p>
+<p>如果实例化 <code>生产者</code> 对象时仅指定主题topic名称 (如上面的示例所示), 则生产者将使用默认配置。 要使用非默认配置, 你可以设置多种可配置的参数。 有关完整列表, 请参阅 {@inject javadoc:ProducerBuilder:/client/org/apache/pulsar/client/api/ProducerBuilder} 类javadoc文档。 下面是一个示例:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
     .topic(<span class="hljs-string">"my-topic"</span>)
     .batchingMaxPublishDelay(<span class="hljs-number">10</span>, TimeUnit.MILLISECONDS)
@@ -220,7 +220,7 @@ client.close();</p>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="消费者配置"></a><a href="#消费者配置" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
 <p>如果实例化 <code>消费者</code> 对象, 仅指定主题和订阅名称, 如上面的示例所示, 消费者将采用默认配置。 要使用非默认配置, 你可以设置多种可配置的参数。 有关完整列表, 请参阅 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/ConsumerBuilder">ConsumerBuilder</a>
-类javadoc文档。 这里有一个示例:</p>
+类javadoc文档。 下面是一个示例:</p>
 <p>这是一个示例配置:</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
@@ -231,7 +231,7 @@ client.close();</p>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="异步接收"></a><a href="#异步接收" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <p><code>receive</code>方法将异步接受消息(消费者处理器将被阻塞,直到有消息到达)。 你也可以使用<a href="concepts-messaging.md#receive-modes">异步接收方法</a>,这将在一个新消息到达时立即返回一个<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>对象。</p>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>异步接收操作返回一个包装在<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>中的{@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message}消息对象。</p>
@@ -301,7 +301,7 @@ consumerBuilder
 和 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 /api/ReaderConfiguration}来创建<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 。</p>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">ReaderConfiguration conf = <span class="hljs-keyword">new</span> ReaderConfiguration();
 <span class="hljs-keyword">byte</span>[] msgIdBytes = <span class="hljs-comment">// 一些消息ID 的字节数组</span>
 MessageId id = MessageId.fromByteArray(msgIdBytes);
@@ -318,7 +318,7 @@ Reader reader = pulsarClient.newReader()
 <p>在上面的示例中,实例化一个<code>Reader</code>对象对指定的主题和消息(ID); reader将遍历主题中<code>msgIdBytes</code>(取值方式取决于应用程序) 之后的消息。</p>
 <p>上面的示例代码展示了<code>Reader</code>对象指向特定的消息(ID),但你也可以使用<code>MessageId.earliest</code>来指向topic上最早可用的消息,使用<code>MessageId.latest</code>指向最新的消息。</p>
 <h2><a class="anchor" aria-hidden="true" id="schema"></a><a href="#schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="concepts-schema-registry.md">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 这里有一个示例:</p>
+<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="concepts-schema-registry.md">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 下面是一个示例:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
diff --git a/content/docs/zh-CN/2.1.0-incubating/client-libraries-java/index.html b/content/docs/zh-CN/2.1.0-incubating/client-libraries-java/index.html
index 07a6348..0522c83 100644
--- a/content/docs/zh-CN/2.1.0-incubating/client-libraries-java/index.html
+++ b/content/docs/zh-CN/2.1.0-incubating/client-libraries-java/index.html
@@ -168,7 +168,7 @@ client.close();</p>
 </code></pre>
 <p>' %}</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.09 [...]
-<p>如果实例化 <code>生产者</code> 对象时仅指定主题topic名称 (如上面的示例所示), 则生产者将使用默认配置。 要使用非默认配置, 你可以设置多种可配置的参数。 有关完整列表, 请参阅 {@inject javadoc:ProducerBuilder:/client/org/apache/pulsar/client/api/ProducerBuilder} 类javadoc文档。 这里有一个示例:</p>
+<p>如果实例化 <code>生产者</code> 对象时仅指定主题topic名称 (如上面的示例所示), 则生产者将使用默认配置。 要使用非默认配置, 你可以设置多种可配置的参数。 有关完整列表, 请参阅 {@inject javadoc:ProducerBuilder:/client/org/apache/pulsar/client/api/ProducerBuilder} 类javadoc文档。 下面是一个示例:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
     .topic(<span class="hljs-string">"my-topic"</span>)
     .batchingMaxPublishDelay(<span class="hljs-number">10</span>, TimeUnit.MILLISECONDS)
@@ -220,7 +220,7 @@ client.close();</p>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="消费者配置"></a><a href="#消费者配置" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
 <p>如果实例化 <code>消费者</code> 对象, 仅指定主题和订阅名称, 如上面的示例所示, 消费者将采用默认配置。 要使用非默认配置, 你可以设置多种可配置的参数。 有关完整列表, 请参阅 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/ConsumerBuilder">ConsumerBuilder</a>
-类javadoc文档。 这里有一个示例:</p>
+类javadoc文档。 下面是一个示例:</p>
 <p>这是一个示例配置:</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
@@ -231,7 +231,7 @@ client.close();</p>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="异步接收"></a><a href="#异步接收" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <p><code>receive</code>方法将异步接受消息(消费者处理器将被阻塞,直到有消息到达)。 你也可以使用<a href="concepts-messaging.md#receive-modes">异步接收方法</a>,这将在一个新消息到达时立即返回一个<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>对象。</p>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>异步接收操作返回一个包装在<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>中的{@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message}消息对象。</p>
@@ -301,7 +301,7 @@ consumerBuilder
 和 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 /api/ReaderConfiguration}来创建<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 。</p>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">ReaderConfiguration conf = <span class="hljs-keyword">new</span> ReaderConfiguration();
 <span class="hljs-keyword">byte</span>[] msgIdBytes = <span class="hljs-comment">// 一些消息ID 的字节数组</span>
 MessageId id = MessageId.fromByteArray(msgIdBytes);
@@ -318,7 +318,7 @@ Reader reader = pulsarClient.newReader()
 <p>在上面的示例中,实例化一个<code>Reader</code>对象对指定的主题和消息(ID); reader将遍历主题中<code>msgIdBytes</code>(取值方式取决于应用程序) 之后的消息。</p>
 <p>上面的示例代码展示了<code>Reader</code>对象指向特定的消息(ID),但你也可以使用<code>MessageId.earliest</code>来指向topic上最早可用的消息,使用<code>MessageId.latest</code>指向最新的消息。</p>
 <h2><a class="anchor" aria-hidden="true" id="schema"></a><a href="#schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="concepts-schema-registry.md">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 这里有一个示例:</p>
+<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="concepts-schema-registry.md">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 下面是一个示例:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
diff --git a/content/docs/zh-CN/2.1.0-incubating/client-libraries-websocket.html b/content/docs/zh-CN/2.1.0-incubating/client-libraries-websocket.html
index 9404873..6efe804 100644
--- a/content/docs/zh-CN/2.1.0-incubating/client-libraries-websocket.html
+++ b/content/docs/zh-CN/2.1.0-incubating/client-libraries-websocket.html
@@ -92,7 +92,7 @@
 <li><a href="/docs/zh-CN/2.1.0-incubating/reference-configuration#websocket-webServicePort"><code>webServicePort</code></a></li>
 <li><a href="/docs/zh-CN/2.1.0-incubating/reference-configuration#websocket-clusterName"><code>clusterName</code></a></li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1:2181,zk2:2181,zk3:2181</span>
 <span class="hljs-attr">webServicePort</span>=<span class="hljs-string">8080</span>
 <span class="hljs-attr">clusterName</span>=<span class="hljs-string">my-cluster</span>
diff --git a/content/docs/zh-CN/2.1.0-incubating/client-libraries-websocket/index.html b/content/docs/zh-CN/2.1.0-incubating/client-libraries-websocket/index.html
index 9404873..6efe804 100644
--- a/content/docs/zh-CN/2.1.0-incubating/client-libraries-websocket/index.html
+++ b/content/docs/zh-CN/2.1.0-incubating/client-libraries-websocket/index.html
@@ -92,7 +92,7 @@
 <li><a href="/docs/zh-CN/2.1.0-incubating/reference-configuration#websocket-webServicePort"><code>webServicePort</code></a></li>
 <li><a href="/docs/zh-CN/2.1.0-incubating/reference-configuration#websocket-clusterName"><code>clusterName</code></a></li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1:2181,zk2:2181,zk3:2181</span>
 <span class="hljs-attr">webServicePort</span>=<span class="hljs-string">8080</span>
 <span class="hljs-attr">clusterName</span>=<span class="hljs-string">my-cluster</span>
diff --git a/content/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview.html b/content/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview.html
index d4e161b..1b3f515 100644
--- a/content/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview.html
+++ b/content/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview.html
@@ -155,7 +155,7 @@
 <blockquote>
 <p>为了性能和容错,你可以运行任意个Pulsar proxy。</p>
 </blockquote>
-<p>架构上来看,Pulsar Proxy从ZooKeeper上面读取他所需要的所有信息。 当启动代理时,你只需要提供用于集群独有和实例范围的配置存储的ZooKeeper连接串。 这里有一个示例:</p>
+<p>架构上来看,Pulsar Proxy从ZooKeeper上面读取他所需要的所有信息。 当启动代理时,你只需要提供用于集群独有和实例范围的配置存储的ZooKeeper连接串。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar proxy \
   --zookeeper-servers zk-0,zk-1,zk-2 \
   --configuration-store-servers zk-0,zk-1,zk-2
diff --git a/content/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview/index.html b/content/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview/index.html
index d4e161b..1b3f515 100644
--- a/content/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview/index.html
+++ b/content/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview/index.html
@@ -155,7 +155,7 @@
 <blockquote>
 <p>为了性能和容错,你可以运行任意个Pulsar proxy。</p>
 </blockquote>
-<p>架构上来看,Pulsar Proxy从ZooKeeper上面读取他所需要的所有信息。 当启动代理时,你只需要提供用于集群独有和实例范围的配置存储的ZooKeeper连接串。 这里有一个示例:</p>
+<p>架构上来看,Pulsar Proxy从ZooKeeper上面读取他所需要的所有信息。 当启动代理时,你只需要提供用于集群独有和实例范围的配置存储的ZooKeeper连接串。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar proxy \
   --zookeeper-servers zk-0,zk-1,zk-2 \
   --configuration-store-servers zk-0,zk-1,zk-2
diff --git a/content/docs/zh-CN/2.1.0-incubating/concepts-messaging.html b/content/docs/zh-CN/2.1.0-incubating/concepts-messaging.html
index 66edf9c..e819f12 100644
--- a/content/docs/zh-CN/2.1.0-incubating/concepts-messaging.html
+++ b/content/docs/zh-CN/2.1.0-incubating/concepts-messaging.html
@@ -281,7 +281,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <p>这里还有一个非持久topic的<a href="client-libraries-java.md#producer">java producer</a>例子:</p>
 <pre><code class="hljs css language-java">Producer producer = client.createProducer(npTopic);
 </code></pre>
-<h2><a class="anchor" aria-hidden="true" id="message-retention-and-expiry"></a><a href="#message-retention-and-expiry" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
+<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>Pulsar broker默认如下:</p>
 <ul>
 <li>立即删除<em>所有</em>已经被cunsumer确认过的的消息</li>
@@ -296,7 +296,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <p>所有消息存留和过期在<a href="#namespaces">namespace</a>层面管理。具体操作请查看 <a href="cookbooks-retention-expiry.md">Message retention and expiry</a></p>
 </blockquote>
 <p>下图说明了这两种概念:</p>
-<p><img src="assets/retention-expiry.png" alt="Message retention and expiry"></p>
+<p><img src="assets/retention-expiry.png" alt="消息保留和到期"></p>
 <p>图中上面的是消息存留,<span style="color: #89b557;">存留规则</span>会被用于某namespace下所有的topic,指明哪些消息会被持久存储,即使已经被确认过。 没有被留存规则覆盖的消息将会被<span style="color: #bb3b3e;">删除</span>。 没有留存规则的话,<em>所有</em>被<span style="color: #19967d;">确认</span>的消息都会被删除。</p>
 <p>图中下面的是消息过期,有些消息即使还<span style="color: #337db6;">没有被确认</span>,也被<span style="color: #bb3b3e;">删除</span>掉了。因为根据设置在<span style="color: #e39441;">namespace上的TTL</span>,他们已经过期了。(例如,TTL为5分钟,过了十分钟消息还没被确认)</p>
 <h2><a class="anchor" aria-hidden="true" id="message-deduplication"></a><a href="#message-deduplication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
@@ -315,7 +315,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <blockquote>
 <p>更深入的信息可以参考 <a href="https://streaml.io/blog">Streamlio blog</a>上的<a href="https://streaml.io/blog/pulsar-effectively-once/">此篇博文</a></p>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/concepts-overview"><span class="arrow-prev">← </span><span>概述</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview"><span>Architecture</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#messages">Messages</a></li><li><a href="#producers">Producers</ [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/concepts-overview"><span class="arrow-prev">← </span><span>概述</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview"><span>Architecture</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#messages">Messages</a></li><li><a href="#producers">Producers</ [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.0-incubating/concepts-messaging/index.html b/content/docs/zh-CN/2.1.0-incubating/concepts-messaging/index.html
index 66edf9c..e819f12 100644
--- a/content/docs/zh-CN/2.1.0-incubating/concepts-messaging/index.html
+++ b/content/docs/zh-CN/2.1.0-incubating/concepts-messaging/index.html
@@ -281,7 +281,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <p>这里还有一个非持久topic的<a href="client-libraries-java.md#producer">java producer</a>例子:</p>
 <pre><code class="hljs css language-java">Producer producer = client.createProducer(npTopic);
 </code></pre>
-<h2><a class="anchor" aria-hidden="true" id="message-retention-and-expiry"></a><a href="#message-retention-and-expiry" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
+<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>Pulsar broker默认如下:</p>
 <ul>
 <li>立即删除<em>所有</em>已经被cunsumer确认过的的消息</li>
@@ -296,7 +296,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <p>所有消息存留和过期在<a href="#namespaces">namespace</a>层面管理。具体操作请查看 <a href="cookbooks-retention-expiry.md">Message retention and expiry</a></p>
 </blockquote>
 <p>下图说明了这两种概念:</p>
-<p><img src="assets/retention-expiry.png" alt="Message retention and expiry"></p>
+<p><img src="assets/retention-expiry.png" alt="消息保留和到期"></p>
 <p>图中上面的是消息存留,<span style="color: #89b557;">存留规则</span>会被用于某namespace下所有的topic,指明哪些消息会被持久存储,即使已经被确认过。 没有被留存规则覆盖的消息将会被<span style="color: #bb3b3e;">删除</span>。 没有留存规则的话,<em>所有</em>被<span style="color: #19967d;">确认</span>的消息都会被删除。</p>
 <p>图中下面的是消息过期,有些消息即使还<span style="color: #337db6;">没有被确认</span>,也被<span style="color: #bb3b3e;">删除</span>掉了。因为根据设置在<span style="color: #e39441;">namespace上的TTL</span>,他们已经过期了。(例如,TTL为5分钟,过了十分钟消息还没被确认)</p>
 <h2><a class="anchor" aria-hidden="true" id="message-deduplication"></a><a href="#message-deduplication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
@@ -315,7 +315,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <blockquote>
 <p>更深入的信息可以参考 <a href="https://streaml.io/blog">Streamlio blog</a>上的<a href="https://streaml.io/blog/pulsar-effectively-once/">此篇博文</a></p>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/concepts-overview"><span class="arrow-prev">← </span><span>概述</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview"><span>Architecture</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#messages">Messages</a></li><li><a href="#producers">Producers</ [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/concepts-overview"><span class="arrow-prev">← </span><span>概述</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview"><span>Architecture</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#messages">Messages</a></li><li><a href="#producers">Producers</ [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.0-incubating/cookbooks-compaction.html b/content/docs/zh-CN/2.1.0-incubating/cookbooks-compaction.html
index 5ddbfa3..46f37c4 100644
--- a/content/docs/zh-CN/2.1.0-incubating/cookbooks-compaction.html
+++ b/content/docs/zh-CN/2.1.0-incubating/cookbooks-compaction.html
@@ -98,12 +98,12 @@
 </code></pre>
 <p>Configuring the compaction threshold on a namespace will apply to all topics within that namespace.</p>
 <h2><a class="anchor" aria-hidden="true" id="triggering-compaction-manually-trigger"></a><a href="#triggering-compaction-manually-trigger" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1. [...]
-<p>In order to run compaction on a topic, you need to use the <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#topics-compact"><code>topics compact</code></a> command for the <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin"><code>pulsar-admin</code></a> CLI tool. 这里有一个示例:</p>
+<p>In order to run compaction on a topic, you need to use the <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#topics-compact"><code>topics compact</code></a> command for the <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin"><code>pulsar-admin</code></a> CLI tool. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin topics compact \
   persistent://my-tenant/my-namespace/my-topic
 </code></pre>
 <p>The <code>pulsar-admin</code> tool runs compaction via the Pulsar <a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
- API. To run compaction in its own dedicated process, i.e. <em>not</em> through the REST API, you can use the <a href="/docs/zh-CN/2.1.0-incubating/reference-cli-tools#pulsar-compact-topic"><code>pulsar compact-topic</code></a> command. 这里有一个示例:</p>
+ API. To run compaction in its own dedicated process, i.e. <em>not</em> through the REST API, you can use the <a href="/docs/zh-CN/2.1.0-incubating/reference-cli-tools#pulsar-compact-topic"><code>pulsar compact-topic</code></a> command. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar compact-topic \
   --topic persistent://my-tenant-namespace/my-topic
 </code></pre>
diff --git a/content/docs/zh-CN/2.1.0-incubating/cookbooks-compaction/index.html b/content/docs/zh-CN/2.1.0-incubating/cookbooks-compaction/index.html
index 5ddbfa3..46f37c4 100644
--- a/content/docs/zh-CN/2.1.0-incubating/cookbooks-compaction/index.html
+++ b/content/docs/zh-CN/2.1.0-incubating/cookbooks-compaction/index.html
@@ -98,12 +98,12 @@
 </code></pre>
 <p>Configuring the compaction threshold on a namespace will apply to all topics within that namespace.</p>
 <h2><a class="anchor" aria-hidden="true" id="triggering-compaction-manually-trigger"></a><a href="#triggering-compaction-manually-trigger" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1. [...]
-<p>In order to run compaction on a topic, you need to use the <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#topics-compact"><code>topics compact</code></a> command for the <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin"><code>pulsar-admin</code></a> CLI tool. 这里有一个示例:</p>
+<p>In order to run compaction on a topic, you need to use the <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#topics-compact"><code>topics compact</code></a> command for the <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin"><code>pulsar-admin</code></a> CLI tool. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin topics compact \
   persistent://my-tenant/my-namespace/my-topic
 </code></pre>
 <p>The <code>pulsar-admin</code> tool runs compaction via the Pulsar <a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
- API. To run compaction in its own dedicated process, i.e. <em>not</em> through the REST API, you can use the <a href="/docs/zh-CN/2.1.0-incubating/reference-cli-tools#pulsar-compact-topic"><code>pulsar compact-topic</code></a> command. 这里有一个示例:</p>
+ API. To run compaction in its own dedicated process, i.e. <em>not</em> through the REST API, you can use the <a href="/docs/zh-CN/2.1.0-incubating/reference-cli-tools#pulsar-compact-topic"><code>pulsar compact-topic</code></a> command. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar compact-topic \
   --topic persistent://my-tenant-namespace/my-topic
 </code></pre>
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 5a67922..64ef432 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
@@ -117,7 +117,7 @@
 </ol>
 <p>Instructions for <a href="#java">Java</a>, <a href="#python">Python</a>, and <a href="#cpp">C++</a> clients can be found below.</p>
 <h3><a class="anchor" aria-hidden="true" id="java-clients-java"></a><a href="#java-clients-java" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
-<p>To enable message deduplication on a <a href="/docs/zh-CN/2.1.0-incubating/client-libraries-java#producers">Java producer</a>, set the producer name using the <code>producerName</code> setter and set the timeout to 0 using the <code>sendTimeout</code> setter. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/2.1.0-incubating/client-libraries-java#producers">Java producer</a>, set the producer name using the <code>producerName</code> setter and set the timeout to 0 using the <code>sendTimeout</code> setter. 下面是一个示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Producer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 <span class="hljs-keyword">import</span> java.util.concurrent.TimeUnit;
@@ -132,7 +132,7 @@ Producer producer = pulsarClient.newProducer()
         .create();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="python-clients-python"></a><a href="#python-clients-python" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 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>To enable message deduplication on a <a href="/docs/zh-CN/2.1.0-incubating/client-libraries-python#producers">Python producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/2.1.0-incubating/client-libraries-python#producers">Python producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 下面是一个示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">import</span> pulsar
 
 client = pulsar.Client(<span class="hljs-string">"pulsar://localhost:6650"</span>)
@@ -142,7 +142,7 @@ producer = client.create_producer(
     send_timeout_millis=<span class="hljs-number">0</span>)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-clients-cpp"></a><a href="#c-clients-cpp" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
-<p>To enable message deduplication on a <a href="/docs/zh-CN/2.1.0-incubating/client-libraries-cpp#producer">C++ producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/2.1.0-incubating/client-libraries-cpp#producer">C++ producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 下面是一个示例:</p>
 <pre><code class="hljs css language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 <span class="hljs-built_in">std</span>::<span class="hljs-built_in">string</span> serviceUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
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 5a67922..64ef432 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
@@ -117,7 +117,7 @@
 </ol>
 <p>Instructions for <a href="#java">Java</a>, <a href="#python">Python</a>, and <a href="#cpp">C++</a> clients can be found below.</p>
 <h3><a class="anchor" aria-hidden="true" id="java-clients-java"></a><a href="#java-clients-java" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
-<p>To enable message deduplication on a <a href="/docs/zh-CN/2.1.0-incubating/client-libraries-java#producers">Java producer</a>, set the producer name using the <code>producerName</code> setter and set the timeout to 0 using the <code>sendTimeout</code> setter. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/2.1.0-incubating/client-libraries-java#producers">Java producer</a>, set the producer name using the <code>producerName</code> setter and set the timeout to 0 using the <code>sendTimeout</code> setter. 下面是一个示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Producer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 <span class="hljs-keyword">import</span> java.util.concurrent.TimeUnit;
@@ -132,7 +132,7 @@ Producer producer = pulsarClient.newProducer()
         .create();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="python-clients-python"></a><a href="#python-clients-python" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 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>To enable message deduplication on a <a href="/docs/zh-CN/2.1.0-incubating/client-libraries-python#producers">Python producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/2.1.0-incubating/client-libraries-python#producers">Python producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 下面是一个示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">import</span> pulsar
 
 client = pulsar.Client(<span class="hljs-string">"pulsar://localhost:6650"</span>)
@@ -142,7 +142,7 @@ producer = client.create_producer(
     send_timeout_millis=<span class="hljs-number">0</span>)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-clients-cpp"></a><a href="#c-clients-cpp" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
-<p>To enable message deduplication on a <a href="/docs/zh-CN/2.1.0-incubating/client-libraries-cpp#producer">C++ producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/2.1.0-incubating/client-libraries-cpp#producer">C++ producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 下面是一个示例:</p>
 <pre><code class="hljs css language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 <span class="hljs-built_in">std</span>::<span class="hljs-built_in">string</span> serviceUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
diff --git a/content/docs/zh-CN/2.1.0-incubating/cookbooks-encryption.html b/content/docs/zh-CN/2.1.0-incubating/cookbooks-encryption.html
index 1ca3838..d9947e4 100644
--- a/content/docs/zh-CN/2.1.0-incubating/cookbooks-encryption.html
+++ b/content/docs/zh-CN/2.1.0-incubating/cookbooks-encryption.html
@@ -221,7 +221,7 @@ conf.addEncryptionKey(<span class="hljs-string">"myapp.messagekey2"</span>);
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-retention-expiry"><span class="arrow-prev">← </span><span>Message retention and expiry</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-message-queue"><span>Message queue</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryptio [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-retention-expiry"><span class="arrow-prev">← </span><span>消息保留和到期</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-message-queue"><span>Message queue</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and sym [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.0-incubating/cookbooks-encryption/index.html b/content/docs/zh-CN/2.1.0-incubating/cookbooks-encryption/index.html
index 1ca3838..d9947e4 100644
--- a/content/docs/zh-CN/2.1.0-incubating/cookbooks-encryption/index.html
+++ b/content/docs/zh-CN/2.1.0-incubating/cookbooks-encryption/index.html
@@ -221,7 +221,7 @@ conf.addEncryptionKey(<span class="hljs-string">"myapp.messagekey2"</span>);
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-retention-expiry"><span class="arrow-prev">← </span><span>Message retention and expiry</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-message-queue"><span>Message queue</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryptio [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-retention-expiry"><span class="arrow-prev">← </span><span>消息保留和到期</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-message-queue"><span>Message queue</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and sym [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.0-incubating/cookbooks-non-persistent.html b/content/docs/zh-CN/2.1.0-incubating/cookbooks-non-persistent.html
index c662a1e..7ed2dd1 100644
--- a/content/docs/zh-CN/2.1.0-incubating/cookbooks-non-persistent.html
+++ b/content/docs/zh-CN/2.1.0-incubating/cookbooks-non-persistent.html
@@ -108,7 +108,7 @@
 <p>可以使用<a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#non-persistent"> <code>pulsar-admin non-persistent</code> </a>命令行管理非持久性主题。 使用命令行工具,你可以执行诸如<a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#non-persistent-create-partitioned-topic">创建分区非持久性主题</a>,获取非持久主题的<a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#non-persistent-stats">统计信息</a>,获取命名空间下的非持久主题<a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin">列表</a>等操作。</p>
 <h2><a class="anchor" aria-hidden="true" id="与pulsar客户端一起使用"></a><a href="#与pulsar客户端一起使用" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>除了确保使用具有<code>非持久性</code>的正确<a href="#using">主题名称</a>作为主题类型之外,你不应该对 Pulsar 客户端进行任何更改以使用非持久性消息传递。</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-deduplication"><span class="arrow-prev">← </span><span>Message deduplication</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-partitioned"><span>分区Topic</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="#使用">使用</a></li><li><a h [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-deduplication"><span class="arrow-prev">← </span><span>Message deduplication</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-partitioned"><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="#使用">使用</a></li><li><a href [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.0-incubating/cookbooks-non-persistent/index.html b/content/docs/zh-CN/2.1.0-incubating/cookbooks-non-persistent/index.html
index c662a1e..7ed2dd1 100644
--- a/content/docs/zh-CN/2.1.0-incubating/cookbooks-non-persistent/index.html
+++ b/content/docs/zh-CN/2.1.0-incubating/cookbooks-non-persistent/index.html
@@ -108,7 +108,7 @@
 <p>可以使用<a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#non-persistent"> <code>pulsar-admin non-persistent</code> </a>命令行管理非持久性主题。 使用命令行工具,你可以执行诸如<a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#non-persistent-create-partitioned-topic">创建分区非持久性主题</a>,获取非持久主题的<a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#non-persistent-stats">统计信息</a>,获取命名空间下的非持久主题<a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin">列表</a>等操作。</p>
 <h2><a class="anchor" aria-hidden="true" id="与pulsar客户端一起使用"></a><a href="#与pulsar客户端一起使用" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>除了确保使用具有<code>非持久性</code>的正确<a href="#using">主题名称</a>作为主题类型之外,你不应该对 Pulsar 客户端进行任何更改以使用非持久性消息传递。</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-deduplication"><span class="arrow-prev">← </span><span>Message deduplication</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-partitioned"><span>分区Topic</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="#使用">使用</a></li><li><a h [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-deduplication"><span class="arrow-prev">← </span><span>Message deduplication</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-partitioned"><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="#使用">使用</a></li><li><a href [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.0-incubating/cookbooks-partitioned.html b/content/docs/zh-CN/2.1.0-incubating/cookbooks-partitioned.html
index 4cb1d55..b00d741 100644
--- a/content/docs/zh-CN/2.1.0-incubating/cookbooks-partitioned.html
+++ b/content/docs/zh-CN/2.1.0-incubating/cookbooks-partitioned.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Non-persistent messaging · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作的说明,请参见 &lt;a href=&quot;/docs/zh-C [...]
-"/><meta name="docsearch:version" content="2.1.0-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Non-persistent messaging · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关 [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Non-persistent messaging · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作,请参见 &lt;a href=&quot;/docs/zh-CN/2.1.0- [...]
+"/><meta name="docsearch:version" content="2.1.0-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Non-persistent messaging · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如 [...]
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -70,12 +70,12 @@
                 };
               }
             });
-        </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">Non-persistent messaging</h1></header><article><div><span><p>默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 <em>分区Topic</em>是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主 [...]
+        </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">Non-persistent messaging</h1></header><article><div><span><p>默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 <em>分区Topic</em>是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作 [...]
 <p>您可以使用Pulsar的客户端库将消息<a href="#publishing-to-partitioned-topics">发布</a>到分区主题,还可以使用Pulsar的<a href="/docs/zh-CN/2.1.0-incubating/admin-api-overview"> admin API </a>进行<a href="#managing-partitioned-topics">创建和管理</a>分区主题。</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>发布到分区主题时,与非分区主题的唯一区别是您需要在创建<a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#producer">生产者</a>时指定<a href="/docs/zh-CN/2.1.0-incubating/concepts-messaging#routing-modes">路由模式</a>。 <a href="#java">Java</a>示例如下。</p>
+<p>发布到分区主题时,与非分区主题的唯一区别是您需要在创建新的<a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#producer">生产者</a>时指定<a href="/docs/zh-CN/2.1.0-incubating/concepts-messaging#routing-modes">路由模式</a>。 <a href="#java">Java</a>示例如下。</p>
 <h3><a class="anchor" aria-hidden="true" id="java"></a><a href="#java" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>在Java客户端中将消息发布到分区主题,非常类似于发布到<a href="/docs/zh-CN/2.1.0-incubating/client-libraries-java#using-producers">普通主题</a>。 不同之处在于您需要指定一个消息路器(从已有的路由器中选择一个或实现一个自定义的路由器)。</p>
+<p>在Java客户端中将消息发布到分区主题,和发布到<a href="/docs/zh-CN/2.1.0-incubating/client-libraries-java#using-producers">普通主题</a>非常类似。 不同之处在于您需要指定一个消息路器(从已有的路由器中选择一个或实现一个自定义的路由器)。</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.09V6 [...]
 <p>您可以在ProducerConfiguration对象中指定用于配置生产者的路由模式。 可以从如下三个模式中选择:</p>
 <ul>
@@ -83,7 +83,7 @@
 <li><code>RoundRobinPartition</code></li>
 <li><code>CustomPartition</code></li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">String pulsarBrokerRootUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
 String topic = <span class="hljs-string">"persistent://my-tenant/my-namespace/my-topic"</span>;
 
@@ -121,7 +121,7 @@ producer.send(<span class="hljs-string">"Partitioned topic message"</span>.getBy
 </code></pre>
 <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>您可以使用Pulsar的<a href="/docs/zh-CN/2.1.0-incubating/admin-api-overview"> admin API </a>来创建和管理<a href="/docs/zh-CN/2.1.0-incubating/admin-api-partitioned-topics">分区主题</a>。</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-non-persistent"><span class="arrow-prev">← </span><span>非持久化消息</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-retention-expiry"><span>Message retention and expiry</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#发布到分区主题">发布到分区主题</a><ul class="toc-headi [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-non-persistent"><span class="arrow-prev">← </span><span>非持久化消息</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-retention-expiry"><span>消息保留和到期</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#发布到分区主题">发布到分区主题</a><ul class="toc-headings"><li><a href="#ja [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.0-incubating/cookbooks-partitioned/index.html b/content/docs/zh-CN/2.1.0-incubating/cookbooks-partitioned/index.html
index 4cb1d55..b00d741 100644
--- a/content/docs/zh-CN/2.1.0-incubating/cookbooks-partitioned/index.html
+++ b/content/docs/zh-CN/2.1.0-incubating/cookbooks-partitioned/index.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Non-persistent messaging · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作的说明,请参见 &lt;a href=&quot;/docs/zh-C [...]
-"/><meta name="docsearch:version" content="2.1.0-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Non-persistent messaging · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关 [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Non-persistent messaging · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作,请参见 &lt;a href=&quot;/docs/zh-CN/2.1.0- [...]
+"/><meta name="docsearch:version" content="2.1.0-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Non-persistent messaging · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如 [...]
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -70,12 +70,12 @@
                 };
               }
             });
-        </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">Non-persistent messaging</h1></header><article><div><span><p>默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 <em>分区Topic</em>是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主 [...]
+        </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">Non-persistent messaging</h1></header><article><div><span><p>默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 <em>分区Topic</em>是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作 [...]
 <p>您可以使用Pulsar的客户端库将消息<a href="#publishing-to-partitioned-topics">发布</a>到分区主题,还可以使用Pulsar的<a href="/docs/zh-CN/2.1.0-incubating/admin-api-overview"> admin API </a>进行<a href="#managing-partitioned-topics">创建和管理</a>分区主题。</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>发布到分区主题时,与非分区主题的唯一区别是您需要在创建<a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#producer">生产者</a>时指定<a href="/docs/zh-CN/2.1.0-incubating/concepts-messaging#routing-modes">路由模式</a>。 <a href="#java">Java</a>示例如下。</p>
+<p>发布到分区主题时,与非分区主题的唯一区别是您需要在创建新的<a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#producer">生产者</a>时指定<a href="/docs/zh-CN/2.1.0-incubating/concepts-messaging#routing-modes">路由模式</a>。 <a href="#java">Java</a>示例如下。</p>
 <h3><a class="anchor" aria-hidden="true" id="java"></a><a href="#java" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>在Java客户端中将消息发布到分区主题,非常类似于发布到<a href="/docs/zh-CN/2.1.0-incubating/client-libraries-java#using-producers">普通主题</a>。 不同之处在于您需要指定一个消息路器(从已有的路由器中选择一个或实现一个自定义的路由器)。</p>
+<p>在Java客户端中将消息发布到分区主题,和发布到<a href="/docs/zh-CN/2.1.0-incubating/client-libraries-java#using-producers">普通主题</a>非常类似。 不同之处在于您需要指定一个消息路器(从已有的路由器中选择一个或实现一个自定义的路由器)。</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.09V6 [...]
 <p>您可以在ProducerConfiguration对象中指定用于配置生产者的路由模式。 可以从如下三个模式中选择:</p>
 <ul>
@@ -83,7 +83,7 @@
 <li><code>RoundRobinPartition</code></li>
 <li><code>CustomPartition</code></li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">String pulsarBrokerRootUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
 String topic = <span class="hljs-string">"persistent://my-tenant/my-namespace/my-topic"</span>;
 
@@ -121,7 +121,7 @@ producer.send(<span class="hljs-string">"Partitioned topic message"</span>.getBy
 </code></pre>
 <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>您可以使用Pulsar的<a href="/docs/zh-CN/2.1.0-incubating/admin-api-overview"> admin API </a>来创建和管理<a href="/docs/zh-CN/2.1.0-incubating/admin-api-partitioned-topics">分区主题</a>。</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-non-persistent"><span class="arrow-prev">← </span><span>非持久化消息</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-retention-expiry"><span>Message retention and expiry</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#发布到分区主题">发布到分区主题</a><ul class="toc-headi [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-non-persistent"><span class="arrow-prev">← </span><span>非持久化消息</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-retention-expiry"><span>消息保留和到期</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#发布到分区主题">发布到分区主题</a><ul class="toc-headings"><li><a href="#ja [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.0-incubating/cookbooks-retention-expiry.html b/content/docs/zh-CN/2.1.0-incubating/cookbooks-retention-expiry.html
index f166079..14dbe52 100644
--- a/content/docs/zh-CN/2.1.0-incubating/cookbooks-retention-expiry.html
+++ b/content/docs/zh-CN/2.1.0-incubating/cookbooks-retention-expiry.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar brokers are responsible for handling messages that pass through Pulsar, including &lt;a href=&quot;/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview#persistent [...]
-"/><meta name="docsearch:version" content="2.1.0-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Message retention and expiry · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;Pulsar brokers are responsible for handling messages that pass through Pulsar, including &lt;a href=&quot;/docs/zh-CN/2.1.0-incubatin [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar brokers 负责处理通过Pulsar的消息,包括消息的&lt;a href=&quot;/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview#persistent-storage&quot;&gt;持久存储&lt;/a&gt;。 默认情况下,broker 的策略如下: [...]
+"/><meta name="docsearch:version" content="2.1.0-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Message retention and expiry · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;Pulsar brokers 负责处理通过Pulsar的消息,包括消息的&lt;a href=&quot;/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview#persistent-storage&q [...]
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -70,15 +70,15 @@
                 };
               }
             });
-        </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">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers are responsible for handling messages that pass through Pulsar, including <a href="/docs/zh-CN/2.1.0-incubati [...]
+        </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">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers 负责处理通过Pulsar的消息,包括消息的<a href="/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview#persistent-storage" [...]
 <ul>
-<li>immediately delete all messages that have been acknowledged on every subscription, and</li>
-<li>persistently store all unacknowledged messages in a <a href="#backlog-quotas">backlog</a>.</li>
+<li>立即删除每个订阅上已确认的所有消息。</li>
+<li>并且持久性地将所有未确认的消息存储在<a href="#backlog-quotas"> backlog </a>中。</li>
 </ul>
-<p>In Pulsar, you can override both of these default behaviors, at the namespace level, in two ways:</p>
+<p>在Pulsar中,你可以在命名空间级别以两种方式覆盖这两种默认行为:</p>
 <ul>
-<li>You can persistently store messages that have already been consumed and acknowledged for a minimum time by setting <a href="#retention-policies">retention policies</a>.</li>
-<li>Messages that are not acknowledged within a specified timeframe, can be automatically marked as consumed, by specifying the <a href="#time-to-live-ttl">time to live</a> (TTL).</li>
+<li>通过设置 <a href="#retention-policies">保留策略</a>,可以持久地存储已经被使用和确认的消息,并将其保留最少时间。</li>
+<li>通过指定[生存时间](#time-to-live- TTL) (TTL),可以自动将未在指定时间范围内得到确认的消息标记为已消费。</li>
 </ul>
 <p>Pulsar's <a href="/docs/zh-CN/2.1.0-incubating/admin-api-overview">admin interface</a> enables you to manage both retention policies and TTL at the namespace level (and thus within a specific tenant and either on a specific cluster or in the <a href="/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview#global-cluster"><code>global</code></a> cluster).</p>
 <blockquote>
@@ -248,7 +248,7 @@ admin.namespaces().setBacklogQuota(namespace, quota);
 <h4><a class="anchor" aria-hidden="true" id="java-6"></a><a href="#java-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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. [...]
 <pre><code class="hljs css language-java">admin.namespaces().get
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-partitioned"><span class="arrow-prev">← </span><span>分区Topic</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-encryption"><span>Encryption</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#retention-policies">Retention policies</a><ul class="toc-headings" [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-partitioned"><span class="arrow-prev">← </span><span>分区主题</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-encryption"><span>Encryption</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#retention-policies">Retention policies</a><ul class="toc-headings"><l [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.0-incubating/cookbooks-retention-expiry/index.html b/content/docs/zh-CN/2.1.0-incubating/cookbooks-retention-expiry/index.html
index f166079..14dbe52 100644
--- a/content/docs/zh-CN/2.1.0-incubating/cookbooks-retention-expiry/index.html
+++ b/content/docs/zh-CN/2.1.0-incubating/cookbooks-retention-expiry/index.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar brokers are responsible for handling messages that pass through Pulsar, including &lt;a href=&quot;/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview#persistent [...]
-"/><meta name="docsearch:version" content="2.1.0-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Message retention and expiry · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;Pulsar brokers are responsible for handling messages that pass through Pulsar, including &lt;a href=&quot;/docs/zh-CN/2.1.0-incubatin [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar brokers 负责处理通过Pulsar的消息,包括消息的&lt;a href=&quot;/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview#persistent-storage&quot;&gt;持久存储&lt;/a&gt;。 默认情况下,broker 的策略如下: [...]
+"/><meta name="docsearch:version" content="2.1.0-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Message retention and expiry · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;Pulsar brokers 负责处理通过Pulsar的消息,包括消息的&lt;a href=&quot;/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview#persistent-storage&q [...]
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -70,15 +70,15 @@
                 };
               }
             });
-        </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">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers are responsible for handling messages that pass through Pulsar, including <a href="/docs/zh-CN/2.1.0-incubati [...]
+        </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">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers 负责处理通过Pulsar的消息,包括消息的<a href="/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview#persistent-storage" [...]
 <ul>
-<li>immediately delete all messages that have been acknowledged on every subscription, and</li>
-<li>persistently store all unacknowledged messages in a <a href="#backlog-quotas">backlog</a>.</li>
+<li>立即删除每个订阅上已确认的所有消息。</li>
+<li>并且持久性地将所有未确认的消息存储在<a href="#backlog-quotas"> backlog </a>中。</li>
 </ul>
-<p>In Pulsar, you can override both of these default behaviors, at the namespace level, in two ways:</p>
+<p>在Pulsar中,你可以在命名空间级别以两种方式覆盖这两种默认行为:</p>
 <ul>
-<li>You can persistently store messages that have already been consumed and acknowledged for a minimum time by setting <a href="#retention-policies">retention policies</a>.</li>
-<li>Messages that are not acknowledged within a specified timeframe, can be automatically marked as consumed, by specifying the <a href="#time-to-live-ttl">time to live</a> (TTL).</li>
+<li>通过设置 <a href="#retention-policies">保留策略</a>,可以持久地存储已经被使用和确认的消息,并将其保留最少时间。</li>
+<li>通过指定[生存时间](#time-to-live- TTL) (TTL),可以自动将未在指定时间范围内得到确认的消息标记为已消费。</li>
 </ul>
 <p>Pulsar's <a href="/docs/zh-CN/2.1.0-incubating/admin-api-overview">admin interface</a> enables you to manage both retention policies and TTL at the namespace level (and thus within a specific tenant and either on a specific cluster or in the <a href="/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview#global-cluster"><code>global</code></a> cluster).</p>
 <blockquote>
@@ -248,7 +248,7 @@ admin.namespaces().setBacklogQuota(namespace, quota);
 <h4><a class="anchor" aria-hidden="true" id="java-6"></a><a href="#java-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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. [...]
 <pre><code class="hljs css language-java">admin.namespaces().get
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-partitioned"><span class="arrow-prev">← </span><span>分区Topic</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-encryption"><span>Encryption</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#retention-policies">Retention policies</a><ul class="toc-headings" [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-partitioned"><span class="arrow-prev">← </span><span>分区主题</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/cookbooks-encryption"><span>Encryption</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#retention-policies">Retention policies</a><ul class="toc-headings"><l [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.0-incubating/deploy-bare-metal-multi-cluster.html b/content/docs/zh-CN/2.1.0-incubating/deploy-bare-metal-multi-cluster.html
index b90fcd7..e50423b 100644
--- a/content/docs/zh-CN/2.1.0-incubating/deploy-bare-metal-multi-cluster.html
+++ b/content/docs/zh-CN/2.1.0-incubating/deploy-bare-metal-multi-cluster.html
@@ -211,7 +211,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.3.0
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="cluster-metadata-initialization"></a><a href="#cluster-metadata-initialization" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 [...]
 <p>Once you've set up the cluster-specific ZooKeeper and configuration store quorums for your instance, there is some metadata that needs to be written to ZooKeeper for each cluster in your instance. <strong>It only needs to be written once</strong>.</p>
-<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.1.0-incubating/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.1.0-incubating/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. 这里有一个示例:</p>
+<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.1.0-incubating/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.1.0-incubating/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar initialize-cluster-metadata \</span>
   --cluster us-west \
   --zookeeper zk1.us-west.example.com:2181 \
@@ -229,7 +229,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.3.0
 <li>集群的web服务URL</li>
 <li>Broker服务的URL,来开启和集群中<a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#broker">broker</a>的交互</li>
 </ul>
-<p>如果您使用<a href="/docs/zh-CN/2.1.0-incubating/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL以及为 brokers 群集指定TLS broker服务URL。</p>
+<p>如果使用<a href="/docs/zh-CN/2.1.0-incubating/security-tls-transport"> TLS </a>,那么您还需要为群集指定TLS Web服务URL,为群集中的各个 broker 指定 TLS broker服务URL。</p>
 <p>Make sure to run <code>initialize-cluster-metadata</code> for each cluster in your instance.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-bookkeeper"></a><a href="#deploying-bookkeeper" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
 <p>BookKeeper provides <a href="/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview#persistent-storage">persistent message storage</a> for Pulsar.</p>
diff --git a/content/docs/zh-CN/2.1.0-incubating/deploy-bare-metal-multi-cluster/index.html b/content/docs/zh-CN/2.1.0-incubating/deploy-bare-metal-multi-cluster/index.html
index b90fcd7..e50423b 100644
--- a/content/docs/zh-CN/2.1.0-incubating/deploy-bare-metal-multi-cluster/index.html
+++ b/content/docs/zh-CN/2.1.0-incubating/deploy-bare-metal-multi-cluster/index.html
@@ -211,7 +211,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.3.0
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="cluster-metadata-initialization"></a><a href="#cluster-metadata-initialization" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 [...]
 <p>Once you've set up the cluster-specific ZooKeeper and configuration store quorums for your instance, there is some metadata that needs to be written to ZooKeeper for each cluster in your instance. <strong>It only needs to be written once</strong>.</p>
-<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.1.0-incubating/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.1.0-incubating/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. 这里有一个示例:</p>
+<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.1.0-incubating/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.1.0-incubating/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar initialize-cluster-metadata \</span>
   --cluster us-west \
   --zookeeper zk1.us-west.example.com:2181 \
@@ -229,7 +229,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.3.0
 <li>集群的web服务URL</li>
 <li>Broker服务的URL,来开启和集群中<a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#broker">broker</a>的交互</li>
 </ul>
-<p>如果您使用<a href="/docs/zh-CN/2.1.0-incubating/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL以及为 brokers 群集指定TLS broker服务URL。</p>
+<p>如果使用<a href="/docs/zh-CN/2.1.0-incubating/security-tls-transport"> TLS </a>,那么您还需要为群集指定TLS Web服务URL,为群集中的各个 broker 指定 TLS broker服务URL。</p>
 <p>Make sure to run <code>initialize-cluster-metadata</code> for each cluster in your instance.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-bookkeeper"></a><a href="#deploying-bookkeeper" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
 <p>BookKeeper provides <a href="/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview#persistent-storage">persistent message storage</a> for Pulsar.</p>
diff --git a/content/docs/zh-CN/2.1.0-incubating/deploy-bare-metal.html b/content/docs/zh-CN/2.1.0-incubating/deploy-bare-metal.html
index 630c852..05efe51 100644
--- a/content/docs/zh-CN/2.1.0-incubating/deploy-bare-metal.html
+++ b/content/docs/zh-CN/2.1.0-incubating/deploy-bare-metal.html
@@ -91,7 +91,7 @@
 <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 [...]
 <h3><a class="anchor" aria-hidden="true" id="要求"></a><a href="#要求" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c [...]
 <blockquote>
-<p>如果你想使用已有的zookeeper集群,那就不用准备额外的机器去运行zookeeper。</p>
+<p>如果您想使用已有的zookeeper集群,那就不用准备额外的机器去运行zookeeper。</p>
 </blockquote>
 <p>To run Pulsar on bare metal, you will need:</p>
 <ul>
@@ -100,7 +100,7 @@
 <li>3台运行<a href="https://zookeeper.apache.org">ZooKeeper</a></li>
 <li>3台运行Pulsar broker,一台 <a href="https://bookkeeper.apache.org">BookKeeper</a> bookie</li>
 </ul></li>
-<li>一个 <a href="https://en.wikipedia.org/wiki/Domain_Name_System">DNS</a>(域名解析服务器)包含Pulsar所有broker主机</li>
+<li>一个 包含Pulsar所有broker主机的<a href="https://en.wikipedia.org/wiki/Domain_Name_System">DNS</a>(域名解析服务器)</li>
 </ul>
 <p>集群中的每台机器都需要安装<a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">Java 8</a>或更高版本。</p>
 <p>下图展示了基本设置:</p>
@@ -109,18 +109,18 @@
 <h3><a class="anchor" aria-hidden="true" id="hardware-considerations"></a><a href="#hardware-considerations" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 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>在部署 Pulsar 集群时,我们提供了一些基本建议,在容量规划时应牢记这些建议。</p>
 <h4><a class="anchor" aria-hidden="true" id="zookeeper"></a><a href="#zookeeper" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>对于运行ZooKeeper的机器,我们建议使用配置一般的机器或VM。 Pulsar使用ZooKeeper只是定期做些协调和配置相关的任务,<em>不</em>用于基本操作。 如果您在<a href="https://aws.amazon.com/">Amazon Web Services </a>(AWS)上部署Pulsar,比如一个<a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html">t2.small </a>实例就足够了。</p>
+<p>对于运行ZooKeeper的机器,我们建议使用配置一般的机器或VM。 Pulsar使用ZooKeeper只是定期做些协调和配置相关的任务,<em>不</em>用于基本操作。 如果您在<a href="https://aws.amazon.com/">Amazon Web Services </a>(AWS)上部署Pulsar,例如一个<a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html">t2.small </a>实例就足够了。</p>
 <h4><a class="anchor" aria-hidden="true" id="bookies-brokers"></a><a href="#bookies-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
 <p>对于运行 bookie 和 Pulsar broker 的机器,我们建议使用性能更强大的机器。 例如,对于AWS部署,<a href="https://aws.amazon.com/blogs/aws/now-available-i3-instances-for-demanding-io-intensive-applications/">i3.4xlarge</a>实例可能是合适的。 在这些机器上部署,我们还有以下建议:</p>
 <ul>
 <li>高性能的CPU和10Gbps <a href="https://en.wikipedia.org/wiki/Network_interface_controller"> NIC </a>(适用于Pulsar brokers)</li>
-<li>小型快速固态硬盘<a href="https://en.wikipedia.org/wiki/Solid-state_drive">(SSD)</a>或硬盘驱动器<a href="https://en.wikipedia.org/wiki/Hard_disk_drive">(HDD)</a>,带有<a href="https://en.wikipedia.org/wiki/RAID">RAID</a>控制器和电池供电的写缓存(适用于BookKeeper bookies)</li>
+<li>小型快速<a href="https://en.wikipedia.org/wiki/Solid-state_drive">固态硬盘</a>(SSD)或<a href="https://en.wikipedia.org/wiki/Hard_disk_drive">硬盘驱动器</a>(HDD),带有<a href="https://en.wikipedia.org/wiki/RAID">RAID</a>控制器和电池供电的写缓存(适用于BookKeeper bookies)</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="安装pulsar二进制包"></a><a href="#安装pulsar二进制包" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <blockquote>
 <p>You'll need to install the Pulsar binary package on <em>each machine in the cluster</em>, including machines running <a href="#deploying-a-zookeeper-cluster">ZooKeeper</a> and <a href="#deploying-a-bookkeeper-cluster">BookKeeper</a>.</p>
 </blockquote>
-<p>要开始在裸机上部署Pulsar集群,您需要通过以下方式之一下载二进制压缩包:</p>
+<p>要在裸机上部署Pulsar集群,用以下任意方式下载二进制压缩包:</p>
 <ul>
 <li>点击下面的链接,会自动触发下载:
 <ul>
@@ -187,7 +187,7 @@ pulsar-io-twitter-2.3.0.nar
 <p>If you already have an exsiting zookeeper cluster and would like to use it, you can skip this section.</p>
 </blockquote>
 <p><a href="https://zookeeper.apache.org">ZooKeeper</a> manages a variety of essential coordination- and configuration-related tasks for Pulsar. To deploy a Pulsar cluster you'll need to deploy ZooKeeper first (before all other components). We recommend deploying a 3-node ZooKeeper cluster. Pulsar does not make heavy use of ZooKeeper, so more lightweight machines or VMs should suffice for running ZooKeeper.</p>
-<p>To begin, add all ZooKeeper servers to the configuration specified in <a href="/docs/zh-CN/2.1.0-incubating/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> (in the Pulsar directory you created <a href="#installing-the-pulsar-binary-package">above</a>). 这里有一个示例:</p>
+<p>To begin, add all ZooKeeper servers to the configuration specified in <a href="/docs/zh-CN/2.1.0-incubating/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> (in the Pulsar directory you created <a href="#installing-the-pulsar-binary-package">above</a>). 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-meta">server.1</span>=<span class="hljs-string">zk1.us-west.example.com:2888:3888</span>
 <span class="hljs-meta">server.2</span>=<span class="hljs-string">zk2.us-west.example.com:2888:3888</span>
 <span class="hljs-meta">server.3</span>=<span class="hljs-string">zk3.us-west.example.com:2888:3888</span>
@@ -206,7 +206,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="initializing-cluster-metadata"></a><a href="#initializing-cluster-metadata" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12  [...]
 <p>Once you've deployed ZooKeeper for your cluster, there is some metadata that needs to be written to ZooKeeper for each cluster in your instance. It only needs to be written <strong>once</strong>.</p>
-<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.1.0-incubating/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.1.0-incubating/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. This command can be run on any machine in your ZooKeeper cluster. 这里有一个示例:</p>
+<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.1.0-incubating/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.1.0-incubating/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. This command can be run on any machine in your ZooKeeper cluster. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar initialize-cluster-metadata \</span>
   --cluster pulsar-cluster-1 \
   --zookeeper zk1.us-west.example.com:2181 \
@@ -223,17 +223,17 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>--cluster</code></td><td style="text-align:left">集群名字</td></tr>
-<tr><td style="text-align:left"><code>--zookeeper</code></td><td style="text-align:left">ZooKeeper集群的“本地”连接地址字符串。 此连接字符串为ZooKeeper集群任意<em>一个</em>实例的地址。</td></tr>
-<tr><td style="text-align:left"><code>--configuration-store</code></td><td style="text-align:left">整个集群实例的配置存储连接字符串。 和<code>--zookeeper</code>参数一样只需要包含ZooKeeper集群中的<em>一个</em>节点即可。</td></tr>
+<tr><td style="text-align:left"><code>--zookeeper</code></td><td style="text-align:left">ZooKeeper集群的“本地”连接字符串。 该连接字符串只需包含ZooKeeper集群<em>任一台</em>机器。</td></tr>
+<tr><td style="text-align:left"><code>--configuration-store</code></td><td style="text-align:left">整个集群实例的配置存储连接字符串。 和<code>--zookeeper</code>标记一样,该连接字符串只需包含ZooKeeper集群中的<em>任一台</em>机器即可。</td></tr>
 <tr><td style="text-align:left"><code>--web-service-url</code></td><td style="text-align:left">群集的Web服务URL以及端口。 此URL应为标准DNS名称。 默认端口为8080(我们不建议使用其他端口)。</td></tr>
-<tr><td style="text-align:left"><code>--web-service-url-tls</code></td><td style="text-align:left">如果您使用<a href="/docs/zh-CN/2.1.0-incubating/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL。 默认端口为8443(我们不建议使用其他端口)。</td></tr>
-<tr><td style="text-align:left"><code>--broker-service-url</code></td><td style="text-align:left">Broker服务的URL,用于与集群中的brokers进行交互。 此URL应使用与Web服务URL相同的DNS名称,但应使用<code>pulsar</code>替代http/https。 端口默认6650(我们不建议使用其他端口)。</td></tr>
-<tr><td style="text-align:left"><code>--broker-service-url-tls</code></td><td style="text-align:left">如果您使用<a href="/docs/zh-CN/2.1.0-incubating/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL以及为 brokers 群集指定TLS broker服务URL。 端口默认6651(我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--web-service-url-tls</code></td><td style="text-align:left">如果您使用<a href="/docs/zh-CN/2.1.0-incubating/security-tls-transport"> TLS </a>,需要为群集指定TLS Web服务URL。 默认端口为8443(我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--broker-service-url</code></td><td style="text-align:left">Broker服务的URL,用于与集群中的brokers进行交互。 此URL应使用与Web服务URL相同的DNS名称,但应使用<code>pulsar</code>替代scheme。 默认端口为 6650 (我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--broker-service-url-tls</code></td><td style="text-align:left">如果使用<a href="/docs/zh-CN/2.1.0-incubating/security-tls-transport"> TLS </a>,那么您还需要为群集指定TLS Web服务URL,为群集中的各个 broker 指定 TLS broker服务URL。 默认端口为 6651 (我们不建议使用其他端口)。</td></tr>
 </tbody>
 </table>
 <h2><a class="anchor" aria-hidden="true" id="deploying-a-bookkeeper-cluster"></a><a href="#deploying-a-bookkeeper-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 2.5S13.98 1 [...]
 <p><a href="https://bookkeeper.apache.org">BookKeeper</a> handles all persistent data storage in Pulsar. You will need to deploy a cluster of BookKeeper bookies to use Pulsar. We recommend running a <strong>3-bookie BookKeeper cluster</strong>.</p>
-<p>BookKeeper bookies can be configured using the <a href="/docs/zh-CN/2.1.0-incubating/reference-configuration#bookkeeper"><code>conf/bookkeeper.conf</code></a> configuration file. The most important step in configuring bookies for our purposes here is ensuring that the <a href="/docs/zh-CN/2.1.0-incubating/reference-configuration#bookkeeper-zkServers"><code>zkServers</code></a> is set to the connection string for the ZooKeeper cluster. 这里有一个示例:</p>
+<p>BookKeeper bookies can be configured using the <a href="/docs/zh-CN/2.1.0-incubating/reference-configuration#bookkeeper"><code>conf/bookkeeper.conf</code></a> configuration file. The most important step in configuring bookies for our purposes here is ensuring that the <a href="/docs/zh-CN/2.1.0-incubating/reference-configuration#bookkeeper-zkServers"><code>zkServers</code></a> is set to the connection string for the ZooKeeper cluster. 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zkServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
 <p>Once you've appropriately modified the <code>zkServers</code> parameter, you can provide any other configuration modifications you need. You can find a full listing of the available BookKeeper configuration parameters <a href="/docs/zh-CN/2.1.0-incubating/reference-configuration#bookkeeper">here</a>, although we would recommend consulting the <a href="http://bookkeeper.apache.org/docs/latest/reference/config/">BookKeeper documentation</a> for a more in-depth guide.</p>
@@ -264,7 +264,7 @@ $ bin/pulsar-daemon start bookie
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
-<h3><a class="anchor" aria-hidden="true" id="配置brokers"></a><a href="#配置brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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 [...]
+<h3><a class="anchor" aria-hidden="true" id="配置broker"></a><a href="#配置broker" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
@@ -284,7 +284,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-conf">pulsarFunctionsCluster: pulsar-cluster<span class="hljs-number">-1</span>
 </code></pre></li>
 </ol>
-<h3><a class="anchor" aria-hidden="true" id="启动-brokers"></a><a href="#启动-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h3><a class="anchor" aria-hidden="true" id="启动-broker"></a><a href="#启动-broker" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>You can then provide any other configuration changes that you'd like in the <a href="reference-configuration.md#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
 <p>You can start a broker in the foreground using the <a href="reference-cli-tools.md#pulsar-broker"><code>pulsar broker</code></a> command:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar broker
@@ -295,7 +295,7 @@ $ bin/pulsar-daemon start bookie
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-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 2.5S1 [...]
 <p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="reference-cli-tools.md#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. 这里有一个示例:</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -329,7 +329,7 @@ $ bin/pulsar-daemon start bookie
 <p>You will see output as below:</p>
 <pre><code class="hljs css language-shell">hello world!
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/deploy-kubernetes"><span class="arrow-prev">← </span><span>Kubernetes</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/deploy-bare-metal-multi-cluster"><span>裸机多集群部署</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#准备工作">准备工作</a><ul class="toc-headings"><li><a href="#要求">要求 [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/deploy-kubernetes"><span class="arrow-prev">← </span><span>Kubernetes</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/deploy-bare-metal-multi-cluster"><span>裸机多集群部署</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#准备工作">准备工作</a><ul class="toc-headings"><li><a href="#要求">要求 [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.0-incubating/deploy-bare-metal/index.html b/content/docs/zh-CN/2.1.0-incubating/deploy-bare-metal/index.html
index 630c852..05efe51 100644
--- a/content/docs/zh-CN/2.1.0-incubating/deploy-bare-metal/index.html
+++ b/content/docs/zh-CN/2.1.0-incubating/deploy-bare-metal/index.html
@@ -91,7 +91,7 @@
 <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 [...]
 <h3><a class="anchor" aria-hidden="true" id="要求"></a><a href="#要求" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c [...]
 <blockquote>
-<p>如果你想使用已有的zookeeper集群,那就不用准备额外的机器去运行zookeeper。</p>
+<p>如果您想使用已有的zookeeper集群,那就不用准备额外的机器去运行zookeeper。</p>
 </blockquote>
 <p>To run Pulsar on bare metal, you will need:</p>
 <ul>
@@ -100,7 +100,7 @@
 <li>3台运行<a href="https://zookeeper.apache.org">ZooKeeper</a></li>
 <li>3台运行Pulsar broker,一台 <a href="https://bookkeeper.apache.org">BookKeeper</a> bookie</li>
 </ul></li>
-<li>一个 <a href="https://en.wikipedia.org/wiki/Domain_Name_System">DNS</a>(域名解析服务器)包含Pulsar所有broker主机</li>
+<li>一个 包含Pulsar所有broker主机的<a href="https://en.wikipedia.org/wiki/Domain_Name_System">DNS</a>(域名解析服务器)</li>
 </ul>
 <p>集群中的每台机器都需要安装<a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">Java 8</a>或更高版本。</p>
 <p>下图展示了基本设置:</p>
@@ -109,18 +109,18 @@
 <h3><a class="anchor" aria-hidden="true" id="hardware-considerations"></a><a href="#hardware-considerations" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 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>在部署 Pulsar 集群时,我们提供了一些基本建议,在容量规划时应牢记这些建议。</p>
 <h4><a class="anchor" aria-hidden="true" id="zookeeper"></a><a href="#zookeeper" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>对于运行ZooKeeper的机器,我们建议使用配置一般的机器或VM。 Pulsar使用ZooKeeper只是定期做些协调和配置相关的任务,<em>不</em>用于基本操作。 如果您在<a href="https://aws.amazon.com/">Amazon Web Services </a>(AWS)上部署Pulsar,比如一个<a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html">t2.small </a>实例就足够了。</p>
+<p>对于运行ZooKeeper的机器,我们建议使用配置一般的机器或VM。 Pulsar使用ZooKeeper只是定期做些协调和配置相关的任务,<em>不</em>用于基本操作。 如果您在<a href="https://aws.amazon.com/">Amazon Web Services </a>(AWS)上部署Pulsar,例如一个<a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html">t2.small </a>实例就足够了。</p>
 <h4><a class="anchor" aria-hidden="true" id="bookies-brokers"></a><a href="#bookies-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
 <p>对于运行 bookie 和 Pulsar broker 的机器,我们建议使用性能更强大的机器。 例如,对于AWS部署,<a href="https://aws.amazon.com/blogs/aws/now-available-i3-instances-for-demanding-io-intensive-applications/">i3.4xlarge</a>实例可能是合适的。 在这些机器上部署,我们还有以下建议:</p>
 <ul>
 <li>高性能的CPU和10Gbps <a href="https://en.wikipedia.org/wiki/Network_interface_controller"> NIC </a>(适用于Pulsar brokers)</li>
-<li>小型快速固态硬盘<a href="https://en.wikipedia.org/wiki/Solid-state_drive">(SSD)</a>或硬盘驱动器<a href="https://en.wikipedia.org/wiki/Hard_disk_drive">(HDD)</a>,带有<a href="https://en.wikipedia.org/wiki/RAID">RAID</a>控制器和电池供电的写缓存(适用于BookKeeper bookies)</li>
+<li>小型快速<a href="https://en.wikipedia.org/wiki/Solid-state_drive">固态硬盘</a>(SSD)或<a href="https://en.wikipedia.org/wiki/Hard_disk_drive">硬盘驱动器</a>(HDD),带有<a href="https://en.wikipedia.org/wiki/RAID">RAID</a>控制器和电池供电的写缓存(适用于BookKeeper bookies)</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="安装pulsar二进制包"></a><a href="#安装pulsar二进制包" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <blockquote>
 <p>You'll need to install the Pulsar binary package on <em>each machine in the cluster</em>, including machines running <a href="#deploying-a-zookeeper-cluster">ZooKeeper</a> and <a href="#deploying-a-bookkeeper-cluster">BookKeeper</a>.</p>
 </blockquote>
-<p>要开始在裸机上部署Pulsar集群,您需要通过以下方式之一下载二进制压缩包:</p>
+<p>要在裸机上部署Pulsar集群,用以下任意方式下载二进制压缩包:</p>
 <ul>
 <li>点击下面的链接,会自动触发下载:
 <ul>
@@ -187,7 +187,7 @@ pulsar-io-twitter-2.3.0.nar
 <p>If you already have an exsiting zookeeper cluster and would like to use it, you can skip this section.</p>
 </blockquote>
 <p><a href="https://zookeeper.apache.org">ZooKeeper</a> manages a variety of essential coordination- and configuration-related tasks for Pulsar. To deploy a Pulsar cluster you'll need to deploy ZooKeeper first (before all other components). We recommend deploying a 3-node ZooKeeper cluster. Pulsar does not make heavy use of ZooKeeper, so more lightweight machines or VMs should suffice for running ZooKeeper.</p>
-<p>To begin, add all ZooKeeper servers to the configuration specified in <a href="/docs/zh-CN/2.1.0-incubating/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> (in the Pulsar directory you created <a href="#installing-the-pulsar-binary-package">above</a>). 这里有一个示例:</p>
+<p>To begin, add all ZooKeeper servers to the configuration specified in <a href="/docs/zh-CN/2.1.0-incubating/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> (in the Pulsar directory you created <a href="#installing-the-pulsar-binary-package">above</a>). 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-meta">server.1</span>=<span class="hljs-string">zk1.us-west.example.com:2888:3888</span>
 <span class="hljs-meta">server.2</span>=<span class="hljs-string">zk2.us-west.example.com:2888:3888</span>
 <span class="hljs-meta">server.3</span>=<span class="hljs-string">zk3.us-west.example.com:2888:3888</span>
@@ -206,7 +206,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="initializing-cluster-metadata"></a><a href="#initializing-cluster-metadata" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12  [...]
 <p>Once you've deployed ZooKeeper for your cluster, there is some metadata that needs to be written to ZooKeeper for each cluster in your instance. It only needs to be written <strong>once</strong>.</p>
-<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.1.0-incubating/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.1.0-incubating/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. This command can be run on any machine in your ZooKeeper cluster. 这里有一个示例:</p>
+<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.1.0-incubating/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.1.0-incubating/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. This command can be run on any machine in your ZooKeeper cluster. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar initialize-cluster-metadata \</span>
   --cluster pulsar-cluster-1 \
   --zookeeper zk1.us-west.example.com:2181 \
@@ -223,17 +223,17 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>--cluster</code></td><td style="text-align:left">集群名字</td></tr>
-<tr><td style="text-align:left"><code>--zookeeper</code></td><td style="text-align:left">ZooKeeper集群的“本地”连接地址字符串。 此连接字符串为ZooKeeper集群任意<em>一个</em>实例的地址。</td></tr>
-<tr><td style="text-align:left"><code>--configuration-store</code></td><td style="text-align:left">整个集群实例的配置存储连接字符串。 和<code>--zookeeper</code>参数一样只需要包含ZooKeeper集群中的<em>一个</em>节点即可。</td></tr>
+<tr><td style="text-align:left"><code>--zookeeper</code></td><td style="text-align:left">ZooKeeper集群的“本地”连接字符串。 该连接字符串只需包含ZooKeeper集群<em>任一台</em>机器。</td></tr>
+<tr><td style="text-align:left"><code>--configuration-store</code></td><td style="text-align:left">整个集群实例的配置存储连接字符串。 和<code>--zookeeper</code>标记一样,该连接字符串只需包含ZooKeeper集群中的<em>任一台</em>机器即可。</td></tr>
 <tr><td style="text-align:left"><code>--web-service-url</code></td><td style="text-align:left">群集的Web服务URL以及端口。 此URL应为标准DNS名称。 默认端口为8080(我们不建议使用其他端口)。</td></tr>
-<tr><td style="text-align:left"><code>--web-service-url-tls</code></td><td style="text-align:left">如果您使用<a href="/docs/zh-CN/2.1.0-incubating/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL。 默认端口为8443(我们不建议使用其他端口)。</td></tr>
-<tr><td style="text-align:left"><code>--broker-service-url</code></td><td style="text-align:left">Broker服务的URL,用于与集群中的brokers进行交互。 此URL应使用与Web服务URL相同的DNS名称,但应使用<code>pulsar</code>替代http/https。 端口默认6650(我们不建议使用其他端口)。</td></tr>
-<tr><td style="text-align:left"><code>--broker-service-url-tls</code></td><td style="text-align:left">如果您使用<a href="/docs/zh-CN/2.1.0-incubating/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL以及为 brokers 群集指定TLS broker服务URL。 端口默认6651(我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--web-service-url-tls</code></td><td style="text-align:left">如果您使用<a href="/docs/zh-CN/2.1.0-incubating/security-tls-transport"> TLS </a>,需要为群集指定TLS Web服务URL。 默认端口为8443(我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--broker-service-url</code></td><td style="text-align:left">Broker服务的URL,用于与集群中的brokers进行交互。 此URL应使用与Web服务URL相同的DNS名称,但应使用<code>pulsar</code>替代scheme。 默认端口为 6650 (我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--broker-service-url-tls</code></td><td style="text-align:left">如果使用<a href="/docs/zh-CN/2.1.0-incubating/security-tls-transport"> TLS </a>,那么您还需要为群集指定TLS Web服务URL,为群集中的各个 broker 指定 TLS broker服务URL。 默认端口为 6651 (我们不建议使用其他端口)。</td></tr>
 </tbody>
 </table>
 <h2><a class="anchor" aria-hidden="true" id="deploying-a-bookkeeper-cluster"></a><a href="#deploying-a-bookkeeper-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 2.5S13.98 1 [...]
 <p><a href="https://bookkeeper.apache.org">BookKeeper</a> handles all persistent data storage in Pulsar. You will need to deploy a cluster of BookKeeper bookies to use Pulsar. We recommend running a <strong>3-bookie BookKeeper cluster</strong>.</p>
-<p>BookKeeper bookies can be configured using the <a href="/docs/zh-CN/2.1.0-incubating/reference-configuration#bookkeeper"><code>conf/bookkeeper.conf</code></a> configuration file. The most important step in configuring bookies for our purposes here is ensuring that the <a href="/docs/zh-CN/2.1.0-incubating/reference-configuration#bookkeeper-zkServers"><code>zkServers</code></a> is set to the connection string for the ZooKeeper cluster. 这里有一个示例:</p>
+<p>BookKeeper bookies can be configured using the <a href="/docs/zh-CN/2.1.0-incubating/reference-configuration#bookkeeper"><code>conf/bookkeeper.conf</code></a> configuration file. The most important step in configuring bookies for our purposes here is ensuring that the <a href="/docs/zh-CN/2.1.0-incubating/reference-configuration#bookkeeper-zkServers"><code>zkServers</code></a> is set to the connection string for the ZooKeeper cluster. 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zkServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
 <p>Once you've appropriately modified the <code>zkServers</code> parameter, you can provide any other configuration modifications you need. You can find a full listing of the available BookKeeper configuration parameters <a href="/docs/zh-CN/2.1.0-incubating/reference-configuration#bookkeeper">here</a>, although we would recommend consulting the <a href="http://bookkeeper.apache.org/docs/latest/reference/config/">BookKeeper documentation</a> for a more in-depth guide.</p>
@@ -264,7 +264,7 @@ $ bin/pulsar-daemon start bookie
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
-<h3><a class="anchor" aria-hidden="true" id="配置brokers"></a><a href="#配置brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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 [...]
+<h3><a class="anchor" aria-hidden="true" id="配置broker"></a><a href="#配置broker" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
@@ -284,7 +284,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-conf">pulsarFunctionsCluster: pulsar-cluster<span class="hljs-number">-1</span>
 </code></pre></li>
 </ol>
-<h3><a class="anchor" aria-hidden="true" id="启动-brokers"></a><a href="#启动-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h3><a class="anchor" aria-hidden="true" id="启动-broker"></a><a href="#启动-broker" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>You can then provide any other configuration changes that you'd like in the <a href="reference-configuration.md#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
 <p>You can start a broker in the foreground using the <a href="reference-cli-tools.md#pulsar-broker"><code>pulsar broker</code></a> command:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar broker
@@ -295,7 +295,7 @@ $ bin/pulsar-daemon start bookie
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-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 2.5S1 [...]
 <p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="reference-cli-tools.md#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. 这里有一个示例:</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -329,7 +329,7 @@ $ bin/pulsar-daemon start bookie
 <p>You will see output as below:</p>
 <pre><code class="hljs css language-shell">hello world!
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/deploy-kubernetes"><span class="arrow-prev">← </span><span>Kubernetes</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/deploy-bare-metal-multi-cluster"><span>裸机多集群部署</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#准备工作">准备工作</a><ul class="toc-headings"><li><a href="#要求">要求 [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.0-incubating/deploy-kubernetes"><span class="arrow-prev">← </span><span>Kubernetes</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.0-incubating/deploy-bare-metal-multi-cluster"><span>裸机多集群部署</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#准备工作">准备工作</a><ul class="toc-headings"><li><a href="#要求">要求 [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.0-incubating/functions-api.html b/content/docs/zh-CN/2.1.0-incubating/functions-api.html
index abc9991..e9420d0 100644
--- a/content/docs/zh-CN/2.1.0-incubating/functions-api.html
+++ b/content/docs/zh-CN/2.1.0-incubating/functions-api.html
@@ -465,7 +465,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
 <p>For all key/value pairs passed to Java Pulsar Functions, both the key <em>and</em> the value are <code>String</code>s. If you'd like the value to be of a different type, you will need to deserialize from the <code>String</code> type.</p>
 </blockquote>
 <h3><a class="anchor" aria-hidden="true" id="java-metrics"></a><a href="#java-metrics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 这里有一个示例:</p>
+<p>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 下面是一个示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.functions.api.Context;
 <span class="hljs-keyword">import</span> org.apache.pulsar.functions.api.Function;
 
@@ -558,7 +558,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
 </tbody>
 </table>
 <h3><a class="anchor" aria-hidden="true" id="python-serde"></a><a href="#python-serde" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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 Functions use <a href="#serialization-and-deserialization-serde">SerDe</a> when publishing data to and consuming data from Pulsar topics (this is true of both <a href="#python-native-functions">native</a> functions and <a href="#python-sdk-functions">SDK</a> functions). You can specify the SerDe when <a href="/docs/zh-CN/2.1.0-incubating/functions-deploying#cluster-mode">creating</a> or <a href="/docs/zh-CN/2.1.0-incubating/functions-deploying#local-run-mode">running</a> functi [...]
+<p>Pulsar Functions use <a href="#serialization-and-deserialization-serde">SerDe</a> when publishing data to and consuming data from Pulsar topics (this is true of both <a href="#python-native-functions">native</a> functions and <a href="#python-sdk-functions">SDK</a> functions). You can specify the SerDe when <a href="/docs/zh-CN/2.1.0-incubating/functions-deploying#cluster-mode">creating</a> or <a href="/docs/zh-CN/2.1.0-incubating/functions-deploying#local-run-mode">running</a> functi [...]
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --tenant public \
   --namespace default \
@@ -652,7 +652,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="python-metrics"></a><a href="#python-metrics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 这里有一个示例:</p>
+<p>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 下面是一个示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> pulsar <span class="hljs-keyword">import</span> Function
 
 <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MetricRecorderFunction</span><span class="hljs-params">(Function)</span>:</span>
diff --git a/content/docs/zh-CN/2.1.0-incubating/functions-api/index.html b/content/docs/zh-CN/2.1.0-incubating/functions-api/index.html
index abc9991..e9420d0 100644
--- a/content/docs/zh-CN/2.1.0-incubating/functions-api/index.html
+++ b/content/docs/zh-CN/2.1.0-incubating/functions-api/index.html
@@ -465,7 +465,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
 <p>For all key/value pairs passed to Java Pulsar Functions, both the key <em>and</em> the value are <code>String</code>s. If you'd like the value to be of a different type, you will need to deserialize from the <code>String</code> type.</p>
 </blockquote>
 <h3><a class="anchor" aria-hidden="true" id="java-metrics"></a><a href="#java-metrics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 这里有一个示例:</p>
+<p>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 下面是一个示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.functions.api.Context;
 <span class="hljs-keyword">import</span> org.apache.pulsar.functions.api.Function;
 
@@ -558,7 +558,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
 </tbody>
 </table>
 <h3><a class="anchor" aria-hidden="true" id="python-serde"></a><a href="#python-serde" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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 Functions use <a href="#serialization-and-deserialization-serde">SerDe</a> when publishing data to and consuming data from Pulsar topics (this is true of both <a href="#python-native-functions">native</a> functions and <a href="#python-sdk-functions">SDK</a> functions). You can specify the SerDe when <a href="/docs/zh-CN/2.1.0-incubating/functions-deploying#cluster-mode">creating</a> or <a href="/docs/zh-CN/2.1.0-incubating/functions-deploying#local-run-mode">running</a> functi [...]
+<p>Pulsar Functions use <a href="#serialization-and-deserialization-serde">SerDe</a> when publishing data to and consuming data from Pulsar topics (this is true of both <a href="#python-native-functions">native</a> functions and <a href="#python-sdk-functions">SDK</a> functions). You can specify the SerDe when <a href="/docs/zh-CN/2.1.0-incubating/functions-deploying#cluster-mode">creating</a> or <a href="/docs/zh-CN/2.1.0-incubating/functions-deploying#local-run-mode">running</a> functi [...]
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --tenant public \
   --namespace default \
@@ -652,7 +652,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="python-metrics"></a><a href="#python-metrics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 这里有一个示例:</p>
+<p>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 下面是一个示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> pulsar <span class="hljs-keyword">import</span> Function
 
 <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MetricRecorderFunction</span><span class="hljs-params">(Function)</span>:</span>
diff --git a/content/docs/zh-CN/2.1.0-incubating/functions-deploying.html b/content/docs/zh-CN/2.1.0-incubating/functions-deploying.html
index bdb74ab..a2309d1 100644
--- a/content/docs/zh-CN/2.1.0-incubating/functions-deploying.html
+++ b/content/docs/zh-CN/2.1.0-incubating/functions-deploying.html
@@ -131,13 +131,13 @@
   --inputs persistent://public/default/input-1 \
   --output persistent://public/default/output-1
 </code></pre>
-<p>By default, the function will connect to a Pulsar cluster running on the same machine, via a local <a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#broker">broker</a> service URL of <code>pulsar://localhost:6650</code>. 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 这里有一个示例:</p>
+<p>By default, the function will connect to a Pulsar cluster running on the same machine, via a local <a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#broker">broker</a> service URL of <code>pulsar://localhost:6650</code>. 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> localrun \
   --brokerServiceUrl pulsar://my-cluster-host:6650 \
   <span class="hljs-comment"># Other function parameters</span>
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="cluster-mode"></a><a href="#cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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 Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 这里有一个示例:</p>
+<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --py myfunc.py \
   --className myfunc.SomeFunction \
@@ -154,7 +154,7 @@
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="parallelism"></a><a href="#parallelism" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-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>Pulsar Functions run as processes called <strong>instances</strong>. When you run a Pulsar Function, it runs as a single instance by default (and in <a href="#local-run-mode">local run mode</a> you can <em>only</em> run a single instance of a function).</p>
-<p>You can also specify the <em>parallelism</em> of a function, i.e. the number of instances to run, when you create the function. You can set the parallelism factor using the <code>--parallelism</code> flag of the <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#functions-create"><code>create</code></a> command. 这里有一个示例:</p>
+<p>You can also specify the <em>parallelism</em> of a function, i.e. the number of instances to run, when you create the function. You can set the parallelism factor using the <code>--parallelism</code> flag of the <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#functions-create"><code>create</code></a> command. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --parallelism 3 \
   <span class="hljs-comment"># Other function info</span>
diff --git a/content/docs/zh-CN/2.1.0-incubating/functions-deploying/index.html b/content/docs/zh-CN/2.1.0-incubating/functions-deploying/index.html
index bdb74ab..a2309d1 100644
--- a/content/docs/zh-CN/2.1.0-incubating/functions-deploying/index.html
+++ b/content/docs/zh-CN/2.1.0-incubating/functions-deploying/index.html
@@ -131,13 +131,13 @@
   --inputs persistent://public/default/input-1 \
   --output persistent://public/default/output-1
 </code></pre>
-<p>By default, the function will connect to a Pulsar cluster running on the same machine, via a local <a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#broker">broker</a> service URL of <code>pulsar://localhost:6650</code>. 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 这里有一个示例:</p>
+<p>By default, the function will connect to a Pulsar cluster running on the same machine, via a local <a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#broker">broker</a> service URL of <code>pulsar://localhost:6650</code>. 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> localrun \
   --brokerServiceUrl pulsar://my-cluster-host:6650 \
   <span class="hljs-comment"># Other function parameters</span>
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="cluster-mode"></a><a href="#cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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 Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 这里有一个示例:</p>
+<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --py myfunc.py \
   --className myfunc.SomeFunction \
@@ -154,7 +154,7 @@
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="parallelism"></a><a href="#parallelism" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-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>Pulsar Functions run as processes called <strong>instances</strong>. When you run a Pulsar Function, it runs as a single instance by default (and in <a href="#local-run-mode">local run mode</a> you can <em>only</em> run a single instance of a function).</p>
-<p>You can also specify the <em>parallelism</em> of a function, i.e. the number of instances to run, when you create the function. You can set the parallelism factor using the <code>--parallelism</code> flag of the <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#functions-create"><code>create</code></a> command. 这里有一个示例:</p>
+<p>You can also specify the <em>parallelism</em> of a function, i.e. the number of instances to run, when you create the function. You can set the parallelism factor using the <code>--parallelism</code> flag of the <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#functions-create"><code>create</code></a> command. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --parallelism 3 \
   <span class="hljs-comment"># Other function info</span>
diff --git a/content/docs/zh-CN/2.1.0-incubating/functions-overview.html b/content/docs/zh-CN/2.1.0-incubating/functions-overview.html
index 9a79fee..db6c2ea 100644
--- a/content/docs/zh-CN/2.1.0-incubating/functions-overview.html
+++ b/content/docs/zh-CN/2.1.0-incubating/functions-overview.html
@@ -297,13 +297,13 @@
   --inputs persistent://public/default/input-1 \
   --output persistent://public/default/output-1
 </code></pre>
-<p>默认情况下,函数连接到同一机器上运行的 Pulsar 集群通过本地的broker服务,URL是 <code>pulsar://localhost:6650</code>。 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 这里有一个示例:</p>
+<p>默认情况下,函数连接到同一机器上运行的 Pulsar 集群通过本地的broker服务,URL是 <code>pulsar://localhost:6650</code>。 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> localrun \
   --brokerServiceUrl pulsar://my-cluster-host:6650 \
   <span class="hljs-comment"># Other function parameters</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="cluster-run-mode"></a><a href="#cluster-run-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
-<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 这里有一个示例:</p>
+<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --py myfunc.py \
   --className myfunc.SomeFunction \
diff --git a/content/docs/zh-CN/2.1.0-incubating/functions-overview/index.html b/content/docs/zh-CN/2.1.0-incubating/functions-overview/index.html
index 9a79fee..db6c2ea 100644
--- a/content/docs/zh-CN/2.1.0-incubating/functions-overview/index.html
+++ b/content/docs/zh-CN/2.1.0-incubating/functions-overview/index.html
@@ -297,13 +297,13 @@
   --inputs persistent://public/default/input-1 \
   --output persistent://public/default/output-1
 </code></pre>
-<p>默认情况下,函数连接到同一机器上运行的 Pulsar 集群通过本地的broker服务,URL是 <code>pulsar://localhost:6650</code>。 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 这里有一个示例:</p>
+<p>默认情况下,函数连接到同一机器上运行的 Pulsar 集群通过本地的broker服务,URL是 <code>pulsar://localhost:6650</code>。 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> localrun \
   --brokerServiceUrl pulsar://my-cluster-host:6650 \
   <span class="hljs-comment"># Other function parameters</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="cluster-run-mode"></a><a href="#cluster-run-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
-<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 这里有一个示例:</p>
+<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --py myfunc.py \
   --className myfunc.SomeFunction \
diff --git a/content/docs/zh-CN/2.1.0-incubating/functions-quickstart.html b/content/docs/zh-CN/2.1.0-incubating/functions-quickstart.html
index 84ed6a8..f538d87 100644
--- a/content/docs/zh-CN/2.1.0-incubating/functions-quickstart.html
+++ b/content/docs/zh-CN/2.1.0-incubating/functions-quickstart.html
@@ -250,7 +250,7 @@ $ touch <span class="hljs-built_in">reverse</span>.py
   --namespace default \
   --name reverse
 </code></pre>
-<p>If you see <code>Created successfully</code>, the function is ready to accept incoming messages. Because the function is running in cluster mode, we can <strong>trigger</strong> the function using the <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#trigger"><code>trigger</code></a> command. This command will send a message that we specify to the function and also give us the function's output. 这里有一个示例:</p>
+<p>If you see <code>Created successfully</code>, the function is ready to accept incoming messages. Because the function is running in cluster mode, we can <strong>trigger</strong> the function using the <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#trigger"><code>trigger</code></a> command. This command will send a message that we specify to the function and also give us the function's output. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger \
   --name reverse \
   --tenant public \
diff --git a/content/docs/zh-CN/2.1.0-incubating/functions-quickstart/index.html b/content/docs/zh-CN/2.1.0-incubating/functions-quickstart/index.html
index 84ed6a8..f538d87 100644
--- a/content/docs/zh-CN/2.1.0-incubating/functions-quickstart/index.html
+++ b/content/docs/zh-CN/2.1.0-incubating/functions-quickstart/index.html
@@ -250,7 +250,7 @@ $ touch <span class="hljs-built_in">reverse</span>.py
   --namespace default \
   --name reverse
 </code></pre>
-<p>If you see <code>Created successfully</code>, the function is ready to accept incoming messages. Because the function is running in cluster mode, we can <strong>trigger</strong> the function using the <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#trigger"><code>trigger</code></a> command. This command will send a message that we specify to the function and also give us the function's output. 这里有一个示例:</p>
+<p>If you see <code>Created successfully</code>, the function is ready to accept incoming messages. Because the function is running in cluster mode, we can <strong>trigger</strong> the function using the <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#trigger"><code>trigger</code></a> command. This command will send a message that we specify to the function and also give us the function's output. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger \
   --name reverse \
   --tenant public \
diff --git a/content/docs/zh-CN/2.1.1-incubating/admin-api-partitioned-topics.html b/content/docs/zh-CN/2.1.1-incubating/admin-api-partitioned-topics.html
index eb705cc..7efb25d 100644
--- a/content/docs/zh-CN/2.1.1-incubating/admin-api-partitioned-topics.html
+++ b/content/docs/zh-CN/2.1.1-incubating/admin-api-partitioned-topics.html
@@ -78,7 +78,7 @@
 <h3><a class="anchor" aria-hidden="true" id="创建"></a><a href="#创建" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c [...]
 <p>在 Pulsar 中, 必须显式的创建分区主题。创建新的分区主题时,您需要提供主题的名称以及所需的分区的数量。</p>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-admin"></a><a href="#pulsar-admin" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>你可以使用<a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#create-partitioned-topic"><code>create-partitioned-topic</code></a>命令创建partitioned topic,并指定topic的名字;使用<code>-p</code> 或 <code>--partitions</code>标志指定分区数。 这里有一个示例:</p>
+<p>你可以使用<a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#create-partitioned-topic"><code>create-partitioned-topic</code></a>命令创建partitioned topic,并指定topic的名字;使用<code>-p</code> 或 <code>--partitions</code>标志指定分区数。 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin topics create-partitioned-topic \</span>
   persistent://my-tenant/my-namespace/my-topic \
   --partitions 4
@@ -102,7 +102,7 @@ admin.persistentTopics().createPartitionedTopic(topicName, numPartitions);
 </tbody>
 </table>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-admin-1"></a><a href="#pulsar-admin-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
-<p>You can see the number of partitions in a partitioned topic using the <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#get-partitioned-topic-metadata"><code>get-partitioned-topic-metadata</code></a> subcommand. 这里有一个示例:</p>
+<p>You can see the number of partitions in a partitioned topic using the <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#get-partitioned-topic-metadata"><code>get-partitioned-topic-metadata</code></a> subcommand. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics get-partitioned-topic-metadata \</span>
   persistent://my-tenant/my-namespace/my-topic
 {
diff --git a/content/docs/zh-CN/2.1.1-incubating/admin-api-partitioned-topics/index.html b/content/docs/zh-CN/2.1.1-incubating/admin-api-partitioned-topics/index.html
index eb705cc..7efb25d 100644
--- a/content/docs/zh-CN/2.1.1-incubating/admin-api-partitioned-topics/index.html
+++ b/content/docs/zh-CN/2.1.1-incubating/admin-api-partitioned-topics/index.html
@@ -78,7 +78,7 @@
 <h3><a class="anchor" aria-hidden="true" id="创建"></a><a href="#创建" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c [...]
 <p>在 Pulsar 中, 必须显式的创建分区主题。创建新的分区主题时,您需要提供主题的名称以及所需的分区的数量。</p>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-admin"></a><a href="#pulsar-admin" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>你可以使用<a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#create-partitioned-topic"><code>create-partitioned-topic</code></a>命令创建partitioned topic,并指定topic的名字;使用<code>-p</code> 或 <code>--partitions</code>标志指定分区数。 这里有一个示例:</p>
+<p>你可以使用<a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#create-partitioned-topic"><code>create-partitioned-topic</code></a>命令创建partitioned topic,并指定topic的名字;使用<code>-p</code> 或 <code>--partitions</code>标志指定分区数。 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin topics create-partitioned-topic \</span>
   persistent://my-tenant/my-namespace/my-topic \
   --partitions 4
@@ -102,7 +102,7 @@ admin.persistentTopics().createPartitionedTopic(topicName, numPartitions);
 </tbody>
 </table>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-admin-1"></a><a href="#pulsar-admin-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
-<p>You can see the number of partitions in a partitioned topic using the <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#get-partitioned-topic-metadata"><code>get-partitioned-topic-metadata</code></a> subcommand. 这里有一个示例:</p>
+<p>You can see the number of partitions in a partitioned topic using the <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#get-partitioned-topic-metadata"><code>get-partitioned-topic-metadata</code></a> subcommand. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics get-partitioned-topic-metadata \</span>
   persistent://my-tenant/my-namespace/my-topic
 {
diff --git a/content/docs/zh-CN/2.1.1-incubating/client-libraries-go.html b/content/docs/zh-CN/2.1.1-incubating/client-libraries-go.html
index c57af91..2e8c8d9 100644
--- a/content/docs/zh-CN/2.1.1-incubating/client-libraries-go.html
+++ b/content/docs/zh-CN/2.1.1-incubating/client-libraries-go.html
@@ -104,7 +104,7 @@
 <pre><code class="hljs css language-http">pulsar+ssl://pulsar.us-west.example.com:6651
 </code></pre>
 <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>In order to interact with Pulsar, you'll first need a <code>Client</code> object. You can create a client object using the <code>NewClient</code> function, passing in a <code>ClientOptions</code> object (more on configuration <a href="#client-configuration">below</a>). 这里有一个示例:</p>
+<p>In order to interact with Pulsar, you'll first need a <code>Client</code> object. You can create a client object using the <code>NewClient</code> function, passing in a <code>ClientOptions</code> object (more on configuration <a href="#client-configuration">below</a>). 下面是一个示例:</p>
 <pre><code class="hljs css language-go"><span class="hljs-keyword">import</span> (
     <span class="hljs-string">"log"</span>
     <span class="hljs-string">"runtime"</span>
@@ -358,7 +358,7 @@ consumer, err := client.Subscribe(consumerOpts)
 </tbody>
 </table>
 <h2><a class="anchor" aria-hidden="true" id="readers"></a><a href="#readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
-<p>Pulsar readers process messages from Pulsar topics. Readers are different from consumers because with readers you need to explicitly specify which message in the stream you want to begin with (consumers, on the other hand, automatically begin with the most recent unacked message). You can <a href="#reader-configuration">configure</a> Go readers using a <code>ReaderOptions</code> object. 这里有一个示例:</p>
+<p>Pulsar readers process messages from Pulsar topics. Readers are different from consumers because with readers you need to explicitly specify which message in the stream you want to begin with (consumers, on the other hand, automatically begin with the most recent unacked message). You can <a href="#reader-configuration">configure</a> Go readers using a <code>ReaderOptions</code> object. 下面是一个示例:</p>
 <pre><code class="hljs css language-go">reader, err := client.CreateReader(pulsar.ReaderOptions{
     Topic: <span class="hljs-string">"my-golang-topic"</span>,
     StartMessageId: pulsar.LatestMessage,
@@ -418,7 +418,7 @@ consumer, err := client.Subscribe(consumerOpts)
     }
 }
 </code></pre>
-<p>In the example above, the reader begins reading from the earliest available message (specified by <code>pulsar.EarliestMessage</code>). The reader can also begin reading from the latest message (<code>pulsar.LatestMessage</code>) or some other message ID specified by bytes using the <code>DeserializeMessageID</code> function, which takes a byte array and returns a <code>MessageID</code> object. 这里有一个示例:</p>
+<p>In the example above, the reader begins reading from the earliest available message (specified by <code>pulsar.EarliestMessage</code>). The reader can also begin reading from the latest message (<code>pulsar.LatestMessage</code>) or some other message ID specified by bytes using the <code>DeserializeMessageID</code> function, which takes a byte array and returns a <code>MessageID</code> object. 下面是一个示例:</p>
 <pre><code class="hljs css language-go">lastSavedId := <span class="hljs-comment">// Read last saved message id from external store as byte[]</span>
 
 reader, err := client.CreateReader(pulsar.ReaderOptions{
@@ -476,7 +476,7 @@ reader, err := client.CreateReader(pulsar.ReaderOptions{
 <li>Set <code>TLSTrustCertsFilePath</code> to the path to the TLS certs used by your client and the Pulsar broker</li>
 <li>Configure <code>Authentication</code> option</li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-go">opts := pulsar.ClientOptions{
     URL: <span class="hljs-string">"pulsar+ssl://my-cluster.com:6651"</span>,
     TLSTrustCertsFilePath: <span class="hljs-string">"/path/to/certs/my-cert.csr"</span>,
diff --git a/content/docs/zh-CN/2.1.1-incubating/client-libraries-go/index.html b/content/docs/zh-CN/2.1.1-incubating/client-libraries-go/index.html
index c57af91..2e8c8d9 100644
--- a/content/docs/zh-CN/2.1.1-incubating/client-libraries-go/index.html
+++ b/content/docs/zh-CN/2.1.1-incubating/client-libraries-go/index.html
@@ -104,7 +104,7 @@
 <pre><code class="hljs css language-http">pulsar+ssl://pulsar.us-west.example.com:6651
 </code></pre>
 <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>In order to interact with Pulsar, you'll first need a <code>Client</code> object. You can create a client object using the <code>NewClient</code> function, passing in a <code>ClientOptions</code> object (more on configuration <a href="#client-configuration">below</a>). 这里有一个示例:</p>
+<p>In order to interact with Pulsar, you'll first need a <code>Client</code> object. You can create a client object using the <code>NewClient</code> function, passing in a <code>ClientOptions</code> object (more on configuration <a href="#client-configuration">below</a>). 下面是一个示例:</p>
 <pre><code class="hljs css language-go"><span class="hljs-keyword">import</span> (
     <span class="hljs-string">"log"</span>
     <span class="hljs-string">"runtime"</span>
@@ -358,7 +358,7 @@ consumer, err := client.Subscribe(consumerOpts)
 </tbody>
 </table>
 <h2><a class="anchor" aria-hidden="true" id="readers"></a><a href="#readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
-<p>Pulsar readers process messages from Pulsar topics. Readers are different from consumers because with readers you need to explicitly specify which message in the stream you want to begin with (consumers, on the other hand, automatically begin with the most recent unacked message). You can <a href="#reader-configuration">configure</a> Go readers using a <code>ReaderOptions</code> object. 这里有一个示例:</p>
+<p>Pulsar readers process messages from Pulsar topics. Readers are different from consumers because with readers you need to explicitly specify which message in the stream you want to begin with (consumers, on the other hand, automatically begin with the most recent unacked message). You can <a href="#reader-configuration">configure</a> Go readers using a <code>ReaderOptions</code> object. 下面是一个示例:</p>
 <pre><code class="hljs css language-go">reader, err := client.CreateReader(pulsar.ReaderOptions{
     Topic: <span class="hljs-string">"my-golang-topic"</span>,
     StartMessageId: pulsar.LatestMessage,
@@ -418,7 +418,7 @@ consumer, err := client.Subscribe(consumerOpts)
     }
 }
 </code></pre>
-<p>In the example above, the reader begins reading from the earliest available message (specified by <code>pulsar.EarliestMessage</code>). The reader can also begin reading from the latest message (<code>pulsar.LatestMessage</code>) or some other message ID specified by bytes using the <code>DeserializeMessageID</code> function, which takes a byte array and returns a <code>MessageID</code> object. 这里有一个示例:</p>
+<p>In the example above, the reader begins reading from the earliest available message (specified by <code>pulsar.EarliestMessage</code>). The reader can also begin reading from the latest message (<code>pulsar.LatestMessage</code>) or some other message ID specified by bytes using the <code>DeserializeMessageID</code> function, which takes a byte array and returns a <code>MessageID</code> object. 下面是一个示例:</p>
 <pre><code class="hljs css language-go">lastSavedId := <span class="hljs-comment">// Read last saved message id from external store as byte[]</span>
 
 reader, err := client.CreateReader(pulsar.ReaderOptions{
@@ -476,7 +476,7 @@ reader, err := client.CreateReader(pulsar.ReaderOptions{
 <li>Set <code>TLSTrustCertsFilePath</code> to the path to the TLS certs used by your client and the Pulsar broker</li>
 <li>Configure <code>Authentication</code> option</li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-go">opts := pulsar.ClientOptions{
     URL: <span class="hljs-string">"pulsar+ssl://my-cluster.com:6651"</span>,
     TLSTrustCertsFilePath: <span class="hljs-string">"/path/to/certs/my-cert.csr"</span>,
diff --git a/content/docs/zh-CN/2.1.1-incubating/client-libraries-java.html b/content/docs/zh-CN/2.1.1-incubating/client-libraries-java.html
index d7f0047..9b2922d 100644
--- a/content/docs/zh-CN/2.1.1-incubating/client-libraries-java.html
+++ b/content/docs/zh-CN/2.1.1-incubating/client-libraries-java.html
@@ -168,7 +168,7 @@ client.close();</p>
 </code></pre>
 <p>' %}</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.09 [...]
-<p>如果实例化 <code>生产者</code> 对象时仅指定主题topic名称 (如上面的示例所示), 则生产者将使用默认配置。 要使用非默认配置, 你可以设置多种可配置的参数。 有关完整列表, 请参阅 {@inject javadoc:ProducerBuilder:/client/org/apache/pulsar/client/api/ProducerBuilder} 类javadoc文档。 这里有一个示例:</p>
+<p>如果实例化 <code>生产者</code> 对象时仅指定主题topic名称 (如上面的示例所示), 则生产者将使用默认配置。 要使用非默认配置, 你可以设置多种可配置的参数。 有关完整列表, 请参阅 {@inject javadoc:ProducerBuilder:/client/org/apache/pulsar/client/api/ProducerBuilder} 类javadoc文档。 下面是一个示例:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
     .topic(<span class="hljs-string">"my-topic"</span>)
     .batchingMaxPublishDelay(<span class="hljs-number">10</span>, TimeUnit.MILLISECONDS)
@@ -220,7 +220,7 @@ client.close();</p>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="消费者配置"></a><a href="#消费者配置" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
 <p>如果实例化 <code>消费者</code> 对象, 仅指定主题和订阅名称, 如上面的示例所示, 消费者将采用默认配置。 要使用非默认配置, 你可以设置多种可配置的参数。 有关完整列表, 请参阅 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/ConsumerBuilder">ConsumerBuilder</a>
-类javadoc文档。 这里有一个示例:</p>
+类javadoc文档。 下面是一个示例:</p>
 <p>这是一个示例配置:</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
@@ -231,7 +231,7 @@ client.close();</p>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="异步接收"></a><a href="#异步接收" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <p><code>receive</code>方法将异步接受消息(消费者处理器将被阻塞,直到有消息到达)。 你也可以使用<a href="concepts-messaging.md#receive-modes">异步接收方法</a>,这将在一个新消息到达时立即返回一个<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>对象。</p>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>异步接收操作返回一个包装在<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>中的{@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message}消息对象。</p>
@@ -301,7 +301,7 @@ consumerBuilder
 和 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 /api/ReaderConfiguration}来创建<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 。</p>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">ReaderConfiguration conf = <span class="hljs-keyword">new</span> ReaderConfiguration();
 <span class="hljs-keyword">byte</span>[] msgIdBytes = <span class="hljs-comment">// 一些消息ID 的字节数组</span>
 MessageId id = MessageId.fromByteArray(msgIdBytes);
@@ -318,7 +318,7 @@ Reader reader = pulsarClient.newReader()
 <p>在上面的示例中,实例化一个<code>Reader</code>对象对指定的主题和消息(ID); reader将遍历主题中<code>msgIdBytes</code>(取值方式取决于应用程序) 之后的消息。</p>
 <p>上面的示例代码展示了<code>Reader</code>对象指向特定的消息(ID),但你也可以使用<code>MessageId.earliest</code>来指向topic上最早可用的消息,使用<code>MessageId.latest</code>指向最新的消息。</p>
 <h2><a class="anchor" aria-hidden="true" id="schema"></a><a href="#schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="concepts-schema-registry.md">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 这里有一个示例:</p>
+<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="concepts-schema-registry.md">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 下面是一个示例:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
diff --git a/content/docs/zh-CN/2.1.1-incubating/client-libraries-java/index.html b/content/docs/zh-CN/2.1.1-incubating/client-libraries-java/index.html
index d7f0047..9b2922d 100644
--- a/content/docs/zh-CN/2.1.1-incubating/client-libraries-java/index.html
+++ b/content/docs/zh-CN/2.1.1-incubating/client-libraries-java/index.html
@@ -168,7 +168,7 @@ client.close();</p>
 </code></pre>
 <p>' %}</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.09 [...]
-<p>如果实例化 <code>生产者</code> 对象时仅指定主题topic名称 (如上面的示例所示), 则生产者将使用默认配置。 要使用非默认配置, 你可以设置多种可配置的参数。 有关完整列表, 请参阅 {@inject javadoc:ProducerBuilder:/client/org/apache/pulsar/client/api/ProducerBuilder} 类javadoc文档。 这里有一个示例:</p>
+<p>如果实例化 <code>生产者</code> 对象时仅指定主题topic名称 (如上面的示例所示), 则生产者将使用默认配置。 要使用非默认配置, 你可以设置多种可配置的参数。 有关完整列表, 请参阅 {@inject javadoc:ProducerBuilder:/client/org/apache/pulsar/client/api/ProducerBuilder} 类javadoc文档。 下面是一个示例:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
     .topic(<span class="hljs-string">"my-topic"</span>)
     .batchingMaxPublishDelay(<span class="hljs-number">10</span>, TimeUnit.MILLISECONDS)
@@ -220,7 +220,7 @@ client.close();</p>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="消费者配置"></a><a href="#消费者配置" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
 <p>如果实例化 <code>消费者</code> 对象, 仅指定主题和订阅名称, 如上面的示例所示, 消费者将采用默认配置。 要使用非默认配置, 你可以设置多种可配置的参数。 有关完整列表, 请参阅 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/ConsumerBuilder">ConsumerBuilder</a>
-类javadoc文档。 这里有一个示例:</p>
+类javadoc文档。 下面是一个示例:</p>
 <p>这是一个示例配置:</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
@@ -231,7 +231,7 @@ client.close();</p>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="异步接收"></a><a href="#异步接收" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <p><code>receive</code>方法将异步接受消息(消费者处理器将被阻塞,直到有消息到达)。 你也可以使用<a href="concepts-messaging.md#receive-modes">异步接收方法</a>,这将在一个新消息到达时立即返回一个<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>对象。</p>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>异步接收操作返回一个包装在<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>中的{@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message}消息对象。</p>
@@ -301,7 +301,7 @@ consumerBuilder
 和 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 /api/ReaderConfiguration}来创建<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 。</p>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">ReaderConfiguration conf = <span class="hljs-keyword">new</span> ReaderConfiguration();
 <span class="hljs-keyword">byte</span>[] msgIdBytes = <span class="hljs-comment">// 一些消息ID 的字节数组</span>
 MessageId id = MessageId.fromByteArray(msgIdBytes);
@@ -318,7 +318,7 @@ Reader reader = pulsarClient.newReader()
 <p>在上面的示例中,实例化一个<code>Reader</code>对象对指定的主题和消息(ID); reader将遍历主题中<code>msgIdBytes</code>(取值方式取决于应用程序) 之后的消息。</p>
 <p>上面的示例代码展示了<code>Reader</code>对象指向特定的消息(ID),但你也可以使用<code>MessageId.earliest</code>来指向topic上最早可用的消息,使用<code>MessageId.latest</code>指向最新的消息。</p>
 <h2><a class="anchor" aria-hidden="true" id="schema"></a><a href="#schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="concepts-schema-registry.md">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 这里有一个示例:</p>
+<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="concepts-schema-registry.md">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 下面是一个示例:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
diff --git a/content/docs/zh-CN/2.1.1-incubating/client-libraries-websocket.html b/content/docs/zh-CN/2.1.1-incubating/client-libraries-websocket.html
index 420e3ee..b422401 100644
--- a/content/docs/zh-CN/2.1.1-incubating/client-libraries-websocket.html
+++ b/content/docs/zh-CN/2.1.1-incubating/client-libraries-websocket.html
@@ -92,7 +92,7 @@
 <li><a href="/docs/zh-CN/2.1.1-incubating/reference-configuration#websocket-webServicePort"><code>webServicePort</code></a></li>
 <li><a href="/docs/zh-CN/2.1.1-incubating/reference-configuration#websocket-clusterName"><code>clusterName</code></a></li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1:2181,zk2:2181,zk3:2181</span>
 <span class="hljs-attr">webServicePort</span>=<span class="hljs-string">8080</span>
 <span class="hljs-attr">clusterName</span>=<span class="hljs-string">my-cluster</span>
diff --git a/content/docs/zh-CN/2.1.1-incubating/client-libraries-websocket/index.html b/content/docs/zh-CN/2.1.1-incubating/client-libraries-websocket/index.html
index 420e3ee..b422401 100644
--- a/content/docs/zh-CN/2.1.1-incubating/client-libraries-websocket/index.html
+++ b/content/docs/zh-CN/2.1.1-incubating/client-libraries-websocket/index.html
@@ -92,7 +92,7 @@
 <li><a href="/docs/zh-CN/2.1.1-incubating/reference-configuration#websocket-webServicePort"><code>webServicePort</code></a></li>
 <li><a href="/docs/zh-CN/2.1.1-incubating/reference-configuration#websocket-clusterName"><code>clusterName</code></a></li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1:2181,zk2:2181,zk3:2181</span>
 <span class="hljs-attr">webServicePort</span>=<span class="hljs-string">8080</span>
 <span class="hljs-attr">clusterName</span>=<span class="hljs-string">my-cluster</span>
diff --git a/content/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview.html b/content/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview.html
index db08a8b..d1f14e1 100644
--- a/content/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview.html
+++ b/content/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview.html
@@ -155,7 +155,7 @@
 <blockquote>
 <p>为了性能和容错,你可以运行任意个Pulsar proxy。</p>
 </blockquote>
-<p>架构上来看,Pulsar Proxy从ZooKeeper上面读取他所需要的所有信息。 当启动代理时,你只需要提供用于集群独有和实例范围的配置存储的ZooKeeper连接串。 这里有一个示例:</p>
+<p>架构上来看,Pulsar Proxy从ZooKeeper上面读取他所需要的所有信息。 当启动代理时,你只需要提供用于集群独有和实例范围的配置存储的ZooKeeper连接串。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar proxy \
   --zookeeper-servers zk-0,zk-1,zk-2 \
   --configuration-store-servers zk-0,zk-1,zk-2
diff --git a/content/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview/index.html b/content/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview/index.html
index db08a8b..d1f14e1 100644
--- a/content/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview/index.html
+++ b/content/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview/index.html
@@ -155,7 +155,7 @@
 <blockquote>
 <p>为了性能和容错,你可以运行任意个Pulsar proxy。</p>
 </blockquote>
-<p>架构上来看,Pulsar Proxy从ZooKeeper上面读取他所需要的所有信息。 当启动代理时,你只需要提供用于集群独有和实例范围的配置存储的ZooKeeper连接串。 这里有一个示例:</p>
+<p>架构上来看,Pulsar Proxy从ZooKeeper上面读取他所需要的所有信息。 当启动代理时,你只需要提供用于集群独有和实例范围的配置存储的ZooKeeper连接串。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar proxy \
   --zookeeper-servers zk-0,zk-1,zk-2 \
   --configuration-store-servers zk-0,zk-1,zk-2
diff --git a/content/docs/zh-CN/2.1.1-incubating/concepts-messaging.html b/content/docs/zh-CN/2.1.1-incubating/concepts-messaging.html
index 7afe0ad..327989c 100644
--- a/content/docs/zh-CN/2.1.1-incubating/concepts-messaging.html
+++ b/content/docs/zh-CN/2.1.1-incubating/concepts-messaging.html
@@ -281,7 +281,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <p>这里还有一个非持久topic的<a href="client-libraries-java.md#producer">java producer</a>例子:</p>
 <pre><code class="hljs css language-java">Producer producer = client.createProducer(npTopic);
 </code></pre>
-<h2><a class="anchor" aria-hidden="true" id="message-retention-and-expiry"></a><a href="#message-retention-and-expiry" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
+<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>Pulsar broker默认如下:</p>
 <ul>
 <li>立即删除<em>所有</em>已经被cunsumer确认过的的消息</li>
@@ -296,7 +296,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <p>所有消息存留和过期在<a href="#namespaces">namespace</a>层面管理。具体操作请查看 <a href="cookbooks-retention-expiry.md">Message retention and expiry</a></p>
 </blockquote>
 <p>下图说明了这两种概念:</p>
-<p><img src="assets/retention-expiry.png" alt="Message retention and expiry"></p>
+<p><img src="assets/retention-expiry.png" alt="消息保留和到期"></p>
 <p>图中上面的是消息存留,<span style="color: #89b557;">存留规则</span>会被用于某namespace下所有的topic,指明哪些消息会被持久存储,即使已经被确认过。 没有被留存规则覆盖的消息将会被<span style="color: #bb3b3e;">删除</span>。 没有留存规则的话,<em>所有</em>被<span style="color: #19967d;">确认</span>的消息都会被删除。</p>
 <p>图中下面的是消息过期,有些消息即使还<span style="color: #337db6;">没有被确认</span>,也被<span style="color: #bb3b3e;">删除</span>掉了。因为根据设置在<span style="color: #e39441;">namespace上的TTL</span>,他们已经过期了。(例如,TTL为5分钟,过了十分钟消息还没被确认)</p>
 <h2><a class="anchor" aria-hidden="true" id="message-deduplication"></a><a href="#message-deduplication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
@@ -315,7 +315,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <blockquote>
 <p>更深入的信息可以参考 <a href="https://streaml.io/blog">Streamlio blog</a>上的<a href="https://streaml.io/blog/pulsar-effectively-once/">此篇博文</a></p>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/concepts-overview"><span class="arrow-prev">← </span><span>概述</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview"><span>Architecture</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#messages">Messages</a></li><li><a href="#producers">Producers</ [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/concepts-overview"><span class="arrow-prev">← </span><span>概述</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview"><span>Architecture</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#messages">Messages</a></li><li><a href="#producers">Producers</ [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.1-incubating/concepts-messaging/index.html b/content/docs/zh-CN/2.1.1-incubating/concepts-messaging/index.html
index 7afe0ad..327989c 100644
--- a/content/docs/zh-CN/2.1.1-incubating/concepts-messaging/index.html
+++ b/content/docs/zh-CN/2.1.1-incubating/concepts-messaging/index.html
@@ -281,7 +281,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <p>这里还有一个非持久topic的<a href="client-libraries-java.md#producer">java producer</a>例子:</p>
 <pre><code class="hljs css language-java">Producer producer = client.createProducer(npTopic);
 </code></pre>
-<h2><a class="anchor" aria-hidden="true" id="message-retention-and-expiry"></a><a href="#message-retention-and-expiry" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
+<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>Pulsar broker默认如下:</p>
 <ul>
 <li>立即删除<em>所有</em>已经被cunsumer确认过的的消息</li>
@@ -296,7 +296,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <p>所有消息存留和过期在<a href="#namespaces">namespace</a>层面管理。具体操作请查看 <a href="cookbooks-retention-expiry.md">Message retention and expiry</a></p>
 </blockquote>
 <p>下图说明了这两种概念:</p>
-<p><img src="assets/retention-expiry.png" alt="Message retention and expiry"></p>
+<p><img src="assets/retention-expiry.png" alt="消息保留和到期"></p>
 <p>图中上面的是消息存留,<span style="color: #89b557;">存留规则</span>会被用于某namespace下所有的topic,指明哪些消息会被持久存储,即使已经被确认过。 没有被留存规则覆盖的消息将会被<span style="color: #bb3b3e;">删除</span>。 没有留存规则的话,<em>所有</em>被<span style="color: #19967d;">确认</span>的消息都会被删除。</p>
 <p>图中下面的是消息过期,有些消息即使还<span style="color: #337db6;">没有被确认</span>,也被<span style="color: #bb3b3e;">删除</span>掉了。因为根据设置在<span style="color: #e39441;">namespace上的TTL</span>,他们已经过期了。(例如,TTL为5分钟,过了十分钟消息还没被确认)</p>
 <h2><a class="anchor" aria-hidden="true" id="message-deduplication"></a><a href="#message-deduplication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
@@ -315,7 +315,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <blockquote>
 <p>更深入的信息可以参考 <a href="https://streaml.io/blog">Streamlio blog</a>上的<a href="https://streaml.io/blog/pulsar-effectively-once/">此篇博文</a></p>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/concepts-overview"><span class="arrow-prev">← </span><span>概述</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview"><span>Architecture</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#messages">Messages</a></li><li><a href="#producers">Producers</ [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/concepts-overview"><span class="arrow-prev">← </span><span>概述</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview"><span>Architecture</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#messages">Messages</a></li><li><a href="#producers">Producers</ [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.1-incubating/cookbooks-compaction.html b/content/docs/zh-CN/2.1.1-incubating/cookbooks-compaction.html
index cdcf663..c4f3e52 100644
--- a/content/docs/zh-CN/2.1.1-incubating/cookbooks-compaction.html
+++ b/content/docs/zh-CN/2.1.1-incubating/cookbooks-compaction.html
@@ -98,12 +98,12 @@
 </code></pre>
 <p>Configuring the compaction threshold on a namespace will apply to all topics within that namespace.</p>
 <h2><a class="anchor" aria-hidden="true" id="triggering-compaction-manually-trigger"></a><a href="#triggering-compaction-manually-trigger" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1. [...]
-<p>In order to run compaction on a topic, you need to use the <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#topics-compact"><code>topics compact</code></a> command for the <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin"><code>pulsar-admin</code></a> CLI tool. 这里有一个示例:</p>
+<p>In order to run compaction on a topic, you need to use the <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#topics-compact"><code>topics compact</code></a> command for the <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin"><code>pulsar-admin</code></a> CLI tool. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin topics compact \
   persistent://my-tenant/my-namespace/my-topic
 </code></pre>
 <p>The <code>pulsar-admin</code> tool runs compaction via the Pulsar <a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
- API. To run compaction in its own dedicated process, i.e. <em>not</em> through the REST API, you can use the <a href="/docs/zh-CN/2.1.1-incubating/reference-cli-tools#pulsar-compact-topic"><code>pulsar compact-topic</code></a> command. 这里有一个示例:</p>
+ API. To run compaction in its own dedicated process, i.e. <em>not</em> through the REST API, you can use the <a href="/docs/zh-CN/2.1.1-incubating/reference-cli-tools#pulsar-compact-topic"><code>pulsar compact-topic</code></a> command. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar compact-topic \
   --topic persistent://my-tenant-namespace/my-topic
 </code></pre>
diff --git a/content/docs/zh-CN/2.1.1-incubating/cookbooks-compaction/index.html b/content/docs/zh-CN/2.1.1-incubating/cookbooks-compaction/index.html
index cdcf663..c4f3e52 100644
--- a/content/docs/zh-CN/2.1.1-incubating/cookbooks-compaction/index.html
+++ b/content/docs/zh-CN/2.1.1-incubating/cookbooks-compaction/index.html
@@ -98,12 +98,12 @@
 </code></pre>
 <p>Configuring the compaction threshold on a namespace will apply to all topics within that namespace.</p>
 <h2><a class="anchor" aria-hidden="true" id="triggering-compaction-manually-trigger"></a><a href="#triggering-compaction-manually-trigger" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1. [...]
-<p>In order to run compaction on a topic, you need to use the <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#topics-compact"><code>topics compact</code></a> command for the <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin"><code>pulsar-admin</code></a> CLI tool. 这里有一个示例:</p>
+<p>In order to run compaction on a topic, you need to use the <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#topics-compact"><code>topics compact</code></a> command for the <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin"><code>pulsar-admin</code></a> CLI tool. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin topics compact \
   persistent://my-tenant/my-namespace/my-topic
 </code></pre>
 <p>The <code>pulsar-admin</code> tool runs compaction via the Pulsar <a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
- API. To run compaction in its own dedicated process, i.e. <em>not</em> through the REST API, you can use the <a href="/docs/zh-CN/2.1.1-incubating/reference-cli-tools#pulsar-compact-topic"><code>pulsar compact-topic</code></a> command. 这里有一个示例:</p>
+ API. To run compaction in its own dedicated process, i.e. <em>not</em> through the REST API, you can use the <a href="/docs/zh-CN/2.1.1-incubating/reference-cli-tools#pulsar-compact-topic"><code>pulsar compact-topic</code></a> command. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar compact-topic \
   --topic persistent://my-tenant-namespace/my-topic
 </code></pre>
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 b7ed806..ecf24e4 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
@@ -117,7 +117,7 @@
 </ol>
 <p>Instructions for <a href="#java">Java</a>, <a href="#python">Python</a>, and <a href="#cpp">C++</a> clients can be found below.</p>
 <h3><a class="anchor" aria-hidden="true" id="java-clients-java"></a><a href="#java-clients-java" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
-<p>To enable message deduplication on a <a href="/docs/zh-CN/2.1.1-incubating/client-libraries-java#producers">Java producer</a>, set the producer name using the <code>producerName</code> setter and set the timeout to 0 using the <code>sendTimeout</code> setter. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/2.1.1-incubating/client-libraries-java#producers">Java producer</a>, set the producer name using the <code>producerName</code> setter and set the timeout to 0 using the <code>sendTimeout</code> setter. 下面是一个示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Producer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 <span class="hljs-keyword">import</span> java.util.concurrent.TimeUnit;
@@ -132,7 +132,7 @@ Producer producer = pulsarClient.newProducer()
         .create();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="python-clients-python"></a><a href="#python-clients-python" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 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>To enable message deduplication on a <a href="/docs/zh-CN/2.1.1-incubating/client-libraries-python#producers">Python producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/2.1.1-incubating/client-libraries-python#producers">Python producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 下面是一个示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">import</span> pulsar
 
 client = pulsar.Client(<span class="hljs-string">"pulsar://localhost:6650"</span>)
@@ -142,7 +142,7 @@ producer = client.create_producer(
     send_timeout_millis=<span class="hljs-number">0</span>)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-clients-cpp"></a><a href="#c-clients-cpp" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
-<p>To enable message deduplication on a <a href="/docs/zh-CN/2.1.1-incubating/client-libraries-cpp#producer">C++ producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/2.1.1-incubating/client-libraries-cpp#producer">C++ producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 下面是一个示例:</p>
 <pre><code class="hljs css language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 <span class="hljs-built_in">std</span>::<span class="hljs-built_in">string</span> serviceUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
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 b7ed806..ecf24e4 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
@@ -117,7 +117,7 @@
 </ol>
 <p>Instructions for <a href="#java">Java</a>, <a href="#python">Python</a>, and <a href="#cpp">C++</a> clients can be found below.</p>
 <h3><a class="anchor" aria-hidden="true" id="java-clients-java"></a><a href="#java-clients-java" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
-<p>To enable message deduplication on a <a href="/docs/zh-CN/2.1.1-incubating/client-libraries-java#producers">Java producer</a>, set the producer name using the <code>producerName</code> setter and set the timeout to 0 using the <code>sendTimeout</code> setter. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/2.1.1-incubating/client-libraries-java#producers">Java producer</a>, set the producer name using the <code>producerName</code> setter and set the timeout to 0 using the <code>sendTimeout</code> setter. 下面是一个示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Producer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 <span class="hljs-keyword">import</span> java.util.concurrent.TimeUnit;
@@ -132,7 +132,7 @@ Producer producer = pulsarClient.newProducer()
         .create();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="python-clients-python"></a><a href="#python-clients-python" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 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>To enable message deduplication on a <a href="/docs/zh-CN/2.1.1-incubating/client-libraries-python#producers">Python producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/2.1.1-incubating/client-libraries-python#producers">Python producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 下面是一个示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">import</span> pulsar
 
 client = pulsar.Client(<span class="hljs-string">"pulsar://localhost:6650"</span>)
@@ -142,7 +142,7 @@ producer = client.create_producer(
     send_timeout_millis=<span class="hljs-number">0</span>)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-clients-cpp"></a><a href="#c-clients-cpp" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
-<p>To enable message deduplication on a <a href="/docs/zh-CN/2.1.1-incubating/client-libraries-cpp#producer">C++ producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/2.1.1-incubating/client-libraries-cpp#producer">C++ producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 下面是一个示例:</p>
 <pre><code class="hljs css language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 <span class="hljs-built_in">std</span>::<span class="hljs-built_in">string</span> serviceUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
diff --git a/content/docs/zh-CN/2.1.1-incubating/cookbooks-encryption.html b/content/docs/zh-CN/2.1.1-incubating/cookbooks-encryption.html
index d1dd70a..e6f0e12 100644
--- a/content/docs/zh-CN/2.1.1-incubating/cookbooks-encryption.html
+++ b/content/docs/zh-CN/2.1.1-incubating/cookbooks-encryption.html
@@ -221,7 +221,7 @@ conf.addEncryptionKey(<span class="hljs-string">"myapp.messagekey2"</span>);
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-retention-expiry"><span class="arrow-prev">← </span><span>Message retention and expiry</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-message-queue"><span>Message queue</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryptio [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-retention-expiry"><span class="arrow-prev">← </span><span>消息保留和到期</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-message-queue"><span>Message queue</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and sym [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.1-incubating/cookbooks-encryption/index.html b/content/docs/zh-CN/2.1.1-incubating/cookbooks-encryption/index.html
index d1dd70a..e6f0e12 100644
--- a/content/docs/zh-CN/2.1.1-incubating/cookbooks-encryption/index.html
+++ b/content/docs/zh-CN/2.1.1-incubating/cookbooks-encryption/index.html
@@ -221,7 +221,7 @@ conf.addEncryptionKey(<span class="hljs-string">"myapp.messagekey2"</span>);
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-retention-expiry"><span class="arrow-prev">← </span><span>Message retention and expiry</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-message-queue"><span>Message queue</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryptio [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-retention-expiry"><span class="arrow-prev">← </span><span>消息保留和到期</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-message-queue"><span>Message queue</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and sym [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.1-incubating/cookbooks-non-persistent.html b/content/docs/zh-CN/2.1.1-incubating/cookbooks-non-persistent.html
index cb3fc11..d0d3dcf 100644
--- a/content/docs/zh-CN/2.1.1-incubating/cookbooks-non-persistent.html
+++ b/content/docs/zh-CN/2.1.1-incubating/cookbooks-non-persistent.html
@@ -108,7 +108,7 @@
 <p>可以使用<a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#non-persistent"> <code>pulsar-admin non-persistent</code> </a>命令行管理非持久性主题。 使用命令行工具,你可以执行诸如<a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#non-persistent-create-partitioned-topic">创建分区非持久性主题</a>,获取非持久主题的<a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#non-persistent-stats">统计信息</a>,获取命名空间下的非持久主题<a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin">列表</a>等操作。</p>
 <h2><a class="anchor" aria-hidden="true" id="与pulsar客户端一起使用"></a><a href="#与pulsar客户端一起使用" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>除了确保使用具有<code>非持久性</code>的正确<a href="#using">主题名称</a>作为主题类型之外,你不应该对 Pulsar 客户端进行任何更改以使用非持久性消息传递。</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-deduplication"><span class="arrow-prev">← </span><span>Message deduplication</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-partitioned"><span>分区Topic</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="#使用">使用</a></li><li><a h [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-deduplication"><span class="arrow-prev">← </span><span>Message deduplication</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-partitioned"><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="#使用">使用</a></li><li><a href [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.1-incubating/cookbooks-non-persistent/index.html b/content/docs/zh-CN/2.1.1-incubating/cookbooks-non-persistent/index.html
index cb3fc11..d0d3dcf 100644
--- a/content/docs/zh-CN/2.1.1-incubating/cookbooks-non-persistent/index.html
+++ b/content/docs/zh-CN/2.1.1-incubating/cookbooks-non-persistent/index.html
@@ -108,7 +108,7 @@
 <p>可以使用<a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#non-persistent"> <code>pulsar-admin non-persistent</code> </a>命令行管理非持久性主题。 使用命令行工具,你可以执行诸如<a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#non-persistent-create-partitioned-topic">创建分区非持久性主题</a>,获取非持久主题的<a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#non-persistent-stats">统计信息</a>,获取命名空间下的非持久主题<a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin">列表</a>等操作。</p>
 <h2><a class="anchor" aria-hidden="true" id="与pulsar客户端一起使用"></a><a href="#与pulsar客户端一起使用" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>除了确保使用具有<code>非持久性</code>的正确<a href="#using">主题名称</a>作为主题类型之外,你不应该对 Pulsar 客户端进行任何更改以使用非持久性消息传递。</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-deduplication"><span class="arrow-prev">← </span><span>Message deduplication</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-partitioned"><span>分区Topic</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="#使用">使用</a></li><li><a h [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-deduplication"><span class="arrow-prev">← </span><span>Message deduplication</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-partitioned"><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="#使用">使用</a></li><li><a href [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.1-incubating/cookbooks-partitioned.html b/content/docs/zh-CN/2.1.1-incubating/cookbooks-partitioned.html
index 855acf5..1dd5c0b 100644
--- a/content/docs/zh-CN/2.1.1-incubating/cookbooks-partitioned.html
+++ b/content/docs/zh-CN/2.1.1-incubating/cookbooks-partitioned.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Non-persistent messaging · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作的说明,请参见 &lt;a href=&quot;/docs/zh-C [...]
-"/><meta name="docsearch:version" content="2.1.1-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Non-persistent messaging · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关 [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Non-persistent messaging · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作,请参见 &lt;a href=&quot;/docs/zh-CN/2.1.1- [...]
+"/><meta name="docsearch:version" content="2.1.1-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Non-persistent messaging · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如 [...]
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -70,12 +70,12 @@
                 };
               }
             });
-        </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">Non-persistent messaging</h1></header><article><div><span><p>默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 <em>分区Topic</em>是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主 [...]
+        </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">Non-persistent messaging</h1></header><article><div><span><p>默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 <em>分区Topic</em>是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作 [...]
 <p>您可以使用Pulsar的客户端库将消息<a href="#publishing-to-partitioned-topics">发布</a>到分区主题,还可以使用Pulsar的<a href="/docs/zh-CN/2.1.1-incubating/admin-api-overview"> admin API </a>进行<a href="#managing-partitioned-topics">创建和管理</a>分区主题。</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>发布到分区主题时,与非分区主题的唯一区别是您需要在创建<a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#producer">生产者</a>时指定<a href="/docs/zh-CN/2.1.1-incubating/concepts-messaging#routing-modes">路由模式</a>。 <a href="#java">Java</a>示例如下。</p>
+<p>发布到分区主题时,与非分区主题的唯一区别是您需要在创建新的<a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#producer">生产者</a>时指定<a href="/docs/zh-CN/2.1.1-incubating/concepts-messaging#routing-modes">路由模式</a>。 <a href="#java">Java</a>示例如下。</p>
 <h3><a class="anchor" aria-hidden="true" id="java"></a><a href="#java" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>在Java客户端中将消息发布到分区主题,非常类似于发布到<a href="/docs/zh-CN/2.1.1-incubating/client-libraries-java#using-producers">普通主题</a>。 不同之处在于您需要指定一个消息路器(从已有的路由器中选择一个或实现一个自定义的路由器)。</p>
+<p>在Java客户端中将消息发布到分区主题,和发布到<a href="/docs/zh-CN/2.1.1-incubating/client-libraries-java#using-producers">普通主题</a>非常类似。 不同之处在于您需要指定一个消息路器(从已有的路由器中选择一个或实现一个自定义的路由器)。</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.09V6 [...]
 <p>您可以在ProducerConfiguration对象中指定用于配置生产者的路由模式。 可以从如下三个模式中选择:</p>
 <ul>
@@ -83,7 +83,7 @@
 <li><code>RoundRobinPartition</code></li>
 <li><code>CustomPartition</code></li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">String pulsarBrokerRootUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
 String topic = <span class="hljs-string">"persistent://my-tenant/my-namespace/my-topic"</span>;
 
@@ -121,7 +121,7 @@ producer.send(<span class="hljs-string">"Partitioned topic message"</span>.getBy
 </code></pre>
 <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>您可以使用Pulsar的<a href="/docs/zh-CN/2.1.1-incubating/admin-api-overview"> admin API </a>来创建和管理<a href="/docs/zh-CN/2.1.1-incubating/admin-api-partitioned-topics">分区主题</a>。</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-non-persistent"><span class="arrow-prev">← </span><span>非持久化消息</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-retention-expiry"><span>Message retention and expiry</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#发布到分区主题">发布到分区主题</a><ul class="toc-headi [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-non-persistent"><span class="arrow-prev">← </span><span>非持久化消息</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-retention-expiry"><span>消息保留和到期</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#发布到分区主题">发布到分区主题</a><ul class="toc-headings"><li><a href="#ja [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.1-incubating/cookbooks-partitioned/index.html b/content/docs/zh-CN/2.1.1-incubating/cookbooks-partitioned/index.html
index 855acf5..1dd5c0b 100644
--- a/content/docs/zh-CN/2.1.1-incubating/cookbooks-partitioned/index.html
+++ b/content/docs/zh-CN/2.1.1-incubating/cookbooks-partitioned/index.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Non-persistent messaging · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作的说明,请参见 &lt;a href=&quot;/docs/zh-C [...]
-"/><meta name="docsearch:version" content="2.1.1-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Non-persistent messaging · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关 [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Non-persistent messaging · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作,请参见 &lt;a href=&quot;/docs/zh-CN/2.1.1- [...]
+"/><meta name="docsearch:version" content="2.1.1-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Non-persistent messaging · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如 [...]
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -70,12 +70,12 @@
                 };
               }
             });
-        </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">Non-persistent messaging</h1></header><article><div><span><p>默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 <em>分区Topic</em>是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主 [...]
+        </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">Non-persistent messaging</h1></header><article><div><span><p>默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 <em>分区Topic</em>是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作 [...]
 <p>您可以使用Pulsar的客户端库将消息<a href="#publishing-to-partitioned-topics">发布</a>到分区主题,还可以使用Pulsar的<a href="/docs/zh-CN/2.1.1-incubating/admin-api-overview"> admin API </a>进行<a href="#managing-partitioned-topics">创建和管理</a>分区主题。</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>发布到分区主题时,与非分区主题的唯一区别是您需要在创建<a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#producer">生产者</a>时指定<a href="/docs/zh-CN/2.1.1-incubating/concepts-messaging#routing-modes">路由模式</a>。 <a href="#java">Java</a>示例如下。</p>
+<p>发布到分区主题时,与非分区主题的唯一区别是您需要在创建新的<a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#producer">生产者</a>时指定<a href="/docs/zh-CN/2.1.1-incubating/concepts-messaging#routing-modes">路由模式</a>。 <a href="#java">Java</a>示例如下。</p>
 <h3><a class="anchor" aria-hidden="true" id="java"></a><a href="#java" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>在Java客户端中将消息发布到分区主题,非常类似于发布到<a href="/docs/zh-CN/2.1.1-incubating/client-libraries-java#using-producers">普通主题</a>。 不同之处在于您需要指定一个消息路器(从已有的路由器中选择一个或实现一个自定义的路由器)。</p>
+<p>在Java客户端中将消息发布到分区主题,和发布到<a href="/docs/zh-CN/2.1.1-incubating/client-libraries-java#using-producers">普通主题</a>非常类似。 不同之处在于您需要指定一个消息路器(从已有的路由器中选择一个或实现一个自定义的路由器)。</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.09V6 [...]
 <p>您可以在ProducerConfiguration对象中指定用于配置生产者的路由模式。 可以从如下三个模式中选择:</p>
 <ul>
@@ -83,7 +83,7 @@
 <li><code>RoundRobinPartition</code></li>
 <li><code>CustomPartition</code></li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">String pulsarBrokerRootUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
 String topic = <span class="hljs-string">"persistent://my-tenant/my-namespace/my-topic"</span>;
 
@@ -121,7 +121,7 @@ producer.send(<span class="hljs-string">"Partitioned topic message"</span>.getBy
 </code></pre>
 <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>您可以使用Pulsar的<a href="/docs/zh-CN/2.1.1-incubating/admin-api-overview"> admin API </a>来创建和管理<a href="/docs/zh-CN/2.1.1-incubating/admin-api-partitioned-topics">分区主题</a>。</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-non-persistent"><span class="arrow-prev">← </span><span>非持久化消息</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-retention-expiry"><span>Message retention and expiry</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#发布到分区主题">发布到分区主题</a><ul class="toc-headi [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-non-persistent"><span class="arrow-prev">← </span><span>非持久化消息</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-retention-expiry"><span>消息保留和到期</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#发布到分区主题">发布到分区主题</a><ul class="toc-headings"><li><a href="#ja [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.1-incubating/cookbooks-retention-expiry.html b/content/docs/zh-CN/2.1.1-incubating/cookbooks-retention-expiry.html
index e18936e..084b16f 100644
--- a/content/docs/zh-CN/2.1.1-incubating/cookbooks-retention-expiry.html
+++ b/content/docs/zh-CN/2.1.1-incubating/cookbooks-retention-expiry.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar brokers are responsible for handling messages that pass through Pulsar, including &lt;a href=&quot;/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview#persistent [...]
-"/><meta name="docsearch:version" content="2.1.1-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Message retention and expiry · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;Pulsar brokers are responsible for handling messages that pass through Pulsar, including &lt;a href=&quot;/docs/zh-CN/2.1.1-incubatin [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar brokers 负责处理通过Pulsar的消息,包括消息的&lt;a href=&quot;/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview#persistent-storage&quot;&gt;持久存储&lt;/a&gt;。 默认情况下,broker 的策略如下: [...]
+"/><meta name="docsearch:version" content="2.1.1-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Message retention and expiry · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;Pulsar brokers 负责处理通过Pulsar的消息,包括消息的&lt;a href=&quot;/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview#persistent-storage&q [...]
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -70,15 +70,15 @@
                 };
               }
             });
-        </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">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers are responsible for handling messages that pass through Pulsar, including <a href="/docs/zh-CN/2.1.1-incubati [...]
+        </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">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers 负责处理通过Pulsar的消息,包括消息的<a href="/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview#persistent-storage" [...]
 <ul>
-<li>immediately delete all messages that have been acknowledged on every subscription, and</li>
-<li>persistently store all unacknowledged messages in a <a href="#backlog-quotas">backlog</a>.</li>
+<li>立即删除每个订阅上已确认的所有消息。</li>
+<li>并且持久性地将所有未确认的消息存储在<a href="#backlog-quotas"> backlog </a>中。</li>
 </ul>
-<p>In Pulsar, you can override both of these default behaviors, at the namespace level, in two ways:</p>
+<p>在Pulsar中,你可以在命名空间级别以两种方式覆盖这两种默认行为:</p>
 <ul>
-<li>You can persistently store messages that have already been consumed and acknowledged for a minimum time by setting <a href="#retention-policies">retention policies</a>.</li>
-<li>Messages that are not acknowledged within a specified timeframe, can be automatically marked as consumed, by specifying the <a href="#time-to-live-ttl">time to live</a> (TTL).</li>
+<li>通过设置 <a href="#retention-policies">保留策略</a>,可以持久地存储已经被使用和确认的消息,并将其保留最少时间。</li>
+<li>通过指定[生存时间](#time-to-live- TTL) (TTL),可以自动将未在指定时间范围内得到确认的消息标记为已消费。</li>
 </ul>
 <p>Pulsar's <a href="/docs/zh-CN/2.1.1-incubating/admin-api-overview">admin interface</a> enables you to manage both retention policies and TTL at the namespace level (and thus within a specific tenant and either on a specific cluster or in the <a href="/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview#global-cluster"><code>global</code></a> cluster).</p>
 <blockquote>
@@ -248,7 +248,7 @@ admin.namespaces().setBacklogQuota(namespace, quota);
 <h4><a class="anchor" aria-hidden="true" id="java-6"></a><a href="#java-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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. [...]
 <pre><code class="hljs css language-java">admin.namespaces().get
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-partitioned"><span class="arrow-prev">← </span><span>分区Topic</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-encryption"><span>Encryption</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#retention-policies">Retention policies</a><ul class="toc-headings" [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-partitioned"><span class="arrow-prev">← </span><span>分区主题</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-encryption"><span>Encryption</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#retention-policies">Retention policies</a><ul class="toc-headings"><l [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.1-incubating/cookbooks-retention-expiry/index.html b/content/docs/zh-CN/2.1.1-incubating/cookbooks-retention-expiry/index.html
index e18936e..084b16f 100644
--- a/content/docs/zh-CN/2.1.1-incubating/cookbooks-retention-expiry/index.html
+++ b/content/docs/zh-CN/2.1.1-incubating/cookbooks-retention-expiry/index.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar brokers are responsible for handling messages that pass through Pulsar, including &lt;a href=&quot;/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview#persistent [...]
-"/><meta name="docsearch:version" content="2.1.1-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Message retention and expiry · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;Pulsar brokers are responsible for handling messages that pass through Pulsar, including &lt;a href=&quot;/docs/zh-CN/2.1.1-incubatin [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar brokers 负责处理通过Pulsar的消息,包括消息的&lt;a href=&quot;/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview#persistent-storage&quot;&gt;持久存储&lt;/a&gt;。 默认情况下,broker 的策略如下: [...]
+"/><meta name="docsearch:version" content="2.1.1-incubating"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Message retention and expiry · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;Pulsar brokers 负责处理通过Pulsar的消息,包括消息的&lt;a href=&quot;/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview#persistent-storage&q [...]
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -70,15 +70,15 @@
                 };
               }
             });
-        </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">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers are responsible for handling messages that pass through Pulsar, including <a href="/docs/zh-CN/2.1.1-incubati [...]
+        </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">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers 负责处理通过Pulsar的消息,包括消息的<a href="/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview#persistent-storage" [...]
 <ul>
-<li>immediately delete all messages that have been acknowledged on every subscription, and</li>
-<li>persistently store all unacknowledged messages in a <a href="#backlog-quotas">backlog</a>.</li>
+<li>立即删除每个订阅上已确认的所有消息。</li>
+<li>并且持久性地将所有未确认的消息存储在<a href="#backlog-quotas"> backlog </a>中。</li>
 </ul>
-<p>In Pulsar, you can override both of these default behaviors, at the namespace level, in two ways:</p>
+<p>在Pulsar中,你可以在命名空间级别以两种方式覆盖这两种默认行为:</p>
 <ul>
-<li>You can persistently store messages that have already been consumed and acknowledged for a minimum time by setting <a href="#retention-policies">retention policies</a>.</li>
-<li>Messages that are not acknowledged within a specified timeframe, can be automatically marked as consumed, by specifying the <a href="#time-to-live-ttl">time to live</a> (TTL).</li>
+<li>通过设置 <a href="#retention-policies">保留策略</a>,可以持久地存储已经被使用和确认的消息,并将其保留最少时间。</li>
+<li>通过指定[生存时间](#time-to-live- TTL) (TTL),可以自动将未在指定时间范围内得到确认的消息标记为已消费。</li>
 </ul>
 <p>Pulsar's <a href="/docs/zh-CN/2.1.1-incubating/admin-api-overview">admin interface</a> enables you to manage both retention policies and TTL at the namespace level (and thus within a specific tenant and either on a specific cluster or in the <a href="/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview#global-cluster"><code>global</code></a> cluster).</p>
 <blockquote>
@@ -248,7 +248,7 @@ admin.namespaces().setBacklogQuota(namespace, quota);
 <h4><a class="anchor" aria-hidden="true" id="java-6"></a><a href="#java-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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. [...]
 <pre><code class="hljs css language-java">admin.namespaces().get
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-partitioned"><span class="arrow-prev">← </span><span>分区Topic</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-encryption"><span>Encryption</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#retention-policies">Retention policies</a><ul class="toc-headings" [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-partitioned"><span class="arrow-prev">← </span><span>分区主题</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/cookbooks-encryption"><span>Encryption</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#retention-policies">Retention policies</a><ul class="toc-headings"><l [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.1-incubating/deploy-bare-metal-multi-cluster.html b/content/docs/zh-CN/2.1.1-incubating/deploy-bare-metal-multi-cluster.html
index 79aeecf..66af675 100644
--- a/content/docs/zh-CN/2.1.1-incubating/deploy-bare-metal-multi-cluster.html
+++ b/content/docs/zh-CN/2.1.1-incubating/deploy-bare-metal-multi-cluster.html
@@ -211,7 +211,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.3.0
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="cluster-metadata-initialization"></a><a href="#cluster-metadata-initialization" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 [...]
 <p>Once you've set up the cluster-specific ZooKeeper and configuration store quorums for your instance, there is some metadata that needs to be written to ZooKeeper for each cluster in your instance. <strong>It only needs to be written once</strong>.</p>
-<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.1.1-incubating/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.1.1-incubating/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. 这里有一个示例:</p>
+<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.1.1-incubating/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.1.1-incubating/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar initialize-cluster-metadata \</span>
   --cluster us-west \
   --zookeeper zk1.us-west.example.com:2181 \
@@ -229,7 +229,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.3.0
 <li>集群的web服务URL</li>
 <li>Broker服务的URL,来开启和集群中<a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#broker">broker</a>的交互</li>
 </ul>
-<p>如果您使用<a href="/docs/zh-CN/2.1.1-incubating/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL以及为 brokers 群集指定TLS broker服务URL。</p>
+<p>如果使用<a href="/docs/zh-CN/2.1.1-incubating/security-tls-transport"> TLS </a>,那么您还需要为群集指定TLS Web服务URL,为群集中的各个 broker 指定 TLS broker服务URL。</p>
 <p>Make sure to run <code>initialize-cluster-metadata</code> for each cluster in your instance.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-bookkeeper"></a><a href="#deploying-bookkeeper" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
 <p>BookKeeper provides <a href="/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview#persistent-storage">persistent message storage</a> for Pulsar.</p>
diff --git a/content/docs/zh-CN/2.1.1-incubating/deploy-bare-metal-multi-cluster/index.html b/content/docs/zh-CN/2.1.1-incubating/deploy-bare-metal-multi-cluster/index.html
index 79aeecf..66af675 100644
--- a/content/docs/zh-CN/2.1.1-incubating/deploy-bare-metal-multi-cluster/index.html
+++ b/content/docs/zh-CN/2.1.1-incubating/deploy-bare-metal-multi-cluster/index.html
@@ -211,7 +211,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.3.0
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="cluster-metadata-initialization"></a><a href="#cluster-metadata-initialization" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 [...]
 <p>Once you've set up the cluster-specific ZooKeeper and configuration store quorums for your instance, there is some metadata that needs to be written to ZooKeeper for each cluster in your instance. <strong>It only needs to be written once</strong>.</p>
-<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.1.1-incubating/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.1.1-incubating/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. 这里有一个示例:</p>
+<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.1.1-incubating/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.1.1-incubating/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar initialize-cluster-metadata \</span>
   --cluster us-west \
   --zookeeper zk1.us-west.example.com:2181 \
@@ -229,7 +229,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.3.0
 <li>集群的web服务URL</li>
 <li>Broker服务的URL,来开启和集群中<a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#broker">broker</a>的交互</li>
 </ul>
-<p>如果您使用<a href="/docs/zh-CN/2.1.1-incubating/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL以及为 brokers 群集指定TLS broker服务URL。</p>
+<p>如果使用<a href="/docs/zh-CN/2.1.1-incubating/security-tls-transport"> TLS </a>,那么您还需要为群集指定TLS Web服务URL,为群集中的各个 broker 指定 TLS broker服务URL。</p>
 <p>Make sure to run <code>initialize-cluster-metadata</code> for each cluster in your instance.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-bookkeeper"></a><a href="#deploying-bookkeeper" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
 <p>BookKeeper provides <a href="/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview#persistent-storage">persistent message storage</a> for Pulsar.</p>
diff --git a/content/docs/zh-CN/2.1.1-incubating/deploy-bare-metal.html b/content/docs/zh-CN/2.1.1-incubating/deploy-bare-metal.html
index 2802410..1e73adf 100644
--- a/content/docs/zh-CN/2.1.1-incubating/deploy-bare-metal.html
+++ b/content/docs/zh-CN/2.1.1-incubating/deploy-bare-metal.html
@@ -91,7 +91,7 @@
 <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 [...]
 <h3><a class="anchor" aria-hidden="true" id="要求"></a><a href="#要求" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c [...]
 <blockquote>
-<p>如果你想使用已有的zookeeper集群,那就不用准备额外的机器去运行zookeeper。</p>
+<p>如果您想使用已有的zookeeper集群,那就不用准备额外的机器去运行zookeeper。</p>
 </blockquote>
 <p>To run Pulsar on bare metal, you will need:</p>
 <ul>
@@ -100,7 +100,7 @@
 <li>3台运行<a href="https://zookeeper.apache.org">ZooKeeper</a></li>
 <li>3台运行Pulsar broker,一台 <a href="https://bookkeeper.apache.org">BookKeeper</a> bookie</li>
 </ul></li>
-<li>一个 <a href="https://en.wikipedia.org/wiki/Domain_Name_System">DNS</a>(域名解析服务器)包含Pulsar所有broker主机</li>
+<li>一个 包含Pulsar所有broker主机的<a href="https://en.wikipedia.org/wiki/Domain_Name_System">DNS</a>(域名解析服务器)</li>
 </ul>
 <p>集群中的每台机器都需要安装<a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">Java 8</a>或更高版本。</p>
 <p>下图展示了基本设置:</p>
@@ -109,18 +109,18 @@
 <h3><a class="anchor" aria-hidden="true" id="hardware-considerations"></a><a href="#hardware-considerations" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 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>在部署 Pulsar 集群时,我们提供了一些基本建议,在容量规划时应牢记这些建议。</p>
 <h4><a class="anchor" aria-hidden="true" id="zookeeper"></a><a href="#zookeeper" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>对于运行ZooKeeper的机器,我们建议使用配置一般的机器或VM。 Pulsar使用ZooKeeper只是定期做些协调和配置相关的任务,<em>不</em>用于基本操作。 如果您在<a href="https://aws.amazon.com/">Amazon Web Services </a>(AWS)上部署Pulsar,比如一个<a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html">t2.small </a>实例就足够了。</p>
+<p>对于运行ZooKeeper的机器,我们建议使用配置一般的机器或VM。 Pulsar使用ZooKeeper只是定期做些协调和配置相关的任务,<em>不</em>用于基本操作。 如果您在<a href="https://aws.amazon.com/">Amazon Web Services </a>(AWS)上部署Pulsar,例如一个<a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html">t2.small </a>实例就足够了。</p>
 <h4><a class="anchor" aria-hidden="true" id="bookies-brokers"></a><a href="#bookies-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
 <p>对于运行 bookie 和 Pulsar broker 的机器,我们建议使用性能更强大的机器。 例如,对于AWS部署,<a href="https://aws.amazon.com/blogs/aws/now-available-i3-instances-for-demanding-io-intensive-applications/">i3.4xlarge</a>实例可能是合适的。 在这些机器上部署,我们还有以下建议:</p>
 <ul>
 <li>高性能的CPU和10Gbps <a href="https://en.wikipedia.org/wiki/Network_interface_controller"> NIC </a>(适用于Pulsar brokers)</li>
-<li>小型快速固态硬盘<a href="https://en.wikipedia.org/wiki/Solid-state_drive">(SSD)</a>或硬盘驱动器<a href="https://en.wikipedia.org/wiki/Hard_disk_drive">(HDD)</a>,带有<a href="https://en.wikipedia.org/wiki/RAID">RAID</a>控制器和电池供电的写缓存(适用于BookKeeper bookies)</li>
+<li>小型快速<a href="https://en.wikipedia.org/wiki/Solid-state_drive">固态硬盘</a>(SSD)或<a href="https://en.wikipedia.org/wiki/Hard_disk_drive">硬盘驱动器</a>(HDD),带有<a href="https://en.wikipedia.org/wiki/RAID">RAID</a>控制器和电池供电的写缓存(适用于BookKeeper bookies)</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="安装pulsar二进制包"></a><a href="#安装pulsar二进制包" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <blockquote>
 <p>You'll need to install the Pulsar binary package on <em>each machine in the cluster</em>, including machines running <a href="#deploying-a-zookeeper-cluster">ZooKeeper</a> and <a href="#deploying-a-bookkeeper-cluster">BookKeeper</a>.</p>
 </blockquote>
-<p>要开始在裸机上部署Pulsar集群,您需要通过以下方式之一下载二进制压缩包:</p>
+<p>要在裸机上部署Pulsar集群,用以下任意方式下载二进制压缩包:</p>
 <ul>
 <li>点击下面的链接,会自动触发下载:
 <ul>
@@ -187,7 +187,7 @@ pulsar-io-twitter-2.3.0.nar
 <p>If you already have an exsiting zookeeper cluster and would like to use it, you can skip this section.</p>
 </blockquote>
 <p><a href="https://zookeeper.apache.org">ZooKeeper</a> manages a variety of essential coordination- and configuration-related tasks for Pulsar. To deploy a Pulsar cluster you'll need to deploy ZooKeeper first (before all other components). We recommend deploying a 3-node ZooKeeper cluster. Pulsar does not make heavy use of ZooKeeper, so more lightweight machines or VMs should suffice for running ZooKeeper.</p>
-<p>To begin, add all ZooKeeper servers to the configuration specified in <a href="/docs/zh-CN/2.1.1-incubating/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> (in the Pulsar directory you created <a href="#installing-the-pulsar-binary-package">above</a>). 这里有一个示例:</p>
+<p>To begin, add all ZooKeeper servers to the configuration specified in <a href="/docs/zh-CN/2.1.1-incubating/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> (in the Pulsar directory you created <a href="#installing-the-pulsar-binary-package">above</a>). 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-meta">server.1</span>=<span class="hljs-string">zk1.us-west.example.com:2888:3888</span>
 <span class="hljs-meta">server.2</span>=<span class="hljs-string">zk2.us-west.example.com:2888:3888</span>
 <span class="hljs-meta">server.3</span>=<span class="hljs-string">zk3.us-west.example.com:2888:3888</span>
@@ -206,7 +206,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="initializing-cluster-metadata"></a><a href="#initializing-cluster-metadata" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12  [...]
 <p>Once you've deployed ZooKeeper for your cluster, there is some metadata that needs to be written to ZooKeeper for each cluster in your instance. It only needs to be written <strong>once</strong>.</p>
-<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.1.1-incubating/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.1.1-incubating/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. This command can be run on any machine in your ZooKeeper cluster. 这里有一个示例:</p>
+<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.1.1-incubating/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.1.1-incubating/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. This command can be run on any machine in your ZooKeeper cluster. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar initialize-cluster-metadata \</span>
   --cluster pulsar-cluster-1 \
   --zookeeper zk1.us-west.example.com:2181 \
@@ -223,17 +223,17 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>--cluster</code></td><td style="text-align:left">集群名字</td></tr>
-<tr><td style="text-align:left"><code>--zookeeper</code></td><td style="text-align:left">ZooKeeper集群的“本地”连接地址字符串。 此连接字符串为ZooKeeper集群任意<em>一个</em>实例的地址。</td></tr>
-<tr><td style="text-align:left"><code>--configuration-store</code></td><td style="text-align:left">整个集群实例的配置存储连接字符串。 和<code>--zookeeper</code>参数一样只需要包含ZooKeeper集群中的<em>一个</em>节点即可。</td></tr>
+<tr><td style="text-align:left"><code>--zookeeper</code></td><td style="text-align:left">ZooKeeper集群的“本地”连接字符串。 该连接字符串只需包含ZooKeeper集群<em>任一台</em>机器。</td></tr>
+<tr><td style="text-align:left"><code>--configuration-store</code></td><td style="text-align:left">整个集群实例的配置存储连接字符串。 和<code>--zookeeper</code>标记一样,该连接字符串只需包含ZooKeeper集群中的<em>任一台</em>机器即可。</td></tr>
 <tr><td style="text-align:left"><code>--web-service-url</code></td><td style="text-align:left">群集的Web服务URL以及端口。 此URL应为标准DNS名称。 默认端口为8080(我们不建议使用其他端口)。</td></tr>
-<tr><td style="text-align:left"><code>--web-service-url-tls</code></td><td style="text-align:left">如果您使用<a href="/docs/zh-CN/2.1.1-incubating/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL。 默认端口为8443(我们不建议使用其他端口)。</td></tr>
-<tr><td style="text-align:left"><code>--broker-service-url</code></td><td style="text-align:left">Broker服务的URL,用于与集群中的brokers进行交互。 此URL应使用与Web服务URL相同的DNS名称,但应使用<code>pulsar</code>替代http/https。 端口默认6650(我们不建议使用其他端口)。</td></tr>
-<tr><td style="text-align:left"><code>--broker-service-url-tls</code></td><td style="text-align:left">如果您使用<a href="/docs/zh-CN/2.1.1-incubating/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL以及为 brokers 群集指定TLS broker服务URL。 端口默认6651(我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--web-service-url-tls</code></td><td style="text-align:left">如果您使用<a href="/docs/zh-CN/2.1.1-incubating/security-tls-transport"> TLS </a>,需要为群集指定TLS Web服务URL。 默认端口为8443(我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--broker-service-url</code></td><td style="text-align:left">Broker服务的URL,用于与集群中的brokers进行交互。 此URL应使用与Web服务URL相同的DNS名称,但应使用<code>pulsar</code>替代scheme。 默认端口为 6650 (我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--broker-service-url-tls</code></td><td style="text-align:left">如果使用<a href="/docs/zh-CN/2.1.1-incubating/security-tls-transport"> TLS </a>,那么您还需要为群集指定TLS Web服务URL,为群集中的各个 broker 指定 TLS broker服务URL。 默认端口为 6651 (我们不建议使用其他端口)。</td></tr>
 </tbody>
 </table>
 <h2><a class="anchor" aria-hidden="true" id="deploying-a-bookkeeper-cluster"></a><a href="#deploying-a-bookkeeper-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 2.5S13.98 1 [...]
 <p><a href="https://bookkeeper.apache.org">BookKeeper</a> handles all persistent data storage in Pulsar. You will need to deploy a cluster of BookKeeper bookies to use Pulsar. We recommend running a <strong>3-bookie BookKeeper cluster</strong>.</p>
-<p>BookKeeper bookies can be configured using the <a href="/docs/zh-CN/2.1.1-incubating/reference-configuration#bookkeeper"><code>conf/bookkeeper.conf</code></a> configuration file. The most important step in configuring bookies for our purposes here is ensuring that the <a href="/docs/zh-CN/2.1.1-incubating/reference-configuration#bookkeeper-zkServers"><code>zkServers</code></a> is set to the connection string for the ZooKeeper cluster. 这里有一个示例:</p>
+<p>BookKeeper bookies can be configured using the <a href="/docs/zh-CN/2.1.1-incubating/reference-configuration#bookkeeper"><code>conf/bookkeeper.conf</code></a> configuration file. The most important step in configuring bookies for our purposes here is ensuring that the <a href="/docs/zh-CN/2.1.1-incubating/reference-configuration#bookkeeper-zkServers"><code>zkServers</code></a> is set to the connection string for the ZooKeeper cluster. 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zkServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
 <p>Once you've appropriately modified the <code>zkServers</code> parameter, you can provide any other configuration modifications you need. You can find a full listing of the available BookKeeper configuration parameters <a href="/docs/zh-CN/2.1.1-incubating/reference-configuration#bookkeeper">here</a>, although we would recommend consulting the <a href="http://bookkeeper.apache.org/docs/latest/reference/config/">BookKeeper documentation</a> for a more in-depth guide.</p>
@@ -264,7 +264,7 @@ $ bin/pulsar-daemon start bookie
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
-<h3><a class="anchor" aria-hidden="true" id="配置brokers"></a><a href="#配置brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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 [...]
+<h3><a class="anchor" aria-hidden="true" id="配置broker"></a><a href="#配置broker" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
@@ -284,7 +284,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-conf">pulsarFunctionsCluster: pulsar-cluster<span class="hljs-number">-1</span>
 </code></pre></li>
 </ol>
-<h3><a class="anchor" aria-hidden="true" id="启动-brokers"></a><a href="#启动-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h3><a class="anchor" aria-hidden="true" id="启动-broker"></a><a href="#启动-broker" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>You can then provide any other configuration changes that you'd like in the <a href="reference-configuration.md#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
 <p>You can start a broker in the foreground using the <a href="reference-cli-tools.md#pulsar-broker"><code>pulsar broker</code></a> command:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar broker
@@ -295,7 +295,7 @@ $ bin/pulsar-daemon start bookie
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-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 2.5S1 [...]
 <p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="reference-cli-tools.md#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. 这里有一个示例:</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -329,7 +329,7 @@ $ bin/pulsar-daemon start bookie
 <p>You will see output as below:</p>
 <pre><code class="hljs css language-shell">hello world!
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/deploy-kubernetes"><span class="arrow-prev">← </span><span>Kubernetes</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/deploy-bare-metal-multi-cluster"><span>裸机多集群部署</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#准备工作">准备工作</a><ul class="toc-headings"><li><a href="#要求">要求 [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/deploy-kubernetes"><span class="arrow-prev">← </span><span>Kubernetes</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/deploy-bare-metal-multi-cluster"><span>裸机多集群部署</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#准备工作">准备工作</a><ul class="toc-headings"><li><a href="#要求">要求 [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.1-incubating/deploy-bare-metal/index.html b/content/docs/zh-CN/2.1.1-incubating/deploy-bare-metal/index.html
index 2802410..1e73adf 100644
--- a/content/docs/zh-CN/2.1.1-incubating/deploy-bare-metal/index.html
+++ b/content/docs/zh-CN/2.1.1-incubating/deploy-bare-metal/index.html
@@ -91,7 +91,7 @@
 <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 [...]
 <h3><a class="anchor" aria-hidden="true" id="要求"></a><a href="#要求" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c [...]
 <blockquote>
-<p>如果你想使用已有的zookeeper集群,那就不用准备额外的机器去运行zookeeper。</p>
+<p>如果您想使用已有的zookeeper集群,那就不用准备额外的机器去运行zookeeper。</p>
 </blockquote>
 <p>To run Pulsar on bare metal, you will need:</p>
 <ul>
@@ -100,7 +100,7 @@
 <li>3台运行<a href="https://zookeeper.apache.org">ZooKeeper</a></li>
 <li>3台运行Pulsar broker,一台 <a href="https://bookkeeper.apache.org">BookKeeper</a> bookie</li>
 </ul></li>
-<li>一个 <a href="https://en.wikipedia.org/wiki/Domain_Name_System">DNS</a>(域名解析服务器)包含Pulsar所有broker主机</li>
+<li>一个 包含Pulsar所有broker主机的<a href="https://en.wikipedia.org/wiki/Domain_Name_System">DNS</a>(域名解析服务器)</li>
 </ul>
 <p>集群中的每台机器都需要安装<a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">Java 8</a>或更高版本。</p>
 <p>下图展示了基本设置:</p>
@@ -109,18 +109,18 @@
 <h3><a class="anchor" aria-hidden="true" id="hardware-considerations"></a><a href="#hardware-considerations" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 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>在部署 Pulsar 集群时,我们提供了一些基本建议,在容量规划时应牢记这些建议。</p>
 <h4><a class="anchor" aria-hidden="true" id="zookeeper"></a><a href="#zookeeper" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>对于运行ZooKeeper的机器,我们建议使用配置一般的机器或VM。 Pulsar使用ZooKeeper只是定期做些协调和配置相关的任务,<em>不</em>用于基本操作。 如果您在<a href="https://aws.amazon.com/">Amazon Web Services </a>(AWS)上部署Pulsar,比如一个<a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html">t2.small </a>实例就足够了。</p>
+<p>对于运行ZooKeeper的机器,我们建议使用配置一般的机器或VM。 Pulsar使用ZooKeeper只是定期做些协调和配置相关的任务,<em>不</em>用于基本操作。 如果您在<a href="https://aws.amazon.com/">Amazon Web Services </a>(AWS)上部署Pulsar,例如一个<a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html">t2.small </a>实例就足够了。</p>
 <h4><a class="anchor" aria-hidden="true" id="bookies-brokers"></a><a href="#bookies-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
 <p>对于运行 bookie 和 Pulsar broker 的机器,我们建议使用性能更强大的机器。 例如,对于AWS部署,<a href="https://aws.amazon.com/blogs/aws/now-available-i3-instances-for-demanding-io-intensive-applications/">i3.4xlarge</a>实例可能是合适的。 在这些机器上部署,我们还有以下建议:</p>
 <ul>
 <li>高性能的CPU和10Gbps <a href="https://en.wikipedia.org/wiki/Network_interface_controller"> NIC </a>(适用于Pulsar brokers)</li>
-<li>小型快速固态硬盘<a href="https://en.wikipedia.org/wiki/Solid-state_drive">(SSD)</a>或硬盘驱动器<a href="https://en.wikipedia.org/wiki/Hard_disk_drive">(HDD)</a>,带有<a href="https://en.wikipedia.org/wiki/RAID">RAID</a>控制器和电池供电的写缓存(适用于BookKeeper bookies)</li>
+<li>小型快速<a href="https://en.wikipedia.org/wiki/Solid-state_drive">固态硬盘</a>(SSD)或<a href="https://en.wikipedia.org/wiki/Hard_disk_drive">硬盘驱动器</a>(HDD),带有<a href="https://en.wikipedia.org/wiki/RAID">RAID</a>控制器和电池供电的写缓存(适用于BookKeeper bookies)</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="安装pulsar二进制包"></a><a href="#安装pulsar二进制包" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <blockquote>
 <p>You'll need to install the Pulsar binary package on <em>each machine in the cluster</em>, including machines running <a href="#deploying-a-zookeeper-cluster">ZooKeeper</a> and <a href="#deploying-a-bookkeeper-cluster">BookKeeper</a>.</p>
 </blockquote>
-<p>要开始在裸机上部署Pulsar集群,您需要通过以下方式之一下载二进制压缩包:</p>
+<p>要在裸机上部署Pulsar集群,用以下任意方式下载二进制压缩包:</p>
 <ul>
 <li>点击下面的链接,会自动触发下载:
 <ul>
@@ -187,7 +187,7 @@ pulsar-io-twitter-2.3.0.nar
 <p>If you already have an exsiting zookeeper cluster and would like to use it, you can skip this section.</p>
 </blockquote>
 <p><a href="https://zookeeper.apache.org">ZooKeeper</a> manages a variety of essential coordination- and configuration-related tasks for Pulsar. To deploy a Pulsar cluster you'll need to deploy ZooKeeper first (before all other components). We recommend deploying a 3-node ZooKeeper cluster. Pulsar does not make heavy use of ZooKeeper, so more lightweight machines or VMs should suffice for running ZooKeeper.</p>
-<p>To begin, add all ZooKeeper servers to the configuration specified in <a href="/docs/zh-CN/2.1.1-incubating/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> (in the Pulsar directory you created <a href="#installing-the-pulsar-binary-package">above</a>). 这里有一个示例:</p>
+<p>To begin, add all ZooKeeper servers to the configuration specified in <a href="/docs/zh-CN/2.1.1-incubating/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> (in the Pulsar directory you created <a href="#installing-the-pulsar-binary-package">above</a>). 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-meta">server.1</span>=<span class="hljs-string">zk1.us-west.example.com:2888:3888</span>
 <span class="hljs-meta">server.2</span>=<span class="hljs-string">zk2.us-west.example.com:2888:3888</span>
 <span class="hljs-meta">server.3</span>=<span class="hljs-string">zk3.us-west.example.com:2888:3888</span>
@@ -206,7 +206,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="initializing-cluster-metadata"></a><a href="#initializing-cluster-metadata" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12  [...]
 <p>Once you've deployed ZooKeeper for your cluster, there is some metadata that needs to be written to ZooKeeper for each cluster in your instance. It only needs to be written <strong>once</strong>.</p>
-<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.1.1-incubating/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.1.1-incubating/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. This command can be run on any machine in your ZooKeeper cluster. 这里有一个示例:</p>
+<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.1.1-incubating/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.1.1-incubating/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. This command can be run on any machine in your ZooKeeper cluster. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar initialize-cluster-metadata \</span>
   --cluster pulsar-cluster-1 \
   --zookeeper zk1.us-west.example.com:2181 \
@@ -223,17 +223,17 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>--cluster</code></td><td style="text-align:left">集群名字</td></tr>
-<tr><td style="text-align:left"><code>--zookeeper</code></td><td style="text-align:left">ZooKeeper集群的“本地”连接地址字符串。 此连接字符串为ZooKeeper集群任意<em>一个</em>实例的地址。</td></tr>
-<tr><td style="text-align:left"><code>--configuration-store</code></td><td style="text-align:left">整个集群实例的配置存储连接字符串。 和<code>--zookeeper</code>参数一样只需要包含ZooKeeper集群中的<em>一个</em>节点即可。</td></tr>
+<tr><td style="text-align:left"><code>--zookeeper</code></td><td style="text-align:left">ZooKeeper集群的“本地”连接字符串。 该连接字符串只需包含ZooKeeper集群<em>任一台</em>机器。</td></tr>
+<tr><td style="text-align:left"><code>--configuration-store</code></td><td style="text-align:left">整个集群实例的配置存储连接字符串。 和<code>--zookeeper</code>标记一样,该连接字符串只需包含ZooKeeper集群中的<em>任一台</em>机器即可。</td></tr>
 <tr><td style="text-align:left"><code>--web-service-url</code></td><td style="text-align:left">群集的Web服务URL以及端口。 此URL应为标准DNS名称。 默认端口为8080(我们不建议使用其他端口)。</td></tr>
-<tr><td style="text-align:left"><code>--web-service-url-tls</code></td><td style="text-align:left">如果您使用<a href="/docs/zh-CN/2.1.1-incubating/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL。 默认端口为8443(我们不建议使用其他端口)。</td></tr>
-<tr><td style="text-align:left"><code>--broker-service-url</code></td><td style="text-align:left">Broker服务的URL,用于与集群中的brokers进行交互。 此URL应使用与Web服务URL相同的DNS名称,但应使用<code>pulsar</code>替代http/https。 端口默认6650(我们不建议使用其他端口)。</td></tr>
-<tr><td style="text-align:left"><code>--broker-service-url-tls</code></td><td style="text-align:left">如果您使用<a href="/docs/zh-CN/2.1.1-incubating/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL以及为 brokers 群集指定TLS broker服务URL。 端口默认6651(我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--web-service-url-tls</code></td><td style="text-align:left">如果您使用<a href="/docs/zh-CN/2.1.1-incubating/security-tls-transport"> TLS </a>,需要为群集指定TLS Web服务URL。 默认端口为8443(我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--broker-service-url</code></td><td style="text-align:left">Broker服务的URL,用于与集群中的brokers进行交互。 此URL应使用与Web服务URL相同的DNS名称,但应使用<code>pulsar</code>替代scheme。 默认端口为 6650 (我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--broker-service-url-tls</code></td><td style="text-align:left">如果使用<a href="/docs/zh-CN/2.1.1-incubating/security-tls-transport"> TLS </a>,那么您还需要为群集指定TLS Web服务URL,为群集中的各个 broker 指定 TLS broker服务URL。 默认端口为 6651 (我们不建议使用其他端口)。</td></tr>
 </tbody>
 </table>
 <h2><a class="anchor" aria-hidden="true" id="deploying-a-bookkeeper-cluster"></a><a href="#deploying-a-bookkeeper-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 2.5S13.98 1 [...]
 <p><a href="https://bookkeeper.apache.org">BookKeeper</a> handles all persistent data storage in Pulsar. You will need to deploy a cluster of BookKeeper bookies to use Pulsar. We recommend running a <strong>3-bookie BookKeeper cluster</strong>.</p>
-<p>BookKeeper bookies can be configured using the <a href="/docs/zh-CN/2.1.1-incubating/reference-configuration#bookkeeper"><code>conf/bookkeeper.conf</code></a> configuration file. The most important step in configuring bookies for our purposes here is ensuring that the <a href="/docs/zh-CN/2.1.1-incubating/reference-configuration#bookkeeper-zkServers"><code>zkServers</code></a> is set to the connection string for the ZooKeeper cluster. 这里有一个示例:</p>
+<p>BookKeeper bookies can be configured using the <a href="/docs/zh-CN/2.1.1-incubating/reference-configuration#bookkeeper"><code>conf/bookkeeper.conf</code></a> configuration file. The most important step in configuring bookies for our purposes here is ensuring that the <a href="/docs/zh-CN/2.1.1-incubating/reference-configuration#bookkeeper-zkServers"><code>zkServers</code></a> is set to the connection string for the ZooKeeper cluster. 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zkServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
 <p>Once you've appropriately modified the <code>zkServers</code> parameter, you can provide any other configuration modifications you need. You can find a full listing of the available BookKeeper configuration parameters <a href="/docs/zh-CN/2.1.1-incubating/reference-configuration#bookkeeper">here</a>, although we would recommend consulting the <a href="http://bookkeeper.apache.org/docs/latest/reference/config/">BookKeeper documentation</a> for a more in-depth guide.</p>
@@ -264,7 +264,7 @@ $ bin/pulsar-daemon start bookie
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
-<h3><a class="anchor" aria-hidden="true" id="配置brokers"></a><a href="#配置brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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 [...]
+<h3><a class="anchor" aria-hidden="true" id="配置broker"></a><a href="#配置broker" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
@@ -284,7 +284,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-conf">pulsarFunctionsCluster: pulsar-cluster<span class="hljs-number">-1</span>
 </code></pre></li>
 </ol>
-<h3><a class="anchor" aria-hidden="true" id="启动-brokers"></a><a href="#启动-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h3><a class="anchor" aria-hidden="true" id="启动-broker"></a><a href="#启动-broker" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>You can then provide any other configuration changes that you'd like in the <a href="reference-configuration.md#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
 <p>You can start a broker in the foreground using the <a href="reference-cli-tools.md#pulsar-broker"><code>pulsar broker</code></a> command:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar broker
@@ -295,7 +295,7 @@ $ bin/pulsar-daemon start bookie
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-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 2.5S1 [...]
 <p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="reference-cli-tools.md#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. 这里有一个示例:</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -329,7 +329,7 @@ $ bin/pulsar-daemon start bookie
 <p>You will see output as below:</p>
 <pre><code class="hljs css language-shell">hello world!
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/deploy-kubernetes"><span class="arrow-prev">← </span><span>Kubernetes</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/deploy-bare-metal-multi-cluster"><span>裸机多集群部署</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#准备工作">准备工作</a><ul class="toc-headings"><li><a href="#要求">要求 [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.1.1-incubating/deploy-kubernetes"><span class="arrow-prev">← </span><span>Kubernetes</span></a><a class="docs-next button" href="/docs/zh-CN/2.1.1-incubating/deploy-bare-metal-multi-cluster"><span>裸机多集群部署</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#准备工作">准备工作</a><ul class="toc-headings"><li><a href="#要求">要求 [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.1.1-incubating/functions-api.html b/content/docs/zh-CN/2.1.1-incubating/functions-api.html
index 15607e4..ed0ba98 100644
--- a/content/docs/zh-CN/2.1.1-incubating/functions-api.html
+++ b/content/docs/zh-CN/2.1.1-incubating/functions-api.html
@@ -465,7 +465,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
 <p>For all key/value pairs passed to Java Pulsar Functions, both the key <em>and</em> the value are <code>String</code>s. If you'd like the value to be of a different type, you will need to deserialize from the <code>String</code> type.</p>
 </blockquote>
 <h3><a class="anchor" aria-hidden="true" id="java-metrics"></a><a href="#java-metrics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 这里有一个示例:</p>
+<p>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 下面是一个示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.functions.api.Context;
 <span class="hljs-keyword">import</span> org.apache.pulsar.functions.api.Function;
 
@@ -551,7 +551,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
 </tbody>
 </table>
 <h3><a class="anchor" aria-hidden="true" id="python-serde"></a><a href="#python-serde" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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 Functions use <a href="#serialization-and-deserialization-serde">SerDe</a> when publishing data to and consuming data from Pulsar topics (this is true of both <a href="#python-native-functions">native</a> functions and <a href="#python-sdk-functions">SDK</a> functions). You can specify the SerDe when <a href="/docs/zh-CN/2.1.1-incubating/functions-deploying#cluster-mode">creating</a> or <a href="/docs/zh-CN/2.1.1-incubating/functions-deploying#local-run-mode">running</a> functi [...]
+<p>Pulsar Functions use <a href="#serialization-and-deserialization-serde">SerDe</a> when publishing data to and consuming data from Pulsar topics (this is true of both <a href="#python-native-functions">native</a> functions and <a href="#python-sdk-functions">SDK</a> functions). You can specify the SerDe when <a href="/docs/zh-CN/2.1.1-incubating/functions-deploying#cluster-mode">creating</a> or <a href="/docs/zh-CN/2.1.1-incubating/functions-deploying#local-run-mode">running</a> functi [...]
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --tenant public \
   --namespace default \
@@ -645,7 +645,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="python-metrics"></a><a href="#python-metrics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 这里有一个示例:</p>
+<p>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 下面是一个示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> pulsar <span class="hljs-keyword">import</span> Function
 
 <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MetricRecorderFunction</span><span class="hljs-params">(Function)</span>:</span>
diff --git a/content/docs/zh-CN/2.1.1-incubating/functions-api/index.html b/content/docs/zh-CN/2.1.1-incubating/functions-api/index.html
index 15607e4..ed0ba98 100644
--- a/content/docs/zh-CN/2.1.1-incubating/functions-api/index.html
+++ b/content/docs/zh-CN/2.1.1-incubating/functions-api/index.html
@@ -465,7 +465,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
 <p>For all key/value pairs passed to Java Pulsar Functions, both the key <em>and</em> the value are <code>String</code>s. If you'd like the value to be of a different type, you will need to deserialize from the <code>String</code> type.</p>
 </blockquote>
 <h3><a class="anchor" aria-hidden="true" id="java-metrics"></a><a href="#java-metrics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 这里有一个示例:</p>
+<p>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 下面是一个示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.functions.api.Context;
 <span class="hljs-keyword">import</span> org.apache.pulsar.functions.api.Function;
 
@@ -551,7 +551,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
 </tbody>
 </table>
 <h3><a class="anchor" aria-hidden="true" id="python-serde"></a><a href="#python-serde" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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 Functions use <a href="#serialization-and-deserialization-serde">SerDe</a> when publishing data to and consuming data from Pulsar topics (this is true of both <a href="#python-native-functions">native</a> functions and <a href="#python-sdk-functions">SDK</a> functions). You can specify the SerDe when <a href="/docs/zh-CN/2.1.1-incubating/functions-deploying#cluster-mode">creating</a> or <a href="/docs/zh-CN/2.1.1-incubating/functions-deploying#local-run-mode">running</a> functi [...]
+<p>Pulsar Functions use <a href="#serialization-and-deserialization-serde">SerDe</a> when publishing data to and consuming data from Pulsar topics (this is true of both <a href="#python-native-functions">native</a> functions and <a href="#python-sdk-functions">SDK</a> functions). You can specify the SerDe when <a href="/docs/zh-CN/2.1.1-incubating/functions-deploying#cluster-mode">creating</a> or <a href="/docs/zh-CN/2.1.1-incubating/functions-deploying#local-run-mode">running</a> functi [...]
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --tenant public \
   --namespace default \
@@ -645,7 +645,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="python-metrics"></a><a href="#python-metrics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 这里有一个示例:</p>
+<p>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 下面是一个示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> pulsar <span class="hljs-keyword">import</span> Function
 
 <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MetricRecorderFunction</span><span class="hljs-params">(Function)</span>:</span>
diff --git a/content/docs/zh-CN/2.1.1-incubating/functions-deploying.html b/content/docs/zh-CN/2.1.1-incubating/functions-deploying.html
index 26b9e0a..ddcd5d6 100644
--- a/content/docs/zh-CN/2.1.1-incubating/functions-deploying.html
+++ b/content/docs/zh-CN/2.1.1-incubating/functions-deploying.html
@@ -131,13 +131,13 @@
   --inputs persistent://public/default/input-1 \
   --output persistent://public/default/output-1
 </code></pre>
-<p>By default, the function will connect to a Pulsar cluster running on the same machine, via a local <a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#broker">broker</a> service URL of <code>pulsar://localhost:6650</code>. 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 这里有一个示例:</p>
+<p>By default, the function will connect to a Pulsar cluster running on the same machine, via a local <a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#broker">broker</a> service URL of <code>pulsar://localhost:6650</code>. 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> localrun \
   --brokerServiceUrl pulsar://my-cluster-host:6650 \
   <span class="hljs-comment"># Other function parameters</span>
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="cluster-mode"></a><a href="#cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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 Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 这里有一个示例:</p>
+<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --py myfunc.py \
   --className myfunc.SomeFunction \
@@ -154,7 +154,7 @@
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="parallelism"></a><a href="#parallelism" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-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>Pulsar Functions run as processes called <strong>instances</strong>. When you run a Pulsar Function, it runs as a single instance by default (and in <a href="#local-run-mode">local run mode</a> you can <em>only</em> run a single instance of a function).</p>
-<p>You can also specify the <em>parallelism</em> of a function, i.e. the number of instances to run, when you create the function. You can set the parallelism factor using the <code>--parallelism</code> flag of the <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#functions-create"><code>create</code></a> command. 这里有一个示例:</p>
+<p>You can also specify the <em>parallelism</em> of a function, i.e. the number of instances to run, when you create the function. You can set the parallelism factor using the <code>--parallelism</code> flag of the <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#functions-create"><code>create</code></a> command. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --parallelism 3 \
   <span class="hljs-comment"># Other function info</span>
diff --git a/content/docs/zh-CN/2.1.1-incubating/functions-deploying/index.html b/content/docs/zh-CN/2.1.1-incubating/functions-deploying/index.html
index 26b9e0a..ddcd5d6 100644
--- a/content/docs/zh-CN/2.1.1-incubating/functions-deploying/index.html
+++ b/content/docs/zh-CN/2.1.1-incubating/functions-deploying/index.html
@@ -131,13 +131,13 @@
   --inputs persistent://public/default/input-1 \
   --output persistent://public/default/output-1
 </code></pre>
-<p>By default, the function will connect to a Pulsar cluster running on the same machine, via a local <a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#broker">broker</a> service URL of <code>pulsar://localhost:6650</code>. 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 这里有一个示例:</p>
+<p>By default, the function will connect to a Pulsar cluster running on the same machine, via a local <a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#broker">broker</a> service URL of <code>pulsar://localhost:6650</code>. 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> localrun \
   --brokerServiceUrl pulsar://my-cluster-host:6650 \
   <span class="hljs-comment"># Other function parameters</span>
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="cluster-mode"></a><a href="#cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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 Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 这里有一个示例:</p>
+<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --py myfunc.py \
   --className myfunc.SomeFunction \
@@ -154,7 +154,7 @@
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="parallelism"></a><a href="#parallelism" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-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>Pulsar Functions run as processes called <strong>instances</strong>. When you run a Pulsar Function, it runs as a single instance by default (and in <a href="#local-run-mode">local run mode</a> you can <em>only</em> run a single instance of a function).</p>
-<p>You can also specify the <em>parallelism</em> of a function, i.e. the number of instances to run, when you create the function. You can set the parallelism factor using the <code>--parallelism</code> flag of the <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#functions-create"><code>create</code></a> command. 这里有一个示例:</p>
+<p>You can also specify the <em>parallelism</em> of a function, i.e. the number of instances to run, when you create the function. You can set the parallelism factor using the <code>--parallelism</code> flag of the <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#functions-create"><code>create</code></a> command. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --parallelism 3 \
   <span class="hljs-comment"># Other function info</span>
diff --git a/content/docs/zh-CN/2.1.1-incubating/functions-overview.html b/content/docs/zh-CN/2.1.1-incubating/functions-overview.html
index 5dc5364..b7c22ce 100644
--- a/content/docs/zh-CN/2.1.1-incubating/functions-overview.html
+++ b/content/docs/zh-CN/2.1.1-incubating/functions-overview.html
@@ -297,13 +297,13 @@
   --inputs persistent://public/default/input-1 \
   --output persistent://public/default/output-1
 </code></pre>
-<p>默认情况下,函数连接到同一机器上运行的 Pulsar 集群通过本地的broker服务,URL是 <code>pulsar://localhost:6650</code>。 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 这里有一个示例:</p>
+<p>默认情况下,函数连接到同一机器上运行的 Pulsar 集群通过本地的broker服务,URL是 <code>pulsar://localhost:6650</code>。 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> localrun \
   --brokerServiceUrl pulsar://my-cluster-host:6650 \
   <span class="hljs-comment"># Other function parameters</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="cluster-run-mode"></a><a href="#cluster-run-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
-<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 这里有一个示例:</p>
+<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --py myfunc.py \
   --className myfunc.SomeFunction \
diff --git a/content/docs/zh-CN/2.1.1-incubating/functions-overview/index.html b/content/docs/zh-CN/2.1.1-incubating/functions-overview/index.html
index 5dc5364..b7c22ce 100644
--- a/content/docs/zh-CN/2.1.1-incubating/functions-overview/index.html
+++ b/content/docs/zh-CN/2.1.1-incubating/functions-overview/index.html
@@ -297,13 +297,13 @@
   --inputs persistent://public/default/input-1 \
   --output persistent://public/default/output-1
 </code></pre>
-<p>默认情况下,函数连接到同一机器上运行的 Pulsar 集群通过本地的broker服务,URL是 <code>pulsar://localhost:6650</code>。 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 这里有一个示例:</p>
+<p>默认情况下,函数连接到同一机器上运行的 Pulsar 集群通过本地的broker服务,URL是 <code>pulsar://localhost:6650</code>。 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> localrun \
   --brokerServiceUrl pulsar://my-cluster-host:6650 \
   <span class="hljs-comment"># Other function parameters</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="cluster-run-mode"></a><a href="#cluster-run-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
-<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 这里有一个示例:</p>
+<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --py myfunc.py \
   --className myfunc.SomeFunction \
diff --git a/content/docs/zh-CN/2.1.1-incubating/functions-quickstart.html b/content/docs/zh-CN/2.1.1-incubating/functions-quickstart.html
index ceb033d..763b4e8 100644
--- a/content/docs/zh-CN/2.1.1-incubating/functions-quickstart.html
+++ b/content/docs/zh-CN/2.1.1-incubating/functions-quickstart.html
@@ -250,7 +250,7 @@ $ touch <span class="hljs-built_in">reverse</span>.py
   --namespace default \
   --name reverse
 </code></pre>
-<p>If you see <code>Created successfully</code>, the function is ready to accept incoming messages. Because the function is running in cluster mode, we can <strong>trigger</strong> the function using the <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#trigger"><code>trigger</code></a> command. This command will send a message that we specify to the function and also give us the function's output. 这里有一个示例:</p>
+<p>If you see <code>Created successfully</code>, the function is ready to accept incoming messages. Because the function is running in cluster mode, we can <strong>trigger</strong> the function using the <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#trigger"><code>trigger</code></a> command. This command will send a message that we specify to the function and also give us the function's output. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger \
   --name reverse \
   --tenant public \
diff --git a/content/docs/zh-CN/2.1.1-incubating/functions-quickstart/index.html b/content/docs/zh-CN/2.1.1-incubating/functions-quickstart/index.html
index ceb033d..763b4e8 100644
--- a/content/docs/zh-CN/2.1.1-incubating/functions-quickstart/index.html
+++ b/content/docs/zh-CN/2.1.1-incubating/functions-quickstart/index.html
@@ -250,7 +250,7 @@ $ touch <span class="hljs-built_in">reverse</span>.py
   --namespace default \
   --name reverse
 </code></pre>
-<p>If you see <code>Created successfully</code>, the function is ready to accept incoming messages. Because the function is running in cluster mode, we can <strong>trigger</strong> the function using the <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#trigger"><code>trigger</code></a> command. This command will send a message that we specify to the function and also give us the function's output. 这里有一个示例:</p>
+<p>If you see <code>Created successfully</code>, the function is ready to accept incoming messages. Because the function is running in cluster mode, we can <strong>trigger</strong> the function using the <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#trigger"><code>trigger</code></a> command. This command will send a message that we specify to the function and also give us the function's output. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger \
   --name reverse \
   --tenant public \
diff --git a/content/docs/zh-CN/2.2.0/admin-api-partitioned-topics.html b/content/docs/zh-CN/2.2.0/admin-api-partitioned-topics.html
index 5a144b8..0c3c8cf 100644
--- a/content/docs/zh-CN/2.2.0/admin-api-partitioned-topics.html
+++ b/content/docs/zh-CN/2.2.0/admin-api-partitioned-topics.html
@@ -78,7 +78,7 @@
 <h3><a class="anchor" aria-hidden="true" id="创建"></a><a href="#创建" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c [...]
 <p>在 Pulsar 中, 必须显式的创建分区主题。创建新的分区主题时,您需要提供主题的名称以及所需的分区的数量。</p>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-admin"></a><a href="#pulsar-admin" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>你可以使用<a href="/docs/zh-CN/2.2.0/pulsar-admin#create-partitioned-topic"><code>create-partitioned-topic</code></a>命令创建partitioned topic,并指定topic的名字;使用<code>-p</code> 或 <code>--partitions</code>标志指定分区数。 这里有一个示例:</p>
+<p>你可以使用<a href="/docs/zh-CN/2.2.0/pulsar-admin#create-partitioned-topic"><code>create-partitioned-topic</code></a>命令创建partitioned topic,并指定topic的名字;使用<code>-p</code> 或 <code>--partitions</code>标志指定分区数。 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin topics create-partitioned-topic \</span>
   persistent://my-tenant/my-namespace/my-topic \
   --partitions 4
@@ -102,7 +102,7 @@ admin.persistentTopics().createPartitionedTopic(topicName, numPartitions);
 </tbody>
 </table>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-admin-1"></a><a href="#pulsar-admin-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
-<p>You can see the number of partitions in a partitioned topic using the <a href="/docs/zh-CN/2.2.0/pulsar-admin#get-partitioned-topic-metadata"><code>get-partitioned-topic-metadata</code></a> subcommand. 这里有一个示例:</p>
+<p>You can see the number of partitions in a partitioned topic using the <a href="/docs/zh-CN/2.2.0/pulsar-admin#get-partitioned-topic-metadata"><code>get-partitioned-topic-metadata</code></a> subcommand. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics get-partitioned-topic-metadata \</span>
   persistent://my-tenant/my-namespace/my-topic
 {
diff --git a/content/docs/zh-CN/2.2.0/admin-api-partitioned-topics/index.html b/content/docs/zh-CN/2.2.0/admin-api-partitioned-topics/index.html
index 5a144b8..0c3c8cf 100644
--- a/content/docs/zh-CN/2.2.0/admin-api-partitioned-topics/index.html
+++ b/content/docs/zh-CN/2.2.0/admin-api-partitioned-topics/index.html
@@ -78,7 +78,7 @@
 <h3><a class="anchor" aria-hidden="true" id="创建"></a><a href="#创建" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c [...]
 <p>在 Pulsar 中, 必须显式的创建分区主题。创建新的分区主题时,您需要提供主题的名称以及所需的分区的数量。</p>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-admin"></a><a href="#pulsar-admin" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>你可以使用<a href="/docs/zh-CN/2.2.0/pulsar-admin#create-partitioned-topic"><code>create-partitioned-topic</code></a>命令创建partitioned topic,并指定topic的名字;使用<code>-p</code> 或 <code>--partitions</code>标志指定分区数。 这里有一个示例:</p>
+<p>你可以使用<a href="/docs/zh-CN/2.2.0/pulsar-admin#create-partitioned-topic"><code>create-partitioned-topic</code></a>命令创建partitioned topic,并指定topic的名字;使用<code>-p</code> 或 <code>--partitions</code>标志指定分区数。 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin topics create-partitioned-topic \</span>
   persistent://my-tenant/my-namespace/my-topic \
   --partitions 4
@@ -102,7 +102,7 @@ admin.persistentTopics().createPartitionedTopic(topicName, numPartitions);
 </tbody>
 </table>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-admin-1"></a><a href="#pulsar-admin-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
-<p>You can see the number of partitions in a partitioned topic using the <a href="/docs/zh-CN/2.2.0/pulsar-admin#get-partitioned-topic-metadata"><code>get-partitioned-topic-metadata</code></a> subcommand. 这里有一个示例:</p>
+<p>You can see the number of partitions in a partitioned topic using the <a href="/docs/zh-CN/2.2.0/pulsar-admin#get-partitioned-topic-metadata"><code>get-partitioned-topic-metadata</code></a> subcommand. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics get-partitioned-topic-metadata \</span>
   persistent://my-tenant/my-namespace/my-topic
 {
diff --git a/content/docs/zh-CN/2.2.0/client-libraries-go.html b/content/docs/zh-CN/2.2.0/client-libraries-go.html
index d4006d3..1e05cbd 100644
--- a/content/docs/zh-CN/2.2.0/client-libraries-go.html
+++ b/content/docs/zh-CN/2.2.0/client-libraries-go.html
@@ -104,7 +104,7 @@
 <pre><code class="hljs css language-http">pulsar+ssl://pulsar.us-west.example.com:6651
 </code></pre>
 <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>In order to interact with Pulsar, you'll first need a <code>Client</code> object. You can create a client object using the <code>NewClient</code> function, passing in a <code>ClientOptions</code> object (more on configuration <a href="#client-configuration">below</a>). 这里有一个示例:</p>
+<p>In order to interact with Pulsar, you'll first need a <code>Client</code> object. You can create a client object using the <code>NewClient</code> function, passing in a <code>ClientOptions</code> object (more on configuration <a href="#client-configuration">below</a>). 下面是一个示例:</p>
 <pre><code class="hljs css language-go"><span class="hljs-keyword">import</span> (
     <span class="hljs-string">"log"</span>
     <span class="hljs-string">"runtime"</span>
@@ -358,7 +358,7 @@ consumer, err := client.Subscribe(consumerOpts)
 </tbody>
 </table>
 <h2><a class="anchor" aria-hidden="true" id="readers"></a><a href="#readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
-<p>Pulsar readers process messages from Pulsar topics. Readers are different from consumers because with readers you need to explicitly specify which message in the stream you want to begin with (consumers, on the other hand, automatically begin with the most recent unacked message). You can <a href="#reader-configuration">configure</a> Go readers using a <code>ReaderOptions</code> object. 这里有一个示例:</p>
+<p>Pulsar readers process messages from Pulsar topics. Readers are different from consumers because with readers you need to explicitly specify which message in the stream you want to begin with (consumers, on the other hand, automatically begin with the most recent unacked message). You can <a href="#reader-configuration">configure</a> Go readers using a <code>ReaderOptions</code> object. 下面是一个示例:</p>
 <pre><code class="hljs css language-go">reader, err := client.CreateReader(pulsar.ReaderOptions{
     Topic: <span class="hljs-string">"my-golang-topic"</span>,
     StartMessageId: pulsar.LatestMessage,
@@ -418,7 +418,7 @@ consumer, err := client.Subscribe(consumerOpts)
     }
 }
 </code></pre>
-<p>In the example above, the reader begins reading from the earliest available message (specified by <code>pulsar.EarliestMessage</code>). The reader can also begin reading from the latest message (<code>pulsar.LatestMessage</code>) or some other message ID specified by bytes using the <code>DeserializeMessageID</code> function, which takes a byte array and returns a <code>MessageID</code> object. 这里有一个示例:</p>
+<p>In the example above, the reader begins reading from the earliest available message (specified by <code>pulsar.EarliestMessage</code>). The reader can also begin reading from the latest message (<code>pulsar.LatestMessage</code>) or some other message ID specified by bytes using the <code>DeserializeMessageID</code> function, which takes a byte array and returns a <code>MessageID</code> object. 下面是一个示例:</p>
 <pre><code class="hljs css language-go">lastSavedId := <span class="hljs-comment">// Read last saved message id from external store as byte[]</span>
 
 reader, err := client.CreateReader(pulsar.ReaderOptions{
@@ -476,7 +476,7 @@ reader, err := client.CreateReader(pulsar.ReaderOptions{
 <li>Set <code>TLSTrustCertsFilePath</code> to the path to the TLS certs used by your client and the Pulsar broker</li>
 <li>Configure <code>Authentication</code> option</li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-go">opts := pulsar.ClientOptions{
     URL: <span class="hljs-string">"pulsar+ssl://my-cluster.com:6651"</span>,
     TLSTrustCertsFilePath: <span class="hljs-string">"/path/to/certs/my-cert.csr"</span>,
diff --git a/content/docs/zh-CN/2.2.0/client-libraries-go/index.html b/content/docs/zh-CN/2.2.0/client-libraries-go/index.html
index d4006d3..1e05cbd 100644
--- a/content/docs/zh-CN/2.2.0/client-libraries-go/index.html
+++ b/content/docs/zh-CN/2.2.0/client-libraries-go/index.html
@@ -104,7 +104,7 @@
 <pre><code class="hljs css language-http">pulsar+ssl://pulsar.us-west.example.com:6651
 </code></pre>
 <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>In order to interact with Pulsar, you'll first need a <code>Client</code> object. You can create a client object using the <code>NewClient</code> function, passing in a <code>ClientOptions</code> object (more on configuration <a href="#client-configuration">below</a>). 这里有一个示例:</p>
+<p>In order to interact with Pulsar, you'll first need a <code>Client</code> object. You can create a client object using the <code>NewClient</code> function, passing in a <code>ClientOptions</code> object (more on configuration <a href="#client-configuration">below</a>). 下面是一个示例:</p>
 <pre><code class="hljs css language-go"><span class="hljs-keyword">import</span> (
     <span class="hljs-string">"log"</span>
     <span class="hljs-string">"runtime"</span>
@@ -358,7 +358,7 @@ consumer, err := client.Subscribe(consumerOpts)
 </tbody>
 </table>
 <h2><a class="anchor" aria-hidden="true" id="readers"></a><a href="#readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
-<p>Pulsar readers process messages from Pulsar topics. Readers are different from consumers because with readers you need to explicitly specify which message in the stream you want to begin with (consumers, on the other hand, automatically begin with the most recent unacked message). You can <a href="#reader-configuration">configure</a> Go readers using a <code>ReaderOptions</code> object. 这里有一个示例:</p>
+<p>Pulsar readers process messages from Pulsar topics. Readers are different from consumers because with readers you need to explicitly specify which message in the stream you want to begin with (consumers, on the other hand, automatically begin with the most recent unacked message). You can <a href="#reader-configuration">configure</a> Go readers using a <code>ReaderOptions</code> object. 下面是一个示例:</p>
 <pre><code class="hljs css language-go">reader, err := client.CreateReader(pulsar.ReaderOptions{
     Topic: <span class="hljs-string">"my-golang-topic"</span>,
     StartMessageId: pulsar.LatestMessage,
@@ -418,7 +418,7 @@ consumer, err := client.Subscribe(consumerOpts)
     }
 }
 </code></pre>
-<p>In the example above, the reader begins reading from the earliest available message (specified by <code>pulsar.EarliestMessage</code>). The reader can also begin reading from the latest message (<code>pulsar.LatestMessage</code>) or some other message ID specified by bytes using the <code>DeserializeMessageID</code> function, which takes a byte array and returns a <code>MessageID</code> object. 这里有一个示例:</p>
+<p>In the example above, the reader begins reading from the earliest available message (specified by <code>pulsar.EarliestMessage</code>). The reader can also begin reading from the latest message (<code>pulsar.LatestMessage</code>) or some other message ID specified by bytes using the <code>DeserializeMessageID</code> function, which takes a byte array and returns a <code>MessageID</code> object. 下面是一个示例:</p>
 <pre><code class="hljs css language-go">lastSavedId := <span class="hljs-comment">// Read last saved message id from external store as byte[]</span>
 
 reader, err := client.CreateReader(pulsar.ReaderOptions{
@@ -476,7 +476,7 @@ reader, err := client.CreateReader(pulsar.ReaderOptions{
 <li>Set <code>TLSTrustCertsFilePath</code> to the path to the TLS certs used by your client and the Pulsar broker</li>
 <li>Configure <code>Authentication</code> option</li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-go">opts := pulsar.ClientOptions{
     URL: <span class="hljs-string">"pulsar+ssl://my-cluster.com:6651"</span>,
     TLSTrustCertsFilePath: <span class="hljs-string">"/path/to/certs/my-cert.csr"</span>,
diff --git a/content/docs/zh-CN/2.2.0/client-libraries-java.html b/content/docs/zh-CN/2.2.0/client-libraries-java.html
index 679259b..b41dffe 100644
--- a/content/docs/zh-CN/2.2.0/client-libraries-java.html
+++ b/content/docs/zh-CN/2.2.0/client-libraries-java.html
@@ -168,7 +168,7 @@ client.close();</p>
 </code></pre>
 <p>' %}</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.09 [...]
-<p>如果实例化 <code>生产者</code> 对象时仅指定主题topic名称 (如上面的示例所示), 则生产者将使用默认配置。 要使用非默认配置, 你可以设置多种可配置的参数。 有关完整列表, 请参阅 {@inject javadoc:ProducerBuilder:/client/org/apache/pulsar/client/api/ProducerBuilder} 类javadoc文档。 这里有一个示例:</p>
+<p>如果实例化 <code>生产者</code> 对象时仅指定主题topic名称 (如上面的示例所示), 则生产者将使用默认配置。 要使用非默认配置, 你可以设置多种可配置的参数。 有关完整列表, 请参阅 {@inject javadoc:ProducerBuilder:/client/org/apache/pulsar/client/api/ProducerBuilder} 类javadoc文档。 下面是一个示例:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
     .topic(<span class="hljs-string">"my-topic"</span>)
     .batchingMaxPublishDelay(<span class="hljs-number">10</span>, TimeUnit.MILLISECONDS)
@@ -220,7 +220,7 @@ client.close();</p>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="消费者配置"></a><a href="#消费者配置" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
 <p>如果实例化 <code>消费者</code> 对象, 仅指定主题和订阅名称, 如上面的示例所示, 消费者将采用默认配置。 要使用非默认配置, 你可以设置多种可配置的参数。 有关完整列表, 请参阅 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/ConsumerBuilder">ConsumerBuilder</a>
-类javadoc文档。 这里有一个示例:</p>
+类javadoc文档。 下面是一个示例:</p>
 <p>这是一个示例配置:</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
@@ -231,7 +231,7 @@ client.close();</p>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="异步接收"></a><a href="#异步接收" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <p><code>receive</code>方法将异步接受消息(消费者处理器将被阻塞,直到有消息到达)。 你也可以使用<a href="concepts-messaging.md#receive-modes">异步接收方法</a>,这将在一个新消息到达时立即返回一个<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>对象。</p>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>异步接收操作返回一个包装在<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>中的{@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message}消息对象。</p>
@@ -301,7 +301,7 @@ consumerBuilder
 和 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 /api/ReaderConfiguration}来创建<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 。</p>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">ReaderConfiguration conf = <span class="hljs-keyword">new</span> ReaderConfiguration();
 <span class="hljs-keyword">byte</span>[] msgIdBytes = <span class="hljs-comment">// 一些消息ID 的字节数组</span>
 MessageId id = MessageId.fromByteArray(msgIdBytes);
@@ -318,7 +318,7 @@ Reader reader = pulsarClient.newReader()
 <p>在上面的示例中,实例化一个<code>Reader</code>对象对指定的主题和消息(ID); reader将遍历主题中<code>msgIdBytes</code>(取值方式取决于应用程序) 之后的消息。</p>
 <p>上面的示例代码展示了<code>Reader</code>对象指向特定的消息(ID),但你也可以使用<code>MessageId.earliest</code>来指向topic上最早可用的消息,使用<code>MessageId.latest</code>指向最新的消息。</p>
 <h2><a class="anchor" aria-hidden="true" id="schema"></a><a href="#schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="concepts-schema-registry.md">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 这里有一个示例:</p>
+<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="concepts-schema-registry.md">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 下面是一个示例:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
diff --git a/content/docs/zh-CN/2.2.0/client-libraries-java/index.html b/content/docs/zh-CN/2.2.0/client-libraries-java/index.html
index 679259b..b41dffe 100644
--- a/content/docs/zh-CN/2.2.0/client-libraries-java/index.html
+++ b/content/docs/zh-CN/2.2.0/client-libraries-java/index.html
@@ -168,7 +168,7 @@ client.close();</p>
 </code></pre>
 <p>' %}</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.09 [...]
-<p>如果实例化 <code>生产者</code> 对象时仅指定主题topic名称 (如上面的示例所示), 则生产者将使用默认配置。 要使用非默认配置, 你可以设置多种可配置的参数。 有关完整列表, 请参阅 {@inject javadoc:ProducerBuilder:/client/org/apache/pulsar/client/api/ProducerBuilder} 类javadoc文档。 这里有一个示例:</p>
+<p>如果实例化 <code>生产者</code> 对象时仅指定主题topic名称 (如上面的示例所示), 则生产者将使用默认配置。 要使用非默认配置, 你可以设置多种可配置的参数。 有关完整列表, 请参阅 {@inject javadoc:ProducerBuilder:/client/org/apache/pulsar/client/api/ProducerBuilder} 类javadoc文档。 下面是一个示例:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
     .topic(<span class="hljs-string">"my-topic"</span>)
     .batchingMaxPublishDelay(<span class="hljs-number">10</span>, TimeUnit.MILLISECONDS)
@@ -220,7 +220,7 @@ client.close();</p>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="消费者配置"></a><a href="#消费者配置" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
 <p>如果实例化 <code>消费者</code> 对象, 仅指定主题和订阅名称, 如上面的示例所示, 消费者将采用默认配置。 要使用非默认配置, 你可以设置多种可配置的参数。 有关完整列表, 请参阅 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/ConsumerBuilder">ConsumerBuilder</a>
-类javadoc文档。 这里有一个示例:</p>
+类javadoc文档。 下面是一个示例:</p>
 <p>这是一个示例配置:</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
@@ -231,7 +231,7 @@ client.close();</p>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="异步接收"></a><a href="#异步接收" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <p><code>receive</code>方法将异步接受消息(消费者处理器将被阻塞,直到有消息到达)。 你也可以使用<a href="concepts-messaging.md#receive-modes">异步接收方法</a>,这将在一个新消息到达时立即返回一个<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>对象。</p>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>异步接收操作返回一个包装在<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>中的{@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message}消息对象。</p>
@@ -301,7 +301,7 @@ consumerBuilder
 和 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 /api/ReaderConfiguration}来创建<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 。</p>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">ReaderConfiguration conf = <span class="hljs-keyword">new</span> ReaderConfiguration();
 <span class="hljs-keyword">byte</span>[] msgIdBytes = <span class="hljs-comment">// 一些消息ID 的字节数组</span>
 MessageId id = MessageId.fromByteArray(msgIdBytes);
@@ -318,7 +318,7 @@ Reader reader = pulsarClient.newReader()
 <p>在上面的示例中,实例化一个<code>Reader</code>对象对指定的主题和消息(ID); reader将遍历主题中<code>msgIdBytes</code>(取值方式取决于应用程序) 之后的消息。</p>
 <p>上面的示例代码展示了<code>Reader</code>对象指向特定的消息(ID),但你也可以使用<code>MessageId.earliest</code>来指向topic上最早可用的消息,使用<code>MessageId.latest</code>指向最新的消息。</p>
 <h2><a class="anchor" aria-hidden="true" id="schema"></a><a href="#schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="concepts-schema-registry.md">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 这里有一个示例:</p>
+<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="concepts-schema-registry.md">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 下面是一个示例:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
diff --git a/content/docs/zh-CN/2.2.0/client-libraries-websocket.html b/content/docs/zh-CN/2.2.0/client-libraries-websocket.html
index b652588..dbd20fd 100644
--- a/content/docs/zh-CN/2.2.0/client-libraries-websocket.html
+++ b/content/docs/zh-CN/2.2.0/client-libraries-websocket.html
@@ -92,7 +92,7 @@
 <li><a href="/docs/zh-CN/2.2.0/reference-configuration#websocket-webServicePort"><code>webServicePort</code></a></li>
 <li><a href="/docs/zh-CN/2.2.0/reference-configuration#websocket-clusterName"><code>clusterName</code></a></li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1:2181,zk2:2181,zk3:2181</span>
 <span class="hljs-attr">webServicePort</span>=<span class="hljs-string">8080</span>
 <span class="hljs-attr">clusterName</span>=<span class="hljs-string">my-cluster</span>
diff --git a/content/docs/zh-CN/2.2.0/client-libraries-websocket/index.html b/content/docs/zh-CN/2.2.0/client-libraries-websocket/index.html
index b652588..dbd20fd 100644
--- a/content/docs/zh-CN/2.2.0/client-libraries-websocket/index.html
+++ b/content/docs/zh-CN/2.2.0/client-libraries-websocket/index.html
@@ -92,7 +92,7 @@
 <li><a href="/docs/zh-CN/2.2.0/reference-configuration#websocket-webServicePort"><code>webServicePort</code></a></li>
 <li><a href="/docs/zh-CN/2.2.0/reference-configuration#websocket-clusterName"><code>clusterName</code></a></li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1:2181,zk2:2181,zk3:2181</span>
 <span class="hljs-attr">webServicePort</span>=<span class="hljs-string">8080</span>
 <span class="hljs-attr">clusterName</span>=<span class="hljs-string">my-cluster</span>
diff --git a/content/docs/zh-CN/2.2.0/concepts-architecture-overview.html b/content/docs/zh-CN/2.2.0/concepts-architecture-overview.html
index 9eb3972..de1ce59 100644
--- a/content/docs/zh-CN/2.2.0/concepts-architecture-overview.html
+++ b/content/docs/zh-CN/2.2.0/concepts-architecture-overview.html
@@ -155,7 +155,7 @@
 <blockquote>
 <p>为了性能和容错,你可以运行任意个Pulsar proxy。</p>
 </blockquote>
-<p>架构上来看,Pulsar Proxy从ZooKeeper上面读取他所需要的所有信息。 当启动代理时,你只需要提供用于集群独有和实例范围的配置存储的ZooKeeper连接串。 这里有一个示例:</p>
+<p>架构上来看,Pulsar Proxy从ZooKeeper上面读取他所需要的所有信息。 当启动代理时,你只需要提供用于集群独有和实例范围的配置存储的ZooKeeper连接串。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar proxy \
   --zookeeper-servers zk-0,zk-1,zk-2 \
   --configuration-store-servers zk-0,zk-1,zk-2
diff --git a/content/docs/zh-CN/2.2.0/concepts-architecture-overview/index.html b/content/docs/zh-CN/2.2.0/concepts-architecture-overview/index.html
index 9eb3972..de1ce59 100644
--- a/content/docs/zh-CN/2.2.0/concepts-architecture-overview/index.html
+++ b/content/docs/zh-CN/2.2.0/concepts-architecture-overview/index.html
@@ -155,7 +155,7 @@
 <blockquote>
 <p>为了性能和容错,你可以运行任意个Pulsar proxy。</p>
 </blockquote>
-<p>架构上来看,Pulsar Proxy从ZooKeeper上面读取他所需要的所有信息。 当启动代理时,你只需要提供用于集群独有和实例范围的配置存储的ZooKeeper连接串。 这里有一个示例:</p>
+<p>架构上来看,Pulsar Proxy从ZooKeeper上面读取他所需要的所有信息。 当启动代理时,你只需要提供用于集群独有和实例范围的配置存储的ZooKeeper连接串。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar proxy \
   --zookeeper-servers zk-0,zk-1,zk-2 \
   --configuration-store-servers zk-0,zk-1,zk-2
diff --git a/content/docs/zh-CN/2.2.0/concepts-messaging.html b/content/docs/zh-CN/2.2.0/concepts-messaging.html
index 6947444..347d096 100644
--- a/content/docs/zh-CN/2.2.0/concepts-messaging.html
+++ b/content/docs/zh-CN/2.2.0/concepts-messaging.html
@@ -281,7 +281,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <p>这里还有一个非持久topic的<a href="client-libraries-java.md#producer">java producer</a>例子:</p>
 <pre><code class="hljs css language-java">Producer producer = client.createProducer(npTopic);
 </code></pre>
-<h2><a class="anchor" aria-hidden="true" id="message-retention-and-expiry"></a><a href="#message-retention-and-expiry" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
+<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>Pulsar broker默认如下:</p>
 <ul>
 <li>立即删除<em>所有</em>已经被cunsumer确认过的的消息</li>
@@ -296,7 +296,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <p>所有消息存留和过期在<a href="#namespaces">namespace</a>层面管理。具体操作请查看 <a href="cookbooks-retention-expiry.md">Message retention and expiry</a></p>
 </blockquote>
 <p>下图说明了这两种概念:</p>
-<p><img src="assets/retention-expiry.png" alt="Message retention and expiry"></p>
+<p><img src="assets/retention-expiry.png" alt="消息保留和到期"></p>
 <p>图中上面的是消息存留,<span style="color: #89b557;">存留规则</span>会被用于某namespace下所有的topic,指明哪些消息会被持久存储,即使已经被确认过。 没有被留存规则覆盖的消息将会被<span style="color: #bb3b3e;">删除</span>。 没有留存规则的话,<em>所有</em>被<span style="color: #19967d;">确认</span>的消息都会被删除。</p>
 <p>图中下面的是消息过期,有些消息即使还<span style="color: #337db6;">没有被确认</span>,也被<span style="color: #bb3b3e;">删除</span>掉了。因为根据设置在<span style="color: #e39441;">namespace上的TTL</span>,他们已经过期了。(例如,TTL为5分钟,过了十分钟消息还没被确认)</p>
 <h2><a class="anchor" aria-hidden="true" id="message-deduplication"></a><a href="#message-deduplication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
@@ -315,7 +315,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <blockquote>
 <p>更深入的信息可以参考 <a href="https://streaml.io/blog">Streamlio blog</a>上的<a href="https://streaml.io/blog/pulsar-effectively-once/">此篇博文</a></p>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/concepts-overview"><span class="arrow-prev">← </span><span>概述</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/concepts-architecture-overview"><span>Architecture</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#messages">Messages</a></li><li><a href="#producers">Producers</a><ul class="toc-headi [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/concepts-overview"><span class="arrow-prev">← </span><span>概述</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/concepts-architecture-overview"><span>Architecture</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#messages">Messages</a></li><li><a href="#producers">Producers</a><ul class="toc-headi [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.2.0/concepts-messaging/index.html b/content/docs/zh-CN/2.2.0/concepts-messaging/index.html
index 6947444..347d096 100644
--- a/content/docs/zh-CN/2.2.0/concepts-messaging/index.html
+++ b/content/docs/zh-CN/2.2.0/concepts-messaging/index.html
@@ -281,7 +281,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <p>这里还有一个非持久topic的<a href="client-libraries-java.md#producer">java producer</a>例子:</p>
 <pre><code class="hljs css language-java">Producer producer = client.createProducer(npTopic);
 </code></pre>
-<h2><a class="anchor" aria-hidden="true" id="message-retention-and-expiry"></a><a href="#message-retention-and-expiry" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
+<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>Pulsar broker默认如下:</p>
 <ul>
 <li>立即删除<em>所有</em>已经被cunsumer确认过的的消息</li>
@@ -296,7 +296,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <p>所有消息存留和过期在<a href="#namespaces">namespace</a>层面管理。具体操作请查看 <a href="cookbooks-retention-expiry.md">Message retention and expiry</a></p>
 </blockquote>
 <p>下图说明了这两种概念:</p>
-<p><img src="assets/retention-expiry.png" alt="Message retention and expiry"></p>
+<p><img src="assets/retention-expiry.png" alt="消息保留和到期"></p>
 <p>图中上面的是消息存留,<span style="color: #89b557;">存留规则</span>会被用于某namespace下所有的topic,指明哪些消息会被持久存储,即使已经被确认过。 没有被留存规则覆盖的消息将会被<span style="color: #bb3b3e;">删除</span>。 没有留存规则的话,<em>所有</em>被<span style="color: #19967d;">确认</span>的消息都会被删除。</p>
 <p>图中下面的是消息过期,有些消息即使还<span style="color: #337db6;">没有被确认</span>,也被<span style="color: #bb3b3e;">删除</span>掉了。因为根据设置在<span style="color: #e39441;">namespace上的TTL</span>,他们已经过期了。(例如,TTL为5分钟,过了十分钟消息还没被确认)</p>
 <h2><a class="anchor" aria-hidden="true" id="message-deduplication"></a><a href="#message-deduplication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
@@ -315,7 +315,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <blockquote>
 <p>更深入的信息可以参考 <a href="https://streaml.io/blog">Streamlio blog</a>上的<a href="https://streaml.io/blog/pulsar-effectively-once/">此篇博文</a></p>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/concepts-overview"><span class="arrow-prev">← </span><span>概述</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/concepts-architecture-overview"><span>Architecture</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#messages">Messages</a></li><li><a href="#producers">Producers</a><ul class="toc-headi [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/concepts-overview"><span class="arrow-prev">← </span><span>概述</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/concepts-architecture-overview"><span>Architecture</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#messages">Messages</a></li><li><a href="#producers">Producers</a><ul class="toc-headi [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.2.0/cookbooks-compaction.html b/content/docs/zh-CN/2.2.0/cookbooks-compaction.html
index fc322e1..31ae9c1 100644
--- a/content/docs/zh-CN/2.2.0/cookbooks-compaction.html
+++ b/content/docs/zh-CN/2.2.0/cookbooks-compaction.html
@@ -98,12 +98,12 @@
 </code></pre>
 <p>Configuring the compaction threshold on a namespace will apply to all topics within that namespace.</p>
 <h2><a class="anchor" aria-hidden="true" id="triggering-compaction-manually-trigger"></a><a href="#triggering-compaction-manually-trigger" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1. [...]
-<p>In order to run compaction on a topic, you need to use the <a href="/docs/zh-CN/2.2.0/pulsar-admin#topics-compact"><code>topics compact</code></a> command for the <a href="/docs/zh-CN/2.2.0/pulsar-admin"><code>pulsar-admin</code></a> CLI tool. 这里有一个示例:</p>
+<p>In order to run compaction on a topic, you need to use the <a href="/docs/zh-CN/2.2.0/pulsar-admin#topics-compact"><code>topics compact</code></a> command for the <a href="/docs/zh-CN/2.2.0/pulsar-admin"><code>pulsar-admin</code></a> CLI tool. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin topics compact \
   persistent://my-tenant/my-namespace/my-topic
 </code></pre>
 <p>The <code>pulsar-admin</code> tool runs compaction via the Pulsar <a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
- API. To run compaction in its own dedicated process, i.e. <em>not</em> through the REST API, you can use the <a href="/docs/zh-CN/2.2.0/reference-cli-tools#pulsar-compact-topic"><code>pulsar compact-topic</code></a> command. 这里有一个示例:</p>
+ API. To run compaction in its own dedicated process, i.e. <em>not</em> through the REST API, you can use the <a href="/docs/zh-CN/2.2.0/reference-cli-tools#pulsar-compact-topic"><code>pulsar compact-topic</code></a> command. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar compact-topic \
   --topic persistent://my-tenant-namespace/my-topic
 </code></pre>
diff --git a/content/docs/zh-CN/2.2.0/cookbooks-compaction/index.html b/content/docs/zh-CN/2.2.0/cookbooks-compaction/index.html
index fc322e1..31ae9c1 100644
--- a/content/docs/zh-CN/2.2.0/cookbooks-compaction/index.html
+++ b/content/docs/zh-CN/2.2.0/cookbooks-compaction/index.html
@@ -98,12 +98,12 @@
 </code></pre>
 <p>Configuring the compaction threshold on a namespace will apply to all topics within that namespace.</p>
 <h2><a class="anchor" aria-hidden="true" id="triggering-compaction-manually-trigger"></a><a href="#triggering-compaction-manually-trigger" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1. [...]
-<p>In order to run compaction on a topic, you need to use the <a href="/docs/zh-CN/2.2.0/pulsar-admin#topics-compact"><code>topics compact</code></a> command for the <a href="/docs/zh-CN/2.2.0/pulsar-admin"><code>pulsar-admin</code></a> CLI tool. 这里有一个示例:</p>
+<p>In order to run compaction on a topic, you need to use the <a href="/docs/zh-CN/2.2.0/pulsar-admin#topics-compact"><code>topics compact</code></a> command for the <a href="/docs/zh-CN/2.2.0/pulsar-admin"><code>pulsar-admin</code></a> CLI tool. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin topics compact \
   persistent://my-tenant/my-namespace/my-topic
 </code></pre>
 <p>The <code>pulsar-admin</code> tool runs compaction via the Pulsar <a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
- API. To run compaction in its own dedicated process, i.e. <em>not</em> through the REST API, you can use the <a href="/docs/zh-CN/2.2.0/reference-cli-tools#pulsar-compact-topic"><code>pulsar compact-topic</code></a> command. 这里有一个示例:</p>
+ API. To run compaction in its own dedicated process, i.e. <em>not</em> through the REST API, you can use the <a href="/docs/zh-CN/2.2.0/reference-cli-tools#pulsar-compact-topic"><code>pulsar compact-topic</code></a> command. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar compact-topic \
   --topic persistent://my-tenant-namespace/my-topic
 </code></pre>
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 7341bbd..36dcf34 100644
--- a/content/docs/zh-CN/2.2.0/cookbooks-deduplication.html
+++ b/content/docs/zh-CN/2.2.0/cookbooks-deduplication.html
@@ -117,7 +117,7 @@
 </ol>
 <p>Instructions for <a href="#java">Java</a>, <a href="#python">Python</a>, and <a href="#cpp">C++</a> clients can be found below.</p>
 <h3><a class="anchor" aria-hidden="true" id="java-clients-java"></a><a href="#java-clients-java" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
-<p>To enable message deduplication on a <a href="/docs/zh-CN/2.2.0/client-libraries-java#producers">Java producer</a>, set the producer name using the <code>producerName</code> setter and set the timeout to 0 using the <code>sendTimeout</code> setter. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/2.2.0/client-libraries-java#producers">Java producer</a>, set the producer name using the <code>producerName</code> setter and set the timeout to 0 using the <code>sendTimeout</code> setter. 下面是一个示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Producer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 <span class="hljs-keyword">import</span> java.util.concurrent.TimeUnit;
@@ -132,7 +132,7 @@ Producer producer = pulsarClient.newProducer()
         .create();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="python-clients-python"></a><a href="#python-clients-python" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 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>To enable message deduplication on a <a href="/docs/zh-CN/2.2.0/client-libraries-python#producers">Python producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/2.2.0/client-libraries-python#producers">Python producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 下面是一个示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">import</span> pulsar
 
 client = pulsar.Client(<span class="hljs-string">"pulsar://localhost:6650"</span>)
@@ -142,7 +142,7 @@ producer = client.create_producer(
     send_timeout_millis=<span class="hljs-number">0</span>)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-clients-cpp"></a><a href="#c-clients-cpp" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
-<p>To enable message deduplication on a <a href="/docs/zh-CN/2.2.0/client-libraries-cpp#producer">C++ producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/2.2.0/client-libraries-cpp#producer">C++ producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 下面是一个示例:</p>
 <pre><code class="hljs css language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 <span class="hljs-built_in">std</span>::<span class="hljs-built_in">string</span> serviceUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
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 7341bbd..36dcf34 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
@@ -117,7 +117,7 @@
 </ol>
 <p>Instructions for <a href="#java">Java</a>, <a href="#python">Python</a>, and <a href="#cpp">C++</a> clients can be found below.</p>
 <h3><a class="anchor" aria-hidden="true" id="java-clients-java"></a><a href="#java-clients-java" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
-<p>To enable message deduplication on a <a href="/docs/zh-CN/2.2.0/client-libraries-java#producers">Java producer</a>, set the producer name using the <code>producerName</code> setter and set the timeout to 0 using the <code>sendTimeout</code> setter. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/2.2.0/client-libraries-java#producers">Java producer</a>, set the producer name using the <code>producerName</code> setter and set the timeout to 0 using the <code>sendTimeout</code> setter. 下面是一个示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Producer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 <span class="hljs-keyword">import</span> java.util.concurrent.TimeUnit;
@@ -132,7 +132,7 @@ Producer producer = pulsarClient.newProducer()
         .create();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="python-clients-python"></a><a href="#python-clients-python" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 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>To enable message deduplication on a <a href="/docs/zh-CN/2.2.0/client-libraries-python#producers">Python producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/2.2.0/client-libraries-python#producers">Python producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 下面是一个示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">import</span> pulsar
 
 client = pulsar.Client(<span class="hljs-string">"pulsar://localhost:6650"</span>)
@@ -142,7 +142,7 @@ producer = client.create_producer(
     send_timeout_millis=<span class="hljs-number">0</span>)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-clients-cpp"></a><a href="#c-clients-cpp" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
-<p>To enable message deduplication on a <a href="/docs/zh-CN/2.2.0/client-libraries-cpp#producer">C++ producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/2.2.0/client-libraries-cpp#producer">C++ producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 下面是一个示例:</p>
 <pre><code class="hljs css language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 <span class="hljs-built_in">std</span>::<span class="hljs-built_in">string</span> serviceUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
diff --git a/content/docs/zh-CN/2.2.0/cookbooks-encryption.html b/content/docs/zh-CN/2.2.0/cookbooks-encryption.html
index 799779d..ba0a43e 100644
--- a/content/docs/zh-CN/2.2.0/cookbooks-encryption.html
+++ b/content/docs/zh-CN/2.2.0/cookbooks-encryption.html
@@ -221,7 +221,7 @@ conf.addEncryptionKey(<span class="hljs-string">"myapp.messagekey2"</span>);
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/cookbooks-retention-expiry"><span class="arrow-prev">← </span><span>Message retention and expiry</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/cookbooks-message-queue"><span>Message queue</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symm [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/cookbooks-retention-expiry"><span class="arrow-prev">← </span><span>消息保留和到期</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/cookbooks-message-queue"><span>Message queue</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a>< [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.2.0/cookbooks-encryption/index.html b/content/docs/zh-CN/2.2.0/cookbooks-encryption/index.html
index 799779d..ba0a43e 100644
--- a/content/docs/zh-CN/2.2.0/cookbooks-encryption/index.html
+++ b/content/docs/zh-CN/2.2.0/cookbooks-encryption/index.html
@@ -221,7 +221,7 @@ conf.addEncryptionKey(<span class="hljs-string">"myapp.messagekey2"</span>);
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/cookbooks-retention-expiry"><span class="arrow-prev">← </span><span>Message retention and expiry</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/cookbooks-message-queue"><span>Message queue</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symm [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/cookbooks-retention-expiry"><span class="arrow-prev">← </span><span>消息保留和到期</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/cookbooks-message-queue"><span>Message queue</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a>< [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.2.0/cookbooks-non-persistent.html b/content/docs/zh-CN/2.2.0/cookbooks-non-persistent.html
index 36e446b..c9d4afd 100644
--- a/content/docs/zh-CN/2.2.0/cookbooks-non-persistent.html
+++ b/content/docs/zh-CN/2.2.0/cookbooks-non-persistent.html
@@ -108,7 +108,7 @@
 <p>可以使用<a href="/docs/zh-CN/2.2.0/pulsar-admin#non-persistent"> <code>pulsar-admin non-persistent</code> </a>命令行管理非持久性主题。 使用命令行工具,你可以执行诸如<a href="/docs/zh-CN/2.2.0/pulsar-admin#non-persistent-create-partitioned-topic">创建分区非持久性主题</a>,获取非持久主题的<a href="/docs/zh-CN/2.2.0/pulsar-admin#non-persistent-stats">统计信息</a>,获取命名空间下的非持久主题<a href="/docs/zh-CN/2.2.0/pulsar-admin">列表</a>等操作。</p>
 <h2><a class="anchor" aria-hidden="true" id="与pulsar客户端一起使用"></a><a href="#与pulsar客户端一起使用" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>除了确保使用具有<code>非持久性</code>的正确<a href="#using">主题名称</a>作为主题类型之外,你不应该对 Pulsar 客户端进行任何更改以使用非持久性消息传递。</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/cookbooks-deduplication"><span class="arrow-prev">← </span><span>Message deduplication</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/cookbooks-partitioned"><span>分区Topic</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="#使用">使用</a></li><li><a href="#启用">启用</a></li>< [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/cookbooks-deduplication"><span class="arrow-prev">← </span><span>Message deduplication</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/cookbooks-partitioned"><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="#使用">使用</a></li><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.2.0/cookbooks-non-persistent/index.html b/content/docs/zh-CN/2.2.0/cookbooks-non-persistent/index.html
index 36e446b..c9d4afd 100644
--- a/content/docs/zh-CN/2.2.0/cookbooks-non-persistent/index.html
+++ b/content/docs/zh-CN/2.2.0/cookbooks-non-persistent/index.html
@@ -108,7 +108,7 @@
 <p>可以使用<a href="/docs/zh-CN/2.2.0/pulsar-admin#non-persistent"> <code>pulsar-admin non-persistent</code> </a>命令行管理非持久性主题。 使用命令行工具,你可以执行诸如<a href="/docs/zh-CN/2.2.0/pulsar-admin#non-persistent-create-partitioned-topic">创建分区非持久性主题</a>,获取非持久主题的<a href="/docs/zh-CN/2.2.0/pulsar-admin#non-persistent-stats">统计信息</a>,获取命名空间下的非持久主题<a href="/docs/zh-CN/2.2.0/pulsar-admin">列表</a>等操作。</p>
 <h2><a class="anchor" aria-hidden="true" id="与pulsar客户端一起使用"></a><a href="#与pulsar客户端一起使用" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>除了确保使用具有<code>非持久性</code>的正确<a href="#using">主题名称</a>作为主题类型之外,你不应该对 Pulsar 客户端进行任何更改以使用非持久性消息传递。</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/cookbooks-deduplication"><span class="arrow-prev">← </span><span>Message deduplication</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/cookbooks-partitioned"><span>分区Topic</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="#使用">使用</a></li><li><a href="#启用">启用</a></li>< [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/cookbooks-deduplication"><span class="arrow-prev">← </span><span>Message deduplication</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/cookbooks-partitioned"><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="#使用">使用</a></li><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.2.0/cookbooks-partitioned.html b/content/docs/zh-CN/2.2.0/cookbooks-partitioned.html
index 7bfbcbb..0d6cdba 100644
--- a/content/docs/zh-CN/2.2.0/cookbooks-partitioned.html
+++ b/content/docs/zh-CN/2.2.0/cookbooks-partitioned.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Non-persistent messaging · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作的说明,请参见 &lt;a href=&quot;/docs/zh-C [...]
-"/><meta name="docsearch:version" content="2.2.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Non-persistent messaging · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作的说明 [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Non-persistent messaging · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作,请参见 &lt;a href=&quot;/docs/zh-CN/2.2.0/ [...]
+"/><meta name="docsearch:version" content="2.2.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Non-persistent messaging · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作,请参见 &lt [...]
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -70,12 +70,12 @@
                 };
               }
             });
-        </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">Non-persistent messaging</h1></header><article><div><span><p>默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 <em>分区Topic</em>是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主 [...]
+        </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">Non-persistent messaging</h1></header><article><div><span><p>默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 <em>分区Topic</em>是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作 [...]
 <p>您可以使用Pulsar的客户端库将消息<a href="#publishing-to-partitioned-topics">发布</a>到分区主题,还可以使用Pulsar的<a href="/docs/zh-CN/2.2.0/admin-api-overview"> admin API </a>进行<a href="#managing-partitioned-topics">创建和管理</a>分区主题。</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>发布到分区主题时,与非分区主题的唯一区别是您需要在创建<a href="/docs/zh-CN/2.2.0/reference-terminology#producer">生产者</a>时指定<a href="/docs/zh-CN/2.2.0/concepts-messaging#routing-modes">路由模式</a>。 <a href="#java">Java</a>示例如下。</p>
+<p>发布到分区主题时,与非分区主题的唯一区别是您需要在创建新的<a href="/docs/zh-CN/2.2.0/reference-terminology#producer">生产者</a>时指定<a href="/docs/zh-CN/2.2.0/concepts-messaging#routing-modes">路由模式</a>。 <a href="#java">Java</a>示例如下。</p>
 <h3><a class="anchor" aria-hidden="true" id="java"></a><a href="#java" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>在Java客户端中将消息发布到分区主题,非常类似于发布到<a href="/docs/zh-CN/2.2.0/client-libraries-java#using-producers">普通主题</a>。 不同之处在于您需要指定一个消息路器(从已有的路由器中选择一个或实现一个自定义的路由器)。</p>
+<p>在Java客户端中将消息发布到分区主题,和发布到<a href="/docs/zh-CN/2.2.0/client-libraries-java#using-producers">普通主题</a>非常类似。 不同之处在于您需要指定一个消息路器(从已有的路由器中选择一个或实现一个自定义的路由器)。</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.09V6 [...]
 <p>您可以在ProducerConfiguration对象中指定用于配置生产者的路由模式。 可以从如下三个模式中选择:</p>
 <ul>
@@ -83,7 +83,7 @@
 <li><code>RoundRobinPartition</code></li>
 <li><code>CustomPartition</code></li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">String pulsarBrokerRootUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
 String topic = <span class="hljs-string">"persistent://my-tenant/my-namespace/my-topic"</span>;
 
@@ -121,7 +121,7 @@ producer.send(<span class="hljs-string">"Partitioned topic message"</span>.getBy
 </code></pre>
 <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>您可以使用Pulsar的<a href="/docs/zh-CN/2.2.0/admin-api-overview"> admin API </a>来创建和管理<a href="/docs/zh-CN/2.2.0/admin-api-partitioned-topics">分区主题</a>。</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/cookbooks-non-persistent"><span class="arrow-prev">← </span><span>非持久化消息</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/cookbooks-retention-expiry"><span>Message retention and expiry</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#发布到分区主题">发布到分区主题</a><ul class="toc-headings"><li><a href="#jav [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/cookbooks-non-persistent"><span class="arrow-prev">← </span><span>非持久化消息</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/cookbooks-retention-expiry"><span>消息保留和到期</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#发布到分区主题">发布到分区主题</a><ul class="toc-headings"><li><a href="#java">Java</a></li></ul> [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.2.0/cookbooks-partitioned/index.html b/content/docs/zh-CN/2.2.0/cookbooks-partitioned/index.html
index 7bfbcbb..0d6cdba 100644
--- a/content/docs/zh-CN/2.2.0/cookbooks-partitioned/index.html
+++ b/content/docs/zh-CN/2.2.0/cookbooks-partitioned/index.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Non-persistent messaging · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作的说明,请参见 &lt;a href=&quot;/docs/zh-C [...]
-"/><meta name="docsearch:version" content="2.2.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Non-persistent messaging · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作的说明 [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Non-persistent messaging · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作,请参见 &lt;a href=&quot;/docs/zh-CN/2.2.0/ [...]
+"/><meta name="docsearch:version" content="2.2.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Non-persistent messaging · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作,请参见 &lt [...]
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -70,12 +70,12 @@
                 };
               }
             });
-        </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">Non-persistent messaging</h1></header><article><div><span><p>默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 <em>分区Topic</em>是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主 [...]
+        </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">Non-persistent messaging</h1></header><article><div><span><p>默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 <em>分区Topic</em>是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作 [...]
 <p>您可以使用Pulsar的客户端库将消息<a href="#publishing-to-partitioned-topics">发布</a>到分区主题,还可以使用Pulsar的<a href="/docs/zh-CN/2.2.0/admin-api-overview"> admin API </a>进行<a href="#managing-partitioned-topics">创建和管理</a>分区主题。</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>发布到分区主题时,与非分区主题的唯一区别是您需要在创建<a href="/docs/zh-CN/2.2.0/reference-terminology#producer">生产者</a>时指定<a href="/docs/zh-CN/2.2.0/concepts-messaging#routing-modes">路由模式</a>。 <a href="#java">Java</a>示例如下。</p>
+<p>发布到分区主题时,与非分区主题的唯一区别是您需要在创建新的<a href="/docs/zh-CN/2.2.0/reference-terminology#producer">生产者</a>时指定<a href="/docs/zh-CN/2.2.0/concepts-messaging#routing-modes">路由模式</a>。 <a href="#java">Java</a>示例如下。</p>
 <h3><a class="anchor" aria-hidden="true" id="java"></a><a href="#java" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>在Java客户端中将消息发布到分区主题,非常类似于发布到<a href="/docs/zh-CN/2.2.0/client-libraries-java#using-producers">普通主题</a>。 不同之处在于您需要指定一个消息路器(从已有的路由器中选择一个或实现一个自定义的路由器)。</p>
+<p>在Java客户端中将消息发布到分区主题,和发布到<a href="/docs/zh-CN/2.2.0/client-libraries-java#using-producers">普通主题</a>非常类似。 不同之处在于您需要指定一个消息路器(从已有的路由器中选择一个或实现一个自定义的路由器)。</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.09V6 [...]
 <p>您可以在ProducerConfiguration对象中指定用于配置生产者的路由模式。 可以从如下三个模式中选择:</p>
 <ul>
@@ -83,7 +83,7 @@
 <li><code>RoundRobinPartition</code></li>
 <li><code>CustomPartition</code></li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">String pulsarBrokerRootUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
 String topic = <span class="hljs-string">"persistent://my-tenant/my-namespace/my-topic"</span>;
 
@@ -121,7 +121,7 @@ producer.send(<span class="hljs-string">"Partitioned topic message"</span>.getBy
 </code></pre>
 <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>您可以使用Pulsar的<a href="/docs/zh-CN/2.2.0/admin-api-overview"> admin API </a>来创建和管理<a href="/docs/zh-CN/2.2.0/admin-api-partitioned-topics">分区主题</a>。</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/cookbooks-non-persistent"><span class="arrow-prev">← </span><span>非持久化消息</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/cookbooks-retention-expiry"><span>Message retention and expiry</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#发布到分区主题">发布到分区主题</a><ul class="toc-headings"><li><a href="#jav [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/cookbooks-non-persistent"><span class="arrow-prev">← </span><span>非持久化消息</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/cookbooks-retention-expiry"><span>消息保留和到期</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#发布到分区主题">发布到分区主题</a><ul class="toc-headings"><li><a href="#java">Java</a></li></ul> [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.2.0/cookbooks-retention-expiry.html b/content/docs/zh-CN/2.2.0/cookbooks-retention-expiry.html
index 7c0e29b..4f07ec7 100644
--- a/content/docs/zh-CN/2.2.0/cookbooks-retention-expiry.html
+++ b/content/docs/zh-CN/2.2.0/cookbooks-retention-expiry.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar brokers are responsible for handling messages that pass through Pulsar, including &lt;a href=&quot;/docs/zh-CN/2.2.0/concepts-architecture-overview#persistent-storage&qu [...]
-"/><meta name="docsearch:version" content="2.2.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Message retention and expiry · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;Pulsar brokers are responsible for handling messages that pass through Pulsar, including &lt;a href=&quot;/docs/zh-CN/2.2.0/concepts-architectur [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar brokers 负责处理通过Pulsar的消息,包括消息的&lt;a href=&quot;/docs/zh-CN/2.2.0/concepts-architecture-overview#persistent-storage&quot;&gt;持久存储&lt;/a&gt;。 默认情况下,broker 的策略如下:&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.2.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Message retention and expiry · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;Pulsar brokers 负责处理通过Pulsar的消息,包括消息的&lt;a href=&quot;/docs/zh-CN/2.2.0/concepts-architecture-overview#persistent-storage&quot;&gt;持久存储&lt;/a&gt; [...]
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -70,15 +70,15 @@
                 };
               }
             });
-        </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">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers are responsible for handling messages that pass through Pulsar, including <a href="/docs/zh-CN/2.2.0/concepts [...]
+        </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">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers 负责处理通过Pulsar的消息,包括消息的<a href="/docs/zh-CN/2.2.0/concepts-architecture-overview#persistent-storage">持久存储</a>。  [...]
 <ul>
-<li>immediately delete all messages that have been acknowledged on every subscription, and</li>
-<li>persistently store all unacknowledged messages in a <a href="#backlog-quotas">backlog</a>.</li>
+<li>立即删除每个订阅上已确认的所有消息。</li>
+<li>并且持久性地将所有未确认的消息存储在<a href="#backlog-quotas"> backlog </a>中。</li>
 </ul>
-<p>In Pulsar, you can override both of these default behaviors, at the namespace level, in two ways:</p>
+<p>在Pulsar中,你可以在命名空间级别以两种方式覆盖这两种默认行为:</p>
 <ul>
-<li>You can persistently store messages that have already been consumed and acknowledged for a minimum time by setting <a href="#retention-policies">retention policies</a>.</li>
-<li>Messages that are not acknowledged within a specified timeframe, can be automatically marked as consumed, by specifying the <a href="#time-to-live-ttl">time to live</a> (TTL).</li>
+<li>通过设置 <a href="#retention-policies">保留策略</a>,可以持久地存储已经被使用和确认的消息,并将其保留最少时间。</li>
+<li>通过指定[生存时间](#time-to-live- TTL) (TTL),可以自动将未在指定时间范围内得到确认的消息标记为已消费。</li>
 </ul>
 <p>Pulsar's <a href="/docs/zh-CN/2.2.0/admin-api-overview">admin interface</a> enables you to manage both retention policies and TTL at the namespace level (and thus within a specific tenant and either on a specific cluster or in the <a href="/docs/zh-CN/2.2.0/concepts-architecture-overview#global-cluster"><code>global</code></a> cluster).</p>
 <blockquote>
@@ -248,7 +248,7 @@ admin.namespaces().setBacklogQuota(namespace, quota);
 <h4><a class="anchor" aria-hidden="true" id="java-6"></a><a href="#java-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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. [...]
 <pre><code class="hljs css language-java">admin.namespaces().get
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/cookbooks-partitioned"><span class="arrow-prev">← </span><span>分区Topic</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/cookbooks-encryption"><span>Encryption</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#retention-policies">Retention policies</a><ul class="toc-headings"><li><a href="#default [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/cookbooks-partitioned"><span class="arrow-prev">← </span><span>分区主题</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/cookbooks-encryption"><span>Encryption</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#retention-policies">Retention policies</a><ul class="toc-headings"><li><a href="#defaults"> [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.2.0/cookbooks-retention-expiry/index.html b/content/docs/zh-CN/2.2.0/cookbooks-retention-expiry/index.html
index 7c0e29b..4f07ec7 100644
--- a/content/docs/zh-CN/2.2.0/cookbooks-retention-expiry/index.html
+++ b/content/docs/zh-CN/2.2.0/cookbooks-retention-expiry/index.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar brokers are responsible for handling messages that pass through Pulsar, including &lt;a href=&quot;/docs/zh-CN/2.2.0/concepts-architecture-overview#persistent-storage&qu [...]
-"/><meta name="docsearch:version" content="2.2.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Message retention and expiry · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;Pulsar brokers are responsible for handling messages that pass through Pulsar, including &lt;a href=&quot;/docs/zh-CN/2.2.0/concepts-architectur [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar brokers 负责处理通过Pulsar的消息,包括消息的&lt;a href=&quot;/docs/zh-CN/2.2.0/concepts-architecture-overview#persistent-storage&quot;&gt;持久存储&lt;/a&gt;。 默认情况下,broker 的策略如下:&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.2.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Message retention and expiry · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;Pulsar brokers 负责处理通过Pulsar的消息,包括消息的&lt;a href=&quot;/docs/zh-CN/2.2.0/concepts-architecture-overview#persistent-storage&quot;&gt;持久存储&lt;/a&gt; [...]
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -70,15 +70,15 @@
                 };
               }
             });
-        </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">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers are responsible for handling messages that pass through Pulsar, including <a href="/docs/zh-CN/2.2.0/concepts [...]
+        </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">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers 负责处理通过Pulsar的消息,包括消息的<a href="/docs/zh-CN/2.2.0/concepts-architecture-overview#persistent-storage">持久存储</a>。  [...]
 <ul>
-<li>immediately delete all messages that have been acknowledged on every subscription, and</li>
-<li>persistently store all unacknowledged messages in a <a href="#backlog-quotas">backlog</a>.</li>
+<li>立即删除每个订阅上已确认的所有消息。</li>
+<li>并且持久性地将所有未确认的消息存储在<a href="#backlog-quotas"> backlog </a>中。</li>
 </ul>
-<p>In Pulsar, you can override both of these default behaviors, at the namespace level, in two ways:</p>
+<p>在Pulsar中,你可以在命名空间级别以两种方式覆盖这两种默认行为:</p>
 <ul>
-<li>You can persistently store messages that have already been consumed and acknowledged for a minimum time by setting <a href="#retention-policies">retention policies</a>.</li>
-<li>Messages that are not acknowledged within a specified timeframe, can be automatically marked as consumed, by specifying the <a href="#time-to-live-ttl">time to live</a> (TTL).</li>
+<li>通过设置 <a href="#retention-policies">保留策略</a>,可以持久地存储已经被使用和确认的消息,并将其保留最少时间。</li>
+<li>通过指定[生存时间](#time-to-live- TTL) (TTL),可以自动将未在指定时间范围内得到确认的消息标记为已消费。</li>
 </ul>
 <p>Pulsar's <a href="/docs/zh-CN/2.2.0/admin-api-overview">admin interface</a> enables you to manage both retention policies and TTL at the namespace level (and thus within a specific tenant and either on a specific cluster or in the <a href="/docs/zh-CN/2.2.0/concepts-architecture-overview#global-cluster"><code>global</code></a> cluster).</p>
 <blockquote>
@@ -248,7 +248,7 @@ admin.namespaces().setBacklogQuota(namespace, quota);
 <h4><a class="anchor" aria-hidden="true" id="java-6"></a><a href="#java-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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. [...]
 <pre><code class="hljs css language-java">admin.namespaces().get
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/cookbooks-partitioned"><span class="arrow-prev">← </span><span>分区Topic</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/cookbooks-encryption"><span>Encryption</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#retention-policies">Retention policies</a><ul class="toc-headings"><li><a href="#default [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/cookbooks-partitioned"><span class="arrow-prev">← </span><span>分区主题</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/cookbooks-encryption"><span>Encryption</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#retention-policies">Retention policies</a><ul class="toc-headings"><li><a href="#defaults"> [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.2.0/deploy-bare-metal-multi-cluster.html b/content/docs/zh-CN/2.2.0/deploy-bare-metal-multi-cluster.html
index d8911d2..8e3dff6 100644
--- a/content/docs/zh-CN/2.2.0/deploy-bare-metal-multi-cluster.html
+++ b/content/docs/zh-CN/2.2.0/deploy-bare-metal-multi-cluster.html
@@ -212,7 +212,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.3.0
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="cluster-metadata-initialization"></a><a href="#cluster-metadata-initialization" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 [...]
 <p>Once you've set up the cluster-specific ZooKeeper and configuration store quorums for your instance, there is some metadata that needs to be written to ZooKeeper for each cluster in your instance. <strong>It only needs to be written once</strong>.</p>
-<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.2.0/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.2.0/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. 这里有一个示例:</p>
+<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.2.0/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.2.0/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar initialize-cluster-metadata \</span>
   --cluster us-west \
   --zookeeper zk1.us-west.example.com:2181 \
@@ -230,7 +230,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.3.0
 <li>集群的web服务URL</li>
 <li>Broker服务的URL,来开启和集群中<a href="/docs/zh-CN/2.2.0/reference-terminology#broker">broker</a>的交互</li>
 </ul>
-<p>如果您使用<a href="/docs/zh-CN/2.2.0/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL以及为 brokers 群集指定TLS broker服务URL。</p>
+<p>如果使用<a href="/docs/zh-CN/2.2.0/security-tls-transport"> TLS </a>,那么您还需要为群集指定TLS Web服务URL,为群集中的各个 broker 指定 TLS broker服务URL。</p>
 <p>Make sure to run <code>initialize-cluster-metadata</code> for each cluster in your instance.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-bookkeeper"></a><a href="#deploying-bookkeeper" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
 <p>BookKeeper provides <a href="/docs/zh-CN/2.2.0/concepts-architecture-overview#persistent-storage">persistent message storage</a> for Pulsar.</p>
diff --git a/content/docs/zh-CN/2.2.0/deploy-bare-metal-multi-cluster/index.html b/content/docs/zh-CN/2.2.0/deploy-bare-metal-multi-cluster/index.html
index d8911d2..8e3dff6 100644
--- a/content/docs/zh-CN/2.2.0/deploy-bare-metal-multi-cluster/index.html
+++ b/content/docs/zh-CN/2.2.0/deploy-bare-metal-multi-cluster/index.html
@@ -212,7 +212,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.3.0
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="cluster-metadata-initialization"></a><a href="#cluster-metadata-initialization" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 [...]
 <p>Once you've set up the cluster-specific ZooKeeper and configuration store quorums for your instance, there is some metadata that needs to be written to ZooKeeper for each cluster in your instance. <strong>It only needs to be written once</strong>.</p>
-<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.2.0/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.2.0/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. 这里有一个示例:</p>
+<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.2.0/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.2.0/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar initialize-cluster-metadata \</span>
   --cluster us-west \
   --zookeeper zk1.us-west.example.com:2181 \
@@ -230,7 +230,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.3.0
 <li>集群的web服务URL</li>
 <li>Broker服务的URL,来开启和集群中<a href="/docs/zh-CN/2.2.0/reference-terminology#broker">broker</a>的交互</li>
 </ul>
-<p>如果您使用<a href="/docs/zh-CN/2.2.0/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL以及为 brokers 群集指定TLS broker服务URL。</p>
+<p>如果使用<a href="/docs/zh-CN/2.2.0/security-tls-transport"> TLS </a>,那么您还需要为群集指定TLS Web服务URL,为群集中的各个 broker 指定 TLS broker服务URL。</p>
 <p>Make sure to run <code>initialize-cluster-metadata</code> for each cluster in your instance.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-bookkeeper"></a><a href="#deploying-bookkeeper" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
 <p>BookKeeper provides <a href="/docs/zh-CN/2.2.0/concepts-architecture-overview#persistent-storage">persistent message storage</a> for Pulsar.</p>
diff --git a/content/docs/zh-CN/2.2.0/deploy-bare-metal.html b/content/docs/zh-CN/2.2.0/deploy-bare-metal.html
index 4e9ba40..f1716c8 100644
--- a/content/docs/zh-CN/2.2.0/deploy-bare-metal.html
+++ b/content/docs/zh-CN/2.2.0/deploy-bare-metal.html
@@ -92,7 +92,7 @@
 <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 [...]
 <h3><a class="anchor" aria-hidden="true" id="要求"></a><a href="#要求" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c [...]
 <blockquote>
-<p>如果你想使用已有的zookeeper集群,那就不用准备额外的机器去运行zookeeper。</p>
+<p>如果您想使用已有的zookeeper集群,那就不用准备额外的机器去运行zookeeper。</p>
 </blockquote>
 <p>To run Pulsar on bare metal, you will need:</p>
 <ul>
@@ -101,7 +101,7 @@
 <li>3台运行<a href="https://zookeeper.apache.org">ZooKeeper</a></li>
 <li>3台运行Pulsar broker,一台 <a href="https://bookkeeper.apache.org">BookKeeper</a> bookie</li>
 </ul></li>
-<li>一个 <a href="https://en.wikipedia.org/wiki/Domain_Name_System">DNS</a>(域名解析服务器)包含Pulsar所有broker主机</li>
+<li>一个 包含Pulsar所有broker主机的<a href="https://en.wikipedia.org/wiki/Domain_Name_System">DNS</a>(域名解析服务器)</li>
 </ul>
 <p>集群中的每台机器都需要安装<a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">Java 8</a>或更高版本。</p>
 <p>下图展示了基本设置:</p>
@@ -110,18 +110,18 @@
 <h3><a class="anchor" aria-hidden="true" id="hardware-considerations"></a><a href="#hardware-considerations" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 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>在部署 Pulsar 集群时,我们提供了一些基本建议,在容量规划时应牢记这些建议。</p>
 <h4><a class="anchor" aria-hidden="true" id="zookeeper"></a><a href="#zookeeper" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>对于运行ZooKeeper的机器,我们建议使用配置一般的机器或VM。 Pulsar使用ZooKeeper只是定期做些协调和配置相关的任务,<em>不</em>用于基本操作。 如果您在<a href="https://aws.amazon.com/">Amazon Web Services </a>(AWS)上部署Pulsar,比如一个<a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html">t2.small </a>实例就足够了。</p>
+<p>对于运行ZooKeeper的机器,我们建议使用配置一般的机器或VM。 Pulsar使用ZooKeeper只是定期做些协调和配置相关的任务,<em>不</em>用于基本操作。 如果您在<a href="https://aws.amazon.com/">Amazon Web Services </a>(AWS)上部署Pulsar,例如一个<a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html">t2.small </a>实例就足够了。</p>
 <h4><a class="anchor" aria-hidden="true" id="bookies-brokers"></a><a href="#bookies-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
 <p>对于运行 bookie 和 Pulsar broker 的机器,我们建议使用性能更强大的机器。 例如,对于AWS部署,<a href="https://aws.amazon.com/blogs/aws/now-available-i3-instances-for-demanding-io-intensive-applications/">i3.4xlarge</a>实例可能是合适的。 在这些机器上部署,我们还有以下建议:</p>
 <ul>
 <li>高性能的CPU和10Gbps <a href="https://en.wikipedia.org/wiki/Network_interface_controller"> NIC </a>(适用于Pulsar brokers)</li>
-<li>小型快速固态硬盘<a href="https://en.wikipedia.org/wiki/Solid-state_drive">(SSD)</a>或硬盘驱动器<a href="https://en.wikipedia.org/wiki/Hard_disk_drive">(HDD)</a>,带有<a href="https://en.wikipedia.org/wiki/RAID">RAID</a>控制器和电池供电的写缓存(适用于BookKeeper bookies)</li>
+<li>小型快速<a href="https://en.wikipedia.org/wiki/Solid-state_drive">固态硬盘</a>(SSD)或<a href="https://en.wikipedia.org/wiki/Hard_disk_drive">硬盘驱动器</a>(HDD),带有<a href="https://en.wikipedia.org/wiki/RAID">RAID</a>控制器和电池供电的写缓存(适用于BookKeeper bookies)</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="安装pulsar二进制包"></a><a href="#安装pulsar二进制包" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <blockquote>
 <p>You'll need to install the Pulsar binary package on <em>each machine in the cluster</em>, including machines running <a href="#deploying-a-zookeeper-cluster">ZooKeeper</a> and <a href="#deploying-a-bookkeeper-cluster">BookKeeper</a>.</p>
 </blockquote>
-<p>要开始在裸机上部署Pulsar集群,您需要通过以下方式之一下载二进制压缩包:</p>
+<p>要在裸机上部署Pulsar集群,用以下任意方式下载二进制压缩包:</p>
 <ul>
 <li>点击下面的链接,会自动触发下载:
 <ul>
@@ -187,11 +187,11 @@ pulsar-io-twitter-2.3.0.nar
 <blockquote>
 <p>从<code>2.2.0</code>版本,Pulsar发布了一个单独的二进制发行版,其中包含分层存储卸载器。 如果您想启用分层存储功能,可以按照以下说明操作; 否则你可以暂时跳过此部分。</p>
 </blockquote>
-<p>要使用分层存储卸载器,您需要在每个broker节点上下载其发行版压缩包,可通过以下方式之一来进行下载:</p>
+<p>要使用分层存储卸载器,您需要在每个broker节点上下载其发行版压缩包,可通过以下任一方式来下载:</p>
 <ul>
 <li><p>通过单击下面的链接并从 Apache 镜像下载该版本:</p>
 <ul>
-<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-offloaders-2.3.0-bin.tar.gz" download>Pulsar Tiered Storage Offloaders 2.3.0 release</a></li>
+<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-offloaders-2.3.0-bin.tar.gz" download>Pulsar 分层存储下载器 2.3.0 版本</a></li>
 </ul></li>
 <li><p>从Pulsar <a href="/download">下载页</a></p></li>
 <li><p>from the Pulsar <a href="https://github.com/apache/pulsar/releases/latest">releases page</a></p></li>
@@ -210,13 +210,13 @@ $ mv apache-pulsar-offloaders-2.3.0/offloaders offloaders
 $ ls offloaders
 tiered-storage-jcloud-2.3.0.nar
 </code></pre>
-<p>有关如何配置分层存储功能的更多详细信息,可以参考此<a href="/docs/zh-CN/2.2.0/cookbooks-tiered-storage">分层存储手册</a></p>
+<p>有关如何配置分层存储功能的更多详细信息,参考<a href="/docs/zh-CN/2.2.0/cookbooks-tiered-storage">分层存储手册</a>。</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-a-zookeeper-cluster"></a><a href="#deploying-a-zookeeper-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 2.5S13.98 12  [...]
 <blockquote>
 <p>If you already have an exsiting zookeeper cluster and would like to use it, you can skip this section.</p>
 </blockquote>
 <p><a href="https://zookeeper.apache.org">ZooKeeper</a> manages a variety of essential coordination- and configuration-related tasks for Pulsar. To deploy a Pulsar cluster you'll need to deploy ZooKeeper first (before all other components). We recommend deploying a 3-node ZooKeeper cluster. Pulsar does not make heavy use of ZooKeeper, so more lightweight machines or VMs should suffice for running ZooKeeper.</p>
-<p>To begin, add all ZooKeeper servers to the configuration specified in <a href="/docs/zh-CN/2.2.0/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> (in the Pulsar directory you created <a href="#installing-the-pulsar-binary-package">above</a>). 这里有一个示例:</p>
+<p>To begin, add all ZooKeeper servers to the configuration specified in <a href="/docs/zh-CN/2.2.0/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> (in the Pulsar directory you created <a href="#installing-the-pulsar-binary-package">above</a>). 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-meta">server.1</span>=<span class="hljs-string">zk1.us-west.example.com:2888:3888</span>
 <span class="hljs-meta">server.2</span>=<span class="hljs-string">zk2.us-west.example.com:2888:3888</span>
 <span class="hljs-meta">server.3</span>=<span class="hljs-string">zk3.us-west.example.com:2888:3888</span>
@@ -235,7 +235,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="initializing-cluster-metadata"></a><a href="#initializing-cluster-metadata" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12  [...]
 <p>Once you've deployed ZooKeeper for your cluster, there is some metadata that needs to be written to ZooKeeper for each cluster in your instance. It only needs to be written <strong>once</strong>.</p>
-<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.2.0/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.2.0/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. This command can be run on any machine in your ZooKeeper cluster. 这里有一个示例:</p>
+<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.2.0/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.2.0/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. This command can be run on any machine in your ZooKeeper cluster. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar initialize-cluster-metadata \</span>
   --cluster pulsar-cluster-1 \
   --zookeeper zk1.us-west.example.com:2181 \
@@ -252,17 +252,17 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>--cluster</code></td><td style="text-align:left">集群名字</td></tr>
-<tr><td style="text-align:left"><code>--zookeeper</code></td><td style="text-align:left">ZooKeeper集群的“本地”连接地址字符串。 此连接字符串为ZooKeeper集群任意<em>一个</em>实例的地址。</td></tr>
-<tr><td style="text-align:left"><code>--configuration-store</code></td><td style="text-align:left">整个集群实例的配置存储连接字符串。 和<code>--zookeeper</code>参数一样只需要包含ZooKeeper集群中的<em>一个</em>节点即可。</td></tr>
+<tr><td style="text-align:left"><code>--zookeeper</code></td><td style="text-align:left">ZooKeeper集群的“本地”连接字符串。 该连接字符串只需包含ZooKeeper集群<em>任一台</em>机器。</td></tr>
+<tr><td style="text-align:left"><code>--configuration-store</code></td><td style="text-align:left">整个集群实例的配置存储连接字符串。 和<code>--zookeeper</code>标记一样,该连接字符串只需包含ZooKeeper集群中的<em>任一台</em>机器即可。</td></tr>
 <tr><td style="text-align:left"><code>--web-service-url</code></td><td style="text-align:left">群集的Web服务URL以及端口。 此URL应为标准DNS名称。 默认端口为8080(我们不建议使用其他端口)。</td></tr>
-<tr><td style="text-align:left"><code>--web-service-url-tls</code></td><td style="text-align:left">如果您使用<a href="/docs/zh-CN/2.2.0/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL。 默认端口为8443(我们不建议使用其他端口)。</td></tr>
-<tr><td style="text-align:left"><code>--broker-service-url</code></td><td style="text-align:left">Broker服务的URL,用于与集群中的brokers进行交互。 此URL应使用与Web服务URL相同的DNS名称,但应使用<code>pulsar</code>替代http/https。 端口默认6650(我们不建议使用其他端口)。</td></tr>
-<tr><td style="text-align:left"><code>--broker-service-url-tls</code></td><td style="text-align:left">如果您使用<a href="/docs/zh-CN/2.2.0/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL以及为 brokers 群集指定TLS broker服务URL。 端口默认6651(我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--web-service-url-tls</code></td><td style="text-align:left">如果您使用<a href="/docs/zh-CN/2.2.0/security-tls-transport"> TLS </a>,需要为群集指定TLS Web服务URL。 默认端口为8443(我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--broker-service-url</code></td><td style="text-align:left">Broker服务的URL,用于与集群中的brokers进行交互。 此URL应使用与Web服务URL相同的DNS名称,但应使用<code>pulsar</code>替代scheme。 默认端口为 6650 (我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--broker-service-url-tls</code></td><td style="text-align:left">如果使用<a href="/docs/zh-CN/2.2.0/security-tls-transport"> TLS </a>,那么您还需要为群集指定TLS Web服务URL,为群集中的各个 broker 指定 TLS broker服务URL。 默认端口为 6651 (我们不建议使用其他端口)。</td></tr>
 </tbody>
 </table>
 <h2><a class="anchor" aria-hidden="true" id="deploying-a-bookkeeper-cluster"></a><a href="#deploying-a-bookkeeper-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 2.5S13.98 1 [...]
 <p><a href="https://bookkeeper.apache.org">BookKeeper</a> handles all persistent data storage in Pulsar. You will need to deploy a cluster of BookKeeper bookies to use Pulsar. We recommend running a <strong>3-bookie BookKeeper cluster</strong>.</p>
-<p>BookKeeper bookies can be configured using the <a href="/docs/zh-CN/2.2.0/reference-configuration#bookkeeper"><code>conf/bookkeeper.conf</code></a> configuration file. The most important step in configuring bookies for our purposes here is ensuring that the <a href="/docs/zh-CN/2.2.0/reference-configuration#bookkeeper-zkServers"><code>zkServers</code></a> is set to the connection string for the ZooKeeper cluster. 这里有一个示例:</p>
+<p>BookKeeper bookies can be configured using the <a href="/docs/zh-CN/2.2.0/reference-configuration#bookkeeper"><code>conf/bookkeeper.conf</code></a> configuration file. The most important step in configuring bookies for our purposes here is ensuring that the <a href="/docs/zh-CN/2.2.0/reference-configuration#bookkeeper-zkServers"><code>zkServers</code></a> is set to the connection string for the ZooKeeper cluster. 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zkServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
 <p>Once you've appropriately modified the <code>zkServers</code> parameter, you can provide any other configuration modifications you need. You can find a full listing of the available BookKeeper configuration parameters <a href="/docs/zh-CN/2.2.0/reference-configuration#bookkeeper">here</a>, although we would recommend consulting the <a href="http://bookkeeper.apache.org/docs/latest/reference/config/">BookKeeper documentation</a> for a more in-depth guide.</p>
@@ -293,7 +293,7 @@ $ bin/pulsar-daemon start bookie
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
-<h3><a class="anchor" aria-hidden="true" id="配置brokers"></a><a href="#配置brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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 [...]
+<h3><a class="anchor" aria-hidden="true" id="配置broker"></a><a href="#配置broker" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
@@ -313,7 +313,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-conf">pulsarFunctionsCluster: pulsar-cluster<span class="hljs-number">-1</span>
 </code></pre></li>
 </ol>
-<h3><a class="anchor" aria-hidden="true" id="启动-brokers"></a><a href="#启动-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h3><a class="anchor" aria-hidden="true" id="启动-broker"></a><a href="#启动-broker" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>You can then provide any other configuration changes that you'd like in the <a href="reference-configuration.md#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
 <p>You can start a broker in the foreground using the <a href="reference-cli-tools.md#pulsar-broker"><code>pulsar broker</code></a> command:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar broker
@@ -324,7 +324,7 @@ $ bin/pulsar-daemon start bookie
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-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 2.5S1 [...]
 <p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="reference-cli-tools.md#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. 这里有一个示例:</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -358,7 +358,7 @@ $ bin/pulsar-daemon start bookie
 <p>You will see output as below:</p>
 <pre><code class="hljs css language-shell">hello world!
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/deploy-kubernetes"><span class="arrow-prev">← </span><span>Kubernetes</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/deploy-bare-metal-multi-cluster"><span>裸机多集群部署</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#准备工作">准备工作</a><ul class="toc-headings"><li><a href="#要求">要求</a></li><li><a href=" [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/deploy-kubernetes"><span class="arrow-prev">← </span><span>Kubernetes</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/deploy-bare-metal-multi-cluster"><span>裸机多集群部署</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#准备工作">准备工作</a><ul class="toc-headings"><li><a href="#要求">要求</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/deploy-bare-metal/index.html b/content/docs/zh-CN/2.2.0/deploy-bare-metal/index.html
index 4e9ba40..f1716c8 100644
--- a/content/docs/zh-CN/2.2.0/deploy-bare-metal/index.html
+++ b/content/docs/zh-CN/2.2.0/deploy-bare-metal/index.html
@@ -92,7 +92,7 @@
 <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 [...]
 <h3><a class="anchor" aria-hidden="true" id="要求"></a><a href="#要求" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c [...]
 <blockquote>
-<p>如果你想使用已有的zookeeper集群,那就不用准备额外的机器去运行zookeeper。</p>
+<p>如果您想使用已有的zookeeper集群,那就不用准备额外的机器去运行zookeeper。</p>
 </blockquote>
 <p>To run Pulsar on bare metal, you will need:</p>
 <ul>
@@ -101,7 +101,7 @@
 <li>3台运行<a href="https://zookeeper.apache.org">ZooKeeper</a></li>
 <li>3台运行Pulsar broker,一台 <a href="https://bookkeeper.apache.org">BookKeeper</a> bookie</li>
 </ul></li>
-<li>一个 <a href="https://en.wikipedia.org/wiki/Domain_Name_System">DNS</a>(域名解析服务器)包含Pulsar所有broker主机</li>
+<li>一个 包含Pulsar所有broker主机的<a href="https://en.wikipedia.org/wiki/Domain_Name_System">DNS</a>(域名解析服务器)</li>
 </ul>
 <p>集群中的每台机器都需要安装<a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">Java 8</a>或更高版本。</p>
 <p>下图展示了基本设置:</p>
@@ -110,18 +110,18 @@
 <h3><a class="anchor" aria-hidden="true" id="hardware-considerations"></a><a href="#hardware-considerations" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 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>在部署 Pulsar 集群时,我们提供了一些基本建议,在容量规划时应牢记这些建议。</p>
 <h4><a class="anchor" aria-hidden="true" id="zookeeper"></a><a href="#zookeeper" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>对于运行ZooKeeper的机器,我们建议使用配置一般的机器或VM。 Pulsar使用ZooKeeper只是定期做些协调和配置相关的任务,<em>不</em>用于基本操作。 如果您在<a href="https://aws.amazon.com/">Amazon Web Services </a>(AWS)上部署Pulsar,比如一个<a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html">t2.small </a>实例就足够了。</p>
+<p>对于运行ZooKeeper的机器,我们建议使用配置一般的机器或VM。 Pulsar使用ZooKeeper只是定期做些协调和配置相关的任务,<em>不</em>用于基本操作。 如果您在<a href="https://aws.amazon.com/">Amazon Web Services </a>(AWS)上部署Pulsar,例如一个<a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html">t2.small </a>实例就足够了。</p>
 <h4><a class="anchor" aria-hidden="true" id="bookies-brokers"></a><a href="#bookies-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
 <p>对于运行 bookie 和 Pulsar broker 的机器,我们建议使用性能更强大的机器。 例如,对于AWS部署,<a href="https://aws.amazon.com/blogs/aws/now-available-i3-instances-for-demanding-io-intensive-applications/">i3.4xlarge</a>实例可能是合适的。 在这些机器上部署,我们还有以下建议:</p>
 <ul>
 <li>高性能的CPU和10Gbps <a href="https://en.wikipedia.org/wiki/Network_interface_controller"> NIC </a>(适用于Pulsar brokers)</li>
-<li>小型快速固态硬盘<a href="https://en.wikipedia.org/wiki/Solid-state_drive">(SSD)</a>或硬盘驱动器<a href="https://en.wikipedia.org/wiki/Hard_disk_drive">(HDD)</a>,带有<a href="https://en.wikipedia.org/wiki/RAID">RAID</a>控制器和电池供电的写缓存(适用于BookKeeper bookies)</li>
+<li>小型快速<a href="https://en.wikipedia.org/wiki/Solid-state_drive">固态硬盘</a>(SSD)或<a href="https://en.wikipedia.org/wiki/Hard_disk_drive">硬盘驱动器</a>(HDD),带有<a href="https://en.wikipedia.org/wiki/RAID">RAID</a>控制器和电池供电的写缓存(适用于BookKeeper bookies)</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="安装pulsar二进制包"></a><a href="#安装pulsar二进制包" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <blockquote>
 <p>You'll need to install the Pulsar binary package on <em>each machine in the cluster</em>, including machines running <a href="#deploying-a-zookeeper-cluster">ZooKeeper</a> and <a href="#deploying-a-bookkeeper-cluster">BookKeeper</a>.</p>
 </blockquote>
-<p>要开始在裸机上部署Pulsar集群,您需要通过以下方式之一下载二进制压缩包:</p>
+<p>要在裸机上部署Pulsar集群,用以下任意方式下载二进制压缩包:</p>
 <ul>
 <li>点击下面的链接,会自动触发下载:
 <ul>
@@ -187,11 +187,11 @@ pulsar-io-twitter-2.3.0.nar
 <blockquote>
 <p>从<code>2.2.0</code>版本,Pulsar发布了一个单独的二进制发行版,其中包含分层存储卸载器。 如果您想启用分层存储功能,可以按照以下说明操作; 否则你可以暂时跳过此部分。</p>
 </blockquote>
-<p>要使用分层存储卸载器,您需要在每个broker节点上下载其发行版压缩包,可通过以下方式之一来进行下载:</p>
+<p>要使用分层存储卸载器,您需要在每个broker节点上下载其发行版压缩包,可通过以下任一方式来下载:</p>
 <ul>
 <li><p>通过单击下面的链接并从 Apache 镜像下载该版本:</p>
 <ul>
-<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-offloaders-2.3.0-bin.tar.gz" download>Pulsar Tiered Storage Offloaders 2.3.0 release</a></li>
+<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-offloaders-2.3.0-bin.tar.gz" download>Pulsar 分层存储下载器 2.3.0 版本</a></li>
 </ul></li>
 <li><p>从Pulsar <a href="/download">下载页</a></p></li>
 <li><p>from the Pulsar <a href="https://github.com/apache/pulsar/releases/latest">releases page</a></p></li>
@@ -210,13 +210,13 @@ $ mv apache-pulsar-offloaders-2.3.0/offloaders offloaders
 $ ls offloaders
 tiered-storage-jcloud-2.3.0.nar
 </code></pre>
-<p>有关如何配置分层存储功能的更多详细信息,可以参考此<a href="/docs/zh-CN/2.2.0/cookbooks-tiered-storage">分层存储手册</a></p>
+<p>有关如何配置分层存储功能的更多详细信息,参考<a href="/docs/zh-CN/2.2.0/cookbooks-tiered-storage">分层存储手册</a>。</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-a-zookeeper-cluster"></a><a href="#deploying-a-zookeeper-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 2.5S13.98 12  [...]
 <blockquote>
 <p>If you already have an exsiting zookeeper cluster and would like to use it, you can skip this section.</p>
 </blockquote>
 <p><a href="https://zookeeper.apache.org">ZooKeeper</a> manages a variety of essential coordination- and configuration-related tasks for Pulsar. To deploy a Pulsar cluster you'll need to deploy ZooKeeper first (before all other components). We recommend deploying a 3-node ZooKeeper cluster. Pulsar does not make heavy use of ZooKeeper, so more lightweight machines or VMs should suffice for running ZooKeeper.</p>
-<p>To begin, add all ZooKeeper servers to the configuration specified in <a href="/docs/zh-CN/2.2.0/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> (in the Pulsar directory you created <a href="#installing-the-pulsar-binary-package">above</a>). 这里有一个示例:</p>
+<p>To begin, add all ZooKeeper servers to the configuration specified in <a href="/docs/zh-CN/2.2.0/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> (in the Pulsar directory you created <a href="#installing-the-pulsar-binary-package">above</a>). 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-meta">server.1</span>=<span class="hljs-string">zk1.us-west.example.com:2888:3888</span>
 <span class="hljs-meta">server.2</span>=<span class="hljs-string">zk2.us-west.example.com:2888:3888</span>
 <span class="hljs-meta">server.3</span>=<span class="hljs-string">zk3.us-west.example.com:2888:3888</span>
@@ -235,7 +235,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="initializing-cluster-metadata"></a><a href="#initializing-cluster-metadata" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12  [...]
 <p>Once you've deployed ZooKeeper for your cluster, there is some metadata that needs to be written to ZooKeeper for each cluster in your instance. It only needs to be written <strong>once</strong>.</p>
-<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.2.0/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.2.0/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. This command can be run on any machine in your ZooKeeper cluster. 这里有一个示例:</p>
+<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.2.0/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.2.0/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. This command can be run on any machine in your ZooKeeper cluster. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar initialize-cluster-metadata \</span>
   --cluster pulsar-cluster-1 \
   --zookeeper zk1.us-west.example.com:2181 \
@@ -252,17 +252,17 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>--cluster</code></td><td style="text-align:left">集群名字</td></tr>
-<tr><td style="text-align:left"><code>--zookeeper</code></td><td style="text-align:left">ZooKeeper集群的“本地”连接地址字符串。 此连接字符串为ZooKeeper集群任意<em>一个</em>实例的地址。</td></tr>
-<tr><td style="text-align:left"><code>--configuration-store</code></td><td style="text-align:left">整个集群实例的配置存储连接字符串。 和<code>--zookeeper</code>参数一样只需要包含ZooKeeper集群中的<em>一个</em>节点即可。</td></tr>
+<tr><td style="text-align:left"><code>--zookeeper</code></td><td style="text-align:left">ZooKeeper集群的“本地”连接字符串。 该连接字符串只需包含ZooKeeper集群<em>任一台</em>机器。</td></tr>
+<tr><td style="text-align:left"><code>--configuration-store</code></td><td style="text-align:left">整个集群实例的配置存储连接字符串。 和<code>--zookeeper</code>标记一样,该连接字符串只需包含ZooKeeper集群中的<em>任一台</em>机器即可。</td></tr>
 <tr><td style="text-align:left"><code>--web-service-url</code></td><td style="text-align:left">群集的Web服务URL以及端口。 此URL应为标准DNS名称。 默认端口为8080(我们不建议使用其他端口)。</td></tr>
-<tr><td style="text-align:left"><code>--web-service-url-tls</code></td><td style="text-align:left">如果您使用<a href="/docs/zh-CN/2.2.0/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL。 默认端口为8443(我们不建议使用其他端口)。</td></tr>
-<tr><td style="text-align:left"><code>--broker-service-url</code></td><td style="text-align:left">Broker服务的URL,用于与集群中的brokers进行交互。 此URL应使用与Web服务URL相同的DNS名称,但应使用<code>pulsar</code>替代http/https。 端口默认6650(我们不建议使用其他端口)。</td></tr>
-<tr><td style="text-align:left"><code>--broker-service-url-tls</code></td><td style="text-align:left">如果您使用<a href="/docs/zh-CN/2.2.0/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL以及为 brokers 群集指定TLS broker服务URL。 端口默认6651(我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--web-service-url-tls</code></td><td style="text-align:left">如果您使用<a href="/docs/zh-CN/2.2.0/security-tls-transport"> TLS </a>,需要为群集指定TLS Web服务URL。 默认端口为8443(我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--broker-service-url</code></td><td style="text-align:left">Broker服务的URL,用于与集群中的brokers进行交互。 此URL应使用与Web服务URL相同的DNS名称,但应使用<code>pulsar</code>替代scheme。 默认端口为 6650 (我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--broker-service-url-tls</code></td><td style="text-align:left">如果使用<a href="/docs/zh-CN/2.2.0/security-tls-transport"> TLS </a>,那么您还需要为群集指定TLS Web服务URL,为群集中的各个 broker 指定 TLS broker服务URL。 默认端口为 6651 (我们不建议使用其他端口)。</td></tr>
 </tbody>
 </table>
 <h2><a class="anchor" aria-hidden="true" id="deploying-a-bookkeeper-cluster"></a><a href="#deploying-a-bookkeeper-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 2.5S13.98 1 [...]
 <p><a href="https://bookkeeper.apache.org">BookKeeper</a> handles all persistent data storage in Pulsar. You will need to deploy a cluster of BookKeeper bookies to use Pulsar. We recommend running a <strong>3-bookie BookKeeper cluster</strong>.</p>
-<p>BookKeeper bookies can be configured using the <a href="/docs/zh-CN/2.2.0/reference-configuration#bookkeeper"><code>conf/bookkeeper.conf</code></a> configuration file. The most important step in configuring bookies for our purposes here is ensuring that the <a href="/docs/zh-CN/2.2.0/reference-configuration#bookkeeper-zkServers"><code>zkServers</code></a> is set to the connection string for the ZooKeeper cluster. 这里有一个示例:</p>
+<p>BookKeeper bookies can be configured using the <a href="/docs/zh-CN/2.2.0/reference-configuration#bookkeeper"><code>conf/bookkeeper.conf</code></a> configuration file. The most important step in configuring bookies for our purposes here is ensuring that the <a href="/docs/zh-CN/2.2.0/reference-configuration#bookkeeper-zkServers"><code>zkServers</code></a> is set to the connection string for the ZooKeeper cluster. 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zkServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
 <p>Once you've appropriately modified the <code>zkServers</code> parameter, you can provide any other configuration modifications you need. You can find a full listing of the available BookKeeper configuration parameters <a href="/docs/zh-CN/2.2.0/reference-configuration#bookkeeper">here</a>, although we would recommend consulting the <a href="http://bookkeeper.apache.org/docs/latest/reference/config/">BookKeeper documentation</a> for a more in-depth guide.</p>
@@ -293,7 +293,7 @@ $ bin/pulsar-daemon start bookie
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
-<h3><a class="anchor" aria-hidden="true" id="配置brokers"></a><a href="#配置brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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 [...]
+<h3><a class="anchor" aria-hidden="true" id="配置broker"></a><a href="#配置broker" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
@@ -313,7 +313,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-conf">pulsarFunctionsCluster: pulsar-cluster<span class="hljs-number">-1</span>
 </code></pre></li>
 </ol>
-<h3><a class="anchor" aria-hidden="true" id="启动-brokers"></a><a href="#启动-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h3><a class="anchor" aria-hidden="true" id="启动-broker"></a><a href="#启动-broker" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>You can then provide any other configuration changes that you'd like in the <a href="reference-configuration.md#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
 <p>You can start a broker in the foreground using the <a href="reference-cli-tools.md#pulsar-broker"><code>pulsar broker</code></a> command:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar broker
@@ -324,7 +324,7 @@ $ bin/pulsar-daemon start bookie
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-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 2.5S1 [...]
 <p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="reference-cli-tools.md#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. 这里有一个示例:</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -358,7 +358,7 @@ $ bin/pulsar-daemon start bookie
 <p>You will see output as below:</p>
 <pre><code class="hljs css language-shell">hello world!
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/deploy-kubernetes"><span class="arrow-prev">← </span><span>Kubernetes</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/deploy-bare-metal-multi-cluster"><span>裸机多集群部署</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#准备工作">准备工作</a><ul class="toc-headings"><li><a href="#要求">要求</a></li><li><a href=" [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.0/deploy-kubernetes"><span class="arrow-prev">← </span><span>Kubernetes</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.0/deploy-bare-metal-multi-cluster"><span>裸机多集群部署</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#准备工作">准备工作</a><ul class="toc-headings"><li><a href="#要求">要求</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/functions-api.html b/content/docs/zh-CN/2.2.0/functions-api.html
index 3541c9c..e6256a5 100644
--- a/content/docs/zh-CN/2.2.0/functions-api.html
+++ b/content/docs/zh-CN/2.2.0/functions-api.html
@@ -471,7 +471,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
 <p>For all key/value pairs passed to Java Pulsar Functions, both the key <em>and</em> the value are <code>String</code>s. If you'd like the value to be of a different type, you will need to deserialize from the <code>String</code> type.</p>
 </blockquote>
 <h3><a class="anchor" aria-hidden="true" id="java-metrics"></a><a href="#java-metrics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 这里有一个示例:</p>
+<p>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 下面是一个示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.functions.api.Context;
 <span class="hljs-keyword">import</span> org.apache.pulsar.functions.api.Function;
 
@@ -559,7 +559,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
 </tbody>
 </table>
 <h3><a class="anchor" aria-hidden="true" id="python-serde"></a><a href="#python-serde" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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 Functions use <a href="#serialization-and-deserialization-serde">SerDe</a> when publishing data to and consuming data from Pulsar topics (this is true of both <a href="#python-native-functions">native</a> functions and <a href="#python-sdk-functions">SDK</a> functions). You can specify the SerDe when <a href="/docs/zh-CN/2.2.0/functions-deploying#cluster-mode">creating</a> or <a href="/docs/zh-CN/2.2.0/functions-deploying#local-run-mode">running</a> functions. 这里有一个示例:</p>
+<p>Pulsar Functions use <a href="#serialization-and-deserialization-serde">SerDe</a> when publishing data to and consuming data from Pulsar topics (this is true of both <a href="#python-native-functions">native</a> functions and <a href="#python-sdk-functions">SDK</a> functions). You can specify the SerDe when <a href="/docs/zh-CN/2.2.0/functions-deploying#cluster-mode">creating</a> or <a href="/docs/zh-CN/2.2.0/functions-deploying#local-run-mode">running</a> functions. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --tenant public \
   --namespace default \
@@ -653,7 +653,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="python-metrics"></a><a href="#python-metrics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 这里有一个示例:</p>
+<p>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 下面是一个示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> pulsar <span class="hljs-keyword">import</span> Function
 
 <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MetricRecorderFunction</span><span class="hljs-params">(Function)</span>:</span>
diff --git a/content/docs/zh-CN/2.2.0/functions-api/index.html b/content/docs/zh-CN/2.2.0/functions-api/index.html
index 3541c9c..e6256a5 100644
--- a/content/docs/zh-CN/2.2.0/functions-api/index.html
+++ b/content/docs/zh-CN/2.2.0/functions-api/index.html
@@ -471,7 +471,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
 <p>For all key/value pairs passed to Java Pulsar Functions, both the key <em>and</em> the value are <code>String</code>s. If you'd like the value to be of a different type, you will need to deserialize from the <code>String</code> type.</p>
 </blockquote>
 <h3><a class="anchor" aria-hidden="true" id="java-metrics"></a><a href="#java-metrics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 这里有一个示例:</p>
+<p>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 下面是一个示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.functions.api.Context;
 <span class="hljs-keyword">import</span> org.apache.pulsar.functions.api.Function;
 
@@ -559,7 +559,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
 </tbody>
 </table>
 <h3><a class="anchor" aria-hidden="true" id="python-serde"></a><a href="#python-serde" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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 Functions use <a href="#serialization-and-deserialization-serde">SerDe</a> when publishing data to and consuming data from Pulsar topics (this is true of both <a href="#python-native-functions">native</a> functions and <a href="#python-sdk-functions">SDK</a> functions). You can specify the SerDe when <a href="/docs/zh-CN/2.2.0/functions-deploying#cluster-mode">creating</a> or <a href="/docs/zh-CN/2.2.0/functions-deploying#local-run-mode">running</a> functions. 这里有一个示例:</p>
+<p>Pulsar Functions use <a href="#serialization-and-deserialization-serde">SerDe</a> when publishing data to and consuming data from Pulsar topics (this is true of both <a href="#python-native-functions">native</a> functions and <a href="#python-sdk-functions">SDK</a> functions). You can specify the SerDe when <a href="/docs/zh-CN/2.2.0/functions-deploying#cluster-mode">creating</a> or <a href="/docs/zh-CN/2.2.0/functions-deploying#local-run-mode">running</a> functions. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --tenant public \
   --namespace default \
@@ -653,7 +653,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="python-metrics"></a><a href="#python-metrics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 这里有一个示例:</p>
+<p>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 下面是一个示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> pulsar <span class="hljs-keyword">import</span> Function
 
 <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MetricRecorderFunction</span><span class="hljs-params">(Function)</span>:</span>
diff --git a/content/docs/zh-CN/2.2.0/functions-deploying.html b/content/docs/zh-CN/2.2.0/functions-deploying.html
index de4ad01..6d7a144 100644
--- a/content/docs/zh-CN/2.2.0/functions-deploying.html
+++ b/content/docs/zh-CN/2.2.0/functions-deploying.html
@@ -131,13 +131,13 @@
   --inputs persistent://public/default/input-1 \
   --output persistent://public/default/output-1
 </code></pre>
-<p>By default, the function will connect to a Pulsar cluster running on the same machine, via a local <a href="/docs/zh-CN/2.2.0/reference-terminology#broker">broker</a> service URL of <code>pulsar://localhost:6650</code>. 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 这里有一个示例:</p>
+<p>By default, the function will connect to a Pulsar cluster running on the same machine, via a local <a href="/docs/zh-CN/2.2.0/reference-terminology#broker">broker</a> service URL of <code>pulsar://localhost:6650</code>. 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> localrun \
   --broker-service-url pulsar://my-cluster-host:6650 \
   <span class="hljs-comment"># Other function parameters</span>
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="cluster-mode"></a><a href="#cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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 Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.2.0/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 这里有一个示例:</p>
+<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.2.0/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --py myfunc.py \
   --classname myfunc.SomeFunction \
@@ -154,7 +154,7 @@
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="parallelism"></a><a href="#parallelism" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-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>Pulsar Functions run as processes called <strong>instances</strong>. When you run a Pulsar Function, it runs as a single instance by default (and in <a href="#local-run-mode">local run mode</a> you can <em>only</em> run a single instance of a function).</p>
-<p>You can also specify the <em>parallelism</em> of a function, i.e. the number of instances to run, when you create the function. You can set the parallelism factor using the <code>--parallelism</code> flag of the <a href="/docs/zh-CN/2.2.0/pulsar-admin#functions-create"><code>create</code></a> command. 这里有一个示例:</p>
+<p>You can also specify the <em>parallelism</em> of a function, i.e. the number of instances to run, when you create the function. You can set the parallelism factor using the <code>--parallelism</code> flag of the <a href="/docs/zh-CN/2.2.0/pulsar-admin#functions-create"><code>create</code></a> command. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --parallelism 3 \
   <span class="hljs-comment"># Other function info</span>
diff --git a/content/docs/zh-CN/2.2.0/functions-deploying/index.html b/content/docs/zh-CN/2.2.0/functions-deploying/index.html
index de4ad01..6d7a144 100644
--- a/content/docs/zh-CN/2.2.0/functions-deploying/index.html
+++ b/content/docs/zh-CN/2.2.0/functions-deploying/index.html
@@ -131,13 +131,13 @@
   --inputs persistent://public/default/input-1 \
   --output persistent://public/default/output-1
 </code></pre>
-<p>By default, the function will connect to a Pulsar cluster running on the same machine, via a local <a href="/docs/zh-CN/2.2.0/reference-terminology#broker">broker</a> service URL of <code>pulsar://localhost:6650</code>. 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 这里有一个示例:</p>
+<p>By default, the function will connect to a Pulsar cluster running on the same machine, via a local <a href="/docs/zh-CN/2.2.0/reference-terminology#broker">broker</a> service URL of <code>pulsar://localhost:6650</code>. 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> localrun \
   --broker-service-url pulsar://my-cluster-host:6650 \
   <span class="hljs-comment"># Other function parameters</span>
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="cluster-mode"></a><a href="#cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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 Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.2.0/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 这里有一个示例:</p>
+<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.2.0/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --py myfunc.py \
   --classname myfunc.SomeFunction \
@@ -154,7 +154,7 @@
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="parallelism"></a><a href="#parallelism" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-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>Pulsar Functions run as processes called <strong>instances</strong>. When you run a Pulsar Function, it runs as a single instance by default (and in <a href="#local-run-mode">local run mode</a> you can <em>only</em> run a single instance of a function).</p>
-<p>You can also specify the <em>parallelism</em> of a function, i.e. the number of instances to run, when you create the function. You can set the parallelism factor using the <code>--parallelism</code> flag of the <a href="/docs/zh-CN/2.2.0/pulsar-admin#functions-create"><code>create</code></a> command. 这里有一个示例:</p>
+<p>You can also specify the <em>parallelism</em> of a function, i.e. the number of instances to run, when you create the function. You can set the parallelism factor using the <code>--parallelism</code> flag of the <a href="/docs/zh-CN/2.2.0/pulsar-admin#functions-create"><code>create</code></a> command. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --parallelism 3 \
   <span class="hljs-comment"># Other function info</span>
diff --git a/content/docs/zh-CN/2.2.0/functions-overview.html b/content/docs/zh-CN/2.2.0/functions-overview.html
index 3cd5971..553d02d 100644
--- a/content/docs/zh-CN/2.2.0/functions-overview.html
+++ b/content/docs/zh-CN/2.2.0/functions-overview.html
@@ -297,13 +297,13 @@
   --inputs persistent://public/default/input-1 \
   --output persistent://public/default/output-1
 </code></pre>
-<p>默认情况下,函数连接到同一机器上运行的 Pulsar 集群通过本地的broker服务,URL是 <code>pulsar://localhost:6650</code>。 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 这里有一个示例:</p>
+<p>默认情况下,函数连接到同一机器上运行的 Pulsar 集群通过本地的broker服务,URL是 <code>pulsar://localhost:6650</code>。 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> localrun \
   --broker-service-url pulsar://my-cluster-host:6650 \
   <span class="hljs-comment"># Other function parameters</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="cluster-run-mode"></a><a href="#cluster-run-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
-<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.2.0/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 这里有一个示例:</p>
+<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.2.0/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --py myfunc.py \
   --classname myfunc.SomeFunction \
diff --git a/content/docs/zh-CN/2.2.0/functions-overview/index.html b/content/docs/zh-CN/2.2.0/functions-overview/index.html
index 3cd5971..553d02d 100644
--- a/content/docs/zh-CN/2.2.0/functions-overview/index.html
+++ b/content/docs/zh-CN/2.2.0/functions-overview/index.html
@@ -297,13 +297,13 @@
   --inputs persistent://public/default/input-1 \
   --output persistent://public/default/output-1
 </code></pre>
-<p>默认情况下,函数连接到同一机器上运行的 Pulsar 集群通过本地的broker服务,URL是 <code>pulsar://localhost:6650</code>。 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 这里有一个示例:</p>
+<p>默认情况下,函数连接到同一机器上运行的 Pulsar 集群通过本地的broker服务,URL是 <code>pulsar://localhost:6650</code>。 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> localrun \
   --broker-service-url pulsar://my-cluster-host:6650 \
   <span class="hljs-comment"># Other function parameters</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="cluster-run-mode"></a><a href="#cluster-run-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
-<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.2.0/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 这里有一个示例:</p>
+<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.2.0/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --py myfunc.py \
   --classname myfunc.SomeFunction \
diff --git a/content/docs/zh-CN/2.2.0/functions-quickstart.html b/content/docs/zh-CN/2.2.0/functions-quickstart.html
index 2472324..25891f3 100644
--- a/content/docs/zh-CN/2.2.0/functions-quickstart.html
+++ b/content/docs/zh-CN/2.2.0/functions-quickstart.html
@@ -250,7 +250,7 @@ $ touch <span class="hljs-built_in">reverse</span>.py
   --namespace default \
   --name reverse
 </code></pre>
-<p>If you see <code>Created successfully</code>, the function is ready to accept incoming messages. Because the function is running in cluster mode, we can <strong>trigger</strong> the function using the <a href="/docs/zh-CN/2.2.0/pulsar-admin#trigger"><code>trigger</code></a> command. This command will send a message that we specify to the function and also give us the function's output. 这里有一个示例:</p>
+<p>If you see <code>Created successfully</code>, the function is ready to accept incoming messages. Because the function is running in cluster mode, we can <strong>trigger</strong> the function using the <a href="/docs/zh-CN/2.2.0/pulsar-admin#trigger"><code>trigger</code></a> command. This command will send a message that we specify to the function and also give us the function's output. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger \
   --name reverse \
   --tenant public \
diff --git a/content/docs/zh-CN/2.2.0/functions-quickstart/index.html b/content/docs/zh-CN/2.2.0/functions-quickstart/index.html
index 2472324..25891f3 100644
--- a/content/docs/zh-CN/2.2.0/functions-quickstart/index.html
+++ b/content/docs/zh-CN/2.2.0/functions-quickstart/index.html
@@ -250,7 +250,7 @@ $ touch <span class="hljs-built_in">reverse</span>.py
   --namespace default \
   --name reverse
 </code></pre>
-<p>If you see <code>Created successfully</code>, the function is ready to accept incoming messages. Because the function is running in cluster mode, we can <strong>trigger</strong> the function using the <a href="/docs/zh-CN/2.2.0/pulsar-admin#trigger"><code>trigger</code></a> command. This command will send a message that we specify to the function and also give us the function's output. 这里有一个示例:</p>
+<p>If you see <code>Created successfully</code>, the function is ready to accept incoming messages. Because the function is running in cluster mode, we can <strong>trigger</strong> the function using the <a href="/docs/zh-CN/2.2.0/pulsar-admin#trigger"><code>trigger</code></a> command. This command will send a message that we specify to the function and also give us the function's output. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger \
   --name reverse \
   --tenant public \
diff --git a/content/docs/zh-CN/2.2.0/standalone.html b/content/docs/zh-CN/2.2.0/standalone.html
index 1b5eb2f..0f55b10 100644
--- a/content/docs/zh-CN/2.2.0/standalone.html
+++ b/content/docs/zh-CN/2.2.0/standalone.html
@@ -163,7 +163,7 @@ pulsar-io-twitter-2.3.0.nar
 <ul>
 <li><p>通过单击下面的链接并从 Apache 镜像下载该版本:</p>
 <ul>
-<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-offloaders-2.3.0-bin.tar.gz" download>Pulsar Tiered Storage Offloaders 2.3.0 release</a></li>
+<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-offloaders-2.3.0-bin.tar.gz" download>Pulsar 分层存储下载器 2.3.0 版本</a></li>
 </ul></li>
 <li><p>从Pulsar <a href="/download">下载页</a></p></li>
 <li><p>from the Pulsar <a href="https://github.com/apache/pulsar/releases/latest">releases page</a></p></li>
@@ -182,7 +182,7 @@ $ mv apache-pulsar-offloaders-2.3.0/offloaders offloaders
 $ ls offloaders
 tiered-storage-jcloud-2.3.0.nar
 </code></pre>
-<p>有关如何配置分层存储功能的更多详细信息,可以参考此<a href="/docs/zh-CN/2.2.0/cookbooks-tiered-storage">分层存储手册</a></p>
+<p>有关如何配置分层存储功能的更多详细信息,参考<a href="/docs/zh-CN/2.2.0/cookbooks-tiered-storage">分层存储手册</a>。</p>
 <blockquote>
 <h4><a class="anchor" aria-hidden="true" id="注意-1"></a><a href="#注意-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <p>If you are running Pulsar in a bare metal cluster, you need to make sure <code>offloaders</code> tarball is unzipped in every broker's pulsar directory</p>
diff --git a/content/docs/zh-CN/2.2.0/standalone/index.html b/content/docs/zh-CN/2.2.0/standalone/index.html
index 1b5eb2f..0f55b10 100644
--- a/content/docs/zh-CN/2.2.0/standalone/index.html
+++ b/content/docs/zh-CN/2.2.0/standalone/index.html
@@ -163,7 +163,7 @@ pulsar-io-twitter-2.3.0.nar
 <ul>
 <li><p>通过单击下面的链接并从 Apache 镜像下载该版本:</p>
 <ul>
-<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-offloaders-2.3.0-bin.tar.gz" download>Pulsar Tiered Storage Offloaders 2.3.0 release</a></li>
+<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-offloaders-2.3.0-bin.tar.gz" download>Pulsar 分层存储下载器 2.3.0 版本</a></li>
 </ul></li>
 <li><p>从Pulsar <a href="/download">下载页</a></p></li>
 <li><p>from the Pulsar <a href="https://github.com/apache/pulsar/releases/latest">releases page</a></p></li>
@@ -182,7 +182,7 @@ $ mv apache-pulsar-offloaders-2.3.0/offloaders offloaders
 $ ls offloaders
 tiered-storage-jcloud-2.3.0.nar
 </code></pre>
-<p>有关如何配置分层存储功能的更多详细信息,可以参考此<a href="/docs/zh-CN/2.2.0/cookbooks-tiered-storage">分层存储手册</a></p>
+<p>有关如何配置分层存储功能的更多详细信息,参考<a href="/docs/zh-CN/2.2.0/cookbooks-tiered-storage">分层存储手册</a>。</p>
 <blockquote>
 <h4><a class="anchor" aria-hidden="true" id="注意-1"></a><a href="#注意-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <p>If you are running Pulsar in a bare metal cluster, you need to make sure <code>offloaders</code> tarball is unzipped in every broker's pulsar directory</p>
diff --git a/content/docs/zh-CN/2.2.1/admin-api-partitioned-topics.html b/content/docs/zh-CN/2.2.1/admin-api-partitioned-topics.html
index 3f74409..568f464 100644
--- a/content/docs/zh-CN/2.2.1/admin-api-partitioned-topics.html
+++ b/content/docs/zh-CN/2.2.1/admin-api-partitioned-topics.html
@@ -78,7 +78,7 @@
 <h3><a class="anchor" aria-hidden="true" id="创建"></a><a href="#创建" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c [...]
 <p>在 Pulsar 中, 必须显式的创建分区主题。创建新的分区主题时,您需要提供主题的名称以及所需的分区的数量。</p>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-admin"></a><a href="#pulsar-admin" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>你可以使用<a href="/docs/zh-CN/2.2.1/pulsar-admin#create-partitioned-topic"><code>create-partitioned-topic</code></a>命令创建partitioned topic,并指定topic的名字;使用<code>-p</code> 或 <code>--partitions</code>标志指定分区数。 这里有一个示例:</p>
+<p>你可以使用<a href="/docs/zh-CN/2.2.1/pulsar-admin#create-partitioned-topic"><code>create-partitioned-topic</code></a>命令创建partitioned topic,并指定topic的名字;使用<code>-p</code> 或 <code>--partitions</code>标志指定分区数。 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin topics create-partitioned-topic \</span>
   persistent://my-tenant/my-namespace/my-topic \
   --partitions 4
@@ -102,7 +102,7 @@ admin.persistentTopics().createPartitionedTopic(topicName, numPartitions);
 </tbody>
 </table>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-admin-1"></a><a href="#pulsar-admin-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
-<p>You can see the number of partitions in a partitioned topic using the <a href="/docs/zh-CN/2.2.1/pulsar-admin#get-partitioned-topic-metadata"><code>get-partitioned-topic-metadata</code></a> subcommand. 这里有一个示例:</p>
+<p>You can see the number of partitions in a partitioned topic using the <a href="/docs/zh-CN/2.2.1/pulsar-admin#get-partitioned-topic-metadata"><code>get-partitioned-topic-metadata</code></a> subcommand. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics get-partitioned-topic-metadata \</span>
   persistent://my-tenant/my-namespace/my-topic
 {
diff --git a/content/docs/zh-CN/2.2.1/admin-api-partitioned-topics/index.html b/content/docs/zh-CN/2.2.1/admin-api-partitioned-topics/index.html
index 3f74409..568f464 100644
--- a/content/docs/zh-CN/2.2.1/admin-api-partitioned-topics/index.html
+++ b/content/docs/zh-CN/2.2.1/admin-api-partitioned-topics/index.html
@@ -78,7 +78,7 @@
 <h3><a class="anchor" aria-hidden="true" id="创建"></a><a href="#创建" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c [...]
 <p>在 Pulsar 中, 必须显式的创建分区主题。创建新的分区主题时,您需要提供主题的名称以及所需的分区的数量。</p>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-admin"></a><a href="#pulsar-admin" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>你可以使用<a href="/docs/zh-CN/2.2.1/pulsar-admin#create-partitioned-topic"><code>create-partitioned-topic</code></a>命令创建partitioned topic,并指定topic的名字;使用<code>-p</code> 或 <code>--partitions</code>标志指定分区数。 这里有一个示例:</p>
+<p>你可以使用<a href="/docs/zh-CN/2.2.1/pulsar-admin#create-partitioned-topic"><code>create-partitioned-topic</code></a>命令创建partitioned topic,并指定topic的名字;使用<code>-p</code> 或 <code>--partitions</code>标志指定分区数。 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin topics create-partitioned-topic \</span>
   persistent://my-tenant/my-namespace/my-topic \
   --partitions 4
@@ -102,7 +102,7 @@ admin.persistentTopics().createPartitionedTopic(topicName, numPartitions);
 </tbody>
 </table>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-admin-1"></a><a href="#pulsar-admin-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
-<p>You can see the number of partitions in a partitioned topic using the <a href="/docs/zh-CN/2.2.1/pulsar-admin#get-partitioned-topic-metadata"><code>get-partitioned-topic-metadata</code></a> subcommand. 这里有一个示例:</p>
+<p>You can see the number of partitions in a partitioned topic using the <a href="/docs/zh-CN/2.2.1/pulsar-admin#get-partitioned-topic-metadata"><code>get-partitioned-topic-metadata</code></a> subcommand. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics get-partitioned-topic-metadata \</span>
   persistent://my-tenant/my-namespace/my-topic
 {
diff --git a/content/docs/zh-CN/2.2.1/client-libraries-go.html b/content/docs/zh-CN/2.2.1/client-libraries-go.html
index d42a2f6..f6e9f4e 100644
--- a/content/docs/zh-CN/2.2.1/client-libraries-go.html
+++ b/content/docs/zh-CN/2.2.1/client-libraries-go.html
@@ -104,7 +104,7 @@
 <pre><code class="hljs css language-http">pulsar+ssl://pulsar.us-west.example.com:6651
 </code></pre>
 <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>In order to interact with Pulsar, you'll first need a <code>Client</code> object. You can create a client object using the <code>NewClient</code> function, passing in a <code>ClientOptions</code> object (more on configuration <a href="#client-configuration">below</a>). 这里有一个示例:</p>
+<p>In order to interact with Pulsar, you'll first need a <code>Client</code> object. You can create a client object using the <code>NewClient</code> function, passing in a <code>ClientOptions</code> object (more on configuration <a href="#client-configuration">below</a>). 下面是一个示例:</p>
 <pre><code class="hljs css language-go"><span class="hljs-keyword">import</span> (
     <span class="hljs-string">"log"</span>
     <span class="hljs-string">"runtime"</span>
@@ -143,7 +143,7 @@
 </tbody>
 </table>
 <h2><a class="anchor" aria-hidden="true" id="producers"></a><a href="#producers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>Pulsar producers publish messages to Pulsar topics. You can <a href="#producer-configuration">configure</a> Go producers using a <code>ProducerOptions</code> object. 这里有一个示例:</p>
+<p>Pulsar producers publish messages to Pulsar topics. You can <a href="#producer-configuration">configure</a> Go producers using a <code>ProducerOptions</code> object. 下面是一个示例:</p>
 <pre><code class="hljs css language-go">producer, err := client.CreateProducer(pulsar.ProducerOptions{
     Topic: <span class="hljs-string">"my-topic"</span>,
 })
@@ -358,7 +358,7 @@ consumer, err := client.Subscribe(consumerOpts)
 </tbody>
 </table>
 <h2><a class="anchor" aria-hidden="true" id="readers"></a><a href="#readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
-<p>Pulsar readers process messages from Pulsar topics. Readers are different from consumers because with readers you need to explicitly specify which message in the stream you want to begin with (consumers, on the other hand, automatically begin with the most recent unacked message). You can <a href="#reader-configuration">configure</a> Go readers using a <code>ReaderOptions</code> object. 这里有一个示例:</p>
+<p>Pulsar readers process messages from Pulsar topics. Readers are different from consumers because with readers you need to explicitly specify which message in the stream you want to begin with (consumers, on the other hand, automatically begin with the most recent unacked message). You can <a href="#reader-configuration">configure</a> Go readers using a <code>ReaderOptions</code> object. 下面是一个示例:</p>
 <pre><code class="hljs css language-go">reader, err := client.CreateReader(pulsar.ReaderOptions{
     Topic: <span class="hljs-string">"my-golang-topic"</span>,
     StartMessageId: pulsar.LatestMessage,
@@ -418,7 +418,7 @@ consumer, err := client.Subscribe(consumerOpts)
     }
 }
 </code></pre>
-<p>In the example above, the reader begins reading from the earliest available message (specified by <code>pulsar.EarliestMessage</code>). The reader can also begin reading from the latest message (<code>pulsar.LatestMessage</code>) or some other message ID specified by bytes using the <code>DeserializeMessageID</code> function, which takes a byte array and returns a <code>MessageID</code> object. 这里有一个示例:</p>
+<p>In the example above, the reader begins reading from the earliest available message (specified by <code>pulsar.EarliestMessage</code>). The reader can also begin reading from the latest message (<code>pulsar.LatestMessage</code>) or some other message ID specified by bytes using the <code>DeserializeMessageID</code> function, which takes a byte array and returns a <code>MessageID</code> object. 下面是一个示例:</p>
 <pre><code class="hljs css language-go">lastSavedId := <span class="hljs-comment">// Read last saved message id from external store as byte[]</span>
 
 reader, err := client.CreateReader(pulsar.ReaderOptions{
@@ -476,7 +476,7 @@ reader, err := client.CreateReader(pulsar.ReaderOptions{
 <li>Set <code>TLSTrustCertsFilePath</code> to the path to the TLS certs used by your client and the Pulsar broker</li>
 <li>Configure <code>Authentication</code> option</li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-go">opts := pulsar.ClientOptions{
     URL: <span class="hljs-string">"pulsar+ssl://my-cluster.com:6651"</span>,
     TLSTrustCertsFilePath: <span class="hljs-string">"/path/to/certs/my-cert.csr"</span>,
diff --git a/content/docs/zh-CN/2.2.1/client-libraries-go/index.html b/content/docs/zh-CN/2.2.1/client-libraries-go/index.html
index d42a2f6..f6e9f4e 100644
--- a/content/docs/zh-CN/2.2.1/client-libraries-go/index.html
+++ b/content/docs/zh-CN/2.2.1/client-libraries-go/index.html
@@ -104,7 +104,7 @@
 <pre><code class="hljs css language-http">pulsar+ssl://pulsar.us-west.example.com:6651
 </code></pre>
 <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>In order to interact with Pulsar, you'll first need a <code>Client</code> object. You can create a client object using the <code>NewClient</code> function, passing in a <code>ClientOptions</code> object (more on configuration <a href="#client-configuration">below</a>). 这里有一个示例:</p>
+<p>In order to interact with Pulsar, you'll first need a <code>Client</code> object. You can create a client object using the <code>NewClient</code> function, passing in a <code>ClientOptions</code> object (more on configuration <a href="#client-configuration">below</a>). 下面是一个示例:</p>
 <pre><code class="hljs css language-go"><span class="hljs-keyword">import</span> (
     <span class="hljs-string">"log"</span>
     <span class="hljs-string">"runtime"</span>
@@ -143,7 +143,7 @@
 </tbody>
 </table>
 <h2><a class="anchor" aria-hidden="true" id="producers"></a><a href="#producers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>Pulsar producers publish messages to Pulsar topics. You can <a href="#producer-configuration">configure</a> Go producers using a <code>ProducerOptions</code> object. 这里有一个示例:</p>
+<p>Pulsar producers publish messages to Pulsar topics. You can <a href="#producer-configuration">configure</a> Go producers using a <code>ProducerOptions</code> object. 下面是一个示例:</p>
 <pre><code class="hljs css language-go">producer, err := client.CreateProducer(pulsar.ProducerOptions{
     Topic: <span class="hljs-string">"my-topic"</span>,
 })
@@ -358,7 +358,7 @@ consumer, err := client.Subscribe(consumerOpts)
 </tbody>
 </table>
 <h2><a class="anchor" aria-hidden="true" id="readers"></a><a href="#readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
-<p>Pulsar readers process messages from Pulsar topics. Readers are different from consumers because with readers you need to explicitly specify which message in the stream you want to begin with (consumers, on the other hand, automatically begin with the most recent unacked message). You can <a href="#reader-configuration">configure</a> Go readers using a <code>ReaderOptions</code> object. 这里有一个示例:</p>
+<p>Pulsar readers process messages from Pulsar topics. Readers are different from consumers because with readers you need to explicitly specify which message in the stream you want to begin with (consumers, on the other hand, automatically begin with the most recent unacked message). You can <a href="#reader-configuration">configure</a> Go readers using a <code>ReaderOptions</code> object. 下面是一个示例:</p>
 <pre><code class="hljs css language-go">reader, err := client.CreateReader(pulsar.ReaderOptions{
     Topic: <span class="hljs-string">"my-golang-topic"</span>,
     StartMessageId: pulsar.LatestMessage,
@@ -418,7 +418,7 @@ consumer, err := client.Subscribe(consumerOpts)
     }
 }
 </code></pre>
-<p>In the example above, the reader begins reading from the earliest available message (specified by <code>pulsar.EarliestMessage</code>). The reader can also begin reading from the latest message (<code>pulsar.LatestMessage</code>) or some other message ID specified by bytes using the <code>DeserializeMessageID</code> function, which takes a byte array and returns a <code>MessageID</code> object. 这里有一个示例:</p>
+<p>In the example above, the reader begins reading from the earliest available message (specified by <code>pulsar.EarliestMessage</code>). The reader can also begin reading from the latest message (<code>pulsar.LatestMessage</code>) or some other message ID specified by bytes using the <code>DeserializeMessageID</code> function, which takes a byte array and returns a <code>MessageID</code> object. 下面是一个示例:</p>
 <pre><code class="hljs css language-go">lastSavedId := <span class="hljs-comment">// Read last saved message id from external store as byte[]</span>
 
 reader, err := client.CreateReader(pulsar.ReaderOptions{
@@ -476,7 +476,7 @@ reader, err := client.CreateReader(pulsar.ReaderOptions{
 <li>Set <code>TLSTrustCertsFilePath</code> to the path to the TLS certs used by your client and the Pulsar broker</li>
 <li>Configure <code>Authentication</code> option</li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-go">opts := pulsar.ClientOptions{
     URL: <span class="hljs-string">"pulsar+ssl://my-cluster.com:6651"</span>,
     TLSTrustCertsFilePath: <span class="hljs-string">"/path/to/certs/my-cert.csr"</span>,
diff --git a/content/docs/zh-CN/2.2.1/client-libraries-java.html b/content/docs/zh-CN/2.2.1/client-libraries-java.html
index f6441c7..0a675bc 100644
--- a/content/docs/zh-CN/2.2.1/client-libraries-java.html
+++ b/content/docs/zh-CN/2.2.1/client-libraries-java.html
@@ -167,7 +167,7 @@ client.close();</p>
    })<span class="hljs-comment">;</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="生产者配置"></a><a href="#生产者配置" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
-<p>如果实例化 <code>生产者</code> 对象时仅指定主题topic名称 (如上面的示例所示), 则生产者将使用默认配置。 要使用非默认配置, 你可以设置多种可配置的参数。 有关完整列表, 请参阅 {@inject javadoc:ProducerBuilder:/client/org/apache/pulsar/client/api/ProducerBuilder} 类javadoc文档。 这里有一个示例:</p>
+<p>如果实例化 <code>生产者</code> 对象时仅指定主题topic名称 (如上面的示例所示), 则生产者将使用默认配置。 要使用非默认配置, 你可以设置多种可配置的参数。 有关完整列表, 请参阅 {@inject javadoc:ProducerBuilder:/client/org/apache/pulsar/client/api/ProducerBuilder} 类javadoc文档。 下面是一个示例:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
     .topic(<span class="hljs-string">"my-topic"</span>)
     .batchingMaxPublishDelay(<span class="hljs-number">10</span>, TimeUnit.MILLISECONDS)
@@ -219,7 +219,7 @@ client.close();</p>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="消费者配置"></a><a href="#消费者配置" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
 <p>如果实例化 <code>消费者</code> 对象, 仅指定主题和订阅名称, 如上面的示例所示, 消费者将采用默认配置。 要使用非默认配置, 你可以设置多种可配置的参数。 有关完整列表, 请参阅 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/ConsumerBuilder">ConsumerBuilder</a>
-类javadoc文档。 这里有一个示例:</p>
+类javadoc文档。 下面是一个示例:</p>
 <p>这是一个示例配置:</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
@@ -230,7 +230,7 @@ client.close();</p>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="异步接收"></a><a href="#异步接收" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <p><code>receive</code>方法将异步接受消息(消费者处理器将被阻塞,直到有消息到达)。 你也可以使用<a href="concepts-messaging.md#receive-modes">异步接收方法</a>,这将在一个新消息到达时立即返回一个<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>对象。</p>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>异步接收操作返回一个包装在<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>中的{@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message}消息对象。</p>
@@ -279,7 +279,7 @@ Consumer multiTopicConsumer = consumerBuilder
         )
         .subscribe();
 </code></pre>
-<p>You can also subscribe to multiple topics asynchronously using the <code>subscribeAsync</code> method rather than the synchronous <code>subscribe</code> method. 这里有一个示例:</p>
+<p>You can also subscribe to multiple topics asynchronously using the <code>subscribeAsync</code> method rather than the synchronous <code>subscribe</code> method. 下面是一个示例:</p>
 <pre><code class="hljs css language-java">Pattern allTopicsInNamespace = Pattern.compile(<span class="hljs-string">"persistent://public/default.*"</span>);
 consumerBuilder
         .topics(topics)
@@ -300,7 +300,7 @@ consumerBuilder
 和 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 /api/ReaderConfiguration}来创建<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 。</p>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">ReaderConfiguration conf = <span class="hljs-keyword">new</span> ReaderConfiguration();
 <span class="hljs-keyword">byte</span>[] msgIdBytes = <span class="hljs-comment">// 一些消息ID 的字节数组</span>
 MessageId id = MessageId.fromByteArray(msgIdBytes);
@@ -317,7 +317,7 @@ Reader reader = pulsarClient.newReader()
 <p>在上面的示例中,实例化一个<code>Reader</code>对象对指定的主题和消息(ID); reader将遍历主题中<code>msgIdBytes</code>(取值方式取决于应用程序) 之后的消息。</p>
 <p>上面的示例代码展示了<code>Reader</code>对象指向特定的消息(ID),但你也可以使用<code>MessageId.earliest</code>来指向topic上最早可用的消息,使用<code>MessageId.latest</code>指向最新的消息。</p>
 <h2><a class="anchor" aria-hidden="true" id="schema"></a><a href="#schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="concepts-schema-registry.md">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 这里有一个示例:</p>
+<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="concepts-schema-registry.md">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 下面是一个示例:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
@@ -367,7 +367,7 @@ Reader reader = pulsarClient.newReader()
     .topic(<span class="hljs-string">"some-string-topic"</span>)
     .create();
 </code></pre></li>
-<li><p>JSON schemas can be created for POJOs using the <code>JSONSchema</code> class. 这里有一个示例:</p>
+<li><p>JSON schemas can be created for POJOs using the <code>JSONSchema</code> class. 下面是一个示例:</p>
 <pre><code class="hljs css language-java">Schema&lt;MyPojo&gt; pojoSchema = JSONSchema.of(MyPojo.class);
 Producer&lt;MyPojo&gt; pojoProducer = client.newProducer(pojoSchema)
     .topic(<span class="hljs-string">"some-pojo-topic"</span>)
diff --git a/content/docs/zh-CN/2.2.1/client-libraries-java/index.html b/content/docs/zh-CN/2.2.1/client-libraries-java/index.html
index f6441c7..0a675bc 100644
--- a/content/docs/zh-CN/2.2.1/client-libraries-java/index.html
+++ b/content/docs/zh-CN/2.2.1/client-libraries-java/index.html
@@ -167,7 +167,7 @@ client.close();</p>
    })<span class="hljs-comment">;</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="生产者配置"></a><a href="#生产者配置" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
-<p>如果实例化 <code>生产者</code> 对象时仅指定主题topic名称 (如上面的示例所示), 则生产者将使用默认配置。 要使用非默认配置, 你可以设置多种可配置的参数。 有关完整列表, 请参阅 {@inject javadoc:ProducerBuilder:/client/org/apache/pulsar/client/api/ProducerBuilder} 类javadoc文档。 这里有一个示例:</p>
+<p>如果实例化 <code>生产者</code> 对象时仅指定主题topic名称 (如上面的示例所示), 则生产者将使用默认配置。 要使用非默认配置, 你可以设置多种可配置的参数。 有关完整列表, 请参阅 {@inject javadoc:ProducerBuilder:/client/org/apache/pulsar/client/api/ProducerBuilder} 类javadoc文档。 下面是一个示例:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
     .topic(<span class="hljs-string">"my-topic"</span>)
     .batchingMaxPublishDelay(<span class="hljs-number">10</span>, TimeUnit.MILLISECONDS)
@@ -219,7 +219,7 @@ client.close();</p>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="消费者配置"></a><a href="#消费者配置" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
 <p>如果实例化 <code>消费者</code> 对象, 仅指定主题和订阅名称, 如上面的示例所示, 消费者将采用默认配置。 要使用非默认配置, 你可以设置多种可配置的参数。 有关完整列表, 请参阅 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/ConsumerBuilder">ConsumerBuilder</a>
-类javadoc文档。 这里有一个示例:</p>
+类javadoc文档。 下面是一个示例:</p>
 <p>这是一个示例配置:</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
@@ -230,7 +230,7 @@ client.close();</p>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="异步接收"></a><a href="#异步接收" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <p><code>receive</code>方法将异步接受消息(消费者处理器将被阻塞,直到有消息到达)。 你也可以使用<a href="concepts-messaging.md#receive-modes">异步接收方法</a>,这将在一个新消息到达时立即返回一个<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>对象。</p>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>异步接收操作返回一个包装在<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>中的{@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message}消息对象。</p>
@@ -279,7 +279,7 @@ Consumer multiTopicConsumer = consumerBuilder
         )
         .subscribe();
 </code></pre>
-<p>You can also subscribe to multiple topics asynchronously using the <code>subscribeAsync</code> method rather than the synchronous <code>subscribe</code> method. 这里有一个示例:</p>
+<p>You can also subscribe to multiple topics asynchronously using the <code>subscribeAsync</code> method rather than the synchronous <code>subscribe</code> method. 下面是一个示例:</p>
 <pre><code class="hljs css language-java">Pattern allTopicsInNamespace = Pattern.compile(<span class="hljs-string">"persistent://public/default.*"</span>);
 consumerBuilder
         .topics(topics)
@@ -300,7 +300,7 @@ consumerBuilder
 和 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 /api/ReaderConfiguration}来创建<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 。</p>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">ReaderConfiguration conf = <span class="hljs-keyword">new</span> ReaderConfiguration();
 <span class="hljs-keyword">byte</span>[] msgIdBytes = <span class="hljs-comment">// 一些消息ID 的字节数组</span>
 MessageId id = MessageId.fromByteArray(msgIdBytes);
@@ -317,7 +317,7 @@ Reader reader = pulsarClient.newReader()
 <p>在上面的示例中,实例化一个<code>Reader</code>对象对指定的主题和消息(ID); reader将遍历主题中<code>msgIdBytes</code>(取值方式取决于应用程序) 之后的消息。</p>
 <p>上面的示例代码展示了<code>Reader</code>对象指向特定的消息(ID),但你也可以使用<code>MessageId.earliest</code>来指向topic上最早可用的消息,使用<code>MessageId.latest</code>指向最新的消息。</p>
 <h2><a class="anchor" aria-hidden="true" id="schema"></a><a href="#schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="concepts-schema-registry.md">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 这里有一个示例:</p>
+<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="concepts-schema-registry.md">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 下面是一个示例:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
@@ -367,7 +367,7 @@ Reader reader = pulsarClient.newReader()
     .topic(<span class="hljs-string">"some-string-topic"</span>)
     .create();
 </code></pre></li>
-<li><p>JSON schemas can be created for POJOs using the <code>JSONSchema</code> class. 这里有一个示例:</p>
+<li><p>JSON schemas can be created for POJOs using the <code>JSONSchema</code> class. 下面是一个示例:</p>
 <pre><code class="hljs css language-java">Schema&lt;MyPojo&gt; pojoSchema = JSONSchema.of(MyPojo.class);
 Producer&lt;MyPojo&gt; pojoProducer = client.newProducer(pojoSchema)
     .topic(<span class="hljs-string">"some-pojo-topic"</span>)
diff --git a/content/docs/zh-CN/2.2.1/client-libraries-websocket.html b/content/docs/zh-CN/2.2.1/client-libraries-websocket.html
index f8f8167..349a04b 100644
--- a/content/docs/zh-CN/2.2.1/client-libraries-websocket.html
+++ b/content/docs/zh-CN/2.2.1/client-libraries-websocket.html
@@ -92,7 +92,7 @@
 <li><a href="/docs/zh-CN/2.2.1/reference-configuration#websocket-webServicePort"><code>webServicePort</code></a></li>
 <li><a href="/docs/zh-CN/2.2.1/reference-configuration#websocket-clusterName"><code>clusterName</code></a></li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1:2181,zk2:2181,zk3:2181</span>
 <span class="hljs-attr">webServicePort</span>=<span class="hljs-string">8080</span>
 <span class="hljs-attr">clusterName</span>=<span class="hljs-string">my-cluster</span>
diff --git a/content/docs/zh-CN/2.2.1/client-libraries-websocket/index.html b/content/docs/zh-CN/2.2.1/client-libraries-websocket/index.html
index f8f8167..349a04b 100644
--- a/content/docs/zh-CN/2.2.1/client-libraries-websocket/index.html
+++ b/content/docs/zh-CN/2.2.1/client-libraries-websocket/index.html
@@ -92,7 +92,7 @@
 <li><a href="/docs/zh-CN/2.2.1/reference-configuration#websocket-webServicePort"><code>webServicePort</code></a></li>
 <li><a href="/docs/zh-CN/2.2.1/reference-configuration#websocket-clusterName"><code>clusterName</code></a></li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1:2181,zk2:2181,zk3:2181</span>
 <span class="hljs-attr">webServicePort</span>=<span class="hljs-string">8080</span>
 <span class="hljs-attr">clusterName</span>=<span class="hljs-string">my-cluster</span>
diff --git a/content/docs/zh-CN/2.2.1/concepts-architecture-overview.html b/content/docs/zh-CN/2.2.1/concepts-architecture-overview.html
index 06b5436..9b88b12 100644
--- a/content/docs/zh-CN/2.2.1/concepts-architecture-overview.html
+++ b/content/docs/zh-CN/2.2.1/concepts-architecture-overview.html
@@ -155,7 +155,7 @@
 <blockquote>
 <p>为了性能和容错,你可以运行任意个Pulsar proxy。</p>
 </blockquote>
-<p>架构上来看,Pulsar Proxy从ZooKeeper上面读取他所需要的所有信息。 当启动代理时,你只需要提供用于集群独有和实例范围的配置存储的ZooKeeper连接串。 这里有一个示例:</p>
+<p>架构上来看,Pulsar Proxy从ZooKeeper上面读取他所需要的所有信息。 当启动代理时,你只需要提供用于集群独有和实例范围的配置存储的ZooKeeper连接串。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar proxy \
   --zookeeper-servers zk-0,zk-1,zk-2 \
   --configuration-store-servers zk-0,zk-1,zk-2
diff --git a/content/docs/zh-CN/2.2.1/concepts-architecture-overview/index.html b/content/docs/zh-CN/2.2.1/concepts-architecture-overview/index.html
index 06b5436..9b88b12 100644
--- a/content/docs/zh-CN/2.2.1/concepts-architecture-overview/index.html
+++ b/content/docs/zh-CN/2.2.1/concepts-architecture-overview/index.html
@@ -155,7 +155,7 @@
 <blockquote>
 <p>为了性能和容错,你可以运行任意个Pulsar proxy。</p>
 </blockquote>
-<p>架构上来看,Pulsar Proxy从ZooKeeper上面读取他所需要的所有信息。 当启动代理时,你只需要提供用于集群独有和实例范围的配置存储的ZooKeeper连接串。 这里有一个示例:</p>
+<p>架构上来看,Pulsar Proxy从ZooKeeper上面读取他所需要的所有信息。 当启动代理时,你只需要提供用于集群独有和实例范围的配置存储的ZooKeeper连接串。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar proxy \
   --zookeeper-servers zk-0,zk-1,zk-2 \
   --configuration-store-servers zk-0,zk-1,zk-2
diff --git a/content/docs/zh-CN/2.2.1/concepts-messaging.html b/content/docs/zh-CN/2.2.1/concepts-messaging.html
index 390ea82..529b293 100644
--- a/content/docs/zh-CN/2.2.1/concepts-messaging.html
+++ b/content/docs/zh-CN/2.2.1/concepts-messaging.html
@@ -281,7 +281,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <p>这里还有一个非持久topic的<a href="client-libraries-java.md#producer">java producer</a>例子:</p>
 <pre><code class="hljs css language-java">Producer producer = client.createProducer(npTopic);
 </code></pre>
-<h2><a class="anchor" aria-hidden="true" id="message-retention-and-expiry"></a><a href="#message-retention-and-expiry" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
+<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>Pulsar broker默认如下:</p>
 <ul>
 <li>立即删除<em>所有</em>已经被cunsumer确认过的的消息</li>
@@ -296,7 +296,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <p>所有消息存留和过期在<a href="#namespaces">namespace</a>层面管理。具体操作请查看 <a href="cookbooks-retention-expiry.md">Message retention and expiry</a></p>
 </blockquote>
 <p>下图说明了这两种概念:</p>
-<p><img src="assets/retention-expiry.png" alt="Message retention and expiry"></p>
+<p><img src="assets/retention-expiry.png" alt="消息保留和到期"></p>
 <p>图中上面的是消息存留,<span style="color: #89b557;">存留规则</span>会被用于某namespace下所有的topic,指明哪些消息会被持久存储,即使已经被确认过。 没有被留存规则覆盖的消息将会被<span style="color: #bb3b3e;">删除</span>。 没有留存规则的话,<em>所有</em>被<span style="color: #19967d;">确认</span>的消息都会被删除。</p>
 <p>图中下面的是消息过期,有些消息即使还<span style="color: #337db6;">没有被确认</span>,也被<span style="color: #bb3b3e;">删除</span>掉了。因为根据设置在<span style="color: #e39441;">namespace上的TTL</span>,他们已经过期了。(例如,TTL为5分钟,过了十分钟消息还没被确认)</p>
 <h2><a class="anchor" aria-hidden="true" id="message-deduplication"></a><a href="#message-deduplication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
@@ -315,7 +315,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <blockquote>
 <p>更深入的信息可以参考 <a href="https://streaml.io/blog">Streamlio blog</a>上的<a href="https://streaml.io/blog/pulsar-effectively-once/">此篇博文</a></p>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/concepts-overview"><span class="arrow-prev">← </span><span>概述</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/concepts-architecture-overview"><span>Architecture</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#messages">Messages</a></li><li><a href="#producers">Producers</a><ul class="toc-headi [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/concepts-overview"><span class="arrow-prev">← </span><span>概述</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/concepts-architecture-overview"><span>Architecture</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#messages">Messages</a></li><li><a href="#producers">Producers</a><ul class="toc-headi [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.2.1/concepts-messaging/index.html b/content/docs/zh-CN/2.2.1/concepts-messaging/index.html
index 390ea82..529b293 100644
--- a/content/docs/zh-CN/2.2.1/concepts-messaging/index.html
+++ b/content/docs/zh-CN/2.2.1/concepts-messaging/index.html
@@ -281,7 +281,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <p>这里还有一个非持久topic的<a href="client-libraries-java.md#producer">java producer</a>例子:</p>
 <pre><code class="hljs css language-java">Producer producer = client.createProducer(npTopic);
 </code></pre>
-<h2><a class="anchor" aria-hidden="true" id="message-retention-and-expiry"></a><a href="#message-retention-and-expiry" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
+<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>Pulsar broker默认如下:</p>
 <ul>
 <li>立即删除<em>所有</em>已经被cunsumer确认过的的消息</li>
@@ -296,7 +296,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <p>所有消息存留和过期在<a href="#namespaces">namespace</a>层面管理。具体操作请查看 <a href="cookbooks-retention-expiry.md">Message retention and expiry</a></p>
 </blockquote>
 <p>下图说明了这两种概念:</p>
-<p><img src="assets/retention-expiry.png" alt="Message retention and expiry"></p>
+<p><img src="assets/retention-expiry.png" alt="消息保留和到期"></p>
 <p>图中上面的是消息存留,<span style="color: #89b557;">存留规则</span>会被用于某namespace下所有的topic,指明哪些消息会被持久存储,即使已经被确认过。 没有被留存规则覆盖的消息将会被<span style="color: #bb3b3e;">删除</span>。 没有留存规则的话,<em>所有</em>被<span style="color: #19967d;">确认</span>的消息都会被删除。</p>
 <p>图中下面的是消息过期,有些消息即使还<span style="color: #337db6;">没有被确认</span>,也被<span style="color: #bb3b3e;">删除</span>掉了。因为根据设置在<span style="color: #e39441;">namespace上的TTL</span>,他们已经过期了。(例如,TTL为5分钟,过了十分钟消息还没被确认)</p>
 <h2><a class="anchor" aria-hidden="true" id="message-deduplication"></a><a href="#message-deduplication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
@@ -315,7 +315,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <blockquote>
 <p>更深入的信息可以参考 <a href="https://streaml.io/blog">Streamlio blog</a>上的<a href="https://streaml.io/blog/pulsar-effectively-once/">此篇博文</a></p>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/concepts-overview"><span class="arrow-prev">← </span><span>概述</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/concepts-architecture-overview"><span>Architecture</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#messages">Messages</a></li><li><a href="#producers">Producers</a><ul class="toc-headi [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/concepts-overview"><span class="arrow-prev">← </span><span>概述</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/concepts-architecture-overview"><span>Architecture</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#messages">Messages</a></li><li><a href="#producers">Producers</a><ul class="toc-headi [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.2.1/cookbooks-compaction.html b/content/docs/zh-CN/2.2.1/cookbooks-compaction.html
index 8191f17..9d4c84c 100644
--- a/content/docs/zh-CN/2.2.1/cookbooks-compaction.html
+++ b/content/docs/zh-CN/2.2.1/cookbooks-compaction.html
@@ -98,12 +98,12 @@
 </code></pre>
 <p>Configuring the compaction threshold on a namespace will apply to all topics within that namespace.</p>
 <h2><a class="anchor" aria-hidden="true" id="triggering-compaction-manually-trigger"></a><a href="#triggering-compaction-manually-trigger" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1. [...]
-<p>In order to run compaction on a topic, you need to use the <a href="/docs/zh-CN/2.2.1/pulsar-admin#topics-compact"><code>topics compact</code></a> command for the <a href="/docs/zh-CN/2.2.1/pulsar-admin"><code>pulsar-admin</code></a> CLI tool. 这里有一个示例:</p>
+<p>In order to run compaction on a topic, you need to use the <a href="/docs/zh-CN/2.2.1/pulsar-admin#topics-compact"><code>topics compact</code></a> command for the <a href="/docs/zh-CN/2.2.1/pulsar-admin"><code>pulsar-admin</code></a> CLI tool. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin topics compact \
   persistent://my-tenant/my-namespace/my-topic
 </code></pre>
 <p>The <code>pulsar-admin</code> tool runs compaction via the Pulsar <a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
- API. To run compaction in its own dedicated process, i.e. <em>not</em> through the REST API, you can use the <a href="/docs/zh-CN/2.2.1/reference-cli-tools#pulsar-compact-topic"><code>pulsar compact-topic</code></a> command. 这里有一个示例:</p>
+ API. To run compaction in its own dedicated process, i.e. <em>not</em> through the REST API, you can use the <a href="/docs/zh-CN/2.2.1/reference-cli-tools#pulsar-compact-topic"><code>pulsar compact-topic</code></a> command. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar compact-topic \
   --topic persistent://my-tenant-namespace/my-topic
 </code></pre>
diff --git a/content/docs/zh-CN/2.2.1/cookbooks-compaction/index.html b/content/docs/zh-CN/2.2.1/cookbooks-compaction/index.html
index 8191f17..9d4c84c 100644
--- a/content/docs/zh-CN/2.2.1/cookbooks-compaction/index.html
+++ b/content/docs/zh-CN/2.2.1/cookbooks-compaction/index.html
@@ -98,12 +98,12 @@
 </code></pre>
 <p>Configuring the compaction threshold on a namespace will apply to all topics within that namespace.</p>
 <h2><a class="anchor" aria-hidden="true" id="triggering-compaction-manually-trigger"></a><a href="#triggering-compaction-manually-trigger" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1. [...]
-<p>In order to run compaction on a topic, you need to use the <a href="/docs/zh-CN/2.2.1/pulsar-admin#topics-compact"><code>topics compact</code></a> command for the <a href="/docs/zh-CN/2.2.1/pulsar-admin"><code>pulsar-admin</code></a> CLI tool. 这里有一个示例:</p>
+<p>In order to run compaction on a topic, you need to use the <a href="/docs/zh-CN/2.2.1/pulsar-admin#topics-compact"><code>topics compact</code></a> command for the <a href="/docs/zh-CN/2.2.1/pulsar-admin"><code>pulsar-admin</code></a> CLI tool. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin topics compact \
   persistent://my-tenant/my-namespace/my-topic
 </code></pre>
 <p>The <code>pulsar-admin</code> tool runs compaction via the Pulsar <a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
- API. To run compaction in its own dedicated process, i.e. <em>not</em> through the REST API, you can use the <a href="/docs/zh-CN/2.2.1/reference-cli-tools#pulsar-compact-topic"><code>pulsar compact-topic</code></a> command. 这里有一个示例:</p>
+ API. To run compaction in its own dedicated process, i.e. <em>not</em> through the REST API, you can use the <a href="/docs/zh-CN/2.2.1/reference-cli-tools#pulsar-compact-topic"><code>pulsar compact-topic</code></a> command. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar compact-topic \
   --topic persistent://my-tenant-namespace/my-topic
 </code></pre>
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 34f03e8..90fd2bf 100644
--- a/content/docs/zh-CN/2.2.1/cookbooks-deduplication.html
+++ b/content/docs/zh-CN/2.2.1/cookbooks-deduplication.html
@@ -117,7 +117,7 @@
 </ol>
 <p>Instructions for <a href="#java">Java</a>, <a href="#python">Python</a>, and <a href="#cpp">C++</a> clients can be found below.</p>
 <h3><a class="anchor" aria-hidden="true" id="java-clients-java"></a><a href="#java-clients-java" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
-<p>To enable message deduplication on a <a href="/docs/zh-CN/2.2.1/client-libraries-java#producers">Java producer</a>, set the producer name using the <code>producerName</code> setter and set the timeout to 0 using the <code>sendTimeout</code> setter. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/2.2.1/client-libraries-java#producers">Java producer</a>, set the producer name using the <code>producerName</code> setter and set the timeout to 0 using the <code>sendTimeout</code> setter. 下面是一个示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Producer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 <span class="hljs-keyword">import</span> java.util.concurrent.TimeUnit;
@@ -132,7 +132,7 @@ Producer producer = pulsarClient.newProducer()
         .create();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="python-clients-python"></a><a href="#python-clients-python" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 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>To enable message deduplication on a <a href="/docs/zh-CN/2.2.1/client-libraries-python#producers">Python producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/2.2.1/client-libraries-python#producers">Python producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 下面是一个示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">import</span> pulsar
 
 client = pulsar.Client(<span class="hljs-string">"pulsar://localhost:6650"</span>)
@@ -142,7 +142,7 @@ producer = client.create_producer(
     send_timeout_millis=<span class="hljs-number">0</span>)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-clients-cpp"></a><a href="#c-clients-cpp" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
-<p>To enable message deduplication on a <a href="/docs/zh-CN/2.2.1/client-libraries-cpp#producer">C++ producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/2.2.1/client-libraries-cpp#producer">C++ producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 下面是一个示例:</p>
 <pre><code class="hljs css language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 <span class="hljs-built_in">std</span>::<span class="hljs-built_in">string</span> serviceUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
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 34f03e8..90fd2bf 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
@@ -117,7 +117,7 @@
 </ol>
 <p>Instructions for <a href="#java">Java</a>, <a href="#python">Python</a>, and <a href="#cpp">C++</a> clients can be found below.</p>
 <h3><a class="anchor" aria-hidden="true" id="java-clients-java"></a><a href="#java-clients-java" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
-<p>To enable message deduplication on a <a href="/docs/zh-CN/2.2.1/client-libraries-java#producers">Java producer</a>, set the producer name using the <code>producerName</code> setter and set the timeout to 0 using the <code>sendTimeout</code> setter. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/2.2.1/client-libraries-java#producers">Java producer</a>, set the producer name using the <code>producerName</code> setter and set the timeout to 0 using the <code>sendTimeout</code> setter. 下面是一个示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Producer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 <span class="hljs-keyword">import</span> java.util.concurrent.TimeUnit;
@@ -132,7 +132,7 @@ Producer producer = pulsarClient.newProducer()
         .create();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="python-clients-python"></a><a href="#python-clients-python" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 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>To enable message deduplication on a <a href="/docs/zh-CN/2.2.1/client-libraries-python#producers">Python producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/2.2.1/client-libraries-python#producers">Python producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 下面是一个示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">import</span> pulsar
 
 client = pulsar.Client(<span class="hljs-string">"pulsar://localhost:6650"</span>)
@@ -142,7 +142,7 @@ producer = client.create_producer(
     send_timeout_millis=<span class="hljs-number">0</span>)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-clients-cpp"></a><a href="#c-clients-cpp" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
-<p>To enable message deduplication on a <a href="/docs/zh-CN/2.2.1/client-libraries-cpp#producer">C++ producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/2.2.1/client-libraries-cpp#producer">C++ producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 下面是一个示例:</p>
 <pre><code class="hljs css language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 <span class="hljs-built_in">std</span>::<span class="hljs-built_in">string</span> serviceUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
diff --git a/content/docs/zh-CN/2.2.1/cookbooks-encryption.html b/content/docs/zh-CN/2.2.1/cookbooks-encryption.html
index a1876b2..699112c 100644
--- a/content/docs/zh-CN/2.2.1/cookbooks-encryption.html
+++ b/content/docs/zh-CN/2.2.1/cookbooks-encryption.html
@@ -221,7 +221,7 @@ conf.addEncryptionKey(<span class="hljs-string">"myapp.messagekey2"</span>);
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/cookbooks-retention-expiry"><span class="arrow-prev">← </span><span>Message retention and expiry</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/cookbooks-message-queue"><span>Message queue</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symm [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/cookbooks-retention-expiry"><span class="arrow-prev">← </span><span>消息保留和到期</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/cookbooks-message-queue"><span>Message queue</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a>< [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.2.1/cookbooks-encryption/index.html b/content/docs/zh-CN/2.2.1/cookbooks-encryption/index.html
index a1876b2..699112c 100644
--- a/content/docs/zh-CN/2.2.1/cookbooks-encryption/index.html
+++ b/content/docs/zh-CN/2.2.1/cookbooks-encryption/index.html
@@ -221,7 +221,7 @@ conf.addEncryptionKey(<span class="hljs-string">"myapp.messagekey2"</span>);
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/cookbooks-retention-expiry"><span class="arrow-prev">← </span><span>Message retention and expiry</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/cookbooks-message-queue"><span>Message queue</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symm [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/cookbooks-retention-expiry"><span class="arrow-prev">← </span><span>消息保留和到期</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/cookbooks-message-queue"><span>Message queue</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a>< [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.2.1/cookbooks-non-persistent.html b/content/docs/zh-CN/2.2.1/cookbooks-non-persistent.html
index 7d5ea2c..c80bed7 100644
--- a/content/docs/zh-CN/2.2.1/cookbooks-non-persistent.html
+++ b/content/docs/zh-CN/2.2.1/cookbooks-non-persistent.html
@@ -108,7 +108,7 @@
 <p>可以使用<a href="/docs/zh-CN/2.2.1/pulsar-admin#non-persistent"> <code>pulsar-admin non-persistent</code> </a>命令行管理非持久性主题。 使用命令行工具,你可以执行诸如<a href="/docs/zh-CN/2.2.1/pulsar-admin#non-persistent-create-partitioned-topic">创建分区非持久性主题</a>,获取非持久主题的<a href="/docs/zh-CN/2.2.1/pulsar-admin#non-persistent-stats">统计信息</a>,获取命名空间下的非持久主题<a href="/docs/zh-CN/2.2.1/pulsar-admin">列表</a>等操作。</p>
 <h2><a class="anchor" aria-hidden="true" id="与pulsar客户端一起使用"></a><a href="#与pulsar客户端一起使用" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>除了确保使用具有<code>非持久性</code>的正确<a href="#using">主题名称</a>作为主题类型之外,你不应该对 Pulsar 客户端进行任何更改以使用非持久性消息传递。</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/cookbooks-deduplication"><span class="arrow-prev">← </span><span>Message deduplication</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/cookbooks-partitioned"><span>分区Topic</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="#使用">使用</a></li><li><a href="#启用">启用</a></li>< [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/cookbooks-deduplication"><span class="arrow-prev">← </span><span>Message deduplication</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/cookbooks-partitioned"><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="#使用">使用</a></li><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.2.1/cookbooks-non-persistent/index.html b/content/docs/zh-CN/2.2.1/cookbooks-non-persistent/index.html
index 7d5ea2c..c80bed7 100644
--- a/content/docs/zh-CN/2.2.1/cookbooks-non-persistent/index.html
+++ b/content/docs/zh-CN/2.2.1/cookbooks-non-persistent/index.html
@@ -108,7 +108,7 @@
 <p>可以使用<a href="/docs/zh-CN/2.2.1/pulsar-admin#non-persistent"> <code>pulsar-admin non-persistent</code> </a>命令行管理非持久性主题。 使用命令行工具,你可以执行诸如<a href="/docs/zh-CN/2.2.1/pulsar-admin#non-persistent-create-partitioned-topic">创建分区非持久性主题</a>,获取非持久主题的<a href="/docs/zh-CN/2.2.1/pulsar-admin#non-persistent-stats">统计信息</a>,获取命名空间下的非持久主题<a href="/docs/zh-CN/2.2.1/pulsar-admin">列表</a>等操作。</p>
 <h2><a class="anchor" aria-hidden="true" id="与pulsar客户端一起使用"></a><a href="#与pulsar客户端一起使用" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>除了确保使用具有<code>非持久性</code>的正确<a href="#using">主题名称</a>作为主题类型之外,你不应该对 Pulsar 客户端进行任何更改以使用非持久性消息传递。</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/cookbooks-deduplication"><span class="arrow-prev">← </span><span>Message deduplication</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/cookbooks-partitioned"><span>分区Topic</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="#使用">使用</a></li><li><a href="#启用">启用</a></li>< [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/cookbooks-deduplication"><span class="arrow-prev">← </span><span>Message deduplication</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/cookbooks-partitioned"><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="#使用">使用</a></li><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.2.1/cookbooks-partitioned.html b/content/docs/zh-CN/2.2.1/cookbooks-partitioned.html
index 10619dd..e5c3787 100644
--- a/content/docs/zh-CN/2.2.1/cookbooks-partitioned.html
+++ b/content/docs/zh-CN/2.2.1/cookbooks-partitioned.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Non-persistent messaging · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作的说明,请参见 &lt;a href=&quot;/docs/zh-C [...]
-"/><meta name="docsearch:version" content="2.2.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Non-persistent messaging · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作的说明 [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Non-persistent messaging · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作,请参见 &lt;a href=&quot;/docs/zh-CN/2.2.1/ [...]
+"/><meta name="docsearch:version" content="2.2.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Non-persistent messaging · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作,请参见 &lt [...]
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -70,12 +70,12 @@
                 };
               }
             });
-        </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">Non-persistent messaging</h1></header><article><div><span><p>默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 <em>分区Topic</em>是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主 [...]
+        </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">Non-persistent messaging</h1></header><article><div><span><p>默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 <em>分区Topic</em>是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作 [...]
 <p>您可以使用Pulsar的客户端库将消息<a href="#publishing-to-partitioned-topics">发布</a>到分区主题,还可以使用Pulsar的<a href="/docs/zh-CN/2.2.1/admin-api-overview"> admin API </a>进行<a href="#managing-partitioned-topics">创建和管理</a>分区主题。</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>发布到分区主题时,与非分区主题的唯一区别是您需要在创建<a href="/docs/zh-CN/2.2.1/reference-terminology#producer">生产者</a>时指定<a href="/docs/zh-CN/2.2.1/concepts-messaging#routing-modes">路由模式</a>。 <a href="#java">Java</a>示例如下。</p>
+<p>发布到分区主题时,与非分区主题的唯一区别是您需要在创建新的<a href="/docs/zh-CN/2.2.1/reference-terminology#producer">生产者</a>时指定<a href="/docs/zh-CN/2.2.1/concepts-messaging#routing-modes">路由模式</a>。 <a href="#java">Java</a>示例如下。</p>
 <h3><a class="anchor" aria-hidden="true" id="java"></a><a href="#java" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>在Java客户端中将消息发布到分区主题,非常类似于发布到<a href="/docs/zh-CN/2.2.1/client-libraries-java#using-producers">普通主题</a>。 不同之处在于您需要指定一个消息路器(从已有的路由器中选择一个或实现一个自定义的路由器)。</p>
+<p>在Java客户端中将消息发布到分区主题,和发布到<a href="/docs/zh-CN/2.2.1/client-libraries-java#using-producers">普通主题</a>非常类似。 不同之处在于您需要指定一个消息路器(从已有的路由器中选择一个或实现一个自定义的路由器)。</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.09V6 [...]
 <p>您可以在ProducerConfiguration对象中指定用于配置生产者的路由模式。 可以从如下三个模式中选择:</p>
 <ul>
@@ -83,7 +83,7 @@
 <li><code>RoundRobinPartition</code></li>
 <li><code>CustomPartition</code></li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">String pulsarBrokerRootUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
 String topic = <span class="hljs-string">"persistent://my-tenant/my-namespace/my-topic"</span>;
 
@@ -121,7 +121,7 @@ producer.send(<span class="hljs-string">"Partitioned topic message"</span>.getBy
 </code></pre>
 <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>您可以使用Pulsar的<a href="/docs/zh-CN/2.2.1/admin-api-overview"> admin API </a>来创建和管理<a href="/docs/zh-CN/2.2.1/admin-api-partitioned-topics">分区主题</a>。</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/cookbooks-non-persistent"><span class="arrow-prev">← </span><span>非持久化消息</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/cookbooks-retention-expiry"><span>Message retention and expiry</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#发布到分区主题">发布到分区主题</a><ul class="toc-headings"><li><a href="#jav [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/cookbooks-non-persistent"><span class="arrow-prev">← </span><span>非持久化消息</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/cookbooks-retention-expiry"><span>消息保留和到期</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#发布到分区主题">发布到分区主题</a><ul class="toc-headings"><li><a href="#java">Java</a></li></ul> [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.2.1/cookbooks-partitioned/index.html b/content/docs/zh-CN/2.2.1/cookbooks-partitioned/index.html
index 10619dd..e5c3787 100644
--- a/content/docs/zh-CN/2.2.1/cookbooks-partitioned/index.html
+++ b/content/docs/zh-CN/2.2.1/cookbooks-partitioned/index.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Non-persistent messaging · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作的说明,请参见 &lt;a href=&quot;/docs/zh-C [...]
-"/><meta name="docsearch:version" content="2.2.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Non-persistent messaging · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作的说明 [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Non-persistent messaging · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作,请参见 &lt;a href=&quot;/docs/zh-CN/2.2.1/ [...]
+"/><meta name="docsearch:version" content="2.2.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Non-persistent messaging · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作,请参见 &lt [...]
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -70,12 +70,12 @@
                 };
               }
             });
-        </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">Non-persistent messaging</h1></header><article><div><span><p>默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 <em>分区Topic</em>是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主 [...]
+        </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">Non-persistent messaging</h1></header><article><div><span><p>默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 <em>分区Topic</em>是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作 [...]
 <p>您可以使用Pulsar的客户端库将消息<a href="#publishing-to-partitioned-topics">发布</a>到分区主题,还可以使用Pulsar的<a href="/docs/zh-CN/2.2.1/admin-api-overview"> admin API </a>进行<a href="#managing-partitioned-topics">创建和管理</a>分区主题。</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>发布到分区主题时,与非分区主题的唯一区别是您需要在创建<a href="/docs/zh-CN/2.2.1/reference-terminology#producer">生产者</a>时指定<a href="/docs/zh-CN/2.2.1/concepts-messaging#routing-modes">路由模式</a>。 <a href="#java">Java</a>示例如下。</p>
+<p>发布到分区主题时,与非分区主题的唯一区别是您需要在创建新的<a href="/docs/zh-CN/2.2.1/reference-terminology#producer">生产者</a>时指定<a href="/docs/zh-CN/2.2.1/concepts-messaging#routing-modes">路由模式</a>。 <a href="#java">Java</a>示例如下。</p>
 <h3><a class="anchor" aria-hidden="true" id="java"></a><a href="#java" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>在Java客户端中将消息发布到分区主题,非常类似于发布到<a href="/docs/zh-CN/2.2.1/client-libraries-java#using-producers">普通主题</a>。 不同之处在于您需要指定一个消息路器(从已有的路由器中选择一个或实现一个自定义的路由器)。</p>
+<p>在Java客户端中将消息发布到分区主题,和发布到<a href="/docs/zh-CN/2.2.1/client-libraries-java#using-producers">普通主题</a>非常类似。 不同之处在于您需要指定一个消息路器(从已有的路由器中选择一个或实现一个自定义的路由器)。</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.09V6 [...]
 <p>您可以在ProducerConfiguration对象中指定用于配置生产者的路由模式。 可以从如下三个模式中选择:</p>
 <ul>
@@ -83,7 +83,7 @@
 <li><code>RoundRobinPartition</code></li>
 <li><code>CustomPartition</code></li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">String pulsarBrokerRootUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
 String topic = <span class="hljs-string">"persistent://my-tenant/my-namespace/my-topic"</span>;
 
@@ -121,7 +121,7 @@ producer.send(<span class="hljs-string">"Partitioned topic message"</span>.getBy
 </code></pre>
 <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>您可以使用Pulsar的<a href="/docs/zh-CN/2.2.1/admin-api-overview"> admin API </a>来创建和管理<a href="/docs/zh-CN/2.2.1/admin-api-partitioned-topics">分区主题</a>。</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/cookbooks-non-persistent"><span class="arrow-prev">← </span><span>非持久化消息</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/cookbooks-retention-expiry"><span>Message retention and expiry</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#发布到分区主题">发布到分区主题</a><ul class="toc-headings"><li><a href="#jav [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/cookbooks-non-persistent"><span class="arrow-prev">← </span><span>非持久化消息</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/cookbooks-retention-expiry"><span>消息保留和到期</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#发布到分区主题">发布到分区主题</a><ul class="toc-headings"><li><a href="#java">Java</a></li></ul> [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.2.1/cookbooks-retention-expiry.html b/content/docs/zh-CN/2.2.1/cookbooks-retention-expiry.html
index e09f0df..c1c6941 100644
--- a/content/docs/zh-CN/2.2.1/cookbooks-retention-expiry.html
+++ b/content/docs/zh-CN/2.2.1/cookbooks-retention-expiry.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar brokers are responsible for handling messages that pass through Pulsar, including &lt;a href=&quot;/docs/zh-CN/2.2.1/concepts-architecture-overview#persistent-storage&qu [...]
-"/><meta name="docsearch:version" content="2.2.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Message retention and expiry · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;Pulsar brokers are responsible for handling messages that pass through Pulsar, including &lt;a href=&quot;/docs/zh-CN/2.2.1/concepts-architectur [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar brokers 负责处理通过Pulsar的消息,包括消息的&lt;a href=&quot;/docs/zh-CN/2.2.1/concepts-architecture-overview#persistent-storage&quot;&gt;持久存储&lt;/a&gt;。 默认情况下,broker 的策略如下:&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.2.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Message retention and expiry · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;Pulsar brokers 负责处理通过Pulsar的消息,包括消息的&lt;a href=&quot;/docs/zh-CN/2.2.1/concepts-architecture-overview#persistent-storage&quot;&gt;持久存储&lt;/a&gt; [...]
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -70,15 +70,15 @@
                 };
               }
             });
-        </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">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers are responsible for handling messages that pass through Pulsar, including <a href="/docs/zh-CN/2.2.1/concepts [...]
+        </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">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers 负责处理通过Pulsar的消息,包括消息的<a href="/docs/zh-CN/2.2.1/concepts-architecture-overview#persistent-storage">持久存储</a>。  [...]
 <ul>
-<li>immediately delete all messages that have been acknowledged on every subscription, and</li>
-<li>persistently store all unacknowledged messages in a <a href="#backlog-quotas">backlog</a>.</li>
+<li>立即删除每个订阅上已确认的所有消息。</li>
+<li>并且持久性地将所有未确认的消息存储在<a href="#backlog-quotas"> backlog </a>中。</li>
 </ul>
-<p>In Pulsar, you can override both of these default behaviors, at the namespace level, in two ways:</p>
+<p>在Pulsar中,你可以在命名空间级别以两种方式覆盖这两种默认行为:</p>
 <ul>
-<li>You can persistently store messages that have already been consumed and acknowledged for a minimum time by setting <a href="#retention-policies">retention policies</a>.</li>
-<li>Messages that are not acknowledged within a specified timeframe, can be automatically marked as consumed, by specifying the <a href="#time-to-live-ttl">time to live</a> (TTL).</li>
+<li>通过设置 <a href="#retention-policies">保留策略</a>,可以持久地存储已经被使用和确认的消息,并将其保留最少时间。</li>
+<li>通过指定[生存时间](#time-to-live- TTL) (TTL),可以自动将未在指定时间范围内得到确认的消息标记为已消费。</li>
 </ul>
 <p>Pulsar's <a href="/docs/zh-CN/2.2.1/admin-api-overview">admin interface</a> enables you to manage both retention policies and TTL at the namespace level (and thus within a specific tenant and either on a specific cluster or in the <a href="/docs/zh-CN/2.2.1/concepts-architecture-overview#global-cluster"><code>global</code></a> cluster).</p>
 <blockquote>
@@ -248,7 +248,7 @@ admin.namespaces().setBacklogQuota(namespace, quota);
 <h4><a class="anchor" aria-hidden="true" id="java-6"></a><a href="#java-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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. [...]
 <pre><code class="hljs css language-java">admin.namespaces().get
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/cookbooks-partitioned"><span class="arrow-prev">← </span><span>分区Topic</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/cookbooks-encryption"><span>Encryption</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#retention-policies">Retention policies</a><ul class="toc-headings"><li><a href="#default [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/cookbooks-partitioned"><span class="arrow-prev">← </span><span>分区主题</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/cookbooks-encryption"><span>Encryption</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#retention-policies">Retention policies</a><ul class="toc-headings"><li><a href="#defaults"> [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.2.1/cookbooks-retention-expiry/index.html b/content/docs/zh-CN/2.2.1/cookbooks-retention-expiry/index.html
index e09f0df..c1c6941 100644
--- a/content/docs/zh-CN/2.2.1/cookbooks-retention-expiry/index.html
+++ b/content/docs/zh-CN/2.2.1/cookbooks-retention-expiry/index.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar brokers are responsible for handling messages that pass through Pulsar, including &lt;a href=&quot;/docs/zh-CN/2.2.1/concepts-architecture-overview#persistent-storage&qu [...]
-"/><meta name="docsearch:version" content="2.2.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Message retention and expiry · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;Pulsar brokers are responsible for handling messages that pass through Pulsar, including &lt;a href=&quot;/docs/zh-CN/2.2.1/concepts-architectur [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar brokers 负责处理通过Pulsar的消息,包括消息的&lt;a href=&quot;/docs/zh-CN/2.2.1/concepts-architecture-overview#persistent-storage&quot;&gt;持久存储&lt;/a&gt;。 默认情况下,broker 的策略如下:&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.2.1"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Message retention and expiry · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;Pulsar brokers 负责处理通过Pulsar的消息,包括消息的&lt;a href=&quot;/docs/zh-CN/2.2.1/concepts-architecture-overview#persistent-storage&quot;&gt;持久存储&lt;/a&gt; [...]
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -70,15 +70,15 @@
                 };
               }
             });
-        </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">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers are responsible for handling messages that pass through Pulsar, including <a href="/docs/zh-CN/2.2.1/concepts [...]
+        </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">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers 负责处理通过Pulsar的消息,包括消息的<a href="/docs/zh-CN/2.2.1/concepts-architecture-overview#persistent-storage">持久存储</a>。  [...]
 <ul>
-<li>immediately delete all messages that have been acknowledged on every subscription, and</li>
-<li>persistently store all unacknowledged messages in a <a href="#backlog-quotas">backlog</a>.</li>
+<li>立即删除每个订阅上已确认的所有消息。</li>
+<li>并且持久性地将所有未确认的消息存储在<a href="#backlog-quotas"> backlog </a>中。</li>
 </ul>
-<p>In Pulsar, you can override both of these default behaviors, at the namespace level, in two ways:</p>
+<p>在Pulsar中,你可以在命名空间级别以两种方式覆盖这两种默认行为:</p>
 <ul>
-<li>You can persistently store messages that have already been consumed and acknowledged for a minimum time by setting <a href="#retention-policies">retention policies</a>.</li>
-<li>Messages that are not acknowledged within a specified timeframe, can be automatically marked as consumed, by specifying the <a href="#time-to-live-ttl">time to live</a> (TTL).</li>
+<li>通过设置 <a href="#retention-policies">保留策略</a>,可以持久地存储已经被使用和确认的消息,并将其保留最少时间。</li>
+<li>通过指定[生存时间](#time-to-live- TTL) (TTL),可以自动将未在指定时间范围内得到确认的消息标记为已消费。</li>
 </ul>
 <p>Pulsar's <a href="/docs/zh-CN/2.2.1/admin-api-overview">admin interface</a> enables you to manage both retention policies and TTL at the namespace level (and thus within a specific tenant and either on a specific cluster or in the <a href="/docs/zh-CN/2.2.1/concepts-architecture-overview#global-cluster"><code>global</code></a> cluster).</p>
 <blockquote>
@@ -248,7 +248,7 @@ admin.namespaces().setBacklogQuota(namespace, quota);
 <h4><a class="anchor" aria-hidden="true" id="java-6"></a><a href="#java-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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. [...]
 <pre><code class="hljs css language-java">admin.namespaces().get
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/cookbooks-partitioned"><span class="arrow-prev">← </span><span>分区Topic</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/cookbooks-encryption"><span>Encryption</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#retention-policies">Retention policies</a><ul class="toc-headings"><li><a href="#default [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/cookbooks-partitioned"><span class="arrow-prev">← </span><span>分区主题</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/cookbooks-encryption"><span>Encryption</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#retention-policies">Retention policies</a><ul class="toc-headings"><li><a href="#defaults"> [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/2.2.1/deploy-bare-metal-multi-cluster.html b/content/docs/zh-CN/2.2.1/deploy-bare-metal-multi-cluster.html
index 592789e..d54d643 100644
--- a/content/docs/zh-CN/2.2.1/deploy-bare-metal-multi-cluster.html
+++ b/content/docs/zh-CN/2.2.1/deploy-bare-metal-multi-cluster.html
@@ -212,7 +212,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.3.0
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="cluster-metadata-initialization"></a><a href="#cluster-metadata-initialization" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 [...]
 <p>Once you've set up the cluster-specific ZooKeeper and configuration store quorums for your instance, there is some metadata that needs to be written to ZooKeeper for each cluster in your instance. <strong>It only needs to be written once</strong>.</p>
-<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.2.1/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.2.1/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. 这里有一个示例:</p>
+<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.2.1/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.2.1/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar initialize-cluster-metadata \</span>
   --cluster us-west \
   --zookeeper zk1.us-west.example.com:2181 \
@@ -230,7 +230,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.3.0
 <li>集群的web服务URL</li>
 <li>Broker服务的URL,来开启和集群中<a href="/docs/zh-CN/2.2.1/reference-terminology#broker">broker</a>的交互</li>
 </ul>
-<p>如果您使用<a href="/docs/zh-CN/2.2.1/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL以及为 brokers 群集指定TLS broker服务URL。</p>
+<p>如果使用<a href="/docs/zh-CN/2.2.1/security-tls-transport"> TLS </a>,那么您还需要为群集指定TLS Web服务URL,为群集中的各个 broker 指定 TLS broker服务URL。</p>
 <p>Make sure to run <code>initialize-cluster-metadata</code> for each cluster in your instance.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-bookkeeper"></a><a href="#deploying-bookkeeper" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
 <p>BookKeeper provides <a href="/docs/zh-CN/2.2.1/concepts-architecture-overview#persistent-storage">persistent message storage</a> for Pulsar.</p>
diff --git a/content/docs/zh-CN/2.2.1/deploy-bare-metal-multi-cluster/index.html b/content/docs/zh-CN/2.2.1/deploy-bare-metal-multi-cluster/index.html
index 592789e..d54d643 100644
--- a/content/docs/zh-CN/2.2.1/deploy-bare-metal-multi-cluster/index.html
+++ b/content/docs/zh-CN/2.2.1/deploy-bare-metal-multi-cluster/index.html
@@ -212,7 +212,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.3.0
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="cluster-metadata-initialization"></a><a href="#cluster-metadata-initialization" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 [...]
 <p>Once you've set up the cluster-specific ZooKeeper and configuration store quorums for your instance, there is some metadata that needs to be written to ZooKeeper for each cluster in your instance. <strong>It only needs to be written once</strong>.</p>
-<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.2.1/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.2.1/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. 这里有一个示例:</p>
+<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.2.1/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.2.1/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar initialize-cluster-metadata \</span>
   --cluster us-west \
   --zookeeper zk1.us-west.example.com:2181 \
@@ -230,7 +230,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.3.0
 <li>集群的web服务URL</li>
 <li>Broker服务的URL,来开启和集群中<a href="/docs/zh-CN/2.2.1/reference-terminology#broker">broker</a>的交互</li>
 </ul>
-<p>如果您使用<a href="/docs/zh-CN/2.2.1/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL以及为 brokers 群集指定TLS broker服务URL。</p>
+<p>如果使用<a href="/docs/zh-CN/2.2.1/security-tls-transport"> TLS </a>,那么您还需要为群集指定TLS Web服务URL,为群集中的各个 broker 指定 TLS broker服务URL。</p>
 <p>Make sure to run <code>initialize-cluster-metadata</code> for each cluster in your instance.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-bookkeeper"></a><a href="#deploying-bookkeeper" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
 <p>BookKeeper provides <a href="/docs/zh-CN/2.2.1/concepts-architecture-overview#persistent-storage">persistent message storage</a> for Pulsar.</p>
diff --git a/content/docs/zh-CN/2.2.1/deploy-bare-metal.html b/content/docs/zh-CN/2.2.1/deploy-bare-metal.html
index 75f5df4..b9fc451 100644
--- a/content/docs/zh-CN/2.2.1/deploy-bare-metal.html
+++ b/content/docs/zh-CN/2.2.1/deploy-bare-metal.html
@@ -92,7 +92,7 @@
 <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 [...]
 <h3><a class="anchor" aria-hidden="true" id="要求"></a><a href="#要求" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c [...]
 <blockquote>
-<p>如果你想使用已有的zookeeper集群,那就不用准备额外的机器去运行zookeeper。</p>
+<p>如果您想使用已有的zookeeper集群,那就不用准备额外的机器去运行zookeeper。</p>
 </blockquote>
 <p>要在裸机上运行Pulsar,建议准备以下资源:</p>
 <ul>
@@ -101,7 +101,7 @@
 <li>3台运行<a href="https://zookeeper.apache.org">ZooKeeper</a></li>
 <li>3台运行Pulsar broker,一台 <a href="https://bookkeeper.apache.org">BookKeeper</a> bookie</li>
 </ul></li>
-<li>一个 <a href="https://en.wikipedia.org/wiki/Domain_Name_System">DNS</a>(域名解析服务器)包含Pulsar所有broker主机</li>
+<li>一个 包含Pulsar所有broker主机的<a href="https://en.wikipedia.org/wiki/Domain_Name_System">DNS</a>(域名解析服务器)</li>
 </ul>
 <blockquote>
 <p>如果没有足够的机器,或者想在集群模式下使用 Pulsar (稍后扩展集群),可以把 Pulsar 部署在一个节点上,该节点会在同一台机器上运行 zookeeper、bookie 和 broker。</p>
@@ -113,18 +113,18 @@
 <h3><a class="anchor" aria-hidden="true" id="hardware-considerations"></a><a href="#hardware-considerations" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 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>在部署 Pulsar 集群时,我们提供了一些基本建议,在容量规划时应牢记这些建议。</p>
 <h4><a class="anchor" aria-hidden="true" id="zookeeper"></a><a href="#zookeeper" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>对于运行ZooKeeper的机器,我们建议使用配置一般的机器或VM。 Pulsar使用ZooKeeper只是定期做些协调和配置相关的任务,<em>不</em>用于基本操作。 如果您在<a href="https://aws.amazon.com/">Amazon Web Services </a>(AWS)上部署Pulsar,比如一个<a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html">t2.small </a>实例就足够了。</p>
+<p>对于运行ZooKeeper的机器,我们建议使用配置一般的机器或VM。 Pulsar使用ZooKeeper只是定期做些协调和配置相关的任务,<em>不</em>用于基本操作。 如果您在<a href="https://aws.amazon.com/">Amazon Web Services </a>(AWS)上部署Pulsar,例如一个<a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html">t2.small </a>实例就足够了。</p>
 <h4><a class="anchor" aria-hidden="true" id="bookies-brokers"></a><a href="#bookies-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
 <p>对于运行 bookie 和 Pulsar broker 的机器,我们建议使用性能更强大的机器。 例如,对于AWS部署,<a href="https://aws.amazon.com/blogs/aws/now-available-i3-instances-for-demanding-io-intensive-applications/">i3.4xlarge</a>实例可能是合适的。 在这些机器上部署,我们还有以下建议:</p>
 <ul>
 <li>高性能的CPU和10Gbps <a href="https://en.wikipedia.org/wiki/Network_interface_controller"> NIC </a>(适用于Pulsar brokers)</li>
-<li>小型快速固态硬盘<a href="https://en.wikipedia.org/wiki/Solid-state_drive">(SSD)</a>或硬盘驱动器<a href="https://en.wikipedia.org/wiki/Hard_disk_drive">(HDD)</a>,带有<a href="https://en.wikipedia.org/wiki/RAID">RAID</a>控制器和电池供电的写缓存(适用于BookKeeper bookies)</li>
+<li>小型快速<a href="https://en.wikipedia.org/wiki/Solid-state_drive">固态硬盘</a>(SSD)或<a href="https://en.wikipedia.org/wiki/Hard_disk_drive">硬盘驱动器</a>(HDD),带有<a href="https://en.wikipedia.org/wiki/RAID">RAID</a>控制器和电池供电的写缓存(适用于BookKeeper bookies)</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="安装pulsar二进制包"></a><a href="#安装pulsar二进制包" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <blockquote>
 <p>You'll need to install the Pulsar binary package on <em>each machine in the cluster</em>, including machines running <a href="#deploying-a-zookeeper-cluster">ZooKeeper</a> and <a href="#deploying-a-bookkeeper-cluster">BookKeeper</a>.</p>
 </blockquote>
-<p>要开始在裸机上部署Pulsar集群,您需要通过以下方式之一下载二进制压缩包:</p>
+<p>要在裸机上部署Pulsar集群,用以下任意方式下载二进制压缩包:</p>
 <ul>
 <li>点击下面的链接,会自动触发下载:
 <ul>
@@ -190,11 +190,11 @@ pulsar-io-twitter-2.3.0.nar
 <blockquote>
 <p>从<code>2.2.0</code>版本,Pulsar发布了一个单独的二进制发行版,其中包含分层存储卸载器。 如果您想启用分层存储功能,可以按照以下说明操作; 否则你可以暂时跳过此部分。</p>
 </blockquote>
-<p>要使用分层存储卸载器,您需要在每个broker节点上下载其发行版压缩包,可通过以下方式之一来进行下载:</p>
+<p>要使用分层存储卸载器,您需要在每个broker节点上下载其发行版压缩包,可通过以下任一方式来下载:</p>
 <ul>
 <li><p>通过单击下面的链接并从 Apache 镜像下载该版本:</p>
 <ul>
-<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-offloaders-2.3.0-bin.tar.gz" download>Pulsar Tiered Storage Offloaders 2.3.0 release</a></li>
+<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-offloaders-2.3.0-bin.tar.gz" download>Pulsar 分层存储下载器 2.3.0 版本</a></li>
 </ul></li>
 <li><p>从Pulsar <a href="/download">下载页</a></p></li>
 <li><p>from the Pulsar <a href="https://github.com/apache/pulsar/releases/latest">releases page</a></p></li>
@@ -213,19 +213,19 @@ $ mv apache-pulsar-offloaders-2.3.0/offloaders offloaders
 $ ls offloaders
 tiered-storage-jcloud-2.3.0.nar
 </code></pre>
-<p>有关如何配置分层存储功能的更多详细信息,可以参考此<a href="/docs/zh-CN/2.2.1/cookbooks-tiered-storage">分层存储手册</a></p>
+<p>有关如何配置分层存储功能的更多详细信息,参考<a href="/docs/zh-CN/2.2.1/cookbooks-tiered-storage">分层存储手册</a>。</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-a-zookeeper-cluster"></a><a href="#deploying-a-zookeeper-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 2.5S13.98 12  [...]
 <blockquote>
 <p>If you already have an exsiting zookeeper cluster and would like to use it, you can skip this section.</p>
 </blockquote>
 <p><a href="https://zookeeper.apache.org">ZooKeeper</a> manages a variety of essential coordination- and configuration-related tasks for Pulsar. To deploy a Pulsar cluster you'll need to deploy ZooKeeper first (before all other components). We recommend deploying a 3-node ZooKeeper cluster. Pulsar does not make heavy use of ZooKeeper, so more lightweight machines or VMs should suffice for running ZooKeeper.</p>
-<p>To begin, add all ZooKeeper servers to the configuration specified in <a href="/docs/zh-CN/2.2.1/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> (in the Pulsar directory you created <a href="#installing-the-pulsar-binary-package">above</a>). 这里有一个示例:</p>
+<p>To begin, add all ZooKeeper servers to the configuration specified in <a href="/docs/zh-CN/2.2.1/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> (in the Pulsar directory you created <a href="#installing-the-pulsar-binary-package">above</a>). 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-meta">server.1</span>=<span class="hljs-string">zk1.us-west.example.com:2888:3888</span>
 <span class="hljs-meta">server.2</span>=<span class="hljs-string">zk2.us-west.example.com:2888:3888</span>
 <span class="hljs-meta">server.3</span>=<span class="hljs-string">zk3.us-west.example.com:2888:3888</span>
 </code></pre>
 <blockquote>
-<p>如果您只有一台机器来部署Pulsar,则只需在配置文件中添加一个服务器条目即可。</p>
+<p>如果您只有一台机器来部署Pulsar,只需在配置文件中添加一个服务器条目即可。</p>
 </blockquote>
 <p>On each host, you need to specify the ID of the node in each node's <code>myid</code> file, which is in each server's <code>data/zookeeper</code> folder by default (this can be changed via the <a href="/docs/zh-CN/2.2.1/reference-configuration#zookeeper-dataDir"><code>dataDir</code></a> parameter).</p>
 <blockquote>
@@ -247,7 +247,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="initializing-cluster-metadata"></a><a href="#initializing-cluster-metadata" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12  [...]
 <p>Once you've deployed ZooKeeper for your cluster, there is some metadata that needs to be written to ZooKeeper for each cluster in your instance. It only needs to be written <strong>once</strong>.</p>
-<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.2.1/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.2.1/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. This command can be run on any machine in your ZooKeeper cluster. 这里有一个示例:</p>
+<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.2.1/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.2.1/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. This command can be run on any machine in your ZooKeeper cluster. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar initialize-cluster-metadata \</span>
   --cluster pulsar-cluster-1 \
   --zookeeper zk1.us-west.example.com:2181 \
@@ -265,16 +265,16 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <tbody>
 <tr><td style="text-align:left"><code>--cluster</code></td><td style="text-align:left">集群名字</td></tr>
 <tr><td style="text-align:left"><code>--zookeeper</code></td><td style="text-align:left">A &quot;local&quot; ZooKeeper connection string for the cluster. This connection string only needs to include <em>one</em> machine in the ZooKeeper cluster.</td></tr>
-<tr><td style="text-align:left"><code>--configuration-store</code></td><td style="text-align:left">整个集群实例的配置存储连接字符串。 和<code>--zookeeper</code>参数一样只需要包含ZooKeeper集群中的<em>一个</em>节点即可。</td></tr>
+<tr><td style="text-align:left"><code>--configuration-store</code></td><td style="text-align:left">整个集群实例的配置存储连接字符串。 和<code>--zookeeper</code>标记一样,该连接字符串只需包含ZooKeeper集群中的<em>任一台</em>机器即可。</td></tr>
 <tr><td style="text-align:left"><code>--web-service-url</code></td><td style="text-align:left">The web service URL for the cluster, plus a port. This URL should be a standard DNS name. The default port is 8080 (we don't recommend using a different port).</td></tr>
 <tr><td style="text-align:left"><code>--web-service-url-tls</code></td><td style="text-align:left">If you're using <a href="/docs/zh-CN/2.2.1/security-tls-transport">TLS</a>, you'll also need to specify a TLS web service URL for the cluster. The default port is 8443 (we don't recommend using a different port).</td></tr>
-<tr><td style="text-align:left"><code>--broker-service-url</code></td><td style="text-align:left">Broker服务的URL,用于与集群中的brokers进行交互。 此URL应使用与Web服务URL相同的DNS名称,但应使用<code>pulsar</code>替代http/https。 端口默认6650(我们不建议使用其他端口)。</td></tr>
-<tr><td style="text-align:left"><code>--broker-service-url-tls</code></td><td style="text-align:left">如果您使用<a href="/docs/zh-CN/2.2.1/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL以及为 brokers 群集指定TLS broker服务URL。 端口默认6651(我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--broker-service-url</code></td><td style="text-align:left">Broker服务的URL,用于与集群中的brokers进行交互。 此URL应使用与Web服务URL相同的DNS名称,但应使用<code>pulsar</code>替代scheme。 默认端口为 6650 (我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--broker-service-url-tls</code></td><td style="text-align:left">如果使用<a href="/docs/zh-CN/2.2.1/security-tls-transport"> TLS </a>,那么您还需要为群集指定TLS Web服务URL,为群集中的各个 broker 指定 TLS broker服务URL。 默认端口为 6651 (我们不建议使用其他端口)。</td></tr>
 </tbody>
 </table>
 <h2><a class="anchor" aria-hidden="true" id="deploying-a-bookkeeper-cluster"></a><a href="#deploying-a-bookkeeper-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 2.5S13.98 1 [...]
 <p><a href="https://bookkeeper.apache.org">BookKeeper</a> handles all persistent data storage in Pulsar. You will need to deploy a cluster of BookKeeper bookies to use Pulsar. We recommend running a <strong>3-bookie BookKeeper cluster</strong>.</p>
-<p>BookKeeper bookies can be configured using the <a href="/docs/zh-CN/2.2.1/reference-configuration#bookkeeper"><code>conf/bookkeeper.conf</code></a> configuration file. The most important step in configuring bookies for our purposes here is ensuring that the <a href="/docs/zh-CN/2.2.1/reference-configuration#bookkeeper-zkServers"><code>zkServers</code></a> is set to the connection string for the ZooKeeper cluster. 这里有一个示例:</p>
+<p>BookKeeper bookies can be configured using the <a href="/docs/zh-CN/2.2.1/reference-configuration#bookkeeper"><code>conf/bookkeeper.conf</code></a> configuration file. The most important step in configuring bookies for our purposes here is ensuring that the <a href="/docs/zh-CN/2.2.1/reference-configuration#bookkeeper-zkServers"><code>zkServers</code></a> is set to the connection string for the ZooKeeper cluster. 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zkServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
 <p>Once you've appropriately modified the <code>zkServers</code> parameter, you can provide any other configuration modifications you need. You can find a full listing of the available BookKeeper configuration parameters <a href="/docs/zh-CN/2.2.1/reference-configuration#bookkeeper">here</a>, although we would recommend consulting the <a href="http://bookkeeper.apache.org/docs/latest/reference/config/">BookKeeper documentation</a> for a more in-depth guide.</p>
@@ -305,7 +305,7 @@ $ bin/pulsar-daemon start bookie
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
-<h3><a class="anchor" aria-hidden="true" id="配置brokers"></a><a href="#配置brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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 [...]
+<h3><a class="anchor" aria-hidden="true" id="配置broker"></a><a href="#配置broker" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
@@ -314,7 +314,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
 </code></pre>
 <blockquote>
-<p>如果在单节点集群中部署Pulsar,则应将<code>conf/broker.conf</code>中的复制设置更新为<code>1</code></p>
+<p>如果在单节点集群中部署Pulsar,您需要把<code>conf/broker.conf</code>文件中的复制设置更新为<code>1</code>。</p>
 <pre><code class="hljs css language-properties"></code></pre>
 </blockquote>
 <h1><a class="anchor" aria-hidden="true" id="number-of-bookies-to-use-when-creating-a-ledger"></a><a href="#number-of-bookies-to-use-when-creating-a-ledger" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9 [...]
@@ -342,7 +342,7 @@ If you want to enable [<span class="hljs-string">Pulsar Functions</span>](<span
 <span class="hljs-code">      ```</span>
 <span class="hljs-code">      </span>
 
-<span class="hljs-section">### 启动 Brokers</span>
+<span class="hljs-section">### 启动 Broker</span>
 
 You can then provide any other configuration changes that you'd like in the [<span class="hljs-string">`conf/broker.conf`</span>](<span class="hljs-link">/docs/zh-CN/2.2.1/reference-configuration#broker</span>) file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.
 
@@ -357,7 +357,7 @@ $ bin/pulsar broker
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-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 2.5S1 [...]
 <p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="/docs/zh-CN/2.2.1/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/zh-CN/2.2.1/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. 这里有一个示例:</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/zh-CN/2.2.1/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -391,7 +391,7 @@ $ bin/pulsar broker
 <p>You will see output as below:</p>
 <pre><code class="hljs css language-shell">hello world!
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/deploy-kubernetes"><span class="arrow-prev">← </span><span>Kubernetes</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/deploy-bare-metal-multi-cluster"><span>裸机多集群部署</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#准备工作">准备工作</a><ul class="toc-headings"><li><a href="#要求">要求</a></li><li><a href=" [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/deploy-kubernetes"><span class="arrow-prev">← </span><span>Kubernetes</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/deploy-bare-metal-multi-cluster"><span>裸机多集群部署</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#准备工作">准备工作</a><ul class="toc-headings"><li><a href="#要求">要求</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/deploy-bare-metal/index.html b/content/docs/zh-CN/2.2.1/deploy-bare-metal/index.html
index 75f5df4..b9fc451 100644
--- a/content/docs/zh-CN/2.2.1/deploy-bare-metal/index.html
+++ b/content/docs/zh-CN/2.2.1/deploy-bare-metal/index.html
@@ -92,7 +92,7 @@
 <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 [...]
 <h3><a class="anchor" aria-hidden="true" id="要求"></a><a href="#要求" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c [...]
 <blockquote>
-<p>如果你想使用已有的zookeeper集群,那就不用准备额外的机器去运行zookeeper。</p>
+<p>如果您想使用已有的zookeeper集群,那就不用准备额外的机器去运行zookeeper。</p>
 </blockquote>
 <p>要在裸机上运行Pulsar,建议准备以下资源:</p>
 <ul>
@@ -101,7 +101,7 @@
 <li>3台运行<a href="https://zookeeper.apache.org">ZooKeeper</a></li>
 <li>3台运行Pulsar broker,一台 <a href="https://bookkeeper.apache.org">BookKeeper</a> bookie</li>
 </ul></li>
-<li>一个 <a href="https://en.wikipedia.org/wiki/Domain_Name_System">DNS</a>(域名解析服务器)包含Pulsar所有broker主机</li>
+<li>一个 包含Pulsar所有broker主机的<a href="https://en.wikipedia.org/wiki/Domain_Name_System">DNS</a>(域名解析服务器)</li>
 </ul>
 <blockquote>
 <p>如果没有足够的机器,或者想在集群模式下使用 Pulsar (稍后扩展集群),可以把 Pulsar 部署在一个节点上,该节点会在同一台机器上运行 zookeeper、bookie 和 broker。</p>
@@ -113,18 +113,18 @@
 <h3><a class="anchor" aria-hidden="true" id="hardware-considerations"></a><a href="#hardware-considerations" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 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>在部署 Pulsar 集群时,我们提供了一些基本建议,在容量规划时应牢记这些建议。</p>
 <h4><a class="anchor" aria-hidden="true" id="zookeeper"></a><a href="#zookeeper" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>对于运行ZooKeeper的机器,我们建议使用配置一般的机器或VM。 Pulsar使用ZooKeeper只是定期做些协调和配置相关的任务,<em>不</em>用于基本操作。 如果您在<a href="https://aws.amazon.com/">Amazon Web Services </a>(AWS)上部署Pulsar,比如一个<a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html">t2.small </a>实例就足够了。</p>
+<p>对于运行ZooKeeper的机器,我们建议使用配置一般的机器或VM。 Pulsar使用ZooKeeper只是定期做些协调和配置相关的任务,<em>不</em>用于基本操作。 如果您在<a href="https://aws.amazon.com/">Amazon Web Services </a>(AWS)上部署Pulsar,例如一个<a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html">t2.small </a>实例就足够了。</p>
 <h4><a class="anchor" aria-hidden="true" id="bookies-brokers"></a><a href="#bookies-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
 <p>对于运行 bookie 和 Pulsar broker 的机器,我们建议使用性能更强大的机器。 例如,对于AWS部署,<a href="https://aws.amazon.com/blogs/aws/now-available-i3-instances-for-demanding-io-intensive-applications/">i3.4xlarge</a>实例可能是合适的。 在这些机器上部署,我们还有以下建议:</p>
 <ul>
 <li>高性能的CPU和10Gbps <a href="https://en.wikipedia.org/wiki/Network_interface_controller"> NIC </a>(适用于Pulsar brokers)</li>
-<li>小型快速固态硬盘<a href="https://en.wikipedia.org/wiki/Solid-state_drive">(SSD)</a>或硬盘驱动器<a href="https://en.wikipedia.org/wiki/Hard_disk_drive">(HDD)</a>,带有<a href="https://en.wikipedia.org/wiki/RAID">RAID</a>控制器和电池供电的写缓存(适用于BookKeeper bookies)</li>
+<li>小型快速<a href="https://en.wikipedia.org/wiki/Solid-state_drive">固态硬盘</a>(SSD)或<a href="https://en.wikipedia.org/wiki/Hard_disk_drive">硬盘驱动器</a>(HDD),带有<a href="https://en.wikipedia.org/wiki/RAID">RAID</a>控制器和电池供电的写缓存(适用于BookKeeper bookies)</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="安装pulsar二进制包"></a><a href="#安装pulsar二进制包" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <blockquote>
 <p>You'll need to install the Pulsar binary package on <em>each machine in the cluster</em>, including machines running <a href="#deploying-a-zookeeper-cluster">ZooKeeper</a> and <a href="#deploying-a-bookkeeper-cluster">BookKeeper</a>.</p>
 </blockquote>
-<p>要开始在裸机上部署Pulsar集群,您需要通过以下方式之一下载二进制压缩包:</p>
+<p>要在裸机上部署Pulsar集群,用以下任意方式下载二进制压缩包:</p>
 <ul>
 <li>点击下面的链接,会自动触发下载:
 <ul>
@@ -190,11 +190,11 @@ pulsar-io-twitter-2.3.0.nar
 <blockquote>
 <p>从<code>2.2.0</code>版本,Pulsar发布了一个单独的二进制发行版,其中包含分层存储卸载器。 如果您想启用分层存储功能,可以按照以下说明操作; 否则你可以暂时跳过此部分。</p>
 </blockquote>
-<p>要使用分层存储卸载器,您需要在每个broker节点上下载其发行版压缩包,可通过以下方式之一来进行下载:</p>
+<p>要使用分层存储卸载器,您需要在每个broker节点上下载其发行版压缩包,可通过以下任一方式来下载:</p>
 <ul>
 <li><p>通过单击下面的链接并从 Apache 镜像下载该版本:</p>
 <ul>
-<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-offloaders-2.3.0-bin.tar.gz" download>Pulsar Tiered Storage Offloaders 2.3.0 release</a></li>
+<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-offloaders-2.3.0-bin.tar.gz" download>Pulsar 分层存储下载器 2.3.0 版本</a></li>
 </ul></li>
 <li><p>从Pulsar <a href="/download">下载页</a></p></li>
 <li><p>from the Pulsar <a href="https://github.com/apache/pulsar/releases/latest">releases page</a></p></li>
@@ -213,19 +213,19 @@ $ mv apache-pulsar-offloaders-2.3.0/offloaders offloaders
 $ ls offloaders
 tiered-storage-jcloud-2.3.0.nar
 </code></pre>
-<p>有关如何配置分层存储功能的更多详细信息,可以参考此<a href="/docs/zh-CN/2.2.1/cookbooks-tiered-storage">分层存储手册</a></p>
+<p>有关如何配置分层存储功能的更多详细信息,参考<a href="/docs/zh-CN/2.2.1/cookbooks-tiered-storage">分层存储手册</a>。</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-a-zookeeper-cluster"></a><a href="#deploying-a-zookeeper-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 2.5S13.98 12  [...]
 <blockquote>
 <p>If you already have an exsiting zookeeper cluster and would like to use it, you can skip this section.</p>
 </blockquote>
 <p><a href="https://zookeeper.apache.org">ZooKeeper</a> manages a variety of essential coordination- and configuration-related tasks for Pulsar. To deploy a Pulsar cluster you'll need to deploy ZooKeeper first (before all other components). We recommend deploying a 3-node ZooKeeper cluster. Pulsar does not make heavy use of ZooKeeper, so more lightweight machines or VMs should suffice for running ZooKeeper.</p>
-<p>To begin, add all ZooKeeper servers to the configuration specified in <a href="/docs/zh-CN/2.2.1/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> (in the Pulsar directory you created <a href="#installing-the-pulsar-binary-package">above</a>). 这里有一个示例:</p>
+<p>To begin, add all ZooKeeper servers to the configuration specified in <a href="/docs/zh-CN/2.2.1/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> (in the Pulsar directory you created <a href="#installing-the-pulsar-binary-package">above</a>). 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-meta">server.1</span>=<span class="hljs-string">zk1.us-west.example.com:2888:3888</span>
 <span class="hljs-meta">server.2</span>=<span class="hljs-string">zk2.us-west.example.com:2888:3888</span>
 <span class="hljs-meta">server.3</span>=<span class="hljs-string">zk3.us-west.example.com:2888:3888</span>
 </code></pre>
 <blockquote>
-<p>如果您只有一台机器来部署Pulsar,则只需在配置文件中添加一个服务器条目即可。</p>
+<p>如果您只有一台机器来部署Pulsar,只需在配置文件中添加一个服务器条目即可。</p>
 </blockquote>
 <p>On each host, you need to specify the ID of the node in each node's <code>myid</code> file, which is in each server's <code>data/zookeeper</code> folder by default (this can be changed via the <a href="/docs/zh-CN/2.2.1/reference-configuration#zookeeper-dataDir"><code>dataDir</code></a> parameter).</p>
 <blockquote>
@@ -247,7 +247,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="initializing-cluster-metadata"></a><a href="#initializing-cluster-metadata" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12  [...]
 <p>Once you've deployed ZooKeeper for your cluster, there is some metadata that needs to be written to ZooKeeper for each cluster in your instance. It only needs to be written <strong>once</strong>.</p>
-<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.2.1/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.2.1/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. This command can be run on any machine in your ZooKeeper cluster. 这里有一个示例:</p>
+<p>You can initialize this metadata using the <a href="/docs/zh-CN/2.2.1/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/2.2.1/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. This command can be run on any machine in your ZooKeeper cluster. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar initialize-cluster-metadata \</span>
   --cluster pulsar-cluster-1 \
   --zookeeper zk1.us-west.example.com:2181 \
@@ -265,16 +265,16 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <tbody>
 <tr><td style="text-align:left"><code>--cluster</code></td><td style="text-align:left">集群名字</td></tr>
 <tr><td style="text-align:left"><code>--zookeeper</code></td><td style="text-align:left">A &quot;local&quot; ZooKeeper connection string for the cluster. This connection string only needs to include <em>one</em> machine in the ZooKeeper cluster.</td></tr>
-<tr><td style="text-align:left"><code>--configuration-store</code></td><td style="text-align:left">整个集群实例的配置存储连接字符串。 和<code>--zookeeper</code>参数一样只需要包含ZooKeeper集群中的<em>一个</em>节点即可。</td></tr>
+<tr><td style="text-align:left"><code>--configuration-store</code></td><td style="text-align:left">整个集群实例的配置存储连接字符串。 和<code>--zookeeper</code>标记一样,该连接字符串只需包含ZooKeeper集群中的<em>任一台</em>机器即可。</td></tr>
 <tr><td style="text-align:left"><code>--web-service-url</code></td><td style="text-align:left">The web service URL for the cluster, plus a port. This URL should be a standard DNS name. The default port is 8080 (we don't recommend using a different port).</td></tr>
 <tr><td style="text-align:left"><code>--web-service-url-tls</code></td><td style="text-align:left">If you're using <a href="/docs/zh-CN/2.2.1/security-tls-transport">TLS</a>, you'll also need to specify a TLS web service URL for the cluster. The default port is 8443 (we don't recommend using a different port).</td></tr>
-<tr><td style="text-align:left"><code>--broker-service-url</code></td><td style="text-align:left">Broker服务的URL,用于与集群中的brokers进行交互。 此URL应使用与Web服务URL相同的DNS名称,但应使用<code>pulsar</code>替代http/https。 端口默认6650(我们不建议使用其他端口)。</td></tr>
-<tr><td style="text-align:left"><code>--broker-service-url-tls</code></td><td style="text-align:left">如果您使用<a href="/docs/zh-CN/2.2.1/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL以及为 brokers 群集指定TLS broker服务URL。 端口默认6651(我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--broker-service-url</code></td><td style="text-align:left">Broker服务的URL,用于与集群中的brokers进行交互。 此URL应使用与Web服务URL相同的DNS名称,但应使用<code>pulsar</code>替代scheme。 默认端口为 6650 (我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--broker-service-url-tls</code></td><td style="text-align:left">如果使用<a href="/docs/zh-CN/2.2.1/security-tls-transport"> TLS </a>,那么您还需要为群集指定TLS Web服务URL,为群集中的各个 broker 指定 TLS broker服务URL。 默认端口为 6651 (我们不建议使用其他端口)。</td></tr>
 </tbody>
 </table>
 <h2><a class="anchor" aria-hidden="true" id="deploying-a-bookkeeper-cluster"></a><a href="#deploying-a-bookkeeper-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 2.5S13.98 1 [...]
 <p><a href="https://bookkeeper.apache.org">BookKeeper</a> handles all persistent data storage in Pulsar. You will need to deploy a cluster of BookKeeper bookies to use Pulsar. We recommend running a <strong>3-bookie BookKeeper cluster</strong>.</p>
-<p>BookKeeper bookies can be configured using the <a href="/docs/zh-CN/2.2.1/reference-configuration#bookkeeper"><code>conf/bookkeeper.conf</code></a> configuration file. The most important step in configuring bookies for our purposes here is ensuring that the <a href="/docs/zh-CN/2.2.1/reference-configuration#bookkeeper-zkServers"><code>zkServers</code></a> is set to the connection string for the ZooKeeper cluster. 这里有一个示例:</p>
+<p>BookKeeper bookies can be configured using the <a href="/docs/zh-CN/2.2.1/reference-configuration#bookkeeper"><code>conf/bookkeeper.conf</code></a> configuration file. The most important step in configuring bookies for our purposes here is ensuring that the <a href="/docs/zh-CN/2.2.1/reference-configuration#bookkeeper-zkServers"><code>zkServers</code></a> is set to the connection string for the ZooKeeper cluster. 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zkServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
 <p>Once you've appropriately modified the <code>zkServers</code> parameter, you can provide any other configuration modifications you need. You can find a full listing of the available BookKeeper configuration parameters <a href="/docs/zh-CN/2.2.1/reference-configuration#bookkeeper">here</a>, although we would recommend consulting the <a href="http://bookkeeper.apache.org/docs/latest/reference/config/">BookKeeper documentation</a> for a more in-depth guide.</p>
@@ -305,7 +305,7 @@ $ bin/pulsar-daemon start bookie
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
-<h3><a class="anchor" aria-hidden="true" id="配置brokers"></a><a href="#配置brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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 [...]
+<h3><a class="anchor" aria-hidden="true" id="配置broker"></a><a href="#配置broker" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
@@ -314,7 +314,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
 </code></pre>
 <blockquote>
-<p>如果在单节点集群中部署Pulsar,则应将<code>conf/broker.conf</code>中的复制设置更新为<code>1</code></p>
+<p>如果在单节点集群中部署Pulsar,您需要把<code>conf/broker.conf</code>文件中的复制设置更新为<code>1</code>。</p>
 <pre><code class="hljs css language-properties"></code></pre>
 </blockquote>
 <h1><a class="anchor" aria-hidden="true" id="number-of-bookies-to-use-when-creating-a-ledger"></a><a href="#number-of-bookies-to-use-when-creating-a-ledger" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9 [...]
@@ -342,7 +342,7 @@ If you want to enable [<span class="hljs-string">Pulsar Functions</span>](<span
 <span class="hljs-code">      ```</span>
 <span class="hljs-code">      </span>
 
-<span class="hljs-section">### 启动 Brokers</span>
+<span class="hljs-section">### 启动 Broker</span>
 
 You can then provide any other configuration changes that you'd like in the [<span class="hljs-string">`conf/broker.conf`</span>](<span class="hljs-link">/docs/zh-CN/2.2.1/reference-configuration#broker</span>) file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.
 
@@ -357,7 +357,7 @@ $ bin/pulsar broker
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-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 2.5S1 [...]
 <p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="/docs/zh-CN/2.2.1/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/zh-CN/2.2.1/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. 这里有一个示例:</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/zh-CN/2.2.1/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -391,7 +391,7 @@ $ bin/pulsar broker
 <p>You will see output as below:</p>
 <pre><code class="hljs css language-shell">hello world!
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/deploy-kubernetes"><span class="arrow-prev">← </span><span>Kubernetes</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/deploy-bare-metal-multi-cluster"><span>裸机多集群部署</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#准备工作">准备工作</a><ul class="toc-headings"><li><a href="#要求">要求</a></li><li><a href=" [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/2.2.1/deploy-kubernetes"><span class="arrow-prev">← </span><span>Kubernetes</span></a><a class="docs-next button" href="/docs/zh-CN/2.2.1/deploy-bare-metal-multi-cluster"><span>裸机多集群部署</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#准备工作">准备工作</a><ul class="toc-headings"><li><a href="#要求">要求</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/functions-api.html b/content/docs/zh-CN/2.2.1/functions-api.html
index aac0c1c..640778a 100644
--- a/content/docs/zh-CN/2.2.1/functions-api.html
+++ b/content/docs/zh-CN/2.2.1/functions-api.html
@@ -471,7 +471,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
 <p>For all key/value pairs passed to Java Pulsar Functions, both the key <em>and</em> the value are <code>String</code>s. If you'd like the value to be of a different type, you will need to deserialize from the <code>String</code> type.</p>
 </blockquote>
 <h3><a class="anchor" aria-hidden="true" id="java-metrics"></a><a href="#java-metrics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 这里有一个示例:</p>
+<p>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 下面是一个示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.functions.api.Context;
 <span class="hljs-keyword">import</span> org.apache.pulsar.functions.api.Function;
 
@@ -559,7 +559,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
 </tbody>
 </table>
 <h3><a class="anchor" aria-hidden="true" id="python-serde"></a><a href="#python-serde" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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 Functions use <a href="#serialization-and-deserialization-serde">SerDe</a> when publishing data to and consuming data from Pulsar topics (this is true of both <a href="#python-native-functions">native</a> functions and <a href="#python-sdk-functions">SDK</a> functions). You can specify the SerDe when <a href="/docs/zh-CN/2.2.1/functions-deploying#cluster-mode">creating</a> or <a href="/docs/zh-CN/2.2.1/functions-deploying#local-run-mode">running</a> functions. 这里有一个示例:</p>
+<p>Pulsar Functions use <a href="#serialization-and-deserialization-serde">SerDe</a> when publishing data to and consuming data from Pulsar topics (this is true of both <a href="#python-native-functions">native</a> functions and <a href="#python-sdk-functions">SDK</a> functions). You can specify the SerDe when <a href="/docs/zh-CN/2.2.1/functions-deploying#cluster-mode">creating</a> or <a href="/docs/zh-CN/2.2.1/functions-deploying#local-run-mode">running</a> functions. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --tenant public \
   --namespace default \
@@ -653,7 +653,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="python-metrics"></a><a href="#python-metrics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 这里有一个示例:</p>
+<p>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 下面是一个示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> pulsar <span class="hljs-keyword">import</span> Function
 
 <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MetricRecorderFunction</span><span class="hljs-params">(Function)</span>:</span>
diff --git a/content/docs/zh-CN/2.2.1/functions-api/index.html b/content/docs/zh-CN/2.2.1/functions-api/index.html
index aac0c1c..640778a 100644
--- a/content/docs/zh-CN/2.2.1/functions-api/index.html
+++ b/content/docs/zh-CN/2.2.1/functions-api/index.html
@@ -471,7 +471,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
 <p>For all key/value pairs passed to Java Pulsar Functions, both the key <em>and</em> the value are <code>String</code>s. If you'd like the value to be of a different type, you will need to deserialize from the <code>String</code> type.</p>
 </blockquote>
 <h3><a class="anchor" aria-hidden="true" id="java-metrics"></a><a href="#java-metrics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 这里有一个示例:</p>
+<p>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 下面是一个示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.functions.api.Context;
 <span class="hljs-keyword">import</span> org.apache.pulsar.functions.api.Function;
 
@@ -559,7 +559,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
 </tbody>
 </table>
 <h3><a class="anchor" aria-hidden="true" id="python-serde"></a><a href="#python-serde" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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 Functions use <a href="#serialization-and-deserialization-serde">SerDe</a> when publishing data to and consuming data from Pulsar topics (this is true of both <a href="#python-native-functions">native</a> functions and <a href="#python-sdk-functions">SDK</a> functions). You can specify the SerDe when <a href="/docs/zh-CN/2.2.1/functions-deploying#cluster-mode">creating</a> or <a href="/docs/zh-CN/2.2.1/functions-deploying#local-run-mode">running</a> functions. 这里有一个示例:</p>
+<p>Pulsar Functions use <a href="#serialization-and-deserialization-serde">SerDe</a> when publishing data to and consuming data from Pulsar topics (this is true of both <a href="#python-native-functions">native</a> functions and <a href="#python-sdk-functions">SDK</a> functions). You can specify the SerDe when <a href="/docs/zh-CN/2.2.1/functions-deploying#cluster-mode">creating</a> or <a href="/docs/zh-CN/2.2.1/functions-deploying#local-run-mode">running</a> functions. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --tenant public \
   --namespace default \
@@ -653,7 +653,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="python-metrics"></a><a href="#python-metrics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 这里有一个示例:</p>
+<p>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 下面是一个示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> pulsar <span class="hljs-keyword">import</span> Function
 
 <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MetricRecorderFunction</span><span class="hljs-params">(Function)</span>:</span>
diff --git a/content/docs/zh-CN/2.2.1/functions-deploying.html b/content/docs/zh-CN/2.2.1/functions-deploying.html
index f4fa192..340265d 100644
--- a/content/docs/zh-CN/2.2.1/functions-deploying.html
+++ b/content/docs/zh-CN/2.2.1/functions-deploying.html
@@ -131,13 +131,13 @@
   --inputs persistent://public/default/input-1 \
   --output persistent://public/default/output-1
 </code></pre>
-<p>By default, the function will connect to a Pulsar cluster running on the same machine, via a local <a href="/docs/zh-CN/2.2.1/reference-terminology#broker">broker</a> service URL of <code>pulsar://localhost:6650</code>. 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 这里有一个示例:</p>
+<p>By default, the function will connect to a Pulsar cluster running on the same machine, via a local <a href="/docs/zh-CN/2.2.1/reference-terminology#broker">broker</a> service URL of <code>pulsar://localhost:6650</code>. 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> localrun \
   --broker-service-url pulsar://my-cluster-host:6650 \
   <span class="hljs-comment"># Other function parameters</span>
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="cluster-mode"></a><a href="#cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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 Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.2.1/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 这里有一个示例:</p>
+<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.2.1/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --py myfunc.py \
   --classname myfunc.SomeFunction \
@@ -154,7 +154,7 @@
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="parallelism"></a><a href="#parallelism" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-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>Pulsar Functions run as processes called <strong>instances</strong>. When you run a Pulsar Function, it runs as a single instance by default (and in <a href="#local-run-mode">local run mode</a> you can <em>only</em> run a single instance of a function).</p>
-<p>You can also specify the <em>parallelism</em> of a function, i.e. the number of instances to run, when you create the function. You can set the parallelism factor using the <code>--parallelism</code> flag of the <a href="/docs/zh-CN/2.2.1/pulsar-admin#functions-create"><code>create</code></a> command. 这里有一个示例:</p>
+<p>You can also specify the <em>parallelism</em> of a function, i.e. the number of instances to run, when you create the function. You can set the parallelism factor using the <code>--parallelism</code> flag of the <a href="/docs/zh-CN/2.2.1/pulsar-admin#functions-create"><code>create</code></a> command. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --parallelism 3 \
   <span class="hljs-comment"># Other function info</span>
diff --git a/content/docs/zh-CN/2.2.1/functions-deploying/index.html b/content/docs/zh-CN/2.2.1/functions-deploying/index.html
index f4fa192..340265d 100644
--- a/content/docs/zh-CN/2.2.1/functions-deploying/index.html
+++ b/content/docs/zh-CN/2.2.1/functions-deploying/index.html
@@ -131,13 +131,13 @@
   --inputs persistent://public/default/input-1 \
   --output persistent://public/default/output-1
 </code></pre>
-<p>By default, the function will connect to a Pulsar cluster running on the same machine, via a local <a href="/docs/zh-CN/2.2.1/reference-terminology#broker">broker</a> service URL of <code>pulsar://localhost:6650</code>. 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 这里有一个示例:</p>
+<p>By default, the function will connect to a Pulsar cluster running on the same machine, via a local <a href="/docs/zh-CN/2.2.1/reference-terminology#broker">broker</a> service URL of <code>pulsar://localhost:6650</code>. 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> localrun \
   --broker-service-url pulsar://my-cluster-host:6650 \
   <span class="hljs-comment"># Other function parameters</span>
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="cluster-mode"></a><a href="#cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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 Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.2.1/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 这里有一个示例:</p>
+<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.2.1/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --py myfunc.py \
   --classname myfunc.SomeFunction \
@@ -154,7 +154,7 @@
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="parallelism"></a><a href="#parallelism" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-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>Pulsar Functions run as processes called <strong>instances</strong>. When you run a Pulsar Function, it runs as a single instance by default (and in <a href="#local-run-mode">local run mode</a> you can <em>only</em> run a single instance of a function).</p>
-<p>You can also specify the <em>parallelism</em> of a function, i.e. the number of instances to run, when you create the function. You can set the parallelism factor using the <code>--parallelism</code> flag of the <a href="/docs/zh-CN/2.2.1/pulsar-admin#functions-create"><code>create</code></a> command. 这里有一个示例:</p>
+<p>You can also specify the <em>parallelism</em> of a function, i.e. the number of instances to run, when you create the function. You can set the parallelism factor using the <code>--parallelism</code> flag of the <a href="/docs/zh-CN/2.2.1/pulsar-admin#functions-create"><code>create</code></a> command. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --parallelism 3 \
   <span class="hljs-comment"># Other function info</span>
diff --git a/content/docs/zh-CN/2.2.1/functions-overview.html b/content/docs/zh-CN/2.2.1/functions-overview.html
index a559752..7633e86 100644
--- a/content/docs/zh-CN/2.2.1/functions-overview.html
+++ b/content/docs/zh-CN/2.2.1/functions-overview.html
@@ -203,7 +203,7 @@
 <li>基于 <a href="#command-line-interface">命令行参数</a>通过 <a href="/docs/zh-CN/2.2.1/pulsar-admin#functions">pulsar-admin functions</code></a> 接口</li>
 <li>基于<a href="http://yaml.org/">yaml</a> 配置文件</li>
 </ul>
-<p>If you're supplying a YAML configuration, you must specify a path to the file on the command line. 这里有一个示例:</p>
+<p>If you're supplying a YAML configuration, you must specify a path to the file on the command line. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --<span class="hljs-keyword">function</span>-config-file ./my-function.yaml
 </code></pre>
@@ -297,13 +297,13 @@
   --inputs persistent://public/default/input-1 \
   --output persistent://public/default/output-1
 </code></pre>
-<p>默认情况下,函数连接到同一机器上运行的 Pulsar 集群通过本地的broker服务,URL是 <code>pulsar://localhost:6650</code>。 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 这里有一个示例:</p>
+<p>默认情况下,函数连接到同一机器上运行的 Pulsar 集群通过本地的broker服务,URL是 <code>pulsar://localhost:6650</code>。 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> localrun \
   --broker-service-url pulsar://my-cluster-host:6650 \
   <span class="hljs-comment"># Other function parameters</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="cluster-run-mode"></a><a href="#cluster-run-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
-<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.2.1/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 这里有一个示例:</p>
+<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.2.1/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --py myfunc.py \
   --classname myfunc.SomeFunction \
diff --git a/content/docs/zh-CN/2.2.1/functions-overview/index.html b/content/docs/zh-CN/2.2.1/functions-overview/index.html
index a559752..7633e86 100644
--- a/content/docs/zh-CN/2.2.1/functions-overview/index.html
+++ b/content/docs/zh-CN/2.2.1/functions-overview/index.html
@@ -203,7 +203,7 @@
 <li>基于 <a href="#command-line-interface">命令行参数</a>通过 <a href="/docs/zh-CN/2.2.1/pulsar-admin#functions">pulsar-admin functions</code></a> 接口</li>
 <li>基于<a href="http://yaml.org/">yaml</a> 配置文件</li>
 </ul>
-<p>If you're supplying a YAML configuration, you must specify a path to the file on the command line. 这里有一个示例:</p>
+<p>If you're supplying a YAML configuration, you must specify a path to the file on the command line. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --<span class="hljs-keyword">function</span>-config-file ./my-function.yaml
 </code></pre>
@@ -297,13 +297,13 @@
   --inputs persistent://public/default/input-1 \
   --output persistent://public/default/output-1
 </code></pre>
-<p>默认情况下,函数连接到同一机器上运行的 Pulsar 集群通过本地的broker服务,URL是 <code>pulsar://localhost:6650</code>。 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 这里有一个示例:</p>
+<p>默认情况下,函数连接到同一机器上运行的 Pulsar 集群通过本地的broker服务,URL是 <code>pulsar://localhost:6650</code>。 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> localrun \
   --broker-service-url pulsar://my-cluster-host:6650 \
   <span class="hljs-comment"># Other function parameters</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="cluster-run-mode"></a><a href="#cluster-run-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
-<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.2.1/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 这里有一个示例:</p>
+<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/2.2.1/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --py myfunc.py \
   --classname myfunc.SomeFunction \
diff --git a/content/docs/zh-CN/2.2.1/functions-quickstart.html b/content/docs/zh-CN/2.2.1/functions-quickstart.html
index 3343ad8..26a2792 100644
--- a/content/docs/zh-CN/2.2.1/functions-quickstart.html
+++ b/content/docs/zh-CN/2.2.1/functions-quickstart.html
@@ -250,7 +250,7 @@ $ touch <span class="hljs-built_in">reverse</span>.py
   --namespace default \
   --name reverse
 </code></pre>
-<p>If you see <code>Created successfully</code>, the function is ready to accept incoming messages. Because the function is running in cluster mode, we can <strong>trigger</strong> the function using the <a href="/docs/zh-CN/2.2.1/pulsar-admin#trigger"><code>trigger</code></a> command. This command will send a message that we specify to the function and also give us the function's output. 这里有一个示例:</p>
+<p>If you see <code>Created successfully</code>, the function is ready to accept incoming messages. Because the function is running in cluster mode, we can <strong>trigger</strong> the function using the <a href="/docs/zh-CN/2.2.1/pulsar-admin#trigger"><code>trigger</code></a> command. This command will send a message that we specify to the function and also give us the function's output. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger \
   --name reverse \
   --tenant public \
diff --git a/content/docs/zh-CN/2.2.1/functions-quickstart/index.html b/content/docs/zh-CN/2.2.1/functions-quickstart/index.html
index 3343ad8..26a2792 100644
--- a/content/docs/zh-CN/2.2.1/functions-quickstart/index.html
+++ b/content/docs/zh-CN/2.2.1/functions-quickstart/index.html
@@ -250,7 +250,7 @@ $ touch <span class="hljs-built_in">reverse</span>.py
   --namespace default \
   --name reverse
 </code></pre>
-<p>If you see <code>Created successfully</code>, the function is ready to accept incoming messages. Because the function is running in cluster mode, we can <strong>trigger</strong> the function using the <a href="/docs/zh-CN/2.2.1/pulsar-admin#trigger"><code>trigger</code></a> command. This command will send a message that we specify to the function and also give us the function's output. 这里有一个示例:</p>
+<p>If you see <code>Created successfully</code>, the function is ready to accept incoming messages. Because the function is running in cluster mode, we can <strong>trigger</strong> the function using the <a href="/docs/zh-CN/2.2.1/pulsar-admin#trigger"><code>trigger</code></a> command. This command will send a message that we specify to the function and also give us the function's output. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger \
   --name reverse \
   --tenant public \
diff --git a/content/docs/zh-CN/2.2.1/standalone.html b/content/docs/zh-CN/2.2.1/standalone.html
index c156cb4..e759c6c 100644
--- a/content/docs/zh-CN/2.2.1/standalone.html
+++ b/content/docs/zh-CN/2.2.1/standalone.html
@@ -163,7 +163,7 @@ pulsar-io-twitter-2.3.0.nar
 <ul>
 <li><p>通过单击下面的链接并从 Apache 镜像下载该版本:</p>
 <ul>
-<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-offloaders-2.3.0-bin.tar.gz" download>Pulsar Tiered Storage Offloaders 2.3.0 release</a></li>
+<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-offloaders-2.3.0-bin.tar.gz" download>Pulsar 分层存储下载器 2.3.0 版本</a></li>
 </ul></li>
 <li><p>从Pulsar <a href="/download">下载页</a></p></li>
 <li><p>from the Pulsar <a href="https://github.com/apache/pulsar/releases/latest">releases page</a></p></li>
@@ -182,7 +182,7 @@ $ mv apache-pulsar-offloaders-2.3.0/offloaders offloaders
 $ ls offloaders
 tiered-storage-jcloud-2.3.0.nar
 </code></pre>
-<p>有关如何配置分层存储功能的更多详细信息,可以参考此<a href="/docs/zh-CN/2.2.1/cookbooks-tiered-storage">分层存储手册</a></p>
+<p>有关如何配置分层存储功能的更多详细信息,参考<a href="/docs/zh-CN/2.2.1/cookbooks-tiered-storage">分层存储手册</a>。</p>
 <blockquote>
 <h4><a class="anchor" aria-hidden="true" id="注意-1"></a><a href="#注意-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <p>If you are running Pulsar in a bare metal cluster, you need to make sure <code>offloaders</code> tarball is unzipped in every broker's pulsar directory</p>
diff --git a/content/docs/zh-CN/2.2.1/standalone/index.html b/content/docs/zh-CN/2.2.1/standalone/index.html
index c156cb4..e759c6c 100644
--- a/content/docs/zh-CN/2.2.1/standalone/index.html
+++ b/content/docs/zh-CN/2.2.1/standalone/index.html
@@ -163,7 +163,7 @@ pulsar-io-twitter-2.3.0.nar
 <ul>
 <li><p>通过单击下面的链接并从 Apache 镜像下载该版本:</p>
 <ul>
-<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-offloaders-2.3.0-bin.tar.gz" download>Pulsar Tiered Storage Offloaders 2.3.0 release</a></li>
+<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-offloaders-2.3.0-bin.tar.gz" download>Pulsar 分层存储下载器 2.3.0 版本</a></li>
 </ul></li>
 <li><p>从Pulsar <a href="/download">下载页</a></p></li>
 <li><p>from the Pulsar <a href="https://github.com/apache/pulsar/releases/latest">releases page</a></p></li>
@@ -182,7 +182,7 @@ $ mv apache-pulsar-offloaders-2.3.0/offloaders offloaders
 $ ls offloaders
 tiered-storage-jcloud-2.3.0.nar
 </code></pre>
-<p>有关如何配置分层存储功能的更多详细信息,可以参考此<a href="/docs/zh-CN/2.2.1/cookbooks-tiered-storage">分层存储手册</a></p>
+<p>有关如何配置分层存储功能的更多详细信息,参考<a href="/docs/zh-CN/2.2.1/cookbooks-tiered-storage">分层存储手册</a>。</p>
 <blockquote>
 <h4><a class="anchor" aria-hidden="true" id="注意-1"></a><a href="#注意-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <p>If you are running Pulsar in a bare metal cluster, you need to make sure <code>offloaders</code> tarball is unzipped in every broker's pulsar directory</p>
diff --git a/content/docs/zh-CN/admin-api-partitioned-topics.html b/content/docs/zh-CN/admin-api-partitioned-topics.html
index 6b35e0e..b396262 100644
--- a/content/docs/zh-CN/admin-api-partitioned-topics.html
+++ b/content/docs/zh-CN/admin-api-partitioned-topics.html
@@ -78,7 +78,7 @@
 <h3><a class="anchor" aria-hidden="true" id="创建"></a><a href="#创建" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c [...]
 <p>Partitioned topics in Pulsar must be explicitly created. When creating a new partitioned topic you need to provide a name for the topic as well as the desired number of partitions.</p>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-admin"></a><a href="#pulsar-admin" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>你可以使用<a href="/docs/zh-CN/pulsar-admin#create-partitioned-topic"><code>create-partitioned-topic</code></a>命令创建partitioned topic,并指定topic的名字;使用<code>-p</code> 或 <code>--partitions</code>标志指定分区数。 这里有一个示例:</p>
+<p>你可以使用<a href="/docs/zh-CN/pulsar-admin#create-partitioned-topic"><code>create-partitioned-topic</code></a>命令创建partitioned topic,并指定topic的名字;使用<code>-p</code> 或 <code>--partitions</code>标志指定分区数。 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin topics create-partitioned-topic \</span>
   persistent://my-tenant/my-namespace/my-topic \
   --partitions 4
@@ -116,7 +116,7 @@ admin.topics().createNonPartitionedTopic(topicName);
 </tbody>
 </table>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-admin-2"></a><a href="#pulsar-admin-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
-<p>You can see the number of partitions in a partitioned topic using the <a href="/docs/zh-CN/pulsar-admin#get-partitioned-topic-metadata"><code>get-partitioned-topic-metadata</code></a> subcommand. 这里有一个示例:</p>
+<p>You can see the number of partitions in a partitioned topic using the <a href="/docs/zh-CN/pulsar-admin#get-partitioned-topic-metadata"><code>get-partitioned-topic-metadata</code></a> subcommand. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics get-partitioned-topic-metadata \</span>
   persistent://my-tenant/my-namespace/my-topic
 {
diff --git a/content/docs/zh-CN/admin-api-partitioned-topics/index.html b/content/docs/zh-CN/admin-api-partitioned-topics/index.html
index 6b35e0e..b396262 100644
--- a/content/docs/zh-CN/admin-api-partitioned-topics/index.html
+++ b/content/docs/zh-CN/admin-api-partitioned-topics/index.html
@@ -78,7 +78,7 @@
 <h3><a class="anchor" aria-hidden="true" id="创建"></a><a href="#创建" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c [...]
 <p>Partitioned topics in Pulsar must be explicitly created. When creating a new partitioned topic you need to provide a name for the topic as well as the desired number of partitions.</p>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-admin"></a><a href="#pulsar-admin" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>你可以使用<a href="/docs/zh-CN/pulsar-admin#create-partitioned-topic"><code>create-partitioned-topic</code></a>命令创建partitioned topic,并指定topic的名字;使用<code>-p</code> 或 <code>--partitions</code>标志指定分区数。 这里有一个示例:</p>
+<p>你可以使用<a href="/docs/zh-CN/pulsar-admin#create-partitioned-topic"><code>create-partitioned-topic</code></a>命令创建partitioned topic,并指定topic的名字;使用<code>-p</code> 或 <code>--partitions</code>标志指定分区数。 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin topics create-partitioned-topic \</span>
   persistent://my-tenant/my-namespace/my-topic \
   --partitions 4
@@ -116,7 +116,7 @@ admin.topics().createNonPartitionedTopic(topicName);
 </tbody>
 </table>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-admin-2"></a><a href="#pulsar-admin-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
-<p>You can see the number of partitions in a partitioned topic using the <a href="/docs/zh-CN/pulsar-admin#get-partitioned-topic-metadata"><code>get-partitioned-topic-metadata</code></a> subcommand. 这里有一个示例:</p>
+<p>You can see the number of partitions in a partitioned topic using the <a href="/docs/zh-CN/pulsar-admin#get-partitioned-topic-metadata"><code>get-partitioned-topic-metadata</code></a> subcommand. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics get-partitioned-topic-metadata \</span>
   persistent://my-tenant/my-namespace/my-topic
 {
diff --git a/content/docs/zh-CN/administration-proxy.html b/content/docs/zh-CN/administration-proxy.html
index 929921e..3818f27 100644
--- a/content/docs/zh-CN/administration-proxy.html
+++ b/content/docs/zh-CN/administration-proxy.html
@@ -71,22 +71,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">The Pulsar proxy</h1></header><article><div><span><p><a href="/docs/zh-CN/concepts-architecture-overview#pulsar-proxy">Pulsar代理</a>是一个可选的网关,你可以在Pulsar集群中的brokers之前运行它们。 建议在客户端和Pulsar broker [...]
-<h2><a class="anchor" aria-hidden="true" id="pulsar-代理的配置"></a><a href="#pulsar-代理的配置" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>代理必须有办法来找到集群中brokers的地址。 你可以通过配置代理来直接连接到服务发现,或者在配置中指定broker URL。</p>
+<h2><a class="anchor" aria-hidden="true" id="配置pulsar-代理"></a><a href="#配置pulsar-代理" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-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>代理一定有办法来找到集群中brokers的地址。 你可以通过配置代理来直接连接到服务发现,或者在配置中指定broker URL。</p>
 <h3><a class="anchor" aria-hidden="true" id="选项-1-使用服务发现"></a><a href="#选项-1-使用服务发现" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42 [...]
 <p>Pulsar uses <a href="https://zookeeper.apache.org">ZooKeeper</a> for service discovery. To connect the proxy to ZooKeeper, specify the following in <code>conf/proxy.conf</code>.</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk-0,zk-1,zk-2</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk-0:2184,zk-remote:2184</span>
 </code></pre>
 <blockquote>
-<p>如果使用服务发现,则网络ACL必须允许代理与ZooKeeper客户端端口(通常为2181)及配置存储客户端端口(默认为2184)上的ZooKeeper节点通信。 打开网络ACLs意味着如果有人破坏了代理,那么他们可以完全访问ZooKeeper。 因此,使用 broker URLs 配置代理更安全。</p>
+<p>如果使用服务发现,网络ACL必须允许代理与ZooKeeper客户端端口(通常为2181) 及配置存储客户端端口(默认为2184) 上的ZooKeeper节点通信。 打开网络ACLs意味着如果有人破坏了代理,那么他们可以完全访问ZooKeeper。 因此,使用 broker URLs 配置代理更安全。</p>
 </blockquote>
 <h3><a class="anchor" aria-hidden="true" id="选项2-使用broker-urls"></a><a href="#选项2-使用broker-urls" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
 <p>配置代理的更安全的方法是指定连接到brokers的URL。</p>
 <blockquote>
-<p>代理上的<a href="security-authorization#enabling-authorization-and-assigning-superusers">授权</a>需要访问ZooKeeper,因此如果你使用 broker URLs连接到brokers,则应该禁用代理级别授权。 代理转发请求之后,Brokers仍然会授权请求。</p>
+<p>代理上的<a href="security-authorization#enabling-authorization-and-assigning-superusers">授权</a>需要访问ZooKeeper,所以如果您使用 broker URLs连接到brokers,就应该禁用代理级别授权。 代理转发请求之后,Brokers仍然会授权请求。</p>
 </blockquote>
-<p>你可以在 <code>conf/proxy.conf</code>中配置broker URLs,如下所示。</p>
+<p>您可以在 <code>conf/proxy.conf</code>中配置broker URLs,如下所示。</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">brokerServiceURL</span>=<span class="hljs-string">pulsar://brokers.example.com:6650</span>
 <span class="hljs-attr">brokerWebServiceURL</span>=<span class="hljs-string">http://brokers.example.com:8080</span>
 <span class="hljs-attr">functionWorkerWebServiceURL</span>=<span class="hljs-string">http://function-workers.example.com:8080</span>
@@ -146,7 +146,7 @@ $ bin/pulsar proxy
 <tr><td>tlsRequireTrustedClientCertOnConnect</td><td>Whether client certificates are required for TLS. Connections are rejected if the client certificate isn’t trusted.</td><td>false</td></tr>
 </tbody>
 </table>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/administration-load-distribution"><span class="arrow-prev">← </span><span>Load distribution</span></a><a class="docs-next button" href="/docs/zh-CN/security-overview"><span>概述</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#pulsar-代理的配置">Pulsar 代理的配置</a><ul class="toc-headings"><li><a href="#选项-1-使用服务发现">选项 1:使用服 [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/administration-load-distribution"><span class="arrow-prev">← </span><span>Load distribution</span></a><a class="docs-next button" href="/docs/zh-CN/security-overview"><span>概述</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#配置pulsar-代理">配置Pulsar 代理</a><ul class="toc-headings"><li><a href="#选项-1-使用服务发现">选项 1:使用服务发 [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/administration-proxy/index.html b/content/docs/zh-CN/administration-proxy/index.html
index 929921e..3818f27 100644
--- a/content/docs/zh-CN/administration-proxy/index.html
+++ b/content/docs/zh-CN/administration-proxy/index.html
@@ -71,22 +71,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">The Pulsar proxy</h1></header><article><div><span><p><a href="/docs/zh-CN/concepts-architecture-overview#pulsar-proxy">Pulsar代理</a>是一个可选的网关,你可以在Pulsar集群中的brokers之前运行它们。 建议在客户端和Pulsar broker [...]
-<h2><a class="anchor" aria-hidden="true" id="pulsar-代理的配置"></a><a href="#pulsar-代理的配置" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>代理必须有办法来找到集群中brokers的地址。 你可以通过配置代理来直接连接到服务发现,或者在配置中指定broker URL。</p>
+<h2><a class="anchor" aria-hidden="true" id="配置pulsar-代理"></a><a href="#配置pulsar-代理" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-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>代理一定有办法来找到集群中brokers的地址。 你可以通过配置代理来直接连接到服务发现,或者在配置中指定broker URL。</p>
 <h3><a class="anchor" aria-hidden="true" id="选项-1-使用服务发现"></a><a href="#选项-1-使用服务发现" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42 [...]
 <p>Pulsar uses <a href="https://zookeeper.apache.org">ZooKeeper</a> for service discovery. To connect the proxy to ZooKeeper, specify the following in <code>conf/proxy.conf</code>.</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk-0,zk-1,zk-2</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk-0:2184,zk-remote:2184</span>
 </code></pre>
 <blockquote>
-<p>如果使用服务发现,则网络ACL必须允许代理与ZooKeeper客户端端口(通常为2181)及配置存储客户端端口(默认为2184)上的ZooKeeper节点通信。 打开网络ACLs意味着如果有人破坏了代理,那么他们可以完全访问ZooKeeper。 因此,使用 broker URLs 配置代理更安全。</p>
+<p>如果使用服务发现,网络ACL必须允许代理与ZooKeeper客户端端口(通常为2181) 及配置存储客户端端口(默认为2184) 上的ZooKeeper节点通信。 打开网络ACLs意味着如果有人破坏了代理,那么他们可以完全访问ZooKeeper。 因此,使用 broker URLs 配置代理更安全。</p>
 </blockquote>
 <h3><a class="anchor" aria-hidden="true" id="选项2-使用broker-urls"></a><a href="#选项2-使用broker-urls" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
 <p>配置代理的更安全的方法是指定连接到brokers的URL。</p>
 <blockquote>
-<p>代理上的<a href="security-authorization#enabling-authorization-and-assigning-superusers">授权</a>需要访问ZooKeeper,因此如果你使用 broker URLs连接到brokers,则应该禁用代理级别授权。 代理转发请求之后,Brokers仍然会授权请求。</p>
+<p>代理上的<a href="security-authorization#enabling-authorization-and-assigning-superusers">授权</a>需要访问ZooKeeper,所以如果您使用 broker URLs连接到brokers,就应该禁用代理级别授权。 代理转发请求之后,Brokers仍然会授权请求。</p>
 </blockquote>
-<p>你可以在 <code>conf/proxy.conf</code>中配置broker URLs,如下所示。</p>
+<p>您可以在 <code>conf/proxy.conf</code>中配置broker URLs,如下所示。</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">brokerServiceURL</span>=<span class="hljs-string">pulsar://brokers.example.com:6650</span>
 <span class="hljs-attr">brokerWebServiceURL</span>=<span class="hljs-string">http://brokers.example.com:8080</span>
 <span class="hljs-attr">functionWorkerWebServiceURL</span>=<span class="hljs-string">http://function-workers.example.com:8080</span>
@@ -146,7 +146,7 @@ $ bin/pulsar proxy
 <tr><td>tlsRequireTrustedClientCertOnConnect</td><td>Whether client certificates are required for TLS. Connections are rejected if the client certificate isn’t trusted.</td><td>false</td></tr>
 </tbody>
 </table>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/administration-load-distribution"><span class="arrow-prev">← </span><span>Load distribution</span></a><a class="docs-next button" href="/docs/zh-CN/security-overview"><span>概述</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#pulsar-代理的配置">Pulsar 代理的配置</a><ul class="toc-headings"><li><a href="#选项-1-使用服务发现">选项 1:使用服 [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/administration-load-distribution"><span class="arrow-prev">← </span><span>Load distribution</span></a><a class="docs-next button" href="/docs/zh-CN/security-overview"><span>概述</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#配置pulsar-代理">配置Pulsar 代理</a><ul class="toc-headings"><li><a href="#选项-1-使用服务发现">选项 1:使用服务发 [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/client-libraries-go.html b/content/docs/zh-CN/client-libraries-go.html
index f6251d5..96513dc 100644
--- a/content/docs/zh-CN/client-libraries-go.html
+++ b/content/docs/zh-CN/client-libraries-go.html
@@ -104,7 +104,7 @@
 <pre><code class="hljs css language-http">pulsar+ssl://pulsar.us-west.example.com:6651
 </code></pre>
 <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>In order to interact with Pulsar, you'll first need a <code>Client</code> object. You can create a client object using the <code>NewClient</code> function, passing in a <code>ClientOptions</code> object (more on configuration <a href="#client-configuration">below</a>). 这里有一个示例:</p>
+<p>In order to interact with Pulsar, you'll first need a <code>Client</code> object. You can create a client object using the <code>NewClient</code> function, passing in a <code>ClientOptions</code> object (more on configuration <a href="#client-configuration">below</a>). 下面是一个示例:</p>
 <pre><code class="hljs css language-go"><span class="hljs-keyword">import</span> (
     <span class="hljs-string">"log"</span>
     <span class="hljs-string">"runtime"</span>
@@ -143,7 +143,7 @@
 </tbody>
 </table>
 <h2><a class="anchor" aria-hidden="true" id="producers"></a><a href="#producers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>Pulsar producers publish messages to Pulsar topics. You can <a href="#producer-configuration">configure</a> Go producers using a <code>ProducerOptions</code> object. 这里有一个示例:</p>
+<p>Pulsar producers publish messages to Pulsar topics. You can <a href="#producer-configuration">configure</a> Go producers using a <code>ProducerOptions</code> object. 下面是一个示例:</p>
 <pre><code class="hljs css language-go">producer, err := client.CreateProducer(pulsar.ProducerOptions{
     Topic: <span class="hljs-string">"my-topic"</span>,
 })
@@ -358,7 +358,7 @@ consumer, err := client.Subscribe(consumerOpts)
 </tbody>
 </table>
 <h2><a class="anchor" aria-hidden="true" id="readers"></a><a href="#readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
-<p>Pulsar readers process messages from Pulsar topics. Readers are different from consumers because with readers you need to explicitly specify which message in the stream you want to begin with (consumers, on the other hand, automatically begin with the most recent unacked message). You can <a href="#reader-configuration">configure</a> Go readers using a <code>ReaderOptions</code> object. 这里有一个示例:</p>
+<p>Pulsar readers process messages from Pulsar topics. Readers are different from consumers because with readers you need to explicitly specify which message in the stream you want to begin with (consumers, on the other hand, automatically begin with the most recent unacked message). You can <a href="#reader-configuration">configure</a> Go readers using a <code>ReaderOptions</code> object. 下面是一个示例:</p>
 <pre><code class="hljs css language-go">reader, err := client.CreateReader(pulsar.ReaderOptions{
     Topic: <span class="hljs-string">"my-golang-topic"</span>,
     StartMessageId: pulsar.LatestMessage,
@@ -418,7 +418,7 @@ consumer, err := client.Subscribe(consumerOpts)
     }
 }
 </code></pre>
-<p>In the example above, the reader begins reading from the earliest available message (specified by <code>pulsar.EarliestMessage</code>). The reader can also begin reading from the latest message (<code>pulsar.LatestMessage</code>) or some other message ID specified by bytes using the <code>DeserializeMessageID</code> function, which takes a byte array and returns a <code>MessageID</code> object. 这里有一个示例:</p>
+<p>In the example above, the reader begins reading from the earliest available message (specified by <code>pulsar.EarliestMessage</code>). The reader can also begin reading from the latest message (<code>pulsar.LatestMessage</code>) or some other message ID specified by bytes using the <code>DeserializeMessageID</code> function, which takes a byte array and returns a <code>MessageID</code> object. 下面是一个示例:</p>
 <pre><code class="hljs css language-go">lastSavedId := <span class="hljs-comment">// Read last saved message id from external store as byte[]</span>
 
 reader, err := client.CreateReader(pulsar.ReaderOptions{
@@ -476,7 +476,7 @@ reader, err := client.CreateReader(pulsar.ReaderOptions{
 <li>Set <code>TLSTrustCertsFilePath</code> to the path to the TLS certs used by your client and the Pulsar broker</li>
 <li>Configure <code>Authentication</code> option</li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-go">opts := pulsar.ClientOptions{
     URL: <span class="hljs-string">"pulsar+ssl://my-cluster.com:6651"</span>,
     TLSTrustCertsFilePath: <span class="hljs-string">"/path/to/certs/my-cert.csr"</span>,
diff --git a/content/docs/zh-CN/client-libraries-go/index.html b/content/docs/zh-CN/client-libraries-go/index.html
index f6251d5..96513dc 100644
--- a/content/docs/zh-CN/client-libraries-go/index.html
+++ b/content/docs/zh-CN/client-libraries-go/index.html
@@ -104,7 +104,7 @@
 <pre><code class="hljs css language-http">pulsar+ssl://pulsar.us-west.example.com:6651
 </code></pre>
 <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>In order to interact with Pulsar, you'll first need a <code>Client</code> object. You can create a client object using the <code>NewClient</code> function, passing in a <code>ClientOptions</code> object (more on configuration <a href="#client-configuration">below</a>). 这里有一个示例:</p>
+<p>In order to interact with Pulsar, you'll first need a <code>Client</code> object. You can create a client object using the <code>NewClient</code> function, passing in a <code>ClientOptions</code> object (more on configuration <a href="#client-configuration">below</a>). 下面是一个示例:</p>
 <pre><code class="hljs css language-go"><span class="hljs-keyword">import</span> (
     <span class="hljs-string">"log"</span>
     <span class="hljs-string">"runtime"</span>
@@ -143,7 +143,7 @@
 </tbody>
 </table>
 <h2><a class="anchor" aria-hidden="true" id="producers"></a><a href="#producers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>Pulsar producers publish messages to Pulsar topics. You can <a href="#producer-configuration">configure</a> Go producers using a <code>ProducerOptions</code> object. 这里有一个示例:</p>
+<p>Pulsar producers publish messages to Pulsar topics. You can <a href="#producer-configuration">configure</a> Go producers using a <code>ProducerOptions</code> object. 下面是一个示例:</p>
 <pre><code class="hljs css language-go">producer, err := client.CreateProducer(pulsar.ProducerOptions{
     Topic: <span class="hljs-string">"my-topic"</span>,
 })
@@ -358,7 +358,7 @@ consumer, err := client.Subscribe(consumerOpts)
 </tbody>
 </table>
 <h2><a class="anchor" aria-hidden="true" id="readers"></a><a href="#readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
-<p>Pulsar readers process messages from Pulsar topics. Readers are different from consumers because with readers you need to explicitly specify which message in the stream you want to begin with (consumers, on the other hand, automatically begin with the most recent unacked message). You can <a href="#reader-configuration">configure</a> Go readers using a <code>ReaderOptions</code> object. 这里有一个示例:</p>
+<p>Pulsar readers process messages from Pulsar topics. Readers are different from consumers because with readers you need to explicitly specify which message in the stream you want to begin with (consumers, on the other hand, automatically begin with the most recent unacked message). You can <a href="#reader-configuration">configure</a> Go readers using a <code>ReaderOptions</code> object. 下面是一个示例:</p>
 <pre><code class="hljs css language-go">reader, err := client.CreateReader(pulsar.ReaderOptions{
     Topic: <span class="hljs-string">"my-golang-topic"</span>,
     StartMessageId: pulsar.LatestMessage,
@@ -418,7 +418,7 @@ consumer, err := client.Subscribe(consumerOpts)
     }
 }
 </code></pre>
-<p>In the example above, the reader begins reading from the earliest available message (specified by <code>pulsar.EarliestMessage</code>). The reader can also begin reading from the latest message (<code>pulsar.LatestMessage</code>) or some other message ID specified by bytes using the <code>DeserializeMessageID</code> function, which takes a byte array and returns a <code>MessageID</code> object. 这里有一个示例:</p>
+<p>In the example above, the reader begins reading from the earliest available message (specified by <code>pulsar.EarliestMessage</code>). The reader can also begin reading from the latest message (<code>pulsar.LatestMessage</code>) or some other message ID specified by bytes using the <code>DeserializeMessageID</code> function, which takes a byte array and returns a <code>MessageID</code> object. 下面是一个示例:</p>
 <pre><code class="hljs css language-go">lastSavedId := <span class="hljs-comment">// Read last saved message id from external store as byte[]</span>
 
 reader, err := client.CreateReader(pulsar.ReaderOptions{
@@ -476,7 +476,7 @@ reader, err := client.CreateReader(pulsar.ReaderOptions{
 <li>Set <code>TLSTrustCertsFilePath</code> to the path to the TLS certs used by your client and the Pulsar broker</li>
 <li>Configure <code>Authentication</code> option</li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-go">opts := pulsar.ClientOptions{
     URL: <span class="hljs-string">"pulsar+ssl://my-cluster.com:6651"</span>,
     TLSTrustCertsFilePath: <span class="hljs-string">"/path/to/certs/my-cert.csr"</span>,
diff --git a/content/docs/zh-CN/client-libraries-java.html b/content/docs/zh-CN/client-libraries-java.html
index 96f3204..be65c07 100644
--- a/content/docs/zh-CN/client-libraries-java.html
+++ b/content/docs/zh-CN/client-libraries-java.html
@@ -167,7 +167,7 @@ client.close();</p>
    })<span class="hljs-comment">;</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="生产者配置"></a><a href="#生产者配置" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
-<p>如果实例化 <code>生产者</code> 对象时仅指定主题topic名称 (如上面的示例所示), 则生产者将使用默认配置。 要使用非默认配置, 你可以设置多种可配置的参数。 有关完整列表, 请参阅 {@inject javadoc:ProducerBuilder:/client/org/apache/pulsar/client/api/ProducerBuilder} 类javadoc文档。 这里有一个示例:</p>
+<p>如果实例化 <code>生产者</code> 对象时仅指定主题topic名称 (如上面的示例所示), 则生产者将使用默认配置。 要使用非默认配置, 你可以设置多种可配置的参数。 有关完整列表, 请参阅 {@inject javadoc:ProducerBuilder:/client/org/apache/pulsar/client/api/ProducerBuilder} 类javadoc文档。 下面是一个示例:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
     .topic(<span class="hljs-string">"my-topic"</span>)
     .batchingMaxPublishDelay(<span class="hljs-number">10</span>, TimeUnit.MILLISECONDS)
@@ -219,7 +219,7 @@ client.close();</p>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="消费者配置"></a><a href="#消费者配置" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
 <p>如果实例化 <code>消费者</code> 对象, 仅指定主题和订阅名称, 如上面的示例所示, 消费者将采用默认配置。 要使用非默认配置, 你可以设置多种可配置的参数。 有关完整列表, 请参阅 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/ConsumerBuilder">ConsumerBuilder</a>
-类javadoc文档。 这里有一个示例:</p>
+类javadoc文档。 下面是一个示例:</p>
 <p>这是一个示例配置:</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
@@ -230,7 +230,7 @@ client.close();</p>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="异步接收"></a><a href="#异步接收" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <p><code>receive</code>方法将异步接受消息(消费者处理器将被阻塞,直到有消息到达)。 你也可以使用<a href="concepts-messaging.md#receive-modes">异步接收方法</a>,这将在一个新消息到达时立即返回一个<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>对象。</p>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>异步接收操作返回一个包装在<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>中的{@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message}消息对象。</p>
@@ -279,7 +279,7 @@ Consumer multiTopicConsumer = consumerBuilder
         )
         .subscribe();
 </code></pre>
-<p>You can also subscribe to multiple topics asynchronously using the <code>subscribeAsync</code> method rather than the synchronous <code>subscribe</code> method. 这里有一个示例:</p>
+<p>You can also subscribe to multiple topics asynchronously using the <code>subscribeAsync</code> method rather than the synchronous <code>subscribe</code> method. 下面是一个示例:</p>
 <pre><code class="hljs css language-java">Pattern allTopicsInNamespace = Pattern.compile(<span class="hljs-string">"persistent://public/default.*"</span>);
 consumerBuilder
         .topics(topics)
@@ -300,7 +300,7 @@ consumerBuilder
 和 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 /api/ReaderConfiguration}来创建<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 。</p>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">ReaderConfiguration conf = <span class="hljs-keyword">new</span> ReaderConfiguration();
 <span class="hljs-keyword">byte</span>[] msgIdBytes = <span class="hljs-comment">// 一些消息ID 的字节数组</span>
 MessageId id = MessageId.fromByteArray(msgIdBytes);
@@ -317,7 +317,7 @@ Reader reader = pulsarClient.newReader()
 <p>在上面的示例中,实例化一个<code>Reader</code>对象对指定的主题和消息(ID); reader将遍历主题中<code>msgIdBytes</code>(取值方式取决于应用程序) 之后的消息。</p>
 <p>上面的示例代码展示了<code>Reader</code>对象指向特定的消息(ID),但你也可以使用<code>MessageId.earliest</code>来指向topic上最早可用的消息,使用<code>MessageId.latest</code>指向最新的消息。</p>
 <h2><a class="anchor" aria-hidden="true" id="schema"></a><a href="#schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="concepts-schema-registry.md">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 这里有一个示例:</p>
+<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="concepts-schema-registry.md">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 下面是一个示例:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
@@ -367,7 +367,7 @@ Reader reader = pulsarClient.newReader()
     .topic(<span class="hljs-string">"some-string-topic"</span>)
     .create();
 </code></pre></li>
-<li><p>JSON schemas can be created for POJOs using the <code>JSONSchema</code> class. 这里有一个示例:</p>
+<li><p>JSON schemas can be created for POJOs using the <code>JSONSchema</code> class. 下面是一个示例:</p>
 <pre><code class="hljs css language-java">Schema&lt;MyPojo&gt; pojoSchema = JSONSchema.of(MyPojo.class);
 Producer&lt;MyPojo&gt; pojoProducer = client.newProducer(pojoSchema)
     .topic(<span class="hljs-string">"some-pojo-topic"</span>)
diff --git a/content/docs/zh-CN/client-libraries-java/index.html b/content/docs/zh-CN/client-libraries-java/index.html
index 96f3204..be65c07 100644
--- a/content/docs/zh-CN/client-libraries-java/index.html
+++ b/content/docs/zh-CN/client-libraries-java/index.html
@@ -167,7 +167,7 @@ client.close();</p>
    })<span class="hljs-comment">;</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="生产者配置"></a><a href="#生产者配置" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
-<p>如果实例化 <code>生产者</code> 对象时仅指定主题topic名称 (如上面的示例所示), 则生产者将使用默认配置。 要使用非默认配置, 你可以设置多种可配置的参数。 有关完整列表, 请参阅 {@inject javadoc:ProducerBuilder:/client/org/apache/pulsar/client/api/ProducerBuilder} 类javadoc文档。 这里有一个示例:</p>
+<p>如果实例化 <code>生产者</code> 对象时仅指定主题topic名称 (如上面的示例所示), 则生产者将使用默认配置。 要使用非默认配置, 你可以设置多种可配置的参数。 有关完整列表, 请参阅 {@inject javadoc:ProducerBuilder:/client/org/apache/pulsar/client/api/ProducerBuilder} 类javadoc文档。 下面是一个示例:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
     .topic(<span class="hljs-string">"my-topic"</span>)
     .batchingMaxPublishDelay(<span class="hljs-number">10</span>, TimeUnit.MILLISECONDS)
@@ -219,7 +219,7 @@ client.close();</p>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="消费者配置"></a><a href="#消费者配置" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
 <p>如果实例化 <code>消费者</code> 对象, 仅指定主题和订阅名称, 如上面的示例所示, 消费者将采用默认配置。 要使用非默认配置, 你可以设置多种可配置的参数。 有关完整列表, 请参阅 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/ConsumerBuilder">ConsumerBuilder</a>
-类javadoc文档。 这里有一个示例:</p>
+类javadoc文档。 下面是一个示例:</p>
 <p>这是一个示例配置:</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
@@ -230,7 +230,7 @@ client.close();</p>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="异步接收"></a><a href="#异步接收" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <p><code>receive</code>方法将异步接受消息(消费者处理器将被阻塞,直到有消息到达)。 你也可以使用<a href="concepts-messaging.md#receive-modes">异步接收方法</a>,这将在一个新消息到达时立即返回一个<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>对象。</p>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>异步接收操作返回一个包装在<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>中的{@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message}消息对象。</p>
@@ -279,7 +279,7 @@ Consumer multiTopicConsumer = consumerBuilder
         )
         .subscribe();
 </code></pre>
-<p>You can also subscribe to multiple topics asynchronously using the <code>subscribeAsync</code> method rather than the synchronous <code>subscribe</code> method. 这里有一个示例:</p>
+<p>You can also subscribe to multiple topics asynchronously using the <code>subscribeAsync</code> method rather than the synchronous <code>subscribe</code> method. 下面是一个示例:</p>
 <pre><code class="hljs css language-java">Pattern allTopicsInNamespace = Pattern.compile(<span class="hljs-string">"persistent://public/default.*"</span>);
 consumerBuilder
         .topics(topics)
@@ -300,7 +300,7 @@ consumerBuilder
 和 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 /api/ReaderConfiguration}来创建<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 。</p>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">ReaderConfiguration conf = <span class="hljs-keyword">new</span> ReaderConfiguration();
 <span class="hljs-keyword">byte</span>[] msgIdBytes = <span class="hljs-comment">// 一些消息ID 的字节数组</span>
 MessageId id = MessageId.fromByteArray(msgIdBytes);
@@ -317,7 +317,7 @@ Reader reader = pulsarClient.newReader()
 <p>在上面的示例中,实例化一个<code>Reader</code>对象对指定的主题和消息(ID); reader将遍历主题中<code>msgIdBytes</code>(取值方式取决于应用程序) 之后的消息。</p>
 <p>上面的示例代码展示了<code>Reader</code>对象指向特定的消息(ID),但你也可以使用<code>MessageId.earliest</code>来指向topic上最早可用的消息,使用<code>MessageId.latest</code>指向最新的消息。</p>
 <h2><a class="anchor" aria-hidden="true" id="schema"></a><a href="#schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="concepts-schema-registry.md">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 这里有一个示例:</p>
+<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="concepts-schema-registry.md">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 下面是一个示例:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
@@ -367,7 +367,7 @@ Reader reader = pulsarClient.newReader()
     .topic(<span class="hljs-string">"some-string-topic"</span>)
     .create();
 </code></pre></li>
-<li><p>JSON schemas can be created for POJOs using the <code>JSONSchema</code> class. 这里有一个示例:</p>
+<li><p>JSON schemas can be created for POJOs using the <code>JSONSchema</code> class. 下面是一个示例:</p>
 <pre><code class="hljs css language-java">Schema&lt;MyPojo&gt; pojoSchema = JSONSchema.of(MyPojo.class);
 Producer&lt;MyPojo&gt; pojoProducer = client.newProducer(pojoSchema)
     .topic(<span class="hljs-string">"some-pojo-topic"</span>)
diff --git a/content/docs/zh-CN/client-libraries-python.html b/content/docs/zh-CN/client-libraries-python.html
index cff7b5f..8afd09f 100644
--- a/content/docs/zh-CN/client-libraries-python.html
+++ b/content/docs/zh-CN/client-libraries-python.html
@@ -125,7 +125,7 @@ client.close()
 client.close()
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="reader-interface-example"></a><a href="#reader-interface-example" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
-<p>You can use the Pulsar Python API to use the Pulsar <a href="/docs/zh-CN/concepts-clients#reader-interface">reader interface</a>. 这里有一个示例:</p>
+<p>You can use the Pulsar Python API to use the Pulsar <a href="/docs/zh-CN/concepts-clients#reader-interface">reader interface</a>. 下面是一个示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId taken from a previously fetched message</span>
 msg_id = msg.message_id()
 
diff --git a/content/docs/zh-CN/client-libraries-python/index.html b/content/docs/zh-CN/client-libraries-python/index.html
index cff7b5f..8afd09f 100644
--- a/content/docs/zh-CN/client-libraries-python/index.html
+++ b/content/docs/zh-CN/client-libraries-python/index.html
@@ -125,7 +125,7 @@ client.close()
 client.close()
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="reader-interface-example"></a><a href="#reader-interface-example" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
-<p>You can use the Pulsar Python API to use the Pulsar <a href="/docs/zh-CN/concepts-clients#reader-interface">reader interface</a>. 这里有一个示例:</p>
+<p>You can use the Pulsar Python API to use the Pulsar <a href="/docs/zh-CN/concepts-clients#reader-interface">reader interface</a>. 下面是一个示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-comment"># MessageId taken from a previously fetched message</span>
 msg_id = msg.message_id()
 
diff --git a/content/docs/zh-CN/client-libraries-websocket.html b/content/docs/zh-CN/client-libraries-websocket.html
index 841b7aa..169f0b3 100644
--- a/content/docs/zh-CN/client-libraries-websocket.html
+++ b/content/docs/zh-CN/client-libraries-websocket.html
@@ -92,7 +92,7 @@
 <li><a href="/docs/zh-CN/reference-configuration#websocket-webServicePort"><code>webServicePort</code></a></li>
 <li><a href="/docs/zh-CN/reference-configuration#websocket-clusterName"><code>clusterName</code></a></li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1:2181,zk2:2181,zk3:2181</span>
 <span class="hljs-attr">webServicePort</span>=<span class="hljs-string">8080</span>
 <span class="hljs-attr">clusterName</span>=<span class="hljs-string">my-cluster</span>
diff --git a/content/docs/zh-CN/client-libraries-websocket/index.html b/content/docs/zh-CN/client-libraries-websocket/index.html
index 841b7aa..169f0b3 100644
--- a/content/docs/zh-CN/client-libraries-websocket/index.html
+++ b/content/docs/zh-CN/client-libraries-websocket/index.html
@@ -92,7 +92,7 @@
 <li><a href="/docs/zh-CN/reference-configuration#websocket-webServicePort"><code>webServicePort</code></a></li>
 <li><a href="/docs/zh-CN/reference-configuration#websocket-clusterName"><code>clusterName</code></a></li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1:2181,zk2:2181,zk3:2181</span>
 <span class="hljs-attr">webServicePort</span>=<span class="hljs-string">8080</span>
 <span class="hljs-attr">clusterName</span>=<span class="hljs-string">my-cluster</span>
diff --git a/content/docs/zh-CN/concepts-architecture-overview.html b/content/docs/zh-CN/concepts-architecture-overview.html
index e5219e5..b2b047d 100644
--- a/content/docs/zh-CN/concepts-architecture-overview.html
+++ b/content/docs/zh-CN/concepts-architecture-overview.html
@@ -155,7 +155,7 @@
 <blockquote>
 <p>为了性能和容错,你可以运行任意个Pulsar proxy。</p>
 </blockquote>
-<p>架构上来看,Pulsar Proxy从ZooKeeper上面读取他所需要的所有信息。 当启动代理时,你只需要提供用于集群独有和实例范围的配置存储的ZooKeeper连接串。 这里有一个示例:</p>
+<p>架构上来看,Pulsar Proxy从ZooKeeper上面读取他所需要的所有信息。 当启动代理时,你只需要提供用于集群独有和实例范围的配置存储的ZooKeeper连接串。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar proxy \
   --zookeeper-servers zk-0,zk-1,zk-2 \
   --configuration-store-servers zk-0,zk-1,zk-2
diff --git a/content/docs/zh-CN/concepts-architecture-overview/index.html b/content/docs/zh-CN/concepts-architecture-overview/index.html
index e5219e5..b2b047d 100644
--- a/content/docs/zh-CN/concepts-architecture-overview/index.html
+++ b/content/docs/zh-CN/concepts-architecture-overview/index.html
@@ -155,7 +155,7 @@
 <blockquote>
 <p>为了性能和容错,你可以运行任意个Pulsar proxy。</p>
 </blockquote>
-<p>架构上来看,Pulsar Proxy从ZooKeeper上面读取他所需要的所有信息。 当启动代理时,你只需要提供用于集群独有和实例范围的配置存储的ZooKeeper连接串。 这里有一个示例:</p>
+<p>架构上来看,Pulsar Proxy从ZooKeeper上面读取他所需要的所有信息。 当启动代理时,你只需要提供用于集群独有和实例范围的配置存储的ZooKeeper连接串。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar proxy \
   --zookeeper-servers zk-0,zk-1,zk-2 \
   --configuration-store-servers zk-0,zk-1,zk-2
diff --git a/content/docs/zh-CN/concepts-messaging.html b/content/docs/zh-CN/concepts-messaging.html
index f135703..9377e75 100644
--- a/content/docs/zh-CN/concepts-messaging.html
+++ b/content/docs/zh-CN/concepts-messaging.html
@@ -301,7 +301,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <p>这里还有一个非持久topic的<a href="client-libraries-java.md#producer">java producer</a>例子:</p>
 <pre><code class="hljs css language-java">Producer producer = client.createProducer(npTopic);
 </code></pre>
-<h2><a class="anchor" aria-hidden="true" id="message-retention-and-expiry"></a><a href="#message-retention-and-expiry" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
+<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>Pulsar broker默认如下:</p>
 <ul>
 <li>立即删除<em>所有</em>已经被cunsumer确认过的的消息</li>
@@ -316,7 +316,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <p>All message retention and expiry is managed at the <a href="#namespaces">namespace</a> level. For a how-to, see the <a href="cookbooks-retention-expiry.md">Message retention and expiry</a> cookbook.</p>
 </blockquote>
 <p>下图说明了这两种概念:</p>
-<p><img src="assets/retention-expiry.png" alt="Message retention and expiry"></p>
+<p><img src="assets/retention-expiry.png" alt="消息保留和到期"></p>
 <p>图中上面的是消息存留,<span style="color: #89b557;">存留规则</span>会被用于某namespace下所有的topic,指明哪些消息会被持久存储,即使已经被确认过。 没有被留存规则覆盖的消息将会被<span style="color: #bb3b3e;">删除</span>。 没有留存规则的话,<em>所有</em>被<span style="color: #19967d;">确认</span>的消息都会被删除。</p>
 <p>图中下面的是消息过期,有些消息即使还<span style="color: #337db6;">没有被确认</span>,也被<span style="color: #bb3b3e;">删除</span>掉了。因为根据设置在<span style="color: #e39441;">namespace上的TTL</span>,他们已经过期了。(例如,TTL为5分钟,过了十分钟消息还没被确认)</p>
 <h2><a class="anchor" aria-hidden="true" id="message-deduplication"></a><a href="#message-deduplication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
@@ -335,7 +335,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <blockquote>
 <p>更深入的信息可以参考 <a href="https://streaml.io/blog">Streamlio blog</a>上的<a href="https://streaml.io/blog/pulsar-effectively-once/">此篇博文</a></p>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/concepts-overview"><span class="arrow-prev">← </span><span>概述</span></a><a class="docs-next button" href="/docs/zh-CN/concepts-architecture-overview"><span>Architecture</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#messages">Messages</a></li><li><a href="#producers">Producers</a><ul class="toc-headings"><li><a  [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/concepts-overview"><span class="arrow-prev">← </span><span>概述</span></a><a class="docs-next button" href="/docs/zh-CN/concepts-architecture-overview"><span>Architecture</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#messages">Messages</a></li><li><a href="#producers">Producers</a><ul class="toc-headings"><li><a  [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/concepts-messaging/index.html b/content/docs/zh-CN/concepts-messaging/index.html
index f135703..9377e75 100644
--- a/content/docs/zh-CN/concepts-messaging/index.html
+++ b/content/docs/zh-CN/concepts-messaging/index.html
@@ -301,7 +301,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <p>这里还有一个非持久topic的<a href="client-libraries-java.md#producer">java producer</a>例子:</p>
 <pre><code class="hljs css language-java">Producer producer = client.createProducer(npTopic);
 </code></pre>
-<h2><a class="anchor" aria-hidden="true" id="message-retention-and-expiry"></a><a href="#message-retention-and-expiry" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
+<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>Pulsar broker默认如下:</p>
 <ul>
 <li>立即删除<em>所有</em>已经被cunsumer确认过的的消息</li>
@@ -316,7 +316,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <p>All message retention and expiry is managed at the <a href="#namespaces">namespace</a> level. For a how-to, see the <a href="cookbooks-retention-expiry.md">Message retention and expiry</a> cookbook.</p>
 </blockquote>
 <p>下图说明了这两种概念:</p>
-<p><img src="assets/retention-expiry.png" alt="Message retention and expiry"></p>
+<p><img src="assets/retention-expiry.png" alt="消息保留和到期"></p>
 <p>图中上面的是消息存留,<span style="color: #89b557;">存留规则</span>会被用于某namespace下所有的topic,指明哪些消息会被持久存储,即使已经被确认过。 没有被留存规则覆盖的消息将会被<span style="color: #bb3b3e;">删除</span>。 没有留存规则的话,<em>所有</em>被<span style="color: #19967d;">确认</span>的消息都会被删除。</p>
 <p>图中下面的是消息过期,有些消息即使还<span style="color: #337db6;">没有被确认</span>,也被<span style="color: #bb3b3e;">删除</span>掉了。因为根据设置在<span style="color: #e39441;">namespace上的TTL</span>,他们已经过期了。(例如,TTL为5分钟,过了十分钟消息还没被确认)</p>
 <h2><a class="anchor" aria-hidden="true" id="message-deduplication"></a><a href="#message-deduplication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
@@ -335,7 +335,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <blockquote>
 <p>更深入的信息可以参考 <a href="https://streaml.io/blog">Streamlio blog</a>上的<a href="https://streaml.io/blog/pulsar-effectively-once/">此篇博文</a></p>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/concepts-overview"><span class="arrow-prev">← </span><span>概述</span></a><a class="docs-next button" href="/docs/zh-CN/concepts-architecture-overview"><span>Architecture</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#messages">Messages</a></li><li><a href="#producers">Producers</a><ul class="toc-headings"><li><a  [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/concepts-overview"><span class="arrow-prev">← </span><span>概述</span></a><a class="docs-next button" href="/docs/zh-CN/concepts-architecture-overview"><span>Architecture</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#messages">Messages</a></li><li><a href="#producers">Producers</a><ul class="toc-headings"><li><a  [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/cookbooks-compaction.html b/content/docs/zh-CN/cookbooks-compaction.html
index 9d3b688..e6da38b 100644
--- a/content/docs/zh-CN/cookbooks-compaction.html
+++ b/content/docs/zh-CN/cookbooks-compaction.html
@@ -98,12 +98,12 @@
 </code></pre>
 <p>Configuring the compaction threshold on a namespace will apply to all topics within that namespace.</p>
 <h2><a class="anchor" aria-hidden="true" id="triggering-compaction-manually-trigger"></a><a href="#triggering-compaction-manually-trigger" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1. [...]
-<p>In order to run compaction on a topic, you need to use the <a href="/docs/zh-CN/pulsar-admin#topics-compact"><code>topics compact</code></a> command for the <a href="/docs/zh-CN/pulsar-admin"><code>pulsar-admin</code></a> CLI tool. 这里有一个示例:</p>
+<p>In order to run compaction on a topic, you need to use the <a href="/docs/zh-CN/pulsar-admin#topics-compact"><code>topics compact</code></a> command for the <a href="/docs/zh-CN/pulsar-admin"><code>pulsar-admin</code></a> CLI tool. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin topics compact \
   persistent://my-tenant/my-namespace/my-topic
 </code></pre>
 <p>The <code>pulsar-admin</code> tool runs compaction via the Pulsar <a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
- API. To run compaction in its own dedicated process, i.e. <em>not</em> through the REST API, you can use the <a href="/docs/zh-CN/reference-cli-tools#pulsar-compact-topic"><code>pulsar compact-topic</code></a> command. 这里有一个示例:</p>
+ API. To run compaction in its own dedicated process, i.e. <em>not</em> through the REST API, you can use the <a href="/docs/zh-CN/reference-cli-tools#pulsar-compact-topic"><code>pulsar compact-topic</code></a> command. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar compact-topic \
   --topic persistent://my-tenant-namespace/my-topic
 </code></pre>
diff --git a/content/docs/zh-CN/cookbooks-compaction/index.html b/content/docs/zh-CN/cookbooks-compaction/index.html
index 9d3b688..e6da38b 100644
--- a/content/docs/zh-CN/cookbooks-compaction/index.html
+++ b/content/docs/zh-CN/cookbooks-compaction/index.html
@@ -98,12 +98,12 @@
 </code></pre>
 <p>Configuring the compaction threshold on a namespace will apply to all topics within that namespace.</p>
 <h2><a class="anchor" aria-hidden="true" id="triggering-compaction-manually-trigger"></a><a href="#triggering-compaction-manually-trigger" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1. [...]
-<p>In order to run compaction on a topic, you need to use the <a href="/docs/zh-CN/pulsar-admin#topics-compact"><code>topics compact</code></a> command for the <a href="/docs/zh-CN/pulsar-admin"><code>pulsar-admin</code></a> CLI tool. 这里有一个示例:</p>
+<p>In order to run compaction on a topic, you need to use the <a href="/docs/zh-CN/pulsar-admin#topics-compact"><code>topics compact</code></a> command for the <a href="/docs/zh-CN/pulsar-admin"><code>pulsar-admin</code></a> CLI tool. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin topics compact \
   persistent://my-tenant/my-namespace/my-topic
 </code></pre>
 <p>The <code>pulsar-admin</code> tool runs compaction via the Pulsar <a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
- API. To run compaction in its own dedicated process, i.e. <em>not</em> through the REST API, you can use the <a href="/docs/zh-CN/reference-cli-tools#pulsar-compact-topic"><code>pulsar compact-topic</code></a> command. 这里有一个示例:</p>
+ API. To run compaction in its own dedicated process, i.e. <em>not</em> through the REST API, you can use the <a href="/docs/zh-CN/reference-cli-tools#pulsar-compact-topic"><code>pulsar compact-topic</code></a> command. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar compact-topic \
   --topic persistent://my-tenant-namespace/my-topic
 </code></pre>
diff --git a/content/docs/zh-CN/cookbooks-deduplication.html b/content/docs/zh-CN/cookbooks-deduplication.html
index 3beab92..1ca386b 100644
--- a/content/docs/zh-CN/cookbooks-deduplication.html
+++ b/content/docs/zh-CN/cookbooks-deduplication.html
@@ -117,7 +117,7 @@
 </ol>
 <p>Instructions for <a href="#java">Java</a>, <a href="#python">Python</a>, and <a href="#cpp">C++</a> clients can be found below.</p>
 <h3><a class="anchor" aria-hidden="true" id="java-clients-java"></a><a href="#java-clients-java" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
-<p>To enable message deduplication on a <a href="/docs/zh-CN/client-libraries-java#producers">Java producer</a>, set the producer name using the <code>producerName</code> setter and set the timeout to 0 using the <code>sendTimeout</code> setter. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/client-libraries-java#producers">Java producer</a>, set the producer name using the <code>producerName</code> setter and set the timeout to 0 using the <code>sendTimeout</code> setter. 下面是一个示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Producer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 <span class="hljs-keyword">import</span> java.util.concurrent.TimeUnit;
@@ -132,7 +132,7 @@ Producer producer = pulsarClient.newProducer()
         .create();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="python-clients-python"></a><a href="#python-clients-python" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 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>To enable message deduplication on a <a href="/docs/zh-CN/client-libraries-python#producers">Python producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/client-libraries-python#producers">Python producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 下面是一个示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">import</span> pulsar
 
 client = pulsar.Client(<span class="hljs-string">"pulsar://localhost:6650"</span>)
@@ -142,7 +142,7 @@ producer = client.create_producer(
     send_timeout_millis=<span class="hljs-number">0</span>)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-clients-cpp"></a><a href="#c-clients-cpp" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
-<p>To enable message deduplication on a <a href="/docs/zh-CN/client-libraries-cpp#producer">C++ producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/client-libraries-cpp#producer">C++ producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 下面是一个示例:</p>
 <pre><code class="hljs css language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 <span class="hljs-built_in">std</span>::<span class="hljs-built_in">string</span> serviceUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
diff --git a/content/docs/zh-CN/cookbooks-deduplication/index.html b/content/docs/zh-CN/cookbooks-deduplication/index.html
index 3beab92..1ca386b 100644
--- a/content/docs/zh-CN/cookbooks-deduplication/index.html
+++ b/content/docs/zh-CN/cookbooks-deduplication/index.html
@@ -117,7 +117,7 @@
 </ol>
 <p>Instructions for <a href="#java">Java</a>, <a href="#python">Python</a>, and <a href="#cpp">C++</a> clients can be found below.</p>
 <h3><a class="anchor" aria-hidden="true" id="java-clients-java"></a><a href="#java-clients-java" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
-<p>To enable message deduplication on a <a href="/docs/zh-CN/client-libraries-java#producers">Java producer</a>, set the producer name using the <code>producerName</code> setter and set the timeout to 0 using the <code>sendTimeout</code> setter. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/client-libraries-java#producers">Java producer</a>, set the producer name using the <code>producerName</code> setter and set the timeout to 0 using the <code>sendTimeout</code> setter. 下面是一个示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Producer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 <span class="hljs-keyword">import</span> java.util.concurrent.TimeUnit;
@@ -132,7 +132,7 @@ Producer producer = pulsarClient.newProducer()
         .create();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="python-clients-python"></a><a href="#python-clients-python" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 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>To enable message deduplication on a <a href="/docs/zh-CN/client-libraries-python#producers">Python producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/client-libraries-python#producers">Python producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 下面是一个示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">import</span> pulsar
 
 client = pulsar.Client(<span class="hljs-string">"pulsar://localhost:6650"</span>)
@@ -142,7 +142,7 @@ producer = client.create_producer(
     send_timeout_millis=<span class="hljs-number">0</span>)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-clients-cpp"></a><a href="#c-clients-cpp" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
-<p>To enable message deduplication on a <a href="/docs/zh-CN/client-libraries-cpp#producer">C++ producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/client-libraries-cpp#producer">C++ producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 下面是一个示例:</p>
 <pre><code class="hljs css language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 <span class="hljs-built_in">std</span>::<span class="hljs-built_in">string</span> serviceUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
diff --git a/content/docs/zh-CN/cookbooks-encryption.html b/content/docs/zh-CN/cookbooks-encryption.html
index 8705203..403ecd6 100644
--- a/content/docs/zh-CN/cookbooks-encryption.html
+++ b/content/docs/zh-CN/cookbooks-encryption.html
@@ -221,7 +221,7 @@ conf.addEncryptionKey(<span class="hljs-string">"myapp.messagekey2"</span>);
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/cookbooks-retention-expiry"><span class="arrow-prev">← </span><span>Message retention and expiry</span></a><a class="docs-next button" href="/docs/zh-CN/cookbooks-message-queue"><span>Message queue</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryp [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/cookbooks-retention-expiry"><span class="arrow-prev">← </span><span>消息保留和到期</span></a><a class="docs-next button" href="/docs/zh-CN/cookbooks-message-queue"><span>Message queue</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li><li><a h [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/cookbooks-encryption/index.html b/content/docs/zh-CN/cookbooks-encryption/index.html
index 8705203..403ecd6 100644
--- a/content/docs/zh-CN/cookbooks-encryption/index.html
+++ b/content/docs/zh-CN/cookbooks-encryption/index.html
@@ -221,7 +221,7 @@ conf.addEncryptionKey(<span class="hljs-string">"myapp.messagekey2"</span>);
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/cookbooks-retention-expiry"><span class="arrow-prev">← </span><span>Message retention and expiry</span></a><a class="docs-next button" href="/docs/zh-CN/cookbooks-message-queue"><span>Message queue</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryp [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/cookbooks-retention-expiry"><span class="arrow-prev">← </span><span>消息保留和到期</span></a><a class="docs-next button" href="/docs/zh-CN/cookbooks-message-queue"><span>Message queue</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li><li><a h [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/cookbooks-non-persistent.html b/content/docs/zh-CN/cookbooks-non-persistent.html
index 67edffc..30c6840 100644
--- a/content/docs/zh-CN/cookbooks-non-persistent.html
+++ b/content/docs/zh-CN/cookbooks-non-persistent.html
@@ -108,7 +108,7 @@
 <p>可以使用<a href="/docs/zh-CN/pulsar-admin#non-persistent"> <code>pulsar-admin non-persistent</code> </a>命令行管理非持久性主题。 使用命令行工具,你可以执行诸如<a href="/docs/zh-CN/pulsar-admin#non-persistent-create-partitioned-topic">创建分区非持久性主题</a>,获取非持久主题的<a href="/docs/zh-CN/pulsar-admin#non-persistent-stats">统计信息</a>,获取命名空间下的非持久主题<a href="/docs/zh-CN/pulsar-admin">列表</a>等操作。</p>
 <h2><a class="anchor" aria-hidden="true" id="与pulsar客户端一起使用"></a><a href="#与pulsar客户端一起使用" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>除了确保使用具有<code>非持久性</code>的正确<a href="#using">主题名称</a>作为主题类型之外,你不应该对 Pulsar 客户端进行任何更改以使用非持久性消息传递。</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/cookbooks-deduplication"><span class="arrow-prev">← </span><span>Message deduplication</span></a><a class="docs-next button" href="/docs/zh-CN/cookbooks-partitioned"><span>分区Topic</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="#使用">使用</a></li><li><a href="#启用">启用</a></li><li><a href=" [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/cookbooks-deduplication"><span class="arrow-prev">← </span><span>Message deduplication</span></a><a class="docs-next button" href="/docs/zh-CN/cookbooks-partitioned"><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="#使用">使用</a></li><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/cookbooks-non-persistent/index.html b/content/docs/zh-CN/cookbooks-non-persistent/index.html
index 67edffc..30c6840 100644
--- a/content/docs/zh-CN/cookbooks-non-persistent/index.html
+++ b/content/docs/zh-CN/cookbooks-non-persistent/index.html
@@ -108,7 +108,7 @@
 <p>可以使用<a href="/docs/zh-CN/pulsar-admin#non-persistent"> <code>pulsar-admin non-persistent</code> </a>命令行管理非持久性主题。 使用命令行工具,你可以执行诸如<a href="/docs/zh-CN/pulsar-admin#non-persistent-create-partitioned-topic">创建分区非持久性主题</a>,获取非持久主题的<a href="/docs/zh-CN/pulsar-admin#non-persistent-stats">统计信息</a>,获取命名空间下的非持久主题<a href="/docs/zh-CN/pulsar-admin">列表</a>等操作。</p>
 <h2><a class="anchor" aria-hidden="true" id="与pulsar客户端一起使用"></a><a href="#与pulsar客户端一起使用" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>除了确保使用具有<code>非持久性</code>的正确<a href="#using">主题名称</a>作为主题类型之外,你不应该对 Pulsar 客户端进行任何更改以使用非持久性消息传递。</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/cookbooks-deduplication"><span class="arrow-prev">← </span><span>Message deduplication</span></a><a class="docs-next button" href="/docs/zh-CN/cookbooks-partitioned"><span>分区Topic</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="#使用">使用</a></li><li><a href="#启用">启用</a></li><li><a href=" [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/cookbooks-deduplication"><span class="arrow-prev">← </span><span>Message deduplication</span></a><a class="docs-next button" href="/docs/zh-CN/cookbooks-partitioned"><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="#使用">使用</a></li><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/cookbooks-partitioned.html b/content/docs/zh-CN/cookbooks-partitioned.html
index 07bd0ec..6c6f125 100644
--- a/content/docs/zh-CN/cookbooks-partitioned.html
+++ b/content/docs/zh-CN/cookbooks-partitioned.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Non-persistent messaging · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作的说明,请参见 &lt;a href=&quot;/docs/zh-C [...]
-"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Non-persistent messaging · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作的说明 [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Non-persistent messaging · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作,请参见 &lt;a href=&quot;/docs/zh-CN/concep [...]
+"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Non-persistent messaging · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作,请参见 &lt [...]
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -70,12 +70,12 @@
                 };
               }
             });
-        </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">Non-persistent messaging</h1></header><article><div><span><p>默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 <em>分区Topic</em>是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主 [...]
+        </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">Non-persistent messaging</h1></header><article><div><span><p>默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 <em>分区Topic</em>是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作 [...]
 <p>您可以使用Pulsar的客户端库将消息<a href="#publishing-to-partitioned-topics">发布</a>到分区主题,还可以使用Pulsar的<a href="/docs/zh-CN/admin-api-overview"> admin API </a>进行<a href="#managing-partitioned-topics">创建和管理</a>分区主题。</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>发布到分区主题时,与非分区主题的唯一区别是您需要在创建<a href="/docs/zh-CN/reference-terminology#producer">生产者</a>时指定<a href="/docs/zh-CN/concepts-messaging#routing-modes">路由模式</a>。 <a href="#java">Java</a>示例如下。</p>
+<p>发布到分区主题时,与非分区主题的唯一区别是您需要在创建新的<a href="/docs/zh-CN/reference-terminology#producer">生产者</a>时指定<a href="/docs/zh-CN/concepts-messaging#routing-modes">路由模式</a>。 <a href="#java">Java</a>示例如下。</p>
 <h3><a class="anchor" aria-hidden="true" id="java"></a><a href="#java" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>在Java客户端中将消息发布到分区主题,非常类似于发布到<a href="/docs/zh-CN/client-libraries-java#using-producers">普通主题</a>。 不同之处在于您需要指定一个消息路器(从已有的路由器中选择一个或实现一个自定义的路由器)。</p>
+<p>在Java客户端中将消息发布到分区主题,和发布到<a href="/docs/zh-CN/client-libraries-java#using-producers">普通主题</a>非常类似。 不同之处在于您需要指定一个消息路器(从已有的路由器中选择一个或实现一个自定义的路由器)。</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.09V6 [...]
 <p>您可以在ProducerConfiguration对象中指定用于配置生产者的路由模式。 可以从如下三个模式中选择:</p>
 <ul>
@@ -83,7 +83,7 @@
 <li><code>RoundRobinPartition</code></li>
 <li><code>CustomPartition</code></li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">String pulsarBrokerRootUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
 String topic = <span class="hljs-string">"persistent://my-tenant/my-namespace/my-topic"</span>;
 
@@ -121,7 +121,7 @@ producer.send(<span class="hljs-string">"Partitioned topic message"</span>.getBy
 </code></pre>
 <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>您可以使用Pulsar的<a href="/docs/zh-CN/admin-api-overview"> admin API </a>来创建和管理<a href="/docs/zh-CN/admin-api-partitioned-topics">分区主题</a>。</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/cookbooks-non-persistent"><span class="arrow-prev">← </span><span>非持久化消息</span></a><a class="docs-next button" href="/docs/zh-CN/cookbooks-retention-expiry"><span>Message retention and expiry</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#发布到分区主题">发布到分区主题</a><ul class="toc-headings"><li><a href="#java">Java</a>< [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/cookbooks-non-persistent"><span class="arrow-prev">← </span><span>非持久化消息</span></a><a class="docs-next button" href="/docs/zh-CN/cookbooks-retention-expiry"><span>消息保留和到期</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#发布到分区主题">发布到分区主题</a><ul class="toc-headings"><li><a href="#java">Java</a></li></ul></li><li><a  [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/cookbooks-partitioned/index.html b/content/docs/zh-CN/cookbooks-partitioned/index.html
index 07bd0ec..6c6f125 100644
--- a/content/docs/zh-CN/cookbooks-partitioned/index.html
+++ b/content/docs/zh-CN/cookbooks-partitioned/index.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Non-persistent messaging · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作的说明,请参见 &lt;a href=&quot;/docs/zh-C [...]
-"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Non-persistent messaging · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作的说明 [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Non-persistent messaging · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作,请参见 &lt;a href=&quot;/docs/zh-CN/concep [...]
+"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Non-persistent messaging · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作,请参见 &lt [...]
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -70,12 +70,12 @@
                 };
               }
             });
-        </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">Non-persistent messaging</h1></header><article><div><span><p>默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 <em>分区Topic</em>是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主 [...]
+        </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">Non-persistent messaging</h1></header><article><div><span><p>默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 <em>分区Topic</em>是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作 [...]
 <p>您可以使用Pulsar的客户端库将消息<a href="#publishing-to-partitioned-topics">发布</a>到分区主题,还可以使用Pulsar的<a href="/docs/zh-CN/admin-api-overview"> admin API </a>进行<a href="#managing-partitioned-topics">创建和管理</a>分区主题。</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>发布到分区主题时,与非分区主题的唯一区别是您需要在创建<a href="/docs/zh-CN/reference-terminology#producer">生产者</a>时指定<a href="/docs/zh-CN/concepts-messaging#routing-modes">路由模式</a>。 <a href="#java">Java</a>示例如下。</p>
+<p>发布到分区主题时,与非分区主题的唯一区别是您需要在创建新的<a href="/docs/zh-CN/reference-terminology#producer">生产者</a>时指定<a href="/docs/zh-CN/concepts-messaging#routing-modes">路由模式</a>。 <a href="#java">Java</a>示例如下。</p>
 <h3><a class="anchor" aria-hidden="true" id="java"></a><a href="#java" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>在Java客户端中将消息发布到分区主题,非常类似于发布到<a href="/docs/zh-CN/client-libraries-java#using-producers">普通主题</a>。 不同之处在于您需要指定一个消息路器(从已有的路由器中选择一个或实现一个自定义的路由器)。</p>
+<p>在Java客户端中将消息发布到分区主题,和发布到<a href="/docs/zh-CN/client-libraries-java#using-producers">普通主题</a>非常类似。 不同之处在于您需要指定一个消息路器(从已有的路由器中选择一个或实现一个自定义的路由器)。</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.09V6 [...]
 <p>您可以在ProducerConfiguration对象中指定用于配置生产者的路由模式。 可以从如下三个模式中选择:</p>
 <ul>
@@ -83,7 +83,7 @@
 <li><code>RoundRobinPartition</code></li>
 <li><code>CustomPartition</code></li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">String pulsarBrokerRootUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
 String topic = <span class="hljs-string">"persistent://my-tenant/my-namespace/my-topic"</span>;
 
@@ -121,7 +121,7 @@ producer.send(<span class="hljs-string">"Partitioned topic message"</span>.getBy
 </code></pre>
 <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>您可以使用Pulsar的<a href="/docs/zh-CN/admin-api-overview"> admin API </a>来创建和管理<a href="/docs/zh-CN/admin-api-partitioned-topics">分区主题</a>。</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/cookbooks-non-persistent"><span class="arrow-prev">← </span><span>非持久化消息</span></a><a class="docs-next button" href="/docs/zh-CN/cookbooks-retention-expiry"><span>Message retention and expiry</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#发布到分区主题">发布到分区主题</a><ul class="toc-headings"><li><a href="#java">Java</a>< [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/cookbooks-non-persistent"><span class="arrow-prev">← </span><span>非持久化消息</span></a><a class="docs-next button" href="/docs/zh-CN/cookbooks-retention-expiry"><span>消息保留和到期</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#发布到分区主题">发布到分区主题</a><ul class="toc-headings"><li><a href="#java">Java</a></li></ul></li><li><a  [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/cookbooks-retention-expiry.html b/content/docs/zh-CN/cookbooks-retention-expiry.html
index a4c16c6..6af5e2a 100644
--- a/content/docs/zh-CN/cookbooks-retention-expiry.html
+++ b/content/docs/zh-CN/cookbooks-retention-expiry.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar brokers are responsible for handling messages that pass through Pulsar, including &lt;a href=&quot;/docs/zh-CN/concepts-architecture-overview#persistent-storage&quot;&gt [...]
-"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Message retention and expiry · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;Pulsar brokers are responsible for handling messages that pass through Pulsar, including &lt;a href=&quot;/docs/zh-CN/concepts-architecture-over [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar brokers 负责处理通过Pulsar的消息,包括消息的&lt;a href=&quot;/docs/zh-CN/concepts-architecture-overview#persistent-storage&quot;&gt;持久存储&lt;/a&gt;。 默认情况下,broker 的策略如下:&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Message retention and expiry · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;Pulsar brokers 负责处理通过Pulsar的消息,包括消息的&lt;a href=&quot;/docs/zh-CN/concepts-architecture-overview#persistent-storage&quot;&gt;持久存储&lt;/a&gt;。 默认情况 [...]
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -70,15 +70,15 @@
                 };
               }
             });
-        </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">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers are responsible for handling messages that pass through Pulsar, including <a href="/docs/zh-CN/concepts-archi [...]
+        </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">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers 负责处理通过Pulsar的消息,包括消息的<a href="/docs/zh-CN/concepts-architecture-overview#persistent-storage">持久存储</a>。 默认情况下, [...]
 <ul>
-<li>immediately delete all messages that have been acknowledged on every subscription, and</li>
-<li>persistently store all unacknowledged messages in a <a href="#backlog-quotas">backlog</a>.</li>
+<li>立即删除每个订阅上已确认的所有消息。</li>
+<li>并且持久性地将所有未确认的消息存储在<a href="#backlog-quotas"> backlog </a>中。</li>
 </ul>
-<p>In Pulsar, you can override both of these default behaviors, at the namespace level, in two ways:</p>
+<p>在Pulsar中,你可以在命名空间级别以两种方式覆盖这两种默认行为:</p>
 <ul>
-<li>You can persistently store messages that have already been consumed and acknowledged for a minimum time by setting <a href="#retention-policies">retention policies</a>.</li>
-<li>Messages that are not acknowledged within a specified timeframe, can be automatically marked as consumed, by specifying the <a href="#time-to-live-ttl">time to live</a> (TTL).</li>
+<li>通过设置 <a href="#retention-policies">保留策略</a>,可以持久地存储已经被使用和确认的消息,并将其保留最少时间。</li>
+<li>通过指定[生存时间](#time-to-live- TTL) (TTL),可以自动将未在指定时间范围内得到确认的消息标记为已消费。</li>
 </ul>
 <p>Pulsar's <a href="/docs/zh-CN/admin-api-overview">admin interface</a> enables you to manage both retention policies and TTL at the namespace level (and thus within a specific tenant and either on a specific cluster or in the <a href="/docs/zh-CN/concepts-architecture-overview#global-cluster"><code>global</code></a> cluster).</p>
 <blockquote>
@@ -186,7 +186,7 @@ admin.namespaces().setBacklogQuota(namespace, quota);
 <h3><a class="anchor" aria-hidden="true" id="get-backlog-threshold-and-backlog-retention-policy"></a><a href="#get-backlog-threshold-and-backlog-retention-policy" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9  [...]
 <p>You can see which size threshold and backlog retention policy has been applied to a namespace.</p>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-admin-3"></a><a href="#pulsar-admin-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>Use the <a href="/docs/zh-CN/pulsar-admin#pulsar-admin-namespaces-get-backlog-quotas"><code>get-backlog-quotas</code></a> subcommand and specify a namespace. 这里有一个示例:</p>
+<p>Use the <a href="/docs/zh-CN/pulsar-admin#pulsar-admin-namespaces-get-backlog-quotas"><code>get-backlog-quotas</code></a> subcommand and specify a namespace. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin namespaces get-backlog-quotas my-tenant/my-ns</span>
 {
   "destination_storage": {
@@ -204,7 +204,7 @@ admin.namespaces().setBacklogQuota(namespace, quota);
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="remove-backlog-quotas"></a><a href="#remove-backlog-quotas" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 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="pulsar-admin-4"></a><a href="#pulsar-admin-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>Use the <a href="/docs/zh-CN/pulsar-admin#pulsar-admin-namespaces-remove-backlog-quota"><code>remove-backlog-quota</code></a> subcommand and specify a namespace. 这里有一个示例:</p>
+<p>Use the <a href="/docs/zh-CN/pulsar-admin#pulsar-admin-namespaces-remove-backlog-quota"><code>remove-backlog-quota</code></a> subcommand and specify a namespace. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin namespaces remove-backlog-quota my-tenant/my-ns</span>
 </code></pre>
 <h4><a class="anchor" aria-hidden="true" id="rest-api-4"></a><a href="#rest-api-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
@@ -248,7 +248,7 @@ admin.namespaces().setBacklogQuota(namespace, quota);
 <h4><a class="anchor" aria-hidden="true" id="java-6"></a><a href="#java-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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. [...]
 <pre><code class="hljs css language-java">admin.namespaces().getNamespaceMessageTTL(namespace)
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/cookbooks-partitioned"><span class="arrow-prev">← </span><span>分区Topic</span></a><a class="docs-next button" href="/docs/zh-CN/cookbooks-encryption"><span>Encryption</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#retention-policies">Retention policies</a><ul class="toc-headings"><li><a href="#defaults">Defaults< [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/cookbooks-partitioned"><span class="arrow-prev">← </span><span>分区主题</span></a><a class="docs-next button" href="/docs/zh-CN/cookbooks-encryption"><span>Encryption</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#retention-policies">Retention policies</a><ul class="toc-headings"><li><a href="#defaults">Defaults</a> [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/cookbooks-retention-expiry/index.html b/content/docs/zh-CN/cookbooks-retention-expiry/index.html
index a4c16c6..6af5e2a 100644
--- a/content/docs/zh-CN/cookbooks-retention-expiry/index.html
+++ b/content/docs/zh-CN/cookbooks-retention-expiry/index.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar brokers are responsible for handling messages that pass through Pulsar, including &lt;a href=&quot;/docs/zh-CN/concepts-architecture-overview#persistent-storage&quot;&gt [...]
-"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Message retention and expiry · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;Pulsar brokers are responsible for handling messages that pass through Pulsar, including &lt;a href=&quot;/docs/zh-CN/concepts-architecture-over [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar brokers 负责处理通过Pulsar的消息,包括消息的&lt;a href=&quot;/docs/zh-CN/concepts-architecture-overview#persistent-storage&quot;&gt;持久存储&lt;/a&gt;。 默认情况下,broker 的策略如下:&lt;/p&gt;
+"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Message retention and expiry · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;Pulsar brokers 负责处理通过Pulsar的消息,包括消息的&lt;a href=&quot;/docs/zh-CN/concepts-architecture-overview#persistent-storage&quot;&gt;持久存储&lt;/a&gt;。 默认情况 [...]
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -70,15 +70,15 @@
                 };
               }
             });
-        </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">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers are responsible for handling messages that pass through Pulsar, including <a href="/docs/zh-CN/concepts-archi [...]
+        </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">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers 负责处理通过Pulsar的消息,包括消息的<a href="/docs/zh-CN/concepts-architecture-overview#persistent-storage">持久存储</a>。 默认情况下, [...]
 <ul>
-<li>immediately delete all messages that have been acknowledged on every subscription, and</li>
-<li>persistently store all unacknowledged messages in a <a href="#backlog-quotas">backlog</a>.</li>
+<li>立即删除每个订阅上已确认的所有消息。</li>
+<li>并且持久性地将所有未确认的消息存储在<a href="#backlog-quotas"> backlog </a>中。</li>
 </ul>
-<p>In Pulsar, you can override both of these default behaviors, at the namespace level, in two ways:</p>
+<p>在Pulsar中,你可以在命名空间级别以两种方式覆盖这两种默认行为:</p>
 <ul>
-<li>You can persistently store messages that have already been consumed and acknowledged for a minimum time by setting <a href="#retention-policies">retention policies</a>.</li>
-<li>Messages that are not acknowledged within a specified timeframe, can be automatically marked as consumed, by specifying the <a href="#time-to-live-ttl">time to live</a> (TTL).</li>
+<li>通过设置 <a href="#retention-policies">保留策略</a>,可以持久地存储已经被使用和确认的消息,并将其保留最少时间。</li>
+<li>通过指定[生存时间](#time-to-live- TTL) (TTL),可以自动将未在指定时间范围内得到确认的消息标记为已消费。</li>
 </ul>
 <p>Pulsar's <a href="/docs/zh-CN/admin-api-overview">admin interface</a> enables you to manage both retention policies and TTL at the namespace level (and thus within a specific tenant and either on a specific cluster or in the <a href="/docs/zh-CN/concepts-architecture-overview#global-cluster"><code>global</code></a> cluster).</p>
 <blockquote>
@@ -186,7 +186,7 @@ admin.namespaces().setBacklogQuota(namespace, quota);
 <h3><a class="anchor" aria-hidden="true" id="get-backlog-threshold-and-backlog-retention-policy"></a><a href="#get-backlog-threshold-and-backlog-retention-policy" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9  [...]
 <p>You can see which size threshold and backlog retention policy has been applied to a namespace.</p>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-admin-3"></a><a href="#pulsar-admin-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>Use the <a href="/docs/zh-CN/pulsar-admin#pulsar-admin-namespaces-get-backlog-quotas"><code>get-backlog-quotas</code></a> subcommand and specify a namespace. 这里有一个示例:</p>
+<p>Use the <a href="/docs/zh-CN/pulsar-admin#pulsar-admin-namespaces-get-backlog-quotas"><code>get-backlog-quotas</code></a> subcommand and specify a namespace. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin namespaces get-backlog-quotas my-tenant/my-ns</span>
 {
   "destination_storage": {
@@ -204,7 +204,7 @@ admin.namespaces().setBacklogQuota(namespace, quota);
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="remove-backlog-quotas"></a><a href="#remove-backlog-quotas" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 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="pulsar-admin-4"></a><a href="#pulsar-admin-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>Use the <a href="/docs/zh-CN/pulsar-admin#pulsar-admin-namespaces-remove-backlog-quota"><code>remove-backlog-quota</code></a> subcommand and specify a namespace. 这里有一个示例:</p>
+<p>Use the <a href="/docs/zh-CN/pulsar-admin#pulsar-admin-namespaces-remove-backlog-quota"><code>remove-backlog-quota</code></a> subcommand and specify a namespace. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin namespaces remove-backlog-quota my-tenant/my-ns</span>
 </code></pre>
 <h4><a class="anchor" aria-hidden="true" id="rest-api-4"></a><a href="#rest-api-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
@@ -248,7 +248,7 @@ admin.namespaces().setBacklogQuota(namespace, quota);
 <h4><a class="anchor" aria-hidden="true" id="java-6"></a><a href="#java-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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. [...]
 <pre><code class="hljs css language-java">admin.namespaces().getNamespaceMessageTTL(namespace)
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/cookbooks-partitioned"><span class="arrow-prev">← </span><span>分区Topic</span></a><a class="docs-next button" href="/docs/zh-CN/cookbooks-encryption"><span>Encryption</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#retention-policies">Retention policies</a><ul class="toc-headings"><li><a href="#defaults">Defaults< [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/cookbooks-partitioned"><span class="arrow-prev">← </span><span>分区主题</span></a><a class="docs-next button" href="/docs/zh-CN/cookbooks-encryption"><span>Encryption</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#retention-policies">Retention policies</a><ul class="toc-headings"><li><a href="#defaults">Defaults</a> [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/deploy-bare-metal-multi-cluster.html b/content/docs/zh-CN/deploy-bare-metal-multi-cluster.html
index 0100555..574e357 100644
--- a/content/docs/zh-CN/deploy-bare-metal-multi-cluster.html
+++ b/content/docs/zh-CN/deploy-bare-metal-multi-cluster.html
@@ -212,7 +212,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.3.0
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="cluster-metadata-initialization"></a><a href="#cluster-metadata-initialization" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 [...]
 <p>Once you've set up the cluster-specific ZooKeeper and configuration store quorums for your instance, there is some metadata that needs to be written to ZooKeeper for each cluster in your instance. <strong>It only needs to be written once</strong>.</p>
-<p>You can initialize this metadata using the <a href="/docs/zh-CN/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. 这里有一个示例:</p>
+<p>You can initialize this metadata using the <a href="/docs/zh-CN/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar initialize-cluster-metadata \</span>
   --cluster us-west \
   --zookeeper zk1.us-west.example.com:2181 \
@@ -230,7 +230,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.3.0
 <li>集群的web服务URL</li>
 <li>Broker服务的URL,来开启和集群中<a href="/docs/zh-CN/reference-terminology#broker">broker</a>的交互</li>
 </ul>
-<p>如果您使用<a href="/docs/zh-CN/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL以及为 brokers 群集指定TLS broker服务URL。</p>
+<p>如果使用<a href="/docs/zh-CN/security-tls-transport"> TLS </a>,那么您还需要为群集指定TLS Web服务URL,为群集中的各个 broker 指定 TLS broker服务URL。</p>
 <p>Make sure to run <code>initialize-cluster-metadata</code> for each cluster in your instance.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-bookkeeper"></a><a href="#deploying-bookkeeper" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
 <p>BookKeeper provides <a href="/docs/zh-CN/concepts-architecture-overview#persistent-storage">persistent message storage</a> for Pulsar.</p>
diff --git a/content/docs/zh-CN/deploy-bare-metal-multi-cluster/index.html b/content/docs/zh-CN/deploy-bare-metal-multi-cluster/index.html
index 0100555..574e357 100644
--- a/content/docs/zh-CN/deploy-bare-metal-multi-cluster/index.html
+++ b/content/docs/zh-CN/deploy-bare-metal-multi-cluster/index.html
@@ -212,7 +212,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.3.0
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="cluster-metadata-initialization"></a><a href="#cluster-metadata-initialization" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 [...]
 <p>Once you've set up the cluster-specific ZooKeeper and configuration store quorums for your instance, there is some metadata that needs to be written to ZooKeeper for each cluster in your instance. <strong>It only needs to be written once</strong>.</p>
-<p>You can initialize this metadata using the <a href="/docs/zh-CN/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. 这里有一个示例:</p>
+<p>You can initialize this metadata using the <a href="/docs/zh-CN/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar initialize-cluster-metadata \</span>
   --cluster us-west \
   --zookeeper zk1.us-west.example.com:2181 \
@@ -230,7 +230,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.3.0
 <li>集群的web服务URL</li>
 <li>Broker服务的URL,来开启和集群中<a href="/docs/zh-CN/reference-terminology#broker">broker</a>的交互</li>
 </ul>
-<p>如果您使用<a href="/docs/zh-CN/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL以及为 brokers 群集指定TLS broker服务URL。</p>
+<p>如果使用<a href="/docs/zh-CN/security-tls-transport"> TLS </a>,那么您还需要为群集指定TLS Web服务URL,为群集中的各个 broker 指定 TLS broker服务URL。</p>
 <p>Make sure to run <code>initialize-cluster-metadata</code> for each cluster in your instance.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-bookkeeper"></a><a href="#deploying-bookkeeper" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
 <p>BookKeeper provides <a href="/docs/zh-CN/concepts-architecture-overview#persistent-storage">persistent message storage</a> for Pulsar.</p>
diff --git a/content/docs/zh-CN/deploy-bare-metal.html b/content/docs/zh-CN/deploy-bare-metal.html
index 5d997f3..4f29299 100644
--- a/content/docs/zh-CN/deploy-bare-metal.html
+++ b/content/docs/zh-CN/deploy-bare-metal.html
@@ -92,7 +92,7 @@
 <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 [...]
 <h3><a class="anchor" aria-hidden="true" id="要求"></a><a href="#要求" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c [...]
 <blockquote>
-<p>如果你想使用已有的zookeeper集群,那就不用准备额外的机器去运行zookeeper。</p>
+<p>如果您想使用已有的zookeeper集群,那就不用准备额外的机器去运行zookeeper。</p>
 </blockquote>
 <p>要在裸机上运行Pulsar,建议准备以下资源:</p>
 <ul>
@@ -101,7 +101,7 @@
 <li>3台运行<a href="https://zookeeper.apache.org">ZooKeeper</a></li>
 <li>3台运行Pulsar broker,一台 <a href="https://bookkeeper.apache.org">BookKeeper</a> bookie</li>
 </ul></li>
-<li>一个 <a href="https://en.wikipedia.org/wiki/Domain_Name_System">DNS</a>(域名解析服务器)包含Pulsar所有broker主机</li>
+<li>一个 包含Pulsar所有broker主机的<a href="https://en.wikipedia.org/wiki/Domain_Name_System">DNS</a>(域名解析服务器)</li>
 </ul>
 <blockquote>
 <p>如果没有足够的机器,或者想在集群模式下使用 Pulsar (稍后扩展集群),可以把 Pulsar 部署在一个节点上,该节点会在同一台机器上运行 zookeeper、bookie 和 broker。</p>
@@ -113,18 +113,18 @@
 <h3><a class="anchor" aria-hidden="true" id="hardware-considerations"></a><a href="#hardware-considerations" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 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>在部署 Pulsar 集群时,我们提供了一些基本建议,在容量规划时应牢记这些建议。</p>
 <h4><a class="anchor" aria-hidden="true" id="zookeeper"></a><a href="#zookeeper" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>对于运行ZooKeeper的机器,我们建议使用配置一般的机器或VM。 Pulsar使用ZooKeeper只是定期做些协调和配置相关的任务,<em>不</em>用于基本操作。 如果您在<a href="https://aws.amazon.com/">Amazon Web Services </a>(AWS)上部署Pulsar,比如一个<a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html">t2.small </a>实例就足够了。</p>
+<p>对于运行ZooKeeper的机器,我们建议使用配置一般的机器或VM。 Pulsar使用ZooKeeper只是定期做些协调和配置相关的任务,<em>不</em>用于基本操作。 如果您在<a href="https://aws.amazon.com/">Amazon Web Services </a>(AWS)上部署Pulsar,例如一个<a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html">t2.small </a>实例就足够了。</p>
 <h4><a class="anchor" aria-hidden="true" id="bookies-brokers"></a><a href="#bookies-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
 <p>对于运行 bookie 和 Pulsar broker 的机器,我们建议使用性能更强大的机器。 例如,对于AWS部署,<a href="https://aws.amazon.com/blogs/aws/now-available-i3-instances-for-demanding-io-intensive-applications/">i3.4xlarge</a>实例可能是合适的。 在这些机器上部署,我们还有以下建议:</p>
 <ul>
 <li>高性能的CPU和10Gbps <a href="https://en.wikipedia.org/wiki/Network_interface_controller"> NIC </a>(适用于Pulsar brokers)</li>
-<li>小型快速固态硬盘<a href="https://en.wikipedia.org/wiki/Solid-state_drive">(SSD)</a>或硬盘驱动器<a href="https://en.wikipedia.org/wiki/Hard_disk_drive">(HDD)</a>,带有<a href="https://en.wikipedia.org/wiki/RAID">RAID</a>控制器和电池供电的写缓存(适用于BookKeeper bookies)</li>
+<li>小型快速<a href="https://en.wikipedia.org/wiki/Solid-state_drive">固态硬盘</a>(SSD)或<a href="https://en.wikipedia.org/wiki/Hard_disk_drive">硬盘驱动器</a>(HDD),带有<a href="https://en.wikipedia.org/wiki/RAID">RAID</a>控制器和电池供电的写缓存(适用于BookKeeper bookies)</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="安装pulsar二进制包"></a><a href="#安装pulsar二进制包" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <blockquote>
 <p>You'll need to install the Pulsar binary package on <em>each machine in the cluster</em>, including machines running <a href="#deploying-a-zookeeper-cluster">ZooKeeper</a> and <a href="#deploying-a-bookkeeper-cluster">BookKeeper</a>.</p>
 </blockquote>
-<p>要开始在裸机上部署Pulsar集群,您需要通过以下方式之一下载二进制压缩包:</p>
+<p>要在裸机上部署Pulsar集群,用以下任意方式下载二进制压缩包:</p>
 <ul>
 <li>点击下面的链接,会自动触发下载:
 <ul>
@@ -190,11 +190,11 @@ pulsar-io-twitter-2.3.0.nar
 <blockquote>
 <p>从<code>2.2.0</code>版本,Pulsar发布了一个单独的二进制发行版,其中包含分层存储卸载器。 如果您想启用分层存储功能,可以按照以下说明操作; 否则你可以暂时跳过此部分。</p>
 </blockquote>
-<p>要使用分层存储卸载器,您需要在每个broker节点上下载其发行版压缩包,可通过以下方式之一来进行下载:</p>
+<p>要使用分层存储卸载器,您需要在每个broker节点上下载其发行版压缩包,可通过以下任一方式来下载:</p>
 <ul>
 <li><p>通过单击下面的链接并从 Apache 镜像下载该版本:</p>
 <ul>
-<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-offloaders-2.3.0-bin.tar.gz" download>Pulsar Tiered Storage Offloaders 2.3.0 release</a></li>
+<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-offloaders-2.3.0-bin.tar.gz" download>Pulsar 分层存储下载器 2.3.0 版本</a></li>
 </ul></li>
 <li><p>从Pulsar <a href="/download">下载页</a></p></li>
 <li><p>from the Pulsar <a href="https://github.com/apache/pulsar/releases/latest">releases page</a></p></li>
@@ -213,19 +213,19 @@ $ mv apache-pulsar-offloaders-2.3.0/offloaders offloaders
 $ ls offloaders
 tiered-storage-jcloud-2.3.0.nar
 </code></pre>
-<p>有关如何配置分层存储功能的更多详细信息,可以参考此<a href="/docs/zh-CN/cookbooks-tiered-storage">分层存储手册</a></p>
+<p>有关如何配置分层存储功能的更多详细信息,参考<a href="/docs/zh-CN/cookbooks-tiered-storage">分层存储手册</a>。</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-a-zookeeper-cluster"></a><a href="#deploying-a-zookeeper-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 2.5S13.98 12  [...]
 <blockquote>
 <p>If you already have an exsiting zookeeper cluster and would like to use it, you can skip this section.</p>
 </blockquote>
 <p><a href="https://zookeeper.apache.org">ZooKeeper</a> manages a variety of essential coordination- and configuration-related tasks for Pulsar. To deploy a Pulsar cluster you'll need to deploy ZooKeeper first (before all other components). We recommend deploying a 3-node ZooKeeper cluster. Pulsar does not make heavy use of ZooKeeper, so more lightweight machines or VMs should suffice for running ZooKeeper.</p>
-<p>To begin, add all ZooKeeper servers to the configuration specified in <a href="/docs/zh-CN/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> (in the Pulsar directory you created <a href="#installing-the-pulsar-binary-package">above</a>). 这里有一个示例:</p>
+<p>To begin, add all ZooKeeper servers to the configuration specified in <a href="/docs/zh-CN/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> (in the Pulsar directory you created <a href="#installing-the-pulsar-binary-package">above</a>). 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-meta">server.1</span>=<span class="hljs-string">zk1.us-west.example.com:2888:3888</span>
 <span class="hljs-meta">server.2</span>=<span class="hljs-string">zk2.us-west.example.com:2888:3888</span>
 <span class="hljs-meta">server.3</span>=<span class="hljs-string">zk3.us-west.example.com:2888:3888</span>
 </code></pre>
 <blockquote>
-<p>如果您只有一台机器来部署Pulsar,则只需在配置文件中添加一个服务器条目即可。</p>
+<p>如果您只有一台机器来部署Pulsar,只需在配置文件中添加一个服务器条目即可。</p>
 </blockquote>
 <p>On each host, you need to specify the ID of the node in each node's <code>myid</code> file, which is in each server's <code>data/zookeeper</code> folder by default (this can be changed via the <a href="/docs/zh-CN/reference-configuration#zookeeper-dataDir"><code>dataDir</code></a> parameter).</p>
 <blockquote>
@@ -247,7 +247,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="initializing-cluster-metadata"></a><a href="#initializing-cluster-metadata" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12  [...]
 <p>Once you've deployed ZooKeeper for your cluster, there is some metadata that needs to be written to ZooKeeper for each cluster in your instance. It only needs to be written <strong>once</strong>.</p>
-<p>You can initialize this metadata using the <a href="/docs/zh-CN/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. This command can be run on any machine in your ZooKeeper cluster. 这里有一个示例:</p>
+<p>You can initialize this metadata using the <a href="/docs/zh-CN/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. This command can be run on any machine in your ZooKeeper cluster. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar initialize-cluster-metadata \</span>
   --cluster pulsar-cluster-1 \
   --zookeeper zk1.us-west.example.com:2181 \
@@ -265,16 +265,16 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <tbody>
 <tr><td style="text-align:left"><code>--cluster</code></td><td style="text-align:left">集群名字</td></tr>
 <tr><td style="text-align:left"><code>--zookeeper</code></td><td style="text-align:left">A &quot;local&quot; ZooKeeper connection string for the cluster. This connection string only needs to include <em>one</em> machine in the ZooKeeper cluster.</td></tr>
-<tr><td style="text-align:left"><code>--configuration-store</code></td><td style="text-align:left">整个集群实例的配置存储连接字符串。 和<code>--zookeeper</code>参数一样只需要包含ZooKeeper集群中的<em>一个</em>节点即可。</td></tr>
+<tr><td style="text-align:left"><code>--configuration-store</code></td><td style="text-align:left">整个集群实例的配置存储连接字符串。 和<code>--zookeeper</code>标记一样,该连接字符串只需包含ZooKeeper集群中的<em>任一台</em>机器即可。</td></tr>
 <tr><td style="text-align:left"><code>--web-service-url</code></td><td style="text-align:left">The web service URL for the cluster, plus a port. This URL should be a standard DNS name. The default port is 8080 (we don't recommend using a different port).</td></tr>
 <tr><td style="text-align:left"><code>--web-service-url-tls</code></td><td style="text-align:left">If you're using <a href="/docs/zh-CN/security-tls-transport">TLS</a>, you'll also need to specify a TLS web service URL for the cluster. The default port is 8443 (we don't recommend using a different port).</td></tr>
-<tr><td style="text-align:left"><code>--broker-service-url</code></td><td style="text-align:left">Broker服务的URL,用于与集群中的brokers进行交互。 此URL应使用与Web服务URL相同的DNS名称,但应使用<code>pulsar</code>替代http/https。 端口默认6650(我们不建议使用其他端口)。</td></tr>
-<tr><td style="text-align:left"><code>--broker-service-url-tls</code></td><td style="text-align:left">如果您使用<a href="/docs/zh-CN/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL以及为 brokers 群集指定TLS broker服务URL。 端口默认6651(我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--broker-service-url</code></td><td style="text-align:left">Broker服务的URL,用于与集群中的brokers进行交互。 此URL应使用与Web服务URL相同的DNS名称,但应使用<code>pulsar</code>替代scheme。 默认端口为 6650 (我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--broker-service-url-tls</code></td><td style="text-align:left">如果使用<a href="/docs/zh-CN/security-tls-transport"> TLS </a>,那么您还需要为群集指定TLS Web服务URL,为群集中的各个 broker 指定 TLS broker服务URL。 默认端口为 6651 (我们不建议使用其他端口)。</td></tr>
 </tbody>
 </table>
 <h2><a class="anchor" aria-hidden="true" id="deploying-a-bookkeeper-cluster"></a><a href="#deploying-a-bookkeeper-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 2.5S13.98 1 [...]
 <p><a href="https://bookkeeper.apache.org">BookKeeper</a> handles all persistent data storage in Pulsar. You will need to deploy a cluster of BookKeeper bookies to use Pulsar. We recommend running a <strong>3-bookie BookKeeper cluster</strong>.</p>
-<p>BookKeeper bookies can be configured using the <a href="/docs/zh-CN/reference-configuration#bookkeeper"><code>conf/bookkeeper.conf</code></a> configuration file. The most important step in configuring bookies for our purposes here is ensuring that the <a href="/docs/zh-CN/reference-configuration#bookkeeper-zkServers"><code>zkServers</code></a> is set to the connection string for the ZooKeeper cluster. 这里有一个示例:</p>
+<p>BookKeeper bookies can be configured using the <a href="/docs/zh-CN/reference-configuration#bookkeeper"><code>conf/bookkeeper.conf</code></a> configuration file. The most important step in configuring bookies for our purposes here is ensuring that the <a href="/docs/zh-CN/reference-configuration#bookkeeper-zkServers"><code>zkServers</code></a> is set to the connection string for the ZooKeeper cluster. 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zkServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
 <p>Once you've appropriately modified the <code>zkServers</code> parameter, you can provide any other configuration modifications you need. You can find a full listing of the available BookKeeper configuration parameters <a href="/docs/zh-CN/reference-configuration#bookkeeper">here</a>, although we would recommend consulting the <a href="http://bookkeeper.apache.org/docs/latest/reference/config/">BookKeeper documentation</a> for a more in-depth guide.</p>
@@ -305,7 +305,7 @@ $ bin/pulsar-daemon start bookie
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
-<h3><a class="anchor" aria-hidden="true" id="配置brokers"></a><a href="#配置brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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 [...]
+<h3><a class="anchor" aria-hidden="true" id="配置broker"></a><a href="#配置broker" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
@@ -314,7 +314,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
 </code></pre>
 <blockquote>
-<p>如果在单节点集群中部署Pulsar,则应将<code>conf/broker.conf</code>中的复制设置更新为<code>1</code></p>
+<p>如果在单节点集群中部署Pulsar,您需要把<code>conf/broker.conf</code>文件中的复制设置更新为<code>1</code>。</p>
 <pre><code class="hljs css language-properties"></code></pre>
 </blockquote>
 <h1><a class="anchor" aria-hidden="true" id="number-of-bookies-to-use-when-creating-a-ledger"></a><a href="#number-of-bookies-to-use-when-creating-a-ledger" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9 [...]
@@ -342,7 +342,7 @@ If you want to enable [<span class="hljs-string">Pulsar Functions</span>](<span
 <span class="hljs-code">      ```</span>
 <span class="hljs-code">      </span>
 
-<span class="hljs-section">### 启动 Brokers</span>
+<span class="hljs-section">### 启动 Broker</span>
 
 You can then provide any other configuration changes that you'd like in the [<span class="hljs-string">`conf/broker.conf`</span>](<span class="hljs-link">/docs/zh-CN/reference-configuration#broker</span>) file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.
 
@@ -357,7 +357,7 @@ $ bin/pulsar broker
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-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 2.5S1 [...]
 <p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="/docs/zh-CN/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/zh-CN/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. 这里有一个示例:</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/zh-CN/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -377,7 +377,7 @@ $ bin/pulsar broker
   -s <span class="hljs-string">"consumer-test"</span> \
   -t <span class="hljs-string">"Exclusive"</span>
 </code></pre>
-<p>一旦上面的消息被成功发布到Topic中,您会在标准输出中看到它:</p>
+<p>上面的消息成功发布到主题后,您会在标准输出中看到:</p>
 <pre><code class="hljs css language-bash">----- 收到消息 -----
 Hello Pulsar
 </code></pre>
@@ -401,7 +401,7 @@ Hello Pulsar
 <p>You will see output as below:</p>
 <pre><code class="hljs css language-shell">hello world!
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/deploy-kubernetes"><span class="arrow-prev">← </span><span>Kubernetes</span></a><a class="docs-next button" href="/docs/zh-CN/deploy-bare-metal-multi-cluster"><span>裸机多集群部署</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#准备工作">准备工作</a><ul class="toc-headings"><li><a href="#要求">要求</a></li><li><a href="#hardware-co [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/deploy-kubernetes"><span class="arrow-prev">← </span><span>Kubernetes</span></a><a class="docs-next button" href="/docs/zh-CN/deploy-bare-metal-multi-cluster"><span>裸机多集群部署</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#准备工作">准备工作</a><ul class="toc-headings"><li><a href="#要求">要求</a></li><li><a href="#hardware-co [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/deploy-bare-metal/index.html b/content/docs/zh-CN/deploy-bare-metal/index.html
index 5d997f3..4f29299 100644
--- a/content/docs/zh-CN/deploy-bare-metal/index.html
+++ b/content/docs/zh-CN/deploy-bare-metal/index.html
@@ -92,7 +92,7 @@
 <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 [...]
 <h3><a class="anchor" aria-hidden="true" id="要求"></a><a href="#要求" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c [...]
 <blockquote>
-<p>如果你想使用已有的zookeeper集群,那就不用准备额外的机器去运行zookeeper。</p>
+<p>如果您想使用已有的zookeeper集群,那就不用准备额外的机器去运行zookeeper。</p>
 </blockquote>
 <p>要在裸机上运行Pulsar,建议准备以下资源:</p>
 <ul>
@@ -101,7 +101,7 @@
 <li>3台运行<a href="https://zookeeper.apache.org">ZooKeeper</a></li>
 <li>3台运行Pulsar broker,一台 <a href="https://bookkeeper.apache.org">BookKeeper</a> bookie</li>
 </ul></li>
-<li>一个 <a href="https://en.wikipedia.org/wiki/Domain_Name_System">DNS</a>(域名解析服务器)包含Pulsar所有broker主机</li>
+<li>一个 包含Pulsar所有broker主机的<a href="https://en.wikipedia.org/wiki/Domain_Name_System">DNS</a>(域名解析服务器)</li>
 </ul>
 <blockquote>
 <p>如果没有足够的机器,或者想在集群模式下使用 Pulsar (稍后扩展集群),可以把 Pulsar 部署在一个节点上,该节点会在同一台机器上运行 zookeeper、bookie 和 broker。</p>
@@ -113,18 +113,18 @@
 <h3><a class="anchor" aria-hidden="true" id="hardware-considerations"></a><a href="#hardware-considerations" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 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>在部署 Pulsar 集群时,我们提供了一些基本建议,在容量规划时应牢记这些建议。</p>
 <h4><a class="anchor" aria-hidden="true" id="zookeeper"></a><a href="#zookeeper" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>对于运行ZooKeeper的机器,我们建议使用配置一般的机器或VM。 Pulsar使用ZooKeeper只是定期做些协调和配置相关的任务,<em>不</em>用于基本操作。 如果您在<a href="https://aws.amazon.com/">Amazon Web Services </a>(AWS)上部署Pulsar,比如一个<a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html">t2.small </a>实例就足够了。</p>
+<p>对于运行ZooKeeper的机器,我们建议使用配置一般的机器或VM。 Pulsar使用ZooKeeper只是定期做些协调和配置相关的任务,<em>不</em>用于基本操作。 如果您在<a href="https://aws.amazon.com/">Amazon Web Services </a>(AWS)上部署Pulsar,例如一个<a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html">t2.small </a>实例就足够了。</p>
 <h4><a class="anchor" aria-hidden="true" id="bookies-brokers"></a><a href="#bookies-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
 <p>对于运行 bookie 和 Pulsar broker 的机器,我们建议使用性能更强大的机器。 例如,对于AWS部署,<a href="https://aws.amazon.com/blogs/aws/now-available-i3-instances-for-demanding-io-intensive-applications/">i3.4xlarge</a>实例可能是合适的。 在这些机器上部署,我们还有以下建议:</p>
 <ul>
 <li>高性能的CPU和10Gbps <a href="https://en.wikipedia.org/wiki/Network_interface_controller"> NIC </a>(适用于Pulsar brokers)</li>
-<li>小型快速固态硬盘<a href="https://en.wikipedia.org/wiki/Solid-state_drive">(SSD)</a>或硬盘驱动器<a href="https://en.wikipedia.org/wiki/Hard_disk_drive">(HDD)</a>,带有<a href="https://en.wikipedia.org/wiki/RAID">RAID</a>控制器和电池供电的写缓存(适用于BookKeeper bookies)</li>
+<li>小型快速<a href="https://en.wikipedia.org/wiki/Solid-state_drive">固态硬盘</a>(SSD)或<a href="https://en.wikipedia.org/wiki/Hard_disk_drive">硬盘驱动器</a>(HDD),带有<a href="https://en.wikipedia.org/wiki/RAID">RAID</a>控制器和电池供电的写缓存(适用于BookKeeper bookies)</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="安装pulsar二进制包"></a><a href="#安装pulsar二进制包" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <blockquote>
 <p>You'll need to install the Pulsar binary package on <em>each machine in the cluster</em>, including machines running <a href="#deploying-a-zookeeper-cluster">ZooKeeper</a> and <a href="#deploying-a-bookkeeper-cluster">BookKeeper</a>.</p>
 </blockquote>
-<p>要开始在裸机上部署Pulsar集群,您需要通过以下方式之一下载二进制压缩包:</p>
+<p>要在裸机上部署Pulsar集群,用以下任意方式下载二进制压缩包:</p>
 <ul>
 <li>点击下面的链接,会自动触发下载:
 <ul>
@@ -190,11 +190,11 @@ pulsar-io-twitter-2.3.0.nar
 <blockquote>
 <p>从<code>2.2.0</code>版本,Pulsar发布了一个单独的二进制发行版,其中包含分层存储卸载器。 如果您想启用分层存储功能,可以按照以下说明操作; 否则你可以暂时跳过此部分。</p>
 </blockquote>
-<p>要使用分层存储卸载器,您需要在每个broker节点上下载其发行版压缩包,可通过以下方式之一来进行下载:</p>
+<p>要使用分层存储卸载器,您需要在每个broker节点上下载其发行版压缩包,可通过以下任一方式来下载:</p>
 <ul>
 <li><p>通过单击下面的链接并从 Apache 镜像下载该版本:</p>
 <ul>
-<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-offloaders-2.3.0-bin.tar.gz" download>Pulsar Tiered Storage Offloaders 2.3.0 release</a></li>
+<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-offloaders-2.3.0-bin.tar.gz" download>Pulsar 分层存储下载器 2.3.0 版本</a></li>
 </ul></li>
 <li><p>从Pulsar <a href="/download">下载页</a></p></li>
 <li><p>from the Pulsar <a href="https://github.com/apache/pulsar/releases/latest">releases page</a></p></li>
@@ -213,19 +213,19 @@ $ mv apache-pulsar-offloaders-2.3.0/offloaders offloaders
 $ ls offloaders
 tiered-storage-jcloud-2.3.0.nar
 </code></pre>
-<p>有关如何配置分层存储功能的更多详细信息,可以参考此<a href="/docs/zh-CN/cookbooks-tiered-storage">分层存储手册</a></p>
+<p>有关如何配置分层存储功能的更多详细信息,参考<a href="/docs/zh-CN/cookbooks-tiered-storage">分层存储手册</a>。</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-a-zookeeper-cluster"></a><a href="#deploying-a-zookeeper-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 2.5S13.98 12  [...]
 <blockquote>
 <p>If you already have an exsiting zookeeper cluster and would like to use it, you can skip this section.</p>
 </blockquote>
 <p><a href="https://zookeeper.apache.org">ZooKeeper</a> manages a variety of essential coordination- and configuration-related tasks for Pulsar. To deploy a Pulsar cluster you'll need to deploy ZooKeeper first (before all other components). We recommend deploying a 3-node ZooKeeper cluster. Pulsar does not make heavy use of ZooKeeper, so more lightweight machines or VMs should suffice for running ZooKeeper.</p>
-<p>To begin, add all ZooKeeper servers to the configuration specified in <a href="/docs/zh-CN/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> (in the Pulsar directory you created <a href="#installing-the-pulsar-binary-package">above</a>). 这里有一个示例:</p>
+<p>To begin, add all ZooKeeper servers to the configuration specified in <a href="/docs/zh-CN/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> (in the Pulsar directory you created <a href="#installing-the-pulsar-binary-package">above</a>). 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-meta">server.1</span>=<span class="hljs-string">zk1.us-west.example.com:2888:3888</span>
 <span class="hljs-meta">server.2</span>=<span class="hljs-string">zk2.us-west.example.com:2888:3888</span>
 <span class="hljs-meta">server.3</span>=<span class="hljs-string">zk3.us-west.example.com:2888:3888</span>
 </code></pre>
 <blockquote>
-<p>如果您只有一台机器来部署Pulsar,则只需在配置文件中添加一个服务器条目即可。</p>
+<p>如果您只有一台机器来部署Pulsar,只需在配置文件中添加一个服务器条目即可。</p>
 </blockquote>
 <p>On each host, you need to specify the ID of the node in each node's <code>myid</code> file, which is in each server's <code>data/zookeeper</code> folder by default (this can be changed via the <a href="/docs/zh-CN/reference-configuration#zookeeper-dataDir"><code>dataDir</code></a> parameter).</p>
 <blockquote>
@@ -247,7 +247,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="initializing-cluster-metadata"></a><a href="#initializing-cluster-metadata" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12  [...]
 <p>Once you've deployed ZooKeeper for your cluster, there is some metadata that needs to be written to ZooKeeper for each cluster in your instance. It only needs to be written <strong>once</strong>.</p>
-<p>You can initialize this metadata using the <a href="/docs/zh-CN/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. This command can be run on any machine in your ZooKeeper cluster. 这里有一个示例:</p>
+<p>You can initialize this metadata using the <a href="/docs/zh-CN/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. This command can be run on any machine in your ZooKeeper cluster. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar initialize-cluster-metadata \</span>
   --cluster pulsar-cluster-1 \
   --zookeeper zk1.us-west.example.com:2181 \
@@ -265,16 +265,16 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <tbody>
 <tr><td style="text-align:left"><code>--cluster</code></td><td style="text-align:left">集群名字</td></tr>
 <tr><td style="text-align:left"><code>--zookeeper</code></td><td style="text-align:left">A &quot;local&quot; ZooKeeper connection string for the cluster. This connection string only needs to include <em>one</em> machine in the ZooKeeper cluster.</td></tr>
-<tr><td style="text-align:left"><code>--configuration-store</code></td><td style="text-align:left">整个集群实例的配置存储连接字符串。 和<code>--zookeeper</code>参数一样只需要包含ZooKeeper集群中的<em>一个</em>节点即可。</td></tr>
+<tr><td style="text-align:left"><code>--configuration-store</code></td><td style="text-align:left">整个集群实例的配置存储连接字符串。 和<code>--zookeeper</code>标记一样,该连接字符串只需包含ZooKeeper集群中的<em>任一台</em>机器即可。</td></tr>
 <tr><td style="text-align:left"><code>--web-service-url</code></td><td style="text-align:left">The web service URL for the cluster, plus a port. This URL should be a standard DNS name. The default port is 8080 (we don't recommend using a different port).</td></tr>
 <tr><td style="text-align:left"><code>--web-service-url-tls</code></td><td style="text-align:left">If you're using <a href="/docs/zh-CN/security-tls-transport">TLS</a>, you'll also need to specify a TLS web service URL for the cluster. The default port is 8443 (we don't recommend using a different port).</td></tr>
-<tr><td style="text-align:left"><code>--broker-service-url</code></td><td style="text-align:left">Broker服务的URL,用于与集群中的brokers进行交互。 此URL应使用与Web服务URL相同的DNS名称,但应使用<code>pulsar</code>替代http/https。 端口默认6650(我们不建议使用其他端口)。</td></tr>
-<tr><td style="text-align:left"><code>--broker-service-url-tls</code></td><td style="text-align:left">如果您使用<a href="/docs/zh-CN/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL以及为 brokers 群集指定TLS broker服务URL。 端口默认6651(我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--broker-service-url</code></td><td style="text-align:left">Broker服务的URL,用于与集群中的brokers进行交互。 此URL应使用与Web服务URL相同的DNS名称,但应使用<code>pulsar</code>替代scheme。 默认端口为 6650 (我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--broker-service-url-tls</code></td><td style="text-align:left">如果使用<a href="/docs/zh-CN/security-tls-transport"> TLS </a>,那么您还需要为群集指定TLS Web服务URL,为群集中的各个 broker 指定 TLS broker服务URL。 默认端口为 6651 (我们不建议使用其他端口)。</td></tr>
 </tbody>
 </table>
 <h2><a class="anchor" aria-hidden="true" id="deploying-a-bookkeeper-cluster"></a><a href="#deploying-a-bookkeeper-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 2.5S13.98 1 [...]
 <p><a href="https://bookkeeper.apache.org">BookKeeper</a> handles all persistent data storage in Pulsar. You will need to deploy a cluster of BookKeeper bookies to use Pulsar. We recommend running a <strong>3-bookie BookKeeper cluster</strong>.</p>
-<p>BookKeeper bookies can be configured using the <a href="/docs/zh-CN/reference-configuration#bookkeeper"><code>conf/bookkeeper.conf</code></a> configuration file. The most important step in configuring bookies for our purposes here is ensuring that the <a href="/docs/zh-CN/reference-configuration#bookkeeper-zkServers"><code>zkServers</code></a> is set to the connection string for the ZooKeeper cluster. 这里有一个示例:</p>
+<p>BookKeeper bookies can be configured using the <a href="/docs/zh-CN/reference-configuration#bookkeeper"><code>conf/bookkeeper.conf</code></a> configuration file. The most important step in configuring bookies for our purposes here is ensuring that the <a href="/docs/zh-CN/reference-configuration#bookkeeper-zkServers"><code>zkServers</code></a> is set to the connection string for the ZooKeeper cluster. 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zkServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
 <p>Once you've appropriately modified the <code>zkServers</code> parameter, you can provide any other configuration modifications you need. You can find a full listing of the available BookKeeper configuration parameters <a href="/docs/zh-CN/reference-configuration#bookkeeper">here</a>, although we would recommend consulting the <a href="http://bookkeeper.apache.org/docs/latest/reference/config/">BookKeeper documentation</a> for a more in-depth guide.</p>
@@ -305,7 +305,7 @@ $ bin/pulsar-daemon start bookie
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
-<h3><a class="anchor" aria-hidden="true" id="配置brokers"></a><a href="#配置brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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 [...]
+<h3><a class="anchor" aria-hidden="true" id="配置broker"></a><a href="#配置broker" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
@@ -314,7 +314,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
 </code></pre>
 <blockquote>
-<p>如果在单节点集群中部署Pulsar,则应将<code>conf/broker.conf</code>中的复制设置更新为<code>1</code></p>
+<p>如果在单节点集群中部署Pulsar,您需要把<code>conf/broker.conf</code>文件中的复制设置更新为<code>1</code>。</p>
 <pre><code class="hljs css language-properties"></code></pre>
 </blockquote>
 <h1><a class="anchor" aria-hidden="true" id="number-of-bookies-to-use-when-creating-a-ledger"></a><a href="#number-of-bookies-to-use-when-creating-a-ledger" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9 [...]
@@ -342,7 +342,7 @@ If you want to enable [<span class="hljs-string">Pulsar Functions</span>](<span
 <span class="hljs-code">      ```</span>
 <span class="hljs-code">      </span>
 
-<span class="hljs-section">### 启动 Brokers</span>
+<span class="hljs-section">### 启动 Broker</span>
 
 You can then provide any other configuration changes that you'd like in the [<span class="hljs-string">`conf/broker.conf`</span>](<span class="hljs-link">/docs/zh-CN/reference-configuration#broker</span>) file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.
 
@@ -357,7 +357,7 @@ $ bin/pulsar broker
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-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 2.5S1 [...]
 <p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="/docs/zh-CN/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/zh-CN/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. 这里有一个示例:</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/zh-CN/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -377,7 +377,7 @@ $ bin/pulsar broker
   -s <span class="hljs-string">"consumer-test"</span> \
   -t <span class="hljs-string">"Exclusive"</span>
 </code></pre>
-<p>一旦上面的消息被成功发布到Topic中,您会在标准输出中看到它:</p>
+<p>上面的消息成功发布到主题后,您会在标准输出中看到:</p>
 <pre><code class="hljs css language-bash">----- 收到消息 -----
 Hello Pulsar
 </code></pre>
@@ -401,7 +401,7 @@ Hello Pulsar
 <p>You will see output as below:</p>
 <pre><code class="hljs css language-shell">hello world!
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/deploy-kubernetes"><span class="arrow-prev">← </span><span>Kubernetes</span></a><a class="docs-next button" href="/docs/zh-CN/deploy-bare-metal-multi-cluster"><span>裸机多集群部署</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#准备工作">准备工作</a><ul class="toc-headings"><li><a href="#要求">要求</a></li><li><a href="#hardware-co [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/deploy-kubernetes"><span class="arrow-prev">← </span><span>Kubernetes</span></a><a class="docs-next button" href="/docs/zh-CN/deploy-bare-metal-multi-cluster"><span>裸机多集群部署</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#准备工作">准备工作</a><ul class="toc-headings"><li><a href="#要求">要求</a></li><li><a href="#hardware-co [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/functions-api.html b/content/docs/zh-CN/functions-api.html
index 177baec..280d19e 100644
--- a/content/docs/zh-CN/functions-api.html
+++ b/content/docs/zh-CN/functions-api.html
@@ -471,7 +471,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
 <p>For all key/value pairs passed to Java Pulsar Functions, both the key <em>and</em> the value are <code>String</code>s. If you'd like the value to be of a different type, you will need to deserialize from the <code>String</code> type.</p>
 </blockquote>
 <h3><a class="anchor" aria-hidden="true" id="java-metrics"></a><a href="#java-metrics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 这里有一个示例:</p>
+<p>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 下面是一个示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.functions.api.Context;
 <span class="hljs-keyword">import</span> org.apache.pulsar.functions.api.Function;
 
@@ -559,7 +559,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
 </tbody>
 </table>
 <h3><a class="anchor" aria-hidden="true" id="python-serde"></a><a href="#python-serde" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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 Functions use <a href="#serialization-and-deserialization-serde">SerDe</a> when publishing data to and consuming data from Pulsar topics (this is true of both <a href="#python-native-functions">native</a> functions and <a href="#python-sdk-functions">SDK</a> functions). You can specify the SerDe when <a href="/docs/zh-CN/functions-deploying#cluster-mode">creating</a> or <a href="/docs/zh-CN/functions-deploying#local-run-mode">running</a> functions. 这里有一个示例:</p>
+<p>Pulsar Functions use <a href="#serialization-and-deserialization-serde">SerDe</a> when publishing data to and consuming data from Pulsar topics (this is true of both <a href="#python-native-functions">native</a> functions and <a href="#python-sdk-functions">SDK</a> functions). You can specify the SerDe when <a href="/docs/zh-CN/functions-deploying#cluster-mode">creating</a> or <a href="/docs/zh-CN/functions-deploying#local-run-mode">running</a> functions. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --tenant public \
   --namespace default \
@@ -653,7 +653,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="python-metrics"></a><a href="#python-metrics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 这里有一个示例:</p>
+<p>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 下面是一个示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> pulsar <span class="hljs-keyword">import</span> Function
 
 <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MetricRecorderFunction</span><span class="hljs-params">(Function)</span>:</span>
diff --git a/content/docs/zh-CN/functions-api/index.html b/content/docs/zh-CN/functions-api/index.html
index 177baec..280d19e 100644
--- a/content/docs/zh-CN/functions-api/index.html
+++ b/content/docs/zh-CN/functions-api/index.html
@@ -471,7 +471,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
 <p>For all key/value pairs passed to Java Pulsar Functions, both the key <em>and</em> the value are <code>String</code>s. If you'd like the value to be of a different type, you will need to deserialize from the <code>String</code> type.</p>
 </blockquote>
 <h3><a class="anchor" aria-hidden="true" id="java-metrics"></a><a href="#java-metrics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 这里有一个示例:</p>
+<p>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 下面是一个示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.functions.api.Context;
 <span class="hljs-keyword">import</span> org.apache.pulsar.functions.api.Function;
 
@@ -559,7 +559,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
 </tbody>
 </table>
 <h3><a class="anchor" aria-hidden="true" id="python-serde"></a><a href="#python-serde" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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 Functions use <a href="#serialization-and-deserialization-serde">SerDe</a> when publishing data to and consuming data from Pulsar topics (this is true of both <a href="#python-native-functions">native</a> functions and <a href="#python-sdk-functions">SDK</a> functions). You can specify the SerDe when <a href="/docs/zh-CN/functions-deploying#cluster-mode">creating</a> or <a href="/docs/zh-CN/functions-deploying#local-run-mode">running</a> functions. 这里有一个示例:</p>
+<p>Pulsar Functions use <a href="#serialization-and-deserialization-serde">SerDe</a> when publishing data to and consuming data from Pulsar topics (this is true of both <a href="#python-native-functions">native</a> functions and <a href="#python-sdk-functions">SDK</a> functions). You can specify the SerDe when <a href="/docs/zh-CN/functions-deploying#cluster-mode">creating</a> or <a href="/docs/zh-CN/functions-deploying#local-run-mode">running</a> functions. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --tenant public \
   --namespace default \
@@ -653,7 +653,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="python-metrics"></a><a href="#python-metrics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 这里有一个示例:</p>
+<p>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 下面是一个示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> pulsar <span class="hljs-keyword">import</span> Function
 
 <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MetricRecorderFunction</span><span class="hljs-params">(Function)</span>:</span>
diff --git a/content/docs/zh-CN/functions-deploying.html b/content/docs/zh-CN/functions-deploying.html
index 5782003..fd012e9 100644
--- a/content/docs/zh-CN/functions-deploying.html
+++ b/content/docs/zh-CN/functions-deploying.html
@@ -131,13 +131,13 @@
   --inputs persistent://public/default/input-1 \
   --output persistent://public/default/output-1
 </code></pre>
-<p>By default, the function will connect to a Pulsar cluster running on the same machine, via a local <a href="/docs/zh-CN/reference-terminology#broker">broker</a> service URL of <code>pulsar://localhost:6650</code>. 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 这里有一个示例:</p>
+<p>By default, the function will connect to a Pulsar cluster running on the same machine, via a local <a href="/docs/zh-CN/reference-terminology#broker">broker</a> service URL of <code>pulsar://localhost:6650</code>. 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> localrun \
   --broker-service-url pulsar://my-cluster-host:6650 \
   <span class="hljs-comment"># Other function parameters</span>
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="cluster-mode"></a><a href="#cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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 Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 这里有一个示例:</p>
+<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --py myfunc.py \
   --classname myfunc.SomeFunction \
@@ -154,7 +154,7 @@
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="parallelism"></a><a href="#parallelism" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-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>Pulsar Functions run as processes called <strong>instances</strong>. When you run a Pulsar Function, it runs as a single instance by default (and in <a href="#local-run-mode">local run mode</a> you can <em>only</em> run a single instance of a function).</p>
-<p>You can also specify the <em>parallelism</em> of a function, i.e. the number of instances to run, when you create the function. You can set the parallelism factor using the <code>--parallelism</code> flag of the <a href="/docs/zh-CN/pulsar-admin#functions-create"><code>create</code></a> command. 这里有一个示例:</p>
+<p>You can also specify the <em>parallelism</em> of a function, i.e. the number of instances to run, when you create the function. You can set the parallelism factor using the <code>--parallelism</code> flag of the <a href="/docs/zh-CN/pulsar-admin#functions-create"><code>create</code></a> command. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --parallelism 3 \
   <span class="hljs-comment"># Other function info</span>
diff --git a/content/docs/zh-CN/functions-deploying/index.html b/content/docs/zh-CN/functions-deploying/index.html
index 5782003..fd012e9 100644
--- a/content/docs/zh-CN/functions-deploying/index.html
+++ b/content/docs/zh-CN/functions-deploying/index.html
@@ -131,13 +131,13 @@
   --inputs persistent://public/default/input-1 \
   --output persistent://public/default/output-1
 </code></pre>
-<p>By default, the function will connect to a Pulsar cluster running on the same machine, via a local <a href="/docs/zh-CN/reference-terminology#broker">broker</a> service URL of <code>pulsar://localhost:6650</code>. 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 这里有一个示例:</p>
+<p>By default, the function will connect to a Pulsar cluster running on the same machine, via a local <a href="/docs/zh-CN/reference-terminology#broker">broker</a> service URL of <code>pulsar://localhost:6650</code>. 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> localrun \
   --broker-service-url pulsar://my-cluster-host:6650 \
   <span class="hljs-comment"># Other function parameters</span>
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="cluster-mode"></a><a href="#cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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 Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 这里有一个示例:</p>
+<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --py myfunc.py \
   --classname myfunc.SomeFunction \
@@ -154,7 +154,7 @@
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="parallelism"></a><a href="#parallelism" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-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>Pulsar Functions run as processes called <strong>instances</strong>. When you run a Pulsar Function, it runs as a single instance by default (and in <a href="#local-run-mode">local run mode</a> you can <em>only</em> run a single instance of a function).</p>
-<p>You can also specify the <em>parallelism</em> of a function, i.e. the number of instances to run, when you create the function. You can set the parallelism factor using the <code>--parallelism</code> flag of the <a href="/docs/zh-CN/pulsar-admin#functions-create"><code>create</code></a> command. 这里有一个示例:</p>
+<p>You can also specify the <em>parallelism</em> of a function, i.e. the number of instances to run, when you create the function. You can set the parallelism factor using the <code>--parallelism</code> flag of the <a href="/docs/zh-CN/pulsar-admin#functions-create"><code>create</code></a> command. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --parallelism 3 \
   <span class="hljs-comment"># Other function info</span>
diff --git a/content/docs/zh-CN/functions-overview.html b/content/docs/zh-CN/functions-overview.html
index 3712ab9..be6fdf4 100644
--- a/content/docs/zh-CN/functions-overview.html
+++ b/content/docs/zh-CN/functions-overview.html
@@ -203,7 +203,7 @@
 <li>基于 <a href="#command-line-interface">命令行参数</a>通过 <a href="/docs/zh-CN/pulsar-admin#functions">pulsar-admin functions</code></a> 接口</li>
 <li>基于<a href="http://yaml.org/">yaml</a> 配置文件</li>
 </ul>
-<p>If you're supplying a YAML configuration, you must specify a path to the file on the command line. 这里有一个示例:</p>
+<p>If you're supplying a YAML configuration, you must specify a path to the file on the command line. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --<span class="hljs-keyword">function</span>-config-file ./my-function.yaml
 </code></pre>
@@ -297,13 +297,13 @@
   --inputs persistent://public/default/input-1 \
   --output persistent://public/default/output-1
 </code></pre>
-<p>默认情况下,函数连接到同一机器上运行的 Pulsar 集群通过本地的broker服务,URL是 <code>pulsar://localhost:6650</code>。 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 这里有一个示例:</p>
+<p>默认情况下,函数连接到同一机器上运行的 Pulsar 集群通过本地的broker服务,URL是 <code>pulsar://localhost:6650</code>。 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> localrun \
   --broker-service-url pulsar://my-cluster-host:6650 \
   <span class="hljs-comment"># Other function parameters</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="cluster-run-mode"></a><a href="#cluster-run-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
-<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 这里有一个示例:</p>
+<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --py myfunc.py \
   --classname myfunc.SomeFunction \
diff --git a/content/docs/zh-CN/functions-overview/index.html b/content/docs/zh-CN/functions-overview/index.html
index 3712ab9..be6fdf4 100644
--- a/content/docs/zh-CN/functions-overview/index.html
+++ b/content/docs/zh-CN/functions-overview/index.html
@@ -203,7 +203,7 @@
 <li>基于 <a href="#command-line-interface">命令行参数</a>通过 <a href="/docs/zh-CN/pulsar-admin#functions">pulsar-admin functions</code></a> 接口</li>
 <li>基于<a href="http://yaml.org/">yaml</a> 配置文件</li>
 </ul>
-<p>If you're supplying a YAML configuration, you must specify a path to the file on the command line. 这里有一个示例:</p>
+<p>If you're supplying a YAML configuration, you must specify a path to the file on the command line. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --<span class="hljs-keyword">function</span>-config-file ./my-function.yaml
 </code></pre>
@@ -297,13 +297,13 @@
   --inputs persistent://public/default/input-1 \
   --output persistent://public/default/output-1
 </code></pre>
-<p>默认情况下,函数连接到同一机器上运行的 Pulsar 集群通过本地的broker服务,URL是 <code>pulsar://localhost:6650</code>。 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 这里有一个示例:</p>
+<p>默认情况下,函数连接到同一机器上运行的 Pulsar 集群通过本地的broker服务,URL是 <code>pulsar://localhost:6650</code>。 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> localrun \
   --broker-service-url pulsar://my-cluster-host:6650 \
   <span class="hljs-comment"># Other function parameters</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="cluster-run-mode"></a><a href="#cluster-run-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
-<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 这里有一个示例:</p>
+<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --py myfunc.py \
   --classname myfunc.SomeFunction \
diff --git a/content/docs/zh-CN/functions-quickstart.html b/content/docs/zh-CN/functions-quickstart.html
index 01fcd47..01020b4 100644
--- a/content/docs/zh-CN/functions-quickstart.html
+++ b/content/docs/zh-CN/functions-quickstart.html
@@ -108,7 +108,7 @@ $ bin/pulsar standalone \
 </code></pre>
 <blockquote>
 <h4><a class="anchor" aria-hidden="true" id="multiple-input-topics-allowed"></a><a href="#multiple-input-topics-allowed" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12  [...]
-<p>In the example above, a single topic was specified using the <code>--inputs</code> flag. You can also specify multiple input topics as a comma-separated list using the same flag. 这里有一个示例:</p>
+<p>In the example above, a single topic was specified using the <code>--inputs</code> flag. You can also specify multiple input topics as a comma-separated list using the same flag. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash"></code></pre>
 </blockquote>
 <p>--inputs topic1,topic2</p>
@@ -250,7 +250,7 @@ $ touch <span class="hljs-built_in">reverse</span>.py
   --namespace default \
   --name reverse
 </code></pre>
-<p>If you see <code>Created successfully</code>, the function is ready to accept incoming messages. Because the function is running in cluster mode, we can <strong>trigger</strong> the function using the <a href="/docs/zh-CN/pulsar-admin#trigger"><code>trigger</code></a> command. This command will send a message that we specify to the function and also give us the function's output. 这里有一个示例:</p>
+<p>If you see <code>Created successfully</code>, the function is ready to accept incoming messages. Because the function is running in cluster mode, we can <strong>trigger</strong> the function using the <a href="/docs/zh-CN/pulsar-admin#trigger"><code>trigger</code></a> command. This command will send a message that we specify to the function and also give us the function's output. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger \
   --name reverse \
   --tenant public \
diff --git a/content/docs/zh-CN/functions-quickstart/index.html b/content/docs/zh-CN/functions-quickstart/index.html
index 01fcd47..01020b4 100644
--- a/content/docs/zh-CN/functions-quickstart/index.html
+++ b/content/docs/zh-CN/functions-quickstart/index.html
@@ -108,7 +108,7 @@ $ bin/pulsar standalone \
 </code></pre>
 <blockquote>
 <h4><a class="anchor" aria-hidden="true" id="multiple-input-topics-allowed"></a><a href="#multiple-input-topics-allowed" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12  [...]
-<p>In the example above, a single topic was specified using the <code>--inputs</code> flag. You can also specify multiple input topics as a comma-separated list using the same flag. 这里有一个示例:</p>
+<p>In the example above, a single topic was specified using the <code>--inputs</code> flag. You can also specify multiple input topics as a comma-separated list using the same flag. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash"></code></pre>
 </blockquote>
 <p>--inputs topic1,topic2</p>
@@ -250,7 +250,7 @@ $ touch <span class="hljs-built_in">reverse</span>.py
   --namespace default \
   --name reverse
 </code></pre>
-<p>If you see <code>Created successfully</code>, the function is ready to accept incoming messages. Because the function is running in cluster mode, we can <strong>trigger</strong> the function using the <a href="/docs/zh-CN/pulsar-admin#trigger"><code>trigger</code></a> command. This command will send a message that we specify to the function and also give us the function's output. 这里有一个示例:</p>
+<p>If you see <code>Created successfully</code>, the function is ready to accept incoming messages. Because the function is running in cluster mode, we can <strong>trigger</strong> the function using the <a href="/docs/zh-CN/pulsar-admin#trigger"><code>trigger</code></a> command. This command will send a message that we specify to the function and also give us the function's output. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger \
   --name reverse \
   --tenant public \
diff --git a/content/docs/zh-CN/next/adaptors-kafka.html b/content/docs/zh-CN/next/adaptors-kafka.html
index 534fa88..8d99a0c 100644
--- a/content/docs/zh-CN/next/adaptors-kafka.html
+++ b/content/docs/zh-CN/next/adaptors-kafka.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>适配器 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>适配器 [...]
             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 534fa88..8d99a0c 100644
--- a/content/docs/zh-CN/next/adaptors-kafka/index.html
+++ b/content/docs/zh-CN/next/adaptors-kafka/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>适配器 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>适配器 [...]
             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 e394cc9..1562ce9 100644
--- a/content/docs/zh-CN/next/adaptors-spark.html
+++ b/content/docs/zh-CN/next/adaptors-spark.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>适配器 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>适配器 [...]
             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 e394cc9..1562ce9 100644
--- a/content/docs/zh-CN/next/adaptors-spark/index.html
+++ b/content/docs/zh-CN/next/adaptors-spark/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>适配器 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>适配器 [...]
             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 90df3a7..bee2cb5 100644
--- a/content/docs/zh-CN/next/adaptors-storm.html
+++ b/content/docs/zh-CN/next/adaptors-storm.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>适配器 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>适配器 [...]
             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 90df3a7..bee2cb5 100644
--- a/content/docs/zh-CN/next/adaptors-storm/index.html
+++ b/content/docs/zh-CN/next/adaptors-storm/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>适配器 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>适配器 [...]
             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 e1196e5..7ef3727 100644
--- a/content/docs/zh-CN/next/admin-api-brokers.html
+++ b/content/docs/zh-CN/next/admin-api-brokers.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
             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 e1196e5..7ef3727 100644
--- a/content/docs/zh-CN/next/admin-api-brokers/index.html
+++ b/content/docs/zh-CN/next/admin-api-brokers/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
             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 a075a31..9f490f2 100644
--- a/content/docs/zh-CN/next/admin-api-clusters.html
+++ b/content/docs/zh-CN/next/admin-api-clusters.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
             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 a075a31..9f490f2 100644
--- a/content/docs/zh-CN/next/admin-api-clusters/index.html
+++ b/content/docs/zh-CN/next/admin-api-clusters/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
             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 9cb45c6..8f32324 100644
--- a/content/docs/zh-CN/next/admin-api-namespaces.html
+++ b/content/docs/zh-CN/next/admin-api-namespaces.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
             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 9cb45c6..8f32324 100644
--- a/content/docs/zh-CN/next/admin-api-namespaces/index.html
+++ b/content/docs/zh-CN/next/admin-api-namespaces/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
             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 6644dfc..eb14164 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
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
             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 6644dfc..eb14164 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
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
             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 7bc2151..e5ed680 100644
--- a/content/docs/zh-CN/next/admin-api-overview.html
+++ b/content/docs/zh-CN/next/admin-api-overview.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
             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 7bc2151..e5ed680 100644
--- a/content/docs/zh-CN/next/admin-api-overview/index.html
+++ b/content/docs/zh-CN/next/admin-api-overview/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
             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 766557e..d7706d8 100644
--- a/content/docs/zh-CN/next/admin-api-partitioned-topics.html
+++ b/content/docs/zh-CN/next/admin-api-partitioned-topics.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -95,7 +95,7 @@ admin.persistentTopics().createPartitionedTopic(topicName, numPartitions);
 <h3><a class="anchor" aria-hidden="true" id="创建-1"></a><a href="#创建-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <p>如果禁用allowAutoTopicCreation或createIfMissing,则必须显式创建Pulsar中的非分区主题。在创non-partitioned topic时,需要提供topic名称。</p>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-admin-1"></a><a href="#pulsar-admin-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
-<p>你可以使用<a href="/docs/zh-CN/next/pulsar-admin#create"><code>create</code></a>命令创建非分区主题,并将主题名称指定为参数。这是一个命令示例:</p>
+<p>您可以使用<a href="/docs/zh-CN/next/pulsar-admin#create"><code>create</code></a>命令创建非分区主题,并将主题名称指定为参数。如下一个命令示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin topics create persistent://my-tenant/my-namespace/my-topic</span>
 </code></pre>
 <h4><a class="anchor" aria-hidden="true" id="rest-api-1"></a><a href="#rest-api-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
@@ -105,18 +105,18 @@ admin.persistentTopics().createPartitionedTopic(topicName, numPartitions);
 <pre><code class="hljs css language-java">String topicName = <span class="hljs-string">"persistent://my-tenant/my-namespace/my-topic"</span>;
 admin.topics().createNonPartitionedTopic(topicName);
 </code></pre>
-<h3><a class="anchor" aria-hidden="true" id="get-metadata"></a><a href="#get-metadata" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>Partitioned topics have metadata associated with them that you can fetch as a JSON object. The following metadata fields are currently available:</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.09 [...]
+<p>分区主题具有与之关联的元数据, 您可以将其提取为 JSON 对象。 以下元数据字段当前可用:</p>
 <table>
 <thead>
-<tr><th style="text-align:left">Field</th><th style="text-align:left">Meaning</th></tr>
+<tr><th style="text-align:left">字段</th><th style="text-align:left">意义</th></tr>
 </thead>
 <tbody>
-<tr><td style="text-align:left"><code>partitions</code></td><td style="text-align:left">The number of partitions into which the topic is divided</td></tr>
+<tr><td style="text-align:left"><code>分区</code></td><td style="text-align:left">主题划分的分区数</td></tr>
 </tbody>
 </table>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-admin-2"></a><a href="#pulsar-admin-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
-<p>You can see the number of partitions in a partitioned topic using the <a href="/docs/zh-CN/next/pulsar-admin#get-partitioned-topic-metadata"><code>get-partitioned-topic-metadata</code></a> subcommand. 这里有一个示例:</p>
+<p>You can see the number of partitions in a partitioned topic using the <a href="/docs/zh-CN/next/pulsar-admin#get-partitioned-topic-metadata"><code>get-partitioned-topic-metadata</code></a> subcommand. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics get-partitioned-topic-metadata \</span>
   persistent://my-tenant/my-namespace/my-topic
 {
@@ -135,7 +135,7 @@ admin.persistentTopics().getPartitionedTopicMetadata(topicName);
 <p>Decrementing the number of partitions would deleting the topic, which is not supported in Pulsar.</p>
 <p>已创建的分区生产者和消费者,将自动查找新创建的分区。</p>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-admin-3"></a><a href="#pulsar-admin-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>Partitioned topics can be updated using the <a href="/docs/zh-CN/next/pulsar-admin#update-partitioned-topic"><code>update-partitioned-topic</code></a> command.</p>
+<p>分区主题可以使用 <a href="/docs/zh-CN/next/pulsar-admin#update-partitioned-topic"><code>更新分区主题</code></a> 命令更新。</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics update-partitioned-topic \</span>
   persistent://my-tenant/my-namespace/my-topic \
   --partitions 8
@@ -253,7 +253,7 @@ persistent://tenant/namespace/topic2
 <p>It shows detailed statistics of a topic.</p>
 <table>
 <thead>
-<tr><th>Stat</th><th>说明:</th></tr>
+<tr><th>Stat</th><th>说明</th></tr>
 </thead>
 <tbody>
 <tr><td>entriesAddedCounter</td><td>Messages published since this broker loaded this topic</td></tr>
@@ -326,7 +326,7 @@ persistent://tenant/namespace/topic2
 <h4><a class="anchor" aria-hidden="true" id="java-7"></a><a href="#java-7" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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. [...]
 <pre><code class="hljs css language-java">admin.persistentTopics().getInternalStats(persistentTopic);
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/admin-api-non-persistent-topics"><span class="arrow-prev">← </span><span>Non-Persistent topics</span></a><a class="docs-next button" href="/docs/zh-CN/next/admin-api-schemas"><span>Schema</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#分区主题资源">分区主题资源</a><ul class="toc-headings"><li><a href="#创建">创建</a></li>< [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/admin-api-non-persistent-topics"><span class="arrow-prev">← </span><span>Non-Persistent topics</span></a><a class="docs-next button" href="/docs/zh-CN/next/admin-api-schemas"><span>Schema</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#分区主题资源">分区主题资源</a><ul class="toc-headings"><li><a href="#创建">创建</a></li>< [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
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 766557e..d7706d8 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
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -95,7 +95,7 @@ admin.persistentTopics().createPartitionedTopic(topicName, numPartitions);
 <h3><a class="anchor" aria-hidden="true" id="创建-1"></a><a href="#创建-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <p>如果禁用allowAutoTopicCreation或createIfMissing,则必须显式创建Pulsar中的非分区主题。在创non-partitioned topic时,需要提供topic名称。</p>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-admin-1"></a><a href="#pulsar-admin-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
-<p>你可以使用<a href="/docs/zh-CN/next/pulsar-admin#create"><code>create</code></a>命令创建非分区主题,并将主题名称指定为参数。这是一个命令示例:</p>
+<p>您可以使用<a href="/docs/zh-CN/next/pulsar-admin#create"><code>create</code></a>命令创建非分区主题,并将主题名称指定为参数。如下一个命令示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin topics create persistent://my-tenant/my-namespace/my-topic</span>
 </code></pre>
 <h4><a class="anchor" aria-hidden="true" id="rest-api-1"></a><a href="#rest-api-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
@@ -105,18 +105,18 @@ admin.persistentTopics().createPartitionedTopic(topicName, numPartitions);
 <pre><code class="hljs css language-java">String topicName = <span class="hljs-string">"persistent://my-tenant/my-namespace/my-topic"</span>;
 admin.topics().createNonPartitionedTopic(topicName);
 </code></pre>
-<h3><a class="anchor" aria-hidden="true" id="get-metadata"></a><a href="#get-metadata" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>Partitioned topics have metadata associated with them that you can fetch as a JSON object. The following metadata fields are currently available:</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.09 [...]
+<p>分区主题具有与之关联的元数据, 您可以将其提取为 JSON 对象。 以下元数据字段当前可用:</p>
 <table>
 <thead>
-<tr><th style="text-align:left">Field</th><th style="text-align:left">Meaning</th></tr>
+<tr><th style="text-align:left">字段</th><th style="text-align:left">意义</th></tr>
 </thead>
 <tbody>
-<tr><td style="text-align:left"><code>partitions</code></td><td style="text-align:left">The number of partitions into which the topic is divided</td></tr>
+<tr><td style="text-align:left"><code>分区</code></td><td style="text-align:left">主题划分的分区数</td></tr>
 </tbody>
 </table>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-admin-2"></a><a href="#pulsar-admin-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
-<p>You can see the number of partitions in a partitioned topic using the <a href="/docs/zh-CN/next/pulsar-admin#get-partitioned-topic-metadata"><code>get-partitioned-topic-metadata</code></a> subcommand. 这里有一个示例:</p>
+<p>You can see the number of partitions in a partitioned topic using the <a href="/docs/zh-CN/next/pulsar-admin#get-partitioned-topic-metadata"><code>get-partitioned-topic-metadata</code></a> subcommand. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics get-partitioned-topic-metadata \</span>
   persistent://my-tenant/my-namespace/my-topic
 {
@@ -135,7 +135,7 @@ admin.persistentTopics().getPartitionedTopicMetadata(topicName);
 <p>Decrementing the number of partitions would deleting the topic, which is not supported in Pulsar.</p>
 <p>已创建的分区生产者和消费者,将自动查找新创建的分区。</p>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-admin-3"></a><a href="#pulsar-admin-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>Partitioned topics can be updated using the <a href="/docs/zh-CN/next/pulsar-admin#update-partitioned-topic"><code>update-partitioned-topic</code></a> command.</p>
+<p>分区主题可以使用 <a href="/docs/zh-CN/next/pulsar-admin#update-partitioned-topic"><code>更新分区主题</code></a> 命令更新。</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics update-partitioned-topic \</span>
   persistent://my-tenant/my-namespace/my-topic \
   --partitions 8
@@ -253,7 +253,7 @@ persistent://tenant/namespace/topic2
 <p>It shows detailed statistics of a topic.</p>
 <table>
 <thead>
-<tr><th>Stat</th><th>说明:</th></tr>
+<tr><th>Stat</th><th>说明</th></tr>
 </thead>
 <tbody>
 <tr><td>entriesAddedCounter</td><td>Messages published since this broker loaded this topic</td></tr>
@@ -326,7 +326,7 @@ persistent://tenant/namespace/topic2
 <h4><a class="anchor" aria-hidden="true" id="java-7"></a><a href="#java-7" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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. [...]
 <pre><code class="hljs css language-java">admin.persistentTopics().getInternalStats(persistentTopic);
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/admin-api-non-persistent-topics"><span class="arrow-prev">← </span><span>Non-Persistent topics</span></a><a class="docs-next button" href="/docs/zh-CN/next/admin-api-schemas"><span>Schema</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#分区主题资源">分区主题资源</a><ul class="toc-headings"><li><a href="#创建">创建</a></li>< [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/admin-api-non-persistent-topics"><span class="arrow-prev">← </span><span>Non-Persistent topics</span></a><a class="docs-next button" href="/docs/zh-CN/next/admin-api-schemas"><span>Schema</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#分区主题资源">分区主题资源</a><ul class="toc-headings"><li><a href="#创建">创建</a></li>< [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/next/admin-api-permissions.html b/content/docs/zh-CN/next/admin-api-permissions.html
index b299e9f..9a5cd19 100644
--- a/content/docs/zh-CN/next/admin-api-permissions.html
+++ b/content/docs/zh-CN/next/admin-api-permissions.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
             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 b299e9f..9a5cd19 100644
--- a/content/docs/zh-CN/next/admin-api-permissions/index.html
+++ b/content/docs/zh-CN/next/admin-api-permissions/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
             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 7651546..efcea7b 100644
--- a/content/docs/zh-CN/next/admin-api-persistent-topics.html
+++ b/content/docs/zh-CN/next/admin-api-persistent-topics.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
             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 7651546..efcea7b 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
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
             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-schemas.html b/content/docs/zh-CN/next/admin-api-schemas.html
index 0dda590..fe253d0 100644
--- a/content/docs/zh-CN/next/admin-api-schemas.html
+++ b/content/docs/zh-CN/next/admin-api-schemas.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
             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-schemas/index.html b/content/docs/zh-CN/next/admin-api-schemas/index.html
index 0dda590..fe253d0 100644
--- a/content/docs/zh-CN/next/admin-api-schemas/index.html
+++ b/content/docs/zh-CN/next/admin-api-schemas/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
             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 d81b889..f39479f 100644
--- a/content/docs/zh-CN/next/admin-api-tenants.html
+++ b/content/docs/zh-CN/next/admin-api-tenants.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
             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 d81b889..f39479f 100644
--- a/content/docs/zh-CN/next/admin-api-tenants/index.html
+++ b/content/docs/zh-CN/next/admin-api-tenants/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>管理  [...]
             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 fa3d80f..7c800b2 100644
--- a/content/docs/zh-CN/next/administration-dashboard.html
+++ b/content/docs/zh-CN/next/administration-dashboard.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>系统管 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>系统管 [...]
             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/index.html b/content/docs/zh-CN/next/administration-dashboard/index.html
index fa3d80f..7c800b2 100644
--- a/content/docs/zh-CN/next/administration-dashboard/index.html
+++ b/content/docs/zh-CN/next/administration-dashboard/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>系统管 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>系统管 [...]
             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-geo.html b/content/docs/zh-CN/next/administration-geo.html
index 805ba67..b1deaf3 100644
--- a/content/docs/zh-CN/next/administration-geo.html
+++ b/content/docs/zh-CN/next/administration-geo.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>系统管 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>系统管 [...]
             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-geo/index.html b/content/docs/zh-CN/next/administration-geo/index.html
index 805ba67..b1deaf3 100644
--- a/content/docs/zh-CN/next/administration-geo/index.html
+++ b/content/docs/zh-CN/next/administration-geo/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>系统管 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>系统管 [...]
             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-distribution.html b/content/docs/zh-CN/next/administration-load-distribution.html
index cc25fb2..21ca08d 100644
--- a/content/docs/zh-CN/next/administration-load-distribution.html
+++ b/content/docs/zh-CN/next/administration-load-distribution.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>系统管 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>系统管 [...]
             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-distribution/index.html b/content/docs/zh-CN/next/administration-load-distribution/index.html
index cc25fb2..21ca08d 100644
--- a/content/docs/zh-CN/next/administration-load-distribution/index.html
+++ b/content/docs/zh-CN/next/administration-load-distribution/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>系统管 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>系统管 [...]
             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 b59fe42..60c0499 100644
--- a/content/docs/zh-CN/next/administration-proxy.html
+++ b/content/docs/zh-CN/next/administration-proxy.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>系统管 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>系统管 [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -71,22 +71,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 代理</h1></header><article><div><span><p><a href="/docs/zh-CN/next/concepts-architecture-overview#pulsar-proxy">Pulsar代理</a>是一个可选的网关,你可以在Pulsar集群中的brokers之前运行它们。 建议在客户端和Pulsar broker之间 [...]
-<h2><a class="anchor" aria-hidden="true" id="pulsar-代理的配置"></a><a href="#pulsar-代理的配置" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>代理必须有办法来找到集群中brokers的地址。 你可以通过配置代理来直接连接到服务发现,或者在配置中指定broker URL。</p>
+<h2><a class="anchor" aria-hidden="true" id="配置pulsar-代理"></a><a href="#配置pulsar-代理" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-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>代理一定有办法来找到集群中brokers的地址。 你可以通过配置代理来直接连接到服务发现,或者在配置中指定broker URL。</p>
 <h3><a class="anchor" aria-hidden="true" id="选项-1-使用服务发现"></a><a href="#选项-1-使用服务发现" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42 [...]
 <p>Pulsar使用 <a href="https://zookeeper.apache.org">ZooKeeper</a> 进行服务发现。 要将代理连接到ZooKeeper,请在<code>conf/proxy.conf</code>中指定以下内容。</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk-0,zk-1,zk-2</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk-0:2184,zk-remote:2184</span>
 </code></pre>
 <blockquote>
-<p>如果使用服务发现,则网络ACL必须允许代理与ZooKeeper客户端端口(通常为2181)及配置存储客户端端口(默认为2184)上的ZooKeeper节点通信。 打开网络ACLs意味着如果有人破坏了代理,那么他们可以完全访问ZooKeeper。 因此,使用 broker URLs 配置代理更安全。</p>
+<p>如果使用服务发现,网络ACL必须允许代理与ZooKeeper客户端端口(通常为2181) 及配置存储客户端端口(默认为2184) 上的ZooKeeper节点通信。 打开网络ACLs意味着如果有人破坏了代理,那么他们可以完全访问ZooKeeper。 因此,使用 broker URLs 配置代理更安全。</p>
 </blockquote>
 <h3><a class="anchor" aria-hidden="true" id="选项2-使用broker-urls"></a><a href="#选项2-使用broker-urls" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
 <p>配置代理的更安全的方法是指定连接到brokers的URL。</p>
 <blockquote>
-<p>代理上的<a href="security-authorization#enabling-authorization-and-assigning-superusers">授权</a>需要访问ZooKeeper,因此如果你使用 broker URLs连接到brokers,则应该禁用代理级别授权。 代理转发请求之后,Brokers仍然会授权请求。</p>
+<p>代理上的<a href="security-authorization#enabling-authorization-and-assigning-superusers">授权</a>需要访问ZooKeeper,所以如果您使用 broker URLs连接到brokers,就应该禁用代理级别授权。 代理转发请求之后,Brokers仍然会授权请求。</p>
 </blockquote>
-<p>你可以在 <code>conf/proxy.conf</code>中配置broker URLs,如下所示。</p>
+<p>您可以在 <code>conf/proxy.conf</code>中配置broker URLs,如下所示。</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">brokerServiceURL</span>=<span class="hljs-string">pulsar://brokers.example.com:6650</span>
 <span class="hljs-attr">brokerWebServiceURL</span>=<span class="hljs-string">http://brokers.example.com:8080</span>
 <span class="hljs-attr">functionWorkerWebServiceURL</span>=<span class="hljs-string">http://function-workers.example.com:8080</span>
@@ -100,16 +100,16 @@
 <p>连接到 brokers 的端口(6650 和 8080,或者在使用TLS的情况下,6651 和 8443 )应该在网络ACL中打开。</p>
 <p>注意,如果不使用 functions,则不需要配置<code>functionWorkerWebServiceURL</code>。</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>To start the proxy:</p>
+<p>要启动代理:</p>
 <pre><code class="hljs css language-bash">$ <span class="hljs-built_in">cd</span> /path/to/pulsar/directory
 $ bin/pulsar proxy
 </code></pre>
 <blockquote>
-<p>You can run as many instances of the Pulsar proxy in a cluster as you would like.</p>
+<p>您可以在群集中运行任意数量的 Pulsar 代理实例。</p>
 </blockquote>
-<h2><a class="anchor" aria-hidden="true" id="stopping-the-proxy"></a><a href="#stopping-the-proxy" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
-<p>The Pulsar proxy runs by default in the foreground. To stop the proxy, simply stop the process in which it's running.</p>
-<h2><a class="anchor" aria-hidden="true" id="proxy-frontends"></a><a href="#proxy-frontends" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<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>默认情况下, Pulsar 代理在前台运行。要停止代理, 只需停止它在其中运行的进程。</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>We recommend running the Pulsar proxy behind some kind of load-distributing frontend, such as an <a href="https://www.digitalocean.com/community/tutorials/an-introduction-to-haproxy-and-load-balancing-concepts">HAProxy</a> load balancer.</p>
 <h2><a class="anchor" aria-hidden="true" id="using-pulsar-clients-with-the-proxy"></a><a href="#using-pulsar-clients-with-the-proxy" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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>Once your Pulsar proxy is up and running, preferably behind a load-distributing <a href="#proxy-frontends">frontend</a>, clients can connect to the proxy via whichever address is used by the frontend. If the address were the DNS address <code>pulsar.cluster.default</code>, for example, then the connection URL for clients would be <code>pulsar://pulsar.cluster.default:6650</code>.</p>
@@ -117,7 +117,7 @@ $ bin/pulsar proxy
 <p>The Pulsar proxy can be configured using the <a href="/docs/zh-CN/next/reference-configuration#proxy"><code>proxy.conf</code></a> configuration file. The following parameters are available in that file:</p>
 <table>
 <thead>
-<tr><th>Name</th><th>说明:</th><th>默认值</th></tr>
+<tr><th>名称</th><th>说明:</th><th>默认值</th></tr>
 </thead>
 <tbody>
 <tr><td>zookeeperServers</td><td>ZooKeeper仲裁连接字符串(以逗号分隔的列表)</td><td></td></tr>
@@ -146,7 +146,7 @@ $ bin/pulsar proxy
 <tr><td>tlsRequireTrustedClientCertOnConnect</td><td>TLS是否需要客户端证书。如果客户端证书不受信任,连接将被拒绝。</td><td>false</td></tr>
 </tbody>
 </table>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/administration-load-distribution"><span class="arrow-prev">← </span><span>Load distribution</span></a><a class="docs-next button" href="/docs/zh-CN/next/security-overview"><span>概述</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#pulsar-代理的配置">Pulsar 代理的配置</a><ul class="toc-headings"><li><a href="#选项-1-使用服务发现 [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/administration-load-distribution"><span class="arrow-prev">← </span><span>Load distribution</span></a><a class="docs-next button" href="/docs/zh-CN/next/security-overview"><span>概述</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#配置pulsar-代理">配置Pulsar 代理</a><ul class="toc-headings"><li><a href="#选项-1-使用服务发现"> [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/next/administration-proxy/index.html b/content/docs/zh-CN/next/administration-proxy/index.html
index b59fe42..60c0499 100644
--- a/content/docs/zh-CN/next/administration-proxy/index.html
+++ b/content/docs/zh-CN/next/administration-proxy/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>系统管 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>系统管 [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -71,22 +71,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 代理</h1></header><article><div><span><p><a href="/docs/zh-CN/next/concepts-architecture-overview#pulsar-proxy">Pulsar代理</a>是一个可选的网关,你可以在Pulsar集群中的brokers之前运行它们。 建议在客户端和Pulsar broker之间 [...]
-<h2><a class="anchor" aria-hidden="true" id="pulsar-代理的配置"></a><a href="#pulsar-代理的配置" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>代理必须有办法来找到集群中brokers的地址。 你可以通过配置代理来直接连接到服务发现,或者在配置中指定broker URL。</p>
+<h2><a class="anchor" aria-hidden="true" id="配置pulsar-代理"></a><a href="#配置pulsar-代理" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-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>代理一定有办法来找到集群中brokers的地址。 你可以通过配置代理来直接连接到服务发现,或者在配置中指定broker URL。</p>
 <h3><a class="anchor" aria-hidden="true" id="选项-1-使用服务发现"></a><a href="#选项-1-使用服务发现" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42 [...]
 <p>Pulsar使用 <a href="https://zookeeper.apache.org">ZooKeeper</a> 进行服务发现。 要将代理连接到ZooKeeper,请在<code>conf/proxy.conf</code>中指定以下内容。</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk-0,zk-1,zk-2</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk-0:2184,zk-remote:2184</span>
 </code></pre>
 <blockquote>
-<p>如果使用服务发现,则网络ACL必须允许代理与ZooKeeper客户端端口(通常为2181)及配置存储客户端端口(默认为2184)上的ZooKeeper节点通信。 打开网络ACLs意味着如果有人破坏了代理,那么他们可以完全访问ZooKeeper。 因此,使用 broker URLs 配置代理更安全。</p>
+<p>如果使用服务发现,网络ACL必须允许代理与ZooKeeper客户端端口(通常为2181) 及配置存储客户端端口(默认为2184) 上的ZooKeeper节点通信。 打开网络ACLs意味着如果有人破坏了代理,那么他们可以完全访问ZooKeeper。 因此,使用 broker URLs 配置代理更安全。</p>
 </blockquote>
 <h3><a class="anchor" aria-hidden="true" id="选项2-使用broker-urls"></a><a href="#选项2-使用broker-urls" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
 <p>配置代理的更安全的方法是指定连接到brokers的URL。</p>
 <blockquote>
-<p>代理上的<a href="security-authorization#enabling-authorization-and-assigning-superusers">授权</a>需要访问ZooKeeper,因此如果你使用 broker URLs连接到brokers,则应该禁用代理级别授权。 代理转发请求之后,Brokers仍然会授权请求。</p>
+<p>代理上的<a href="security-authorization#enabling-authorization-and-assigning-superusers">授权</a>需要访问ZooKeeper,所以如果您使用 broker URLs连接到brokers,就应该禁用代理级别授权。 代理转发请求之后,Brokers仍然会授权请求。</p>
 </blockquote>
-<p>你可以在 <code>conf/proxy.conf</code>中配置broker URLs,如下所示。</p>
+<p>您可以在 <code>conf/proxy.conf</code>中配置broker URLs,如下所示。</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">brokerServiceURL</span>=<span class="hljs-string">pulsar://brokers.example.com:6650</span>
 <span class="hljs-attr">brokerWebServiceURL</span>=<span class="hljs-string">http://brokers.example.com:8080</span>
 <span class="hljs-attr">functionWorkerWebServiceURL</span>=<span class="hljs-string">http://function-workers.example.com:8080</span>
@@ -100,16 +100,16 @@
 <p>连接到 brokers 的端口(6650 和 8080,或者在使用TLS的情况下,6651 和 8443 )应该在网络ACL中打开。</p>
 <p>注意,如果不使用 functions,则不需要配置<code>functionWorkerWebServiceURL</code>。</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>To start the proxy:</p>
+<p>要启动代理:</p>
 <pre><code class="hljs css language-bash">$ <span class="hljs-built_in">cd</span> /path/to/pulsar/directory
 $ bin/pulsar proxy
 </code></pre>
 <blockquote>
-<p>You can run as many instances of the Pulsar proxy in a cluster as you would like.</p>
+<p>您可以在群集中运行任意数量的 Pulsar 代理实例。</p>
 </blockquote>
-<h2><a class="anchor" aria-hidden="true" id="stopping-the-proxy"></a><a href="#stopping-the-proxy" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
-<p>The Pulsar proxy runs by default in the foreground. To stop the proxy, simply stop the process in which it's running.</p>
-<h2><a class="anchor" aria-hidden="true" id="proxy-frontends"></a><a href="#proxy-frontends" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<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>默认情况下, Pulsar 代理在前台运行。要停止代理, 只需停止它在其中运行的进程。</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>We recommend running the Pulsar proxy behind some kind of load-distributing frontend, such as an <a href="https://www.digitalocean.com/community/tutorials/an-introduction-to-haproxy-and-load-balancing-concepts">HAProxy</a> load balancer.</p>
 <h2><a class="anchor" aria-hidden="true" id="using-pulsar-clients-with-the-proxy"></a><a href="#using-pulsar-clients-with-the-proxy" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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>Once your Pulsar proxy is up and running, preferably behind a load-distributing <a href="#proxy-frontends">frontend</a>, clients can connect to the proxy via whichever address is used by the frontend. If the address were the DNS address <code>pulsar.cluster.default</code>, for example, then the connection URL for clients would be <code>pulsar://pulsar.cluster.default:6650</code>.</p>
@@ -117,7 +117,7 @@ $ bin/pulsar proxy
 <p>The Pulsar proxy can be configured using the <a href="/docs/zh-CN/next/reference-configuration#proxy"><code>proxy.conf</code></a> configuration file. The following parameters are available in that file:</p>
 <table>
 <thead>
-<tr><th>Name</th><th>说明:</th><th>默认值</th></tr>
+<tr><th>名称</th><th>说明:</th><th>默认值</th></tr>
 </thead>
 <tbody>
 <tr><td>zookeeperServers</td><td>ZooKeeper仲裁连接字符串(以逗号分隔的列表)</td><td></td></tr>
@@ -146,7 +146,7 @@ $ bin/pulsar proxy
 <tr><td>tlsRequireTrustedClientCertOnConnect</td><td>TLS是否需要客户端证书。如果客户端证书不受信任,连接将被拒绝。</td><td>false</td></tr>
 </tbody>
 </table>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/administration-load-distribution"><span class="arrow-prev">← </span><span>Load distribution</span></a><a class="docs-next button" href="/docs/zh-CN/next/security-overview"><span>概述</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#pulsar-代理的配置">Pulsar 代理的配置</a><ul class="toc-headings"><li><a href="#选项-1-使用服务发现 [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/administration-load-distribution"><span class="arrow-prev">← </span><span>Load distribution</span></a><a class="docs-next button" href="/docs/zh-CN/next/security-overview"><span>概述</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#配置pulsar-代理">配置Pulsar 代理</a><ul class="toc-headings"><li><a href="#选项-1-使用服务发现"> [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/next/administration-stats.html b/content/docs/zh-CN/next/administration-stats.html
index 5464300..ca97255 100644
--- a/content/docs/zh-CN/next/administration-stats.html
+++ b/content/docs/zh-CN/next/administration-stats.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>系统管 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>系统管 [...]
             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 5464300..ca97255 100644
--- a/content/docs/zh-CN/next/administration-stats/index.html
+++ b/content/docs/zh-CN/next/administration-stats/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>系统管 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>系统管 [...]
             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 ec2ce9a..d4cc82c 100644
--- a/content/docs/zh-CN/next/administration-zk-bk.html
+++ b/content/docs/zh-CN/next/administration-zk-bk.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>系统管 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>系统管 [...]
             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/index.html b/content/docs/zh-CN/next/administration-zk-bk/index.html
index ec2ce9a..d4cc82c 100644
--- a/content/docs/zh-CN/next/administration-zk-bk/index.html
+++ b/content/docs/zh-CN/next/administration-zk-bk/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>系统管 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>系统管 [...]
             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.html b/content/docs/zh-CN/next/client-libraries-cpp.html
index 135f713..8e5bb8b 100644
--- a/content/docs/zh-CN/next/client-libraries-cpp.html
+++ b/content/docs/zh-CN/next/client-libraries-cpp.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>客户端 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>客户端 [...]
             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 135f713..8e5bb8b 100644
--- a/content/docs/zh-CN/next/client-libraries-cpp/index.html
+++ b/content/docs/zh-CN/next/client-libraries-cpp/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>客户端 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>客户端 [...]
             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 6eed31b..bec8c14 100644
--- a/content/docs/zh-CN/next/client-libraries-go.html
+++ b/content/docs/zh-CN/next/client-libraries-go.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>客户端 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>客户端 [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -104,7 +104,7 @@
 <pre><code class="hljs css language-http">pulsar+ssl://pulsar.us-west.example.com:6651
 </code></pre>
 <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>In order to interact with Pulsar, you'll first need a <code>Client</code> object. You can create a client object using the <code>NewClient</code> function, passing in a <code>ClientOptions</code> object (more on configuration <a href="#client-configuration">below</a>). 这里有一个示例:</p>
+<p>In order to interact with Pulsar, you'll first need a <code>Client</code> object. You can create a client object using the <code>NewClient</code> function, passing in a <code>ClientOptions</code> object (more on configuration <a href="#client-configuration">below</a>). 下面是一个示例:</p>
 <pre><code class="hljs css language-go"><span class="hljs-keyword">import</span> (
     <span class="hljs-string">"log"</span>
     <span class="hljs-string">"runtime"</span>
@@ -368,7 +368,7 @@ consumer, err := client.Subscribe(consumerOpts)
 </tbody>
 </table>
 <h2><a class="anchor" aria-hidden="true" id="readers"></a><a href="#readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
-<p>Pulsar readers process messages from Pulsar topics. Readers are different from consumers because with readers you need to explicitly specify which message in the stream you want to begin with (consumers, on the other hand, automatically begin with the most recent unacked message). You can <a href="#reader-configuration">configure</a> Go readers using a <code>ReaderOptions</code> object. 这里有一个示例:</p>
+<p>Pulsar readers process messages from Pulsar topics. Readers are different from consumers because with readers you need to explicitly specify which message in the stream you want to begin with (consumers, on the other hand, automatically begin with the most recent unacked message). You can <a href="#reader-configuration">configure</a> Go readers using a <code>ReaderOptions</code> object. 下面是一个示例:</p>
 <pre><code class="hljs css language-go">reader, err := client.CreateReader(pulsar.ReaderOptions{
     Topic: <span class="hljs-string">"my-golang-topic"</span>,
     StartMessageId: pulsar.LatestMessage,
@@ -428,7 +428,7 @@ consumer, err := client.Subscribe(consumerOpts)
     }
 }
 </code></pre>
-<p>In the example above, the reader begins reading from the earliest available message (specified by <code>pulsar.EarliestMessage</code>). The reader can also begin reading from the latest message (<code>pulsar.LatestMessage</code>) or some other message ID specified by bytes using the <code>DeserializeMessageID</code> function, which takes a byte array and returns a <code>MessageID</code> object. 这里有一个示例:</p>
+<p>In the example above, the reader begins reading from the earliest available message (specified by <code>pulsar.EarliestMessage</code>). The reader can also begin reading from the latest message (<code>pulsar.LatestMessage</code>) or some other message ID specified by bytes using the <code>DeserializeMessageID</code> function, which takes a byte array and returns a <code>MessageID</code> object. 下面是一个示例:</p>
 <pre><code class="hljs css language-go">lastSavedId := <span class="hljs-comment">// Read last saved message id from external store as byte[]</span>
 
 reader, err := client.CreateReader(pulsar.ReaderOptions{
@@ -486,7 +486,7 @@ reader, err := client.CreateReader(pulsar.ReaderOptions{
 <li>Set <code>TLSTrustCertsFilePath</code> to the path to the TLS certs used by your client and the Pulsar broker</li>
 <li>Configure <code>Authentication</code> option</li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-go">opts := pulsar.ClientOptions{
     URL: <span class="hljs-string">"pulsar+ssl://my-cluster.com:6651"</span>,
     TLSTrustCertsFilePath: <span class="hljs-string">"/path/to/certs/my-cert.csr"</span>,
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 6eed31b..bec8c14 100644
--- a/content/docs/zh-CN/next/client-libraries-go/index.html
+++ b/content/docs/zh-CN/next/client-libraries-go/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>客户端 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>客户端 [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -104,7 +104,7 @@
 <pre><code class="hljs css language-http">pulsar+ssl://pulsar.us-west.example.com:6651
 </code></pre>
 <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>In order to interact with Pulsar, you'll first need a <code>Client</code> object. You can create a client object using the <code>NewClient</code> function, passing in a <code>ClientOptions</code> object (more on configuration <a href="#client-configuration">below</a>). 这里有一个示例:</p>
+<p>In order to interact with Pulsar, you'll first need a <code>Client</code> object. You can create a client object using the <code>NewClient</code> function, passing in a <code>ClientOptions</code> object (more on configuration <a href="#client-configuration">below</a>). 下面是一个示例:</p>
 <pre><code class="hljs css language-go"><span class="hljs-keyword">import</span> (
     <span class="hljs-string">"log"</span>
     <span class="hljs-string">"runtime"</span>
@@ -368,7 +368,7 @@ consumer, err := client.Subscribe(consumerOpts)
 </tbody>
 </table>
 <h2><a class="anchor" aria-hidden="true" id="readers"></a><a href="#readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
-<p>Pulsar readers process messages from Pulsar topics. Readers are different from consumers because with readers you need to explicitly specify which message in the stream you want to begin with (consumers, on the other hand, automatically begin with the most recent unacked message). You can <a href="#reader-configuration">configure</a> Go readers using a <code>ReaderOptions</code> object. 这里有一个示例:</p>
+<p>Pulsar readers process messages from Pulsar topics. Readers are different from consumers because with readers you need to explicitly specify which message in the stream you want to begin with (consumers, on the other hand, automatically begin with the most recent unacked message). You can <a href="#reader-configuration">configure</a> Go readers using a <code>ReaderOptions</code> object. 下面是一个示例:</p>
 <pre><code class="hljs css language-go">reader, err := client.CreateReader(pulsar.ReaderOptions{
     Topic: <span class="hljs-string">"my-golang-topic"</span>,
     StartMessageId: pulsar.LatestMessage,
@@ -428,7 +428,7 @@ consumer, err := client.Subscribe(consumerOpts)
     }
 }
 </code></pre>
-<p>In the example above, the reader begins reading from the earliest available message (specified by <code>pulsar.EarliestMessage</code>). The reader can also begin reading from the latest message (<code>pulsar.LatestMessage</code>) or some other message ID specified by bytes using the <code>DeserializeMessageID</code> function, which takes a byte array and returns a <code>MessageID</code> object. 这里有一个示例:</p>
+<p>In the example above, the reader begins reading from the earliest available message (specified by <code>pulsar.EarliestMessage</code>). The reader can also begin reading from the latest message (<code>pulsar.LatestMessage</code>) or some other message ID specified by bytes using the <code>DeserializeMessageID</code> function, which takes a byte array and returns a <code>MessageID</code> object. 下面是一个示例:</p>
 <pre><code class="hljs css language-go">lastSavedId := <span class="hljs-comment">// Read last saved message id from external store as byte[]</span>
 
 reader, err := client.CreateReader(pulsar.ReaderOptions{
@@ -486,7 +486,7 @@ reader, err := client.CreateReader(pulsar.ReaderOptions{
 <li>Set <code>TLSTrustCertsFilePath</code> to the path to the TLS certs used by your client and the Pulsar broker</li>
 <li>Configure <code>Authentication</code> option</li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-go">opts := pulsar.ClientOptions{
     URL: <span class="hljs-string">"pulsar+ssl://my-cluster.com:6651"</span>,
     TLSTrustCertsFilePath: <span class="hljs-string">"/path/to/certs/my-cert.csr"</span>,
diff --git a/content/docs/zh-CN/next/client-libraries-java.html b/content/docs/zh-CN/next/client-libraries-java.html
index f2c1c10..f8635be 100644
--- a/content/docs/zh-CN/next/client-libraries-java.html
+++ b/content/docs/zh-CN/next/client-libraries-java.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>客户端 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>客户端 [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -238,7 +238,7 @@ client.close();</p>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="异步接收"></a><a href="#异步接收" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <p><code>receive</code>方法将异步接受消息(消费者处理器将被阻塞,直到有消息到达)。 你也可以使用<a href="concepts-messaging.md#receive-modes">异步接收方法</a>,这将在一个新消息到达时立即返回一个<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>对象。</p>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>Async receive operations return a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Message">Message</a>
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 f2c1c10..f8635be 100644
--- a/content/docs/zh-CN/next/client-libraries-java/index.html
+++ b/content/docs/zh-CN/next/client-libraries-java/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>客户端 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>客户端 [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -238,7 +238,7 @@ client.close();</p>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="异步接收"></a><a href="#异步接收" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <p><code>receive</code>方法将异步接受消息(消费者处理器将被阻塞,直到有消息到达)。 你也可以使用<a href="concepts-messaging.md#receive-modes">异步接收方法</a>,这将在一个新消息到达时立即返回一个<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>对象。</p>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>Async receive operations return a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Message">Message</a>
diff --git a/content/docs/zh-CN/next/client-libraries-python.html b/content/docs/zh-CN/next/client-libraries-python.html
index f466a63..8e9078a 100644
--- a/content/docs/zh-CN/next/client-libraries-python.html
+++ b/content/docs/zh-CN/next/client-libraries-python.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>客户端 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>客户端 [...]
             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 f466a63..8e9078a 100644
--- a/content/docs/zh-CN/next/client-libraries-python/index.html
+++ b/content/docs/zh-CN/next/client-libraries-python/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>客户端 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>客户端 [...]
             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 a610cd3..566726c 100644
--- a/content/docs/zh-CN/next/client-libraries-websocket.html
+++ b/content/docs/zh-CN/next/client-libraries-websocket.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>客户端 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>客户端 [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -92,7 +92,7 @@
 <li><a href="/docs/zh-CN/next/reference-configuration#websocket-webServicePort"><code>webServicePort</code></a></li>
 <li><a href="/docs/zh-CN/next/reference-configuration#websocket-clusterName"><code>clusterName</code></a></li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1:2181,zk2:2181,zk3:2181</span>
 <span class="hljs-attr">webServicePort</span>=<span class="hljs-string">8080</span>
 <span class="hljs-attr">clusterName</span>=<span class="hljs-string">my-cluster</span>
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 a610cd3..566726c 100644
--- a/content/docs/zh-CN/next/client-libraries-websocket/index.html
+++ b/content/docs/zh-CN/next/client-libraries-websocket/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>客户端 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>客户端 [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -92,7 +92,7 @@
 <li><a href="/docs/zh-CN/next/reference-configuration#websocket-webServicePort"><code>webServicePort</code></a></li>
 <li><a href="/docs/zh-CN/next/reference-configuration#websocket-clusterName"><code>clusterName</code></a></li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1:2181,zk2:2181,zk3:2181</span>
 <span class="hljs-attr">webServicePort</span>=<span class="hljs-string">8080</span>
 <span class="hljs-attr">clusterName</span>=<span class="hljs-string">my-cluster</span>
diff --git a/content/docs/zh-CN/next/client-libraries.html b/content/docs/zh-CN/next/client-libraries.html
index 5c0fd75..78ab3ff 100644
--- a/content/docs/zh-CN/next/client-libraries.html
+++ b/content/docs/zh-CN/next/client-libraries.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Get [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Get [...]
             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 5c0fd75..78ab3ff 100644
--- a/content/docs/zh-CN/next/client-libraries/index.html
+++ b/content/docs/zh-CN/next/client-libraries/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Get [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Get [...]
             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 75e3032..e2def4c 100644
--- a/content/docs/zh-CN/next/concepts-architecture-overview.html
+++ b/content/docs/zh-CN/next/concepts-architecture-overview.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -155,7 +155,7 @@
 <blockquote>
 <p>为了性能和容错,你可以运行任意个Pulsar proxy。</p>
 </blockquote>
-<p>架构上来看,Pulsar Proxy从ZooKeeper上面读取他所需要的所有信息。 当启动代理时,你只需要提供用于集群独有和实例范围的配置存储的ZooKeeper连接串。 这里有一个示例:</p>
+<p>架构上来看,Pulsar Proxy从ZooKeeper上面读取他所需要的所有信息。 当启动代理时,你只需要提供用于集群独有和实例范围的配置存储的ZooKeeper连接串。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar proxy \
   --zookeeper-servers zk-0,zk-1,zk-2 \
   --configuration-store-servers zk-0,zk-1,zk-2
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 75e3032..e2def4c 100644
--- a/content/docs/zh-CN/next/concepts-architecture-overview/index.html
+++ b/content/docs/zh-CN/next/concepts-architecture-overview/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -155,7 +155,7 @@
 <blockquote>
 <p>为了性能和容错,你可以运行任意个Pulsar proxy。</p>
 </blockquote>
-<p>架构上来看,Pulsar Proxy从ZooKeeper上面读取他所需要的所有信息。 当启动代理时,你只需要提供用于集群独有和实例范围的配置存储的ZooKeeper连接串。 这里有一个示例:</p>
+<p>架构上来看,Pulsar Proxy从ZooKeeper上面读取他所需要的所有信息。 当启动代理时,你只需要提供用于集群独有和实例范围的配置存储的ZooKeeper连接串。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar proxy \
   --zookeeper-servers zk-0,zk-1,zk-2 \
   --configuration-store-servers zk-0,zk-1,zk-2
diff --git a/content/docs/zh-CN/next/concepts-authentication.html b/content/docs/zh-CN/next/concepts-authentication.html
index fa9a428..d70bb90 100644
--- a/content/docs/zh-CN/next/concepts-authentication.html
+++ b/content/docs/zh-CN/next/concepts-authentication.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
             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 fa9a428..d70bb90 100644
--- a/content/docs/zh-CN/next/concepts-authentication/index.html
+++ b/content/docs/zh-CN/next/concepts-authentication/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
             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 7fa20b7..508807a 100644
--- a/content/docs/zh-CN/next/concepts-clients.html
+++ b/content/docs/zh-CN/next/concepts-clients.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
             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 7fa20b7..508807a 100644
--- a/content/docs/zh-CN/next/concepts-clients/index.html
+++ b/content/docs/zh-CN/next/concepts-clients/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
             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 a2f2ec5..83db3ac 100644
--- a/content/docs/zh-CN/next/concepts-messaging.html
+++ b/content/docs/zh-CN/next/concepts-messaging.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -301,7 +301,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <p>这里还有一个非持久topic的<a href="client-libraries-java.md#producer">java producer</a>例子:</p>
 <pre><code class="hljs css language-java">Producer producer = client.createProducer(npTopic);
 </code></pre>
-<h2><a class="anchor" aria-hidden="true" id="message-retention-and-expiry"></a><a href="#message-retention-and-expiry" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
+<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>Pulsar broker默认如下:</p>
 <ul>
 <li>立即删除<em>所有</em>已经被cunsumer确认过的的消息</li>
@@ -316,7 +316,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <p>所有消息存留和过期在<a href="#namespaces">namespace</a>层面管理。具体操作请查看 <a href="cookbooks-retention-expiry.md">Message retention and expiry</a></p>
 </blockquote>
 <p>下图说明了这两种概念:</p>
-<p><img src="assets/retention-expiry.png" alt="Message retention and expiry"></p>
+<p><img src="assets/retention-expiry.png" alt="消息保留和到期"></p>
 <p>图中上面的是消息存留,<span style="color: #89b557;">存留规则</span>会被用于某namespace下所有的topic,指明哪些消息会被持久存储,即使已经被确认过。 没有被留存规则覆盖的消息将会被<span style="color: #bb3b3e;">删除</span>。 没有留存规则的话,<em>所有</em>被<span style="color: #19967d;">确认</span>的消息都会被删除。</p>
 <p>图中下面的是消息过期,有些消息即使还<span style="color: #337db6;">没有被确认</span>,也被<span style="color: #bb3b3e;">删除</span>掉了。因为根据设置在<span style="color: #e39441;">namespace上的TTL</span>,他们已经过期了。(例如,TTL为5分钟,过了十分钟消息还没被确认)</p>
 <h2><a class="anchor" aria-hidden="true" id="message-deduplication"></a><a href="#message-deduplication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
@@ -335,7 +335,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <blockquote>
 <p>更深入的信息可以参考 <a href="https://streaml.io/blog">Streamlio blog</a>上的<a href="https://streaml.io/blog/pulsar-effectively-once/">此篇博文</a></p>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/concepts-overview"><span class="arrow-prev">← </span><span>概述</span></a><a class="docs-next button" href="/docs/zh-CN/next/concepts-architecture-overview"><span>Architecture</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#messages">Messages</a></li><li><a href="#producers">Producers</a><ul class="toc-heading [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/concepts-overview"><span class="arrow-prev">← </span><span>概述</span></a><a class="docs-next button" href="/docs/zh-CN/next/concepts-architecture-overview"><span>Architecture</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#messages">Messages</a></li><li><a href="#producers">Producers</a><ul class="toc-heading [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/next/concepts-messaging/index.html b/content/docs/zh-CN/next/concepts-messaging/index.html
index a2f2ec5..83db3ac 100644
--- a/content/docs/zh-CN/next/concepts-messaging/index.html
+++ b/content/docs/zh-CN/next/concepts-messaging/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -301,7 +301,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <p>这里还有一个非持久topic的<a href="client-libraries-java.md#producer">java producer</a>例子:</p>
 <pre><code class="hljs css language-java">Producer producer = client.createProducer(npTopic);
 </code></pre>
-<h2><a class="anchor" aria-hidden="true" id="message-retention-and-expiry"></a><a href="#message-retention-and-expiry" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
+<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>Pulsar broker默认如下:</p>
 <ul>
 <li>立即删除<em>所有</em>已经被cunsumer确认过的的消息</li>
@@ -316,7 +316,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <p>所有消息存留和过期在<a href="#namespaces">namespace</a>层面管理。具体操作请查看 <a href="cookbooks-retention-expiry.md">Message retention and expiry</a></p>
 </blockquote>
 <p>下图说明了这两种概念:</p>
-<p><img src="assets/retention-expiry.png" alt="Message retention and expiry"></p>
+<p><img src="assets/retention-expiry.png" alt="消息保留和到期"></p>
 <p>图中上面的是消息存留,<span style="color: #89b557;">存留规则</span>会被用于某namespace下所有的topic,指明哪些消息会被持久存储,即使已经被确认过。 没有被留存规则覆盖的消息将会被<span style="color: #bb3b3e;">删除</span>。 没有留存规则的话,<em>所有</em>被<span style="color: #19967d;">确认</span>的消息都会被删除。</p>
 <p>图中下面的是消息过期,有些消息即使还<span style="color: #337db6;">没有被确认</span>,也被<span style="color: #bb3b3e;">删除</span>掉了。因为根据设置在<span style="color: #e39441;">namespace上的TTL</span>,他们已经过期了。(例如,TTL为5分钟,过了十分钟消息还没被确认)</p>
 <h2><a class="anchor" aria-hidden="true" id="message-deduplication"></a><a href="#message-deduplication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
@@ -335,7 +335,7 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <blockquote>
 <p>更深入的信息可以参考 <a href="https://streaml.io/blog">Streamlio blog</a>上的<a href="https://streaml.io/blog/pulsar-effectively-once/">此篇博文</a></p>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/concepts-overview"><span class="arrow-prev">← </span><span>概述</span></a><a class="docs-next button" href="/docs/zh-CN/next/concepts-architecture-overview"><span>Architecture</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#messages">Messages</a></li><li><a href="#producers">Producers</a><ul class="toc-heading [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/concepts-overview"><span class="arrow-prev">← </span><span>概述</span></a><a class="docs-next button" href="/docs/zh-CN/next/concepts-architecture-overview"><span>Architecture</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#messages">Messages</a></li><li><a href="#producers">Producers</a><ul class="toc-heading [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/next/concepts-multi-tenancy.html b/content/docs/zh-CN/next/concepts-multi-tenancy.html
index 8475db0..11b17a4 100644
--- a/content/docs/zh-CN/next/concepts-multi-tenancy.html
+++ b/content/docs/zh-CN/next/concepts-multi-tenancy.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
             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 8475db0..11b17a4 100644
--- a/content/docs/zh-CN/next/concepts-multi-tenancy/index.html
+++ b/content/docs/zh-CN/next/concepts-multi-tenancy/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
             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 90ea480..5c77425 100644
--- a/content/docs/zh-CN/next/concepts-overview.html
+++ b/content/docs/zh-CN/next/concepts-overview.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
             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 90ea480..5c77425 100644
--- a/content/docs/zh-CN/next/concepts-overview/index.html
+++ b/content/docs/zh-CN/next/concepts-overview/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
             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 1cac01c..069fb10 100644
--- a/content/docs/zh-CN/next/concepts-replication.html
+++ b/content/docs/zh-CN/next/concepts-replication.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
             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 1cac01c..069fb10 100644
--- a/content/docs/zh-CN/next/concepts-replication/index.html
+++ b/content/docs/zh-CN/next/concepts-replication/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
             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-schema-registry.html b/content/docs/zh-CN/next/concepts-schema-registry.html
index 3d8d399..3bf6da1 100644
--- a/content/docs/zh-CN/next/concepts-schema-registry.html
+++ b/content/docs/zh-CN/next/concepts-schema-registry.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
             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-schema-registry/index.html b/content/docs/zh-CN/next/concepts-schema-registry/index.html
index 3d8d399..3bf6da1 100644
--- a/content/docs/zh-CN/next/concepts-schema-registry/index.html
+++ b/content/docs/zh-CN/next/concepts-schema-registry/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
             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 5631a4e..eddd91e 100644
--- a/content/docs/zh-CN/next/concepts-tiered-storage.html
+++ b/content/docs/zh-CN/next/concepts-tiered-storage.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
             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 5631a4e..eddd91e 100644
--- a/content/docs/zh-CN/next/concepts-tiered-storage/index.html
+++ b/content/docs/zh-CN/next/concepts-tiered-storage/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
             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 25c3440..8031c38 100644
--- a/content/docs/zh-CN/next/concepts-topic-compaction.html
+++ b/content/docs/zh-CN/next/concepts-topic-compaction.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
             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 25c3440..8031c38 100644
--- a/content/docs/zh-CN/next/concepts-topic-compaction/index.html
+++ b/content/docs/zh-CN/next/concepts-topic-compaction/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>概念和 [...]
             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 c9b72f4..df74a20 100644
--- a/content/docs/zh-CN/next/cookbooks-bookkeepermetadata.html
+++ b/content/docs/zh-CN/next/cookbooks-bookkeepermetadata.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
             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 c9b72f4..df74a20 100644
--- a/content/docs/zh-CN/next/cookbooks-bookkeepermetadata/index.html
+++ b/content/docs/zh-CN/next/cookbooks-bookkeepermetadata/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
             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 6fd2e80..dc48d20 100644
--- a/content/docs/zh-CN/next/cookbooks-compaction.html
+++ b/content/docs/zh-CN/next/cookbooks-compaction.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -98,12 +98,12 @@
 </code></pre>
 <p>Configuring the compaction threshold on a namespace will apply to all topics within that namespace.</p>
 <h2><a class="anchor" aria-hidden="true" id="triggering-compaction-manually-trigger"></a><a href="#triggering-compaction-manually-trigger" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1. [...]
-<p>In order to run compaction on a topic, you need to use the <a href="/docs/zh-CN/next/pulsar-admin#topics-compact"><code>topics compact</code></a> command for the <a href="/docs/zh-CN/next/pulsar-admin"><code>pulsar-admin</code></a> CLI tool. 这里有一个示例:</p>
+<p>In order to run compaction on a topic, you need to use the <a href="/docs/zh-CN/next/pulsar-admin#topics-compact"><code>topics compact</code></a> command for the <a href="/docs/zh-CN/next/pulsar-admin"><code>pulsar-admin</code></a> CLI tool. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin topics compact \
   persistent://my-tenant/my-namespace/my-topic
 </code></pre>
 <p>The <code>pulsar-admin</code> tool runs compaction via the Pulsar <a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
- API. To run compaction in its own dedicated process, i.e. <em>not</em> through the REST API, you can use the <a href="/docs/zh-CN/next/reference-cli-tools#pulsar-compact-topic"><code>pulsar compact-topic</code></a> command. 这里有一个示例:</p>
+ API. To run compaction in its own dedicated process, i.e. <em>not</em> through the REST API, you can use the <a href="/docs/zh-CN/next/reference-cli-tools#pulsar-compact-topic"><code>pulsar compact-topic</code></a> command. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar compact-topic \
   --topic persistent://my-tenant-namespace/my-topic
 </code></pre>
diff --git a/content/docs/zh-CN/next/cookbooks-compaction/index.html b/content/docs/zh-CN/next/cookbooks-compaction/index.html
index 6fd2e80..dc48d20 100644
--- a/content/docs/zh-CN/next/cookbooks-compaction/index.html
+++ b/content/docs/zh-CN/next/cookbooks-compaction/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -98,12 +98,12 @@
 </code></pre>
 <p>Configuring the compaction threshold on a namespace will apply to all topics within that namespace.</p>
 <h2><a class="anchor" aria-hidden="true" id="triggering-compaction-manually-trigger"></a><a href="#triggering-compaction-manually-trigger" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1. [...]
-<p>In order to run compaction on a topic, you need to use the <a href="/docs/zh-CN/next/pulsar-admin#topics-compact"><code>topics compact</code></a> command for the <a href="/docs/zh-CN/next/pulsar-admin"><code>pulsar-admin</code></a> CLI tool. 这里有一个示例:</p>
+<p>In order to run compaction on a topic, you need to use the <a href="/docs/zh-CN/next/pulsar-admin#topics-compact"><code>topics compact</code></a> command for the <a href="/docs/zh-CN/next/pulsar-admin"><code>pulsar-admin</code></a> CLI tool. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin topics compact \
   persistent://my-tenant/my-namespace/my-topic
 </code></pre>
 <p>The <code>pulsar-admin</code> tool runs compaction via the Pulsar <a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
- API. To run compaction in its own dedicated process, i.e. <em>not</em> through the REST API, you can use the <a href="/docs/zh-CN/next/reference-cli-tools#pulsar-compact-topic"><code>pulsar compact-topic</code></a> command. 这里有一个示例:</p>
+ API. To run compaction in its own dedicated process, i.e. <em>not</em> through the REST API, you can use the <a href="/docs/zh-CN/next/reference-cli-tools#pulsar-compact-topic"><code>pulsar compact-topic</code></a> command. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar compact-topic \
   --topic persistent://my-tenant-namespace/my-topic
 </code></pre>
diff --git a/content/docs/zh-CN/next/cookbooks-deduplication.html b/content/docs/zh-CN/next/cookbooks-deduplication.html
index 80921a2..3c68902 100644
--- a/content/docs/zh-CN/next/cookbooks-deduplication.html
+++ b/content/docs/zh-CN/next/cookbooks-deduplication.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -117,7 +117,7 @@
 </ol>
 <p>Instructions for <a href="#java">Java</a>, <a href="#python">Python</a>, and <a href="#cpp">C++</a> clients can be found below.</p>
 <h3><a class="anchor" aria-hidden="true" id="java-clients-java"></a><a href="#java-clients-java" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
-<p>To enable message deduplication on a <a href="/docs/zh-CN/next/client-libraries-java#producers">Java producer</a>, set the producer name using the <code>producerName</code> setter and set the timeout to 0 using the <code>sendTimeout</code> setter. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/next/client-libraries-java#producers">Java producer</a>, set the producer name using the <code>producerName</code> setter and set the timeout to 0 using the <code>sendTimeout</code> setter. 下面是一个示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Producer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 <span class="hljs-keyword">import</span> java.util.concurrent.TimeUnit;
@@ -132,7 +132,7 @@ Producer producer = pulsarClient.newProducer()
         .create();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="python-clients-python"></a><a href="#python-clients-python" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 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>To enable message deduplication on a <a href="/docs/zh-CN/next/client-libraries-python#producers">Python producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/next/client-libraries-python#producers">Python producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 下面是一个示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">import</span> pulsar
 
 client = pulsar.Client(<span class="hljs-string">"pulsar://localhost:6650"</span>)
@@ -142,7 +142,7 @@ producer = client.create_producer(
     send_timeout_millis=<span class="hljs-number">0</span>)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-clients-cpp"></a><a href="#c-clients-cpp" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
-<p>To enable message deduplication on a <a href="/docs/zh-CN/next/client-libraries-cpp#producer">C++ producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/next/client-libraries-cpp#producer">C++ producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 下面是一个示例:</p>
 <pre><code class="hljs css language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 <span class="hljs-built_in">std</span>::<span class="hljs-built_in">string</span> serviceUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
diff --git a/content/docs/zh-CN/next/cookbooks-deduplication/index.html b/content/docs/zh-CN/next/cookbooks-deduplication/index.html
index 80921a2..3c68902 100644
--- a/content/docs/zh-CN/next/cookbooks-deduplication/index.html
+++ b/content/docs/zh-CN/next/cookbooks-deduplication/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -117,7 +117,7 @@
 </ol>
 <p>Instructions for <a href="#java">Java</a>, <a href="#python">Python</a>, and <a href="#cpp">C++</a> clients can be found below.</p>
 <h3><a class="anchor" aria-hidden="true" id="java-clients-java"></a><a href="#java-clients-java" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
-<p>To enable message deduplication on a <a href="/docs/zh-CN/next/client-libraries-java#producers">Java producer</a>, set the producer name using the <code>producerName</code> setter and set the timeout to 0 using the <code>sendTimeout</code> setter. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/next/client-libraries-java#producers">Java producer</a>, set the producer name using the <code>producerName</code> setter and set the timeout to 0 using the <code>sendTimeout</code> setter. 下面是一个示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Producer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 <span class="hljs-keyword">import</span> java.util.concurrent.TimeUnit;
@@ -132,7 +132,7 @@ Producer producer = pulsarClient.newProducer()
         .create();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="python-clients-python"></a><a href="#python-clients-python" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 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>To enable message deduplication on a <a href="/docs/zh-CN/next/client-libraries-python#producers">Python producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/next/client-libraries-python#producers">Python producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 下面是一个示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">import</span> pulsar
 
 client = pulsar.Client(<span class="hljs-string">"pulsar://localhost:6650"</span>)
@@ -142,7 +142,7 @@ producer = client.create_producer(
     send_timeout_millis=<span class="hljs-number">0</span>)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-clients-cpp"></a><a href="#c-clients-cpp" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
-<p>To enable message deduplication on a <a href="/docs/zh-CN/next/client-libraries-cpp#producer">C++ producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 这里有一个示例:</p>
+<p>To enable message deduplication on a <a href="/docs/zh-CN/next/client-libraries-cpp#producer">C++ producer</a>, set the producer name using <code>producer_name</code> and the timeout to 0 using <code>send_timeout_millis</code>. 下面是一个示例:</p>
 <pre><code class="hljs css language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 <span class="hljs-built_in">std</span>::<span class="hljs-built_in">string</span> serviceUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
diff --git a/content/docs/zh-CN/next/cookbooks-encryption.html b/content/docs/zh-CN/next/cookbooks-encryption.html
index b09a6d3..dbc7483 100644
--- a/content/docs/zh-CN/next/cookbooks-encryption.html
+++ b/content/docs/zh-CN/next/cookbooks-encryption.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -221,7 +221,7 @@ conf.addEncryptionKey(<span class="hljs-string">"myapp.messagekey2"</span>);
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/cookbooks-retention-expiry"><span class="arrow-prev">← </span><span>Message retention and expiry</span></a><a class="docs-next button" href="/docs/zh-CN/next/cookbooks-message-queue"><span>Message queue</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmet [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/cookbooks-retention-expiry"><span class="arrow-prev">← </span><span>消息保留和到期</span></a><a class="docs-next button" href="/docs/zh-CN/next/cookbooks-message-queue"><span>Message queue</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></l [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/next/cookbooks-encryption/index.html b/content/docs/zh-CN/next/cookbooks-encryption/index.html
index b09a6d3..dbc7483 100644
--- a/content/docs/zh-CN/next/cookbooks-encryption/index.html
+++ b/content/docs/zh-CN/next/cookbooks-encryption/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -221,7 +221,7 @@ conf.addEncryptionKey(<span class="hljs-string">"myapp.messagekey2"</span>);
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/cookbooks-retention-expiry"><span class="arrow-prev">← </span><span>Message retention and expiry</span></a><a class="docs-next button" href="/docs/zh-CN/next/cookbooks-message-queue"><span>Message queue</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmet [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/cookbooks-retention-expiry"><span class="arrow-prev">← </span><span>消息保留和到期</span></a><a class="docs-next button" href="/docs/zh-CN/next/cookbooks-message-queue"><span>Message queue</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></l [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/next/cookbooks-message-queue.html b/content/docs/zh-CN/next/cookbooks-message-queue.html
index 959e800..32c6adb 100644
--- a/content/docs/zh-CN/next/cookbooks-message-queue.html
+++ b/content/docs/zh-CN/next/cookbooks-message-queue.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
             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 959e800..32c6adb 100644
--- a/content/docs/zh-CN/next/cookbooks-message-queue/index.html
+++ b/content/docs/zh-CN/next/cookbooks-message-queue/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
             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 f9a6feb..69b79c3 100644
--- a/content/docs/zh-CN/next/cookbooks-non-persistent.html
+++ b/content/docs/zh-CN/next/cookbooks-non-persistent.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -108,7 +108,7 @@
 <p>可以使用<a href="/docs/zh-CN/next/pulsar-admin#non-persistent"> <code>pulsar-admin non-persistent</code> </a>命令行管理非持久性主题。 使用命令行工具,你可以执行诸如<a href="/docs/zh-CN/next/pulsar-admin#non-persistent-create-partitioned-topic">创建分区非持久性主题</a>,获取非持久主题的<a href="/docs/zh-CN/next/pulsar-admin#non-persistent-stats">统计信息</a>,获取命名空间下的非持久主题<a href="/docs/zh-CN/next/pulsar-admin">列表</a>等操作。</p>
 <h2><a class="anchor" aria-hidden="true" id="与pulsar客户端一起使用"></a><a href="#与pulsar客户端一起使用" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>除了确保使用具有<code>非持久性</code>的正确<a href="#using">主题名称</a>作为主题类型之外,你不应该对 Pulsar 客户端进行任何更改以使用非持久性消息传递。</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/cookbooks-deduplication"><span class="arrow-prev">← </span><span>Message deduplication</span></a><a class="docs-next button" href="/docs/zh-CN/next/cookbooks-partitioned"><span>分区Topic</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="#使用">使用</a></li><li><a href="#启用">启用</a></li><li [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/cookbooks-deduplication"><span class="arrow-prev">← </span><span>Message deduplication</span></a><a class="docs-next button" href="/docs/zh-CN/next/cookbooks-partitioned"><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="#使用">使用</a></li><li><a href="#启用">启用</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
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 f9a6feb..69b79c3 100644
--- a/content/docs/zh-CN/next/cookbooks-non-persistent/index.html
+++ b/content/docs/zh-CN/next/cookbooks-non-persistent/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -108,7 +108,7 @@
 <p>可以使用<a href="/docs/zh-CN/next/pulsar-admin#non-persistent"> <code>pulsar-admin non-persistent</code> </a>命令行管理非持久性主题。 使用命令行工具,你可以执行诸如<a href="/docs/zh-CN/next/pulsar-admin#non-persistent-create-partitioned-topic">创建分区非持久性主题</a>,获取非持久主题的<a href="/docs/zh-CN/next/pulsar-admin#non-persistent-stats">统计信息</a>,获取命名空间下的非持久主题<a href="/docs/zh-CN/next/pulsar-admin">列表</a>等操作。</p>
 <h2><a class="anchor" aria-hidden="true" id="与pulsar客户端一起使用"></a><a href="#与pulsar客户端一起使用" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>除了确保使用具有<code>非持久性</code>的正确<a href="#using">主题名称</a>作为主题类型之外,你不应该对 Pulsar 客户端进行任何更改以使用非持久性消息传递。</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/cookbooks-deduplication"><span class="arrow-prev">← </span><span>Message deduplication</span></a><a class="docs-next button" href="/docs/zh-CN/next/cookbooks-partitioned"><span>分区Topic</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="#使用">使用</a></li><li><a href="#启用">启用</a></li><li [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/cookbooks-deduplication"><span class="arrow-prev">← </span><span>Message deduplication</span></a><a class="docs-next button" href="/docs/zh-CN/next/cookbooks-partitioned"><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="#使用">使用</a></li><li><a href="#启用">启用</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/next/cookbooks-partitioned.html b/content/docs/zh-CN/next/cookbooks-partitioned.html
index 035b3c7..67e1045 100644
--- a/content/docs/zh-CN/next/cookbooks-partitioned.html
+++ b/content/docs/zh-CN/next/cookbooks-partitioned.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Partitioned topics · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作的说明,请参见 &lt;a href=&quot;/docs/zh-CN/next [...]
-"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Partitioned topics · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作的说明,请参见 &l [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Partitioned topics · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作,请参见 &lt;a href=&quot;/docs/zh-CN/next/concept [...]
+"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Partitioned topics · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作,请参见 &lt;a href [...]
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -70,12 +70,12 @@
                 };
               }
             });
-        </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">Partitioned topics</h1></header><article><div><span><p>默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 <em>分区Topic</em>是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作的 [...]
+        </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">Partitioned topics</h1></header><article><div><span><p>默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 <em>分区Topic</em>是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作,请参见 < [...]
 <p>您可以使用Pulsar的客户端库将消息<a href="#publishing-to-partitioned-topics">发布</a>到分区主题,还可以使用Pulsar的<a href="/docs/zh-CN/next/admin-api-overview"> admin API </a>进行<a href="#managing-partitioned-topics">创建和管理</a>分区主题。</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>发布到分区主题时,与非分区主题的唯一区别是您需要在创建<a href="/docs/zh-CN/next/reference-terminology#producer">生产者</a>时指定<a href="/docs/zh-CN/next/concepts-messaging#routing-modes">路由模式</a>。 <a href="#java">Java</a>示例如下。</p>
+<p>发布到分区主题时,与非分区主题的唯一区别是您需要在创建新的<a href="/docs/zh-CN/next/reference-terminology#producer">生产者</a>时指定<a href="/docs/zh-CN/next/concepts-messaging#routing-modes">路由模式</a>。 <a href="#java">Java</a>示例如下。</p>
 <h3><a class="anchor" aria-hidden="true" id="java"></a><a href="#java" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>在Java客户端中将消息发布到分区主题,非常类似于发布到<a href="/docs/zh-CN/next/client-libraries-java#using-producers">普通主题</a>。 不同之处在于您需要指定一个消息路器(从已有的路由器中选择一个或实现一个自定义的路由器)。</p>
+<p>在Java客户端中将消息发布到分区主题,和发布到<a href="/docs/zh-CN/next/client-libraries-java#using-producers">普通主题</a>非常类似。 不同之处在于您需要指定一个消息路器(从已有的路由器中选择一个或实现一个自定义的路由器)。</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.09V6 [...]
 <p>您可以在ProducerConfiguration对象中指定用于配置生产者的路由模式。 可以从如下三个模式中选择:</p>
 <ul>
@@ -83,7 +83,7 @@
 <li><code>RoundRobinPartition</code></li>
 <li><code>CustomPartition</code></li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">String pulsarBrokerRootUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
 String topic = <span class="hljs-string">"persistent://my-tenant/my-namespace/my-topic"</span>;
 
@@ -121,7 +121,7 @@ producer.send(<span class="hljs-string">"Partitioned topic message"</span>.getBy
 </code></pre>
 <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>您可以使用Pulsar的<a href="/docs/zh-CN/next/admin-api-overview"> admin API </a>来创建和管理<a href="/docs/zh-CN/next/admin-api-partitioned-topics">分区主题</a>。</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/cookbooks-non-persistent"><span class="arrow-prev">← </span><span>非持久化消息</span></a><a class="docs-next button" href="/docs/zh-CN/next/cookbooks-retention-expiry"><span>Message retention and expiry</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#发布到分区主题">发布到分区主题</a><ul class="toc-headings"><li><a href="#java" [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/cookbooks-non-persistent"><span class="arrow-prev">← </span><span>非持久化消息</span></a><a class="docs-next button" href="/docs/zh-CN/next/cookbooks-retention-expiry"><span>消息保留和到期</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#发布到分区主题">发布到分区主题</a><ul class="toc-headings"><li><a href="#java">Java</a></li></ul></ [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/next/cookbooks-partitioned/index.html b/content/docs/zh-CN/next/cookbooks-partitioned/index.html
index 035b3c7..67e1045 100644
--- a/content/docs/zh-CN/next/cookbooks-partitioned/index.html
+++ b/content/docs/zh-CN/next/cookbooks-partitioned/index.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Partitioned topics · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作的说明,请参见 &lt;a href=&quot;/docs/zh-CN/next [...]
-"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Partitioned topics · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作的说明,请参见 &l [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Partitioned topics · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作,请参见 &lt;a href=&quot;/docs/zh-CN/next/concept [...]
+"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Partitioned topics · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 &lt;em&gt;分区Topic&lt;/em&gt;是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作,请参见 &lt;a href [...]
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -70,12 +70,12 @@
                 };
               }
             });
-        </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">Partitioned topics</h1></header><article><div><span><p>默认情况下,Pulsar的Topics在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 <em>分区Topic</em>是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作的 [...]
+        </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">Partitioned topics</h1></header><article><div><span><p>默认情况下,Pulsar主题在单个broker上运行。 但是,仅使用单个 broker 会限制 topic 的最大吞吐量。 <em>分区Topic</em>是一种特殊类型的 topic,可以跨越多个broker,从而实现更高的吞吐量。 有关分区主题如何工作,请参见 < [...]
 <p>您可以使用Pulsar的客户端库将消息<a href="#publishing-to-partitioned-topics">发布</a>到分区主题,还可以使用Pulsar的<a href="/docs/zh-CN/next/admin-api-overview"> admin API </a>进行<a href="#managing-partitioned-topics">创建和管理</a>分区主题。</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>发布到分区主题时,与非分区主题的唯一区别是您需要在创建<a href="/docs/zh-CN/next/reference-terminology#producer">生产者</a>时指定<a href="/docs/zh-CN/next/concepts-messaging#routing-modes">路由模式</a>。 <a href="#java">Java</a>示例如下。</p>
+<p>发布到分区主题时,与非分区主题的唯一区别是您需要在创建新的<a href="/docs/zh-CN/next/reference-terminology#producer">生产者</a>时指定<a href="/docs/zh-CN/next/concepts-messaging#routing-modes">路由模式</a>。 <a href="#java">Java</a>示例如下。</p>
 <h3><a class="anchor" aria-hidden="true" id="java"></a><a href="#java" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>在Java客户端中将消息发布到分区主题,非常类似于发布到<a href="/docs/zh-CN/next/client-libraries-java#using-producers">普通主题</a>。 不同之处在于您需要指定一个消息路器(从已有的路由器中选择一个或实现一个自定义的路由器)。</p>
+<p>在Java客户端中将消息发布到分区主题,和发布到<a href="/docs/zh-CN/next/client-libraries-java#using-producers">普通主题</a>非常类似。 不同之处在于您需要指定一个消息路器(从已有的路由器中选择一个或实现一个自定义的路由器)。</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.09V6 [...]
 <p>您可以在ProducerConfiguration对象中指定用于配置生产者的路由模式。 可以从如下三个模式中选择:</p>
 <ul>
@@ -83,7 +83,7 @@
 <li><code>RoundRobinPartition</code></li>
 <li><code>CustomPartition</code></li>
 </ul>
-<p>这里有一个示例:</p>
+<p>下面是一个示例:</p>
 <pre><code class="hljs css language-java">String pulsarBrokerRootUrl = <span class="hljs-string">"pulsar://localhost:6650"</span>;
 String topic = <span class="hljs-string">"persistent://my-tenant/my-namespace/my-topic"</span>;
 
@@ -121,7 +121,7 @@ producer.send(<span class="hljs-string">"Partitioned topic message"</span>.getBy
 </code></pre>
 <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>您可以使用Pulsar的<a href="/docs/zh-CN/next/admin-api-overview"> admin API </a>来创建和管理<a href="/docs/zh-CN/next/admin-api-partitioned-topics">分区主题</a>。</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/cookbooks-non-persistent"><span class="arrow-prev">← </span><span>非持久化消息</span></a><a class="docs-next button" href="/docs/zh-CN/next/cookbooks-retention-expiry"><span>Message retention and expiry</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#发布到分区主题">发布到分区主题</a><ul class="toc-headings"><li><a href="#java" [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/cookbooks-non-persistent"><span class="arrow-prev">← </span><span>非持久化消息</span></a><a class="docs-next button" href="/docs/zh-CN/next/cookbooks-retention-expiry"><span>消息保留和到期</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#发布到分区主题">发布到分区主题</a><ul class="toc-headings"><li><a href="#java">Java</a></li></ul></ [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/next/cookbooks-retention-expiry.html b/content/docs/zh-CN/next/cookbooks-retention-expiry.html
index 50f53e9..18ad37e 100644
--- a/content/docs/zh-CN/next/cookbooks-retention-expiry.html
+++ b/content/docs/zh-CN/next/cookbooks-retention-expiry.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar brokers are responsible for handling messages that pass through Pulsar, including &lt;a href=&quot;/docs/zh-CN/next/concepts-architecture-overview#persistent-storage&quo [...]
-"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Message retention and expiry · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;Pulsar brokers are responsible for handling messages that pass through Pulsar, including &lt;a href=&quot;/docs/zh-CN/next/concepts-architecture- [...]
+<!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="&lt;p&gt;Pulsar brokers 负责处理通过Pulsar的消息,包括消息的&lt;a href=&quot;/docs/zh-CN/next/concepts-architecture-overview#persistent-storage&quot;&gt;持久存储&lt;/a&gt;。 默认情况下,broker 的策略如下:&lt;/p&gt;
+"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="消息保留和到期 · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;Pulsar brokers 负责处理通过Pulsar的消息,包括消息的&lt;a href=&quot;/docs/zh-CN/next/concepts-architecture-overview#persistent-storage&quot;&gt;持久存储&lt;/a&gt;。 默认情况下,broker 的策略如下:&l [...]
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -70,15 +70,15 @@
                 };
               }
             });
-        </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">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers are responsible for handling messages that pass through Pulsar, including <a href="/docs/zh-CN/next/concepts- [...]
+        </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>Pulsar brokers 负责处理通过Pulsar的消息,包括消息的<a href="/docs/zh-CN/next/concepts-architecture-overview#persistent-storage">持久存储</a>。 默认情况下,broker 的策略如下:</p>
 <ul>
-<li>immediately delete all messages that have been acknowledged on every subscription, and</li>
-<li>persistently store all unacknowledged messages in a <a href="#backlog-quotas">backlog</a>.</li>
+<li>立即删除每个订阅上已确认的所有消息。</li>
+<li>并且持久性地将所有未确认的消息存储在<a href="#backlog-quotas"> backlog </a>中。</li>
 </ul>
-<p>In Pulsar, you can override both of these default behaviors, at the namespace level, in two ways:</p>
+<p>在Pulsar中,你可以在命名空间级别以两种方式覆盖这两种默认行为:</p>
 <ul>
-<li>You can persistently store messages that have already been consumed and acknowledged for a minimum time by setting <a href="#retention-policies">retention policies</a>.</li>
-<li>Messages that are not acknowledged within a specified timeframe, can be automatically marked as consumed, by specifying the <a href="#time-to-live-ttl">time to live</a> (TTL).</li>
+<li>通过设置 <a href="#retention-policies">保留策略</a>,可以持久地存储已经被使用和确认的消息,并将其保留最少时间。</li>
+<li>通过指定[生存时间](#time-to-live- TTL) (TTL),可以自动将未在指定时间范围内得到确认的消息标记为已消费。</li>
 </ul>
 <p>Pulsar's <a href="/docs/zh-CN/next/admin-api-overview">admin interface</a> enables you to manage both retention policies and TTL at the namespace level (and thus within a specific tenant and either on a specific cluster or in the <a href="/docs/zh-CN/next/concepts-architecture-overview#global-cluster"><code>global</code></a> cluster).</p>
 <blockquote>
@@ -248,7 +248,7 @@ admin.namespaces().setBacklogQuota(namespace, quota);
 <h4><a class="anchor" aria-hidden="true" id="java-6"></a><a href="#java-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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. [...]
 <pre><code class="hljs css language-java">admin.namespaces().getNamespaceMessageTTL(namespace)
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/cookbooks-partitioned"><span class="arrow-prev">← </span><span>分区Topic</span></a><a class="docs-next button" href="/docs/zh-CN/next/cookbooks-encryption"><span>Encryption</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#retention-policies">Retention policies</a><ul class="toc-headings"><li><a href="#defaults" [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/cookbooks-partitioned"><span class="arrow-prev">← </span><span>分区主题</span></a><a class="docs-next button" href="/docs/zh-CN/next/cookbooks-encryption"><span>Encryption</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#retention-policies">Retention policies</a><ul class="toc-headings"><li><a href="#defaults">De [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
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 50f53e9..18ad37e 100644
--- a/content/docs/zh-CN/next/cookbooks-retention-expiry/index.html
+++ b/content/docs/zh-CN/next/cookbooks-retention-expiry/index.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;p&gt;Pulsar brokers are responsible for handling messages that pass through Pulsar, including &lt;a href=&quot;/docs/zh-CN/next/concepts-architecture-overview#persistent-storage&quo [...]
-"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="Message retention and expiry · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;Pulsar brokers are responsible for handling messages that pass through Pulsar, including &lt;a href=&quot;/docs/zh-CN/next/concepts-architecture- [...]
+<!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="&lt;p&gt;Pulsar brokers 负责处理通过Pulsar的消息,包括消息的&lt;a href=&quot;/docs/zh-CN/next/concepts-architecture-overview#persistent-storage&quot;&gt;持久存储&lt;/a&gt;。 默认情况下,broker 的策略如下:&lt;/p&gt;
+"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="zh-CN"/><meta property="og:title" content="消息保留和到期 · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content="&lt;p&gt;Pulsar brokers 负责处理通过Pulsar的消息,包括消息的&lt;a href=&quot;/docs/zh-CN/next/concepts-architecture-overview#persistent-storage&quot;&gt;持久存储&lt;/a&gt;。 默认情况下,broker 的策略如下:&l [...]
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -70,15 +70,15 @@
                 };
               }
             });
-        </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">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers are responsible for handling messages that pass through Pulsar, including <a href="/docs/zh-CN/next/concepts- [...]
+        </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>Pulsar brokers 负责处理通过Pulsar的消息,包括消息的<a href="/docs/zh-CN/next/concepts-architecture-overview#persistent-storage">持久存储</a>。 默认情况下,broker 的策略如下:</p>
 <ul>
-<li>immediately delete all messages that have been acknowledged on every subscription, and</li>
-<li>persistently store all unacknowledged messages in a <a href="#backlog-quotas">backlog</a>.</li>
+<li>立即删除每个订阅上已确认的所有消息。</li>
+<li>并且持久性地将所有未确认的消息存储在<a href="#backlog-quotas"> backlog </a>中。</li>
 </ul>
-<p>In Pulsar, you can override both of these default behaviors, at the namespace level, in two ways:</p>
+<p>在Pulsar中,你可以在命名空间级别以两种方式覆盖这两种默认行为:</p>
 <ul>
-<li>You can persistently store messages that have already been consumed and acknowledged for a minimum time by setting <a href="#retention-policies">retention policies</a>.</li>
-<li>Messages that are not acknowledged within a specified timeframe, can be automatically marked as consumed, by specifying the <a href="#time-to-live-ttl">time to live</a> (TTL).</li>
+<li>通过设置 <a href="#retention-policies">保留策略</a>,可以持久地存储已经被使用和确认的消息,并将其保留最少时间。</li>
+<li>通过指定[生存时间](#time-to-live- TTL) (TTL),可以自动将未在指定时间范围内得到确认的消息标记为已消费。</li>
 </ul>
 <p>Pulsar's <a href="/docs/zh-CN/next/admin-api-overview">admin interface</a> enables you to manage both retention policies and TTL at the namespace level (and thus within a specific tenant and either on a specific cluster or in the <a href="/docs/zh-CN/next/concepts-architecture-overview#global-cluster"><code>global</code></a> cluster).</p>
 <blockquote>
@@ -248,7 +248,7 @@ admin.namespaces().setBacklogQuota(namespace, quota);
 <h4><a class="anchor" aria-hidden="true" id="java-6"></a><a href="#java-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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. [...]
 <pre><code class="hljs css language-java">admin.namespaces().getNamespaceMessageTTL(namespace)
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/cookbooks-partitioned"><span class="arrow-prev">← </span><span>分区Topic</span></a><a class="docs-next button" href="/docs/zh-CN/next/cookbooks-encryption"><span>Encryption</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#retention-policies">Retention policies</a><ul class="toc-headings"><li><a href="#defaults" [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/cookbooks-partitioned"><span class="arrow-prev">← </span><span>分区主题</span></a><a class="docs-next button" href="/docs/zh-CN/next/cookbooks-encryption"><span>Encryption</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#retention-policies">Retention policies</a><ul class="toc-headings"><li><a href="#defaults">De [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/next/cookbooks-tiered-storage.html b/content/docs/zh-CN/next/cookbooks-tiered-storage.html
index e83fe98..97ea7d4 100644
--- a/content/docs/zh-CN/next/cookbooks-tiered-storage.html
+++ b/content/docs/zh-CN/next/cookbooks-tiered-storage.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
             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 e83fe98..97ea7d4 100644
--- a/content/docs/zh-CN/next/cookbooks-tiered-storage/index.html
+++ b/content/docs/zh-CN/next/cookbooks-tiered-storage/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考手 [...]
             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 26ddd95..d1558ea 100644
--- a/content/docs/zh-CN/next/deploy-aws.html
+++ b/content/docs/zh-CN/next/deploy-aws.html
@@ -24,7 +24,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>部署< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>部署< [...]
             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 26ddd95..d1558ea 100644
--- a/content/docs/zh-CN/next/deploy-aws/index.html
+++ b/content/docs/zh-CN/next/deploy-aws/index.html
@@ -24,7 +24,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>部署< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>部署< [...]
             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 477994e..74e699a 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
@@ -24,7 +24,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>部署< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>部署< [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -212,7 +212,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.3.0
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="cluster-metadata-initialization"></a><a href="#cluster-metadata-initialization" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 [...]
 <p>Once you've set up the cluster-specific ZooKeeper and configuration store quorums for your instance, there is some metadata that needs to be written to ZooKeeper for each cluster in your instance. <strong>It only needs to be written once</strong>.</p>
-<p>You can initialize this metadata using the <a href="/docs/zh-CN/next/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/next/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. 这里有一个示例:</p>
+<p>You can initialize this metadata using the <a href="/docs/zh-CN/next/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/next/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar initialize-cluster-metadata \</span>
   --cluster us-west \
   --zookeeper zk1.us-west.example.com:2181 \
@@ -230,7 +230,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.3.0
 <li>集群的web服务URL</li>
 <li>Broker服务的URL,来开启和集群中<a href="/docs/zh-CN/next/reference-terminology#broker">broker</a>的交互</li>
 </ul>
-<p>如果您使用<a href="/docs/zh-CN/next/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL以及为 brokers 群集指定TLS broker服务URL。</p>
+<p>如果使用<a href="/docs/zh-CN/next/security-tls-transport"> TLS </a>,那么您还需要为群集指定TLS Web服务URL,为群集中的各个 broker 指定 TLS broker服务URL。</p>
 <p>Make sure to run <code>initialize-cluster-metadata</code> for each cluster in your instance.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-bookkeeper"></a><a href="#deploying-bookkeeper" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
 <p>BookKeeper provides <a href="/docs/zh-CN/next/concepts-architecture-overview#persistent-storage">persistent message storage</a> for Pulsar.</p>
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 477994e..74e699a 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
@@ -24,7 +24,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>部署< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>部署< [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -212,7 +212,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.3.0
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="cluster-metadata-initialization"></a><a href="#cluster-metadata-initialization" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 [...]
 <p>Once you've set up the cluster-specific ZooKeeper and configuration store quorums for your instance, there is some metadata that needs to be written to ZooKeeper for each cluster in your instance. <strong>It only needs to be written once</strong>.</p>
-<p>You can initialize this metadata using the <a href="/docs/zh-CN/next/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/next/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. 这里有一个示例:</p>
+<p>You can initialize this metadata using the <a href="/docs/zh-CN/next/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/next/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar initialize-cluster-metadata \</span>
   --cluster us-west \
   --zookeeper zk1.us-west.example.com:2181 \
@@ -230,7 +230,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.3.0
 <li>集群的web服务URL</li>
 <li>Broker服务的URL,来开启和集群中<a href="/docs/zh-CN/next/reference-terminology#broker">broker</a>的交互</li>
 </ul>
-<p>如果您使用<a href="/docs/zh-CN/next/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL以及为 brokers 群集指定TLS broker服务URL。</p>
+<p>如果使用<a href="/docs/zh-CN/next/security-tls-transport"> TLS </a>,那么您还需要为群集指定TLS Web服务URL,为群集中的各个 broker 指定 TLS broker服务URL。</p>
 <p>Make sure to run <code>initialize-cluster-metadata</code> for each cluster in your instance.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-bookkeeper"></a><a href="#deploying-bookkeeper" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
 <p>BookKeeper provides <a href="/docs/zh-CN/next/concepts-architecture-overview#persistent-storage">persistent message storage</a> for Pulsar.</p>
diff --git a/content/docs/zh-CN/next/deploy-bare-metal.html b/content/docs/zh-CN/next/deploy-bare-metal.html
index ce0e80a0..1ef992c 100644
--- a/content/docs/zh-CN/next/deploy-bare-metal.html
+++ b/content/docs/zh-CN/next/deploy-bare-metal.html
@@ -24,7 +24,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>部署< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>部署< [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -92,7 +92,7 @@
 <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 [...]
 <h3><a class="anchor" aria-hidden="true" id="要求"></a><a href="#要求" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c [...]
 <blockquote>
-<p>如果你想使用已有的zookeeper集群,那就不用准备额外的机器去运行zookeeper。</p>
+<p>如果您想使用已有的zookeeper集群,那就不用准备额外的机器去运行zookeeper。</p>
 </blockquote>
 <p>要在裸机上运行Pulsar,建议准备以下资源:</p>
 <ul>
@@ -101,7 +101,7 @@
 <li>3台运行<a href="https://zookeeper.apache.org">ZooKeeper</a></li>
 <li>3台运行Pulsar broker,一台 <a href="https://bookkeeper.apache.org">BookKeeper</a> bookie</li>
 </ul></li>
-<li>一个 <a href="https://en.wikipedia.org/wiki/Domain_Name_System">DNS</a>(域名解析服务器)包含Pulsar所有broker主机</li>
+<li>一个 包含Pulsar所有broker主机的<a href="https://en.wikipedia.org/wiki/Domain_Name_System">DNS</a>(域名解析服务器)</li>
 </ul>
 <blockquote>
 <p>如果没有足够的机器,或者想在集群模式下使用 Pulsar (稍后扩展集群),可以把 Pulsar 部署在一个节点上,该节点会在同一台机器上运行 zookeeper、bookie 和 broker。</p>
@@ -113,22 +113,22 @@
 <h3><a class="anchor" aria-hidden="true" id="硬件条件"></a><a href="#硬件条件" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <p>在部署 Pulsar 集群时,我们提供了一些基本建议,在容量规划时应牢记这些建议。</p>
 <h4><a class="anchor" aria-hidden="true" id="zookeeper"></a><a href="#zookeeper" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>对于运行ZooKeeper的机器,我们建议使用配置一般的机器或VM。 Pulsar使用ZooKeeper只是定期做些协调和配置相关的任务,<em>不</em>用于基本操作。 如果您在<a href="https://aws.amazon.com/">Amazon Web Services </a>(AWS)上部署Pulsar,比如一个<a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html">t2.small </a>实例就足够了。</p>
+<p>对于运行ZooKeeper的机器,我们建议使用配置一般的机器或VM。 Pulsar使用ZooKeeper只是定期做些协调和配置相关的任务,<em>不</em>用于基本操作。 如果您在<a href="https://aws.amazon.com/">Amazon Web Services </a>(AWS)上部署Pulsar,例如一个<a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html">t2.small </a>实例就足够了。</p>
 <h4><a class="anchor" aria-hidden="true" id="bookies-brokers"></a><a href="#bookies-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
 <p>对于运行 bookie 和 Pulsar broker 的机器,我们建议使用性能更强大的机器。 例如,对于AWS部署,<a href="https://aws.amazon.com/blogs/aws/now-available-i3-instances-for-demanding-io-intensive-applications/">i3.4xlarge</a>实例可能是合适的。 在这些机器上部署,我们还有以下建议:</p>
 <ul>
 <li>高性能的CPU和10Gbps <a href="https://en.wikipedia.org/wiki/Network_interface_controller"> NIC </a>(适用于Pulsar brokers)</li>
-<li>小型快速固态硬盘<a href="https://en.wikipedia.org/wiki/Solid-state_drive">(SSD)</a>或硬盘驱动器<a href="https://en.wikipedia.org/wiki/Hard_disk_drive">(HDD)</a>,带有<a href="https://en.wikipedia.org/wiki/RAID">RAID</a>控制器和电池供电的写缓存(适用于BookKeeper bookies)</li>
+<li>小型快速<a href="https://en.wikipedia.org/wiki/Solid-state_drive">固态硬盘</a>(SSD)或<a href="https://en.wikipedia.org/wiki/Hard_disk_drive">硬盘驱动器</a>(HDD),带有<a href="https://en.wikipedia.org/wiki/RAID">RAID</a>控制器和电池供电的写缓存(适用于BookKeeper bookies)</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="安装pulsar二进制包"></a><a href="#安装pulsar二进制包" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <blockquote>
-<p>You'll need to install the Pulsar binary package on <em>each machine in the cluster</em>, including machines running <a href="#deploying-a-zookeeper-cluster">ZooKeeper</a> and <a href="#deploying-a-bookkeeper-cluster">BookKeeper</a>.</p>
+<p>您需要在<em>集群的每台机器上</em>安装 Pusar 二进制包,包括运行 <a href="#deploying-a-zookeeper-cluster">ZooKeeper</a> 和 <a href="#deploying-a-bookkeeper-cluster">BookKeeper</a>的机器。</p>
 </blockquote>
-<p>要开始在裸机上部署Pulsar集群,您需要通过以下方式之一下载二进制压缩包:</p>
+<p>要在裸机上部署Pulsar集群,用以下任意方式下载二进制压缩包:</p>
 <ul>
 <li>点击下面的链接,会自动触发下载:
 <ul>
-<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-2.3.0-bin.tar.gz" download>Pulsar 2.3.0 binary release</a></li>
+<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-2.3.0-bin.tar.gz" download>Pulsar 2.3.0 的二进制发行版本</a></li>
 </ul></li>
 <li>从Pulsar的 <a href="/download">下载页面</a>下载</li>
 <li>从Pulsar在<a href="https://github.com"> GitHub </a> 的 <a href="https://github.com/apache/pulsar/releases/latest">发布页面</a></li>
@@ -147,7 +147,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.3.0
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>bin</code></td><td style="text-align:left">Pulsar的<a href="/docs/zh-CN/next/reference-cli-tools">命令行工具</a>,如 <a href="/docs/zh-CN/next/reference-cli-tools#pulsar"><code>pulsar</code></a> 和 <a href="/docs/zh-CN/next/pulsar-admin"><code>pulsar-admin</code></a></td></tr>
-<tr><td style="text-align:left"><code>conf</code></td><td style="text-align:left">Pulsar的配置文件,包含<a href="/docs/zh-CN/next/reference-configuration#broker">broker的配置</a>,<a href="/docs/zh-CN/next/reference-configuration#zookeeper">ZooKeeper 的配置</a> 等等</td></tr>
+<tr><td style="text-align:left"><code>conf</code></td><td style="text-align:left">Pulsar的配置文件,包含<a href="/docs/zh-CN/next/reference-configuration#broker">broker配置</a>,<a href="/docs/zh-CN/next/reference-configuration#zookeeper">ZooKeeper 配置</a> 等等</td></tr>
 <tr><td style="text-align:left"><code>data</code></td><td style="text-align:left">ZooKeeper和BookKeeper使用的数据存储目录</td></tr>
 <tr><td style="text-align:left"><code>lib</code></td><td style="text-align:left">Pulsar使用到的<a href="https://en.wikipedia.org/wiki/JAR_(file_format)"> JAR </a>文件</td></tr>
 <tr><td style="text-align:left"><code>logs</code></td><td style="text-align:left">安装时生成的日志文件</td></tr>
@@ -161,12 +161,12 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.3.0
 <ul>
 <li><p>通过单击下面的链接并从 Apache 镜像下载该版本:</p>
 <ul>
-<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-io-connectors-2.3.0-bin.tar.gz" download>Pulsar IO Connectors 2.3.0 release</a></li>
+<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-io-connectors-2.3.0-bin.tar.gz" download>Pulsar IO 连接器 2.3.0 发行版本</a></li>
 </ul></li>
 <li><p>从Pulsar <a href="/download">下载页</a></p></li>
-<li><p>from the Pulsar <a href="https://github.com/apache/pulsar/releases/latest">releases page</a></p></li>
+<li><p>从 Pulsar <a href="https://github.com/apache/pulsar/releases/latest">发布页面</a></p></li>
 <li><p>使用 <a href="https://www.gnu.org/software/wget">wget</a>:</p>
-<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> wget https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-io-connectors-2.3.0-bin.tar.gz</span>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> wget https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-2.3.0-bin.tar.gz</span>
 </code></pre></li>
 </ul>
 <p>Once the tarball is downloaded, in the pulsar directory, untar the io-connectors package and copy the connectors as <code>connectors</code> in the pulsar directory:</p>
@@ -190,14 +190,14 @@ pulsar-io-twitter-2.3.0.nar
 <blockquote>
 <p>从<code>2.2.0</code>版本,Pulsar发布了一个单独的二进制发行版,其中包含分层存储卸载器。 如果您想启用分层存储功能,可以按照以下说明操作; 否则你可以暂时跳过此部分。</p>
 </blockquote>
-<p>要使用分层存储卸载器,您需要在每个broker节点上下载其发行版压缩包,可通过以下方式之一来进行下载:</p>
+<p>要使用分层存储卸载器,您需要在每个broker节点上下载其发行版压缩包,可通过以下任一方式来下载:</p>
 <ul>
 <li><p>通过单击下面的链接并从 Apache 镜像下载该版本:</p>
 <ul>
-<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-offloaders-2.3.0-bin.tar.gz" download>Pulsar Tiered Storage Offloaders 2.3.0 release</a></li>
+<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-offloaders-2.3.0-bin.tar.gz" download>Pulsar 分层存储下载器 2.3.0 版本</a></li>
 </ul></li>
 <li><p>从Pulsar <a href="/download">下载页</a></p></li>
-<li><p>from the Pulsar <a href="https://github.com/apache/pulsar/releases/latest">releases page</a></p></li>
+<li><p>从 Pulsar <a href="https://github.com/apache/pulsar/releases/latest">发布页面</a></p></li>
 <li><p>使用 <a href="https://www.gnu.org/software/wget">wget</a>:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> wget https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-offloaders-2.3.0-bin.tar.gz</span>
 </code></pre></li>
@@ -213,19 +213,19 @@ $ mv apache-pulsar-offloaders-2.3.0/offloaders offloaders
 $ ls offloaders
 tiered-storage-jcloud-2.3.0.nar
 </code></pre>
-<p>有关如何配置分层存储功能的更多详细信息,可以参考此<a href="/docs/zh-CN/next/cookbooks-tiered-storage">分层存储手册</a></p>
-<h2><a class="anchor" aria-hidden="true" id="deploying-a-zookeeper-cluster"></a><a href="#deploying-a-zookeeper-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 2.5S13.98 12  [...]
+<p>有关如何配置分层存储功能的更多详细信息,参考<a href="/docs/zh-CN/next/cookbooks-tiered-storage">分层存储手册</a>。</p>
+<h2><a class="anchor" aria-hidden="true" id="部署bookkeeper集群"></a><a href="#部署bookkeeper集群" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
 <blockquote>
-<p>If you already have an exsiting zookeeper cluster and would like to use it, you can skip this section.</p>
+<p>如果您已经有一个 zookeeper 集群,并希望使用它,您可以跳过此部分。</p>
 </blockquote>
 <p><a href="https://zookeeper.apache.org">ZooKeeper</a> manages a variety of essential coordination- and configuration-related tasks for Pulsar. To deploy a Pulsar cluster you'll need to deploy ZooKeeper first (before all other components). We recommend deploying a 3-node ZooKeeper cluster. Pulsar does not make heavy use of ZooKeeper, so more lightweight machines or VMs should suffice for running ZooKeeper.</p>
-<p>To begin, add all ZooKeeper servers to the configuration specified in <a href="/docs/zh-CN/next/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> (in the Pulsar directory you created <a href="#installing-the-pulsar-binary-package">above</a>). 这里有一个示例:</p>
+<p>To begin, add all ZooKeeper servers to the configuration specified in <a href="/docs/zh-CN/next/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> (in the Pulsar directory you created <a href="#installing-the-pulsar-binary-package">above</a>). 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-meta">server.1</span>=<span class="hljs-string">zk1.us-west.example.com:2888:3888</span>
 <span class="hljs-meta">server.2</span>=<span class="hljs-string">zk2.us-west.example.com:2888:3888</span>
 <span class="hljs-meta">server.3</span>=<span class="hljs-string">zk3.us-west.example.com:2888:3888</span>
 </code></pre>
 <blockquote>
-<p>如果您只有一台机器来部署Pulsar,则只需在配置文件中添加一个服务器条目即可。</p>
+<p>如果您只有一台机器来部署Pulsar,只需在配置文件中添加一个服务器条目即可。</p>
 </blockquote>
 <p>On each host, you need to specify the ID of the node in each node's <code>myid</code> file, which is in each server's <code>data/zookeeper</code> folder by default (this can be changed via the <a href="/docs/zh-CN/next/reference-configuration#zookeeper-dataDir"><code>dataDir</code></a> parameter).</p>
 <blockquote>
@@ -245,9 +245,9 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <p>使用<a href="/docs/zh-CN/next/reference-cli-tools#pulsar-daemon"><code>pulsar-daemon</code></a> CLI命令行工具启动zookeeper,如:</p>
 <pre><code class="hljs css language-bash">$ PULSAR_EXTRA_OPTS=<span class="hljs-string">"-Dstats_server_port=8001"</span> bin/pulsar-daemon start zookeeper
 </code></pre>
-<h2><a class="anchor" aria-hidden="true" id="initializing-cluster-metadata"></a><a href="#initializing-cluster-metadata" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12  [...]
+<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  [...]
 <p>Once you've deployed ZooKeeper for your cluster, there is some metadata that needs to be written to ZooKeeper for each cluster in your instance. It only needs to be written <strong>once</strong>.</p>
-<p>You can initialize this metadata using the <a href="/docs/zh-CN/next/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/next/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. This command can be run on any machine in your ZooKeeper cluster. 这里有一个示例:</p>
+<p>You can initialize this metadata using the <a href="/docs/zh-CN/next/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/next/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. This command can be run on any machine in your ZooKeeper cluster. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar initialize-cluster-metadata \</span>
   --cluster pulsar-cluster-1 \
   --zookeeper zk1.us-west.example.com:2181 \
@@ -257,24 +257,24 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
   --broker-service-url pulsar://pulsar.us-west.example.com:6650 \
   --broker-service-url-tls pulsar+ssl://pulsar.us-west.example.com:6651
 </code></pre>
-<p>As you can see from the example above, the following needs to be specified:</p>
+<p>从上面的例子中可以看到,您需要指定以下内容:</p>
 <table>
 <thead>
-<tr><th style="text-align:left">Flag</th><th style="text-align:left">说明:</th></tr>
+<tr><th style="text-align:left">标记</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>--cluster</code></td><td style="text-align:left">集群名字</td></tr>
-<tr><td style="text-align:left"><code>--zookeeper</code></td><td style="text-align:left">ZooKeeper集群的“本地”连接地址字符串。 此连接字符串为ZooKeeper集群任意<em>一个</em>实例的地址。</td></tr>
-<tr><td style="text-align:left"><code>--configuration-store</code></td><td style="text-align:left">整个集群实例的配置存储连接字符串。 和<code>--zookeeper</code>参数一样只需要包含ZooKeeper集群中的<em>一个</em>节点即可。</td></tr>
+<tr><td style="text-align:left"><code>--zookeeper</code></td><td style="text-align:left">ZooKeeper集群的“本地”连接字符串。 该连接字符串只需包含ZooKeeper集群<em>任一台</em>机器。</td></tr>
+<tr><td style="text-align:left"><code>--configuration-store</code></td><td style="text-align:left">整个集群实例的配置存储连接字符串。 和<code>--zookeeper</code>标记一样,该连接字符串只需包含ZooKeeper集群中的<em>任一台</em>机器即可。</td></tr>
 <tr><td style="text-align:left"><code>--web-service-url</code></td><td style="text-align:left">群集的Web服务URL以及端口。 此URL应为标准DNS名称。 默认端口为8080(我们不建议使用其他端口)。</td></tr>
-<tr><td style="text-align:left"><code>--web-service-url-tls</code></td><td style="text-align:left">如果您使用<a href="/docs/zh-CN/next/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL。 默认端口为8443(我们不建议使用其他端口)。</td></tr>
-<tr><td style="text-align:left"><code>--broker-service-url</code></td><td style="text-align:left">Broker服务的URL,用于与集群中的brokers进行交互。 此URL应使用与Web服务URL相同的DNS名称,但应使用<code>pulsar</code>替代http/https。 端口默认6650(我们不建议使用其他端口)。</td></tr>
-<tr><td style="text-align:left"><code>--broker-service-url-tls</code></td><td style="text-align:left">如果您使用<a href="/docs/zh-CN/next/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL以及为 brokers 群集指定TLS broker服务URL。 端口默认6651(我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--web-service-url-tls</code></td><td style="text-align:left">如果您使用<a href="/docs/zh-CN/next/security-tls-transport"> TLS </a>,需要为群集指定TLS Web服务URL。 默认端口为8443(我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--broker-service-url</code></td><td style="text-align:left">Broker服务的URL,用于与集群中的brokers进行交互。 此URL应使用与Web服务URL相同的DNS名称,但应使用<code>pulsar</code>替代scheme。 默认端口为 6650 (我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--broker-service-url-tls</code></td><td style="text-align:left">如果使用<a href="/docs/zh-CN/next/security-tls-transport"> TLS </a>,那么您还需要为群集指定TLS Web服务URL,为群集中的各个 broker 指定 TLS broker服务URL。 默认端口为 6651 (我们不建议使用其他端口)。</td></tr>
 </tbody>
 </table>
-<h2><a class="anchor" aria-hidden="true" id="deploying-a-bookkeeper-cluster"></a><a href="#deploying-a-bookkeeper-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 2.5S13.98 1 [...]
+<h2><a class="anchor" aria-hidden="true" id="部署bookkeeper集群-1"></a><a href="#部署bookkeeper集群-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
 <p><a href="https://bookkeeper.apache.org">BookKeeper</a> handles all persistent data storage in Pulsar. You will need to deploy a cluster of BookKeeper bookies to use Pulsar. We recommend running a <strong>3-bookie BookKeeper cluster</strong>.</p>
-<p>BookKeeper bookies can be configured using the <a href="/docs/zh-CN/next/reference-configuration#bookkeeper"><code>conf/bookkeeper.conf</code></a> configuration file. The most important step in configuring bookies for our purposes here is ensuring that the <a href="/docs/zh-CN/next/reference-configuration#bookkeeper-zkServers"><code>zkServers</code></a> is set to the connection string for the ZooKeeper cluster. 这里有一个示例:</p>
+<p>BookKeeper bookies can be configured using the <a href="/docs/zh-CN/next/reference-configuration#bookkeeper"><code>conf/bookkeeper.conf</code></a> configuration file. The most important step in configuring bookies for our purposes here is ensuring that the <a href="/docs/zh-CN/next/reference-configuration#bookkeeper-zkServers"><code>zkServers</code></a> is set to the connection string for the ZooKeeper cluster. 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zkServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
 <p>Once you've appropriately modified the <code>zkServers</code> parameter, you can provide any other configuration modifications you need. You can find a full listing of the available BookKeeper configuration parameters <a href="/docs/zh-CN/next/reference-configuration#bookkeeper">here</a>, although we would recommend consulting the <a href="http://bookkeeper.apache.org/docs/latest/reference/config/">BookKeeper documentation</a> for a more in-depth guide.</p>
@@ -305,7 +305,7 @@ $ bin/pulsar-daemon start bookie
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
-<h3><a class="anchor" aria-hidden="true" id="配置brokers"></a><a href="#配置brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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 [...]
+<h3><a class="anchor" aria-hidden="true" id="配置broker"></a><a href="#配置broker" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
@@ -314,7 +314,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
 </code></pre>
 <blockquote>
-<p>如果在单节点集群中部署Pulsar,则应将<code>conf/broker.conf</code>中的复制设置更新为<code>1</code></p>
+<p>如果在单节点集群中部署Pulsar,您需要把<code>conf/broker.conf</code>文件中的复制设置更新为<code>1</code>。</p>
 <pre><code class="hljs css language-properties"></code></pre>
 </blockquote>
 <h1><a class="anchor" aria-hidden="true" id="number-of-bookies-to-use-when-creating-a-ledger"></a><a href="#number-of-bookies-to-use-when-creating-a-ledger" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9 [...]
@@ -342,7 +342,7 @@ If you want to enable [<span class="hljs-string">Pulsar Functions</span>](<span
 <span class="hljs-code">      ```</span>
 <span class="hljs-code">      </span>
 
-<span class="hljs-section">### 启动 Brokers</span>
+<span class="hljs-section">### 启动 Broker</span>
 
 You can then provide any other configuration changes that you'd like in the [<span class="hljs-string">`conf/broker.conf`</span>](<span class="hljs-link">/docs/zh-CN/next/reference-configuration#broker</span>) file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.
 
@@ -357,7 +357,7 @@ $ bin/pulsar broker
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-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 2.5S1 [...]
 <p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="/docs/zh-CN/next/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/zh-CN/next/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. 这里有一个示例:</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/zh-CN/next/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -370,14 +370,14 @@ $ bin/pulsar broker
 <blockquote>
 <p>You may need to use a different cluster name in the topic if you specified a cluster name different from <code>pulsar-cluster-1</code>.</p>
 </blockquote>
-<p>这将向Pulsar的Topic发送单条消息。 此外,您可以在发布消息之前在不同的终端中订阅Pulsar的Topic,如下所示:</p>
+<p>给 Pulsar 主题发布一条信息。 此外,在发布消息之前,您可以在不同的终端中订阅 Pulsar主题,如下所示:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-client consume \
   persistent://public/default/<span class="hljs-built_in">test</span> \
   -n 100 \
   -s <span class="hljs-string">"consumer-test"</span> \
   -t <span class="hljs-string">"Exclusive"</span>
 </code></pre>
-<p>一旦上面的消息被成功发布到Topic中,您会在标准输出中看到它:</p>
+<p>上面的消息成功发布到主题后,您会在标准输出中看到:</p>
 <pre><code class="hljs css language-bash">----- 收到消息 -----
 Hello Pulsar
 </code></pre>
@@ -401,7 +401,7 @@ Hello Pulsar
 <p>You will see output as below:</p>
 <pre><code class="hljs css language-shell">hello world!
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/deploy-kubernetes"><span class="arrow-prev">← </span><span>Kubernetes</span></a><a class="docs-next button" href="/docs/zh-CN/next/deploy-bare-metal-multi-cluster"><span>裸机多集群部署</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#准备工作">准备工作</a><ul class="toc-headings"><li><a href="#要求">要求</a></li><li><a href="#硬 [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/deploy-kubernetes"><span class="arrow-prev">← </span><span>Kubernetes</span></a><a class="docs-next button" href="/docs/zh-CN/next/deploy-bare-metal-multi-cluster"><span>裸机多集群部署</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#准备工作">准备工作</a><ul class="toc-headings"><li><a href="#要求">要求</a></li><li><a href="#硬 [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
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 ce0e80a0..1ef992c 100644
--- a/content/docs/zh-CN/next/deploy-bare-metal/index.html
+++ b/content/docs/zh-CN/next/deploy-bare-metal/index.html
@@ -24,7 +24,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>部署< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>部署< [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -92,7 +92,7 @@
 <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 [...]
 <h3><a class="anchor" aria-hidden="true" id="要求"></a><a href="#要求" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c [...]
 <blockquote>
-<p>如果你想使用已有的zookeeper集群,那就不用准备额外的机器去运行zookeeper。</p>
+<p>如果您想使用已有的zookeeper集群,那就不用准备额外的机器去运行zookeeper。</p>
 </blockquote>
 <p>要在裸机上运行Pulsar,建议准备以下资源:</p>
 <ul>
@@ -101,7 +101,7 @@
 <li>3台运行<a href="https://zookeeper.apache.org">ZooKeeper</a></li>
 <li>3台运行Pulsar broker,一台 <a href="https://bookkeeper.apache.org">BookKeeper</a> bookie</li>
 </ul></li>
-<li>一个 <a href="https://en.wikipedia.org/wiki/Domain_Name_System">DNS</a>(域名解析服务器)包含Pulsar所有broker主机</li>
+<li>一个 包含Pulsar所有broker主机的<a href="https://en.wikipedia.org/wiki/Domain_Name_System">DNS</a>(域名解析服务器)</li>
 </ul>
 <blockquote>
 <p>如果没有足够的机器,或者想在集群模式下使用 Pulsar (稍后扩展集群),可以把 Pulsar 部署在一个节点上,该节点会在同一台机器上运行 zookeeper、bookie 和 broker。</p>
@@ -113,22 +113,22 @@
 <h3><a class="anchor" aria-hidden="true" id="硬件条件"></a><a href="#硬件条件" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <p>在部署 Pulsar 集群时,我们提供了一些基本建议,在容量规划时应牢记这些建议。</p>
 <h4><a class="anchor" aria-hidden="true" id="zookeeper"></a><a href="#zookeeper" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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>对于运行ZooKeeper的机器,我们建议使用配置一般的机器或VM。 Pulsar使用ZooKeeper只是定期做些协调和配置相关的任务,<em>不</em>用于基本操作。 如果您在<a href="https://aws.amazon.com/">Amazon Web Services </a>(AWS)上部署Pulsar,比如一个<a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html">t2.small </a>实例就足够了。</p>
+<p>对于运行ZooKeeper的机器,我们建议使用配置一般的机器或VM。 Pulsar使用ZooKeeper只是定期做些协调和配置相关的任务,<em>不</em>用于基本操作。 如果您在<a href="https://aws.amazon.com/">Amazon Web Services </a>(AWS)上部署Pulsar,例如一个<a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html">t2.small </a>实例就足够了。</p>
 <h4><a class="anchor" aria-hidden="true" id="bookies-brokers"></a><a href="#bookies-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
 <p>对于运行 bookie 和 Pulsar broker 的机器,我们建议使用性能更强大的机器。 例如,对于AWS部署,<a href="https://aws.amazon.com/blogs/aws/now-available-i3-instances-for-demanding-io-intensive-applications/">i3.4xlarge</a>实例可能是合适的。 在这些机器上部署,我们还有以下建议:</p>
 <ul>
 <li>高性能的CPU和10Gbps <a href="https://en.wikipedia.org/wiki/Network_interface_controller"> NIC </a>(适用于Pulsar brokers)</li>
-<li>小型快速固态硬盘<a href="https://en.wikipedia.org/wiki/Solid-state_drive">(SSD)</a>或硬盘驱动器<a href="https://en.wikipedia.org/wiki/Hard_disk_drive">(HDD)</a>,带有<a href="https://en.wikipedia.org/wiki/RAID">RAID</a>控制器和电池供电的写缓存(适用于BookKeeper bookies)</li>
+<li>小型快速<a href="https://en.wikipedia.org/wiki/Solid-state_drive">固态硬盘</a>(SSD)或<a href="https://en.wikipedia.org/wiki/Hard_disk_drive">硬盘驱动器</a>(HDD),带有<a href="https://en.wikipedia.org/wiki/RAID">RAID</a>控制器和电池供电的写缓存(适用于BookKeeper bookies)</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="安装pulsar二进制包"></a><a href="#安装pulsar二进制包" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <blockquote>
-<p>You'll need to install the Pulsar binary package on <em>each machine in the cluster</em>, including machines running <a href="#deploying-a-zookeeper-cluster">ZooKeeper</a> and <a href="#deploying-a-bookkeeper-cluster">BookKeeper</a>.</p>
+<p>您需要在<em>集群的每台机器上</em>安装 Pusar 二进制包,包括运行 <a href="#deploying-a-zookeeper-cluster">ZooKeeper</a> 和 <a href="#deploying-a-bookkeeper-cluster">BookKeeper</a>的机器。</p>
 </blockquote>
-<p>要开始在裸机上部署Pulsar集群,您需要通过以下方式之一下载二进制压缩包:</p>
+<p>要在裸机上部署Pulsar集群,用以下任意方式下载二进制压缩包:</p>
 <ul>
 <li>点击下面的链接,会自动触发下载:
 <ul>
-<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-2.3.0-bin.tar.gz" download>Pulsar 2.3.0 binary release</a></li>
+<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-2.3.0-bin.tar.gz" download>Pulsar 2.3.0 的二进制发行版本</a></li>
 </ul></li>
 <li>从Pulsar的 <a href="/download">下载页面</a>下载</li>
 <li>从Pulsar在<a href="https://github.com"> GitHub </a> 的 <a href="https://github.com/apache/pulsar/releases/latest">发布页面</a></li>
@@ -147,7 +147,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.3.0
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>bin</code></td><td style="text-align:left">Pulsar的<a href="/docs/zh-CN/next/reference-cli-tools">命令行工具</a>,如 <a href="/docs/zh-CN/next/reference-cli-tools#pulsar"><code>pulsar</code></a> 和 <a href="/docs/zh-CN/next/pulsar-admin"><code>pulsar-admin</code></a></td></tr>
-<tr><td style="text-align:left"><code>conf</code></td><td style="text-align:left">Pulsar的配置文件,包含<a href="/docs/zh-CN/next/reference-configuration#broker">broker的配置</a>,<a href="/docs/zh-CN/next/reference-configuration#zookeeper">ZooKeeper 的配置</a> 等等</td></tr>
+<tr><td style="text-align:left"><code>conf</code></td><td style="text-align:left">Pulsar的配置文件,包含<a href="/docs/zh-CN/next/reference-configuration#broker">broker配置</a>,<a href="/docs/zh-CN/next/reference-configuration#zookeeper">ZooKeeper 配置</a> 等等</td></tr>
 <tr><td style="text-align:left"><code>data</code></td><td style="text-align:left">ZooKeeper和BookKeeper使用的数据存储目录</td></tr>
 <tr><td style="text-align:left"><code>lib</code></td><td style="text-align:left">Pulsar使用到的<a href="https://en.wikipedia.org/wiki/JAR_(file_format)"> JAR </a>文件</td></tr>
 <tr><td style="text-align:left"><code>logs</code></td><td style="text-align:left">安装时生成的日志文件</td></tr>
@@ -161,12 +161,12 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.3.0
 <ul>
 <li><p>通过单击下面的链接并从 Apache 镜像下载该版本:</p>
 <ul>
-<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-io-connectors-2.3.0-bin.tar.gz" download>Pulsar IO Connectors 2.3.0 release</a></li>
+<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-io-connectors-2.3.0-bin.tar.gz" download>Pulsar IO 连接器 2.3.0 发行版本</a></li>
 </ul></li>
 <li><p>从Pulsar <a href="/download">下载页</a></p></li>
-<li><p>from the Pulsar <a href="https://github.com/apache/pulsar/releases/latest">releases page</a></p></li>
+<li><p>从 Pulsar <a href="https://github.com/apache/pulsar/releases/latest">发布页面</a></p></li>
 <li><p>使用 <a href="https://www.gnu.org/software/wget">wget</a>:</p>
-<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> wget https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-io-connectors-2.3.0-bin.tar.gz</span>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> wget https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-2.3.0-bin.tar.gz</span>
 </code></pre></li>
 </ul>
 <p>Once the tarball is downloaded, in the pulsar directory, untar the io-connectors package and copy the connectors as <code>connectors</code> in the pulsar directory:</p>
@@ -190,14 +190,14 @@ pulsar-io-twitter-2.3.0.nar
 <blockquote>
 <p>从<code>2.2.0</code>版本,Pulsar发布了一个单独的二进制发行版,其中包含分层存储卸载器。 如果您想启用分层存储功能,可以按照以下说明操作; 否则你可以暂时跳过此部分。</p>
 </blockquote>
-<p>要使用分层存储卸载器,您需要在每个broker节点上下载其发行版压缩包,可通过以下方式之一来进行下载:</p>
+<p>要使用分层存储卸载器,您需要在每个broker节点上下载其发行版压缩包,可通过以下任一方式来下载:</p>
 <ul>
 <li><p>通过单击下面的链接并从 Apache 镜像下载该版本:</p>
 <ul>
-<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-offloaders-2.3.0-bin.tar.gz" download>Pulsar Tiered Storage Offloaders 2.3.0 release</a></li>
+<li><a href="https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-offloaders-2.3.0-bin.tar.gz" download>Pulsar 分层存储下载器 2.3.0 版本</a></li>
 </ul></li>
 <li><p>从Pulsar <a href="/download">下载页</a></p></li>
-<li><p>from the Pulsar <a href="https://github.com/apache/pulsar/releases/latest">releases page</a></p></li>
+<li><p>从 Pulsar <a href="https://github.com/apache/pulsar/releases/latest">发布页面</a></p></li>
 <li><p>使用 <a href="https://www.gnu.org/software/wget">wget</a>:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> wget https://archive.apache.org/dist/pulsar/pulsar-2.3.0/apache-pulsar-offloaders-2.3.0-bin.tar.gz</span>
 </code></pre></li>
@@ -213,19 +213,19 @@ $ mv apache-pulsar-offloaders-2.3.0/offloaders offloaders
 $ ls offloaders
 tiered-storage-jcloud-2.3.0.nar
 </code></pre>
-<p>有关如何配置分层存储功能的更多详细信息,可以参考此<a href="/docs/zh-CN/next/cookbooks-tiered-storage">分层存储手册</a></p>
-<h2><a class="anchor" aria-hidden="true" id="deploying-a-zookeeper-cluster"></a><a href="#deploying-a-zookeeper-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 2.5S13.98 12  [...]
+<p>有关如何配置分层存储功能的更多详细信息,参考<a href="/docs/zh-CN/next/cookbooks-tiered-storage">分层存储手册</a>。</p>
+<h2><a class="anchor" aria-hidden="true" id="部署bookkeeper集群"></a><a href="#部署bookkeeper集群" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
 <blockquote>
-<p>If you already have an exsiting zookeeper cluster and would like to use it, you can skip this section.</p>
+<p>如果您已经有一个 zookeeper 集群,并希望使用它,您可以跳过此部分。</p>
 </blockquote>
 <p><a href="https://zookeeper.apache.org">ZooKeeper</a> manages a variety of essential coordination- and configuration-related tasks for Pulsar. To deploy a Pulsar cluster you'll need to deploy ZooKeeper first (before all other components). We recommend deploying a 3-node ZooKeeper cluster. Pulsar does not make heavy use of ZooKeeper, so more lightweight machines or VMs should suffice for running ZooKeeper.</p>
-<p>To begin, add all ZooKeeper servers to the configuration specified in <a href="/docs/zh-CN/next/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> (in the Pulsar directory you created <a href="#installing-the-pulsar-binary-package">above</a>). 这里有一个示例:</p>
+<p>To begin, add all ZooKeeper servers to the configuration specified in <a href="/docs/zh-CN/next/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> (in the Pulsar directory you created <a href="#installing-the-pulsar-binary-package">above</a>). 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-meta">server.1</span>=<span class="hljs-string">zk1.us-west.example.com:2888:3888</span>
 <span class="hljs-meta">server.2</span>=<span class="hljs-string">zk2.us-west.example.com:2888:3888</span>
 <span class="hljs-meta">server.3</span>=<span class="hljs-string">zk3.us-west.example.com:2888:3888</span>
 </code></pre>
 <blockquote>
-<p>如果您只有一台机器来部署Pulsar,则只需在配置文件中添加一个服务器条目即可。</p>
+<p>如果您只有一台机器来部署Pulsar,只需在配置文件中添加一个服务器条目即可。</p>
 </blockquote>
 <p>On each host, you need to specify the ID of the node in each node's <code>myid</code> file, which is in each server's <code>data/zookeeper</code> folder by default (this can be changed via the <a href="/docs/zh-CN/next/reference-configuration#zookeeper-dataDir"><code>dataDir</code></a> parameter).</p>
 <blockquote>
@@ -245,9 +245,9 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <p>使用<a href="/docs/zh-CN/next/reference-cli-tools#pulsar-daemon"><code>pulsar-daemon</code></a> CLI命令行工具启动zookeeper,如:</p>
 <pre><code class="hljs css language-bash">$ PULSAR_EXTRA_OPTS=<span class="hljs-string">"-Dstats_server_port=8001"</span> bin/pulsar-daemon start zookeeper
 </code></pre>
-<h2><a class="anchor" aria-hidden="true" id="initializing-cluster-metadata"></a><a href="#initializing-cluster-metadata" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12  [...]
+<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  [...]
 <p>Once you've deployed ZooKeeper for your cluster, there is some metadata that needs to be written to ZooKeeper for each cluster in your instance. It only needs to be written <strong>once</strong>.</p>
-<p>You can initialize this metadata using the <a href="/docs/zh-CN/next/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/next/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. This command can be run on any machine in your ZooKeeper cluster. 这里有一个示例:</p>
+<p>You can initialize this metadata using the <a href="/docs/zh-CN/next/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/zh-CN/next/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. This command can be run on any machine in your ZooKeeper cluster. 下面是一个示例:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar initialize-cluster-metadata \</span>
   --cluster pulsar-cluster-1 \
   --zookeeper zk1.us-west.example.com:2181 \
@@ -257,24 +257,24 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
   --broker-service-url pulsar://pulsar.us-west.example.com:6650 \
   --broker-service-url-tls pulsar+ssl://pulsar.us-west.example.com:6651
 </code></pre>
-<p>As you can see from the example above, the following needs to be specified:</p>
+<p>从上面的例子中可以看到,您需要指定以下内容:</p>
 <table>
 <thead>
-<tr><th style="text-align:left">Flag</th><th style="text-align:left">说明:</th></tr>
+<tr><th style="text-align:left">标记</th><th style="text-align:left">说明</th></tr>
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>--cluster</code></td><td style="text-align:left">集群名字</td></tr>
-<tr><td style="text-align:left"><code>--zookeeper</code></td><td style="text-align:left">ZooKeeper集群的“本地”连接地址字符串。 此连接字符串为ZooKeeper集群任意<em>一个</em>实例的地址。</td></tr>
-<tr><td style="text-align:left"><code>--configuration-store</code></td><td style="text-align:left">整个集群实例的配置存储连接字符串。 和<code>--zookeeper</code>参数一样只需要包含ZooKeeper集群中的<em>一个</em>节点即可。</td></tr>
+<tr><td style="text-align:left"><code>--zookeeper</code></td><td style="text-align:left">ZooKeeper集群的“本地”连接字符串。 该连接字符串只需包含ZooKeeper集群<em>任一台</em>机器。</td></tr>
+<tr><td style="text-align:left"><code>--configuration-store</code></td><td style="text-align:left">整个集群实例的配置存储连接字符串。 和<code>--zookeeper</code>标记一样,该连接字符串只需包含ZooKeeper集群中的<em>任一台</em>机器即可。</td></tr>
 <tr><td style="text-align:left"><code>--web-service-url</code></td><td style="text-align:left">群集的Web服务URL以及端口。 此URL应为标准DNS名称。 默认端口为8080(我们不建议使用其他端口)。</td></tr>
-<tr><td style="text-align:left"><code>--web-service-url-tls</code></td><td style="text-align:left">如果您使用<a href="/docs/zh-CN/next/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL。 默认端口为8443(我们不建议使用其他端口)。</td></tr>
-<tr><td style="text-align:left"><code>--broker-service-url</code></td><td style="text-align:left">Broker服务的URL,用于与集群中的brokers进行交互。 此URL应使用与Web服务URL相同的DNS名称,但应使用<code>pulsar</code>替代http/https。 端口默认6650(我们不建议使用其他端口)。</td></tr>
-<tr><td style="text-align:left"><code>--broker-service-url-tls</code></td><td style="text-align:left">如果您使用<a href="/docs/zh-CN/next/security-tls-transport"> TLS </a>,则还需要为群集指定TLS Web服务URL以及为 brokers 群集指定TLS broker服务URL。 端口默认6651(我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--web-service-url-tls</code></td><td style="text-align:left">如果您使用<a href="/docs/zh-CN/next/security-tls-transport"> TLS </a>,需要为群集指定TLS Web服务URL。 默认端口为8443(我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--broker-service-url</code></td><td style="text-align:left">Broker服务的URL,用于与集群中的brokers进行交互。 此URL应使用与Web服务URL相同的DNS名称,但应使用<code>pulsar</code>替代scheme。 默认端口为 6650 (我们不建议使用其他端口)。</td></tr>
+<tr><td style="text-align:left"><code>--broker-service-url-tls</code></td><td style="text-align:left">如果使用<a href="/docs/zh-CN/next/security-tls-transport"> TLS </a>,那么您还需要为群集指定TLS Web服务URL,为群集中的各个 broker 指定 TLS broker服务URL。 默认端口为 6651 (我们不建议使用其他端口)。</td></tr>
 </tbody>
 </table>
-<h2><a class="anchor" aria-hidden="true" id="deploying-a-bookkeeper-cluster"></a><a href="#deploying-a-bookkeeper-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 2.5S13.98 1 [...]
+<h2><a class="anchor" aria-hidden="true" id="部署bookkeeper集群-1"></a><a href="#部署bookkeeper集群-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
 <p><a href="https://bookkeeper.apache.org">BookKeeper</a> handles all persistent data storage in Pulsar. You will need to deploy a cluster of BookKeeper bookies to use Pulsar. We recommend running a <strong>3-bookie BookKeeper cluster</strong>.</p>
-<p>BookKeeper bookies can be configured using the <a href="/docs/zh-CN/next/reference-configuration#bookkeeper"><code>conf/bookkeeper.conf</code></a> configuration file. The most important step in configuring bookies for our purposes here is ensuring that the <a href="/docs/zh-CN/next/reference-configuration#bookkeeper-zkServers"><code>zkServers</code></a> is set to the connection string for the ZooKeeper cluster. 这里有一个示例:</p>
+<p>BookKeeper bookies can be configured using the <a href="/docs/zh-CN/next/reference-configuration#bookkeeper"><code>conf/bookkeeper.conf</code></a> configuration file. The most important step in configuring bookies for our purposes here is ensuring that the <a href="/docs/zh-CN/next/reference-configuration#bookkeeper-zkServers"><code>zkServers</code></a> is set to the connection string for the ZooKeeper cluster. 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zkServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
 <p>Once you've appropriately modified the <code>zkServers</code> parameter, you can provide any other configuration modifications you need. You can find a full listing of the available BookKeeper configuration parameters <a href="/docs/zh-CN/next/reference-configuration#bookkeeper">here</a>, although we would recommend consulting the <a href="http://bookkeeper.apache.org/docs/latest/reference/config/">BookKeeper documentation</a> for a more in-depth guide.</p>
@@ -305,7 +305,7 @@ $ bin/pulsar-daemon start bookie
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
-<h3><a class="anchor" aria-hidden="true" id="配置brokers"></a><a href="#配置brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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 [...]
+<h3><a class="anchor" aria-hidden="true" id="配置broker"></a><a href="#配置broker" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
@@ -314,7 +314,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
 </code></pre>
 <blockquote>
-<p>如果在单节点集群中部署Pulsar,则应将<code>conf/broker.conf</code>中的复制设置更新为<code>1</code></p>
+<p>如果在单节点集群中部署Pulsar,您需要把<code>conf/broker.conf</code>文件中的复制设置更新为<code>1</code>。</p>
 <pre><code class="hljs css language-properties"></code></pre>
 </blockquote>
 <h1><a class="anchor" aria-hidden="true" id="number-of-bookies-to-use-when-creating-a-ledger"></a><a href="#number-of-bookies-to-use-when-creating-a-ledger" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9 [...]
@@ -342,7 +342,7 @@ If you want to enable [<span class="hljs-string">Pulsar Functions</span>](<span
 <span class="hljs-code">      ```</span>
 <span class="hljs-code">      </span>
 
-<span class="hljs-section">### 启动 Brokers</span>
+<span class="hljs-section">### 启动 Broker</span>
 
 You can then provide any other configuration changes that you'd like in the [<span class="hljs-string">`conf/broker.conf`</span>](<span class="hljs-link">/docs/zh-CN/next/reference-configuration#broker</span>) file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.
 
@@ -357,7 +357,7 @@ $ bin/pulsar broker
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-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 2.5S1 [...]
 <p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="/docs/zh-CN/next/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/zh-CN/next/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. 这里有一个示例:</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/zh-CN/next/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. 下面是一个示例:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -370,14 +370,14 @@ $ bin/pulsar broker
 <blockquote>
 <p>You may need to use a different cluster name in the topic if you specified a cluster name different from <code>pulsar-cluster-1</code>.</p>
 </blockquote>
-<p>这将向Pulsar的Topic发送单条消息。 此外,您可以在发布消息之前在不同的终端中订阅Pulsar的Topic,如下所示:</p>
+<p>给 Pulsar 主题发布一条信息。 此外,在发布消息之前,您可以在不同的终端中订阅 Pulsar主题,如下所示:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-client consume \
   persistent://public/default/<span class="hljs-built_in">test</span> \
   -n 100 \
   -s <span class="hljs-string">"consumer-test"</span> \
   -t <span class="hljs-string">"Exclusive"</span>
 </code></pre>
-<p>一旦上面的消息被成功发布到Topic中,您会在标准输出中看到它:</p>
+<p>上面的消息成功发布到主题后,您会在标准输出中看到:</p>
 <pre><code class="hljs css language-bash">----- 收到消息 -----
 Hello Pulsar
 </code></pre>
@@ -401,7 +401,7 @@ Hello Pulsar
 <p>You will see output as below:</p>
 <pre><code class="hljs css language-shell">hello world!
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/deploy-kubernetes"><span class="arrow-prev">← </span><span>Kubernetes</span></a><a class="docs-next button" href="/docs/zh-CN/next/deploy-bare-metal-multi-cluster"><span>裸机多集群部署</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#准备工作">准备工作</a><ul class="toc-headings"><li><a href="#要求">要求</a></li><li><a href="#硬 [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/deploy-kubernetes"><span class="arrow-prev">← </span><span>Kubernetes</span></a><a class="docs-next button" href="/docs/zh-CN/next/deploy-bare-metal-multi-cluster"><span>裸机多集群部署</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#准备工作">准备工作</a><ul class="toc-headings"><li><a href="#要求">要求</a></li><li><a href="#硬 [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/next/deploy-dcos.html b/content/docs/zh-CN/next/deploy-dcos.html
index 76dbc95..fdc931c 100644
--- a/content/docs/zh-CN/next/deploy-dcos.html
+++ b/content/docs/zh-CN/next/deploy-dcos.html
@@ -24,7 +24,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>部署< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>部署< [...]
             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 76dbc95..fdc931c 100644
--- a/content/docs/zh-CN/next/deploy-dcos/index.html
+++ b/content/docs/zh-CN/next/deploy-dcos/index.html
@@ -24,7 +24,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>部署< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>部署< [...]
             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 3d642c6..78bcec1 100644
--- a/content/docs/zh-CN/next/deploy-kubernetes.html
+++ b/content/docs/zh-CN/next/deploy-kubernetes.html
@@ -24,7 +24,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>部署< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>部署< [...]
             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 3d642c6..78bcec1 100644
--- a/content/docs/zh-CN/next/deploy-kubernetes/index.html
+++ b/content/docs/zh-CN/next/deploy-kubernetes/index.html
@@ -24,7 +24,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>部署< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>部署< [...]
             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 e459999..c5af798 100644
--- a/content/docs/zh-CN/next/deploy-monitoring.html
+++ b/content/docs/zh-CN/next/deploy-monitoring.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>部署< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>部署< [...]
             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 e459999..c5af798 100644
--- a/content/docs/zh-CN/next/deploy-monitoring/index.html
+++ b/content/docs/zh-CN/next/deploy-monitoring/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>部署< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>部署< [...]
             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 4c53e7a..5dbbc5e 100644
--- a/content/docs/zh-CN/next/develop-binary-protocol.html
+++ b/content/docs/zh-CN/next/develop-binary-protocol.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>开发< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>开发< [...]
             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 4c53e7a..5dbbc5e 100644
--- a/content/docs/zh-CN/next/develop-binary-protocol/index.html
+++ b/content/docs/zh-CN/next/develop-binary-protocol/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>开发< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>开发< [...]
             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 fd9cd54..4bd7102 100644
--- a/content/docs/zh-CN/next/develop-cpp.html
+++ b/content/docs/zh-CN/next/develop-cpp.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>开发< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>开发< [...]
             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 fd9cd54..4bd7102 100644
--- a/content/docs/zh-CN/next/develop-cpp/index.html
+++ b/content/docs/zh-CN/next/develop-cpp/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>开发< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>开发< [...]
             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 a04de19..9c47011 100644
--- a/content/docs/zh-CN/next/develop-load-manager.html
+++ b/content/docs/zh-CN/next/develop-load-manager.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>开发< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>开发< [...]
             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 a04de19..9c47011 100644
--- a/content/docs/zh-CN/next/develop-load-manager/index.html
+++ b/content/docs/zh-CN/next/develop-load-manager/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>开发< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>开发< [...]
             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-schema.html b/content/docs/zh-CN/next/develop-schema.html
index 72ec61e..d0b23a5 100644
--- a/content/docs/zh-CN/next/develop-schema.html
+++ b/content/docs/zh-CN/next/develop-schema.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>开发< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>开发< [...]
             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-schema/index.html b/content/docs/zh-CN/next/develop-schema/index.html
index 72ec61e..d0b23a5 100644
--- a/content/docs/zh-CN/next/develop-schema/index.html
+++ b/content/docs/zh-CN/next/develop-schema/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>开发< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>开发< [...]
             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 32560d8..2ba6d74 100644
--- a/content/docs/zh-CN/next/develop-tools.html
+++ b/content/docs/zh-CN/next/develop-tools.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>开发< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>开发< [...]
             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 32560d8..2ba6d74 100644
--- a/content/docs/zh-CN/next/develop-tools/index.html
+++ b/content/docs/zh-CN/next/develop-tools/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>开发< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>开发< [...]
             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 9a1a4b4..12789ea 100644
--- a/content/docs/zh-CN/next/functions-api.html
+++ b/content/docs/zh-CN/next/functions-api.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -471,7 +471,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
 <p>For all key/value pairs passed to Java Pulsar Functions, both the key <em>and</em> the value are <code>String</code>s. If you'd like the value to be of a different type, you will need to deserialize from the <code>String</code> type.</p>
 </blockquote>
 <h3><a class="anchor" aria-hidden="true" id="java-metrics"></a><a href="#java-metrics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 这里有一个示例:</p>
+<p>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 下面是一个示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.functions.api.Context;
 <span class="hljs-keyword">import</span> org.apache.pulsar.functions.api.Function;
 
@@ -559,7 +559,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
 </tbody>
 </table>
 <h3><a class="anchor" aria-hidden="true" id="python-serde"></a><a href="#python-serde" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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 Functions use <a href="#serialization-and-deserialization-serde">SerDe</a> when publishing data to and consuming data from Pulsar topics (this is true of both <a href="#python-native-functions">native</a> functions and <a href="#python-sdk-functions">SDK</a> functions). You can specify the SerDe when <a href="/docs/zh-CN/next/functions-deploying#cluster-mode">creating</a> or <a href="/docs/zh-CN/next/functions-deploying#local-run-mode">running</a> functions. 这里有一个示例:</p>
+<p>Pulsar Functions use <a href="#serialization-and-deserialization-serde">SerDe</a> when publishing data to and consuming data from Pulsar topics (this is true of both <a href="#python-native-functions">native</a> functions and <a href="#python-sdk-functions">SDK</a> functions). You can specify the SerDe when <a href="/docs/zh-CN/next/functions-deploying#cluster-mode">creating</a> or <a href="/docs/zh-CN/next/functions-deploying#local-run-mode">running</a> functions. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --tenant public \
   --namespace default \
@@ -653,7 +653,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="python-metrics"></a><a href="#python-metrics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 这里有一个示例:</p>
+<p>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 下面是一个示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> pulsar <span class="hljs-keyword">import</span> Function
 
 <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MetricRecorderFunction</span><span class="hljs-params">(Function)</span>:</span>
diff --git a/content/docs/zh-CN/next/functions-api/index.html b/content/docs/zh-CN/next/functions-api/index.html
index 9a1a4b4..12789ea 100644
--- a/content/docs/zh-CN/next/functions-api/index.html
+++ b/content/docs/zh-CN/next/functions-api/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -471,7 +471,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
 <p>For all key/value pairs passed to Java Pulsar Functions, both the key <em>and</em> the value are <code>String</code>s. If you'd like the value to be of a different type, you will need to deserialize from the <code>String</code> type.</p>
 </blockquote>
 <h3><a class="anchor" aria-hidden="true" id="java-metrics"></a><a href="#java-metrics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 这里有一个示例:</p>
+<p>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 下面是一个示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.functions.api.Context;
 <span class="hljs-keyword">import</span> org.apache.pulsar.functions.api.Function;
 
@@ -559,7 +559,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
 </tbody>
 </table>
 <h3><a class="anchor" aria-hidden="true" id="python-serde"></a><a href="#python-serde" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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 Functions use <a href="#serialization-and-deserialization-serde">SerDe</a> when publishing data to and consuming data from Pulsar topics (this is true of both <a href="#python-native-functions">native</a> functions and <a href="#python-sdk-functions">SDK</a> functions). You can specify the SerDe when <a href="/docs/zh-CN/next/functions-deploying#cluster-mode">creating</a> or <a href="/docs/zh-CN/next/functions-deploying#local-run-mode">running</a> functions. 这里有一个示例:</p>
+<p>Pulsar Functions use <a href="#serialization-and-deserialization-serde">SerDe</a> when publishing data to and consuming data from Pulsar topics (this is true of both <a href="#python-native-functions">native</a> functions and <a href="#python-sdk-functions">SDK</a> functions). You can specify the SerDe when <a href="/docs/zh-CN/next/functions-deploying#cluster-mode">creating</a> or <a href="/docs/zh-CN/next/functions-deploying#local-run-mode">running</a> functions. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --tenant public \
   --namespace default \
@@ -653,7 +653,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="python-metrics"></a><a href="#python-metrics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 这里有一个示例:</p>
+<p>You can record metrics using the <a href="#context"><code>Context</code></a> object on a per-key basis. You can, for example, set a metric for the key <code>process-count</code> and a different metric for the key <code>elevens-count</code> every time the function processes a message. 下面是一个示例:</p>
 <pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> pulsar <span class="hljs-keyword">import</span> Function
 
 <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MetricRecorderFunction</span><span class="hljs-params">(Function)</span>:</span>
diff --git a/content/docs/zh-CN/next/functions-deploying.html b/content/docs/zh-CN/next/functions-deploying.html
index c9fc68a..dcb77af 100644
--- a/content/docs/zh-CN/next/functions-deploying.html
+++ b/content/docs/zh-CN/next/functions-deploying.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -131,13 +131,13 @@
   --inputs persistent://public/default/input-1 \
   --output persistent://public/default/output-1
 </code></pre>
-<p>By default, the function will connect to a Pulsar cluster running on the same machine, via a local <a href="/docs/zh-CN/next/reference-terminology#broker">broker</a> service URL of <code>pulsar://localhost:6650</code>. 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 这里有一个示例:</p>
+<p>By default, the function will connect to a Pulsar cluster running on the same machine, via a local <a href="/docs/zh-CN/next/reference-terminology#broker">broker</a> service URL of <code>pulsar://localhost:6650</code>. 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> localrun \
   --broker-service-url pulsar://my-cluster-host:6650 \
   <span class="hljs-comment"># Other function parameters</span>
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="cluster-mode"></a><a href="#cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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 Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/next/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 这里有一个示例:</p>
+<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/next/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --py myfunc.py \
   --classname myfunc.SomeFunction \
@@ -154,7 +154,7 @@
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="parallelism"></a><a href="#parallelism" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-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>Pulsar Functions run as processes called <strong>instances</strong>. When you run a Pulsar Function, it runs as a single instance by default (and in <a href="#local-run-mode">local run mode</a> you can <em>only</em> run a single instance of a function).</p>
-<p>You can also specify the <em>parallelism</em> of a function, i.e. the number of instances to run, when you create the function. You can set the parallelism factor using the <code>--parallelism</code> flag of the <a href="/docs/zh-CN/next/pulsar-admin#functions-create"><code>create</code></a> command. 这里有一个示例:</p>
+<p>You can also specify the <em>parallelism</em> of a function, i.e. the number of instances to run, when you create the function. You can set the parallelism factor using the <code>--parallelism</code> flag of the <a href="/docs/zh-CN/next/pulsar-admin#functions-create"><code>create</code></a> command. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --parallelism 3 \
   <span class="hljs-comment"># Other function info</span>
diff --git a/content/docs/zh-CN/next/functions-deploying/index.html b/content/docs/zh-CN/next/functions-deploying/index.html
index c9fc68a..dcb77af 100644
--- a/content/docs/zh-CN/next/functions-deploying/index.html
+++ b/content/docs/zh-CN/next/functions-deploying/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -131,13 +131,13 @@
   --inputs persistent://public/default/input-1 \
   --output persistent://public/default/output-1
 </code></pre>
-<p>By default, the function will connect to a Pulsar cluster running on the same machine, via a local <a href="/docs/zh-CN/next/reference-terminology#broker">broker</a> service URL of <code>pulsar://localhost:6650</code>. 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 这里有一个示例:</p>
+<p>By default, the function will connect to a Pulsar cluster running on the same machine, via a local <a href="/docs/zh-CN/next/reference-terminology#broker">broker</a> service URL of <code>pulsar://localhost:6650</code>. 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> localrun \
   --broker-service-url pulsar://my-cluster-host:6650 \
   <span class="hljs-comment"># Other function parameters</span>
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="cluster-mode"></a><a href="#cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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 Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/next/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 这里有一个示例:</p>
+<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/next/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --py myfunc.py \
   --classname myfunc.SomeFunction \
@@ -154,7 +154,7 @@
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="parallelism"></a><a href="#parallelism" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-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>Pulsar Functions run as processes called <strong>instances</strong>. When you run a Pulsar Function, it runs as a single instance by default (and in <a href="#local-run-mode">local run mode</a> you can <em>only</em> run a single instance of a function).</p>
-<p>You can also specify the <em>parallelism</em> of a function, i.e. the number of instances to run, when you create the function. You can set the parallelism factor using the <code>--parallelism</code> flag of the <a href="/docs/zh-CN/next/pulsar-admin#functions-create"><code>create</code></a> command. 这里有一个示例:</p>
+<p>You can also specify the <em>parallelism</em> of a function, i.e. the number of instances to run, when you create the function. You can set the parallelism factor using the <code>--parallelism</code> flag of the <a href="/docs/zh-CN/next/pulsar-admin#functions-create"><code>create</code></a> command. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --parallelism 3 \
   <span class="hljs-comment"># Other function info</span>
diff --git a/content/docs/zh-CN/next/functions-guarantees.html b/content/docs/zh-CN/next/functions-guarantees.html
index 7934953..3006cf5 100644
--- a/content/docs/zh-CN/next/functions-guarantees.html
+++ b/content/docs/zh-CN/next/functions-guarantees.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
             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 7934953..3006cf5 100644
--- a/content/docs/zh-CN/next/functions-guarantees/index.html
+++ b/content/docs/zh-CN/next/functions-guarantees/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
             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 7e12317..3d41bd3 100644
--- a/content/docs/zh-CN/next/functions-metrics.html
+++ b/content/docs/zh-CN/next/functions-metrics.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
             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 7e12317..3d41bd3 100644
--- a/content/docs/zh-CN/next/functions-metrics/index.html
+++ b/content/docs/zh-CN/next/functions-metrics/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
             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 4b017db..e26343e 100644
--- a/content/docs/zh-CN/next/functions-overview.html
+++ b/content/docs/zh-CN/next/functions-overview.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -297,13 +297,13 @@
   --inputs persistent://public/default/input-1 \
   --output persistent://public/default/output-1
 </code></pre>
-<p>默认情况下,函数连接到同一机器上运行的 Pulsar 集群通过本地的broker服务,URL是 <code>pulsar://localhost:6650</code>。 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 这里有一个示例:</p>
+<p>默认情况下,函数连接到同一机器上运行的 Pulsar 集群通过本地的broker服务,URL是 <code>pulsar://localhost:6650</code>。 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> localrun \
   --broker-service-url pulsar://my-cluster-host:6650 \
   <span class="hljs-comment"># Other function parameters</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="cluster-run-mode"></a><a href="#cluster-run-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
-<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/next/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 这里有一个示例:</p>
+<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/next/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --py myfunc.py \
   --classname myfunc.SomeFunction \
diff --git a/content/docs/zh-CN/next/functions-overview/index.html b/content/docs/zh-CN/next/functions-overview/index.html
index 4b017db..e26343e 100644
--- a/content/docs/zh-CN/next/functions-overview/index.html
+++ b/content/docs/zh-CN/next/functions-overview/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -297,13 +297,13 @@
   --inputs persistent://public/default/input-1 \
   --output persistent://public/default/output-1
 </code></pre>
-<p>默认情况下,函数连接到同一机器上运行的 Pulsar 集群通过本地的broker服务,URL是 <code>pulsar://localhost:6650</code>。 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 这里有一个示例:</p>
+<p>默认情况下,函数连接到同一机器上运行的 Pulsar 集群通过本地的broker服务,URL是 <code>pulsar://localhost:6650</code>。 如果您想使用localrun模式来运行一个函数,但连接到非本地Pulsar 集群,你可以通过 <code>--brokerServiceUrl</code> 标志来指定一个不同的broker URL。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> localrun \
   --broker-service-url pulsar://my-cluster-host:6650 \
   <span class="hljs-comment"># Other function parameters</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="cluster-run-mode"></a><a href="#cluster-run-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
-<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/next/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 这里有一个示例:</p>
+<p>当你运行 Pulsar Function在<strong>集群模式</strong>下时, 函数代码将被上传到Pulsar broker上,并与<em>代理broker</em>一起运行,而不是在您的<a href="#local-run-mode">本地环境</a>中运行。 您可以使用 <a href="/docs/zh-CN/next/pulsar-admin#create-1"><code>create</code></a> 命令在群集模式下运行函数。 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --py myfunc.py \
   --classname myfunc.SomeFunction \
diff --git a/content/docs/zh-CN/next/functions-quickstart.html b/content/docs/zh-CN/next/functions-quickstart.html
index 2b4761e..d04f273 100644
--- a/content/docs/zh-CN/next/functions-quickstart.html
+++ b/content/docs/zh-CN/next/functions-quickstart.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -250,7 +250,7 @@ $ touch <span class="hljs-built_in">reverse</span>.py
   --namespace default \
   --name reverse
 </code></pre>
-<p>If you see <code>Created successfully</code>, the function is ready to accept incoming messages. Because the function is running in cluster mode, we can <strong>trigger</strong> the function using the <a href="/docs/zh-CN/next/pulsar-admin#trigger"><code>trigger</code></a> command. This command will send a message that we specify to the function and also give us the function's output. 这里有一个示例:</p>
+<p>If you see <code>Created successfully</code>, the function is ready to accept incoming messages. Because the function is running in cluster mode, we can <strong>trigger</strong> the function using the <a href="/docs/zh-CN/next/pulsar-admin#trigger"><code>trigger</code></a> command. This command will send a message that we specify to the function and also give us the function's output. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger \
   --name reverse \
   --tenant public \
diff --git a/content/docs/zh-CN/next/functions-quickstart/index.html b/content/docs/zh-CN/next/functions-quickstart/index.html
index 2b4761e..d04f273 100644
--- a/content/docs/zh-CN/next/functions-quickstart/index.html
+++ b/content/docs/zh-CN/next/functions-quickstart/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -250,7 +250,7 @@ $ touch <span class="hljs-built_in">reverse</span>.py
   --namespace default \
   --name reverse
 </code></pre>
-<p>If you see <code>Created successfully</code>, the function is ready to accept incoming messages. Because the function is running in cluster mode, we can <strong>trigger</strong> the function using the <a href="/docs/zh-CN/next/pulsar-admin#trigger"><code>trigger</code></a> command. This command will send a message that we specify to the function and also give us the function's output. 这里有一个示例:</p>
+<p>If you see <code>Created successfully</code>, the function is ready to accept incoming messages. Because the function is running in cluster mode, we can <strong>trigger</strong> the function using the <a href="/docs/zh-CN/next/pulsar-admin#trigger"><code>trigger</code></a> command. This command will send a message that we specify to the function and also give us the function's output. 下面是一个示例:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger \
   --name reverse \
   --tenant public \
diff --git a/content/docs/zh-CN/next/functions-state.html b/content/docs/zh-CN/next/functions-state.html
index 6ea7a97..7f945c6 100644
--- a/content/docs/zh-CN/next/functions-state.html
+++ b/content/docs/zh-CN/next/functions-state.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
             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 6ea7a97..7f945c6 100644
--- a/content/docs/zh-CN/next/functions-state/index.html
+++ b/content/docs/zh-CN/next/functions-state/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
             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 b2a20e4..ffd0bab 100644
--- a/content/docs/zh-CN/next/io-cdc.html
+++ b/content/docs/zh-CN/next/io-cdc.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
             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 b2a20e4..ffd0bab 100644
--- a/content/docs/zh-CN/next/io-cdc/index.html
+++ b/content/docs/zh-CN/next/io-cdc/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
             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 84f0e86..b17368e 100644
--- a/content/docs/zh-CN/next/io-connectors.html
+++ b/content/docs/zh-CN/next/io-connectors.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
             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 84f0e86..b17368e 100644
--- a/content/docs/zh-CN/next/io-connectors/index.html
+++ b/content/docs/zh-CN/next/io-connectors/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
             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 5dd1b35..aa21bda 100644
--- a/content/docs/zh-CN/next/io-develop.html
+++ b/content/docs/zh-CN/next/io-develop.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
             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 5dd1b35..aa21bda 100644
--- a/content/docs/zh-CN/next/io-develop/index.html
+++ b/content/docs/zh-CN/next/io-develop/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
             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 423eadd..2b551ea 100644
--- a/content/docs/zh-CN/next/io-managing.html
+++ b/content/docs/zh-CN/next/io-managing.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
             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 423eadd..2b551ea 100644
--- a/content/docs/zh-CN/next/io-managing/index.html
+++ b/content/docs/zh-CN/next/io-managing/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
             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 dddfb02..ee7ed0b 100644
--- a/content/docs/zh-CN/next/io-overview.html
+++ b/content/docs/zh-CN/next/io-overview.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
             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 dddfb02..ee7ed0b 100644
--- a/content/docs/zh-CN/next/io-overview/index.html
+++ b/content/docs/zh-CN/next/io-overview/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
             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 22ff415..f1ce771 100644
--- a/content/docs/zh-CN/next/io-quickstart.html
+++ b/content/docs/zh-CN/next/io-quickstart.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
             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 22ff415..f1ce771 100644
--- a/content/docs/zh-CN/next/io-quickstart/index.html
+++ b/content/docs/zh-CN/next/io-quickstart/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
             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 16ab295..4afd312 100644
--- a/content/docs/zh-CN/next/pulsar-2.0.html
+++ b/content/docs/zh-CN/next/pulsar-2.0.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Get [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Get [...]
             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 16ab295..4afd312 100644
--- a/content/docs/zh-CN/next/pulsar-2.0/index.html
+++ b/content/docs/zh-CN/next/pulsar-2.0/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Get [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Get [...]
             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 a72d16f..b648d4f 100644
--- a/content/docs/zh-CN/next/pulsar-admin.html
+++ b/content/docs/zh-CN/next/pulsar-admin.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考< [...]
             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 a72d16f..b648d4f 100644
--- a/content/docs/zh-CN/next/pulsar-admin/index.html
+++ b/content/docs/zh-CN/next/pulsar-admin/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考< [...]
             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 9c8d5f8..bcefa36 100644
--- a/content/docs/zh-CN/next/reference-cli-tools.html
+++ b/content/docs/zh-CN/next/reference-cli-tools.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考< [...]
             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 9c8d5f8..bcefa36 100644
--- a/content/docs/zh-CN/next/reference-cli-tools/index.html
+++ b/content/docs/zh-CN/next/reference-cli-tools/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考< [...]
             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 a138c41..8f1aab1 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="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考< [...]
             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 a138c41..8f1aab1 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="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考< [...]
             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 3b88b59..a2c26a7 100644
--- a/content/docs/zh-CN/next/reference-terminology.html
+++ b/content/docs/zh-CN/next/reference-terminology.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考< [...]
             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 3b88b59..a2c26a7 100644
--- a/content/docs/zh-CN/next/reference-terminology/index.html
+++ b/content/docs/zh-CN/next/reference-terminology/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>参考< [...]
             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 1f12ab3..dfef5a6 100644
--- a/content/docs/zh-CN/next/security-athenz.html
+++ b/content/docs/zh-CN/next/security-athenz.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>安全< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>安全< [...]
             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 1f12ab3..dfef5a6 100644
--- a/content/docs/zh-CN/next/security-athenz/index.html
+++ b/content/docs/zh-CN/next/security-athenz/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>安全< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>安全< [...]
             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 eb1d798..4e0c08b 100644
--- a/content/docs/zh-CN/next/security-authorization.html
+++ b/content/docs/zh-CN/next/security-authorization.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>安全< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>安全< [...]
             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 eb1d798..4e0c08b 100644
--- a/content/docs/zh-CN/next/security-authorization/index.html
+++ b/content/docs/zh-CN/next/security-authorization/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>安全< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>安全< [...]
             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 d5bbd57..919103a 100644
--- a/content/docs/zh-CN/next/security-encryption.html
+++ b/content/docs/zh-CN/next/security-encryption.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>安全< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>安全< [...]
             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 d5bbd57..919103a 100644
--- a/content/docs/zh-CN/next/security-encryption/index.html
+++ b/content/docs/zh-CN/next/security-encryption/index.html
@@ -20,7 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>安全< [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>安全< [...]
             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 f515ed2..87d8d13 100644
--- a/content/docs/zh-CN/next/security-extending.html
... 474 lines suppressed ...