You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by pe...@apache.org on 2022/02/12 13:52:17 UTC

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

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

penghui 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 453cc4f  Updated site at revision dc602c0
453cc4f is described below

commit 453cc4fddb9d313be9e52a7300b25e6bf4e881a9
Author: Pulsar Site Updater <de...@pulsar.incubator.apache.org>
AuthorDate: Sat Feb 12 13:50:23 2022 +0000

    Updated site at revision dc602c0
---
 .../admin/2.10.0-SNAPSHOT/member-search-index.zip  | Bin 12833 -> 12833 bytes
 .../admin/2.10.0-SNAPSHOT/overview-summary.html    |   2 +-
 .../admin/2.10.0-SNAPSHOT/package-search-index.zip | Bin 263 -> 263 bytes
 .../admin/2.10.0-SNAPSHOT/type-search-index.zip    | Bin 500 -> 500 bytes
 .../client/2.10.0-SNAPSHOT/member-search-index.zip | Bin 11099 -> 11099 bytes
 .../client/2.10.0-SNAPSHOT/overview-summary.html   |   2 +-
 .../2.10.0-SNAPSHOT/package-search-index.zip       | Bin 298 -> 298 bytes
 .../client/2.10.0-SNAPSHOT/type-search-index.zip   | Bin 1543 -> 1543 bytes
 .../2.10.0-SNAPSHOT/member-search-index.zip        | Bin 69954 -> 69954 bytes
 .../2.10.0-SNAPSHOT/overview-summary.html          |   2 +-
 .../2.10.0-SNAPSHOT/package-search-index.zip       | Bin 593 -> 593 bytes
 .../2.10.0-SNAPSHOT/type-search-index.zip          | Bin 4345 -> 4345 bytes
 .../2.10.0-SNAPSHOT/member-search-index.zip        | Bin 1255 -> 1255 bytes
 .../2.10.0-SNAPSHOT/overview-summary.html          |   2 +-
 .../2.10.0-SNAPSHOT/package-search-index.zip       | Bin 260 -> 260 bytes
 .../2.10.0-SNAPSHOT/type-search-index.zip          | Bin 349 -> 349 bytes
 content/api/python/2.10.0-SNAPSHOT/index.html      |   6 +-
 content/api/python/index.html                      |   6 +-
 content/docs/fr/next/admin-api-clusters.html       |   4 +-
 content/docs/fr/next/admin-api-clusters/index.html |   4 +-
 .../docs/fr/next/administration-load-balance.html  |   7 +-
 .../fr/next/administration-load-balance/index.html |   7 +-
 content/docs/fr/next/administration-proxy.html     |  25 +-
 .../docs/fr/next/administration-proxy/index.html   |  25 +-
 .../fr/next/administration-pulsar-manager.html     |   2 +-
 .../next/administration-pulsar-manager/index.html  |   2 +-
 content/docs/fr/next/administration-zk-bk.html     |  26 +-
 .../docs/fr/next/administration-zk-bk/index.html   |  26 +-
 content/docs/fr/next/client-libraries-cpp.html     | 191 +++---
 .../docs/fr/next/client-libraries-cpp/index.html   | 191 +++---
 content/docs/fr/next/client-libraries-dotnet.html  |   5 +-
 .../fr/next/client-libraries-dotnet/index.html     |   5 +-
 content/docs/fr/next/client-libraries-java.html    | 114 +++-
 .../docs/fr/next/client-libraries-java/index.html  | 114 +++-
 .../docs/fr/next/client-libraries-websocket.html   |   4 +-
 .../fr/next/client-libraries-websocket/index.html  |   4 +-
 content/docs/fr/next/client-libraries.html         |   2 +-
 content/docs/fr/next/client-libraries/index.html   |   2 +-
 .../fr/next/concepts-architecture-overview.html    |  10 +-
 .../next/concepts-architecture-overview/index.html |  10 +-
 content/docs/fr/next/concepts-messaging.html       |  56 +-
 content/docs/fr/next/concepts-messaging/index.html |  56 +-
 .../fr/next/deploy-bare-metal-multi-cluster.html   |  10 +-
 .../deploy-bare-metal-multi-cluster/index.html     |  10 +-
 content/docs/fr/next/deploy-bare-metal.html        |  10 +-
 content/docs/fr/next/deploy-bare-metal/index.html  |  10 +-
 content/docs/fr/next/develop-binary-protocol.html  |   2 +-
 .../fr/next/develop-binary-protocol/index.html     |   2 +-
 content/docs/fr/next/functions-runtime.html        |   2 +-
 content/docs/fr/next/functions-runtime/index.html  |   2 +-
 content/docs/fr/next/functions-worker.html         |   4 +-
 content/docs/fr/next/functions-worker/index.html   |   4 +-
 content/docs/fr/next/io-file-source.html           |   5 +-
 content/docs/fr/next/io-file-source/index.html     |   5 +-
 content/docs/fr/next/reference-cli-tools.html      |  10 +-
 .../docs/fr/next/reference-cli-tools/index.html    |  10 +-
 content/docs/fr/next/reference-configuration.html  | 141 ++--
 .../fr/next/reference-configuration/index.html     | 141 ++--
 content/docs/fr/next/reference-metrics.html        |   4 +-
 content/docs/fr/next/reference-metrics/index.html  |   4 +-
 .../fr/next/schema-evolution-compatibility.html    |   2 +-
 .../next/schema-evolution-compatibility/index.html |   2 +-
 content/docs/fr/next/security-overview.html        |   2 +-
 content/docs/fr/next/security-overview/index.html  |   2 +-
 content/docs/fr/next/security-tls-keystore.html    |  69 +-
 .../docs/fr/next/security-tls-keystore/index.html  |  69 +-
 content/docs/fr/next/security-tls-transport.html   |   2 +-
 .../docs/fr/next/security-tls-transport/index.html |   2 +-
 content/docs/fr/next/standalone.html               |   9 +-
 content/docs/fr/next/standalone/index.html         |   9 +-
 content/docs/fr/next/tiered-storage-azure.html     |  28 +-
 .../docs/fr/next/tiered-storage-azure/index.html   |  28 +-
 content/docs/ja/next/admin-api-clusters.html       |   4 +-
 content/docs/ja/next/admin-api-clusters/index.html |   4 +-
 .../docs/ja/next/administration-load-balance.html  |   7 +-
 .../ja/next/administration-load-balance/index.html |   7 +-
 content/docs/ja/next/administration-proxy.html     |  25 +-
 .../docs/ja/next/administration-proxy/index.html   |  25 +-
 .../ja/next/administration-pulsar-manager.html     |   2 +-
 .../next/administration-pulsar-manager/index.html  |   2 +-
 content/docs/ja/next/administration-zk-bk.html     |  26 +-
 .../docs/ja/next/administration-zk-bk/index.html   |  26 +-
 content/docs/ja/next/client-libraries-cpp.html     | 191 +++---
 .../docs/ja/next/client-libraries-cpp/index.html   | 191 +++---
 content/docs/ja/next/client-libraries-dotnet.html  |   5 +-
 .../ja/next/client-libraries-dotnet/index.html     |   5 +-
 content/docs/ja/next/client-libraries-java.html    | 114 +++-
 .../docs/ja/next/client-libraries-java/index.html  | 114 +++-
 .../docs/ja/next/client-libraries-websocket.html   |   4 +-
 .../ja/next/client-libraries-websocket/index.html  |   4 +-
 content/docs/ja/next/client-libraries.html         |   2 +-
 content/docs/ja/next/client-libraries/index.html   |   2 +-
 .../ja/next/concepts-architecture-overview.html    |  10 +-
 .../next/concepts-architecture-overview/index.html |  10 +-
 content/docs/ja/next/concepts-messaging.html       |  56 +-
 content/docs/ja/next/concepts-messaging/index.html |  56 +-
 .../ja/next/deploy-bare-metal-multi-cluster.html   |  10 +-
 .../deploy-bare-metal-multi-cluster/index.html     |  10 +-
 content/docs/ja/next/deploy-bare-metal.html        |  10 +-
 content/docs/ja/next/deploy-bare-metal/index.html  |  10 +-
 content/docs/ja/next/develop-binary-protocol.html  |   2 +-
 .../ja/next/develop-binary-protocol/index.html     |   2 +-
 content/docs/ja/next/functions-runtime.html        |   2 +-
 content/docs/ja/next/functions-runtime/index.html  |   2 +-
 content/docs/ja/next/functions-worker.html         |   4 +-
 content/docs/ja/next/functions-worker/index.html   |   4 +-
 content/docs/ja/next/io-file-source.html           |   5 +-
 content/docs/ja/next/io-file-source/index.html     |   5 +-
 content/docs/ja/next/reference-cli-tools.html      |  10 +-
 .../docs/ja/next/reference-cli-tools/index.html    |  10 +-
 content/docs/ja/next/reference-configuration.html  | 141 ++--
 .../ja/next/reference-configuration/index.html     | 141 ++--
 content/docs/ja/next/reference-metrics.html        |   4 +-
 content/docs/ja/next/reference-metrics/index.html  |   4 +-
 .../ja/next/schema-evolution-compatibility.html    |   2 +-
 .../next/schema-evolution-compatibility/index.html |   2 +-
 content/docs/ja/next/security-overview.html        |   2 +-
 content/docs/ja/next/security-overview/index.html  |   2 +-
 content/docs/ja/next/security-tls-keystore.html    |  69 +-
 .../docs/ja/next/security-tls-keystore/index.html  |  69 +-
 content/docs/ja/next/security-tls-transport.html   |   2 +-
 .../docs/ja/next/security-tls-transport/index.html |   2 +-
 content/docs/ja/next/standalone.html               |   9 +-
 content/docs/ja/next/standalone/index.html         |   9 +-
 content/docs/ja/next/tiered-storage-azure.html     |  28 +-
 .../docs/ja/next/tiered-storage-azure/index.html   |  28 +-
 content/docs/ko/next/admin-api-clusters.html       |   4 +-
 content/docs/ko/next/admin-api-clusters/index.html |   4 +-
 .../docs/ko/next/administration-load-balance.html  |   7 +-
 .../ko/next/administration-load-balance/index.html |   7 +-
 content/docs/ko/next/administration-proxy.html     |  25 +-
 .../docs/ko/next/administration-proxy/index.html   |  25 +-
 .../ko/next/administration-pulsar-manager.html     |   2 +-
 .../next/administration-pulsar-manager/index.html  |   2 +-
 content/docs/ko/next/administration-zk-bk.html     |  26 +-
 .../docs/ko/next/administration-zk-bk/index.html   |  26 +-
 content/docs/ko/next/client-libraries-cpp.html     | 191 +++---
 .../docs/ko/next/client-libraries-cpp/index.html   | 191 +++---
 content/docs/ko/next/client-libraries-dotnet.html  |   5 +-
 .../ko/next/client-libraries-dotnet/index.html     |   5 +-
 content/docs/ko/next/client-libraries-java.html    | 114 +++-
 .../docs/ko/next/client-libraries-java/index.html  | 114 +++-
 .../docs/ko/next/client-libraries-websocket.html   |   4 +-
 .../ko/next/client-libraries-websocket/index.html  |   4 +-
 content/docs/ko/next/client-libraries.html         |   2 +-
 content/docs/ko/next/client-libraries/index.html   |   2 +-
 .../ko/next/concepts-architecture-overview.html    |  10 +-
 .../next/concepts-architecture-overview/index.html |  10 +-
 content/docs/ko/next/concepts-messaging.html       |  56 +-
 content/docs/ko/next/concepts-messaging/index.html |  56 +-
 .../ko/next/deploy-bare-metal-multi-cluster.html   |  10 +-
 .../deploy-bare-metal-multi-cluster/index.html     |  10 +-
 content/docs/ko/next/deploy-bare-metal.html        |  10 +-
 content/docs/ko/next/deploy-bare-metal/index.html  |  10 +-
 content/docs/ko/next/develop-binary-protocol.html  |   2 +-
 .../ko/next/develop-binary-protocol/index.html     |   2 +-
 content/docs/ko/next/functions-runtime.html        |   2 +-
 content/docs/ko/next/functions-runtime/index.html  |   2 +-
 content/docs/ko/next/functions-worker.html         |   4 +-
 content/docs/ko/next/functions-worker/index.html   |   4 +-
 content/docs/ko/next/io-file-source.html           |   5 +-
 content/docs/ko/next/io-file-source/index.html     |   5 +-
 content/docs/ko/next/reference-cli-tools.html      |  10 +-
 .../docs/ko/next/reference-cli-tools/index.html    |  10 +-
 content/docs/ko/next/reference-configuration.html  | 141 ++--
 .../ko/next/reference-configuration/index.html     | 141 ++--
 content/docs/ko/next/reference-metrics.html        |   4 +-
 content/docs/ko/next/reference-metrics/index.html  |   4 +-
 .../ko/next/schema-evolution-compatibility.html    |   2 +-
 .../next/schema-evolution-compatibility/index.html |   2 +-
 content/docs/ko/next/security-overview.html        |   2 +-
 content/docs/ko/next/security-overview/index.html  |   2 +-
 content/docs/ko/next/security-tls-keystore.html    |  69 +-
 .../docs/ko/next/security-tls-keystore/index.html  |  69 +-
 content/docs/ko/next/security-tls-transport.html   |   2 +-
 .../docs/ko/next/security-tls-transport/index.html |   2 +-
 content/docs/ko/next/standalone.html               |   9 +-
 content/docs/ko/next/standalone/index.html         |   9 +-
 content/docs/ko/next/tiered-storage-azure.html     |  28 +-
 .../docs/ko/next/tiered-storage-azure/index.html   |  28 +-
 content/docs/zh-CN/next/admin-api-clusters.html    |   4 +-
 .../docs/zh-CN/next/admin-api-clusters/index.html  |   4 +-
 .../zh-CN/next/administration-load-balance.html    |   7 +-
 .../next/administration-load-balance/index.html    |   7 +-
 content/docs/zh-CN/next/administration-proxy.html  |  25 +-
 .../zh-CN/next/administration-proxy/index.html     |  25 +-
 .../zh-CN/next/administration-pulsar-manager.html  |   2 +-
 .../next/administration-pulsar-manager/index.html  |   2 +-
 content/docs/zh-CN/next/administration-zk-bk.html  |  26 +-
 .../zh-CN/next/administration-zk-bk/index.html     |  26 +-
 content/docs/zh-CN/next/client-libraries-cpp.html  | 191 +++---
 .../zh-CN/next/client-libraries-cpp/index.html     | 191 +++---
 .../docs/zh-CN/next/client-libraries-dotnet.html   |   5 +-
 .../zh-CN/next/client-libraries-dotnet/index.html  |   5 +-
 content/docs/zh-CN/next/client-libraries-java.html | 114 +++-
 .../zh-CN/next/client-libraries-java/index.html    | 114 +++-
 .../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 |  10 +-
 .../next/concepts-architecture-overview/index.html |  10 +-
 content/docs/zh-CN/next/concepts-messaging.html    |  56 +-
 .../docs/zh-CN/next/concepts-messaging/index.html  |  56 +-
 .../next/deploy-bare-metal-multi-cluster.html      |  10 +-
 .../deploy-bare-metal-multi-cluster/index.html     |  10 +-
 content/docs/zh-CN/next/deploy-bare-metal.html     |  10 +-
 .../docs/zh-CN/next/deploy-bare-metal/index.html   |  10 +-
 .../docs/zh-CN/next/develop-binary-protocol.html   |   2 +-
 .../zh-CN/next/develop-binary-protocol/index.html  |   2 +-
 content/docs/zh-CN/next/functions-runtime.html     |   2 +-
 .../docs/zh-CN/next/functions-runtime/index.html   |   2 +-
 content/docs/zh-CN/next/functions-worker.html      |   4 +-
 .../docs/zh-CN/next/functions-worker/index.html    |   4 +-
 content/docs/zh-CN/next/io-file-source.html        |   5 +-
 content/docs/zh-CN/next/io-file-source/index.html  |   5 +-
 content/docs/zh-CN/next/reference-cli-tools.html   |  10 +-
 .../docs/zh-CN/next/reference-cli-tools/index.html |  10 +-
 .../docs/zh-CN/next/reference-configuration.html   | 141 ++--
 .../zh-CN/next/reference-configuration/index.html  | 141 ++--
 content/docs/zh-CN/next/reference-metrics.html     |   4 +-
 .../docs/zh-CN/next/reference-metrics/index.html   |   4 +-
 .../zh-CN/next/schema-evolution-compatibility.html |   2 +-
 .../next/schema-evolution-compatibility/index.html |   2 +-
 content/docs/zh-CN/next/security-overview.html     |   2 +-
 .../docs/zh-CN/next/security-overview/index.html   |   2 +-
 content/docs/zh-CN/next/security-tls-keystore.html |  69 +-
 .../zh-CN/next/security-tls-keystore/index.html    |  69 +-
 .../docs/zh-CN/next/security-tls-transport.html    |   2 +-
 .../zh-CN/next/security-tls-transport/index.html   |   2 +-
 content/docs/zh-CN/next/standalone.html            |   9 +-
 content/docs/zh-CN/next/standalone/index.html      |   9 +-
 content/docs/zh-CN/next/tiered-storage-azure.html  |  28 +-
 .../zh-CN/next/tiered-storage-azure/index.html     |  28 +-
 content/docs/zh-TW/next/admin-api-clusters.html    |   4 +-
 .../docs/zh-TW/next/admin-api-clusters/index.html  |   4 +-
 .../zh-TW/next/administration-load-balance.html    |   7 +-
 .../next/administration-load-balance/index.html    |   7 +-
 content/docs/zh-TW/next/administration-proxy.html  |  25 +-
 .../zh-TW/next/administration-proxy/index.html     |  25 +-
 .../zh-TW/next/administration-pulsar-manager.html  |   2 +-
 .../next/administration-pulsar-manager/index.html  |   2 +-
 content/docs/zh-TW/next/administration-zk-bk.html  |  26 +-
 .../zh-TW/next/administration-zk-bk/index.html     |  26 +-
 content/docs/zh-TW/next/client-libraries-cpp.html  | 191 +++---
 .../zh-TW/next/client-libraries-cpp/index.html     | 191 +++---
 .../docs/zh-TW/next/client-libraries-dotnet.html   |   5 +-
 .../zh-TW/next/client-libraries-dotnet/index.html  |   5 +-
 content/docs/zh-TW/next/client-libraries-java.html | 114 +++-
 .../zh-TW/next/client-libraries-java/index.html    | 114 +++-
 .../zh-TW/next/client-libraries-websocket.html     |   4 +-
 .../next/client-libraries-websocket/index.html     |   4 +-
 content/docs/zh-TW/next/client-libraries.html      |   2 +-
 .../docs/zh-TW/next/client-libraries/index.html    |   2 +-
 .../zh-TW/next/concepts-architecture-overview.html |  10 +-
 .../next/concepts-architecture-overview/index.html |  10 +-
 content/docs/zh-TW/next/concepts-messaging.html    |  60 +-
 .../docs/zh-TW/next/concepts-messaging/index.html  |  60 +-
 .../next/deploy-bare-metal-multi-cluster.html      |  10 +-
 .../deploy-bare-metal-multi-cluster/index.html     |  10 +-
 content/docs/zh-TW/next/deploy-bare-metal.html     |  10 +-
 .../docs/zh-TW/next/deploy-bare-metal/index.html   |  10 +-
 .../docs/zh-TW/next/develop-binary-protocol.html   |   2 +-
 .../zh-TW/next/develop-binary-protocol/index.html  |   2 +-
 content/docs/zh-TW/next/functions-runtime.html     |   2 +-
 .../docs/zh-TW/next/functions-runtime/index.html   |   2 +-
 content/docs/zh-TW/next/functions-worker.html      |   4 +-
 .../docs/zh-TW/next/functions-worker/index.html    |   4 +-
 content/docs/zh-TW/next/io-file-source.html        |   5 +-
 content/docs/zh-TW/next/io-file-source/index.html  |   5 +-
 content/docs/zh-TW/next/reference-cli-tools.html   |  10 +-
 .../docs/zh-TW/next/reference-cli-tools/index.html |  10 +-
 .../docs/zh-TW/next/reference-configuration.html   | 141 ++--
 .../zh-TW/next/reference-configuration/index.html  | 141 ++--
 content/docs/zh-TW/next/reference-metrics.html     |   4 +-
 .../docs/zh-TW/next/reference-metrics/index.html   |   4 +-
 .../zh-TW/next/schema-evolution-compatibility.html |   2 +-
 .../next/schema-evolution-compatibility/index.html |   2 +-
 content/docs/zh-TW/next/security-overview.html     |   2 +-
 .../docs/zh-TW/next/security-overview/index.html   |   2 +-
 content/docs/zh-TW/next/security-tls-keystore.html |  69 +-
 .../zh-TW/next/security-tls-keystore/index.html    |  69 +-
 .../docs/zh-TW/next/security-tls-transport.html    |   2 +-
 .../zh-TW/next/security-tls-transport/index.html   |   2 +-
 content/docs/zh-TW/next/standalone.html            |   9 +-
 content/docs/zh-TW/next/standalone/index.html      |   9 +-
 content/docs/zh-TW/next/tiered-storage-azure.html  |  28 +-
 .../zh-TW/next/tiered-storage-azure/index.html     |  28 +-
 content/swagger/2.10.0-SNAPSHOT/swagger.json       | 711 ++++++++++---------
 .../swagger/2.10.0-SNAPSHOT/swaggerfunctions.json  | 416 ++++++------
 .../swagger/2.10.0-SNAPSHOT/swaggerpackages.json   | 360 +++++-----
 content/swagger/2.10.0-SNAPSHOT/swaggersink.json   | 360 +++++-----
 content/swagger/2.10.0-SNAPSHOT/swaggersource.json | 360 +++++-----
 content/swagger/2.10.0-SNAPSHOT/v2/swagger.json    | 755 +++++++++++----------
 .../2.10.0-SNAPSHOT/v3/swaggerfunctions.json       | 444 ++++++------
 .../2.10.0-SNAPSHOT/v3/swaggerpackages.json        | 388 +++++------
 .../swagger/2.10.0-SNAPSHOT/v3/swaggersink.json    | 388 +++++------
 .../swagger/2.10.0-SNAPSHOT/v3/swaggersource.json  | 388 +++++------
 content/swagger/master/swagger.json                | 711 ++++++++++---------
 content/swagger/master/swaggerfunctions.json       | 416 ++++++------
 content/swagger/master/swaggerpackages.json        | 360 +++++-----
 content/swagger/master/swaggersink.json            | 360 +++++-----
 content/swagger/master/swaggersource.json          | 360 +++++-----
 content/swagger/master/v2/swagger.json             | 755 +++++++++++----------
 content/swagger/master/v3/swaggerfunctions.json    | 444 ++++++------
 content/swagger/master/v3/swaggerpackages.json     | 388 +++++------
 content/swagger/master/v3/swaggersink.json         | 388 +++++------
 content/swagger/master/v3/swaggersource.json       | 388 +++++------
 308 files changed, 9274 insertions(+), 7354 deletions(-)

diff --git a/content/api/admin/2.10.0-SNAPSHOT/member-search-index.zip b/content/api/admin/2.10.0-SNAPSHOT/member-search-index.zip
index c014acf..5479b5b 100644
Binary files a/content/api/admin/2.10.0-SNAPSHOT/member-search-index.zip and b/content/api/admin/2.10.0-SNAPSHOT/member-search-index.zip differ
diff --git a/content/api/admin/2.10.0-SNAPSHOT/overview-summary.html b/content/api/admin/2.10.0-SNAPSHOT/overview-summary.html
index 49c4ad7..31173c8 100644
--- a/content/api/admin/2.10.0-SNAPSHOT/overview-summary.html
+++ b/content/api/admin/2.10.0-SNAPSHOT/overview-summary.html
@@ -2,7 +2,7 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
-<!-- Generated by javadoc (11.0.11) on Fri Feb 11 18:08:21 UTC 2022 -->
+<!-- Generated by javadoc (11.0.11) on Sat Feb 12 12:08:42 UTC 2022 -->
 <title>Pulsar Client Admin Original 2.10.0-SNAPSHOT API</title>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <script type="text/javascript">window.location.replace('index.html')</script>
diff --git a/content/api/admin/2.10.0-SNAPSHOT/package-search-index.zip b/content/api/admin/2.10.0-SNAPSHOT/package-search-index.zip
index ce6ef8d..5055c7c 100644
Binary files a/content/api/admin/2.10.0-SNAPSHOT/package-search-index.zip and b/content/api/admin/2.10.0-SNAPSHOT/package-search-index.zip differ
diff --git a/content/api/admin/2.10.0-SNAPSHOT/type-search-index.zip b/content/api/admin/2.10.0-SNAPSHOT/type-search-index.zip
index 13bbac2..4644008 100644
Binary files a/content/api/admin/2.10.0-SNAPSHOT/type-search-index.zip and b/content/api/admin/2.10.0-SNAPSHOT/type-search-index.zip differ
diff --git a/content/api/client/2.10.0-SNAPSHOT/member-search-index.zip b/content/api/client/2.10.0-SNAPSHOT/member-search-index.zip
index 9f286ed..b444380 100644
Binary files a/content/api/client/2.10.0-SNAPSHOT/member-search-index.zip and b/content/api/client/2.10.0-SNAPSHOT/member-search-index.zip differ
diff --git a/content/api/client/2.10.0-SNAPSHOT/overview-summary.html b/content/api/client/2.10.0-SNAPSHOT/overview-summary.html
index c21c034..3c79cd7 100644
--- a/content/api/client/2.10.0-SNAPSHOT/overview-summary.html
+++ b/content/api/client/2.10.0-SNAPSHOT/overview-summary.html
@@ -2,7 +2,7 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
-<!-- Generated by javadoc (11.0.11) on Fri Feb 11 18:08:13 UTC 2022 -->
+<!-- Generated by javadoc (11.0.11) on Sat Feb 12 12:08:34 UTC 2022 -->
 <title>Pulsar Client :: API 2.10.0-SNAPSHOT API</title>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <script type="text/javascript">window.location.replace('index.html')</script>
diff --git a/content/api/client/2.10.0-SNAPSHOT/package-search-index.zip b/content/api/client/2.10.0-SNAPSHOT/package-search-index.zip
index 831c2f8..a78f052 100644
Binary files a/content/api/client/2.10.0-SNAPSHOT/package-search-index.zip and b/content/api/client/2.10.0-SNAPSHOT/package-search-index.zip differ
diff --git a/content/api/client/2.10.0-SNAPSHOT/type-search-index.zip b/content/api/client/2.10.0-SNAPSHOT/type-search-index.zip
index 1acdbe1..5a5e5ea 100644
Binary files a/content/api/client/2.10.0-SNAPSHOT/type-search-index.zip and b/content/api/client/2.10.0-SNAPSHOT/type-search-index.zip differ
diff --git a/content/api/pulsar-broker/2.10.0-SNAPSHOT/member-search-index.zip b/content/api/pulsar-broker/2.10.0-SNAPSHOT/member-search-index.zip
index 1d70c4a..dfd1501 100644
Binary files a/content/api/pulsar-broker/2.10.0-SNAPSHOT/member-search-index.zip and b/content/api/pulsar-broker/2.10.0-SNAPSHOT/member-search-index.zip differ
diff --git a/content/api/pulsar-broker/2.10.0-SNAPSHOT/overview-summary.html b/content/api/pulsar-broker/2.10.0-SNAPSHOT/overview-summary.html
index 5fd2994..7cb6d1e 100644
--- a/content/api/pulsar-broker/2.10.0-SNAPSHOT/overview-summary.html
+++ b/content/api/pulsar-broker/2.10.0-SNAPSHOT/overview-summary.html
@@ -2,7 +2,7 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
-<!-- Generated by javadoc (11.0.11) on Fri Feb 11 18:08:39 UTC 2022 -->
+<!-- Generated by javadoc (11.0.11) on Sat Feb 12 12:09:00 UTC 2022 -->
 <title>Pulsar Broker 2.10.0-SNAPSHOT API</title>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <script type="text/javascript">window.location.replace('index.html')</script>
diff --git a/content/api/pulsar-broker/2.10.0-SNAPSHOT/package-search-index.zip b/content/api/pulsar-broker/2.10.0-SNAPSHOT/package-search-index.zip
index 40ef027..345fad6 100644
Binary files a/content/api/pulsar-broker/2.10.0-SNAPSHOT/package-search-index.zip and b/content/api/pulsar-broker/2.10.0-SNAPSHOT/package-search-index.zip differ
diff --git a/content/api/pulsar-broker/2.10.0-SNAPSHOT/type-search-index.zip b/content/api/pulsar-broker/2.10.0-SNAPSHOT/type-search-index.zip
index b554f0b..71c3207 100644
Binary files a/content/api/pulsar-broker/2.10.0-SNAPSHOT/type-search-index.zip and b/content/api/pulsar-broker/2.10.0-SNAPSHOT/type-search-index.zip differ
diff --git a/content/api/pulsar-functions/2.10.0-SNAPSHOT/member-search-index.zip b/content/api/pulsar-functions/2.10.0-SNAPSHOT/member-search-index.zip
index 9c5453c..ce623e5 100644
Binary files a/content/api/pulsar-functions/2.10.0-SNAPSHOT/member-search-index.zip and b/content/api/pulsar-functions/2.10.0-SNAPSHOT/member-search-index.zip differ
diff --git a/content/api/pulsar-functions/2.10.0-SNAPSHOT/overview-summary.html b/content/api/pulsar-functions/2.10.0-SNAPSHOT/overview-summary.html
index c9f7873..93c9c2a 100644
--- a/content/api/pulsar-functions/2.10.0-SNAPSHOT/overview-summary.html
+++ b/content/api/pulsar-functions/2.10.0-SNAPSHOT/overview-summary.html
@@ -2,7 +2,7 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
-<!-- Generated by javadoc (11.0.11) on Fri Feb 11 18:08:27 UTC 2022 -->
+<!-- Generated by javadoc (11.0.11) on Sat Feb 12 12:08:48 UTC 2022 -->
 <title>Pulsar Functions :: API 2.10.0-SNAPSHOT API</title>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <script type="text/javascript">window.location.replace('index.html')</script>
diff --git a/content/api/pulsar-functions/2.10.0-SNAPSHOT/package-search-index.zip b/content/api/pulsar-functions/2.10.0-SNAPSHOT/package-search-index.zip
index 0dd0b3e..9247cba 100644
Binary files a/content/api/pulsar-functions/2.10.0-SNAPSHOT/package-search-index.zip and b/content/api/pulsar-functions/2.10.0-SNAPSHOT/package-search-index.zip differ
diff --git a/content/api/pulsar-functions/2.10.0-SNAPSHOT/type-search-index.zip b/content/api/pulsar-functions/2.10.0-SNAPSHOT/type-search-index.zip
index ce94b9e..d8d4709 100644
Binary files a/content/api/pulsar-functions/2.10.0-SNAPSHOT/type-search-index.zip and b/content/api/pulsar-functions/2.10.0-SNAPSHOT/type-search-index.zip differ
diff --git a/content/api/python/2.10.0-SNAPSHOT/index.html b/content/api/python/2.10.0-SNAPSHOT/index.html
index 9c5245d..240c0ee 100644
--- a/content/api/python/2.10.0-SNAPSHOT/index.html
+++ b/content/api/python/2.10.0-SNAPSHOT/index.html
@@ -3787,7 +3787,7 @@ producers and consumers.</p></div>
             
   <div class="item">
     <div class="name def" id="pulsar.Client.create_producer">
-    <p>def <span class="ident">create_producer</span>(</p><p>self, topic, producer_name=None, schema=&lt;pulsar.schema.schema.BytesSchema object at 0x7f5b83a92e50&gt;, initial_sequence_id=None, send_timeout_millis=30000, compression_type=_pulsar.CompressionType.NONE, max_pending_messages=1000, max_pending_messages_across_partitions=50000, block_if_queue_full=False, batching_enabled=False, batching_max_messages=1000, batching_max_allowed_size_in_bytes=131072, batching_max_publish_delay_ms [...]
+    <p>def <span class="ident">create_producer</span>(</p><p>self, topic, producer_name=None, schema=&lt;pulsar.schema.schema.BytesSchema object at 0x7fea74ec4e50&gt;, initial_sequence_id=None, send_timeout_millis=30000, compression_type=_pulsar.CompressionType.NONE, max_pending_messages=1000, max_pending_messages_across_partitions=50000, block_if_queue_full=False, batching_enabled=False, batching_max_messages=1000, batching_max_allowed_size_in_bytes=131072, batching_max_publish_delay_ms [...]
     </div>
     
 
@@ -4041,7 +4041,7 @@ batched into single batch message:
             
   <div class="item">
     <div class="name def" id="pulsar.Client.create_reader">
-    <p>def <span class="ident">create_reader</span>(</p><p>self, topic, start_message_id, schema=&lt;pulsar.schema.schema.BytesSchema object at 0x7f5b7c005350&gt;, reader_listener=None, receiver_queue_size=1000, reader_name=None, subscription_role_prefix=None, is_read_compacted=False, crypto_key_reader=None)</p>
+    <p>def <span class="ident">create_reader</span>(</p><p>self, topic, start_message_id, schema=&lt;pulsar.schema.schema.BytesSchema object at 0x7fea6d437350&gt;, reader_listener=None, receiver_queue_size=1000, reader_name=None, subscription_role_prefix=None, is_read_compacted=False, crypto_key_reader=None)</p>
     </div>
     
 
@@ -4258,7 +4258,7 @@ for ongoing operations to complete.</p></div>
             
   <div class="item">
     <div class="name def" id="pulsar.Client.subscribe">
-    <p>def <span class="ident">subscribe</span>(</p><p>self, topic, subscription_name, consumer_type=_pulsar.ConsumerType.Exclusive, schema=&lt;pulsar.schema.schema.BytesSchema object at 0x7f5b7c005290&gt;, message_listener=None, receiver_queue_size=1000, max_total_receiver_queue_size_across_partitions=50000, consumer_name=None, unacked_messages_timeout_ms=None, broker_consumer_stats_cache_time_ms=30000, negative_ack_redelivery_delay_ms=60000, is_read_compacted=False, properties=None, pa [...]
+    <p>def <span class="ident">subscribe</span>(</p><p>self, topic, subscription_name, consumer_type=_pulsar.ConsumerType.Exclusive, schema=&lt;pulsar.schema.schema.BytesSchema object at 0x7fea6d437290&gt;, message_listener=None, receiver_queue_size=1000, max_total_receiver_queue_size_across_partitions=50000, consumer_name=None, unacked_messages_timeout_ms=None, broker_consumer_stats_cache_time_ms=30000, negative_ack_redelivery_delay_ms=60000, is_read_compacted=False, properties=None, pa [...]
     </div>
     
 
diff --git a/content/api/python/index.html b/content/api/python/index.html
index 9c5245d..240c0ee 100644
--- a/content/api/python/index.html
+++ b/content/api/python/index.html
@@ -3787,7 +3787,7 @@ producers and consumers.</p></div>
             
   <div class="item">
     <div class="name def" id="pulsar.Client.create_producer">
-    <p>def <span class="ident">create_producer</span>(</p><p>self, topic, producer_name=None, schema=&lt;pulsar.schema.schema.BytesSchema object at 0x7f5b83a92e50&gt;, initial_sequence_id=None, send_timeout_millis=30000, compression_type=_pulsar.CompressionType.NONE, max_pending_messages=1000, max_pending_messages_across_partitions=50000, block_if_queue_full=False, batching_enabled=False, batching_max_messages=1000, batching_max_allowed_size_in_bytes=131072, batching_max_publish_delay_ms [...]
+    <p>def <span class="ident">create_producer</span>(</p><p>self, topic, producer_name=None, schema=&lt;pulsar.schema.schema.BytesSchema object at 0x7fea74ec4e50&gt;, initial_sequence_id=None, send_timeout_millis=30000, compression_type=_pulsar.CompressionType.NONE, max_pending_messages=1000, max_pending_messages_across_partitions=50000, block_if_queue_full=False, batching_enabled=False, batching_max_messages=1000, batching_max_allowed_size_in_bytes=131072, batching_max_publish_delay_ms [...]
     </div>
     
 
@@ -4041,7 +4041,7 @@ batched into single batch message:
             
   <div class="item">
     <div class="name def" id="pulsar.Client.create_reader">
-    <p>def <span class="ident">create_reader</span>(</p><p>self, topic, start_message_id, schema=&lt;pulsar.schema.schema.BytesSchema object at 0x7f5b7c005350&gt;, reader_listener=None, receiver_queue_size=1000, reader_name=None, subscription_role_prefix=None, is_read_compacted=False, crypto_key_reader=None)</p>
+    <p>def <span class="ident">create_reader</span>(</p><p>self, topic, start_message_id, schema=&lt;pulsar.schema.schema.BytesSchema object at 0x7fea6d437350&gt;, reader_listener=None, receiver_queue_size=1000, reader_name=None, subscription_role_prefix=None, is_read_compacted=False, crypto_key_reader=None)</p>
     </div>
     
 
@@ -4258,7 +4258,7 @@ for ongoing operations to complete.</p></div>
             
   <div class="item">
     <div class="name def" id="pulsar.Client.subscribe">
-    <p>def <span class="ident">subscribe</span>(</p><p>self, topic, subscription_name, consumer_type=_pulsar.ConsumerType.Exclusive, schema=&lt;pulsar.schema.schema.BytesSchema object at 0x7f5b7c005290&gt;, message_listener=None, receiver_queue_size=1000, max_total_receiver_queue_size_across_partitions=50000, consumer_name=None, unacked_messages_timeout_ms=None, broker_consumer_stats_cache_time_ms=30000, negative_ack_redelivery_delay_ms=60000, is_read_compacted=False, properties=None, pa [...]
+    <p>def <span class="ident">subscribe</span>(</p><p>self, topic, subscription_name, consumer_type=_pulsar.ConsumerType.Exclusive, schema=&lt;pulsar.schema.schema.BytesSchema object at 0x7fea6d437290&gt;, message_listener=None, receiver_queue_size=1000, max_total_receiver_queue_size_across_partitions=50000, consumer_name=None, unacked_messages_timeout_ms=None, broker_consumer_stats_cache_time_ms=30000, negative_ack_redelivery_delay_ms=60000, is_read_compacted=False, properties=None, pa [...]
     </div>
     
 
diff --git a/content/docs/fr/next/admin-api-clusters.html b/content/docs/fr/next/admin-api-clusters.html
index fcd1693..0b1d4c1 100644
--- a/content/docs/fr/next/admin-api-clusters.html
+++ b/content/docs/fr/next/admin-api-clusters.html
@@ -121,8 +121,8 @@
 <p>Voici une commande d'initialisation des métadonnées de cluster par exemple :</p>
 <pre><code class="hljs css language-shell">bin/pulsar initialize-cluster-metadata \
   --cluster us-west \
-  --zookeeper zk1.us-west.example.com:2181 \
-  --configuration-store zk1.us-west.example.com:2184 \
+  --metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
+  --configuration-metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
   --web-service-url http://pulsar.us-west.example.com:8080/ \
   --web-service-url-tls https://pulsar.us-west.example.com:8443/ \
   --broker-service-url pulsar://pulsar.us-west.example.com:6650/ \
diff --git a/content/docs/fr/next/admin-api-clusters/index.html b/content/docs/fr/next/admin-api-clusters/index.html
index fcd1693..0b1d4c1 100644
--- a/content/docs/fr/next/admin-api-clusters/index.html
+++ b/content/docs/fr/next/admin-api-clusters/index.html
@@ -121,8 +121,8 @@
 <p>Voici une commande d'initialisation des métadonnées de cluster par exemple :</p>
 <pre><code class="hljs css language-shell">bin/pulsar initialize-cluster-metadata \
   --cluster us-west \
-  --zookeeper zk1.us-west.example.com:2181 \
-  --configuration-store zk1.us-west.example.com:2184 \
+  --metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
+  --configuration-metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
   --web-service-url http://pulsar.us-west.example.com:8080/ \
   --web-service-url-tls https://pulsar.us-west.example.com:8443/ \
   --broker-service-url pulsar://pulsar.us-west.example.com:6650/ \
diff --git a/content/docs/fr/next/administration-load-balance.html b/content/docs/fr/next/administration-load-balance.html
index da1d79d..dc2ac39 100644
--- a/content/docs/fr/next/administration-load-balance.html
+++ b/content/docs/fr/next/administration-load-balance.html
@@ -156,13 +156,16 @@
 # Prevent the same topics to be shed and moved to other brokers more that once within this timeframe</span>
 <span class="hljs-attr">loadBalancerSheddingGracePeriodMinutes</span>=<span class="hljs-string">30</span>
 </code></pre>
-<p>Pulsar supports three types of shedding strategies:</p>
+<p>Pulsar supports the following types of shedding strategies. From Pulsar 2.10, the <strong>default</strong> shedding strategy is <code>ThresholdShedder</code>.</p>
 <h5><a class="anchor" aria-hidden="true" id="thresholdshedder"></a><a href="#thresholdshedder" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.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>This strategy tends to shed the bundles if any broker's usage is above the configured threshold. It does this by first computing the average resource usage per broker for the whole cluster. The resource usage for each broker is calculated using the following method: LocalBrokerData#getMaxResourceUsageWithWeight). The weights for each resource are configurable. Historical observations are included in the running average based on the broker's setting for loadBalancerHistoryResourcePerce [...]
+<p>This strategy tends to shed the bundles if any broker's usage is above the configured threshold. It does this by first computing the average resource usage per broker for the whole cluster. The resource usage for each broker is calculated using the following method: LocalBrokerData#getMaxResourceUsageWithWeight. The weights for each resource are configurable. Historical observations are included in the running average based on the broker's setting for loadBalancerHistoryResourcePercen [...]
+<p><img src="/docs/assets/ThresholdShedder.png" alt="Shedding strategy - ThresholdShedder"></p>
 <h5><a class="anchor" aria-hidden="true" id="overloadshedder"></a><a href="#overloadshedder" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>This strategy will attempt to shed exactly one bundle on brokers which are overloaded, that is, whose maximum system resource usage exceeds loadBalancerBrokerOverloadedThresholdPercentage. To see which resources are considered when determining the maximum system resource. A bundle is recommended for unloading off that broker if and only if the following conditions hold: The broker has at least two bundles assigned and the broker has at least one bundle that has not been unloaded recen [...]
+<p><img src="/docs/assets/OverloadShedder.png" alt="Shedding strategy - OverloadShedder"></p>
 <h5><a class="anchor" aria-hidden="true" id="uniformloadshedder"></a><a href="#uniformloadshedder" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>This strategy tends to distribute load uniformly across all brokers. This strategy checks laod difference between broker with highest load and broker with lowest load. If the difference is higher than configured thresholds <code>loadBalancerMsgRateDifferenceShedderThreshold</code> and <code>loadBalancerMsgThroughputMultiplierDifferenceShedderThreshold</code> then it finds out bundles which can be unloaded to distribute traffic evenly across all brokers. Configure broker with below val [...]
+<p><img src="/docs/assets/UniformLoadShedder.png" alt="Shedding strategy - UniformLoadShedder"></p>
 <h4><a class="anchor" aria-hidden="true" id="broker-overload-thresholds"></a><a href="#broker-overload-thresholds" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
 <p>The determinations of when a broker is overloaded is based on threshold of CPU, network and memory usage. Whenever either of those metrics reaches the threshold, the system triggers the shedding (if enabled).</p>
 <p>By default, overload threshold is set at 85%:</p>
diff --git a/content/docs/fr/next/administration-load-balance/index.html b/content/docs/fr/next/administration-load-balance/index.html
index da1d79d..dc2ac39 100644
--- a/content/docs/fr/next/administration-load-balance/index.html
+++ b/content/docs/fr/next/administration-load-balance/index.html
@@ -156,13 +156,16 @@
 # Prevent the same topics to be shed and moved to other brokers more that once within this timeframe</span>
 <span class="hljs-attr">loadBalancerSheddingGracePeriodMinutes</span>=<span class="hljs-string">30</span>
 </code></pre>
-<p>Pulsar supports three types of shedding strategies:</p>
+<p>Pulsar supports the following types of shedding strategies. From Pulsar 2.10, the <strong>default</strong> shedding strategy is <code>ThresholdShedder</code>.</p>
 <h5><a class="anchor" aria-hidden="true" id="thresholdshedder"></a><a href="#thresholdshedder" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.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>This strategy tends to shed the bundles if any broker's usage is above the configured threshold. It does this by first computing the average resource usage per broker for the whole cluster. The resource usage for each broker is calculated using the following method: LocalBrokerData#getMaxResourceUsageWithWeight). The weights for each resource are configurable. Historical observations are included in the running average based on the broker's setting for loadBalancerHistoryResourcePerce [...]
+<p>This strategy tends to shed the bundles if any broker's usage is above the configured threshold. It does this by first computing the average resource usage per broker for the whole cluster. The resource usage for each broker is calculated using the following method: LocalBrokerData#getMaxResourceUsageWithWeight. The weights for each resource are configurable. Historical observations are included in the running average based on the broker's setting for loadBalancerHistoryResourcePercen [...]
+<p><img src="/docs/assets/ThresholdShedder.png" alt="Shedding strategy - ThresholdShedder"></p>
 <h5><a class="anchor" aria-hidden="true" id="overloadshedder"></a><a href="#overloadshedder" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>This strategy will attempt to shed exactly one bundle on brokers which are overloaded, that is, whose maximum system resource usage exceeds loadBalancerBrokerOverloadedThresholdPercentage. To see which resources are considered when determining the maximum system resource. A bundle is recommended for unloading off that broker if and only if the following conditions hold: The broker has at least two bundles assigned and the broker has at least one bundle that has not been unloaded recen [...]
+<p><img src="/docs/assets/OverloadShedder.png" alt="Shedding strategy - OverloadShedder"></p>
 <h5><a class="anchor" aria-hidden="true" id="uniformloadshedder"></a><a href="#uniformloadshedder" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>This strategy tends to distribute load uniformly across all brokers. This strategy checks laod difference between broker with highest load and broker with lowest load. If the difference is higher than configured thresholds <code>loadBalancerMsgRateDifferenceShedderThreshold</code> and <code>loadBalancerMsgThroughputMultiplierDifferenceShedderThreshold</code> then it finds out bundles which can be unloaded to distribute traffic evenly across all brokers. Configure broker with below val [...]
+<p><img src="/docs/assets/UniformLoadShedder.png" alt="Shedding strategy - UniformLoadShedder"></p>
 <h4><a class="anchor" aria-hidden="true" id="broker-overload-thresholds"></a><a href="#broker-overload-thresholds" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
 <p>The determinations of when a broker is overloaded is based on threshold of CPU, network and memory usage. Whenever either of those metrics reaches the threshold, the system triggers the shedding (if enabled).</p>
 <p>By default, overload threshold is set at 85%:</p>
diff --git a/content/docs/fr/next/administration-proxy.html b/content/docs/fr/next/administration-proxy.html
index 03ed135..2aaff7f 100644
--- a/content/docs/fr/next/administration-proxy.html
+++ b/content/docs/fr/next/administration-proxy.html
@@ -76,15 +76,9 @@
             });
         </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/fr" target="_blank" rel="noreferrer noopener">Translate</a><h1 id="__docusaurus" class="postHeaderTitle">Pulsar proxy</h1></header><article><div><span><p>Pulsar proxy is an optional gateway. Pulsar proxy is used when direct connections between clients and Pulsar br [...]
 <h2><a class="anchor" aria-hidden="true" id="configure-the-proxy"></a><a href="#configure-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.2 [...]
-<p>Before using the proxy, you need to configure it with the brokers addresses in the cluster. You can configure the proxy to connect directly to service discovery, or specify a broker URL in the configuration.</p>
-<h3><a class="anchor" aria-hidden="true" id="use-service-discovery"></a><a href="#use-service-discovery" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 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>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>
+<p>Before using the proxy, you need to configure it with the brokers addresses in the cluster. You can configure the broker URL in the proxy configuration, or the proxy to connect directly using service discovery.</p>
 <blockquote>
-<p>To use service discovery, you need to open the network ACLs, so the proxy can connects to the ZooKeeper nodes through the ZooKeeper client port (port <code>2181</code>) and the configuration store client port (port <code>2184</code>).</p>
-<p>However, it is not secure to use service discovery. Because if the network ACL is open, when someone compromises a proxy, they have full access to ZooKeeper.</p>
+<p>In a production environment service discovery is not recommended.</p>
 </blockquote>
 <h3><a class="anchor" aria-hidden="true" id="use-broker-urls"></a><a href="#use-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-2.5  [...]
 <p>It is more secure to specify a URL to connect to the brokers.</p>
@@ -102,10 +96,21 @@
 <p>The hostname in the URLs provided should be a DNS entry which points to multiple brokers or a virtual IP address, which is backed by multiple broker IP addresses, so that the proxy does not lose connectivity to Pulsar cluster if a single broker becomes unavailable.</p>
 <p>The ports to connect to the brokers (6650 and 8080, or in the case of TLS, 6651 and 8443) should be open in the network ACLs.</p>
 <p>Note that if you do not use functions, you do not need to configure <code>functionWorkerWebServiceURL</code>.</p>
+<h3><a class="anchor" aria-hidden="true" id="use-service-discovery"></a><a href="#use-service-discovery" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 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>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">metadataStoreUrl</span>=<span class="hljs-string">my-zk-0:2181,my-zk-1:2181,my-zk-2:2181</span>
+<span class="hljs-attr">configurationMetadataStoreUrl</span>=<span class="hljs-string">my-zk-0:2184,my-zk-remote:2184</span>
+</code></pre>
+<blockquote>
+<p>To use service discovery, you need to open the network ACLs, so the proxy can connects to the ZooKeeper nodes through the ZooKeeper client port (port <code>2181</code>) and the configuration store client port (port <code>2184</code>).</p>
+<p>However, it is not secure to use service discovery. Because if the network ACL is open, when someone compromises a proxy, they have full access to ZooKeeper.</p>
+</blockquote>
 <h2><a class="anchor" aria-hidden="true" id="start-the-proxy"></a><a href="#start-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-2-2.5  [...]
 <p>To start the proxy:</p>
 <pre><code class="hljs css language-bash">$ <span class="hljs-built_in">cd</span> /path/to/pulsar/directory
-$ bin/pulsar proxy
+$ bin/pulsar proxy \
+  --metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181 \
+  --configuration-metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181
 </code></pre>
 <blockquote>
 <p>You can run multiple instances of the Pulsar proxy in a cluster.</p>
@@ -117,7 +122,7 @@ $ bin/pulsar proxy
 <h2><a class="anchor" aria-hidden="true" id="use-pulsar-clients-with-the-proxy"></a><a href="#use-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.5S1 [...]
 <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 that the frontend uses. If the address is the DNS address <code>pulsar.cluster.default</code>, for example, the connection URL for clients is <code>pulsar://pulsar.cluster.default:6650</code>.</p>
 <p>For more information on Proxy configuration, refer to <a href="/docs/fr/next/reference-configuration#pulsar-proxy">Pulsar proxy</a>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/administration-load-balance"><span class="arrow-prev">← </span><span>Load balance</span></a><a class="docs-next button" href="/docs/fr/next/administration-upgrade"><span>Upgrade</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#configure-the-proxy">Configure the proxy</a><ul class="toc-headings"><li><a href="#use [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/administration-load-balance"><span class="arrow-prev">← </span><span>Load balance</span></a><a class="docs-next button" href="/docs/fr/next/administration-upgrade"><span>Upgrade</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#configure-the-proxy">Configure the proxy</a><ul class="toc-headings"><li><a href="#use [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/fr/next/administration-proxy/index.html b/content/docs/fr/next/administration-proxy/index.html
index 03ed135..2aaff7f 100644
--- a/content/docs/fr/next/administration-proxy/index.html
+++ b/content/docs/fr/next/administration-proxy/index.html
@@ -76,15 +76,9 @@
             });
         </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/fr" target="_blank" rel="noreferrer noopener">Translate</a><h1 id="__docusaurus" class="postHeaderTitle">Pulsar proxy</h1></header><article><div><span><p>Pulsar proxy is an optional gateway. Pulsar proxy is used when direct connections between clients and Pulsar br [...]
 <h2><a class="anchor" aria-hidden="true" id="configure-the-proxy"></a><a href="#configure-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.2 [...]
-<p>Before using the proxy, you need to configure it with the brokers addresses in the cluster. You can configure the proxy to connect directly to service discovery, or specify a broker URL in the configuration.</p>
-<h3><a class="anchor" aria-hidden="true" id="use-service-discovery"></a><a href="#use-service-discovery" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 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>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>
+<p>Before using the proxy, you need to configure it with the brokers addresses in the cluster. You can configure the broker URL in the proxy configuration, or the proxy to connect directly using service discovery.</p>
 <blockquote>
-<p>To use service discovery, you need to open the network ACLs, so the proxy can connects to the ZooKeeper nodes through the ZooKeeper client port (port <code>2181</code>) and the configuration store client port (port <code>2184</code>).</p>
-<p>However, it is not secure to use service discovery. Because if the network ACL is open, when someone compromises a proxy, they have full access to ZooKeeper.</p>
+<p>In a production environment service discovery is not recommended.</p>
 </blockquote>
 <h3><a class="anchor" aria-hidden="true" id="use-broker-urls"></a><a href="#use-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-2.5  [...]
 <p>It is more secure to specify a URL to connect to the brokers.</p>
@@ -102,10 +96,21 @@
 <p>The hostname in the URLs provided should be a DNS entry which points to multiple brokers or a virtual IP address, which is backed by multiple broker IP addresses, so that the proxy does not lose connectivity to Pulsar cluster if a single broker becomes unavailable.</p>
 <p>The ports to connect to the brokers (6650 and 8080, or in the case of TLS, 6651 and 8443) should be open in the network ACLs.</p>
 <p>Note that if you do not use functions, you do not need to configure <code>functionWorkerWebServiceURL</code>.</p>
+<h3><a class="anchor" aria-hidden="true" id="use-service-discovery"></a><a href="#use-service-discovery" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 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>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">metadataStoreUrl</span>=<span class="hljs-string">my-zk-0:2181,my-zk-1:2181,my-zk-2:2181</span>
+<span class="hljs-attr">configurationMetadataStoreUrl</span>=<span class="hljs-string">my-zk-0:2184,my-zk-remote:2184</span>
+</code></pre>
+<blockquote>
+<p>To use service discovery, you need to open the network ACLs, so the proxy can connects to the ZooKeeper nodes through the ZooKeeper client port (port <code>2181</code>) and the configuration store client port (port <code>2184</code>).</p>
+<p>However, it is not secure to use service discovery. Because if the network ACL is open, when someone compromises a proxy, they have full access to ZooKeeper.</p>
+</blockquote>
 <h2><a class="anchor" aria-hidden="true" id="start-the-proxy"></a><a href="#start-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-2-2.5  [...]
 <p>To start the proxy:</p>
 <pre><code class="hljs css language-bash">$ <span class="hljs-built_in">cd</span> /path/to/pulsar/directory
-$ bin/pulsar proxy
+$ bin/pulsar proxy \
+  --metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181 \
+  --configuration-metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181
 </code></pre>
 <blockquote>
 <p>You can run multiple instances of the Pulsar proxy in a cluster.</p>
@@ -117,7 +122,7 @@ $ bin/pulsar proxy
 <h2><a class="anchor" aria-hidden="true" id="use-pulsar-clients-with-the-proxy"></a><a href="#use-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.5S1 [...]
 <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 that the frontend uses. If the address is the DNS address <code>pulsar.cluster.default</code>, for example, the connection URL for clients is <code>pulsar://pulsar.cluster.default:6650</code>.</p>
 <p>For more information on Proxy configuration, refer to <a href="/docs/fr/next/reference-configuration#pulsar-proxy">Pulsar proxy</a>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/administration-load-balance"><span class="arrow-prev">← </span><span>Load balance</span></a><a class="docs-next button" href="/docs/fr/next/administration-upgrade"><span>Upgrade</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#configure-the-proxy">Configure the proxy</a><ul class="toc-headings"><li><a href="#use [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/administration-load-balance"><span class="arrow-prev">← </span><span>Load balance</span></a><a class="docs-next button" href="/docs/fr/next/administration-upgrade"><span>Upgrade</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#configure-the-proxy">Configure the proxy</a><ul class="toc-headings"><li><a href="#use [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/fr/next/administration-pulsar-manager.html b/content/docs/fr/next/administration-pulsar-manager.html
index b67fcc0..1fb34ce 100644
--- a/content/docs/fr/next/administration-pulsar-manager.html
+++ b/content/docs/fr/next/administration-pulsar-manager.html
@@ -138,7 +138,7 @@ docker build -f docker/Dockerfile <span class="hljs-params">--build-arg</span> B
 <ul>
 <li>Method 1: use command-line tool</li>
 </ul>
-<pre><code class="hljs">wget https:<span class="hljs-string">//dist.apache.org/repos/dist/release/pulsar/pulsar-manager/apache-pulsar-manager-0.2.0/apache-pulsar-manager-0.2.0-bin.tar.gz</span>
+<pre><code class="hljs">wget https:<span class="hljs-string">//dist.apache.org/repos/dist/release/pulsar/pulsar-manager/pulsar-manager-0.2.0/apache-pulsar-manager-0.2.0-bin.tar.gz</span>
 tar -zxvf apache-pulsar-manager-0.2.0-bin.tar.gz
 <span class="hljs-keyword">cd</span> pulsar-manager
 tar -zxvf pulsar-manager.tar
diff --git a/content/docs/fr/next/administration-pulsar-manager/index.html b/content/docs/fr/next/administration-pulsar-manager/index.html
index b67fcc0..1fb34ce 100644
--- a/content/docs/fr/next/administration-pulsar-manager/index.html
+++ b/content/docs/fr/next/administration-pulsar-manager/index.html
@@ -138,7 +138,7 @@ docker build -f docker/Dockerfile <span class="hljs-params">--build-arg</span> B
 <ul>
 <li>Method 1: use command-line tool</li>
 </ul>
-<pre><code class="hljs">wget https:<span class="hljs-string">//dist.apache.org/repos/dist/release/pulsar/pulsar-manager/apache-pulsar-manager-0.2.0/apache-pulsar-manager-0.2.0-bin.tar.gz</span>
+<pre><code class="hljs">wget https:<span class="hljs-string">//dist.apache.org/repos/dist/release/pulsar/pulsar-manager/pulsar-manager-0.2.0/apache-pulsar-manager-0.2.0-bin.tar.gz</span>
 tar -zxvf apache-pulsar-manager-0.2.0-bin.tar.gz
 <span class="hljs-keyword">cd</span> pulsar-manager
 tar -zxvf pulsar-manager.tar
diff --git a/content/docs/fr/next/administration-zk-bk.html b/content/docs/fr/next/administration-zk-bk.html
index 47f8559..7d2f296 100644
--- a/content/docs/fr/next/administration-zk-bk.html
+++ b/content/docs/fr/next/administration-zk-bk.html
@@ -156,26 +156,12 @@
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-daemon start configuration-store</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="zookeeper-configuration"></a><a href="#zookeeper-configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
-<p>In Pulsar, ZooKeeper configuration is handled by two separate configuration files in the <code>conf</code> directory of your Pulsar installation: <code>conf/zookeeper.conf</code> for <a href="#local-zookeeper">local ZooKeeper</a> and <code>conf/global-zookeeper.conf</code> for <a href="#configuration-store">configuration store</a>.</p>
-<h4><a class="anchor" aria-hidden="true" id="local-zookeeper"></a><a href="#local-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  [...]
-<p>The <a href="/docs/fr/next/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> file handles the configuration for local ZooKeeper. The table below shows the available parameters:</p>
-<table>
-<thead>
-<tr><th>Name</th><th>Description</th><th>Default</th></tr>
-</thead>
-<tbody>
-<tr><td>tickTime</td><td>The tick is the basic unit of time in ZooKeeper, measured in milliseconds and used to regulate things like heartbeats and timeouts. tickTime is the length of a single tick.</td><td>2000</td></tr>
-<tr><td>initLimit</td><td>The maximum time, in ticks, that the leader ZooKeeper server allows follower ZooKeeper servers to successfully connect and sync. The tick time is set in milliseconds using the tickTime parameter.</td><td>10</td></tr>
-<tr><td>syncLimit</td><td>The maximum time, in ticks, that a follower ZooKeeper server is allowed to sync with other ZooKeeper servers. The tick time is set in milliseconds using the tickTime parameter.</td><td>5</td></tr>
-<tr><td>dataDir</td><td>The location where ZooKeeper stores in-memory database snapshots as well as the transaction log of updates to the database.</td><td>data/zookeeper</td></tr>
-<tr><td>clientPort</td><td>The port on which the ZooKeeper server listens for connections.</td><td>2181</td></tr>
-<tr><td>autopurge.snapRetainCount</td><td>In ZooKeeper, auto purge determines how many recent snapshots of the database stored in dataDir to retain within the time interval specified by autopurge.purgeInterval (while deleting the rest).</td><td>3</td></tr>
-<tr><td>autopurge.purgeInterval</td><td>The time interval, in hours, which triggers the ZooKeeper database purge task. Setting to a non-zero number enables auto purge; setting to 0 disables. Read this guide before enabling auto purge.</td><td>1</td></tr>
-<tr><td>maxClientCnxns</td><td>The maximum number of client connections. Increase this if you need to handle more ZooKeeper clients.</td><td>60</td></tr>
-</tbody>
-</table>
-<h4><a class="anchor" aria-hidden="true" id="configuration-store"></a><a href="#configuration-store" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
-<p>The <a href="/docs/fr/next/reference-configuration#configuration-store"><code>conf/global-zookeeper.conf</code></a> file handles the configuration for configuration store. The table below shows the available parameters:</p>
+<p>In Pulsar, ZooKeeper configuration is handled by two separate configuration files in the <code>conf</code> directory of your Pulsar installation: * The <code>conf/zookeeper.conf</code> file handles the configuration for local ZooKeeper. * The <code>conf/global-zookeeper.conf</code> file handles the configuration for configuration store. See <a href="/docs/fr/next/reference-configuration#zookeeper">parameters</a> for more details.</p>
+<h4><a class="anchor" aria-hidden="true" id="configure-batching-operations"></a><a href="#configure-batching-operations" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 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>Using the batching operations reduces the remote procedure call (RPC) traffic between ZooKeeper client and servers. It also reduces the number of write transactions, because each batching operation corresponds to a single ZooKeeper transaction, containing multiple read and write operations.</p>
+<p>The following figure demonstrates a basic benchmark of batching read/write operations that can be requested to ZooKeeper in one second:</p>
+<p><img src="/docs/assets/zookeeper-batching.png" alt="Zookeeper batching benchmark"></p>
+<p>To enable batching operations, set the <a href="/docs/fr/next/reference-configuration#broker"><code>metadataStoreBatchingEnabled</code></a> parameter to <code>true</code> on the broker side.</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-.83.42-1 [...]
 <p>BookKeeper stores all durable message in Pulsar. BookKeeper is a distributed <a href="https://en.wikipedia.org/wiki/Write-ahead_logging">write-ahead log</a> WAL system that guarantees read consistency of independent message logs calls ledgers. Individual BookKeeper servers are also called <em>bookies</em>.</p>
 <blockquote>
diff --git a/content/docs/fr/next/administration-zk-bk/index.html b/content/docs/fr/next/administration-zk-bk/index.html
index 47f8559..7d2f296 100644
--- a/content/docs/fr/next/administration-zk-bk/index.html
+++ b/content/docs/fr/next/administration-zk-bk/index.html
@@ -156,26 +156,12 @@
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-daemon start configuration-store</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="zookeeper-configuration"></a><a href="#zookeeper-configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
-<p>In Pulsar, ZooKeeper configuration is handled by two separate configuration files in the <code>conf</code> directory of your Pulsar installation: <code>conf/zookeeper.conf</code> for <a href="#local-zookeeper">local ZooKeeper</a> and <code>conf/global-zookeeper.conf</code> for <a href="#configuration-store">configuration store</a>.</p>
-<h4><a class="anchor" aria-hidden="true" id="local-zookeeper"></a><a href="#local-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  [...]
-<p>The <a href="/docs/fr/next/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> file handles the configuration for local ZooKeeper. The table below shows the available parameters:</p>
-<table>
-<thead>
-<tr><th>Name</th><th>Description</th><th>Default</th></tr>
-</thead>
-<tbody>
-<tr><td>tickTime</td><td>The tick is the basic unit of time in ZooKeeper, measured in milliseconds and used to regulate things like heartbeats and timeouts. tickTime is the length of a single tick.</td><td>2000</td></tr>
-<tr><td>initLimit</td><td>The maximum time, in ticks, that the leader ZooKeeper server allows follower ZooKeeper servers to successfully connect and sync. The tick time is set in milliseconds using the tickTime parameter.</td><td>10</td></tr>
-<tr><td>syncLimit</td><td>The maximum time, in ticks, that a follower ZooKeeper server is allowed to sync with other ZooKeeper servers. The tick time is set in milliseconds using the tickTime parameter.</td><td>5</td></tr>
-<tr><td>dataDir</td><td>The location where ZooKeeper stores in-memory database snapshots as well as the transaction log of updates to the database.</td><td>data/zookeeper</td></tr>
-<tr><td>clientPort</td><td>The port on which the ZooKeeper server listens for connections.</td><td>2181</td></tr>
-<tr><td>autopurge.snapRetainCount</td><td>In ZooKeeper, auto purge determines how many recent snapshots of the database stored in dataDir to retain within the time interval specified by autopurge.purgeInterval (while deleting the rest).</td><td>3</td></tr>
-<tr><td>autopurge.purgeInterval</td><td>The time interval, in hours, which triggers the ZooKeeper database purge task. Setting to a non-zero number enables auto purge; setting to 0 disables. Read this guide before enabling auto purge.</td><td>1</td></tr>
-<tr><td>maxClientCnxns</td><td>The maximum number of client connections. Increase this if you need to handle more ZooKeeper clients.</td><td>60</td></tr>
-</tbody>
-</table>
-<h4><a class="anchor" aria-hidden="true" id="configuration-store"></a><a href="#configuration-store" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
-<p>The <a href="/docs/fr/next/reference-configuration#configuration-store"><code>conf/global-zookeeper.conf</code></a> file handles the configuration for configuration store. The table below shows the available parameters:</p>
+<p>In Pulsar, ZooKeeper configuration is handled by two separate configuration files in the <code>conf</code> directory of your Pulsar installation: * The <code>conf/zookeeper.conf</code> file handles the configuration for local ZooKeeper. * The <code>conf/global-zookeeper.conf</code> file handles the configuration for configuration store. See <a href="/docs/fr/next/reference-configuration#zookeeper">parameters</a> for more details.</p>
+<h4><a class="anchor" aria-hidden="true" id="configure-batching-operations"></a><a href="#configure-batching-operations" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 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>Using the batching operations reduces the remote procedure call (RPC) traffic between ZooKeeper client and servers. It also reduces the number of write transactions, because each batching operation corresponds to a single ZooKeeper transaction, containing multiple read and write operations.</p>
+<p>The following figure demonstrates a basic benchmark of batching read/write operations that can be requested to ZooKeeper in one second:</p>
+<p><img src="/docs/assets/zookeeper-batching.png" alt="Zookeeper batching benchmark"></p>
+<p>To enable batching operations, set the <a href="/docs/fr/next/reference-configuration#broker"><code>metadataStoreBatchingEnabled</code></a> parameter to <code>true</code> on the broker side.</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-.83.42-1 [...]
 <p>BookKeeper stores all durable message in Pulsar. BookKeeper is a distributed <a href="https://en.wikipedia.org/wiki/Write-ahead_logging">write-ahead log</a> WAL system that guarantees read consistency of independent message logs calls ledgers. Individual BookKeeper servers are also called <em>bookies</em>.</p>
 <blockquote>
diff --git a/content/docs/fr/next/client-libraries-cpp.html b/content/docs/fr/next/client-libraries-cpp.html
index 81b99f5..df0be11 100644
--- a/content/docs/fr/next/client-libraries-cpp.html
+++ b/content/docs/fr/next/client-libraries-cpp.html
@@ -315,90 +315,6 @@ ${PULSAR_HOME}/pulsar-client-cpp/build/lib/Release/pulsar.dll</p></li>
 <p>If you use TLS authentication, you need to add <code>ssl</code>, and the default port is <code>6651</code>. The following is an example.</p>
 <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="create-a-consumer"></a><a href="#create-a-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 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 use Pulsar as a consumer, you need to create a consumer on the C++ client. There are two main ways of using the consumer: - <a href="#blocking-example">Blocking style</a>: synchronously calling <code>receive(msg)</code>. - <a href="#consumer-with-a-message-listener">Non-blocking</a> (event based) style: using a message listener.</p>
-<h3><a class="anchor" aria-hidden="true" id="blocking-example"></a><a href="#blocking-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-.98 0-2-1.22-2-2. [...]
-<p>The benefit of this approach is that it is the simplest code. Simply keeps calling <code>receive(msg)</code> which blocks until a message is received.</p>
-<p>This example starts a subscription at the earliest offset and consumes 100 messages.</p>
-<pre><code class="hljs css language-c++"><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-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
-
-<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
-    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
-
-    Consumer consumer;
-    ConsumerConfiguration <span class="hljs-built_in">config</span>;
-    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
-    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
-    <span class="hljs-keyword">if</span> (result != ResultOk) {
-        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
-    }
-
-    Message msg;
-    <span class="hljs-keyword">int</span> ctr = <span class="hljs-number">0</span>;
-    <span class="hljs-comment">// consume 100 messages</span>
-    <span class="hljs-keyword">while</span> (ctr &lt; <span class="hljs-number">100</span>) {
-        consumer.receive(msg);
-        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Received: "</span> &lt;&lt; msg
-            &lt;&lt; <span class="hljs-string">"  with payload '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-
-        consumer.acknowledge(msg);
-        ctr++;
-    }
-
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming synchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-
-    client.<span class="hljs-built_in">close</span>();
-    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
-}
-</code></pre>
-<h3><a class="anchor" aria-hidden="true" id="consumer-with-a-message-listener"></a><a href="#consumer-with-a-message-listener" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13. [...]
-<p>You can avoid running a loop with blocking calls with an event based style by using a message listener which is invoked for each message that is received.</p>
-<p>This example starts a subscription at the earliest offset and consumes 100 messages.</p>
-<pre><code class="hljs css language-c++"><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-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;atomic&gt;</span></span>
-<span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;thread&gt;</span></span>
-
-<span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
-
-<span class="hljs-built_in">std</span>::atomic&lt;<span class="hljs-keyword">uint32_t</span>&gt; messagesReceived;
-
-<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">handleAckComplete</span><span class="hljs-params">(Result res)</span> </span>{
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Ack res: "</span> &lt;&lt; res &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-}
-
-<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">listener</span><span class="hljs-params">(Consumer consumer, <span class="hljs-keyword">const</span> Message&amp; msg)</span> </span>{
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Got message "</span> &lt;&lt; msg &lt;&lt; <span class="hljs-string">" with content '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-    messagesReceived++;
-    consumer.acknowledgeAsync(msg.getMessageId(), handleAckComplete);
-}
-
-<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
-    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
-
-    Consumer consumer;
-    ConsumerConfiguration <span class="hljs-built_in">config</span>;
-    <span class="hljs-built_in">config</span>.setMessageListener(listener);
-    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
-    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
-    <span class="hljs-keyword">if</span> (result != ResultOk) {
-        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
-    }
-
-    <span class="hljs-comment">// wait for 100 messages to be consumed</span>
-    <span class="hljs-keyword">while</span> (messagesReceived &lt; <span class="hljs-number">100</span>) {
-        <span class="hljs-built_in">std</span>::this_thread::sleep_for(<span class="hljs-built_in">std</span>::chrono::milliseconds(<span class="hljs-number">100</span>));
-    }
-
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming asynchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-
-    client.<span class="hljs-built_in">close</span>();
-    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
-}
-</code></pre>
 <h2><a class="anchor" aria-hidden="true" id="create-a-producer"></a><a href="#create-a-producer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 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 use Pulsar as a producer, you need to create a producer on the C++ client. There are two main ways of using a producer: - <a href="#simple-blocking-example">Blocking style</a> : each call to <code>send</code> waits for an ack from the broker. - <a href="#non-blocking-example">Non-blocking asynchronous style</a> : <code>sendAsync</code> is called instead of <code>send</code> and a callback is supplied for when the ack is received from the broker.</p>
 <h3><a class="anchor" aria-hidden="true" id="simple-blocking-example"></a><a href="#simple-blocking-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-.98 [...]
@@ -502,6 +418,111 @@ ${PULSAR_HOME}/pulsar-client-cpp/build/lib/Release/pulsar.dll</p></li>
 producerConf.setPartitionsRoutingMode(ProducerConfiguration::UseSinglePartition);
 producerConf.setLazyStartPartitionedProducers(<span class="hljs-literal">true</span>);
 </code></pre>
+<h3><a class="anchor" aria-hidden="true" id="enable-chunking"></a><a href="#enable-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>Message <a href="/docs/fr/next/concepts-messaging#chunking">chunking</a> enables Pulsar to process large payload messages by splitting the message into chunks at the producer side and aggregating chunked messages at the consumer side.</p>
+<p>The message chunking feature is OFF by default. The following is an example about how to enable message chunking when creating a producer.</p>
+<pre><code class="hljs css language-c++">ProducerConfiguration conf;
+conf.setBatchingEnabled(<span class="hljs-literal">false</span>);
+conf.setChunkingEnabled(<span class="hljs-literal">true</span>);
+Producer producer;
+client.createProducer(<span class="hljs-string">"my-topic"</span>, conf, producer);
+</code></pre>
+<blockquote>
+<p><strong>Note:</strong> To enable chunking, you need to disable batching (<code>setBatchingEnabled</code>=<code>false</code>) concurrently.</p>
+</blockquote>
+<h2><a class="anchor" aria-hidden="true" id="create-a-consumer"></a><a href="#create-a-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 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 use Pulsar as a consumer, you need to create a consumer on the C++ client. There are two main ways of using the consumer: - <a href="#blocking-example">Blocking style</a>: synchronously calling <code>receive(msg)</code>. - <a href="#consumer-with-a-message-listener">Non-blocking</a> (event based) style: using a message listener.</p>
+<h3><a class="anchor" aria-hidden="true" id="blocking-example"></a><a href="#blocking-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-.98 0-2-1.22-2-2. [...]
+<p>The benefit of this approach is that it is the simplest code. Simply keeps calling <code>receive(msg)</code> which blocks until a message is received.</p>
+<p>This example starts a subscription at the earliest offset and consumes 100 messages.</p>
+<pre><code class="hljs css language-c++"><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-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
+
+<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
+    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
+
+    Consumer consumer;
+    ConsumerConfiguration <span class="hljs-built_in">config</span>;
+    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
+    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
+    <span class="hljs-keyword">if</span> (result != ResultOk) {
+        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
+    }
+
+    Message msg;
+    <span class="hljs-keyword">int</span> ctr = <span class="hljs-number">0</span>;
+    <span class="hljs-comment">// consume 100 messages</span>
+    <span class="hljs-keyword">while</span> (ctr &lt; <span class="hljs-number">100</span>) {
+        consumer.receive(msg);
+        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Received: "</span> &lt;&lt; msg
+            &lt;&lt; <span class="hljs-string">"  with payload '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+
+        consumer.acknowledge(msg);
+        ctr++;
+    }
+
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming synchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+
+    client.<span class="hljs-built_in">close</span>();
+    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
+}
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="consumer-with-a-message-listener"></a><a href="#consumer-with-a-message-listener" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13. [...]
+<p>You can avoid running a loop with blocking calls with an event based style by using a message listener which is invoked for each message that is received.</p>
+<p>This example starts a subscription at the earliest offset and consumes 100 messages.</p>
+<pre><code class="hljs css language-c++"><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-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;atomic&gt;</span></span>
+<span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;thread&gt;</span></span>
+
+<span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
+
+<span class="hljs-built_in">std</span>::atomic&lt;<span class="hljs-keyword">uint32_t</span>&gt; messagesReceived;
+
+<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">handleAckComplete</span><span class="hljs-params">(Result res)</span> </span>{
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Ack res: "</span> &lt;&lt; res &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+}
+
+<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">listener</span><span class="hljs-params">(Consumer consumer, <span class="hljs-keyword">const</span> Message&amp; msg)</span> </span>{
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Got message "</span> &lt;&lt; msg &lt;&lt; <span class="hljs-string">" with content '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+    messagesReceived++;
+    consumer.acknowledgeAsync(msg.getMessageId(), handleAckComplete);
+}
+
+<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
+    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
+
+    Consumer consumer;
+    ConsumerConfiguration <span class="hljs-built_in">config</span>;
+    <span class="hljs-built_in">config</span>.setMessageListener(listener);
+    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
+    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
+    <span class="hljs-keyword">if</span> (result != ResultOk) {
+        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
+    }
+
+    <span class="hljs-comment">// wait for 100 messages to be consumed</span>
+    <span class="hljs-keyword">while</span> (messagesReceived &lt; <span class="hljs-number">100</span>) {
+        <span class="hljs-built_in">std</span>::this_thread::sleep_for(<span class="hljs-built_in">std</span>::chrono::milliseconds(<span class="hljs-number">100</span>));
+    }
+
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming asynchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+
+    client.<span class="hljs-built_in">close</span>();
+    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
+}
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="configure-chunking"></a><a href="#configure-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>You can limit the maximum number of chunked messages a consumer maintains concurrently by configuring the <code>setMaxPendingChunkedMessage</code> and <code>setAutoAckOldestChunkedMessageOnQueueFull</code> parameters. When the threshold is reached, the consumer drops pending messages by silently acknowledging them or asking the broker to redeliver them later.</p>
+<p>The following is an example of how to configure message chunking.</p>
+<pre><code class="hljs css language-c++">ConsumerConfiguration conf;
+conf.setAutoAckOldestChunkedMessageOnQueueFull(<span class="hljs-literal">true</span>);
+conf.setMaxPendingChunkedMessage(<span class="hljs-number">100</span>);
+Consumer consumer;
+client.subscribe(<span class="hljs-string">"my-topic"</span>, <span class="hljs-string">"my-sub"</span>, conf, consumer);
+</code></pre>
 <h2><a class="anchor" aria-hidden="true" id="enable-authentication-in-connection-urls"></a><a href="#enable-authentication-in-connection-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  [...]
 <p>If you use TLS authentication when connecting to Pulsar, you need to add <code>ssl</code> in the connection URLs, and the default port is <code>6651</code>. The following is an example.</p>
 <pre><code class="hljs css language-cpp">ClientConfiguration config = ClientConfiguration();
@@ -555,7 +576,7 @@ client.subscribe(<span class="hljs-string">"topic-avro"</span>, <span class="hlj
 ​
 4. Create a consumer to receive a `User` instance.
 ​c++ ConsumerConfiguration consumerConf; consumerConf.setSchema(createProtobufNativeSchema(User::GetDescriptor())); consumerConf.setSubscriptionInitialPosition(InitialPositionEarliest); Consumer consumer; client.subscribe(&quot;topic-protobuf&quot;, &quot;my-sub&quot;, consumerConf, consumer); Message msg; consumer.receive(msg); User user2; user2.ParseFromArray(msg.getData(), msg.getLength()); ```</code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/client-libraries-python"><span class="arrow-prev">← </span><span>Python</span></a><a class="docs-next button" href="/docs/fr/next/client-libraries-node"><span>Node.js</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#supported-platforms">Supported platforms</a></li><li><a href="#system-requirements">System requir [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/client-libraries-python"><span class="arrow-prev">← </span><span>Python</span></a><a class="docs-next button" href="/docs/fr/next/client-libraries-node"><span>Node.js</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#supported-platforms">Supported platforms</a></li><li><a href="#system-requirements">System requir [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/fr/next/client-libraries-cpp/index.html b/content/docs/fr/next/client-libraries-cpp/index.html
index 81b99f5..df0be11 100644
--- a/content/docs/fr/next/client-libraries-cpp/index.html
+++ b/content/docs/fr/next/client-libraries-cpp/index.html
@@ -315,90 +315,6 @@ ${PULSAR_HOME}/pulsar-client-cpp/build/lib/Release/pulsar.dll</p></li>
 <p>If you use TLS authentication, you need to add <code>ssl</code>, and the default port is <code>6651</code>. The following is an example.</p>
 <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="create-a-consumer"></a><a href="#create-a-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 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 use Pulsar as a consumer, you need to create a consumer on the C++ client. There are two main ways of using the consumer: - <a href="#blocking-example">Blocking style</a>: synchronously calling <code>receive(msg)</code>. - <a href="#consumer-with-a-message-listener">Non-blocking</a> (event based) style: using a message listener.</p>
-<h3><a class="anchor" aria-hidden="true" id="blocking-example"></a><a href="#blocking-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-.98 0-2-1.22-2-2. [...]
-<p>The benefit of this approach is that it is the simplest code. Simply keeps calling <code>receive(msg)</code> which blocks until a message is received.</p>
-<p>This example starts a subscription at the earliest offset and consumes 100 messages.</p>
-<pre><code class="hljs css language-c++"><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-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
-
-<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
-    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
-
-    Consumer consumer;
-    ConsumerConfiguration <span class="hljs-built_in">config</span>;
-    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
-    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
-    <span class="hljs-keyword">if</span> (result != ResultOk) {
-        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
-    }
-
-    Message msg;
-    <span class="hljs-keyword">int</span> ctr = <span class="hljs-number">0</span>;
-    <span class="hljs-comment">// consume 100 messages</span>
-    <span class="hljs-keyword">while</span> (ctr &lt; <span class="hljs-number">100</span>) {
-        consumer.receive(msg);
-        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Received: "</span> &lt;&lt; msg
-            &lt;&lt; <span class="hljs-string">"  with payload '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-
-        consumer.acknowledge(msg);
-        ctr++;
-    }
-
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming synchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-
-    client.<span class="hljs-built_in">close</span>();
-    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
-}
-</code></pre>
-<h3><a class="anchor" aria-hidden="true" id="consumer-with-a-message-listener"></a><a href="#consumer-with-a-message-listener" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13. [...]
-<p>You can avoid running a loop with blocking calls with an event based style by using a message listener which is invoked for each message that is received.</p>
-<p>This example starts a subscription at the earliest offset and consumes 100 messages.</p>
-<pre><code class="hljs css language-c++"><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-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;atomic&gt;</span></span>
-<span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;thread&gt;</span></span>
-
-<span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
-
-<span class="hljs-built_in">std</span>::atomic&lt;<span class="hljs-keyword">uint32_t</span>&gt; messagesReceived;
-
-<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">handleAckComplete</span><span class="hljs-params">(Result res)</span> </span>{
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Ack res: "</span> &lt;&lt; res &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-}
-
-<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">listener</span><span class="hljs-params">(Consumer consumer, <span class="hljs-keyword">const</span> Message&amp; msg)</span> </span>{
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Got message "</span> &lt;&lt; msg &lt;&lt; <span class="hljs-string">" with content '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-    messagesReceived++;
-    consumer.acknowledgeAsync(msg.getMessageId(), handleAckComplete);
-}
-
-<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
-    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
-
-    Consumer consumer;
-    ConsumerConfiguration <span class="hljs-built_in">config</span>;
-    <span class="hljs-built_in">config</span>.setMessageListener(listener);
-    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
-    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
-    <span class="hljs-keyword">if</span> (result != ResultOk) {
-        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
-    }
-
-    <span class="hljs-comment">// wait for 100 messages to be consumed</span>
-    <span class="hljs-keyword">while</span> (messagesReceived &lt; <span class="hljs-number">100</span>) {
-        <span class="hljs-built_in">std</span>::this_thread::sleep_for(<span class="hljs-built_in">std</span>::chrono::milliseconds(<span class="hljs-number">100</span>));
-    }
-
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming asynchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-
-    client.<span class="hljs-built_in">close</span>();
-    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
-}
-</code></pre>
 <h2><a class="anchor" aria-hidden="true" id="create-a-producer"></a><a href="#create-a-producer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 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 use Pulsar as a producer, you need to create a producer on the C++ client. There are two main ways of using a producer: - <a href="#simple-blocking-example">Blocking style</a> : each call to <code>send</code> waits for an ack from the broker. - <a href="#non-blocking-example">Non-blocking asynchronous style</a> : <code>sendAsync</code> is called instead of <code>send</code> and a callback is supplied for when the ack is received from the broker.</p>
 <h3><a class="anchor" aria-hidden="true" id="simple-blocking-example"></a><a href="#simple-blocking-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-.98 [...]
@@ -502,6 +418,111 @@ ${PULSAR_HOME}/pulsar-client-cpp/build/lib/Release/pulsar.dll</p></li>
 producerConf.setPartitionsRoutingMode(ProducerConfiguration::UseSinglePartition);
 producerConf.setLazyStartPartitionedProducers(<span class="hljs-literal">true</span>);
 </code></pre>
+<h3><a class="anchor" aria-hidden="true" id="enable-chunking"></a><a href="#enable-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>Message <a href="/docs/fr/next/concepts-messaging#chunking">chunking</a> enables Pulsar to process large payload messages by splitting the message into chunks at the producer side and aggregating chunked messages at the consumer side.</p>
+<p>The message chunking feature is OFF by default. The following is an example about how to enable message chunking when creating a producer.</p>
+<pre><code class="hljs css language-c++">ProducerConfiguration conf;
+conf.setBatchingEnabled(<span class="hljs-literal">false</span>);
+conf.setChunkingEnabled(<span class="hljs-literal">true</span>);
+Producer producer;
+client.createProducer(<span class="hljs-string">"my-topic"</span>, conf, producer);
+</code></pre>
+<blockquote>
+<p><strong>Note:</strong> To enable chunking, you need to disable batching (<code>setBatchingEnabled</code>=<code>false</code>) concurrently.</p>
+</blockquote>
+<h2><a class="anchor" aria-hidden="true" id="create-a-consumer"></a><a href="#create-a-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 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 use Pulsar as a consumer, you need to create a consumer on the C++ client. There are two main ways of using the consumer: - <a href="#blocking-example">Blocking style</a>: synchronously calling <code>receive(msg)</code>. - <a href="#consumer-with-a-message-listener">Non-blocking</a> (event based) style: using a message listener.</p>
+<h3><a class="anchor" aria-hidden="true" id="blocking-example"></a><a href="#blocking-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-.98 0-2-1.22-2-2. [...]
+<p>The benefit of this approach is that it is the simplest code. Simply keeps calling <code>receive(msg)</code> which blocks until a message is received.</p>
+<p>This example starts a subscription at the earliest offset and consumes 100 messages.</p>
+<pre><code class="hljs css language-c++"><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-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
+
+<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
+    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
+
+    Consumer consumer;
+    ConsumerConfiguration <span class="hljs-built_in">config</span>;
+    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
+    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
+    <span class="hljs-keyword">if</span> (result != ResultOk) {
+        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
+    }
+
+    Message msg;
+    <span class="hljs-keyword">int</span> ctr = <span class="hljs-number">0</span>;
+    <span class="hljs-comment">// consume 100 messages</span>
+    <span class="hljs-keyword">while</span> (ctr &lt; <span class="hljs-number">100</span>) {
+        consumer.receive(msg);
+        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Received: "</span> &lt;&lt; msg
+            &lt;&lt; <span class="hljs-string">"  with payload '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+
+        consumer.acknowledge(msg);
+        ctr++;
+    }
+
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming synchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+
+    client.<span class="hljs-built_in">close</span>();
+    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
+}
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="consumer-with-a-message-listener"></a><a href="#consumer-with-a-message-listener" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13. [...]
+<p>You can avoid running a loop with blocking calls with an event based style by using a message listener which is invoked for each message that is received.</p>
+<p>This example starts a subscription at the earliest offset and consumes 100 messages.</p>
+<pre><code class="hljs css language-c++"><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-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;atomic&gt;</span></span>
+<span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;thread&gt;</span></span>
+
+<span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
+
+<span class="hljs-built_in">std</span>::atomic&lt;<span class="hljs-keyword">uint32_t</span>&gt; messagesReceived;
+
+<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">handleAckComplete</span><span class="hljs-params">(Result res)</span> </span>{
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Ack res: "</span> &lt;&lt; res &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+}
+
+<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">listener</span><span class="hljs-params">(Consumer consumer, <span class="hljs-keyword">const</span> Message&amp; msg)</span> </span>{
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Got message "</span> &lt;&lt; msg &lt;&lt; <span class="hljs-string">" with content '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+    messagesReceived++;
+    consumer.acknowledgeAsync(msg.getMessageId(), handleAckComplete);
+}
+
+<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
+    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
+
+    Consumer consumer;
+    ConsumerConfiguration <span class="hljs-built_in">config</span>;
+    <span class="hljs-built_in">config</span>.setMessageListener(listener);
+    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
+    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
+    <span class="hljs-keyword">if</span> (result != ResultOk) {
+        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
+    }
+
+    <span class="hljs-comment">// wait for 100 messages to be consumed</span>
+    <span class="hljs-keyword">while</span> (messagesReceived &lt; <span class="hljs-number">100</span>) {
+        <span class="hljs-built_in">std</span>::this_thread::sleep_for(<span class="hljs-built_in">std</span>::chrono::milliseconds(<span class="hljs-number">100</span>));
+    }
+
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming asynchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+
+    client.<span class="hljs-built_in">close</span>();
+    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
+}
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="configure-chunking"></a><a href="#configure-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>You can limit the maximum number of chunked messages a consumer maintains concurrently by configuring the <code>setMaxPendingChunkedMessage</code> and <code>setAutoAckOldestChunkedMessageOnQueueFull</code> parameters. When the threshold is reached, the consumer drops pending messages by silently acknowledging them or asking the broker to redeliver them later.</p>
+<p>The following is an example of how to configure message chunking.</p>
+<pre><code class="hljs css language-c++">ConsumerConfiguration conf;
+conf.setAutoAckOldestChunkedMessageOnQueueFull(<span class="hljs-literal">true</span>);
+conf.setMaxPendingChunkedMessage(<span class="hljs-number">100</span>);
+Consumer consumer;
+client.subscribe(<span class="hljs-string">"my-topic"</span>, <span class="hljs-string">"my-sub"</span>, conf, consumer);
+</code></pre>
 <h2><a class="anchor" aria-hidden="true" id="enable-authentication-in-connection-urls"></a><a href="#enable-authentication-in-connection-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  [...]
 <p>If you use TLS authentication when connecting to Pulsar, you need to add <code>ssl</code> in the connection URLs, and the default port is <code>6651</code>. The following is an example.</p>
 <pre><code class="hljs css language-cpp">ClientConfiguration config = ClientConfiguration();
@@ -555,7 +576,7 @@ client.subscribe(<span class="hljs-string">"topic-avro"</span>, <span class="hlj
 ​
 4. Create a consumer to receive a `User` instance.
 ​c++ ConsumerConfiguration consumerConf; consumerConf.setSchema(createProtobufNativeSchema(User::GetDescriptor())); consumerConf.setSubscriptionInitialPosition(InitialPositionEarliest); Consumer consumer; client.subscribe(&quot;topic-protobuf&quot;, &quot;my-sub&quot;, consumerConf, consumer); Message msg; consumer.receive(msg); User user2; user2.ParseFromArray(msg.getData(), msg.getLength()); ```</code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/client-libraries-python"><span class="arrow-prev">← </span><span>Python</span></a><a class="docs-next button" href="/docs/fr/next/client-libraries-node"><span>Node.js</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#supported-platforms">Supported platforms</a></li><li><a href="#system-requirements">System requir [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/client-libraries-python"><span class="arrow-prev">← </span><span>Python</span></a><a class="docs-next button" href="/docs/fr/next/client-libraries-node"><span>Node.js</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#supported-platforms">Supported platforms</a></li><li><a href="#system-requirements">System requir [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/fr/next/client-libraries-dotnet.html b/content/docs/fr/next/client-libraries-dotnet.html
index 2c7df58..6f63cce 100644
--- a/content/docs/fr/next/client-libraries-dotnet.html
+++ b/content/docs/fr/next/client-libraries-dotnet.html
@@ -243,10 +243,7 @@ metadata[<span class="hljs-string">"SomeKey"</span>] = <span class="hljs-string"
 <p>Messages can be acknowledged individually or cumulatively. For details about message acknowledgement, see <a href="/docs/fr/next/concepts-messaging#acknowledgement">acknowledgement</a>.</p>
 <ul>
 <li><p>Acknowledge messages individually.</p>
-<pre><code class="hljs css language-c#"><span class="hljs-keyword">await</span> <span class="hljs-keyword">foreach</span> (<span class="hljs-keyword">var</span> message <span class="hljs-keyword">in</span> consumer.Messages())
-{
-    Console.WriteLine(<span class="hljs-string">"Received: "</span> + Encoding.UTF8.GetString(message.Data.ToArray()));
-}
+<pre><code class="hljs css language-c#"><span class="hljs-keyword">await</span> consumer.Acknowledge(message);
 </code></pre></li>
 <li><p>Acknowledge messages cumulatively.</p>
 <pre><code class="hljs css language-c#"><span class="hljs-keyword">await</span> consumer.AcknowledgeCumulative(message);
diff --git a/content/docs/fr/next/client-libraries-dotnet/index.html b/content/docs/fr/next/client-libraries-dotnet/index.html
index 2c7df58..6f63cce 100644
--- a/content/docs/fr/next/client-libraries-dotnet/index.html
+++ b/content/docs/fr/next/client-libraries-dotnet/index.html
@@ -243,10 +243,7 @@ metadata[<span class="hljs-string">"SomeKey"</span>] = <span class="hljs-string"
 <p>Messages can be acknowledged individually or cumulatively. For details about message acknowledgement, see <a href="/docs/fr/next/concepts-messaging#acknowledgement">acknowledgement</a>.</p>
 <ul>
 <li><p>Acknowledge messages individually.</p>
-<pre><code class="hljs css language-c#"><span class="hljs-keyword">await</span> <span class="hljs-keyword">foreach</span> (<span class="hljs-keyword">var</span> message <span class="hljs-keyword">in</span> consumer.Messages())
-{
-    Console.WriteLine(<span class="hljs-string">"Received: "</span> + Encoding.UTF8.GetString(message.Data.ToArray()));
-}
+<pre><code class="hljs css language-c#"><span class="hljs-keyword">await</span> consumer.Acknowledge(message);
 </code></pre></li>
 <li><p>Acknowledge messages cumulatively.</p>
 <pre><code class="hljs css language-c#"><span class="hljs-keyword">await</span> consumer.AcknowledgeCumulative(message);
diff --git a/content/docs/fr/next/client-libraries-java.html b/content/docs/fr/next/client-libraries-java.html
index 4508302..6e117cf 100644
--- a/content/docs/fr/next/client-libraries-java.html
+++ b/content/docs/fr/next/client-libraries-java.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="fr"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar Java client · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="You can use a Pulsar Java client to create the Java [producer](#producer), [consumer](#consumer), and [readers](#reader) of messages and to perform [administrative tasks](/docs/fr [...]
+<!DOCTYPE html><html lang="fr"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar Java client · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="You can use a Pulsar Java client to create the Java [producer](#producer), [consumer](#consumer), [readers](#reader) and [TableView](#tableview) of messages and to perform [admini [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,8 +74,8 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/fr" target="_blank" rel="noreferrer noopener">Translate</a><h1 id="__docusaurus" class="postHeaderTitle">Pulsar Java client</h1></header><article><div><span><p>You can use a Pulsar Java client to create the Java <a href="#producer">producer</a>, <a href="#consumer" [...]
-<p>All the methods in <a href="#producer">producer</a>, <a href="#consumer">consumer</a>, and <a href="#reader">reader</a> of a Java client are thread-safe.</p>
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/fr" target="_blank" rel="noreferrer noopener">Translate</a><h1 id="__docusaurus" class="postHeaderTitle">Pulsar Java client</h1></header><article><div><span><p>You can use a Pulsar Java client to create the Java <a href="#producer">producer</a>, <a href="#consumer" [...]
+<p>All the methods in <a href="#producer">producer</a>, <a href="#consumer">consumer</a>, <a href="#reader">readers</a> and <a href="#tableview">TableView</a> of a Java client are thread-safe.</p>
 <p>Javadoc for the Pulsar client is divided into two domains by package as follows.</p>
 <table>
 <thead>
@@ -249,7 +249,7 @@ Available options are as follows:</li>
 <ul>
 <li><p><strong>FAIL</strong>: if encryption fails, unencrypted messages fail to send.</p></li>
 <li><p><strong>SEND</strong>: if encryption fails, unencrypted messages are sent. |
-<code>ProducerCryptoFailureAction.FAIL</code> <code>batchingMaxPublishDelayMicros</code>| long|Batching time period of sending messages.|TimeUnit.MILLISECONDS.toMicros(1) <code>batchingMaxMessages</code> |int|The maximum number of messages permitted in a batch.|1000 <code>batchingEnabled</code>| boolean|Enable batching of messages. |true <code>compressionType</code>|CompressionType|Message data compression type used by a producer.<br>
+<code>ProducerCryptoFailureAction.FAIL</code> <code>batchingMaxPublishDelayMicros</code>| long|Batching time period of sending messages.|TimeUnit.MILLISECONDS.toMicros(1) <code>batchingMaxMessages</code> |int|The maximum number of messages permitted in a batch.|1000 <code>batchingEnabled</code>| boolean|Enable batching of messages. |true <code>chunkingEnabled</code> | boolean | Enable chunking of messages. |false <code>compressionType</code>|CompressionType|Message data compression type  [...]
 Available options:</p></li>
 <li><p><a href="https://github.com/lz4/lz4"><code>LZ4</code></a></p></li>
 <li><p><a href="https://zlib.net/"><code>ZLIB</code></a></p>
@@ -288,6 +288,18 @@ You can configure parameters if you do not want to use the default configuration
     .send();
 </code></pre>
 <p>You can terminate the builder chain with <code>sendAsync()</code> and get a future return.</p>
+<h3><a class="anchor" aria-hidden="true" id="enable-chunking"></a><a href="#enable-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>Message <a href="/docs/fr/next/concepts-messaging#chunking">chunking</a> enables Pulsar to process large payload messages by splitting the message into chunks at the producer side and aggregating chunked messages at the consumer side.</p>
+<p>The message chunking feature is OFF by default. The following is an example about how to enable message chunking when creating a producer.</p>
+<pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
+        .topic(topic)
+        .enableChunking(<span class="hljs-keyword">true</span>)
+        .enableBatching(<span class="hljs-keyword">false</span>)
+        .create();
+</code></pre>
+<blockquote>
+<p><strong>Note:</strong> To enable chunking, you need to disable batching (<code>enableBatching</code>=<code>false</code>) concurrently.</p>
+</blockquote>
 <h2><a class="anchor" aria-hidden="true" id="consumer"></a><a href="#consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 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>Dans Pulsar, les consommateurs s'abonnent à des topics et traitent les messages que les producteurs publient sur ces topics. Vous pouvez instancier un nouveau <a href="/docs/fr/next/reference-terminology#consumer">consommateur</a> en instanciant d'abord un objet <a href="https://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
  et en lui passant l'URL d'un broker Pulsar (comme <a href="#client-configuration">ci-dessus</a>).</p>
@@ -415,7 +427,7 @@ To set a custom dead letter topic name:
   
 When specifying the dead letter policy while not specifying `ackTimeoutMillis`, you can set the ack timeout to 30000 millisecond.|None `autoUpdatePartitions`|boolean|If `autoUpdatePartitions` is enabled, a consumer subscribes to partition increasement automatically.  
   
-**Note**: this is only for partitioned consumers.|true `replicateSubscriptionState`|boolean|If `replicateSubscriptionState` is enabled, a subscription state is replicated to geo-replicated clusters.|false `negativeAckRedeliveryBackoff`|NegativeAckRedeliveryBackoff|Interface for custom message is negativeAcked policy. You can specify `NegativeAckRedeliveryBackoff` for a consumer.| `NegativeAckRedeliveryExponentialBackoff`
+**Note**: this is only for partitioned consumers.|true `replicateSubscriptionState`|boolean|If `replicateSubscriptionState` is enabled, a subscription state is replicated to geo-replicated clusters.|false `negativeAckRedeliveryBackoff`|RedeliveryBackoff|Interface for custom message is negativeAcked policy. You can specify `RedeliveryBackoff` for a consumer.| `MultiplierRedeliveryBackoff` `ackTimeoutRedeliveryBackoff`|RedeliveryBackoff|Interface for custom message is ackTimeout policy. Yo [...]
 
 You can configure parameters if you do not want to use the default configuration. For a full list, see the Javadoc for the {@inject: javadoc:ConsumerBuilder:/client/org/apache/pulsar/client/api/ConsumerBuilder} class.
 
@@ -484,22 +496,68 @@ consumer.acknowledge(messages)
 &gt;     .build();
 &gt; ```
 
+### Configure chunking
+
+You can limit the maximum number of chunked messages a consumer maintains concurrently by configuring the `maxPendingChunkedMessage` and `autoAckOldestChunkedMessageOnQueueFull` parameters. When the threshold is reached, the consumer drops pending messages by silently acknowledging them or asking the broker to redeliver them later. The `expireTimeOfIncompleteChunkedMessage` parameter decides the time interval to expire incomplete chunks if the consumer fails to receive all chunks of a me [...]
+
+The following is an example of how to configure message chunking.
+
+```java
+Consumer&lt;byte[]&gt; consumer = client.newConsumer()
+        .topic(topic)
+        .subscriptionName(&quot;test&quot;)
+        .autoAckOldestChunkedMessageOnQueueFull(true)
+        .maxPendingChunkedMessage(100)
+        .expireTimeOfIncompleteChunkedMessage(10, TimeUnit.MINUTES)
+        .subscribe();
+```
+
 ### Negative acknowledgment redelivery backoff
 
-The `NegativeAckRedeliveryBackoff` introduces a redelivery backoff mechanism. You can achieve redelivery with different delays by setting `redeliveryCount` of messages.
+The `RedeliveryBackoff` introduces a redelivery backoff mechanism. You can achieve redelivery with different delays by setting `redeliveryCount` of messages.
+
+```java
+Consumer consumer =  client.newConsumer()
+        .topic(&quot;my-topic&quot;)
+        .subscriptionName(&quot;my-subscription&quot;)
+        .negativeAckRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+                .minDelayMs(1000)
+                .maxDelayMs(60 * 1000)
+                .build())
+        .subscribe();
+```
+
+### Acknowledgement timeout redelivery backoff
+
+The `RedeliveryBackoff` introduces a redelivery backoff mechanism. You can redeliver messages with different delays by setting the number of times the messages is retried.
 
 ```java
 Consumer consumer =  client.newConsumer()
         .topic(&quot;my-topic&quot;)
         .subscriptionName(&quot;my-subscription&quot;)
-        .negativeAckRedeliveryBackoff(NegativeAckRedeliveryExponentialBackoff.builder()
-                .minNackTimeMs(1000)
-                .maxNackTimeMs(60 * 1000)
+        .ackTimeout(10, TimeUnit.SECOND)
+        .ackTimeoutRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+                .minDelayMs(1000)
+                .maxDelayMs(60000)
+                .multiplier(2)
                 .build())
         .subscribe();
 ```
 
-&gt; **Note** - The `negativeAckRedeliveryBackoff` does not work with `consumer.negativeAcknowledge(MessageId messageId)` because you are not able to get the redelivery count from the message ID. - If a consumer crashes, it triggers the redelivery of unacked messages. In this case, `NegativeAckRedeliveryBackoff` does not take effect and the messages might get redelivered earlier than the delay time from the backoff.
+The message redelivery behavior should be as follows.
+
+| Redelivery count | Redelivery delay |
+|:---------------- |:---------------- |
+| 1                | 10 + 1 seconds   |
+| 2                | 10 + 2 seconds   |
+| 3                | 10 + 4 seconds   |
+| 4                | 10 + 8 seconds   |
+| 5                | 10 + 16 seconds  |
+| 6                | 10 + 32 seconds  |
+| 7                | 10 + 60 seconds  |
+| 8                | 10 + 60 seconds  |
+
+&gt; **Note** - The `negativeAckRedeliveryBackoff` does not work with `consumer.negativeAcknowledge(MessageId messageId)` because you are not able to get the redelivery count from the message ID. - If a consumer crashes, it triggers the redelivery of unacked messages. In this case, `RedeliveryBackoff` does not take effect and the messages might get redelivered earlier than the delay time from the backoff.
 
 ### Abonnements multi-topics
 
@@ -853,6 +911,40 @@ pulsarClient.newReader()
 
 Total hash range size is 65536, so the max end of the range should be less than or equal to 65535.
 
+## TableView
+
+The TableView interface serves an encapsulated access pattern, providing a continuously updated key-value map view of the compacted topic data. Messages without keys will be ignored.
+
+With TableView, Pulsar clients can fetch all the message updates from a topic and construct a map with the latest values of each key. These values can then be used to build a local cache of data. In addition, you can register consumers with the TableView by specifying a listener to perform a scan of the map and then receive notifications when new messages are received. Consequently, event handling can be triggered to serve use cases, such as event-driven applications and message monitoring.
+
+&gt; **Note:** Each TableView uses one Reader instance per partition, and reads the topic starting from the compacted view by default. It is highly recommended to enable automatic compaction by [configuring the topic compaction policies](/docs/fr/next/cookbooks-compaction#configuring-compaction-to-run-automatically) for the given topic or namespace. More frequent compaction results in shorter startup times because less data is replayed to reconstruct the TableView of the topic.
+
+The following figure illustrates the dynamic construction of a TableView updated with newer values of each key. ![TableView](/docs/assets/tableview.png)
+
+### Configure TableView
+
+The following is an example of how to configure a TableView.
+
+    try (TableView&lt;String&gt; tv = client.newTableViewBuilder(Schema.STRING)
+      .topic(&quot;tableview-test&quot;)
+      .create()) {
+        String value = tv.get(&quot;my-key&quot;);
+        System.out.println(&quot;Key's value: &quot; + value);
+    }
+    
+
+You can use the available parameters in the `loadConf` configuration or related [API](https://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/TableViewBuilder.html) to customize your TableView.
+
+| Name | Type| Required? |
+
+&lt;div style=&quot;width:300px&quot;&gt;
+  Description
+&lt;/div&gt;
+| Default                                                                                                     |
+| ----------------------------------------------------------------------------------------------------------- |
+| `topic` | string | yes | The topic name of the TableView. | N/A                                             |
+| `autoUpdatePartitionInterval` | int | no | The interval to check for newly added partitions. | 60 (seconds) |
+
 ## Schema
 
 In Pulsar, all message data consists of byte arrays &quot;under the hood.&quot; [Message schemas](/docs/fr/next/schema-get-started) enable you to use other types of data when constructing and handling messages (from simple types like strings to more complex, application-specific types). If you construct, say, a [producer](#producer) without specifying a schema, then the producer can only produce messages of type `byte[]`. The following is an example.
@@ -1037,7 +1129,7 @@ PulsarClient client = PulsarClient.builder()
     .authentication(auth)
     .build();
 ```</code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/client-libraries"><span class="arrow-prev">← </span><span>Overview</span></a><a class="docs-next button" href="/docs/fr/next/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven">Maven</a></li><li><a href="#gradl [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/client-libraries"><span class="arrow-prev">← </span><span>Overview</span></a><a class="docs-next button" href="/docs/fr/next/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven">Maven</a></li><li><a href="#gradl [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/fr/next/client-libraries-java/index.html b/content/docs/fr/next/client-libraries-java/index.html
index 4508302..6e117cf 100644
--- a/content/docs/fr/next/client-libraries-java/index.html
+++ b/content/docs/fr/next/client-libraries-java/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="fr"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar Java client · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="You can use a Pulsar Java client to create the Java [producer](#producer), [consumer](#consumer), and [readers](#reader) of messages and to perform [administrative tasks](/docs/fr [...]
+<!DOCTYPE html><html lang="fr"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar Java client · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="You can use a Pulsar Java client to create the Java [producer](#producer), [consumer](#consumer), [readers](#reader) and [TableView](#tableview) of messages and to perform [admini [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,8 +74,8 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/fr" target="_blank" rel="noreferrer noopener">Translate</a><h1 id="__docusaurus" class="postHeaderTitle">Pulsar Java client</h1></header><article><div><span><p>You can use a Pulsar Java client to create the Java <a href="#producer">producer</a>, <a href="#consumer" [...]
-<p>All the methods in <a href="#producer">producer</a>, <a href="#consumer">consumer</a>, and <a href="#reader">reader</a> of a Java client are thread-safe.</p>
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/fr" target="_blank" rel="noreferrer noopener">Translate</a><h1 id="__docusaurus" class="postHeaderTitle">Pulsar Java client</h1></header><article><div><span><p>You can use a Pulsar Java client to create the Java <a href="#producer">producer</a>, <a href="#consumer" [...]
+<p>All the methods in <a href="#producer">producer</a>, <a href="#consumer">consumer</a>, <a href="#reader">readers</a> and <a href="#tableview">TableView</a> of a Java client are thread-safe.</p>
 <p>Javadoc for the Pulsar client is divided into two domains by package as follows.</p>
 <table>
 <thead>
@@ -249,7 +249,7 @@ Available options are as follows:</li>
 <ul>
 <li><p><strong>FAIL</strong>: if encryption fails, unencrypted messages fail to send.</p></li>
 <li><p><strong>SEND</strong>: if encryption fails, unencrypted messages are sent. |
-<code>ProducerCryptoFailureAction.FAIL</code> <code>batchingMaxPublishDelayMicros</code>| long|Batching time period of sending messages.|TimeUnit.MILLISECONDS.toMicros(1) <code>batchingMaxMessages</code> |int|The maximum number of messages permitted in a batch.|1000 <code>batchingEnabled</code>| boolean|Enable batching of messages. |true <code>compressionType</code>|CompressionType|Message data compression type used by a producer.<br>
+<code>ProducerCryptoFailureAction.FAIL</code> <code>batchingMaxPublishDelayMicros</code>| long|Batching time period of sending messages.|TimeUnit.MILLISECONDS.toMicros(1) <code>batchingMaxMessages</code> |int|The maximum number of messages permitted in a batch.|1000 <code>batchingEnabled</code>| boolean|Enable batching of messages. |true <code>chunkingEnabled</code> | boolean | Enable chunking of messages. |false <code>compressionType</code>|CompressionType|Message data compression type  [...]
 Available options:</p></li>
 <li><p><a href="https://github.com/lz4/lz4"><code>LZ4</code></a></p></li>
 <li><p><a href="https://zlib.net/"><code>ZLIB</code></a></p>
@@ -288,6 +288,18 @@ You can configure parameters if you do not want to use the default configuration
     .send();
 </code></pre>
 <p>You can terminate the builder chain with <code>sendAsync()</code> and get a future return.</p>
+<h3><a class="anchor" aria-hidden="true" id="enable-chunking"></a><a href="#enable-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>Message <a href="/docs/fr/next/concepts-messaging#chunking">chunking</a> enables Pulsar to process large payload messages by splitting the message into chunks at the producer side and aggregating chunked messages at the consumer side.</p>
+<p>The message chunking feature is OFF by default. The following is an example about how to enable message chunking when creating a producer.</p>
+<pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
+        .topic(topic)
+        .enableChunking(<span class="hljs-keyword">true</span>)
+        .enableBatching(<span class="hljs-keyword">false</span>)
+        .create();
+</code></pre>
+<blockquote>
+<p><strong>Note:</strong> To enable chunking, you need to disable batching (<code>enableBatching</code>=<code>false</code>) concurrently.</p>
+</blockquote>
 <h2><a class="anchor" aria-hidden="true" id="consumer"></a><a href="#consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 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>Dans Pulsar, les consommateurs s'abonnent à des topics et traitent les messages que les producteurs publient sur ces topics. Vous pouvez instancier un nouveau <a href="/docs/fr/next/reference-terminology#consumer">consommateur</a> en instanciant d'abord un objet <a href="https://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
  et en lui passant l'URL d'un broker Pulsar (comme <a href="#client-configuration">ci-dessus</a>).</p>
@@ -415,7 +427,7 @@ To set a custom dead letter topic name:
   
 When specifying the dead letter policy while not specifying `ackTimeoutMillis`, you can set the ack timeout to 30000 millisecond.|None `autoUpdatePartitions`|boolean|If `autoUpdatePartitions` is enabled, a consumer subscribes to partition increasement automatically.  
   
-**Note**: this is only for partitioned consumers.|true `replicateSubscriptionState`|boolean|If `replicateSubscriptionState` is enabled, a subscription state is replicated to geo-replicated clusters.|false `negativeAckRedeliveryBackoff`|NegativeAckRedeliveryBackoff|Interface for custom message is negativeAcked policy. You can specify `NegativeAckRedeliveryBackoff` for a consumer.| `NegativeAckRedeliveryExponentialBackoff`
+**Note**: this is only for partitioned consumers.|true `replicateSubscriptionState`|boolean|If `replicateSubscriptionState` is enabled, a subscription state is replicated to geo-replicated clusters.|false `negativeAckRedeliveryBackoff`|RedeliveryBackoff|Interface for custom message is negativeAcked policy. You can specify `RedeliveryBackoff` for a consumer.| `MultiplierRedeliveryBackoff` `ackTimeoutRedeliveryBackoff`|RedeliveryBackoff|Interface for custom message is ackTimeout policy. Yo [...]
 
 You can configure parameters if you do not want to use the default configuration. For a full list, see the Javadoc for the {@inject: javadoc:ConsumerBuilder:/client/org/apache/pulsar/client/api/ConsumerBuilder} class.
 
@@ -484,22 +496,68 @@ consumer.acknowledge(messages)
 &gt;     .build();
 &gt; ```
 
+### Configure chunking
+
+You can limit the maximum number of chunked messages a consumer maintains concurrently by configuring the `maxPendingChunkedMessage` and `autoAckOldestChunkedMessageOnQueueFull` parameters. When the threshold is reached, the consumer drops pending messages by silently acknowledging them or asking the broker to redeliver them later. The `expireTimeOfIncompleteChunkedMessage` parameter decides the time interval to expire incomplete chunks if the consumer fails to receive all chunks of a me [...]
+
+The following is an example of how to configure message chunking.
+
+```java
+Consumer&lt;byte[]&gt; consumer = client.newConsumer()
+        .topic(topic)
+        .subscriptionName(&quot;test&quot;)
+        .autoAckOldestChunkedMessageOnQueueFull(true)
+        .maxPendingChunkedMessage(100)
+        .expireTimeOfIncompleteChunkedMessage(10, TimeUnit.MINUTES)
+        .subscribe();
+```
+
 ### Negative acknowledgment redelivery backoff
 
-The `NegativeAckRedeliveryBackoff` introduces a redelivery backoff mechanism. You can achieve redelivery with different delays by setting `redeliveryCount` of messages.
+The `RedeliveryBackoff` introduces a redelivery backoff mechanism. You can achieve redelivery with different delays by setting `redeliveryCount` of messages.
+
+```java
+Consumer consumer =  client.newConsumer()
+        .topic(&quot;my-topic&quot;)
+        .subscriptionName(&quot;my-subscription&quot;)
+        .negativeAckRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+                .minDelayMs(1000)
+                .maxDelayMs(60 * 1000)
+                .build())
+        .subscribe();
+```
+
+### Acknowledgement timeout redelivery backoff
+
+The `RedeliveryBackoff` introduces a redelivery backoff mechanism. You can redeliver messages with different delays by setting the number of times the messages is retried.
 
 ```java
 Consumer consumer =  client.newConsumer()
         .topic(&quot;my-topic&quot;)
         .subscriptionName(&quot;my-subscription&quot;)
-        .negativeAckRedeliveryBackoff(NegativeAckRedeliveryExponentialBackoff.builder()
-                .minNackTimeMs(1000)
-                .maxNackTimeMs(60 * 1000)
+        .ackTimeout(10, TimeUnit.SECOND)
+        .ackTimeoutRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+                .minDelayMs(1000)
+                .maxDelayMs(60000)
+                .multiplier(2)
                 .build())
         .subscribe();
 ```
 
-&gt; **Note** - The `negativeAckRedeliveryBackoff` does not work with `consumer.negativeAcknowledge(MessageId messageId)` because you are not able to get the redelivery count from the message ID. - If a consumer crashes, it triggers the redelivery of unacked messages. In this case, `NegativeAckRedeliveryBackoff` does not take effect and the messages might get redelivered earlier than the delay time from the backoff.
+The message redelivery behavior should be as follows.
+
+| Redelivery count | Redelivery delay |
+|:---------------- |:---------------- |
+| 1                | 10 + 1 seconds   |
+| 2                | 10 + 2 seconds   |
+| 3                | 10 + 4 seconds   |
+| 4                | 10 + 8 seconds   |
+| 5                | 10 + 16 seconds  |
+| 6                | 10 + 32 seconds  |
+| 7                | 10 + 60 seconds  |
+| 8                | 10 + 60 seconds  |
+
+&gt; **Note** - The `negativeAckRedeliveryBackoff` does not work with `consumer.negativeAcknowledge(MessageId messageId)` because you are not able to get the redelivery count from the message ID. - If a consumer crashes, it triggers the redelivery of unacked messages. In this case, `RedeliveryBackoff` does not take effect and the messages might get redelivered earlier than the delay time from the backoff.
 
 ### Abonnements multi-topics
 
@@ -853,6 +911,40 @@ pulsarClient.newReader()
 
 Total hash range size is 65536, so the max end of the range should be less than or equal to 65535.
 
+## TableView
+
+The TableView interface serves an encapsulated access pattern, providing a continuously updated key-value map view of the compacted topic data. Messages without keys will be ignored.
+
+With TableView, Pulsar clients can fetch all the message updates from a topic and construct a map with the latest values of each key. These values can then be used to build a local cache of data. In addition, you can register consumers with the TableView by specifying a listener to perform a scan of the map and then receive notifications when new messages are received. Consequently, event handling can be triggered to serve use cases, such as event-driven applications and message monitoring.
+
+&gt; **Note:** Each TableView uses one Reader instance per partition, and reads the topic starting from the compacted view by default. It is highly recommended to enable automatic compaction by [configuring the topic compaction policies](/docs/fr/next/cookbooks-compaction#configuring-compaction-to-run-automatically) for the given topic or namespace. More frequent compaction results in shorter startup times because less data is replayed to reconstruct the TableView of the topic.
+
+The following figure illustrates the dynamic construction of a TableView updated with newer values of each key. ![TableView](/docs/assets/tableview.png)
+
+### Configure TableView
+
+The following is an example of how to configure a TableView.
+
+    try (TableView&lt;String&gt; tv = client.newTableViewBuilder(Schema.STRING)
+      .topic(&quot;tableview-test&quot;)
+      .create()) {
+        String value = tv.get(&quot;my-key&quot;);
+        System.out.println(&quot;Key's value: &quot; + value);
+    }
+    
+
+You can use the available parameters in the `loadConf` configuration or related [API](https://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/TableViewBuilder.html) to customize your TableView.
+
+| Name | Type| Required? |
+
+&lt;div style=&quot;width:300px&quot;&gt;
+  Description
+&lt;/div&gt;
+| Default                                                                                                     |
+| ----------------------------------------------------------------------------------------------------------- |
+| `topic` | string | yes | The topic name of the TableView. | N/A                                             |
+| `autoUpdatePartitionInterval` | int | no | The interval to check for newly added partitions. | 60 (seconds) |
+
 ## Schema
 
 In Pulsar, all message data consists of byte arrays &quot;under the hood.&quot; [Message schemas](/docs/fr/next/schema-get-started) enable you to use other types of data when constructing and handling messages (from simple types like strings to more complex, application-specific types). If you construct, say, a [producer](#producer) without specifying a schema, then the producer can only produce messages of type `byte[]`. The following is an example.
@@ -1037,7 +1129,7 @@ PulsarClient client = PulsarClient.builder()
     .authentication(auth)
     .build();
 ```</code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/client-libraries"><span class="arrow-prev">← </span><span>Overview</span></a><a class="docs-next button" href="/docs/fr/next/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven">Maven</a></li><li><a href="#gradl [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/client-libraries"><span class="arrow-prev">← </span><span>Overview</span></a><a class="docs-next button" href="/docs/fr/next/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven">Maven</a></li><li><a href="#gradl [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/fr/next/client-libraries-websocket.html b/content/docs/fr/next/client-libraries-websocket.html
index 20b85ea0..1da1ab8a 100644
--- a/content/docs/fr/next/client-libraries-websocket.html
+++ b/content/docs/fr/next/client-libraries-websocket.html
@@ -92,12 +92,12 @@
 <h3><a class="anchor" aria-hidden="true" id="as-a-separate-component"></a><a href="#as-a-separate-component" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
 <p>In this mode, the WebSocket service will be run from a Pulsar <a href="/docs/fr/next/reference-terminology#broker">broker</a> as a separate service. Configuration for this mode is handled in the <a href="/docs/fr/next/reference-configuration#websocket"><code>conf/websocket.conf</code></a> configuration file. You'll need to set <em>at least</em> the following parameters:</p>
 <ul>
-<li><a href="/docs/fr/next/reference-configuration#websocket-configurationStoreServers"><code>configurationStoreServers</code></a></li>
+<li><a href="/docs/fr/next/reference-configuration#websocket"><code>configurationMetadataStoreUrl</code></a></li>
 <li><a href="/docs/fr/next/reference-configuration#websocket-webServicePort"><code>webServicePort</code></a></li>
 <li><a href="/docs/fr/next/reference-configuration#websocket-clusterName"><code>clusterName</code></a></li>
 </ul>
 <p>Here's an example:</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>
+<pre><code class="hljs css language-properties"><span class="hljs-attr">configurationMetadataStoreUrl</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>
 </code></pre>
diff --git a/content/docs/fr/next/client-libraries-websocket/index.html b/content/docs/fr/next/client-libraries-websocket/index.html
index 20b85ea0..1da1ab8a 100644
--- a/content/docs/fr/next/client-libraries-websocket/index.html
+++ b/content/docs/fr/next/client-libraries-websocket/index.html
@@ -92,12 +92,12 @@
 <h3><a class="anchor" aria-hidden="true" id="as-a-separate-component"></a><a href="#as-a-separate-component" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
 <p>In this mode, the WebSocket service will be run from a Pulsar <a href="/docs/fr/next/reference-terminology#broker">broker</a> as a separate service. Configuration for this mode is handled in the <a href="/docs/fr/next/reference-configuration#websocket"><code>conf/websocket.conf</code></a> configuration file. You'll need to set <em>at least</em> the following parameters:</p>
 <ul>
-<li><a href="/docs/fr/next/reference-configuration#websocket-configurationStoreServers"><code>configurationStoreServers</code></a></li>
+<li><a href="/docs/fr/next/reference-configuration#websocket"><code>configurationMetadataStoreUrl</code></a></li>
 <li><a href="/docs/fr/next/reference-configuration#websocket-webServicePort"><code>webServicePort</code></a></li>
 <li><a href="/docs/fr/next/reference-configuration#websocket-clusterName"><code>clusterName</code></a></li>
 </ul>
 <p>Here's an example:</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>
+<pre><code class="hljs css language-properties"><span class="hljs-attr">configurationMetadataStoreUrl</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>
 </code></pre>
diff --git a/content/docs/fr/next/client-libraries.html b/content/docs/fr/next/client-libraries.html
index 7c194e7..083f7c8 100644
--- a/content/docs/fr/next/client-libraries.html
+++ b/content/docs/fr/next/client-libraries.html
@@ -85,7 +85,7 @@
 <li><a href="/docs/fr/next/client-libraries-dotnet">C# client</a></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="feature-matrix"></a><a href="#feature-matrix" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>Pulsar client feature matrix for different languages is listed on <a href="https://github.com/apache/pulsar/wiki/PIP-108%3A-Pulsar-Feature-Matrix-%28Client-and-Function%29">Pulsar Feature Matrix (Client and Function)</a> page.</p>
+<p>Pulsar client feature matrix for different languages is listed on <a href="https://docs.google.com/spreadsheets/d/1YHYTkIXR8-Ql103u-IMI18TXLlGStK8uJjDsOOA0T20/edit#gid=1784579914">Pulsar Feature Matrix (Client and Function)</a> page.</p>
 <h2><a class="anchor" aria-hidden="true" id="third-party-clients"></a><a href="#third-party-clients" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
 <p>Besides the official released clients, multiple projects on developing Pulsar clients are available in different languages.</p>
 <blockquote>
diff --git a/content/docs/fr/next/client-libraries/index.html b/content/docs/fr/next/client-libraries/index.html
index 7c194e7..083f7c8 100644
--- a/content/docs/fr/next/client-libraries/index.html
+++ b/content/docs/fr/next/client-libraries/index.html
@@ -85,7 +85,7 @@
 <li><a href="/docs/fr/next/client-libraries-dotnet">C# client</a></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="feature-matrix"></a><a href="#feature-matrix" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>Pulsar client feature matrix for different languages is listed on <a href="https://github.com/apache/pulsar/wiki/PIP-108%3A-Pulsar-Feature-Matrix-%28Client-and-Function%29">Pulsar Feature Matrix (Client and Function)</a> page.</p>
+<p>Pulsar client feature matrix for different languages is listed on <a href="https://docs.google.com/spreadsheets/d/1YHYTkIXR8-Ql103u-IMI18TXLlGStK8uJjDsOOA0T20/edit#gid=1784579914">Pulsar Feature Matrix (Client and Function)</a> page.</p>
 <h2><a class="anchor" aria-hidden="true" id="third-party-clients"></a><a href="#third-party-clients" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
 <p>Besides the official released clients, multiple projects on developing Pulsar clients are available in different languages.</p>
 <blockquote>
diff --git a/content/docs/fr/next/concepts-architecture-overview.html b/content/docs/fr/next/concepts-architecture-overview.html
index 55a8ba0..6b9b0f1 100644
--- a/content/docs/fr/next/concepts-architecture-overview.html
+++ b/content/docs/fr/next/concepts-architecture-overview.html
@@ -109,6 +109,9 @@
 </blockquote>
 <h2><a class="anchor" aria-hidden="true" id="metadata-store"></a><a href="#metadata-store" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>The Pulsar metadata store maintains all the metadata of a Pulsar cluster, such as topic metadata, schema, broker load data, and so on. Pulsar uses <a href="https://zookeeper.apache.org/">Apache ZooKeeper</a> for metadata storage, cluster configuration, and coordination. The Pulsar metadata store can be deployed on a separate ZooKeeper cluster or deployed on an existing ZooKeeper cluster. You can use one ZooKeeper cluster for both Pulsar metadata store and <a href="https://bookkeeper.a [...]
+<blockquote>
+<p>Pulsar also supports more metadata backend services, including <a href="https://etcd.io/">ETCD</a> and <a href="http://rocksdb.org/">RocksDB</a> (for standalone Pulsar only).</p>
+</blockquote>
 <p>In a Pulsar instance:</p>
 <ul>
 <li>A configuration store quorum stores configuration for tenants, namespaces, and other entities that need to be globally consistent.</li>
@@ -163,9 +166,10 @@
 <p>For the sake of performance and fault tolerance, you can run as many instances of the Pulsar proxy as you'd like.</p>
 </blockquote>
 <p>Architecturally, the Pulsar proxy gets all the information it requires from ZooKeeper. When starting the proxy on a machine, you only need to provide ZooKeeper connection strings for the cluster-specific and instance-wide configuration store clusters. Here's an example:</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
+<pre><code class="hljs css language-bash">$ <span class="hljs-built_in">cd</span> /path/to/pulsar/directory
+$ bin/pulsar proxy \
+  --metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181 \
+  --configuration-metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181
 </code></pre>
 <blockquote>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-proxy-docs"></a><a href="#pulsar-proxy-docs" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
diff --git a/content/docs/fr/next/concepts-architecture-overview/index.html b/content/docs/fr/next/concepts-architecture-overview/index.html
index 55a8ba0..6b9b0f1 100644
--- a/content/docs/fr/next/concepts-architecture-overview/index.html
+++ b/content/docs/fr/next/concepts-architecture-overview/index.html
@@ -109,6 +109,9 @@
 </blockquote>
 <h2><a class="anchor" aria-hidden="true" id="metadata-store"></a><a href="#metadata-store" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>The Pulsar metadata store maintains all the metadata of a Pulsar cluster, such as topic metadata, schema, broker load data, and so on. Pulsar uses <a href="https://zookeeper.apache.org/">Apache ZooKeeper</a> for metadata storage, cluster configuration, and coordination. The Pulsar metadata store can be deployed on a separate ZooKeeper cluster or deployed on an existing ZooKeeper cluster. You can use one ZooKeeper cluster for both Pulsar metadata store and <a href="https://bookkeeper.a [...]
+<blockquote>
+<p>Pulsar also supports more metadata backend services, including <a href="https://etcd.io/">ETCD</a> and <a href="http://rocksdb.org/">RocksDB</a> (for standalone Pulsar only).</p>
+</blockquote>
 <p>In a Pulsar instance:</p>
 <ul>
 <li>A configuration store quorum stores configuration for tenants, namespaces, and other entities that need to be globally consistent.</li>
@@ -163,9 +166,10 @@
 <p>For the sake of performance and fault tolerance, you can run as many instances of the Pulsar proxy as you'd like.</p>
 </blockquote>
 <p>Architecturally, the Pulsar proxy gets all the information it requires from ZooKeeper. When starting the proxy on a machine, you only need to provide ZooKeeper connection strings for the cluster-specific and instance-wide configuration store clusters. Here's an example:</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
+<pre><code class="hljs css language-bash">$ <span class="hljs-built_in">cd</span> /path/to/pulsar/directory
+$ bin/pulsar proxy \
+  --metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181 \
+  --configuration-metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181
 </code></pre>
 <blockquote>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-proxy-docs"></a><a href="#pulsar-proxy-docs" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
diff --git a/content/docs/fr/next/concepts-messaging.html b/content/docs/fr/next/concepts-messaging.html
index a215963..2490d38 100644
--- a/content/docs/fr/next/concepts-messaging.html
+++ b/content/docs/fr/next/concepts-messaging.html
@@ -149,16 +149,26 @@ nettyMaxFrameSizeBytes=5253120
 <p>To avoid redelivering acknowledged messages in a batch to the consumer, Pulsar introduces batch index acknowledgement since Pulsar 2.6.0. When batch index acknowledgement is enabled, the consumer filters out the batch index that has been acknowledged and sends the batch index acknowledgement request to the broker. The broker maintains the batch index acknowledgement status and tracks the acknowledgement status of each batch index to avoid dispatching acknowledged messages to the consu [...]
 <p>By default, batch index acknowledgement is disabled (<code>acknowledgmentAtBatchIndexLevelEnabled=false</code>). You can enable batch index acknowledgement by setting the <code>acknowledgmentAtBatchIndexLevelEnabled</code> parameter to <code>true</code> at the broker side. Enabling batch index acknowledgement results in more memory overheads.</p>
 <h3><a class="anchor" aria-hidden="true" id="chunking"></a><a href="#chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 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>Before you enable chunking, read the following instructions. - Batching and chunking cannot be enabled simultaneously. To enable chunking, you must disable batching in advance. - Chunking is only supported for persisted topics. - Chunking is only supported for Exclusive and Failover subscription types.</p>
-<p>When chunking is enabled (<code>chunkingEnabled=true</code>), if the message size is greater than the allowed maximum publish-payload size, the producer splits the original message into chunked messages and publishes them with chunked metadata to the broker separately and in order. At the broker side, the chunked messages are stored in the managed-ledger in the same way as that of ordinary messages. The only difference is that the consumer needs to buffer the chunked messages and comb [...]
-<p>The consumer consumes the chunked messages and buffers them until the consumer receives all the chunks of a message. And then the consumer stitches chunked messages together and places them into the receiver-queue. Clients consume messages from the receiver-queue. Once the consumer consumes the entire large message and acknowledges it, the consumer internally sends acknowledgement of all the chunk messages associated to that large message. You can set the <code>maxPendingChunkedMessag [...]
-<p>The broker does not require any changes to support chunking for non-shared subscription. The broker only uses <code>chunkedMessageRate</code> to record chunked message rate on the topic.</p>
-<h4><a class="anchor" aria-hidden="true" id="handle-chunked-messages-with-one-producer-and-one-ordered-consumer"></a><a href="#handle-chunked-messages-with-one-producer-and-one-ordered-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98  [...]
-<p>As shown in the following figure, when a topic has one producer which publishes large message payload in chunked messages along with regular non-chunked messages. The producer publishes message M1 in three chunks M1-C1, M1-C2 and M1-C3. The broker stores all the three chunked messages in the managed-ledger and dispatches to the ordered (exclusive/failover) consumer in the same order. The consumer buffers all the chunked messages in memory until it receives all the chunked messages, co [...]
+<p>Message chunking enables Pulsar to process large payload messages by splitting the message into chunks at the producer side and aggregating chunked messages at the consumer side.</p>
+<p>With message chunking enabled, when the size of a message exceeds the allowed maximum payload size (the <code>maxMessageSize</code> parameter of broker), the workflow of messaging is as follows: 1. The producer splits the original message into chunked messages and publishes them with chunked metadata to the broker separately and in order. 2. The broker stores the chunked messages in one managed-ledger in the same way as that of ordinary messages, and it uses the <code>chunkedMessageRa [...]
+<p><strong>Limitations:</strong> - Chunking is only available for persisted topics. - Chunking is only available for the exclusive and failover subscription types. - Chunking cannot be enabled simultaneously with batching.</p>
+<h4><a class="anchor" aria-hidden="true" id="handle-consecutive-chunked-messages-with-one-ordered-consumer"></a><a href="#handle-consecutive-chunked-messages-with-one-ordered-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-. [...]
+<p>The following figure shows a topic with one producer which publishes a large message payload in chunked messages along with regular non-chunked messages. The producer publishes message M1 in three chunks labeled M1-C1, M1-C2 and M1-C3. The broker stores all the three chunked messages in the managed-ledger and dispatches them to the ordered (exclusive/failover) consumer in the same order. The consumer buffers all the chunked messages in memory until it receives all the chunked messages [...]
 <p><img src="/docs/assets/chunking-01.png" alt=""></p>
-<h4><a class="anchor" aria-hidden="true" id="handle-chunked-messages-with-multiple-producers-and-one-ordered-consumer"></a><a href="#handle-chunked-messages-with-multiple-producers-and-one-ordered-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C1 [...]
-<p>When multiple publishers publish chunked messages into a single topic, the broker stores all the chunked messages coming from different publishers in the same managed-ledger. As shown below, Producer 1 publishes message M1 in three chunks M1-C1, M1-C2 and M1-C3. Producer 2 publishes message M2 in three chunks M2-C1, M2-C2 and M2-C3. All chunked messages of the specific message are still in order but might not be consecutive in the managed-ledger. This brings some memory pressure to th [...]
+<h4><a class="anchor" aria-hidden="true" id="handle-interwoven-chunked-messages-with-one-ordered-consumer"></a><a href="#handle-interwoven-chunked-messages-with-one-ordered-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 [...]
+<p>When multiple producers publish chunked messages into a single topic, the broker stores all the chunked messages coming from different producers in the same managed-ledger. The chunked messages in the managed-ledger can be interwoven with each other. As shown below, Producer 1 publishes message M1 in three chunks M1-C1, M1-C2 and M1-C3. Producer 2 publishes message M2 in three chunks M2-C1, M2-C2 and M2-C3. All chunked messages of the specific message are still in order but might not  [...]
 <p><img src="/docs/assets/chunking-02.png" alt=""></p>
+<blockquote>
+<p><strong>Note</strong>  <br>
+In this case, interwoven chunked messages may bring some memory pressure to the consumer because the consumer keeps a separate buffer for each large message to aggregate all its chunks in one message. You can limit the maximum number of chunked messages a consumer maintains concurrently by configuring the <code>maxPendingChunkedMessage</code> parameter. When the threshold is reached, the consumer drops pending messages by silently acknowledging them or asking the broker to redeliver them [...]
+</blockquote>
+<h4><a class="anchor" aria-hidden="true" id="enable-message-chunking"></a><a href="#enable-message-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 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><strong>Prerequisite:</strong> Disable batching by setting the <code>enableBatching</code> parameter to <code>false</code>.</p>
+<p>The message chunking feature is OFF by default. To enable message chunking, set the <code>chunkingEnabled</code> parameter to <code>true</code> when creating a producer.</p>
+<blockquote>
+<p><strong>Note</strong>  <br>
+If the consumer fails to receive all chunks of a message within a specified time period, it expires incomplete chunks. The default value is 1 minute. For more information about the <code>expireTimeOfIncompleteChunkedMessage</code> parameter, refer to <a href="https://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/">org.apache.pulsar.client.api</a>.</p>
+</blockquote>
 <h2><a class="anchor" aria-hidden="true" id="consumers"></a><a href="#consumers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
 <p>A consumer is a process that attaches to a topic via a subscription and then receives messages.</p>
 <p>A consumer sends a <a href="/docs/fr/next/develop-binary-protocol#flow-control">flow permit request</a> to a broker to get messages. There is a queue at the consumer side to receive messages pushed from the broker. You can configure the queue size with the <a href="/docs/fr/next/client-libraries-java#configure-consumer"><code>receiverQueueSize</code></a> parameter. The default size is <code>1000</code>). Each time <code>consumer.receive()</code> is called, a message is dequeued from t [...]
@@ -224,14 +234,38 @@ If batching is enabled, all messages in one batch are redelivered to the consume
 <p>It happens sometimes that consumers fail to process messages successfully. In this case, you can use <a href="#negative-acknowledgement">negative acknowledgement</a> to redeliver the messages after consumption failures. For the Shared subscription type, the messages are redelivered to other consumers; for other subscription types, the messages are redelivered to the same consumer.</p>
 <p>But this is not flexible enough. A better way is to use the <strong>redelivery backoff mechanism</strong>. You can redeliver messages with different delays by setting the number of times the messages are retried.</p>
 <p>Use the following API to enable <code>Negative Redelivery Backoff</code>.</p>
-<pre><code class="hljs css language-java">consumer.negativeAckRedeliveryBackoff(NegativeAckRedeliveryExponentialBackoff.builder()
-        .minNackTimeMs(<span class="hljs-number">1000</span>)
-        .maxNackTimeMs(<span class="hljs-number">60</span> * <span class="hljs-number">1000</span>)
+<pre><code class="hljs css language-java">consumer.negativeAckRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+        .minDelayMs(<span class="hljs-number">1000</span>)
+        .maxDelayMs(<span class="hljs-number">60</span> * <span class="hljs-number">1000</span>)
         .build())
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="acknowledgement-timeout"></a><a href="#acknowledgement-timeout" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 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>The acknowledgement timeout mechanism allows you to set a time range during which the client tracks the unacknowledged messages. After this acknowledgement timeout (<code>ackTimeout</code>) period, the client sends <code>redeliver unacknowledged messages</code> request to the broker, thus the broker resends the unacknowledged messages to the consumer.</p>
 <p>You can configure the acknowledgement timeout mechanism to redeliver the message if it is not acknowledged after <code>ackTimeout</code> or to execute a timer task to check the acknowledgement timeout messages during every <code>ackTimeoutTickTime</code> period.</p>
+<p>You can also use the redelivery backoff mechanism, redeliver messages with different delays by setting the number of times the messages is retried.</p>
+<p>If you want to use redelivery backoff, you can use the following API.</p>
+<pre><code class="hljs css language-java">consumer.ackTimeout(<span class="hljs-number">10</span>, TimeUnit.SECOND)
+        .ackTimeoutRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+        .minDelayMs(<span class="hljs-number">1000</span>)
+        .maxDelayMs(<span class="hljs-number">60000</span>)
+        .multiplier(<span class="hljs-number">2</span>).build())
+</code></pre>
+<p>The message redelivery behavior should be as follows.</p>
+<table>
+<thead>
+<tr><th style="text-align:left">Redelivery count</th><th style="text-align:left">Redelivery delay</th></tr>
+</thead>
+<tbody>
+<tr><td style="text-align:left">1</td><td style="text-align:left">10 + 1 seconds</td></tr>
+<tr><td style="text-align:left">2</td><td style="text-align:left">10 + 2 seconds</td></tr>
+<tr><td style="text-align:left">3</td><td style="text-align:left">10 + 4 seconds</td></tr>
+<tr><td style="text-align:left">4</td><td style="text-align:left">10 + 8 seconds</td></tr>
+<tr><td style="text-align:left">5</td><td style="text-align:left">10 + 16 seconds</td></tr>
+<tr><td style="text-align:left">6</td><td style="text-align:left">10 + 32 seconds</td></tr>
+<tr><td style="text-align:left">7</td><td style="text-align:left">10 + 60 seconds</td></tr>
+<tr><td style="text-align:left">8</td><td style="text-align:left">10 + 60 seconds</td></tr>
+</tbody>
+</table>
 <blockquote>
 <p><strong>Note</strong></p>
 <ul>
diff --git a/content/docs/fr/next/concepts-messaging/index.html b/content/docs/fr/next/concepts-messaging/index.html
index a215963..2490d38 100644
--- a/content/docs/fr/next/concepts-messaging/index.html
+++ b/content/docs/fr/next/concepts-messaging/index.html
@@ -149,16 +149,26 @@ nettyMaxFrameSizeBytes=5253120
 <p>To avoid redelivering acknowledged messages in a batch to the consumer, Pulsar introduces batch index acknowledgement since Pulsar 2.6.0. When batch index acknowledgement is enabled, the consumer filters out the batch index that has been acknowledged and sends the batch index acknowledgement request to the broker. The broker maintains the batch index acknowledgement status and tracks the acknowledgement status of each batch index to avoid dispatching acknowledged messages to the consu [...]
 <p>By default, batch index acknowledgement is disabled (<code>acknowledgmentAtBatchIndexLevelEnabled=false</code>). You can enable batch index acknowledgement by setting the <code>acknowledgmentAtBatchIndexLevelEnabled</code> parameter to <code>true</code> at the broker side. Enabling batch index acknowledgement results in more memory overheads.</p>
 <h3><a class="anchor" aria-hidden="true" id="chunking"></a><a href="#chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 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>Before you enable chunking, read the following instructions. - Batching and chunking cannot be enabled simultaneously. To enable chunking, you must disable batching in advance. - Chunking is only supported for persisted topics. - Chunking is only supported for Exclusive and Failover subscription types.</p>
-<p>When chunking is enabled (<code>chunkingEnabled=true</code>), if the message size is greater than the allowed maximum publish-payload size, the producer splits the original message into chunked messages and publishes them with chunked metadata to the broker separately and in order. At the broker side, the chunked messages are stored in the managed-ledger in the same way as that of ordinary messages. The only difference is that the consumer needs to buffer the chunked messages and comb [...]
-<p>The consumer consumes the chunked messages and buffers them until the consumer receives all the chunks of a message. And then the consumer stitches chunked messages together and places them into the receiver-queue. Clients consume messages from the receiver-queue. Once the consumer consumes the entire large message and acknowledges it, the consumer internally sends acknowledgement of all the chunk messages associated to that large message. You can set the <code>maxPendingChunkedMessag [...]
-<p>The broker does not require any changes to support chunking for non-shared subscription. The broker only uses <code>chunkedMessageRate</code> to record chunked message rate on the topic.</p>
-<h4><a class="anchor" aria-hidden="true" id="handle-chunked-messages-with-one-producer-and-one-ordered-consumer"></a><a href="#handle-chunked-messages-with-one-producer-and-one-ordered-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98  [...]
-<p>As shown in the following figure, when a topic has one producer which publishes large message payload in chunked messages along with regular non-chunked messages. The producer publishes message M1 in three chunks M1-C1, M1-C2 and M1-C3. The broker stores all the three chunked messages in the managed-ledger and dispatches to the ordered (exclusive/failover) consumer in the same order. The consumer buffers all the chunked messages in memory until it receives all the chunked messages, co [...]
+<p>Message chunking enables Pulsar to process large payload messages by splitting the message into chunks at the producer side and aggregating chunked messages at the consumer side.</p>
+<p>With message chunking enabled, when the size of a message exceeds the allowed maximum payload size (the <code>maxMessageSize</code> parameter of broker), the workflow of messaging is as follows: 1. The producer splits the original message into chunked messages and publishes them with chunked metadata to the broker separately and in order. 2. The broker stores the chunked messages in one managed-ledger in the same way as that of ordinary messages, and it uses the <code>chunkedMessageRa [...]
+<p><strong>Limitations:</strong> - Chunking is only available for persisted topics. - Chunking is only available for the exclusive and failover subscription types. - Chunking cannot be enabled simultaneously with batching.</p>
+<h4><a class="anchor" aria-hidden="true" id="handle-consecutive-chunked-messages-with-one-ordered-consumer"></a><a href="#handle-consecutive-chunked-messages-with-one-ordered-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-. [...]
+<p>The following figure shows a topic with one producer which publishes a large message payload in chunked messages along with regular non-chunked messages. The producer publishes message M1 in three chunks labeled M1-C1, M1-C2 and M1-C3. The broker stores all the three chunked messages in the managed-ledger and dispatches them to the ordered (exclusive/failover) consumer in the same order. The consumer buffers all the chunked messages in memory until it receives all the chunked messages [...]
 <p><img src="/docs/assets/chunking-01.png" alt=""></p>
-<h4><a class="anchor" aria-hidden="true" id="handle-chunked-messages-with-multiple-producers-and-one-ordered-consumer"></a><a href="#handle-chunked-messages-with-multiple-producers-and-one-ordered-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C1 [...]
-<p>When multiple publishers publish chunked messages into a single topic, the broker stores all the chunked messages coming from different publishers in the same managed-ledger. As shown below, Producer 1 publishes message M1 in three chunks M1-C1, M1-C2 and M1-C3. Producer 2 publishes message M2 in three chunks M2-C1, M2-C2 and M2-C3. All chunked messages of the specific message are still in order but might not be consecutive in the managed-ledger. This brings some memory pressure to th [...]
+<h4><a class="anchor" aria-hidden="true" id="handle-interwoven-chunked-messages-with-one-ordered-consumer"></a><a href="#handle-interwoven-chunked-messages-with-one-ordered-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 [...]
+<p>When multiple producers publish chunked messages into a single topic, the broker stores all the chunked messages coming from different producers in the same managed-ledger. The chunked messages in the managed-ledger can be interwoven with each other. As shown below, Producer 1 publishes message M1 in three chunks M1-C1, M1-C2 and M1-C3. Producer 2 publishes message M2 in three chunks M2-C1, M2-C2 and M2-C3. All chunked messages of the specific message are still in order but might not  [...]
 <p><img src="/docs/assets/chunking-02.png" alt=""></p>
+<blockquote>
+<p><strong>Note</strong>  <br>
+In this case, interwoven chunked messages may bring some memory pressure to the consumer because the consumer keeps a separate buffer for each large message to aggregate all its chunks in one message. You can limit the maximum number of chunked messages a consumer maintains concurrently by configuring the <code>maxPendingChunkedMessage</code> parameter. When the threshold is reached, the consumer drops pending messages by silently acknowledging them or asking the broker to redeliver them [...]
+</blockquote>
+<h4><a class="anchor" aria-hidden="true" id="enable-message-chunking"></a><a href="#enable-message-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 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><strong>Prerequisite:</strong> Disable batching by setting the <code>enableBatching</code> parameter to <code>false</code>.</p>
+<p>The message chunking feature is OFF by default. To enable message chunking, set the <code>chunkingEnabled</code> parameter to <code>true</code> when creating a producer.</p>
+<blockquote>
+<p><strong>Note</strong>  <br>
+If the consumer fails to receive all chunks of a message within a specified time period, it expires incomplete chunks. The default value is 1 minute. For more information about the <code>expireTimeOfIncompleteChunkedMessage</code> parameter, refer to <a href="https://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/">org.apache.pulsar.client.api</a>.</p>
+</blockquote>
 <h2><a class="anchor" aria-hidden="true" id="consumers"></a><a href="#consumers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
 <p>A consumer is a process that attaches to a topic via a subscription and then receives messages.</p>
 <p>A consumer sends a <a href="/docs/fr/next/develop-binary-protocol#flow-control">flow permit request</a> to a broker to get messages. There is a queue at the consumer side to receive messages pushed from the broker. You can configure the queue size with the <a href="/docs/fr/next/client-libraries-java#configure-consumer"><code>receiverQueueSize</code></a> parameter. The default size is <code>1000</code>). Each time <code>consumer.receive()</code> is called, a message is dequeued from t [...]
@@ -224,14 +234,38 @@ If batching is enabled, all messages in one batch are redelivered to the consume
 <p>It happens sometimes that consumers fail to process messages successfully. In this case, you can use <a href="#negative-acknowledgement">negative acknowledgement</a> to redeliver the messages after consumption failures. For the Shared subscription type, the messages are redelivered to other consumers; for other subscription types, the messages are redelivered to the same consumer.</p>
 <p>But this is not flexible enough. A better way is to use the <strong>redelivery backoff mechanism</strong>. You can redeliver messages with different delays by setting the number of times the messages are retried.</p>
 <p>Use the following API to enable <code>Negative Redelivery Backoff</code>.</p>
-<pre><code class="hljs css language-java">consumer.negativeAckRedeliveryBackoff(NegativeAckRedeliveryExponentialBackoff.builder()
-        .minNackTimeMs(<span class="hljs-number">1000</span>)
-        .maxNackTimeMs(<span class="hljs-number">60</span> * <span class="hljs-number">1000</span>)
+<pre><code class="hljs css language-java">consumer.negativeAckRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+        .minDelayMs(<span class="hljs-number">1000</span>)
+        .maxDelayMs(<span class="hljs-number">60</span> * <span class="hljs-number">1000</span>)
         .build())
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="acknowledgement-timeout"></a><a href="#acknowledgement-timeout" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 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>The acknowledgement timeout mechanism allows you to set a time range during which the client tracks the unacknowledged messages. After this acknowledgement timeout (<code>ackTimeout</code>) period, the client sends <code>redeliver unacknowledged messages</code> request to the broker, thus the broker resends the unacknowledged messages to the consumer.</p>
 <p>You can configure the acknowledgement timeout mechanism to redeliver the message if it is not acknowledged after <code>ackTimeout</code> or to execute a timer task to check the acknowledgement timeout messages during every <code>ackTimeoutTickTime</code> period.</p>
+<p>You can also use the redelivery backoff mechanism, redeliver messages with different delays by setting the number of times the messages is retried.</p>
+<p>If you want to use redelivery backoff, you can use the following API.</p>
+<pre><code class="hljs css language-java">consumer.ackTimeout(<span class="hljs-number">10</span>, TimeUnit.SECOND)
+        .ackTimeoutRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+        .minDelayMs(<span class="hljs-number">1000</span>)
+        .maxDelayMs(<span class="hljs-number">60000</span>)
+        .multiplier(<span class="hljs-number">2</span>).build())
+</code></pre>
+<p>The message redelivery behavior should be as follows.</p>
+<table>
+<thead>
+<tr><th style="text-align:left">Redelivery count</th><th style="text-align:left">Redelivery delay</th></tr>
+</thead>
+<tbody>
+<tr><td style="text-align:left">1</td><td style="text-align:left">10 + 1 seconds</td></tr>
+<tr><td style="text-align:left">2</td><td style="text-align:left">10 + 2 seconds</td></tr>
+<tr><td style="text-align:left">3</td><td style="text-align:left">10 + 4 seconds</td></tr>
+<tr><td style="text-align:left">4</td><td style="text-align:left">10 + 8 seconds</td></tr>
+<tr><td style="text-align:left">5</td><td style="text-align:left">10 + 16 seconds</td></tr>
+<tr><td style="text-align:left">6</td><td style="text-align:left">10 + 32 seconds</td></tr>
+<tr><td style="text-align:left">7</td><td style="text-align:left">10 + 60 seconds</td></tr>
+<tr><td style="text-align:left">8</td><td style="text-align:left">10 + 60 seconds</td></tr>
+</tbody>
+</table>
 <blockquote>
 <p><strong>Note</strong></p>
 <ul>
diff --git a/content/docs/fr/next/deploy-bare-metal-multi-cluster.html b/content/docs/fr/next/deploy-bare-metal-multi-cluster.html
index a48cc0a..7a9ad01 100644
--- a/content/docs/fr/next/deploy-bare-metal-multi-cluster.html
+++ b/content/docs/fr/next/deploy-bare-metal-multi-cluster.html
@@ -219,8 +219,8 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.9.1
 <p>You can initialize this metadata using the <a href="/docs/fr/next/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/fr/next/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. The following is an example:</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 \
-  --configuration-store zk1.us-west.example.com:2184 \
+  --metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
+  --configuration-metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
   --web-service-url http://pulsar.us-west.example.com:8080/ \
   --web-service-url-tls https://pulsar.us-west.example.com:8443/ \
   --broker-service-url pulsar://pulsar.us-west.example.com:6650/ \
@@ -267,14 +267,14 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.9.1
 <p>Once you set up ZooKeeper, initialize cluster metadata, and spin up BookKeeper bookies, you can deploy brokers.</p>
 <h3><a class="anchor" aria-hidden="true" id="broker-configuration"></a><a href="#broker-configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.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>You can configure brokers using the <a href="/docs/fr/next/reference-configuration#broker"><code>conf/broker.conf</code></a> configuration file.</p>
-<p>The most important element of broker configuration is ensuring that each broker is aware of its local ZooKeeper quorum as well as the configuration store quorum. Make sure that you set the <a href="/docs/fr/next/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> parameter to reflect the local quorum and the <a href="/docs/fr/next/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameter to reflect the [...]
+<p>The most important element of broker configuration is ensuring that each broker is aware of its local ZooKeeper quorum as well as the configuration store quorum. Make sure that you set the <a href="/docs/fr/next/reference-configuration#broker"><code>metadataStoreUrl</code></a> parameter to reflect the local quorum and the <a href="/docs/fr/next/reference-configuration#broker"><code>configurationMetadataStoreUrl</code></a> parameter to reflect the configuration store quorum (although y [...]
 <p>You also need to specify the name of the <a href="/docs/fr/next/reference-terminology#cluster">cluster</a> to which the broker belongs using the <a href="/docs/fr/next/reference-configuration#broker-clusterName"><code>clusterName</code></a> parameter. In addition, you need to match the broker and web service ports provided when you initialize the metadata (especially when you use a different port from default) of the cluster.</p>
 <p>The following is an example configuration:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-comment"># Local ZooKeeper servers</span>
-<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">metadataStoreUrl</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-comment">
 # Configuration store quorum connection string.</span>
-<span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2184,zk2.us-west.example.com:2184,zk3.us-west.example.com:2184</span>
+<span class="hljs-attr">configurationMetadataStoreUrl</span>=<span class="hljs-string">zk1.us-west.example.com:2184,zk2.us-west.example.com:2184,zk3.us-west.example.com:2184</span>
 
 <span class="hljs-attr">clusterName</span>=<span class="hljs-string">us-west</span>
 <span class="hljs-comment">
diff --git a/content/docs/fr/next/deploy-bare-metal-multi-cluster/index.html b/content/docs/fr/next/deploy-bare-metal-multi-cluster/index.html
index a48cc0a..7a9ad01 100644
--- a/content/docs/fr/next/deploy-bare-metal-multi-cluster/index.html
+++ b/content/docs/fr/next/deploy-bare-metal-multi-cluster/index.html
@@ -219,8 +219,8 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.9.1
 <p>You can initialize this metadata using the <a href="/docs/fr/next/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/fr/next/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. The following is an example:</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 \
-  --configuration-store zk1.us-west.example.com:2184 \
+  --metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
+  --configuration-metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
   --web-service-url http://pulsar.us-west.example.com:8080/ \
   --web-service-url-tls https://pulsar.us-west.example.com:8443/ \
   --broker-service-url pulsar://pulsar.us-west.example.com:6650/ \
@@ -267,14 +267,14 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.9.1
 <p>Once you set up ZooKeeper, initialize cluster metadata, and spin up BookKeeper bookies, you can deploy brokers.</p>
 <h3><a class="anchor" aria-hidden="true" id="broker-configuration"></a><a href="#broker-configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.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>You can configure brokers using the <a href="/docs/fr/next/reference-configuration#broker"><code>conf/broker.conf</code></a> configuration file.</p>
-<p>The most important element of broker configuration is ensuring that each broker is aware of its local ZooKeeper quorum as well as the configuration store quorum. Make sure that you set the <a href="/docs/fr/next/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> parameter to reflect the local quorum and the <a href="/docs/fr/next/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameter to reflect the [...]
+<p>The most important element of broker configuration is ensuring that each broker is aware of its local ZooKeeper quorum as well as the configuration store quorum. Make sure that you set the <a href="/docs/fr/next/reference-configuration#broker"><code>metadataStoreUrl</code></a> parameter to reflect the local quorum and the <a href="/docs/fr/next/reference-configuration#broker"><code>configurationMetadataStoreUrl</code></a> parameter to reflect the configuration store quorum (although y [...]
 <p>You also need to specify the name of the <a href="/docs/fr/next/reference-terminology#cluster">cluster</a> to which the broker belongs using the <a href="/docs/fr/next/reference-configuration#broker-clusterName"><code>clusterName</code></a> parameter. In addition, you need to match the broker and web service ports provided when you initialize the metadata (especially when you use a different port from default) of the cluster.</p>
 <p>The following is an example configuration:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-comment"># Local ZooKeeper servers</span>
-<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">metadataStoreUrl</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-comment">
 # Configuration store quorum connection string.</span>
-<span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2184,zk2.us-west.example.com:2184,zk3.us-west.example.com:2184</span>
+<span class="hljs-attr">configurationMetadataStoreUrl</span>=<span class="hljs-string">zk1.us-west.example.com:2184,zk2.us-west.example.com:2184,zk3.us-west.example.com:2184</span>
 
 <span class="hljs-attr">clusterName</span>=<span class="hljs-string">us-west</span>
 <span class="hljs-comment">
diff --git a/content/docs/fr/next/deploy-bare-metal.html b/content/docs/fr/next/deploy-bare-metal.html
index 0bb40f8..a879f82 100644
--- a/content/docs/fr/next/deploy-bare-metal.html
+++ b/content/docs/fr/next/deploy-bare-metal.html
@@ -273,8 +273,8 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <p>You can initialize this metadata using the <a href="/docs/fr/next/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/fr/next/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. This command can be run on any machine in your ZooKeeper cluster. The following is an example:</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 \
-  --configuration-store zk1.us-west.example.com:2181 \
+  --metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
+  --configuration-metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
   --web-service-url http://pulsar.us-west.example.com:8080 \
   --web-service-url-tls https://pulsar.us-west.example.com:8443 \
   --broker-service-url pulsar://pulsar.us-west.example.com:6650 \
@@ -335,9 +335,9 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <h2><a class="anchor" aria-hidden="true" id="deploy-pulsar-brokers"></a><a href="#deploy-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-.98 0-2 [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide the administrative interface of Pulsar. A good choice is to run <strong>3 brokers</strong>, one for each machine that already runs a BookKeeper bookie.</p>
 <h3><a class="anchor" aria-hidden="true" id="configure-brokers"></a><a href="#configure-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- [...]
-<p>The most important element of broker configuration is ensuring that each broker is aware of the ZooKeeper cluster that you have deployed. Ensure that the <a href="/docs/fr/next/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="/docs/fr/next/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters are correct. In this case, since you only have 1 cluster and no configuration store setup, [...]
-<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>
+<p>The most important element of broker configuration is ensuring that each broker is aware of the ZooKeeper cluster that you have deployed. Ensure that the <a href="/docs/fr/next/reference-configuration#broker"><code>metadataStoreUrl</code></a> and <a href="/docs/fr/next/reference-configuration#broker"><code>configurationMetadataStoreUrl</code></a> parameters are correct. In this case, since you only have 1 cluster and no configuration store setup, the <code>configurationMetadataStoreUr [...]
+<pre><code class="hljs css language-properties"><span class="hljs-attr">metadataStoreUrl</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">configurationMetadataStoreUrl</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>You also need to specify the cluster name (matching the name that you provided when you <a href="#initialize-cluster-metadata">initialize the metadata of the cluster</a>):</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
diff --git a/content/docs/fr/next/deploy-bare-metal/index.html b/content/docs/fr/next/deploy-bare-metal/index.html
index 0bb40f8..a879f82 100644
--- a/content/docs/fr/next/deploy-bare-metal/index.html
+++ b/content/docs/fr/next/deploy-bare-metal/index.html
@@ -273,8 +273,8 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <p>You can initialize this metadata using the <a href="/docs/fr/next/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/fr/next/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. This command can be run on any machine in your ZooKeeper cluster. The following is an example:</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 \
-  --configuration-store zk1.us-west.example.com:2181 \
+  --metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
+  --configuration-metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
   --web-service-url http://pulsar.us-west.example.com:8080 \
   --web-service-url-tls https://pulsar.us-west.example.com:8443 \
   --broker-service-url pulsar://pulsar.us-west.example.com:6650 \
@@ -335,9 +335,9 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <h2><a class="anchor" aria-hidden="true" id="deploy-pulsar-brokers"></a><a href="#deploy-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-.98 0-2 [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide the administrative interface of Pulsar. A good choice is to run <strong>3 brokers</strong>, one for each machine that already runs a BookKeeper bookie.</p>
 <h3><a class="anchor" aria-hidden="true" id="configure-brokers"></a><a href="#configure-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- [...]
-<p>The most important element of broker configuration is ensuring that each broker is aware of the ZooKeeper cluster that you have deployed. Ensure that the <a href="/docs/fr/next/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="/docs/fr/next/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters are correct. In this case, since you only have 1 cluster and no configuration store setup, [...]
-<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>
+<p>The most important element of broker configuration is ensuring that each broker is aware of the ZooKeeper cluster that you have deployed. Ensure that the <a href="/docs/fr/next/reference-configuration#broker"><code>metadataStoreUrl</code></a> and <a href="/docs/fr/next/reference-configuration#broker"><code>configurationMetadataStoreUrl</code></a> parameters are correct. In this case, since you only have 1 cluster and no configuration store setup, the <code>configurationMetadataStoreUr [...]
+<pre><code class="hljs css language-properties"><span class="hljs-attr">metadataStoreUrl</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">configurationMetadataStoreUrl</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>You also need to specify the cluster name (matching the name that you provided when you <a href="#initialize-cluster-metadata">initialize the metadata of the cluster</a>):</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
diff --git a/content/docs/fr/next/develop-binary-protocol.html b/content/docs/fr/next/develop-binary-protocol.html
index 12b053b..5d05089 100644
--- a/content/docs/fr/next/develop-binary-protocol.html
+++ b/content/docs/fr/next/develop-binary-protocol.html
@@ -230,7 +230,7 @@
 </code></pre>
 <p>Parameters: * <code>request_id</code> → Original id of the <code>CreateProducer</code> request * <code>producer_name</code> → Generated globally unique producer name or the name specified by the client, if any.</p>
 <h5><a class="anchor" aria-hidden="true" id="command-send"></a><a href="#command-send" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>Command <code>Send</code> is used to publish a new message within the context of an already existing producer. This command is used in a frame that includes command as well as message payload, for which the complete format is specified in the <a href="#payload-commands">payload commands</a> section.</p>
+<p>Command <code>Send</code> is used to publish a new message within the context of an already existing producer. If a producer has not yet been created for the connection, the broker will terminate the connection. This command is used in a frame that includes command as well as message payload, for which the complete format is specified in the <a href="#payload-commands">payload commands</a> section.</p>
 <pre><code class="hljs css language-protobuf"><span class="hljs-class"><span class="hljs-keyword">message</span> <span class="hljs-title">CommandSend</span> </span>{
   <span class="hljs-string">"producer_id"</span> : <span class="hljs-number">1</span>,
   <span class="hljs-string">"sequence_id"</span> : <span class="hljs-number">0</span>,
diff --git a/content/docs/fr/next/develop-binary-protocol/index.html b/content/docs/fr/next/develop-binary-protocol/index.html
index 12b053b..5d05089 100644
--- a/content/docs/fr/next/develop-binary-protocol/index.html
+++ b/content/docs/fr/next/develop-binary-protocol/index.html
@@ -230,7 +230,7 @@
 </code></pre>
 <p>Parameters: * <code>request_id</code> → Original id of the <code>CreateProducer</code> request * <code>producer_name</code> → Generated globally unique producer name or the name specified by the client, if any.</p>
 <h5><a class="anchor" aria-hidden="true" id="command-send"></a><a href="#command-send" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>Command <code>Send</code> is used to publish a new message within the context of an already existing producer. This command is used in a frame that includes command as well as message payload, for which the complete format is specified in the <a href="#payload-commands">payload commands</a> section.</p>
+<p>Command <code>Send</code> is used to publish a new message within the context of an already existing producer. If a producer has not yet been created for the connection, the broker will terminate the connection. This command is used in a frame that includes command as well as message payload, for which the complete format is specified in the <a href="#payload-commands">payload commands</a> section.</p>
 <pre><code class="hljs css language-protobuf"><span class="hljs-class"><span class="hljs-keyword">message</span> <span class="hljs-title">CommandSend</span> </span>{
   <span class="hljs-string">"producer_id"</span> : <span class="hljs-number">1</span>,
   <span class="hljs-string">"sequence_id"</span> : <span class="hljs-number">0</span>,
diff --git a/content/docs/fr/next/functions-runtime.html b/content/docs/fr/next/functions-runtime.html
index 57e743d..6077e19 100644
--- a/content/docs/fr/next/functions-runtime.html
+++ b/content/docs/fr/next/functions-runtime.html
@@ -298,7 +298,7 @@ If you use tokens that expire when deploying functions, these tokens will expire
 <p>For example, if you use token authentication, you need to configure the following properties in the <code>function-worker.yml</code> file.</p>
 <pre><code class="hljs css language-Yaml"><span class="hljs-attr">clientAuthenticationPlugin:</span> <span class="hljs-string">org.apache.pulsar.client.impl.auth.AuthenticationToken</span>
 <span class="hljs-attr">clientAuthenticationParameters:</span> <span class="hljs-string">file:///etc/pulsar/token/admin-token.txt</span>
-<span class="hljs-attr">configurationStoreServers:</span> <span class="hljs-string">zookeeper-cluster:2181</span> <span class="hljs-comment"># auth requires a connection to zookeeper</span>
+<span class="hljs-attr">configurationMetadataStoreUrl:</span> <span class="hljs-string">zk:zookeeper-cluster:2181</span> <span class="hljs-comment"># auth requires a connection to zookeeper</span>
 <span class="hljs-attr">authenticationProviders:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">"org.apache.pulsar.broker.authentication.AuthenticationProviderToken"</span>
 <span class="hljs-attr">authorizationEnabled:</span> <span class="hljs-literal">true</span>
diff --git a/content/docs/fr/next/functions-runtime/index.html b/content/docs/fr/next/functions-runtime/index.html
index 57e743d..6077e19 100644
--- a/content/docs/fr/next/functions-runtime/index.html
+++ b/content/docs/fr/next/functions-runtime/index.html
@@ -298,7 +298,7 @@ If you use tokens that expire when deploying functions, these tokens will expire
 <p>For example, if you use token authentication, you need to configure the following properties in the <code>function-worker.yml</code> file.</p>
 <pre><code class="hljs css language-Yaml"><span class="hljs-attr">clientAuthenticationPlugin:</span> <span class="hljs-string">org.apache.pulsar.client.impl.auth.AuthenticationToken</span>
 <span class="hljs-attr">clientAuthenticationParameters:</span> <span class="hljs-string">file:///etc/pulsar/token/admin-token.txt</span>
-<span class="hljs-attr">configurationStoreServers:</span> <span class="hljs-string">zookeeper-cluster:2181</span> <span class="hljs-comment"># auth requires a connection to zookeeper</span>
+<span class="hljs-attr">configurationMetadataStoreUrl:</span> <span class="hljs-string">zk:zookeeper-cluster:2181</span> <span class="hljs-comment"># auth requires a connection to zookeeper</span>
 <span class="hljs-attr">authenticationProviders:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">"org.apache.pulsar.broker.authentication.AuthenticationProviderToken"</span>
 <span class="hljs-attr">authorizationEnabled:</span> <span class="hljs-literal">true</span>
diff --git a/content/docs/fr/next/functions-worker.html b/content/docs/fr/next/functions-worker.html
index 5901751..4c081e9 100644
--- a/content/docs/fr/next/functions-worker.html
+++ b/content/docs/fr/next/functions-worker.html
@@ -235,10 +235,10 @@ authenticationProviders: ['org.apache.pulsar.broker.authentication.Authenticatio
   # tokenPublicKey:     file:///path/to/public.key 
 </code></pre>
 <h5><a class="anchor" aria-hidden="true" id="enable-authorization-provider"></a><a href="#enable-authorization-provider" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 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>To enable authorization on Functions Worker, you need to configure <code>authorizationEnabled</code>, <code>authorizationProvider</code> and <code>configurationStoreServers</code>. The authentication provider connects to <code>configurationStoreServers</code> to receive namespace policies.</p>
+<p>To enable authorization on Functions Worker, you need to configure <code>authorizationEnabled</code>, <code>authorizationProvider</code> and <code>configurationMetadataStoreUrl</code>. The authentication provider connects to <code>configurationMetadataStoreUrl</code> to receive namespace policies.</p>
 <pre><code class="hljs css language-yaml"><span class="hljs-attr">authorizationEnabled:</span> <span class="hljs-literal">true</span>
 <span class="hljs-attr">authorizationProvider:</span> <span class="hljs-string">org.apache.pulsar.broker.authorization.PulsarAuthorizationProvider</span>
-<span class="hljs-attr">configurationStoreServers:</span> <span class="hljs-string">&lt;configuration-store-servers&gt;</span>
+<span class="hljs-attr">configurationMetadataStoreUrl:</span> <span class="hljs-string">&lt;meta-type&gt;:&lt;configuration-metadata-store-url&gt;</span>
 </code></pre>
 <p>You should also configure a list of superuser roles. The superuser roles are able to access any admin API. The following is a configuration example.</p>
 <pre><code class="hljs css language-yaml"><span class="hljs-attr">superUserRoles:</span>
diff --git a/content/docs/fr/next/functions-worker/index.html b/content/docs/fr/next/functions-worker/index.html
index 5901751..4c081e9 100644
--- a/content/docs/fr/next/functions-worker/index.html
+++ b/content/docs/fr/next/functions-worker/index.html
@@ -235,10 +235,10 @@ authenticationProviders: ['org.apache.pulsar.broker.authentication.Authenticatio
   # tokenPublicKey:     file:///path/to/public.key 
 </code></pre>
 <h5><a class="anchor" aria-hidden="true" id="enable-authorization-provider"></a><a href="#enable-authorization-provider" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 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>To enable authorization on Functions Worker, you need to configure <code>authorizationEnabled</code>, <code>authorizationProvider</code> and <code>configurationStoreServers</code>. The authentication provider connects to <code>configurationStoreServers</code> to receive namespace policies.</p>
+<p>To enable authorization on Functions Worker, you need to configure <code>authorizationEnabled</code>, <code>authorizationProvider</code> and <code>configurationMetadataStoreUrl</code>. The authentication provider connects to <code>configurationMetadataStoreUrl</code> to receive namespace policies.</p>
 <pre><code class="hljs css language-yaml"><span class="hljs-attr">authorizationEnabled:</span> <span class="hljs-literal">true</span>
 <span class="hljs-attr">authorizationProvider:</span> <span class="hljs-string">org.apache.pulsar.broker.authorization.PulsarAuthorizationProvider</span>
-<span class="hljs-attr">configurationStoreServers:</span> <span class="hljs-string">&lt;configuration-store-servers&gt;</span>
+<span class="hljs-attr">configurationMetadataStoreUrl:</span> <span class="hljs-string">&lt;meta-type&gt;:&lt;configuration-metadata-store-url&gt;</span>
 </code></pre>
 <p>You should also configure a list of superuser roles. The superuser roles are able to access any admin API. The following is a configuration example.</p>
 <pre><code class="hljs css language-yaml"><span class="hljs-attr">superUserRoles:</span>
diff --git a/content/docs/fr/next/io-file-source.html b/content/docs/fr/next/io-file-source.html
index 77de125..c93678f 100644
--- a/content/docs/fr/next/io-file-source.html
+++ b/content/docs/fr/next/io-file-source.html
@@ -39,6 +39,7 @@
 <tr><td><code>ignoreHiddenFiles</code></td><td>Boolean</td><td>false</td><td>true</td><td>Whether the hidden files should be ignored or not.</td></tr>
 <tr><td><code>pollingInterval</code></td><td>Long</td><td>false</td><td>10000L</td><td>Indicates how long to wait before performing a directory listing.</td></tr>
 <tr><td><code>numWorkers</code></td><td>Integer</td><td>false</td><td>1</td><td>The number of worker threads that process files.<br /><br /> This allows you to process a larger number of files concurrently. <br /><br />However, setting this to a value greater than 1 makes the data from multiple files mixed in the target topic.</td></tr>
+<tr><td><code>processedFileSuffix</code></td><td>String</td><td>false</td><td>NULL</td><td>If set, do not delete but only rename file that has been processed. <br /><br />  This config only work when 'keepFile' property is false.</td></tr>
 </tbody>
 </table>
 <h3><a class="anchor" aria-hidden="true" id="example"></a><a href="#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-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
@@ -58,7 +59,8 @@
       <span class="hljs-attr">"maximumSize"</span>: <span class="hljs-number">5000000</span>,
       <span class="hljs-attr">"ignoreHiddenFiles"</span>: <span class="hljs-literal">true</span>,
       <span class="hljs-attr">"pollingInterval"</span>: <span class="hljs-number">5000</span>,
-      <span class="hljs-attr">"numWorkers"</span>: <span class="hljs-number">1</span>
+      <span class="hljs-attr">"numWorkers"</span>: <span class="hljs-number">1</span>,
+      <span class="hljs-attr">"processedFileSuffix"</span>: <span class="hljs-string">".processed_done"</span>
    }
 }
 </code></pre></li>
@@ -76,6 +78,7 @@
     <span class="hljs-attr">ignoreHiddenFiles:</span> <span class="hljs-literal">true</span>
     <span class="hljs-attr">pollingInterval:</span> <span class="hljs-number">5000</span>
     <span class="hljs-attr">numWorkers:</span> <span class="hljs-number">1</span>
+    <span class="hljs-attr">processedFileSuffix:</span> <span class="hljs-string">".processed_done"</span>
 </code></pre></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="usage"></a><a href="#usage" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 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 [...]
diff --git a/content/docs/fr/next/io-file-source/index.html b/content/docs/fr/next/io-file-source/index.html
index 77de125..c93678f 100644
--- a/content/docs/fr/next/io-file-source/index.html
+++ b/content/docs/fr/next/io-file-source/index.html
@@ -39,6 +39,7 @@
 <tr><td><code>ignoreHiddenFiles</code></td><td>Boolean</td><td>false</td><td>true</td><td>Whether the hidden files should be ignored or not.</td></tr>
 <tr><td><code>pollingInterval</code></td><td>Long</td><td>false</td><td>10000L</td><td>Indicates how long to wait before performing a directory listing.</td></tr>
 <tr><td><code>numWorkers</code></td><td>Integer</td><td>false</td><td>1</td><td>The number of worker threads that process files.<br /><br /> This allows you to process a larger number of files concurrently. <br /><br />However, setting this to a value greater than 1 makes the data from multiple files mixed in the target topic.</td></tr>
+<tr><td><code>processedFileSuffix</code></td><td>String</td><td>false</td><td>NULL</td><td>If set, do not delete but only rename file that has been processed. <br /><br />  This config only work when 'keepFile' property is false.</td></tr>
 </tbody>
 </table>
 <h3><a class="anchor" aria-hidden="true" id="example"></a><a href="#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-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
@@ -58,7 +59,8 @@
       <span class="hljs-attr">"maximumSize"</span>: <span class="hljs-number">5000000</span>,
       <span class="hljs-attr">"ignoreHiddenFiles"</span>: <span class="hljs-literal">true</span>,
       <span class="hljs-attr">"pollingInterval"</span>: <span class="hljs-number">5000</span>,
-      <span class="hljs-attr">"numWorkers"</span>: <span class="hljs-number">1</span>
+      <span class="hljs-attr">"numWorkers"</span>: <span class="hljs-number">1</span>,
+      <span class="hljs-attr">"processedFileSuffix"</span>: <span class="hljs-string">".processed_done"</span>
    }
 }
 </code></pre></li>
@@ -76,6 +78,7 @@
     <span class="hljs-attr">ignoreHiddenFiles:</span> <span class="hljs-literal">true</span>
     <span class="hljs-attr">pollingInterval:</span> <span class="hljs-number">5000</span>
     <span class="hljs-attr">numWorkers:</span> <span class="hljs-number">1</span>
+    <span class="hljs-attr">processedFileSuffix:</span> <span class="hljs-string">".processed_done"</span>
 </code></pre></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="usage"></a><a href="#usage" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 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 [...]
diff --git a/content/docs/fr/next/reference-cli-tools.html b/content/docs/fr/next/reference-cli-tools.html
index d13de77..0857186 100644
--- a/content/docs/fr/next/reference-cli-tools.html
+++ b/content/docs/fr/next/reference-cli-tools.html
@@ -223,14 +223,14 @@
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--configuration-store</code></td><td>Configuration store connection string</td><td></td></tr>
-<tr><td><code>-zk</code> , <code>--zookeeper-servers</code></td><td>Local ZooKeeper connection string</td><td></td></tr>
+<tr><td><code>-cms</code>, <code>--configuration-metadata-store</code></td><td>Configuration meta store connection string</td><td></td></tr>
+<tr><td><code>-md</code> , <code>--metadata-store</code></td><td>Metadata Store service url</td><td></td></tr>
 </tbody>
 </table>
 <p>Example</p>
 <pre><code class="hljs css language-bash">$ PULSAR_PROXY_CONF=/path/to/proxy.conf pulsar proxy \
-  --zookeeper-servers zk-0,zk-1,zk2 \
-  --configuration-store zk-0,zk-1,zk-2
+  --metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181 \
+  --configuration-metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="standalone"></a><a href="#standalone" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
 <p>Run a broker service with local bookies and local ZooKeeper</p>
@@ -615,7 +615,7 @@
 <tr><td><code>-time</code>, <code>--test-duration</code></td><td>Test duration (in seconds). If this value is less than or equal to 0, it keeps publishing messages.</td><td>0</td></tr>
 <tr><td><code>--threads</code></td><td>Number of threads writing</td><td>1</td></tr>
 <tr><td><code>-w</code>, <code>--write-quorum</code></td><td>Ledger write quorum</td><td>1</td></tr>
-<tr><td><code>-zk</code>, <code>--zookeeperServers</code></td><td>ZooKeeper connection string</td><td></td></tr>
+<tr><td><code>-md</code>, <code>--metadata-store</code></td><td>Metadata store service URL. For example: zk:my-zk:2181</td><td></td></tr>
 </tbody>
 </table>
 <h3><a class="anchor" aria-hidden="true" id="monitor-brokers"></a><a href="#monitor-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  [...]
diff --git a/content/docs/fr/next/reference-cli-tools/index.html b/content/docs/fr/next/reference-cli-tools/index.html
index d13de77..0857186 100644
--- a/content/docs/fr/next/reference-cli-tools/index.html
+++ b/content/docs/fr/next/reference-cli-tools/index.html
@@ -223,14 +223,14 @@
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--configuration-store</code></td><td>Configuration store connection string</td><td></td></tr>
-<tr><td><code>-zk</code> , <code>--zookeeper-servers</code></td><td>Local ZooKeeper connection string</td><td></td></tr>
+<tr><td><code>-cms</code>, <code>--configuration-metadata-store</code></td><td>Configuration meta store connection string</td><td></td></tr>
+<tr><td><code>-md</code> , <code>--metadata-store</code></td><td>Metadata Store service url</td><td></td></tr>
 </tbody>
 </table>
 <p>Example</p>
 <pre><code class="hljs css language-bash">$ PULSAR_PROXY_CONF=/path/to/proxy.conf pulsar proxy \
-  --zookeeper-servers zk-0,zk-1,zk2 \
-  --configuration-store zk-0,zk-1,zk-2
+  --metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181 \
+  --configuration-metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="standalone"></a><a href="#standalone" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
 <p>Run a broker service with local bookies and local ZooKeeper</p>
@@ -615,7 +615,7 @@
 <tr><td><code>-time</code>, <code>--test-duration</code></td><td>Test duration (in seconds). If this value is less than or equal to 0, it keeps publishing messages.</td><td>0</td></tr>
 <tr><td><code>--threads</code></td><td>Number of threads writing</td><td>1</td></tr>
 <tr><td><code>-w</code>, <code>--write-quorum</code></td><td>Ledger write quorum</td><td>1</td></tr>
-<tr><td><code>-zk</code>, <code>--zookeeperServers</code></td><td>ZooKeeper connection string</td><td></td></tr>
+<tr><td><code>-md</code>, <code>--metadata-store</code></td><td>Metadata store service URL. For example: zk:my-zk:2181</td><td></td></tr>
 </tbody>
 </table>
 <h3><a class="anchor" aria-hidden="true" id="monitor-brokers"></a><a href="#monitor-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  [...]
diff --git a/content/docs/fr/next/reference-configuration.html b/content/docs/fr/next/reference-configuration.html
index e507e55..9048d80 100644
--- a/content/docs/fr/next/reference-configuration.html
+++ b/content/docs/fr/next/reference-configuration.html
@@ -209,7 +209,7 @@
 <p>If there are multiple listeners, separate them with commas.</p>
 <p><strong>Note</strong>: do not use this configuration with <code>advertisedAddress</code> and <code>brokerServicePort</code>. If the value of this configuration is empty, the broker uses <code>advertisedAddress</code> and <code>brokerServicePort</code>|/| |internalListenerName|Specify the internal listener name for the broker.</p>
 <p><strong>Note</strong>: the listener name must be contained in <code>advertisedListeners</code>.</p>
-<p>If the value of this configuration is empty, the broker uses the first listener as the internal listener.|/| |authenticateOriginalAuthData| If this flag is set to <code>true</code>, the broker authenticates the original Auth data; else it just accepts the originalPrincipal and authorizes it (if required). |false| |enablePersistentTopics| Whether persistent topics are enabled on the broker |true| |enableNonPersistentTopics| Whether non-persistent topics are enabled on the broker |true| [...]
+<p>If the value of this configuration is empty, the broker uses the first listener as the internal listener.|/| |authenticateOriginalAuthData| If this flag is set to <code>true</code>, the broker authenticates the original Auth data; else it just accepts the originalPrincipal and authorizes it (if required). |false| |enablePersistentTopics| Whether persistent topics are enabled on the broker |true| |enableNonPersistentTopics| Whether non-persistent topics are enabled on the broker |true| [...]
 <ul>
 <li><p>'producer_request_hold' Policy which holds producer's send request until the resource becomes available (or holding times out)</p></li>
 <li><p>'producer_exception' Policy which throws <code>javax.jms.ResourceAllocationException</code> to the producer</p></li>
@@ -218,32 +218,44 @@
 <li><p><code>delete_when_no_subscriptions</code>: delete the topic which has no subscriptions or active producers.</p>
 <ul>
 <li><p><code>delete_when_subscriptions_caught_up</code>: delete the topic whose subscriptions have no backlogs and which has no active producers or consumers. | <code>delete_when_no_subscriptions</code> | | brokerDeleteInactiveTopicsMaxInactiveDurationSeconds | Set the maximum duration for inactive topics. If it is not specified, the <code>brokerDeleteInactiveTopicsFrequencySeconds</code> parameter is adopted. | N/A | |forceDeleteTenantAllowed| Enable you to delete a tenant forcefully. | [...]
-<p>Set this threshold to 0 means disabling the compression check.|N/A |delayedDeliveryEnabled| Whether to enable the delayed delivery for messages. If disabled, messages will be immediately delivered and there will be no tracking overhead.|true| |delayedDeliveryTickTimeMillis|Control the tick time for retrying on delayed delivery, which affects the accuracy of the delivery time compared to the scheduled time. By default, it is 1 second.|1000| |activeConsumerFailoverDelayTimeMillis| How l [...]
+<p>Set this threshold to 0 means disabling the compression check.|N/A |delayedDeliveryEnabled| Whether to enable the delayed delivery for messages. If disabled, messages will be immediately delivered and there will be no tracking overhead.|true| |delayedDeliveryTickTimeMillis|Control the tick time for retrying on delayed delivery, which affects the accuracy of the delivery time compared to the scheduled time. By default, it is 1 second.|1000| |activeConsumerFailoverDelayTimeMillis| How l [...]
 <p>Setting this configuration to a value <strong>greater than 0</strong> deletes inactive subscriptions automatically.<br>
 Setting this configuration to <strong>0</strong> does not delete inactive subscriptions automatically.</p>
 <p>Since this configuration takes effect on all topics, if there is even one topic whose subscriptions should not be deleted automatically, you need to set it to 0.<br>
-Instead, you can set a subscription expiration time for each <strong>namespace</strong> using the <a href="https://pulsar.apache.org/tools/pulsar-admin/2.6.0-SNAPSHOT/#-em-set-subscription-expiration-time-em-"><code>pulsar-admin namespaces set-subscription-expiration-time options</code> command</a>. | 0 | |maxConcurrentLookupRequest| Max number of concurrent lookup request broker allows to throttle heavy incoming lookup traffic |50000| |maxConcurrentTopicLoadRequest| Max number of concur [...]
+Instead, you can set a subscription expiration time for each <strong>namespace</strong> using the <a href="https://pulsar.apache.org/tools/pulsar-admin/2.6.0-SNAPSHOT/#-em-set-subscription-expiration-time-em-"><code>pulsar-admin namespaces set-subscription-expiration-time options</code> command</a>. | 0 | |maxConcurrentLookupRequest| Max number of concurrent lookup request broker allows to throttle heavy incoming lookup traffic |50000| |maxConcurrentTopicLoadRequest| Max number of concur [...]
 <ul>
 <li>The max rollover time has been reached</li>
 <li>The max entries have been written to the ledger</li>
-<li>The max ledger size has been written to the ledger|50000| |managedLedgerMinLedgerRolloverTimeMinutes| Minimum time between ledger rollover for a topic |10| |managedLedgerMaxLedgerRolloverTimeMinutes| Maximum time before forcing a ledger rollover for a topic |240| |managedLedgerCursorMaxEntriesPerLedger| Max number of entries to append to a cursor ledger |50000| |managedLedgerCursorRolloverTimeInSeconds| Max time before triggering a rollover on a cursor ledger |14400| |managedLedgerMa [...]
-<code>brokerDeleteInactiveTopicsFrequencySeconds</code>.|60| |transactionCoordinatorEnabled|Whether to enable transaction coordinator in broker.|true| |transactionMetadataStoreProviderClassName| |org.apache.pulsar.transaction.coordinator.impl.InMemTransactionMetadataStoreProvider| |defaultRetentionTimeInMinutes| Default message retention time |0| |defaultRetentionSizeInMB| Default retention size |0| |keepAliveIntervalSeconds| How often to check whether the connections are still alive |30 [...]
-|haProxyProtocolEnabled | Enable or disable the <a href="http://www.haproxy.org/">HAProxy</a> protocol. |false| | maxTopicsPerNamespace | The maximum number of persistent topics that can be created in the namespace. When the number of topics reaches this threshold, the broker rejects the request of creating a new topic, including the auto-created topics by the producer or consumer, until the number of connected consumers decreases. The default value 0 disables the check. | 0 | |subscript [...]
-</ul>
-<p>Available options are <code>NONE</code>, <code>LZ4</code>, <code>ZLIB</code>, <code>ZSTD</code>, and <code>SNAPPY</code>).</p>
-<p>If this value is <code>NONE</code> or invalid, the <code>managedLedgerInfo</code> is not compressed.</p>
-<p><strong>Note</strong> that after enabling this configuration, if you want to degrade a broker, you need to change the value to <code>NONE</code> and make sure all ledger metadata is saved without compression. | None | | additionalServlets | Additional servlet name.</p>
-<p>If you have multiple additional servlets, separate them by commas.</p>
-<p>For example, additionalServlet_1, additionalServlet_2 | N/A | | additionalServletDirectory | Location of broker additional servlet NAR directory | ./brokerAdditionalServlet | | brokerEntryMetadataInterceptors | Set broker entry metadata interceptors.</p>
-<p>Multiple interceptors should be separated by commas.</p>
-<p>Available values:</p>
-<ul>
-<li>org.apache.pulsar.common.intercept.AppendBrokerTimestampMetadataInterceptor</li>
-<li>org.apache.pulsar.common.intercept.AppendIndexMetadataInterceptor</li>
+<li>The max ledger size has been written to the ledger|50000| |managedLedgerMinLedgerRolloverTimeMinutes| Minimum time between ledger rollover for a topic |10| |managedLedgerMaxLedgerRolloverTimeMinutes| Maximum time before forcing a ledger rollover for a topic |240| |managedLedgerInactiveLedgerRolloverTimeSeconds| Time to rollover ledger for inactive topic |0| |managedLedgerCursorMaxEntriesPerLedger| Max number of entries to append to a cursor ledger |50000| |managedLedgerCursorRollover [...]
 </ul></li>
 </ul></li>
 </ul>
-<pre><code class="hljs">    Example  
+<pre><code class="hljs">    Available values: 
+    - `org.apache.pulsar.broker.loadbalance.impl.ThresholdShedder`
+    - `org.apache.pulsar.broker.loadbalance.impl.OverloadShedder`
+    - `org.apache.pulsar.broker.loadbalance.impl.UniformLoadShedder`
+      
+    For the comparisons of the shedding strategies, see [here](administration-load-balance/#shed-load-automatically).|`org.apache.pulsar.broker.loadbalance.impl.ThresholdShedder` |replicationMetricsEnabled| Enable replication metrics |true| |replicationConnectionsPerBroker| Max number of connections to open for each broker in a remote cluster More connections host-to-host lead to better throughput over high-latency links. |16| |replicationProducerQueueSize| Replicator producer queue size [...]
+    |haProxyProtocolEnabled | Enable or disable the [HAProxy](http://www.haproxy.org/) protocol. |false| | maxTopicsPerNamespace | The maximum number of persistent topics that can be created in the namespace. When the number of topics reaches this threshold, the broker rejects the request of creating a new topic, including the auto-created topics by the producer or consumer, until the number of connected consumers decreases. The default value 0 disables the check. | 0 | |subscriptionType [...]
+      
+    Available options are `NONE`, `LZ4`, `ZLIB`, `ZSTD`, and `SNAPPY`).   
+      
+    If this value is `NONE` or invalid, the `managedLedgerInfo` is not compressed.   
+      
+    **Note** that after enabling this configuration, if you want to degrade a broker, you need to change the value to `NONE` and make sure all ledger metadata is saved without compression. | None | | additionalServlets | Additional servlet name.   
+      
+    If you have multiple additional servlets, separate them by commas.   
+      
+    For example, additionalServlet_1, additionalServlet_2 | N/A | | additionalServletDirectory | Location of broker additional servlet NAR directory | ./brokerAdditionalServlet | | brokerEntryMetadataInterceptors | Set broker entry metadata interceptors.  
+      
+    Multiple interceptors should be separated by commas.   
+      
+    Available values:
+    - org.apache.pulsar.common.intercept.AppendBrokerTimestampMetadataInterceptor
+    - org.apache.pulsar.common.intercept.AppendIndexMetadataInterceptor
+      
+      
+    Example  
     brokerEntryMetadataInterceptors=org.apache.pulsar.common.intercept.AppendBrokerTimestampMetadataInterceptor, org.apache.pulsar.common.intercept.AppendIndexMetadataInterceptor|N/A | | enableExposingBrokerEntryMetadataToClient|Whether to expose broker entry metadata to client or not.  
       
     Available values:
@@ -252,6 +264,22 @@ Instead, you can set a subscription expiration time for each <strong>namespace</
       
     Example  
     enableExposingBrokerEntryMetadataToClient=true | false |&lt;/p&gt; 
+    #### Deprecated parameters of Broker
+    
+    The following parameters have been deprecated in the `conf/broker.conf` file.
+    
+    | Name                                         | Description                                                                                                     | Default |
+    | -------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | ------- |
+    | backlogQuotaDefaultLimitGB                   | Use `backlogQuotaDefaultLimitBytes` instead.                                                                    | -1      |
+    | brokerServicePurgeInactiveFrequencyInSeconds | Use `brokerDeleteInactiveTopicsFrequencySeconds`.                                                               | 60      |
+    | tlsEnabled                                   | Use `webServicePortTls` and `brokerServicePortTls` instead.                                                     | false   |
+    | replicationTlsEnabled                        | Enable TLS when talking with other clusters to replicate messages. Use `brokerClientTlsEnabled` instead.        | false   |
+    | subscriptionKeySharedEnable                  | Whether to enable the Key_Shared subscription. Use `subscriptionTypesEnabled` instead.                          | true    |
+    | zookeeperServers                             | Zookeeper quorum connection string. Use `metadataStoreUrl` instead.                                             | N/A     |
+    | configurationStoreServers                    | Configuration store connection string (as a comma-separated list). Use `configurationMetadataStoreUrl` instead. | N/A     |
+    | zooKeeperSessionTimeoutMillis                | Zookeeper session timeout in milliseconds. Use `metadataStoreSessionTimeoutMillis` instead.                     | 30000   |
+    | zooKeeperCacheExpirySeconds                  | ZooKeeper cache expiry time in seconds. Use `metadataStoreCacheExpirySeconds` instead.                          | 300     |
+    
     ## Client
     
     You can use the [`pulsar-client`](/docs/fr/next/reference-cli-tools#pulsar-client) CLI tool to publish messages to and consume messages from Pulsar topics. You can use this tool in place of a client library.
@@ -321,32 +349,51 @@ Instead, you can set a subscription expiration time for each <strong>namespace</
                                 - PKCS12&lt;/td&gt; 
                                     &lt;/tr&gt; 
                                     &lt;/tbody&gt; &lt;/table&gt; 
+                                    #### Deprecated parameters of standalone Pulsar
+                                    
+                                    The following parameters have been deprecated in the `conf/standalone.conf` file.
+                                    
+                                    | Name                             | Description                                                                                      | Default |
+                                    | -------------------------------- | ------------------------------------------------------------------------------------------------ | ------- |
+                                    | zooKeeperOperationTimeoutSeconds | ZooKeeper operation timeout in seconds. Use `metadataStoreOperationTimeoutSeconds` instead.      | 30      |
+                                    | zooKeeperCacheExpirySeconds      | ZooKeeper cache expiry time in seconds. Use `metadataStoreCacheExpirySeconds` instead.           | 300     |
+                                    | zooKeeperSessionTimeoutMillis    | The ZooKeeper session timeout, in milliseconds. Use `metadataStoreSessionTimeoutMillis` instead. | 30000   |
+                                    
                                     ## WebSocket
                                     
-                                    | Name                                 | Description                            | Default |
-                                    | ------------------------------------ | -------------------------------------- | ------- |
-                                    | configurationStoreServers            |                                        |         |
-                                    | zooKeeperSessionTimeoutMillis        |                                        | 30000   |
-                                    | zooKeeperCacheExpirySeconds          | ZooKeeper cache expiry time in seconds | 300     |
-                                    | serviceUrl                           |                                        |         |
-                                    | serviceUrlTls                        |                                        |         |
-                                    | brokerServiceUrl                     |                                        |         |
-                                    | brokerServiceUrlTls                  |                                        |         |
-                                    | webServicePort                       |                                        | 8080    |
-                                    | webServicePortTls                    |                                        | 8443    |
-                                    | bindAddress                          |                                        | 0.0.0.0 |
-                                    | clusterName                          |                                        |         |
-                                    | authenticationEnabled                |                                        | false   |
-                                    | authenticationProviders              |                                        |         |
-                                    | authorizationEnabled                 |                                        | false   |
-                                    | superUserRoles                       |                                        |         |
-                                    | brokerClientAuthenticationPlugin     |                                        |         |
-                                    | brokerClientAuthenticationParameters |                                        |         |
-                                    | tlsEnabled                           |                                        | false   |
-                                    | tlsAllowInsecureConnection           |                                        | false   |
-                                    | tlsCertificateFilePath               |                                        |         |
-                                    | tlsKeyFilePath                       |                                        |         |
-                                    | tlsTrustCertsFilePath                |                                        |         |
+                                    | Name                                 | Description                                     | Default |
+                                    | ------------------------------------ | ----------------------------------------------- | ------- |
+                                    | configurationMetadataStoreUrl        |                                                 |         |
+                                    | metadataStoreSessionTimeoutMillis    | Metadata store session timeout in milliseconds. | 30000   |
+                                    | metadataStoreCacheExpirySeconds      | Metadata store cache expiry time in seconds     | 300     |
+                                    | serviceUrl                           |                                                 |         |
+                                    | serviceUrlTls                        |                                                 |         |
+                                    | brokerServiceUrl                     |                                                 |         |
+                                    | brokerServiceUrlTls                  |                                                 |         |
+                                    | webServicePort                       |                                                 | 8080    |
+                                    | webServicePortTls                    |                                                 | 8443    |
+                                    | bindAddress                          |                                                 | 0.0.0.0 |
+                                    | clusterName                          |                                                 |         |
+                                    | authenticationEnabled                |                                                 | false   |
+                                    | authenticationProviders              |                                                 |         |
+                                    | authorizationEnabled                 |                                                 | false   |
+                                    | superUserRoles                       |                                                 |         |
+                                    | brokerClientAuthenticationPlugin     |                                                 |         |
+                                    | brokerClientAuthenticationParameters |                                                 |         |
+                                    | tlsEnabled                           |                                                 | false   |
+                                    | tlsAllowInsecureConnection           |                                                 | false   |
+                                    | tlsCertificateFilePath               |                                                 |         |
+                                    | tlsKeyFilePath                       |                                                 |         |
+                                    | tlsTrustCertsFilePath                |                                                 |         |
+                                    
+                                    #### Deprecated parameters of WebSocket
+                                    
+                                    The following parameters have been deprecated in the `conf/websocket.conf` file.
+                                    
+                                    | Name                          | Description                                                                                     | Default |
+                                    | ----------------------------- | ----------------------------------------------------------------------------------------------- | ------- |
+                                    | zooKeeperSessionTimeoutMillis | The ZooKeeper session timeout in milliseconds. Use `metadataStoreSessionTimeoutMillis` instead. | 30000   |
+                                    | zooKeeperCacheExpirySeconds   | ZooKeeper cache expiry time in seconds. Use `metadataStoreCacheExpirySeconds` instead.          | 300     |
                                     
                                     ## Pulsar proxy
                                     
@@ -359,6 +406,16 @@ Instead, you can set a subscription expiration time for each <strong>namespace</
                                             - 2: Parse and log channel information, command information and message body.&lt;/td&gt; 
                                                 &lt;/tr&gt; 
                                                 &lt;/tbody&gt; &lt;/table&gt; 
+                                                #### Deprecated parameters of Pulsar proxy
+                                                
+                                                The following parameters have been deprecated in the `conf/proxy.conf` file.
+                                                
+                                                | Name                        | Description                                                                                   | Default |
+                                                | --------------------------- | --------------------------------------------------------------------------------------------- | ------- |
+                                                | tlsEnabledInProxy           | Deprecated - use `servicePortTls` and `webServicePortTls` instead.                            | false   |
+                                                | zookeeperSessionTimeoutMs   | ZooKeeper session timeout (in milliseconds). Use `metadataStoreSessionTimeoutMillis` instead. | 30000   |
+                                                | zooKeeperCacheExpirySeconds | ZooKeeper cache expiry time in seconds. Use `metadataStoreCacheExpirySeconds` instead.        | 300     |
+                                                
                                                 ## ZooKeeper
                                                 
                                                 ZooKeeper handles a broad range of essential configuration- and coordination-related tasks for Pulsar. The default configuration file for ZooKeeper is in the `conf/zookeeper.conf` file in your Pulsar installation. The following parameters are available:
diff --git a/content/docs/fr/next/reference-configuration/index.html b/content/docs/fr/next/reference-configuration/index.html
index e507e55..9048d80 100644
--- a/content/docs/fr/next/reference-configuration/index.html
+++ b/content/docs/fr/next/reference-configuration/index.html
@@ -209,7 +209,7 @@
 <p>If there are multiple listeners, separate them with commas.</p>
 <p><strong>Note</strong>: do not use this configuration with <code>advertisedAddress</code> and <code>brokerServicePort</code>. If the value of this configuration is empty, the broker uses <code>advertisedAddress</code> and <code>brokerServicePort</code>|/| |internalListenerName|Specify the internal listener name for the broker.</p>
 <p><strong>Note</strong>: the listener name must be contained in <code>advertisedListeners</code>.</p>
-<p>If the value of this configuration is empty, the broker uses the first listener as the internal listener.|/| |authenticateOriginalAuthData| If this flag is set to <code>true</code>, the broker authenticates the original Auth data; else it just accepts the originalPrincipal and authorizes it (if required). |false| |enablePersistentTopics| Whether persistent topics are enabled on the broker |true| |enableNonPersistentTopics| Whether non-persistent topics are enabled on the broker |true| [...]
+<p>If the value of this configuration is empty, the broker uses the first listener as the internal listener.|/| |authenticateOriginalAuthData| If this flag is set to <code>true</code>, the broker authenticates the original Auth data; else it just accepts the originalPrincipal and authorizes it (if required). |false| |enablePersistentTopics| Whether persistent topics are enabled on the broker |true| |enableNonPersistentTopics| Whether non-persistent topics are enabled on the broker |true| [...]
 <ul>
 <li><p>'producer_request_hold' Policy which holds producer's send request until the resource becomes available (or holding times out)</p></li>
 <li><p>'producer_exception' Policy which throws <code>javax.jms.ResourceAllocationException</code> to the producer</p></li>
@@ -218,32 +218,44 @@
 <li><p><code>delete_when_no_subscriptions</code>: delete the topic which has no subscriptions or active producers.</p>
 <ul>
 <li><p><code>delete_when_subscriptions_caught_up</code>: delete the topic whose subscriptions have no backlogs and which has no active producers or consumers. | <code>delete_when_no_subscriptions</code> | | brokerDeleteInactiveTopicsMaxInactiveDurationSeconds | Set the maximum duration for inactive topics. If it is not specified, the <code>brokerDeleteInactiveTopicsFrequencySeconds</code> parameter is adopted. | N/A | |forceDeleteTenantAllowed| Enable you to delete a tenant forcefully. | [...]
-<p>Set this threshold to 0 means disabling the compression check.|N/A |delayedDeliveryEnabled| Whether to enable the delayed delivery for messages. If disabled, messages will be immediately delivered and there will be no tracking overhead.|true| |delayedDeliveryTickTimeMillis|Control the tick time for retrying on delayed delivery, which affects the accuracy of the delivery time compared to the scheduled time. By default, it is 1 second.|1000| |activeConsumerFailoverDelayTimeMillis| How l [...]
+<p>Set this threshold to 0 means disabling the compression check.|N/A |delayedDeliveryEnabled| Whether to enable the delayed delivery for messages. If disabled, messages will be immediately delivered and there will be no tracking overhead.|true| |delayedDeliveryTickTimeMillis|Control the tick time for retrying on delayed delivery, which affects the accuracy of the delivery time compared to the scheduled time. By default, it is 1 second.|1000| |activeConsumerFailoverDelayTimeMillis| How l [...]
 <p>Setting this configuration to a value <strong>greater than 0</strong> deletes inactive subscriptions automatically.<br>
 Setting this configuration to <strong>0</strong> does not delete inactive subscriptions automatically.</p>
 <p>Since this configuration takes effect on all topics, if there is even one topic whose subscriptions should not be deleted automatically, you need to set it to 0.<br>
-Instead, you can set a subscription expiration time for each <strong>namespace</strong> using the <a href="https://pulsar.apache.org/tools/pulsar-admin/2.6.0-SNAPSHOT/#-em-set-subscription-expiration-time-em-"><code>pulsar-admin namespaces set-subscription-expiration-time options</code> command</a>. | 0 | |maxConcurrentLookupRequest| Max number of concurrent lookup request broker allows to throttle heavy incoming lookup traffic |50000| |maxConcurrentTopicLoadRequest| Max number of concur [...]
+Instead, you can set a subscription expiration time for each <strong>namespace</strong> using the <a href="https://pulsar.apache.org/tools/pulsar-admin/2.6.0-SNAPSHOT/#-em-set-subscription-expiration-time-em-"><code>pulsar-admin namespaces set-subscription-expiration-time options</code> command</a>. | 0 | |maxConcurrentLookupRequest| Max number of concurrent lookup request broker allows to throttle heavy incoming lookup traffic |50000| |maxConcurrentTopicLoadRequest| Max number of concur [...]
 <ul>
 <li>The max rollover time has been reached</li>
 <li>The max entries have been written to the ledger</li>
-<li>The max ledger size has been written to the ledger|50000| |managedLedgerMinLedgerRolloverTimeMinutes| Minimum time between ledger rollover for a topic |10| |managedLedgerMaxLedgerRolloverTimeMinutes| Maximum time before forcing a ledger rollover for a topic |240| |managedLedgerCursorMaxEntriesPerLedger| Max number of entries to append to a cursor ledger |50000| |managedLedgerCursorRolloverTimeInSeconds| Max time before triggering a rollover on a cursor ledger |14400| |managedLedgerMa [...]
-<code>brokerDeleteInactiveTopicsFrequencySeconds</code>.|60| |transactionCoordinatorEnabled|Whether to enable transaction coordinator in broker.|true| |transactionMetadataStoreProviderClassName| |org.apache.pulsar.transaction.coordinator.impl.InMemTransactionMetadataStoreProvider| |defaultRetentionTimeInMinutes| Default message retention time |0| |defaultRetentionSizeInMB| Default retention size |0| |keepAliveIntervalSeconds| How often to check whether the connections are still alive |30 [...]
-|haProxyProtocolEnabled | Enable or disable the <a href="http://www.haproxy.org/">HAProxy</a> protocol. |false| | maxTopicsPerNamespace | The maximum number of persistent topics that can be created in the namespace. When the number of topics reaches this threshold, the broker rejects the request of creating a new topic, including the auto-created topics by the producer or consumer, until the number of connected consumers decreases. The default value 0 disables the check. | 0 | |subscript [...]
-</ul>
-<p>Available options are <code>NONE</code>, <code>LZ4</code>, <code>ZLIB</code>, <code>ZSTD</code>, and <code>SNAPPY</code>).</p>
-<p>If this value is <code>NONE</code> or invalid, the <code>managedLedgerInfo</code> is not compressed.</p>
-<p><strong>Note</strong> that after enabling this configuration, if you want to degrade a broker, you need to change the value to <code>NONE</code> and make sure all ledger metadata is saved without compression. | None | | additionalServlets | Additional servlet name.</p>
-<p>If you have multiple additional servlets, separate them by commas.</p>
-<p>For example, additionalServlet_1, additionalServlet_2 | N/A | | additionalServletDirectory | Location of broker additional servlet NAR directory | ./brokerAdditionalServlet | | brokerEntryMetadataInterceptors | Set broker entry metadata interceptors.</p>
-<p>Multiple interceptors should be separated by commas.</p>
-<p>Available values:</p>
-<ul>
-<li>org.apache.pulsar.common.intercept.AppendBrokerTimestampMetadataInterceptor</li>
-<li>org.apache.pulsar.common.intercept.AppendIndexMetadataInterceptor</li>
+<li>The max ledger size has been written to the ledger|50000| |managedLedgerMinLedgerRolloverTimeMinutes| Minimum time between ledger rollover for a topic |10| |managedLedgerMaxLedgerRolloverTimeMinutes| Maximum time before forcing a ledger rollover for a topic |240| |managedLedgerInactiveLedgerRolloverTimeSeconds| Time to rollover ledger for inactive topic |0| |managedLedgerCursorMaxEntriesPerLedger| Max number of entries to append to a cursor ledger |50000| |managedLedgerCursorRollover [...]
 </ul></li>
 </ul></li>
 </ul>
-<pre><code class="hljs">    Example  
+<pre><code class="hljs">    Available values: 
+    - `org.apache.pulsar.broker.loadbalance.impl.ThresholdShedder`
+    - `org.apache.pulsar.broker.loadbalance.impl.OverloadShedder`
+    - `org.apache.pulsar.broker.loadbalance.impl.UniformLoadShedder`
+      
+    For the comparisons of the shedding strategies, see [here](administration-load-balance/#shed-load-automatically).|`org.apache.pulsar.broker.loadbalance.impl.ThresholdShedder` |replicationMetricsEnabled| Enable replication metrics |true| |replicationConnectionsPerBroker| Max number of connections to open for each broker in a remote cluster More connections host-to-host lead to better throughput over high-latency links. |16| |replicationProducerQueueSize| Replicator producer queue size [...]
+    |haProxyProtocolEnabled | Enable or disable the [HAProxy](http://www.haproxy.org/) protocol. |false| | maxTopicsPerNamespace | The maximum number of persistent topics that can be created in the namespace. When the number of topics reaches this threshold, the broker rejects the request of creating a new topic, including the auto-created topics by the producer or consumer, until the number of connected consumers decreases. The default value 0 disables the check. | 0 | |subscriptionType [...]
+      
+    Available options are `NONE`, `LZ4`, `ZLIB`, `ZSTD`, and `SNAPPY`).   
+      
+    If this value is `NONE` or invalid, the `managedLedgerInfo` is not compressed.   
+      
+    **Note** that after enabling this configuration, if you want to degrade a broker, you need to change the value to `NONE` and make sure all ledger metadata is saved without compression. | None | | additionalServlets | Additional servlet name.   
+      
+    If you have multiple additional servlets, separate them by commas.   
+      
+    For example, additionalServlet_1, additionalServlet_2 | N/A | | additionalServletDirectory | Location of broker additional servlet NAR directory | ./brokerAdditionalServlet | | brokerEntryMetadataInterceptors | Set broker entry metadata interceptors.  
+      
+    Multiple interceptors should be separated by commas.   
+      
+    Available values:
+    - org.apache.pulsar.common.intercept.AppendBrokerTimestampMetadataInterceptor
+    - org.apache.pulsar.common.intercept.AppendIndexMetadataInterceptor
+      
+      
+    Example  
     brokerEntryMetadataInterceptors=org.apache.pulsar.common.intercept.AppendBrokerTimestampMetadataInterceptor, org.apache.pulsar.common.intercept.AppendIndexMetadataInterceptor|N/A | | enableExposingBrokerEntryMetadataToClient|Whether to expose broker entry metadata to client or not.  
       
     Available values:
@@ -252,6 +264,22 @@ Instead, you can set a subscription expiration time for each <strong>namespace</
       
     Example  
     enableExposingBrokerEntryMetadataToClient=true | false |&lt;/p&gt; 
+    #### Deprecated parameters of Broker
+    
+    The following parameters have been deprecated in the `conf/broker.conf` file.
+    
+    | Name                                         | Description                                                                                                     | Default |
+    | -------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | ------- |
+    | backlogQuotaDefaultLimitGB                   | Use `backlogQuotaDefaultLimitBytes` instead.                                                                    | -1      |
+    | brokerServicePurgeInactiveFrequencyInSeconds | Use `brokerDeleteInactiveTopicsFrequencySeconds`.                                                               | 60      |
+    | tlsEnabled                                   | Use `webServicePortTls` and `brokerServicePortTls` instead.                                                     | false   |
+    | replicationTlsEnabled                        | Enable TLS when talking with other clusters to replicate messages. Use `brokerClientTlsEnabled` instead.        | false   |
+    | subscriptionKeySharedEnable                  | Whether to enable the Key_Shared subscription. Use `subscriptionTypesEnabled` instead.                          | true    |
+    | zookeeperServers                             | Zookeeper quorum connection string. Use `metadataStoreUrl` instead.                                             | N/A     |
+    | configurationStoreServers                    | Configuration store connection string (as a comma-separated list). Use `configurationMetadataStoreUrl` instead. | N/A     |
+    | zooKeeperSessionTimeoutMillis                | Zookeeper session timeout in milliseconds. Use `metadataStoreSessionTimeoutMillis` instead.                     | 30000   |
+    | zooKeeperCacheExpirySeconds                  | ZooKeeper cache expiry time in seconds. Use `metadataStoreCacheExpirySeconds` instead.                          | 300     |
+    
     ## Client
     
     You can use the [`pulsar-client`](/docs/fr/next/reference-cli-tools#pulsar-client) CLI tool to publish messages to and consume messages from Pulsar topics. You can use this tool in place of a client library.
@@ -321,32 +349,51 @@ Instead, you can set a subscription expiration time for each <strong>namespace</
                                 - PKCS12&lt;/td&gt; 
                                     &lt;/tr&gt; 
                                     &lt;/tbody&gt; &lt;/table&gt; 
+                                    #### Deprecated parameters of standalone Pulsar
+                                    
+                                    The following parameters have been deprecated in the `conf/standalone.conf` file.
+                                    
+                                    | Name                             | Description                                                                                      | Default |
+                                    | -------------------------------- | ------------------------------------------------------------------------------------------------ | ------- |
+                                    | zooKeeperOperationTimeoutSeconds | ZooKeeper operation timeout in seconds. Use `metadataStoreOperationTimeoutSeconds` instead.      | 30      |
+                                    | zooKeeperCacheExpirySeconds      | ZooKeeper cache expiry time in seconds. Use `metadataStoreCacheExpirySeconds` instead.           | 300     |
+                                    | zooKeeperSessionTimeoutMillis    | The ZooKeeper session timeout, in milliseconds. Use `metadataStoreSessionTimeoutMillis` instead. | 30000   |
+                                    
                                     ## WebSocket
                                     
-                                    | Name                                 | Description                            | Default |
-                                    | ------------------------------------ | -------------------------------------- | ------- |
-                                    | configurationStoreServers            |                                        |         |
-                                    | zooKeeperSessionTimeoutMillis        |                                        | 30000   |
-                                    | zooKeeperCacheExpirySeconds          | ZooKeeper cache expiry time in seconds | 300     |
-                                    | serviceUrl                           |                                        |         |
-                                    | serviceUrlTls                        |                                        |         |
-                                    | brokerServiceUrl                     |                                        |         |
-                                    | brokerServiceUrlTls                  |                                        |         |
-                                    | webServicePort                       |                                        | 8080    |
-                                    | webServicePortTls                    |                                        | 8443    |
-                                    | bindAddress                          |                                        | 0.0.0.0 |
-                                    | clusterName                          |                                        |         |
-                                    | authenticationEnabled                |                                        | false   |
-                                    | authenticationProviders              |                                        |         |
-                                    | authorizationEnabled                 |                                        | false   |
-                                    | superUserRoles                       |                                        |         |
-                                    | brokerClientAuthenticationPlugin     |                                        |         |
-                                    | brokerClientAuthenticationParameters |                                        |         |
-                                    | tlsEnabled                           |                                        | false   |
-                                    | tlsAllowInsecureConnection           |                                        | false   |
-                                    | tlsCertificateFilePath               |                                        |         |
-                                    | tlsKeyFilePath                       |                                        |         |
-                                    | tlsTrustCertsFilePath                |                                        |         |
+                                    | Name                                 | Description                                     | Default |
+                                    | ------------------------------------ | ----------------------------------------------- | ------- |
+                                    | configurationMetadataStoreUrl        |                                                 |         |
+                                    | metadataStoreSessionTimeoutMillis    | Metadata store session timeout in milliseconds. | 30000   |
+                                    | metadataStoreCacheExpirySeconds      | Metadata store cache expiry time in seconds     | 300     |
+                                    | serviceUrl                           |                                                 |         |
+                                    | serviceUrlTls                        |                                                 |         |
+                                    | brokerServiceUrl                     |                                                 |         |
+                                    | brokerServiceUrlTls                  |                                                 |         |
+                                    | webServicePort                       |                                                 | 8080    |
+                                    | webServicePortTls                    |                                                 | 8443    |
+                                    | bindAddress                          |                                                 | 0.0.0.0 |
+                                    | clusterName                          |                                                 |         |
+                                    | authenticationEnabled                |                                                 | false   |
+                                    | authenticationProviders              |                                                 |         |
+                                    | authorizationEnabled                 |                                                 | false   |
+                                    | superUserRoles                       |                                                 |         |
+                                    | brokerClientAuthenticationPlugin     |                                                 |         |
+                                    | brokerClientAuthenticationParameters |                                                 |         |
+                                    | tlsEnabled                           |                                                 | false   |
+                                    | tlsAllowInsecureConnection           |                                                 | false   |
+                                    | tlsCertificateFilePath               |                                                 |         |
+                                    | tlsKeyFilePath                       |                                                 |         |
+                                    | tlsTrustCertsFilePath                |                                                 |         |
+                                    
+                                    #### Deprecated parameters of WebSocket
+                                    
+                                    The following parameters have been deprecated in the `conf/websocket.conf` file.
+                                    
+                                    | Name                          | Description                                                                                     | Default |
+                                    | ----------------------------- | ----------------------------------------------------------------------------------------------- | ------- |
+                                    | zooKeeperSessionTimeoutMillis | The ZooKeeper session timeout in milliseconds. Use `metadataStoreSessionTimeoutMillis` instead. | 30000   |
+                                    | zooKeeperCacheExpirySeconds   | ZooKeeper cache expiry time in seconds. Use `metadataStoreCacheExpirySeconds` instead.          | 300     |
                                     
                                     ## Pulsar proxy
                                     
@@ -359,6 +406,16 @@ Instead, you can set a subscription expiration time for each <strong>namespace</
                                             - 2: Parse and log channel information, command information and message body.&lt;/td&gt; 
                                                 &lt;/tr&gt; 
                                                 &lt;/tbody&gt; &lt;/table&gt; 
+                                                #### Deprecated parameters of Pulsar proxy
+                                                
+                                                The following parameters have been deprecated in the `conf/proxy.conf` file.
+                                                
+                                                | Name                        | Description                                                                                   | Default |
+                                                | --------------------------- | --------------------------------------------------------------------------------------------- | ------- |
+                                                | tlsEnabledInProxy           | Deprecated - use `servicePortTls` and `webServicePortTls` instead.                            | false   |
+                                                | zookeeperSessionTimeoutMs   | ZooKeeper session timeout (in milliseconds). Use `metadataStoreSessionTimeoutMillis` instead. | 30000   |
+                                                | zooKeeperCacheExpirySeconds | ZooKeeper cache expiry time in seconds. Use `metadataStoreCacheExpirySeconds` instead.        | 300     |
+                                                
                                                 ## ZooKeeper
                                                 
                                                 ZooKeeper handles a broad range of essential configuration- and coordination-related tasks for Pulsar. The default configuration file for ZooKeeper is in the `conf/zookeeper.conf` file in your Pulsar installation. The following parameters are available:
diff --git a/content/docs/fr/next/reference-metrics.html b/content/docs/fr/next/reference-metrics.html
index f35db8d..08b1eb1 100644
--- a/content/docs/fr/next/reference-metrics.html
+++ b/content/docs/fr/next/reference-metrics.html
@@ -202,9 +202,10 @@
 <tr><th>Name</th><th>Type</th><th>Description</th></tr>
 </thead>
 <tbody>
-<tr><td>bookkeeper_server_BOOKIE_QUARANTINE_count</td><td>Counter</td><td>The number of bookie clients to be quarantined.</td></tr>
+<tr><td>pulsar_managedLedger_client_bookkeeper_client_BOOKIE_QUARANTINE</td><td>Counter</td><td>The number of bookie clients to be quarantined.</td></tr>
 </tbody>
 </table>
+<p>If you want to expose this metric, set <code>bookkeeperClientExposeStatsToPrometheus</code> to <code>true</code> in the <code>broker.conf</code> file. |</p>
 <h3><a class="anchor" aria-hidden="true" id="namespace-metrics"></a><a href="#namespace-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- [...]
 <blockquote>
 <p>Namespace metrics are only exposed when <code>exposeTopicLevelMetricsInPrometheus</code> is set to <code>false</code>.</p>
@@ -302,6 +303,7 @@ Available thresholds:</p>
 <tr><td>pulsar_consumers_count</td><td>Gauge</td><td>The number of active consumers of the topic connected to this broker.</td></tr>
 <tr><td>pulsar_rate_in</td><td>Gauge</td><td>The total message rate of the topic coming into this broker (messages/second).</td></tr>
 <tr><td>pulsar_rate_out</td><td>Gauge</td><td>The total message rate of the topic going out from this broker (messages/second).</td></tr>
+<tr><td>pulsar_publish_rate_limit_times</td><td>Gauge</td><td>The number of times the publish rate limit is triggered.</td></tr>
 <tr><td>pulsar_throughput_in</td><td>Gauge</td><td>The total throughput of the topic coming into this broker (bytes/second).</td></tr>
 <tr><td>pulsar_throughput_out</td><td>Gauge</td><td>The total throughput of the topic going out from this broker (bytes/second).</td></tr>
 <tr><td>pulsar_storage_size</td><td>Gauge</td><td>The total storage size of the topics in this topic owned by this broker (bytes).</td></tr>
diff --git a/content/docs/fr/next/reference-metrics/index.html b/content/docs/fr/next/reference-metrics/index.html
index f35db8d..08b1eb1 100644
--- a/content/docs/fr/next/reference-metrics/index.html
+++ b/content/docs/fr/next/reference-metrics/index.html
@@ -202,9 +202,10 @@
 <tr><th>Name</th><th>Type</th><th>Description</th></tr>
 </thead>
 <tbody>
-<tr><td>bookkeeper_server_BOOKIE_QUARANTINE_count</td><td>Counter</td><td>The number of bookie clients to be quarantined.</td></tr>
+<tr><td>pulsar_managedLedger_client_bookkeeper_client_BOOKIE_QUARANTINE</td><td>Counter</td><td>The number of bookie clients to be quarantined.</td></tr>
 </tbody>
 </table>
+<p>If you want to expose this metric, set <code>bookkeeperClientExposeStatsToPrometheus</code> to <code>true</code> in the <code>broker.conf</code> file. |</p>
 <h3><a class="anchor" aria-hidden="true" id="namespace-metrics"></a><a href="#namespace-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- [...]
 <blockquote>
 <p>Namespace metrics are only exposed when <code>exposeTopicLevelMetricsInPrometheus</code> is set to <code>false</code>.</p>
@@ -302,6 +303,7 @@ Available thresholds:</p>
 <tr><td>pulsar_consumers_count</td><td>Gauge</td><td>The number of active consumers of the topic connected to this broker.</td></tr>
 <tr><td>pulsar_rate_in</td><td>Gauge</td><td>The total message rate of the topic coming into this broker (messages/second).</td></tr>
 <tr><td>pulsar_rate_out</td><td>Gauge</td><td>The total message rate of the topic going out from this broker (messages/second).</td></tr>
+<tr><td>pulsar_publish_rate_limit_times</td><td>Gauge</td><td>The number of times the publish rate limit is triggered.</td></tr>
 <tr><td>pulsar_throughput_in</td><td>Gauge</td><td>The total throughput of the topic coming into this broker (bytes/second).</td></tr>
 <tr><td>pulsar_throughput_out</td><td>Gauge</td><td>The total throughput of the topic going out from this broker (bytes/second).</td></tr>
 <tr><td>pulsar_storage_size</td><td>Gauge</td><td>The total storage size of the topics in this topic owned by this broker (bytes).</td></tr>
diff --git a/content/docs/fr/next/schema-evolution-compatibility.html b/content/docs/fr/next/schema-evolution-compatibility.html
index 2714f5f..233e03d 100644
--- a/content/docs/fr/next/schema-evolution-compatibility.html
+++ b/content/docs/fr/next/schema-evolution-compatibility.html
@@ -428,7 +428,7 @@
 <p>In some data formats, for example, Avro, you can define fields with default values. Consequently, adding or removing a field with a default value is a fully compatible change.</p>
 <blockquote>
 <p><strong>Tip</strong></p>
-<p>You can set schema compatibility check strategy at namespace or broker level. For how to set the strategy, see <a href="/docs/fr/next/schema-manage/#set-schema-compatibility-check-strategy">here</a>.</p>
+<p>You can set schema compatibility check strategy at the topic, namespace or broker level. For how to set the strategy, see <a href="/docs/fr/next/schema-manage/#set-schema-compatibility-check-strategy">here</a>.</p>
 </blockquote>
 <h2><a class="anchor" aria-hidden="true" id="schema-verification"></a><a href="#schema-verification" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
 <p>When a producer or a consumer tries to connect to a topic, a broker performs some checks to verify a schema.</p>
diff --git a/content/docs/fr/next/schema-evolution-compatibility/index.html b/content/docs/fr/next/schema-evolution-compatibility/index.html
index 2714f5f..233e03d 100644
--- a/content/docs/fr/next/schema-evolution-compatibility/index.html
+++ b/content/docs/fr/next/schema-evolution-compatibility/index.html
@@ -428,7 +428,7 @@
 <p>In some data formats, for example, Avro, you can define fields with default values. Consequently, adding or removing a field with a default value is a fully compatible change.</p>
 <blockquote>
 <p><strong>Tip</strong></p>
-<p>You can set schema compatibility check strategy at namespace or broker level. For how to set the strategy, see <a href="/docs/fr/next/schema-manage/#set-schema-compatibility-check-strategy">here</a>.</p>
+<p>You can set schema compatibility check strategy at the topic, namespace or broker level. For how to set the strategy, see <a href="/docs/fr/next/schema-manage/#set-schema-compatibility-check-strategy">here</a>.</p>
 </blockquote>
 <h2><a class="anchor" aria-hidden="true" id="schema-verification"></a><a href="#schema-verification" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
 <p>When a producer or a consumer tries to connect to a topic, a broker performs some checks to verify a schema.</p>
diff --git a/content/docs/fr/next/security-overview.html b/content/docs/fr/next/security-overview.html
index 9d6585f..9a48be5 100644
--- a/content/docs/fr/next/security-overview.html
+++ b/content/docs/fr/next/security-overview.html
@@ -91,7 +91,7 @@
 <li><a href="/docs/fr/next/security-kerberos">Kerberos</a></li>
 <li><a href="/docs/fr/next/security-jwt">JSON Web Token Authentication</a></li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/administration-isolation"><span class="arrow-prev">← </span><span>Pulsar isolation</span></a><a class="docs-next button" href="/docs/fr/next/security-policy-and-supported-versions"><span>Suivant</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#role-tokens">Role tokens</a></li><li><a href="#authentication-provide [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/administration-isolation"><span class="arrow-prev">← </span><span>Pulsar isolation</span></a><a class="docs-next button" href="/docs/fr/next/security-policy-and-supported-versions"><span>Security Policy and Supported Versions</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#role-tokens">Role tokens</a></li><li>< [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/fr/next/security-overview/index.html b/content/docs/fr/next/security-overview/index.html
index 9d6585f..9a48be5 100644
--- a/content/docs/fr/next/security-overview/index.html
+++ b/content/docs/fr/next/security-overview/index.html
@@ -91,7 +91,7 @@
 <li><a href="/docs/fr/next/security-kerberos">Kerberos</a></li>
 <li><a href="/docs/fr/next/security-jwt">JSON Web Token Authentication</a></li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/administration-isolation"><span class="arrow-prev">← </span><span>Pulsar isolation</span></a><a class="docs-next button" href="/docs/fr/next/security-policy-and-supported-versions"><span>Suivant</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#role-tokens">Role tokens</a></li><li><a href="#authentication-provide [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/administration-isolation"><span class="arrow-prev">← </span><span>Pulsar isolation</span></a><a class="docs-next button" href="/docs/fr/next/security-policy-and-supported-versions"><span>Security Policy and Supported Versions</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#role-tokens">Role tokens</a></li><li>< [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/fr/next/security-tls-keystore.html b/content/docs/fr/next/security-tls-keystore.html
index ffea039..bb0f454 100644
--- a/content/docs/fr/next/security-tls-keystore.html
+++ b/content/docs/fr/next/security-tls-keystore.html
@@ -160,48 +160,41 @@ brokerClientTlsTrustStorePassword= // <span class="hljs-keyword">Set</span> this
 <li>tlsCiphers=[TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256], A cipher suite is a named combination of authentication, encryption, MAC and key exchange algorithm used to negotiate the security settings for a network connection using TLS network protocol. By default, it is null. <a href="https://www.openssl.org/docs/man1.0.2/apps/ciphers.html">OpenSSL Ciphers</a> <a href="http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#ciphersuites">JDK Ciphers</a></li>
 <li>tlsProtocols=[TLSv1.3,TLSv1.2] (list out the TLS protocols that you are going to accept from clients). By default, it is not set.</li>
 </ol>
-<pre><code class="hljs"><span class="hljs-comment">### Configuring Clients</span>
-
-This is similar <span class="hljs-keyword">to</span> [TLS encryption configuing <span class="hljs-keyword">for</span><span class="hljs-built_in"> client </span>with PEM type](security-tls-transport.md#Client configuration).
-<span class="hljs-keyword">For</span> a a minimal configuration,<span class="hljs-built_in"> user </span>need <span class="hljs-keyword">to</span> provide the TrustStore information.
-
-e.g. 
-1. <span class="hljs-keyword">for</span> [Command-line tools](reference-cli-tools.md) like [`pulsar-admin`](reference-cli-tools#pulsar-admin), [`pulsar-perf`](reference-cli-tools#pulsar-perf), <span class="hljs-keyword">and</span> [`pulsar-client`](reference-cli-tools#pulsar-client) use the `conf/client.conf`<span class="hljs-built_in"> config </span>file <span class="hljs-keyword">in</span> a Pulsar installation.
-
-    ```properties
-    <span class="hljs-attribute">webServiceUrl</span>=https://broker.example.com:8443/
-    <span class="hljs-attribute">brokerServiceUrl</span>=pulsar+ssl://broker.example.com:6651/
-    <span class="hljs-attribute">useKeyStoreTls</span>=<span class="hljs-literal">true</span>
-    <span class="hljs-attribute">tlsTrustStoreType</span>=JKS
-    <span class="hljs-attribute">tlsTrustStorePath</span>=/var/private/tls/client.truststore.jks
-    <span class="hljs-attribute">tlsTrustStorePassword</span>=clientpw
-    ```
-
-1. <span class="hljs-keyword">for</span> java<span class="hljs-built_in"> client
-</span>    ```java
-    import org.apache.pulsar.client.api.PulsarClient;
-
-    PulsarClient<span class="hljs-built_in"> client </span>= PulsarClient.builder()
-        .serviceUrl(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>)
-        .enableTls(<span class="hljs-literal">true</span>)
-        .useKeyStoreTls(<span class="hljs-literal">true</span>)
-        .tlsTrustStorePath(<span class="hljs-string">"/var/private/tls/client.truststore.jks"</span>)
-        .tlsTrustStorePassword(<span class="hljs-string">"clientpw"</span>)
-        .allowTlsInsecureConnection(<span class="hljs-literal">false</span>)
-        .build();
-    ```
+<h3><a class="anchor" aria-hidden="true" id="configuring-clients"></a><a href="#configuring-clients" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
+<p>This is similar to [TLS encryption configuing for client with PEM type](/docs/fr/next/security-tls-transport#Client configuration). For a a minimal configuration, user need to provide the TrustStore information.</p>
+<p>e.g.</p>
+<ol>
+<li><p>for <a href="/docs/fr/next/reference-cli-tools">Command-line tools</a> like <a href="reference-cli-tools#pulsar-admin"><code>pulsar-admin</code></a>, <a href="reference-cli-tools#pulsar-perf"><code>pulsar-perf</code></a>, and <a href="reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> use the <code>conf/client.conf</code> config file in a Pulsar installation.</p>
+<pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">https://broker.example.com:8443/</span>
+<span class="hljs-attr">brokerServiceUrl</span>=<span class="hljs-string">pulsar+ssl://broker.example.com:6651/</span>
+<span class="hljs-attr">useKeyStoreTls</span>=<span class="hljs-string">true</span>
+<span class="hljs-attr">tlsTrustStoreType</span>=<span class="hljs-string">JKS</span>
+<span class="hljs-attr">tlsTrustStorePath</span>=<span class="hljs-string">/var/private/tls/client.truststore.jks</span>
+<span class="hljs-attr">tlsTrustStorePassword</span>=<span class="hljs-string">clientpw</span>
+</code></pre></li>
+<li><p>for java client</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 
-1. <span class="hljs-keyword">for</span> java admin<span class="hljs-built_in"> client
-</span>```java
-    PulsarAdmin amdin = PulsarAdmin.builder().serviceHttpUrl(<span class="hljs-string">"https://broker.example.com:8443"</span>)
-                .useKeyStoreTls(<span class="hljs-literal">true</span>)
+PulsarClient client = PulsarClient.builder()
+    .serviceUrl(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>)
+    .enableTls(<span class="hljs-keyword">true</span>)
+    .useKeyStoreTls(<span class="hljs-keyword">true</span>)
+    .tlsTrustStorePath(<span class="hljs-string">"/var/private/tls/client.truststore.jks"</span>)
+    .tlsTrustStorePassword(<span class="hljs-string">"clientpw"</span>)
+    .allowTlsInsecureConnection(<span class="hljs-keyword">false</span>)
+    .build();
+</code></pre></li>
+<li><p>for java admin client</p></li>
+</ol>
+<pre><code class="hljs css language-java">    PulsarAdmin amdin = PulsarAdmin.builder().serviceHttpUrl(<span class="hljs-string">"https://broker.example.com:8443"</span>)
+                .useKeyStoreTls(<span class="hljs-keyword">true</span>)
                 .tlsTrustStorePath(<span class="hljs-string">"/var/private/tls/client.truststore.jks"</span>)
                 .tlsTrustStorePassword(<span class="hljs-string">"clientpw"</span>)
-                .allowTlsInsecureConnection(<span class="hljs-literal">false</span>)
+                .allowTlsInsecureConnection(<span class="hljs-keyword">false</span>)
                 .build();
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="tls-authentication-with-keystore-configure"></a><a href="#tls-authentication-with-keystore-configure" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c [...]
-<p>This similar to <a href="security-tls-authentication.md">TLS authentication with PEM type</a></p>
+<p>This similar to <a href="/docs/fr/next/security-tls-authentication">TLS authentication with PEM type</a></p>
 <h3><a class="anchor" aria-hidden="true" id="broker-authentication-config"></a><a href="#broker-authentication-config" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
 <p><code>broker.conf</code></p>
 <pre><code class="hljs css language-properties"><span class="hljs-comment"># Configuration to enable authentication</span>
@@ -241,7 +234,7 @@ e.g.
 <p>Besides the TLS encryption configuring. The main work is configuring the KeyStore, which contains a valid CN as client role, for client.</p>
 <p>e.g.</p>
 <ol>
-<li><p>for <a href="reference-cli-tools.md">Command-line tools</a> like <a href="reference-cli-tools#pulsar-admin"><code>pulsar-admin</code></a>, <a href="reference-cli-tools#pulsar-perf"><code>pulsar-perf</code></a>, and <a href="reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> use the <code>conf/client.conf</code> config file in a Pulsar installation.</p>
+<li><p>for <a href="/docs/fr/next/reference-cli-tools">Command-line tools</a> like <a href="reference-cli-tools#pulsar-admin"><code>pulsar-admin</code></a>, <a href="reference-cli-tools#pulsar-perf"><code>pulsar-perf</code></a>, and <a href="reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> use the <code>conf/client.conf</code> config file in a Pulsar installation.</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">https://broker.example.com:8443/</span>
 <span class="hljs-attr">brokerServiceUrl</span>=<span class="hljs-string">pulsar+ssl://broker.example.com:6651/</span>
 <span class="hljs-attr">useKeyStoreTls</span>=<span class="hljs-string">true</span>
@@ -283,7 +276,7 @@ PulsarClient client = PulsarClient.builder()
 <pre><code class="hljs css language-shell">-Djavax.net.debug=all
 </code></pre>
 <p>You can find more details on this in <a href="http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/ReadDebug.html">Oracle documentation</a> on <a href="http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/ReadDebug.html">debugging SSL/TLS connections</a>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/security-tls-authentication"><span class="arrow-prev">← </span><span>Authentication using TLS</span></a><a class="docs-next button" href="/docs/fr/next/security-jwt"><span>Authentication using JWT</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#overview">Overview</a></li><li><a href="#tls-encryption-with-keysto [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/security-tls-authentication"><span class="arrow-prev">← </span><span>Authentication using TLS</span></a><a class="docs-next button" href="/docs/fr/next/security-jwt"><span>Authentication using JWT</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#overview">Overview</a></li><li><a href="#tls-encryption-with-keysto [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/fr/next/security-tls-keystore/index.html b/content/docs/fr/next/security-tls-keystore/index.html
index ffea039..bb0f454 100644
--- a/content/docs/fr/next/security-tls-keystore/index.html
+++ b/content/docs/fr/next/security-tls-keystore/index.html
@@ -160,48 +160,41 @@ brokerClientTlsTrustStorePassword= // <span class="hljs-keyword">Set</span> this
 <li>tlsCiphers=[TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256], A cipher suite is a named combination of authentication, encryption, MAC and key exchange algorithm used to negotiate the security settings for a network connection using TLS network protocol. By default, it is null. <a href="https://www.openssl.org/docs/man1.0.2/apps/ciphers.html">OpenSSL Ciphers</a> <a href="http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#ciphersuites">JDK Ciphers</a></li>
 <li>tlsProtocols=[TLSv1.3,TLSv1.2] (list out the TLS protocols that you are going to accept from clients). By default, it is not set.</li>
 </ol>
-<pre><code class="hljs"><span class="hljs-comment">### Configuring Clients</span>
-
-This is similar <span class="hljs-keyword">to</span> [TLS encryption configuing <span class="hljs-keyword">for</span><span class="hljs-built_in"> client </span>with PEM type](security-tls-transport.md#Client configuration).
-<span class="hljs-keyword">For</span> a a minimal configuration,<span class="hljs-built_in"> user </span>need <span class="hljs-keyword">to</span> provide the TrustStore information.
-
-e.g. 
-1. <span class="hljs-keyword">for</span> [Command-line tools](reference-cli-tools.md) like [`pulsar-admin`](reference-cli-tools#pulsar-admin), [`pulsar-perf`](reference-cli-tools#pulsar-perf), <span class="hljs-keyword">and</span> [`pulsar-client`](reference-cli-tools#pulsar-client) use the `conf/client.conf`<span class="hljs-built_in"> config </span>file <span class="hljs-keyword">in</span> a Pulsar installation.
-
-    ```properties
-    <span class="hljs-attribute">webServiceUrl</span>=https://broker.example.com:8443/
-    <span class="hljs-attribute">brokerServiceUrl</span>=pulsar+ssl://broker.example.com:6651/
-    <span class="hljs-attribute">useKeyStoreTls</span>=<span class="hljs-literal">true</span>
-    <span class="hljs-attribute">tlsTrustStoreType</span>=JKS
-    <span class="hljs-attribute">tlsTrustStorePath</span>=/var/private/tls/client.truststore.jks
-    <span class="hljs-attribute">tlsTrustStorePassword</span>=clientpw
-    ```
-
-1. <span class="hljs-keyword">for</span> java<span class="hljs-built_in"> client
-</span>    ```java
-    import org.apache.pulsar.client.api.PulsarClient;
-
-    PulsarClient<span class="hljs-built_in"> client </span>= PulsarClient.builder()
-        .serviceUrl(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>)
-        .enableTls(<span class="hljs-literal">true</span>)
-        .useKeyStoreTls(<span class="hljs-literal">true</span>)
-        .tlsTrustStorePath(<span class="hljs-string">"/var/private/tls/client.truststore.jks"</span>)
-        .tlsTrustStorePassword(<span class="hljs-string">"clientpw"</span>)
-        .allowTlsInsecureConnection(<span class="hljs-literal">false</span>)
-        .build();
-    ```
+<h3><a class="anchor" aria-hidden="true" id="configuring-clients"></a><a href="#configuring-clients" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
+<p>This is similar to [TLS encryption configuing for client with PEM type](/docs/fr/next/security-tls-transport#Client configuration). For a a minimal configuration, user need to provide the TrustStore information.</p>
+<p>e.g.</p>
+<ol>
+<li><p>for <a href="/docs/fr/next/reference-cli-tools">Command-line tools</a> like <a href="reference-cli-tools#pulsar-admin"><code>pulsar-admin</code></a>, <a href="reference-cli-tools#pulsar-perf"><code>pulsar-perf</code></a>, and <a href="reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> use the <code>conf/client.conf</code> config file in a Pulsar installation.</p>
+<pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">https://broker.example.com:8443/</span>
+<span class="hljs-attr">brokerServiceUrl</span>=<span class="hljs-string">pulsar+ssl://broker.example.com:6651/</span>
+<span class="hljs-attr">useKeyStoreTls</span>=<span class="hljs-string">true</span>
+<span class="hljs-attr">tlsTrustStoreType</span>=<span class="hljs-string">JKS</span>
+<span class="hljs-attr">tlsTrustStorePath</span>=<span class="hljs-string">/var/private/tls/client.truststore.jks</span>
+<span class="hljs-attr">tlsTrustStorePassword</span>=<span class="hljs-string">clientpw</span>
+</code></pre></li>
+<li><p>for java client</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 
-1. <span class="hljs-keyword">for</span> java admin<span class="hljs-built_in"> client
-</span>```java
-    PulsarAdmin amdin = PulsarAdmin.builder().serviceHttpUrl(<span class="hljs-string">"https://broker.example.com:8443"</span>)
-                .useKeyStoreTls(<span class="hljs-literal">true</span>)
+PulsarClient client = PulsarClient.builder()
+    .serviceUrl(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>)
+    .enableTls(<span class="hljs-keyword">true</span>)
+    .useKeyStoreTls(<span class="hljs-keyword">true</span>)
+    .tlsTrustStorePath(<span class="hljs-string">"/var/private/tls/client.truststore.jks"</span>)
+    .tlsTrustStorePassword(<span class="hljs-string">"clientpw"</span>)
+    .allowTlsInsecureConnection(<span class="hljs-keyword">false</span>)
+    .build();
+</code></pre></li>
+<li><p>for java admin client</p></li>
+</ol>
+<pre><code class="hljs css language-java">    PulsarAdmin amdin = PulsarAdmin.builder().serviceHttpUrl(<span class="hljs-string">"https://broker.example.com:8443"</span>)
+                .useKeyStoreTls(<span class="hljs-keyword">true</span>)
                 .tlsTrustStorePath(<span class="hljs-string">"/var/private/tls/client.truststore.jks"</span>)
                 .tlsTrustStorePassword(<span class="hljs-string">"clientpw"</span>)
-                .allowTlsInsecureConnection(<span class="hljs-literal">false</span>)
+                .allowTlsInsecureConnection(<span class="hljs-keyword">false</span>)
                 .build();
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="tls-authentication-with-keystore-configure"></a><a href="#tls-authentication-with-keystore-configure" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c [...]
-<p>This similar to <a href="security-tls-authentication.md">TLS authentication with PEM type</a></p>
+<p>This similar to <a href="/docs/fr/next/security-tls-authentication">TLS authentication with PEM type</a></p>
 <h3><a class="anchor" aria-hidden="true" id="broker-authentication-config"></a><a href="#broker-authentication-config" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
 <p><code>broker.conf</code></p>
 <pre><code class="hljs css language-properties"><span class="hljs-comment"># Configuration to enable authentication</span>
@@ -241,7 +234,7 @@ e.g.
 <p>Besides the TLS encryption configuring. The main work is configuring the KeyStore, which contains a valid CN as client role, for client.</p>
 <p>e.g.</p>
 <ol>
-<li><p>for <a href="reference-cli-tools.md">Command-line tools</a> like <a href="reference-cli-tools#pulsar-admin"><code>pulsar-admin</code></a>, <a href="reference-cli-tools#pulsar-perf"><code>pulsar-perf</code></a>, and <a href="reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> use the <code>conf/client.conf</code> config file in a Pulsar installation.</p>
+<li><p>for <a href="/docs/fr/next/reference-cli-tools">Command-line tools</a> like <a href="reference-cli-tools#pulsar-admin"><code>pulsar-admin</code></a>, <a href="reference-cli-tools#pulsar-perf"><code>pulsar-perf</code></a>, and <a href="reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> use the <code>conf/client.conf</code> config file in a Pulsar installation.</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">https://broker.example.com:8443/</span>
 <span class="hljs-attr">brokerServiceUrl</span>=<span class="hljs-string">pulsar+ssl://broker.example.com:6651/</span>
 <span class="hljs-attr">useKeyStoreTls</span>=<span class="hljs-string">true</span>
@@ -283,7 +276,7 @@ PulsarClient client = PulsarClient.builder()
 <pre><code class="hljs css language-shell">-Djavax.net.debug=all
 </code></pre>
 <p>You can find more details on this in <a href="http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/ReadDebug.html">Oracle documentation</a> on <a href="http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/ReadDebug.html">debugging SSL/TLS connections</a>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/security-tls-authentication"><span class="arrow-prev">← </span><span>Authentication using TLS</span></a><a class="docs-next button" href="/docs/fr/next/security-jwt"><span>Authentication using JWT</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#overview">Overview</a></li><li><a href="#tls-encryption-with-keysto [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/security-tls-authentication"><span class="arrow-prev">← </span><span>Authentication using TLS</span></a><a class="docs-next button" href="/docs/fr/next/security-jwt"><span>Authentication using JWT</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#overview">Overview</a></li><li><a href="#tls-encryption-with-keysto [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/fr/next/security-tls-transport.html b/content/docs/fr/next/security-tls-transport.html
index 05e2a6a..9858081 100644
--- a/content/docs/fr/next/security-tls-transport.html
+++ b/content/docs/fr/next/security-tls-transport.html
@@ -251,7 +251,7 @@ var client = PulsarClient.Builder()
                          .VerifyCertificateAuthority(true) //Default is 'true'
                          .VerifyCertificateName(false)     //Default is 'false'
                          .Build();</code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/security-policy-and-supported-versions"><span class="arrow-prev">← </span><span>Précédent</span></a><a class="docs-next button" href="/docs/fr/next/security-tls-authentication"><span>Authentication using TLS</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#tls-overview">TLS overview</a></li><li><a href="#tls-con [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/security-policy-and-supported-versions"><span class="arrow-prev">← </span><span>Security Policy and Supported Versions</span></a><a class="docs-next button" href="/docs/fr/next/security-tls-authentication"><span>Authentication using TLS</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#tls-overview">TLS overview< [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/fr/next/security-tls-transport/index.html b/content/docs/fr/next/security-tls-transport/index.html
index 05e2a6a..9858081 100644
--- a/content/docs/fr/next/security-tls-transport/index.html
+++ b/content/docs/fr/next/security-tls-transport/index.html
@@ -251,7 +251,7 @@ var client = PulsarClient.Builder()
                          .VerifyCertificateAuthority(true) //Default is 'true'
                          .VerifyCertificateName(false)     //Default is 'false'
                          .Build();</code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/security-policy-and-supported-versions"><span class="arrow-prev">← </span><span>Précédent</span></a><a class="docs-next button" href="/docs/fr/next/security-tls-authentication"><span>Authentication using TLS</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#tls-overview">TLS overview</a></li><li><a href="#tls-con [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/security-policy-and-supported-versions"><span class="arrow-prev">← </span><span>Security Policy and Supported Versions</span></a><a class="docs-next button" href="/docs/fr/next/security-tls-authentication"><span>Authentication using TLS</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#tls-overview">TLS overview< [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/fr/next/standalone.html b/content/docs/fr/next/standalone.html
index 3582fd2..95d02f5 100644
--- a/content/docs/fr/next/standalone.html
+++ b/content/docs/fr/next/standalone.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="fr"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Set up a standalone Pulsar locally · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="For local development and testing, you can run Pulsar in standalone mode on your machine. The standalone mode includes a Pulsar broker, the necessary ZooKeeper and [...]
+<!DOCTYPE html><html lang="fr"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Set up a standalone Pulsar locally · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="For local development and testing, you can run Pulsar in standalone mode on your machine. The standalone mode includes a Pulsar broker, the necessary [RocksDB](htt [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,7 +74,7 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/fr" target="_blank" rel="noreferrer noopener">Translate</a><h1 id="__docusaurus" class="postHeaderTitle">Set up a standalone Pulsar locally</h1></header><article><div><span><p>For local development and testing, you can run Pulsar in standalone mode on your machine. [...]
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/fr" target="_blank" rel="noreferrer noopener">Translate</a><h1 id="__docusaurus" class="postHeaderTitle">Set up a standalone Pulsar locally</h1></header><article><div><span><p>For local development and testing, you can run Pulsar in standalone mode on your machine. [...]
 <blockquote>
 <p><strong>Pulsar in production?</strong>  <br>
 If you're looking to run a full production Pulsar installation, see the <a href="/docs/fr/next/deploy-bare-metal">Deploying a Pulsar instance</a> guide.</p>
@@ -111,7 +111,8 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.9.1
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>bin</code></td><td style="text-align:left">Pulsar's command-line tools, such as <a href="/docs/fr/next/reference-cli-tools#pulsar"><code>pulsar</code></a> and <a href="https://pulsar.apache.org/tools/pulsar-admin/"><code>pulsar-admin</code></a>.</td></tr>
-<tr><td style="text-align:left"><code>conf</code></td><td style="text-align:left">Configuration files for Pulsar, including <a href="/docs/fr/next/reference-configuration#broker">broker configuration</a>, <a href="/docs/fr/next/reference-configuration#zookeeper">ZooKeeper configuration</a>, and more.</td></tr>
+<tr><td style="text-align:left"><code>conf</code></td><td style="text-align:left">Configuration files for Pulsar, including <a href="/docs/fr/next/reference-configuration#broker">broker configuration</a> and more.</td></tr>
+<tr><td style="text-align:left"><strong>Note:</strong> Pulsar standalone uses RocksDB as the local metadata store and its configuration file path <a href="/docs/fr/next/reference-configuration"><code>metadataStoreConfigPath</code></a> is configurable in the <code>standalone.conf</code> file. For more information about the configurations of RocksDB, see <a href="https://github.com/facebook/rocksdb/blob/main/examples/rocksdb_option_file_example.ini">here</a> and related <a href="https://gi [...]
 <tr><td style="text-align:left"><code>examples</code></td><td style="text-align:left">A Java JAR file containing <a href="/docs/fr/next/functions-overview">Pulsar Functions</a> example.</td></tr>
 <tr><td style="text-align:left"><code>instances</code></td><td style="text-align:left">Artifacts created for <a href="/docs/fr/next/functions-overview">Pulsar Functions</a>.</td></tr>
 <tr><td style="text-align:left"><code>lib</code></td><td style="text-align:left">The <a href="https://en.wikipedia.org/wiki/JAR_(file_format)">JAR</a> files used by Pulsar.</td></tr>
@@ -124,7 +125,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.9.1
 <tr><th style="text-align:left">Directory</th><th style="text-align:left">Contains</th></tr>
 </thead>
 <tbody>
-<tr><td style="text-align:left"><code>data</code></td><td style="text-align:left">The data storage directory used by ZooKeeper and BookKeeper.</td></tr>
+<tr><td style="text-align:left"><code>data</code></td><td style="text-align:left">The data storage directory used by RocksDB and BookKeeper.</td></tr>
 <tr><td style="text-align:left"><code>logs</code></td><td style="text-align:left">Logs created by the installation.</td></tr>
 </tbody>
 </table>
diff --git a/content/docs/fr/next/standalone/index.html b/content/docs/fr/next/standalone/index.html
index 3582fd2..95d02f5 100644
--- a/content/docs/fr/next/standalone/index.html
+++ b/content/docs/fr/next/standalone/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="fr"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Set up a standalone Pulsar locally · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="For local development and testing, you can run Pulsar in standalone mode on your machine. The standalone mode includes a Pulsar broker, the necessary ZooKeeper and [...]
+<!DOCTYPE html><html lang="fr"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Set up a standalone Pulsar locally · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="For local development and testing, you can run Pulsar in standalone mode on your machine. The standalone mode includes a Pulsar broker, the necessary [RocksDB](htt [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,7 +74,7 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/fr" target="_blank" rel="noreferrer noopener">Translate</a><h1 id="__docusaurus" class="postHeaderTitle">Set up a standalone Pulsar locally</h1></header><article><div><span><p>For local development and testing, you can run Pulsar in standalone mode on your machine. [...]
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/fr" target="_blank" rel="noreferrer noopener">Translate</a><h1 id="__docusaurus" class="postHeaderTitle">Set up a standalone Pulsar locally</h1></header><article><div><span><p>For local development and testing, you can run Pulsar in standalone mode on your machine. [...]
 <blockquote>
 <p><strong>Pulsar in production?</strong>  <br>
 If you're looking to run a full production Pulsar installation, see the <a href="/docs/fr/next/deploy-bare-metal">Deploying a Pulsar instance</a> guide.</p>
@@ -111,7 +111,8 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.9.1
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>bin</code></td><td style="text-align:left">Pulsar's command-line tools, such as <a href="/docs/fr/next/reference-cli-tools#pulsar"><code>pulsar</code></a> and <a href="https://pulsar.apache.org/tools/pulsar-admin/"><code>pulsar-admin</code></a>.</td></tr>
-<tr><td style="text-align:left"><code>conf</code></td><td style="text-align:left">Configuration files for Pulsar, including <a href="/docs/fr/next/reference-configuration#broker">broker configuration</a>, <a href="/docs/fr/next/reference-configuration#zookeeper">ZooKeeper configuration</a>, and more.</td></tr>
+<tr><td style="text-align:left"><code>conf</code></td><td style="text-align:left">Configuration files for Pulsar, including <a href="/docs/fr/next/reference-configuration#broker">broker configuration</a> and more.</td></tr>
+<tr><td style="text-align:left"><strong>Note:</strong> Pulsar standalone uses RocksDB as the local metadata store and its configuration file path <a href="/docs/fr/next/reference-configuration"><code>metadataStoreConfigPath</code></a> is configurable in the <code>standalone.conf</code> file. For more information about the configurations of RocksDB, see <a href="https://github.com/facebook/rocksdb/blob/main/examples/rocksdb_option_file_example.ini">here</a> and related <a href="https://gi [...]
 <tr><td style="text-align:left"><code>examples</code></td><td style="text-align:left">A Java JAR file containing <a href="/docs/fr/next/functions-overview">Pulsar Functions</a> example.</td></tr>
 <tr><td style="text-align:left"><code>instances</code></td><td style="text-align:left">Artifacts created for <a href="/docs/fr/next/functions-overview">Pulsar Functions</a>.</td></tr>
 <tr><td style="text-align:left"><code>lib</code></td><td style="text-align:left">The <a href="https://en.wikipedia.org/wiki/JAR_(file_format)">JAR</a> files used by Pulsar.</td></tr>
@@ -124,7 +125,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.9.1
 <tr><th style="text-align:left">Directory</th><th style="text-align:left">Contains</th></tr>
 </thead>
 <tbody>
-<tr><td style="text-align:left"><code>data</code></td><td style="text-align:left">The data storage directory used by ZooKeeper and BookKeeper.</td></tr>
+<tr><td style="text-align:left"><code>data</code></td><td style="text-align:left">The data storage directory used by RocksDB and BookKeeper.</td></tr>
 <tr><td style="text-align:left"><code>logs</code></td><td style="text-align:left">Logs created by the installation.</td></tr>
 </tbody>
 </table>
diff --git a/content/docs/fr/next/tiered-storage-azure.html b/content/docs/fr/next/tiered-storage-azure.html
index ffe4727..d2f6c26 100644
--- a/content/docs/fr/next/tiered-storage-azure.html
+++ b/content/docs/fr/next/tiered-storage-azure.html
@@ -193,27 +193,21 @@ ls offloaders
 </code></pre>
 <p><strong>Output</strong></p>
 <pre><code class="hljs"><span class="hljs-attribute">Offload was a success</span>
-</code></pre></li>
-</ul>
-<pre><code class="hljs">If there is an error in offloading, the error is propagated to the `pulsar-admin topics offload-status` command.
-
-```bash
-bin/pulsar-admin topics offload-status persistent://my-tenant/my-namespace/topic1
-```
-
-**Output**
-
-```
-Error in offload
+</code></pre>
+<p>If there is an error in offloading, the error is propagated to the <code>pulsar-admin topics offload-status</code> command.</p>
+<pre><code class="hljs css language-bash">bin/pulsar-admin topics offload-status persistent://my-tenant/my-namespace/topic1
+</code></pre>
+<p><strong>Output</strong></p>
+<pre><code class="hljs"><span class="hljs-keyword">Error </span>in offload
 null
 
 Reason: Error offloading: org.apache.bookkeeper.mledger.ManagedLedgerException: 
-```
-
-&gt; #### Tip
-&gt; 
-&gt; For more information about the `pulsar-admin topics offload-status options` command, including flags, descriptions, and default values, see [here](https://pulsar.apache.org/tools/pulsar-admin/2.6.0-SNAPSHOT/#-em-offload-status-em-). 
 </code></pre>
+<blockquote>
+<h4><a class="anchor" aria-hidden="true" id="tip-2"></a><a href="#tip-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
+<p>For more information about the <code>pulsar-admin topics offload-status options</code> command, including flags, descriptions, and default values, see <a href="https://pulsar.apache.org/tools/pulsar-admin/2.6.0-SNAPSHOT/#-em-offload-status-em-">here</a>.</p>
+</blockquote></li>
+</ul>
 </span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/tiered-storage-filesystem"><span class="arrow-prev">← </span><span>Filesystem offloader</span></a><a class="docs-next button" href="/docs/fr/next/tiered-storage-aliyun"><span>Aliyun OSS offloader</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href=" [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
diff --git a/content/docs/fr/next/tiered-storage-azure/index.html b/content/docs/fr/next/tiered-storage-azure/index.html
index ffe4727..d2f6c26 100644
--- a/content/docs/fr/next/tiered-storage-azure/index.html
+++ b/content/docs/fr/next/tiered-storage-azure/index.html
@@ -193,27 +193,21 @@ ls offloaders
 </code></pre>
 <p><strong>Output</strong></p>
 <pre><code class="hljs"><span class="hljs-attribute">Offload was a success</span>
-</code></pre></li>
-</ul>
-<pre><code class="hljs">If there is an error in offloading, the error is propagated to the `pulsar-admin topics offload-status` command.
-
-```bash
-bin/pulsar-admin topics offload-status persistent://my-tenant/my-namespace/topic1
-```
-
-**Output**
-
-```
-Error in offload
+</code></pre>
+<p>If there is an error in offloading, the error is propagated to the <code>pulsar-admin topics offload-status</code> command.</p>
+<pre><code class="hljs css language-bash">bin/pulsar-admin topics offload-status persistent://my-tenant/my-namespace/topic1
+</code></pre>
+<p><strong>Output</strong></p>
+<pre><code class="hljs"><span class="hljs-keyword">Error </span>in offload
 null
 
 Reason: Error offloading: org.apache.bookkeeper.mledger.ManagedLedgerException: 
-```
-
-&gt; #### Tip
-&gt; 
-&gt; For more information about the `pulsar-admin topics offload-status options` command, including flags, descriptions, and default values, see [here](https://pulsar.apache.org/tools/pulsar-admin/2.6.0-SNAPSHOT/#-em-offload-status-em-). 
 </code></pre>
+<blockquote>
+<h4><a class="anchor" aria-hidden="true" id="tip-2"></a><a href="#tip-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
+<p>For more information about the <code>pulsar-admin topics offload-status options</code> command, including flags, descriptions, and default values, see <a href="https://pulsar.apache.org/tools/pulsar-admin/2.6.0-SNAPSHOT/#-em-offload-status-em-">here</a>.</p>
+</blockquote></li>
+</ul>
 </span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/tiered-storage-filesystem"><span class="arrow-prev">← </span><span>Filesystem offloader</span></a><a class="docs-next button" href="/docs/fr/next/tiered-storage-aliyun"><span>Aliyun OSS offloader</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href=" [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
diff --git a/content/docs/ja/next/admin-api-clusters.html b/content/docs/ja/next/admin-api-clusters.html
index b8f2298..9d783c4 100644
--- a/content/docs/ja/next/admin-api-clusters.html
+++ b/content/docs/ja/next/admin-api-clusters.html
@@ -121,8 +121,8 @@
 <p>Here's an example cluster metadata initialization command:</p>
 <pre><code class="hljs css language-shell">bin/pulsar initialize-cluster-metadata \
   --cluster us-west \
-  --zookeeper zk1.us-west.example.com:2181 \
-  --configuration-store zk1.us-west.example.com:2184 \
+  --metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
+  --configuration-metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
   --web-service-url http://pulsar.us-west.example.com:8080/ \
   --web-service-url-tls https://pulsar.us-west.example.com:8443/ \
   --broker-service-url pulsar://pulsar.us-west.example.com:6650/ \
diff --git a/content/docs/ja/next/admin-api-clusters/index.html b/content/docs/ja/next/admin-api-clusters/index.html
index b8f2298..9d783c4 100644
--- a/content/docs/ja/next/admin-api-clusters/index.html
+++ b/content/docs/ja/next/admin-api-clusters/index.html
@@ -121,8 +121,8 @@
 <p>Here's an example cluster metadata initialization command:</p>
 <pre><code class="hljs css language-shell">bin/pulsar initialize-cluster-metadata \
   --cluster us-west \
-  --zookeeper zk1.us-west.example.com:2181 \
-  --configuration-store zk1.us-west.example.com:2184 \
+  --metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
+  --configuration-metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
   --web-service-url http://pulsar.us-west.example.com:8080/ \
   --web-service-url-tls https://pulsar.us-west.example.com:8443/ \
   --broker-service-url pulsar://pulsar.us-west.example.com:6650/ \
diff --git a/content/docs/ja/next/administration-load-balance.html b/content/docs/ja/next/administration-load-balance.html
index 5638c67..29513c1 100644
--- a/content/docs/ja/next/administration-load-balance.html
+++ b/content/docs/ja/next/administration-load-balance.html
@@ -156,13 +156,16 @@
 # Prevent the same topics to be shed and moved to other brokers more that once within this timeframe</span>
 <span class="hljs-attr">loadBalancerSheddingGracePeriodMinutes</span>=<span class="hljs-string">30</span>
 </code></pre>
-<p>Pulsar supports three types of shedding strategies:</p>
+<p>Pulsar supports the following types of shedding strategies. From Pulsar 2.10, the <strong>default</strong> shedding strategy is <code>ThresholdShedder</code>.</p>
 <h5><a class="anchor" aria-hidden="true" id="thresholdshedder"></a><a href="#thresholdshedder" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.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>This strategy tends to shed the bundles if any broker's usage is above the configured threshold. It does this by first computing the average resource usage per broker for the whole cluster. The resource usage for each broker is calculated using the following method: LocalBrokerData#getMaxResourceUsageWithWeight). The weights for each resource are configurable. Historical observations are included in the running average based on the broker's setting for loadBalancerHistoryResourcePerce [...]
+<p>This strategy tends to shed the bundles if any broker's usage is above the configured threshold. It does this by first computing the average resource usage per broker for the whole cluster. The resource usage for each broker is calculated using the following method: LocalBrokerData#getMaxResourceUsageWithWeight. The weights for each resource are configurable. Historical observations are included in the running average based on the broker's setting for loadBalancerHistoryResourcePercen [...]
+<p><img src="/docs/assets/ThresholdShedder.png" alt="Shedding strategy - ThresholdShedder"></p>
 <h5><a class="anchor" aria-hidden="true" id="overloadshedder"></a><a href="#overloadshedder" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>This strategy will attempt to shed exactly one bundle on brokers which are overloaded, that is, whose maximum system resource usage exceeds loadBalancerBrokerOverloadedThresholdPercentage. To see which resources are considered when determining the maximum system resource. A bundle is recommended for unloading off that broker if and only if the following conditions hold: The broker has at least two bundles assigned and the broker has at least one bundle that has not been unloaded recen [...]
+<p><img src="/docs/assets/OverloadShedder.png" alt="Shedding strategy - OverloadShedder"></p>
 <h5><a class="anchor" aria-hidden="true" id="uniformloadshedder"></a><a href="#uniformloadshedder" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>This strategy tends to distribute load uniformly across all brokers. This strategy checks laod difference between broker with highest load and broker with lowest load. If the difference is higher than configured thresholds <code>loadBalancerMsgRateDifferenceShedderThreshold</code> and <code>loadBalancerMsgThroughputMultiplierDifferenceShedderThreshold</code> then it finds out bundles which can be unloaded to distribute traffic evenly across all brokers. Configure broker with below val [...]
+<p><img src="/docs/assets/UniformLoadShedder.png" alt="Shedding strategy - UniformLoadShedder"></p>
 <h4><a class="anchor" aria-hidden="true" id="broker-overload-thresholds"></a><a href="#broker-overload-thresholds" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
 <p>The determinations of when a broker is overloaded is based on threshold of CPU, network and memory usage. Whenever either of those metrics reaches the threshold, the system triggers the shedding (if enabled).</p>
 <p>By default, overload threshold is set at 85%:</p>
diff --git a/content/docs/ja/next/administration-load-balance/index.html b/content/docs/ja/next/administration-load-balance/index.html
index 5638c67..29513c1 100644
--- a/content/docs/ja/next/administration-load-balance/index.html
+++ b/content/docs/ja/next/administration-load-balance/index.html
@@ -156,13 +156,16 @@
 # Prevent the same topics to be shed and moved to other brokers more that once within this timeframe</span>
 <span class="hljs-attr">loadBalancerSheddingGracePeriodMinutes</span>=<span class="hljs-string">30</span>
 </code></pre>
-<p>Pulsar supports three types of shedding strategies:</p>
+<p>Pulsar supports the following types of shedding strategies. From Pulsar 2.10, the <strong>default</strong> shedding strategy is <code>ThresholdShedder</code>.</p>
 <h5><a class="anchor" aria-hidden="true" id="thresholdshedder"></a><a href="#thresholdshedder" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.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>This strategy tends to shed the bundles if any broker's usage is above the configured threshold. It does this by first computing the average resource usage per broker for the whole cluster. The resource usage for each broker is calculated using the following method: LocalBrokerData#getMaxResourceUsageWithWeight). The weights for each resource are configurable. Historical observations are included in the running average based on the broker's setting for loadBalancerHistoryResourcePerce [...]
+<p>This strategy tends to shed the bundles if any broker's usage is above the configured threshold. It does this by first computing the average resource usage per broker for the whole cluster. The resource usage for each broker is calculated using the following method: LocalBrokerData#getMaxResourceUsageWithWeight. The weights for each resource are configurable. Historical observations are included in the running average based on the broker's setting for loadBalancerHistoryResourcePercen [...]
+<p><img src="/docs/assets/ThresholdShedder.png" alt="Shedding strategy - ThresholdShedder"></p>
 <h5><a class="anchor" aria-hidden="true" id="overloadshedder"></a><a href="#overloadshedder" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>This strategy will attempt to shed exactly one bundle on brokers which are overloaded, that is, whose maximum system resource usage exceeds loadBalancerBrokerOverloadedThresholdPercentage. To see which resources are considered when determining the maximum system resource. A bundle is recommended for unloading off that broker if and only if the following conditions hold: The broker has at least two bundles assigned and the broker has at least one bundle that has not been unloaded recen [...]
+<p><img src="/docs/assets/OverloadShedder.png" alt="Shedding strategy - OverloadShedder"></p>
 <h5><a class="anchor" aria-hidden="true" id="uniformloadshedder"></a><a href="#uniformloadshedder" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>This strategy tends to distribute load uniformly across all brokers. This strategy checks laod difference between broker with highest load and broker with lowest load. If the difference is higher than configured thresholds <code>loadBalancerMsgRateDifferenceShedderThreshold</code> and <code>loadBalancerMsgThroughputMultiplierDifferenceShedderThreshold</code> then it finds out bundles which can be unloaded to distribute traffic evenly across all brokers. Configure broker with below val [...]
+<p><img src="/docs/assets/UniformLoadShedder.png" alt="Shedding strategy - UniformLoadShedder"></p>
 <h4><a class="anchor" aria-hidden="true" id="broker-overload-thresholds"></a><a href="#broker-overload-thresholds" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
 <p>The determinations of when a broker is overloaded is based on threshold of CPU, network and memory usage. Whenever either of those metrics reaches the threshold, the system triggers the shedding (if enabled).</p>
 <p>By default, overload threshold is set at 85%:</p>
diff --git a/content/docs/ja/next/administration-proxy.html b/content/docs/ja/next/administration-proxy.html
index 5006f7e..fe63aee 100644
--- a/content/docs/ja/next/administration-proxy.html
+++ b/content/docs/ja/next/administration-proxy.html
@@ -76,15 +76,9 @@
             });
         </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ja" target="_blank" rel="noreferrer noopener">Translate</a><h1 id="__docusaurus" class="postHeaderTitle">Pulsar proxy</h1></header><article><div><span><p>Pulsar proxy is an optional gateway. Pulsar proxy is used when direct connections between clients and Pulsar br [...]
 <h2><a class="anchor" aria-hidden="true" id="configure-the-proxy"></a><a href="#configure-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.2 [...]
-<p>Before using the proxy, you need to configure it with the brokers addresses in the cluster. You can configure the proxy to connect directly to service discovery, or specify a broker URL in the configuration.</p>
-<h3><a class="anchor" aria-hidden="true" id="use-service-discovery"></a><a href="#use-service-discovery" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 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>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>
+<p>Before using the proxy, you need to configure it with the brokers addresses in the cluster. You can configure the broker URL in the proxy configuration, or the proxy to connect directly using service discovery.</p>
 <blockquote>
-<p>To use service discovery, you need to open the network ACLs, so the proxy can connects to the ZooKeeper nodes through the ZooKeeper client port (port <code>2181</code>) and the configuration store client port (port <code>2184</code>).</p>
-<p>However, it is not secure to use service discovery. Because if the network ACL is open, when someone compromises a proxy, they have full access to ZooKeeper.</p>
+<p>In a production environment service discovery is not recommended.</p>
 </blockquote>
 <h3><a class="anchor" aria-hidden="true" id="use-broker-urls"></a><a href="#use-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-2.5  [...]
 <p>It is more secure to specify a URL to connect to the brokers.</p>
@@ -102,10 +96,21 @@
 <p>The hostname in the URLs provided should be a DNS entry which points to multiple brokers or a virtual IP address, which is backed by multiple broker IP addresses, so that the proxy does not lose connectivity to Pulsar cluster if a single broker becomes unavailable.</p>
 <p>The ports to connect to the brokers (6650 and 8080, or in the case of TLS, 6651 and 8443) should be open in the network ACLs.</p>
 <p>Note that if you do not use functions, you do not need to configure <code>functionWorkerWebServiceURL</code>.</p>
+<h3><a class="anchor" aria-hidden="true" id="use-service-discovery"></a><a href="#use-service-discovery" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 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>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">metadataStoreUrl</span>=<span class="hljs-string">my-zk-0:2181,my-zk-1:2181,my-zk-2:2181</span>
+<span class="hljs-attr">configurationMetadataStoreUrl</span>=<span class="hljs-string">my-zk-0:2184,my-zk-remote:2184</span>
+</code></pre>
+<blockquote>
+<p>To use service discovery, you need to open the network ACLs, so the proxy can connects to the ZooKeeper nodes through the ZooKeeper client port (port <code>2181</code>) and the configuration store client port (port <code>2184</code>).</p>
+<p>However, it is not secure to use service discovery. Because if the network ACL is open, when someone compromises a proxy, they have full access to ZooKeeper.</p>
+</blockquote>
 <h2><a class="anchor" aria-hidden="true" id="start-the-proxy"></a><a href="#start-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-2-2.5  [...]
 <p>To start the proxy:</p>
 <pre><code class="hljs css language-bash">$ <span class="hljs-built_in">cd</span> /path/to/pulsar/directory
-$ bin/pulsar proxy
+$ bin/pulsar proxy \
+  --metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181 \
+  --configuration-metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181
 </code></pre>
 <blockquote>
 <p>You can run multiple instances of the Pulsar proxy in a cluster.</p>
@@ -117,7 +122,7 @@ $ bin/pulsar proxy
 <h2><a class="anchor" aria-hidden="true" id="use-pulsar-clients-with-the-proxy"></a><a href="#use-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.5S1 [...]
 <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 that the frontend uses. If the address is the DNS address <code>pulsar.cluster.default</code>, for example, the connection URL for clients is <code>pulsar://pulsar.cluster.default:6650</code>.</p>
 <p>For more information on Proxy configuration, refer to <a href="/docs/ja/next/reference-configuration#pulsar-proxy">Pulsar proxy</a>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ja/next/administration-load-balance"><span class="arrow-prev">← </span><span>Load balance</span></a><a class="docs-next button" href="/docs/ja/next/administration-upgrade"><span>Upgrade</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#configure-the-proxy">Configure the proxy</a><ul class="toc-headings"><li><a href="#use [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ja/next/administration-load-balance"><span class="arrow-prev">← </span><span>Load balance</span></a><a class="docs-next button" href="/docs/ja/next/administration-upgrade"><span>Upgrade</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#configure-the-proxy">Configure the proxy</a><ul class="toc-headings"><li><a href="#use [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/ja/next/administration-proxy/index.html b/content/docs/ja/next/administration-proxy/index.html
index 5006f7e..fe63aee 100644
--- a/content/docs/ja/next/administration-proxy/index.html
+++ b/content/docs/ja/next/administration-proxy/index.html
@@ -76,15 +76,9 @@
             });
         </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ja" target="_blank" rel="noreferrer noopener">Translate</a><h1 id="__docusaurus" class="postHeaderTitle">Pulsar proxy</h1></header><article><div><span><p>Pulsar proxy is an optional gateway. Pulsar proxy is used when direct connections between clients and Pulsar br [...]
 <h2><a class="anchor" aria-hidden="true" id="configure-the-proxy"></a><a href="#configure-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.2 [...]
-<p>Before using the proxy, you need to configure it with the brokers addresses in the cluster. You can configure the proxy to connect directly to service discovery, or specify a broker URL in the configuration.</p>
-<h3><a class="anchor" aria-hidden="true" id="use-service-discovery"></a><a href="#use-service-discovery" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 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>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>
+<p>Before using the proxy, you need to configure it with the brokers addresses in the cluster. You can configure the broker URL in the proxy configuration, or the proxy to connect directly using service discovery.</p>
 <blockquote>
-<p>To use service discovery, you need to open the network ACLs, so the proxy can connects to the ZooKeeper nodes through the ZooKeeper client port (port <code>2181</code>) and the configuration store client port (port <code>2184</code>).</p>
-<p>However, it is not secure to use service discovery. Because if the network ACL is open, when someone compromises a proxy, they have full access to ZooKeeper.</p>
+<p>In a production environment service discovery is not recommended.</p>
 </blockquote>
 <h3><a class="anchor" aria-hidden="true" id="use-broker-urls"></a><a href="#use-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-2.5  [...]
 <p>It is more secure to specify a URL to connect to the brokers.</p>
@@ -102,10 +96,21 @@
 <p>The hostname in the URLs provided should be a DNS entry which points to multiple brokers or a virtual IP address, which is backed by multiple broker IP addresses, so that the proxy does not lose connectivity to Pulsar cluster if a single broker becomes unavailable.</p>
 <p>The ports to connect to the brokers (6650 and 8080, or in the case of TLS, 6651 and 8443) should be open in the network ACLs.</p>
 <p>Note that if you do not use functions, you do not need to configure <code>functionWorkerWebServiceURL</code>.</p>
+<h3><a class="anchor" aria-hidden="true" id="use-service-discovery"></a><a href="#use-service-discovery" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 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>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">metadataStoreUrl</span>=<span class="hljs-string">my-zk-0:2181,my-zk-1:2181,my-zk-2:2181</span>
+<span class="hljs-attr">configurationMetadataStoreUrl</span>=<span class="hljs-string">my-zk-0:2184,my-zk-remote:2184</span>
+</code></pre>
+<blockquote>
+<p>To use service discovery, you need to open the network ACLs, so the proxy can connects to the ZooKeeper nodes through the ZooKeeper client port (port <code>2181</code>) and the configuration store client port (port <code>2184</code>).</p>
+<p>However, it is not secure to use service discovery. Because if the network ACL is open, when someone compromises a proxy, they have full access to ZooKeeper.</p>
+</blockquote>
 <h2><a class="anchor" aria-hidden="true" id="start-the-proxy"></a><a href="#start-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-2-2.5  [...]
 <p>To start the proxy:</p>
 <pre><code class="hljs css language-bash">$ <span class="hljs-built_in">cd</span> /path/to/pulsar/directory
-$ bin/pulsar proxy
+$ bin/pulsar proxy \
+  --metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181 \
+  --configuration-metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181
 </code></pre>
 <blockquote>
 <p>You can run multiple instances of the Pulsar proxy in a cluster.</p>
@@ -117,7 +122,7 @@ $ bin/pulsar proxy
 <h2><a class="anchor" aria-hidden="true" id="use-pulsar-clients-with-the-proxy"></a><a href="#use-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.5S1 [...]
 <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 that the frontend uses. If the address is the DNS address <code>pulsar.cluster.default</code>, for example, the connection URL for clients is <code>pulsar://pulsar.cluster.default:6650</code>.</p>
 <p>For more information on Proxy configuration, refer to <a href="/docs/ja/next/reference-configuration#pulsar-proxy">Pulsar proxy</a>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ja/next/administration-load-balance"><span class="arrow-prev">← </span><span>Load balance</span></a><a class="docs-next button" href="/docs/ja/next/administration-upgrade"><span>Upgrade</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#configure-the-proxy">Configure the proxy</a><ul class="toc-headings"><li><a href="#use [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ja/next/administration-load-balance"><span class="arrow-prev">← </span><span>Load balance</span></a><a class="docs-next button" href="/docs/ja/next/administration-upgrade"><span>Upgrade</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#configure-the-proxy">Configure the proxy</a><ul class="toc-headings"><li><a href="#use [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/ja/next/administration-pulsar-manager.html b/content/docs/ja/next/administration-pulsar-manager.html
index dc4b39c..3bd0545 100644
--- a/content/docs/ja/next/administration-pulsar-manager.html
+++ b/content/docs/ja/next/administration-pulsar-manager.html
@@ -138,7 +138,7 @@ docker build -f docker/Dockerfile <span class="hljs-params">--build-arg</span> B
 <ul>
 <li>Method 1: use command-line tool</li>
 </ul>
-<pre><code class="hljs">wget https:<span class="hljs-string">//dist.apache.org/repos/dist/release/pulsar/pulsar-manager/apache-pulsar-manager-0.2.0/apache-pulsar-manager-0.2.0-bin.tar.gz</span>
+<pre><code class="hljs">wget https:<span class="hljs-string">//dist.apache.org/repos/dist/release/pulsar/pulsar-manager/pulsar-manager-0.2.0/apache-pulsar-manager-0.2.0-bin.tar.gz</span>
 tar -zxvf apache-pulsar-manager-0.2.0-bin.tar.gz
 <span class="hljs-keyword">cd</span> pulsar-manager
 tar -zxvf pulsar-manager.tar
diff --git a/content/docs/ja/next/administration-pulsar-manager/index.html b/content/docs/ja/next/administration-pulsar-manager/index.html
index dc4b39c..3bd0545 100644
--- a/content/docs/ja/next/administration-pulsar-manager/index.html
+++ b/content/docs/ja/next/administration-pulsar-manager/index.html
@@ -138,7 +138,7 @@ docker build -f docker/Dockerfile <span class="hljs-params">--build-arg</span> B
 <ul>
 <li>Method 1: use command-line tool</li>
 </ul>
-<pre><code class="hljs">wget https:<span class="hljs-string">//dist.apache.org/repos/dist/release/pulsar/pulsar-manager/apache-pulsar-manager-0.2.0/apache-pulsar-manager-0.2.0-bin.tar.gz</span>
+<pre><code class="hljs">wget https:<span class="hljs-string">//dist.apache.org/repos/dist/release/pulsar/pulsar-manager/pulsar-manager-0.2.0/apache-pulsar-manager-0.2.0-bin.tar.gz</span>
 tar -zxvf apache-pulsar-manager-0.2.0-bin.tar.gz
 <span class="hljs-keyword">cd</span> pulsar-manager
 tar -zxvf pulsar-manager.tar
diff --git a/content/docs/ja/next/administration-zk-bk.html b/content/docs/ja/next/administration-zk-bk.html
index 13d6d42..cf38e26 100644
--- a/content/docs/ja/next/administration-zk-bk.html
+++ b/content/docs/ja/next/administration-zk-bk.html
@@ -156,26 +156,12 @@
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-daemon start configuration-store</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="zookeeper-configuration"></a><a href="#zookeeper-configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
-<p>In Pulsar, ZooKeeper configuration is handled by two separate configuration files in the <code>conf</code> directory of your Pulsar installation: <code>conf/zookeeper.conf</code> for <a href="#local-zookeeper">local ZooKeeper</a> and <code>conf/global-zookeeper.conf</code> for <a href="#configuration-store">configuration store</a>.</p>
-<h4><a class="anchor" aria-hidden="true" id="local-zookeeper"></a><a href="#local-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  [...]
-<p>The <a href="/docs/ja/next/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> file handles the configuration for local ZooKeeper. The table below shows the available parameters:</p>
-<table>
-<thead>
-<tr><th>Name</th><th>Description</th><th>Default</th></tr>
-</thead>
-<tbody>
-<tr><td>tickTime</td><td>The tick is the basic unit of time in ZooKeeper, measured in milliseconds and used to regulate things like heartbeats and timeouts. tickTime is the length of a single tick.</td><td>2000</td></tr>
-<tr><td>initLimit</td><td>The maximum time, in ticks, that the leader ZooKeeper server allows follower ZooKeeper servers to successfully connect and sync. The tick time is set in milliseconds using the tickTime parameter.</td><td>10</td></tr>
-<tr><td>syncLimit</td><td>The maximum time, in ticks, that a follower ZooKeeper server is allowed to sync with other ZooKeeper servers. The tick time is set in milliseconds using the tickTime parameter.</td><td>5</td></tr>
-<tr><td>dataDir</td><td>The location where ZooKeeper stores in-memory database snapshots as well as the transaction log of updates to the database.</td><td>data/zookeeper</td></tr>
-<tr><td>clientPort</td><td>The port on which the ZooKeeper server listens for connections.</td><td>2181</td></tr>
-<tr><td>autopurge.snapRetainCount</td><td>In ZooKeeper, auto purge determines how many recent snapshots of the database stored in dataDir to retain within the time interval specified by autopurge.purgeInterval (while deleting the rest).</td><td>3</td></tr>
-<tr><td>autopurge.purgeInterval</td><td>The time interval, in hours, which triggers the ZooKeeper database purge task. Setting to a non-zero number enables auto purge; setting to 0 disables. Read this guide before enabling auto purge.</td><td>1</td></tr>
-<tr><td>maxClientCnxns</td><td>The maximum number of client connections. Increase this if you need to handle more ZooKeeper clients.</td><td>60</td></tr>
-</tbody>
-</table>
-<h4><a class="anchor" aria-hidden="true" id="configuration-store"></a><a href="#configuration-store" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
-<p>The <a href="/docs/ja/next/reference-configuration#configuration-store"><code>conf/global-zookeeper.conf</code></a> file handles the configuration for configuration store. The table below shows the available parameters:</p>
+<p>In Pulsar, ZooKeeper configuration is handled by two separate configuration files in the <code>conf</code> directory of your Pulsar installation: * The <code>conf/zookeeper.conf</code> file handles the configuration for local ZooKeeper. * The <code>conf/global-zookeeper.conf</code> file handles the configuration for configuration store. See <a href="/docs/ja/next/reference-configuration#zookeeper">parameters</a> for more details.</p>
+<h4><a class="anchor" aria-hidden="true" id="configure-batching-operations"></a><a href="#configure-batching-operations" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 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>Using the batching operations reduces the remote procedure call (RPC) traffic between ZooKeeper client and servers. It also reduces the number of write transactions, because each batching operation corresponds to a single ZooKeeper transaction, containing multiple read and write operations.</p>
+<p>The following figure demonstrates a basic benchmark of batching read/write operations that can be requested to ZooKeeper in one second:</p>
+<p><img src="/docs/assets/zookeeper-batching.png" alt="Zookeeper batching benchmark"></p>
+<p>To enable batching operations, set the <a href="/docs/ja/next/reference-configuration#broker"><code>metadataStoreBatchingEnabled</code></a> parameter to <code>true</code> on the broker side.</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-.83.42-1 [...]
 <p>BookKeeper stores all durable message in Pulsar. BookKeeper is a distributed <a href="https://en.wikipedia.org/wiki/Write-ahead_logging">write-ahead log</a> WAL system that guarantees read consistency of independent message logs calls ledgers. Individual BookKeeper servers are also called <em>bookies</em>.</p>
 <blockquote>
diff --git a/content/docs/ja/next/administration-zk-bk/index.html b/content/docs/ja/next/administration-zk-bk/index.html
index 13d6d42..cf38e26 100644
--- a/content/docs/ja/next/administration-zk-bk/index.html
+++ b/content/docs/ja/next/administration-zk-bk/index.html
@@ -156,26 +156,12 @@
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-daemon start configuration-store</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="zookeeper-configuration"></a><a href="#zookeeper-configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
-<p>In Pulsar, ZooKeeper configuration is handled by two separate configuration files in the <code>conf</code> directory of your Pulsar installation: <code>conf/zookeeper.conf</code> for <a href="#local-zookeeper">local ZooKeeper</a> and <code>conf/global-zookeeper.conf</code> for <a href="#configuration-store">configuration store</a>.</p>
-<h4><a class="anchor" aria-hidden="true" id="local-zookeeper"></a><a href="#local-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  [...]
-<p>The <a href="/docs/ja/next/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> file handles the configuration for local ZooKeeper. The table below shows the available parameters:</p>
-<table>
-<thead>
-<tr><th>Name</th><th>Description</th><th>Default</th></tr>
-</thead>
-<tbody>
-<tr><td>tickTime</td><td>The tick is the basic unit of time in ZooKeeper, measured in milliseconds and used to regulate things like heartbeats and timeouts. tickTime is the length of a single tick.</td><td>2000</td></tr>
-<tr><td>initLimit</td><td>The maximum time, in ticks, that the leader ZooKeeper server allows follower ZooKeeper servers to successfully connect and sync. The tick time is set in milliseconds using the tickTime parameter.</td><td>10</td></tr>
-<tr><td>syncLimit</td><td>The maximum time, in ticks, that a follower ZooKeeper server is allowed to sync with other ZooKeeper servers. The tick time is set in milliseconds using the tickTime parameter.</td><td>5</td></tr>
-<tr><td>dataDir</td><td>The location where ZooKeeper stores in-memory database snapshots as well as the transaction log of updates to the database.</td><td>data/zookeeper</td></tr>
-<tr><td>clientPort</td><td>The port on which the ZooKeeper server listens for connections.</td><td>2181</td></tr>
-<tr><td>autopurge.snapRetainCount</td><td>In ZooKeeper, auto purge determines how many recent snapshots of the database stored in dataDir to retain within the time interval specified by autopurge.purgeInterval (while deleting the rest).</td><td>3</td></tr>
-<tr><td>autopurge.purgeInterval</td><td>The time interval, in hours, which triggers the ZooKeeper database purge task. Setting to a non-zero number enables auto purge; setting to 0 disables. Read this guide before enabling auto purge.</td><td>1</td></tr>
-<tr><td>maxClientCnxns</td><td>The maximum number of client connections. Increase this if you need to handle more ZooKeeper clients.</td><td>60</td></tr>
-</tbody>
-</table>
-<h4><a class="anchor" aria-hidden="true" id="configuration-store"></a><a href="#configuration-store" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
-<p>The <a href="/docs/ja/next/reference-configuration#configuration-store"><code>conf/global-zookeeper.conf</code></a> file handles the configuration for configuration store. The table below shows the available parameters:</p>
+<p>In Pulsar, ZooKeeper configuration is handled by two separate configuration files in the <code>conf</code> directory of your Pulsar installation: * The <code>conf/zookeeper.conf</code> file handles the configuration for local ZooKeeper. * The <code>conf/global-zookeeper.conf</code> file handles the configuration for configuration store. See <a href="/docs/ja/next/reference-configuration#zookeeper">parameters</a> for more details.</p>
+<h4><a class="anchor" aria-hidden="true" id="configure-batching-operations"></a><a href="#configure-batching-operations" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 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>Using the batching operations reduces the remote procedure call (RPC) traffic between ZooKeeper client and servers. It also reduces the number of write transactions, because each batching operation corresponds to a single ZooKeeper transaction, containing multiple read and write operations.</p>
+<p>The following figure demonstrates a basic benchmark of batching read/write operations that can be requested to ZooKeeper in one second:</p>
+<p><img src="/docs/assets/zookeeper-batching.png" alt="Zookeeper batching benchmark"></p>
+<p>To enable batching operations, set the <a href="/docs/ja/next/reference-configuration#broker"><code>metadataStoreBatchingEnabled</code></a> parameter to <code>true</code> on the broker side.</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-.83.42-1 [...]
 <p>BookKeeper stores all durable message in Pulsar. BookKeeper is a distributed <a href="https://en.wikipedia.org/wiki/Write-ahead_logging">write-ahead log</a> WAL system that guarantees read consistency of independent message logs calls ledgers. Individual BookKeeper servers are also called <em>bookies</em>.</p>
 <blockquote>
diff --git a/content/docs/ja/next/client-libraries-cpp.html b/content/docs/ja/next/client-libraries-cpp.html
index 5918541..f3f855c 100644
--- a/content/docs/ja/next/client-libraries-cpp.html
+++ b/content/docs/ja/next/client-libraries-cpp.html
@@ -315,90 +315,6 @@ ${PULSAR_HOME}/pulsar-client-cpp/build/lib/Release/pulsar.dll</p></li>
 <p>If you use TLS authentication, you need to add <code>ssl</code>, and the default port is <code>6651</code>. The following is an example.</p>
 <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="create-a-consumer"></a><a href="#create-a-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 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 use Pulsar as a consumer, you need to create a consumer on the C++ client. There are two main ways of using the consumer: - <a href="#blocking-example">Blocking style</a>: synchronously calling <code>receive(msg)</code>. - <a href="#consumer-with-a-message-listener">Non-blocking</a> (event based) style: using a message listener.</p>
-<h3><a class="anchor" aria-hidden="true" id="blocking-example"></a><a href="#blocking-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-.98 0-2-1.22-2-2. [...]
-<p>The benefit of this approach is that it is the simplest code. Simply keeps calling <code>receive(msg)</code> which blocks until a message is received.</p>
-<p>This example starts a subscription at the earliest offset and consumes 100 messages.</p>
-<pre><code class="hljs css language-c++"><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-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
-
-<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
-    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
-
-    Consumer consumer;
-    ConsumerConfiguration <span class="hljs-built_in">config</span>;
-    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
-    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
-    <span class="hljs-keyword">if</span> (result != ResultOk) {
-        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
-    }
-
-    Message msg;
-    <span class="hljs-keyword">int</span> ctr = <span class="hljs-number">0</span>;
-    <span class="hljs-comment">// consume 100 messages</span>
-    <span class="hljs-keyword">while</span> (ctr &lt; <span class="hljs-number">100</span>) {
-        consumer.receive(msg);
-        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Received: "</span> &lt;&lt; msg
-            &lt;&lt; <span class="hljs-string">"  with payload '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-
-        consumer.acknowledge(msg);
-        ctr++;
-    }
-
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming synchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-
-    client.<span class="hljs-built_in">close</span>();
-    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
-}
-</code></pre>
-<h3><a class="anchor" aria-hidden="true" id="consumer-with-a-message-listener"></a><a href="#consumer-with-a-message-listener" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13. [...]
-<p>You can avoid running a loop with blocking calls with an event based style by using a message listener which is invoked for each message that is received.</p>
-<p>This example starts a subscription at the earliest offset and consumes 100 messages.</p>
-<pre><code class="hljs css language-c++"><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-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;atomic&gt;</span></span>
-<span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;thread&gt;</span></span>
-
-<span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
-
-<span class="hljs-built_in">std</span>::atomic&lt;<span class="hljs-keyword">uint32_t</span>&gt; messagesReceived;
-
-<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">handleAckComplete</span><span class="hljs-params">(Result res)</span> </span>{
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Ack res: "</span> &lt;&lt; res &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-}
-
-<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">listener</span><span class="hljs-params">(Consumer consumer, <span class="hljs-keyword">const</span> Message&amp; msg)</span> </span>{
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Got message "</span> &lt;&lt; msg &lt;&lt; <span class="hljs-string">" with content '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-    messagesReceived++;
-    consumer.acknowledgeAsync(msg.getMessageId(), handleAckComplete);
-}
-
-<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
-    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
-
-    Consumer consumer;
-    ConsumerConfiguration <span class="hljs-built_in">config</span>;
-    <span class="hljs-built_in">config</span>.setMessageListener(listener);
-    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
-    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
-    <span class="hljs-keyword">if</span> (result != ResultOk) {
-        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
-    }
-
-    <span class="hljs-comment">// wait for 100 messages to be consumed</span>
-    <span class="hljs-keyword">while</span> (messagesReceived &lt; <span class="hljs-number">100</span>) {
-        <span class="hljs-built_in">std</span>::this_thread::sleep_for(<span class="hljs-built_in">std</span>::chrono::milliseconds(<span class="hljs-number">100</span>));
-    }
-
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming asynchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-
-    client.<span class="hljs-built_in">close</span>();
-    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
-}
-</code></pre>
 <h2><a class="anchor" aria-hidden="true" id="create-a-producer"></a><a href="#create-a-producer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 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 use Pulsar as a producer, you need to create a producer on the C++ client. There are two main ways of using a producer: - <a href="#simple-blocking-example">Blocking style</a> : each call to <code>send</code> waits for an ack from the broker. - <a href="#non-blocking-example">Non-blocking asynchronous style</a> : <code>sendAsync</code> is called instead of <code>send</code> and a callback is supplied for when the ack is received from the broker.</p>
 <h3><a class="anchor" aria-hidden="true" id="simple-blocking-example"></a><a href="#simple-blocking-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-.98 [...]
@@ -502,6 +418,111 @@ ${PULSAR_HOME}/pulsar-client-cpp/build/lib/Release/pulsar.dll</p></li>
 producerConf.setPartitionsRoutingMode(ProducerConfiguration::UseSinglePartition);
 producerConf.setLazyStartPartitionedProducers(<span class="hljs-literal">true</span>);
 </code></pre>
+<h3><a class="anchor" aria-hidden="true" id="enable-chunking"></a><a href="#enable-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>Message <a href="/docs/ja/next/concepts-messaging#chunking">chunking</a> enables Pulsar to process large payload messages by splitting the message into chunks at the producer side and aggregating chunked messages at the consumer side.</p>
+<p>The message chunking feature is OFF by default. The following is an example about how to enable message chunking when creating a producer.</p>
+<pre><code class="hljs css language-c++">ProducerConfiguration conf;
+conf.setBatchingEnabled(<span class="hljs-literal">false</span>);
+conf.setChunkingEnabled(<span class="hljs-literal">true</span>);
+Producer producer;
+client.createProducer(<span class="hljs-string">"my-topic"</span>, conf, producer);
+</code></pre>
+<blockquote>
+<p><strong>Note:</strong> To enable chunking, you need to disable batching (<code>setBatchingEnabled</code>=<code>false</code>) concurrently.</p>
+</blockquote>
+<h2><a class="anchor" aria-hidden="true" id="create-a-consumer"></a><a href="#create-a-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 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 use Pulsar as a consumer, you need to create a consumer on the C++ client. There are two main ways of using the consumer: - <a href="#blocking-example">Blocking style</a>: synchronously calling <code>receive(msg)</code>. - <a href="#consumer-with-a-message-listener">Non-blocking</a> (event based) style: using a message listener.</p>
+<h3><a class="anchor" aria-hidden="true" id="blocking-example"></a><a href="#blocking-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-.98 0-2-1.22-2-2. [...]
+<p>The benefit of this approach is that it is the simplest code. Simply keeps calling <code>receive(msg)</code> which blocks until a message is received.</p>
+<p>This example starts a subscription at the earliest offset and consumes 100 messages.</p>
+<pre><code class="hljs css language-c++"><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-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
+
+<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
+    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
+
+    Consumer consumer;
+    ConsumerConfiguration <span class="hljs-built_in">config</span>;
+    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
+    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
+    <span class="hljs-keyword">if</span> (result != ResultOk) {
+        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
+    }
+
+    Message msg;
+    <span class="hljs-keyword">int</span> ctr = <span class="hljs-number">0</span>;
+    <span class="hljs-comment">// consume 100 messages</span>
+    <span class="hljs-keyword">while</span> (ctr &lt; <span class="hljs-number">100</span>) {
+        consumer.receive(msg);
+        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Received: "</span> &lt;&lt; msg
+            &lt;&lt; <span class="hljs-string">"  with payload '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+
+        consumer.acknowledge(msg);
+        ctr++;
+    }
+
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming synchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+
+    client.<span class="hljs-built_in">close</span>();
+    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
+}
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="consumer-with-a-message-listener"></a><a href="#consumer-with-a-message-listener" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13. [...]
+<p>You can avoid running a loop with blocking calls with an event based style by using a message listener which is invoked for each message that is received.</p>
+<p>This example starts a subscription at the earliest offset and consumes 100 messages.</p>
+<pre><code class="hljs css language-c++"><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-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;atomic&gt;</span></span>
+<span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;thread&gt;</span></span>
+
+<span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
+
+<span class="hljs-built_in">std</span>::atomic&lt;<span class="hljs-keyword">uint32_t</span>&gt; messagesReceived;
+
+<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">handleAckComplete</span><span class="hljs-params">(Result res)</span> </span>{
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Ack res: "</span> &lt;&lt; res &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+}
+
+<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">listener</span><span class="hljs-params">(Consumer consumer, <span class="hljs-keyword">const</span> Message&amp; msg)</span> </span>{
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Got message "</span> &lt;&lt; msg &lt;&lt; <span class="hljs-string">" with content '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+    messagesReceived++;
+    consumer.acknowledgeAsync(msg.getMessageId(), handleAckComplete);
+}
+
+<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
+    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
+
+    Consumer consumer;
+    ConsumerConfiguration <span class="hljs-built_in">config</span>;
+    <span class="hljs-built_in">config</span>.setMessageListener(listener);
+    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
+    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
+    <span class="hljs-keyword">if</span> (result != ResultOk) {
+        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
+    }
+
+    <span class="hljs-comment">// wait for 100 messages to be consumed</span>
+    <span class="hljs-keyword">while</span> (messagesReceived &lt; <span class="hljs-number">100</span>) {
+        <span class="hljs-built_in">std</span>::this_thread::sleep_for(<span class="hljs-built_in">std</span>::chrono::milliseconds(<span class="hljs-number">100</span>));
+    }
+
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming asynchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+
+    client.<span class="hljs-built_in">close</span>();
+    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
+}
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="configure-chunking"></a><a href="#configure-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>You can limit the maximum number of chunked messages a consumer maintains concurrently by configuring the <code>setMaxPendingChunkedMessage</code> and <code>setAutoAckOldestChunkedMessageOnQueueFull</code> parameters. When the threshold is reached, the consumer drops pending messages by silently acknowledging them or asking the broker to redeliver them later.</p>
+<p>The following is an example of how to configure message chunking.</p>
+<pre><code class="hljs css language-c++">ConsumerConfiguration conf;
+conf.setAutoAckOldestChunkedMessageOnQueueFull(<span class="hljs-literal">true</span>);
+conf.setMaxPendingChunkedMessage(<span class="hljs-number">100</span>);
+Consumer consumer;
+client.subscribe(<span class="hljs-string">"my-topic"</span>, <span class="hljs-string">"my-sub"</span>, conf, consumer);
+</code></pre>
 <h2><a class="anchor" aria-hidden="true" id="enable-authentication-in-connection-urls"></a><a href="#enable-authentication-in-connection-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  [...]
 <p>If you use TLS authentication when connecting to Pulsar, you need to add <code>ssl</code> in the connection URLs, and the default port is <code>6651</code>. The following is an example.</p>
 <pre><code class="hljs css language-cpp">ClientConfiguration config = ClientConfiguration();
@@ -555,7 +576,7 @@ client.subscribe(<span class="hljs-string">"topic-avro"</span>, <span class="hlj
 ​
 4. Create a consumer to receive a `User` instance.
 ​c++ ConsumerConfiguration consumerConf; consumerConf.setSchema(createProtobufNativeSchema(User::GetDescriptor())); consumerConf.setSubscriptionInitialPosition(InitialPositionEarliest); Consumer consumer; client.subscribe(&quot;topic-protobuf&quot;, &quot;my-sub&quot;, consumerConf, consumer); Message msg; consumer.receive(msg); User user2; user2.ParseFromArray(msg.getData(), msg.getLength()); ```</code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ja/next/client-libraries-python"><span class="arrow-prev">← </span><span>Python</span></a><a class="docs-next button" href="/docs/ja/next/client-libraries-node"><span>Node.js</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#supported-platforms">Supported platforms</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/ja/next/client-libraries-python"><span class="arrow-prev">← </span><span>Python</span></a><a class="docs-next button" href="/docs/ja/next/client-libraries-node"><span>Node.js</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#supported-platforms">Supported platforms</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/ja/next/client-libraries-cpp/index.html b/content/docs/ja/next/client-libraries-cpp/index.html
index 5918541..f3f855c 100644
--- a/content/docs/ja/next/client-libraries-cpp/index.html
+++ b/content/docs/ja/next/client-libraries-cpp/index.html
@@ -315,90 +315,6 @@ ${PULSAR_HOME}/pulsar-client-cpp/build/lib/Release/pulsar.dll</p></li>
 <p>If you use TLS authentication, you need to add <code>ssl</code>, and the default port is <code>6651</code>. The following is an example.</p>
 <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="create-a-consumer"></a><a href="#create-a-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 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 use Pulsar as a consumer, you need to create a consumer on the C++ client. There are two main ways of using the consumer: - <a href="#blocking-example">Blocking style</a>: synchronously calling <code>receive(msg)</code>. - <a href="#consumer-with-a-message-listener">Non-blocking</a> (event based) style: using a message listener.</p>
-<h3><a class="anchor" aria-hidden="true" id="blocking-example"></a><a href="#blocking-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-.98 0-2-1.22-2-2. [...]
-<p>The benefit of this approach is that it is the simplest code. Simply keeps calling <code>receive(msg)</code> which blocks until a message is received.</p>
-<p>This example starts a subscription at the earliest offset and consumes 100 messages.</p>
-<pre><code class="hljs css language-c++"><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-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
-
-<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
-    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
-
-    Consumer consumer;
-    ConsumerConfiguration <span class="hljs-built_in">config</span>;
-    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
-    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
-    <span class="hljs-keyword">if</span> (result != ResultOk) {
-        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
-    }
-
-    Message msg;
-    <span class="hljs-keyword">int</span> ctr = <span class="hljs-number">0</span>;
-    <span class="hljs-comment">// consume 100 messages</span>
-    <span class="hljs-keyword">while</span> (ctr &lt; <span class="hljs-number">100</span>) {
-        consumer.receive(msg);
-        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Received: "</span> &lt;&lt; msg
-            &lt;&lt; <span class="hljs-string">"  with payload '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-
-        consumer.acknowledge(msg);
-        ctr++;
-    }
-
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming synchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-
-    client.<span class="hljs-built_in">close</span>();
-    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
-}
-</code></pre>
-<h3><a class="anchor" aria-hidden="true" id="consumer-with-a-message-listener"></a><a href="#consumer-with-a-message-listener" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13. [...]
-<p>You can avoid running a loop with blocking calls with an event based style by using a message listener which is invoked for each message that is received.</p>
-<p>This example starts a subscription at the earliest offset and consumes 100 messages.</p>
-<pre><code class="hljs css language-c++"><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-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;atomic&gt;</span></span>
-<span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;thread&gt;</span></span>
-
-<span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
-
-<span class="hljs-built_in">std</span>::atomic&lt;<span class="hljs-keyword">uint32_t</span>&gt; messagesReceived;
-
-<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">handleAckComplete</span><span class="hljs-params">(Result res)</span> </span>{
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Ack res: "</span> &lt;&lt; res &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-}
-
-<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">listener</span><span class="hljs-params">(Consumer consumer, <span class="hljs-keyword">const</span> Message&amp; msg)</span> </span>{
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Got message "</span> &lt;&lt; msg &lt;&lt; <span class="hljs-string">" with content '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-    messagesReceived++;
-    consumer.acknowledgeAsync(msg.getMessageId(), handleAckComplete);
-}
-
-<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
-    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
-
-    Consumer consumer;
-    ConsumerConfiguration <span class="hljs-built_in">config</span>;
-    <span class="hljs-built_in">config</span>.setMessageListener(listener);
-    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
-    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
-    <span class="hljs-keyword">if</span> (result != ResultOk) {
-        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
-    }
-
-    <span class="hljs-comment">// wait for 100 messages to be consumed</span>
-    <span class="hljs-keyword">while</span> (messagesReceived &lt; <span class="hljs-number">100</span>) {
-        <span class="hljs-built_in">std</span>::this_thread::sleep_for(<span class="hljs-built_in">std</span>::chrono::milliseconds(<span class="hljs-number">100</span>));
-    }
-
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming asynchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-
-    client.<span class="hljs-built_in">close</span>();
-    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
-}
-</code></pre>
 <h2><a class="anchor" aria-hidden="true" id="create-a-producer"></a><a href="#create-a-producer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 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 use Pulsar as a producer, you need to create a producer on the C++ client. There are two main ways of using a producer: - <a href="#simple-blocking-example">Blocking style</a> : each call to <code>send</code> waits for an ack from the broker. - <a href="#non-blocking-example">Non-blocking asynchronous style</a> : <code>sendAsync</code> is called instead of <code>send</code> and a callback is supplied for when the ack is received from the broker.</p>
 <h3><a class="anchor" aria-hidden="true" id="simple-blocking-example"></a><a href="#simple-blocking-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-.98 [...]
@@ -502,6 +418,111 @@ ${PULSAR_HOME}/pulsar-client-cpp/build/lib/Release/pulsar.dll</p></li>
 producerConf.setPartitionsRoutingMode(ProducerConfiguration::UseSinglePartition);
 producerConf.setLazyStartPartitionedProducers(<span class="hljs-literal">true</span>);
 </code></pre>
+<h3><a class="anchor" aria-hidden="true" id="enable-chunking"></a><a href="#enable-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>Message <a href="/docs/ja/next/concepts-messaging#chunking">chunking</a> enables Pulsar to process large payload messages by splitting the message into chunks at the producer side and aggregating chunked messages at the consumer side.</p>
+<p>The message chunking feature is OFF by default. The following is an example about how to enable message chunking when creating a producer.</p>
+<pre><code class="hljs css language-c++">ProducerConfiguration conf;
+conf.setBatchingEnabled(<span class="hljs-literal">false</span>);
+conf.setChunkingEnabled(<span class="hljs-literal">true</span>);
+Producer producer;
+client.createProducer(<span class="hljs-string">"my-topic"</span>, conf, producer);
+</code></pre>
+<blockquote>
+<p><strong>Note:</strong> To enable chunking, you need to disable batching (<code>setBatchingEnabled</code>=<code>false</code>) concurrently.</p>
+</blockquote>
+<h2><a class="anchor" aria-hidden="true" id="create-a-consumer"></a><a href="#create-a-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 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 use Pulsar as a consumer, you need to create a consumer on the C++ client. There are two main ways of using the consumer: - <a href="#blocking-example">Blocking style</a>: synchronously calling <code>receive(msg)</code>. - <a href="#consumer-with-a-message-listener">Non-blocking</a> (event based) style: using a message listener.</p>
+<h3><a class="anchor" aria-hidden="true" id="blocking-example"></a><a href="#blocking-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-.98 0-2-1.22-2-2. [...]
+<p>The benefit of this approach is that it is the simplest code. Simply keeps calling <code>receive(msg)</code> which blocks until a message is received.</p>
+<p>This example starts a subscription at the earliest offset and consumes 100 messages.</p>
+<pre><code class="hljs css language-c++"><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-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
+
+<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
+    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
+
+    Consumer consumer;
+    ConsumerConfiguration <span class="hljs-built_in">config</span>;
+    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
+    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
+    <span class="hljs-keyword">if</span> (result != ResultOk) {
+        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
+    }
+
+    Message msg;
+    <span class="hljs-keyword">int</span> ctr = <span class="hljs-number">0</span>;
+    <span class="hljs-comment">// consume 100 messages</span>
+    <span class="hljs-keyword">while</span> (ctr &lt; <span class="hljs-number">100</span>) {
+        consumer.receive(msg);
+        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Received: "</span> &lt;&lt; msg
+            &lt;&lt; <span class="hljs-string">"  with payload '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+
+        consumer.acknowledge(msg);
+        ctr++;
+    }
+
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming synchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+
+    client.<span class="hljs-built_in">close</span>();
+    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
+}
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="consumer-with-a-message-listener"></a><a href="#consumer-with-a-message-listener" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13. [...]
+<p>You can avoid running a loop with blocking calls with an event based style by using a message listener which is invoked for each message that is received.</p>
+<p>This example starts a subscription at the earliest offset and consumes 100 messages.</p>
+<pre><code class="hljs css language-c++"><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-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;atomic&gt;</span></span>
+<span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;thread&gt;</span></span>
+
+<span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
+
+<span class="hljs-built_in">std</span>::atomic&lt;<span class="hljs-keyword">uint32_t</span>&gt; messagesReceived;
+
+<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">handleAckComplete</span><span class="hljs-params">(Result res)</span> </span>{
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Ack res: "</span> &lt;&lt; res &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+}
+
+<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">listener</span><span class="hljs-params">(Consumer consumer, <span class="hljs-keyword">const</span> Message&amp; msg)</span> </span>{
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Got message "</span> &lt;&lt; msg &lt;&lt; <span class="hljs-string">" with content '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+    messagesReceived++;
+    consumer.acknowledgeAsync(msg.getMessageId(), handleAckComplete);
+}
+
+<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
+    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
+
+    Consumer consumer;
+    ConsumerConfiguration <span class="hljs-built_in">config</span>;
+    <span class="hljs-built_in">config</span>.setMessageListener(listener);
+    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
+    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
+    <span class="hljs-keyword">if</span> (result != ResultOk) {
+        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
+    }
+
+    <span class="hljs-comment">// wait for 100 messages to be consumed</span>
+    <span class="hljs-keyword">while</span> (messagesReceived &lt; <span class="hljs-number">100</span>) {
+        <span class="hljs-built_in">std</span>::this_thread::sleep_for(<span class="hljs-built_in">std</span>::chrono::milliseconds(<span class="hljs-number">100</span>));
+    }
+
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming asynchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+
+    client.<span class="hljs-built_in">close</span>();
+    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
+}
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="configure-chunking"></a><a href="#configure-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>You can limit the maximum number of chunked messages a consumer maintains concurrently by configuring the <code>setMaxPendingChunkedMessage</code> and <code>setAutoAckOldestChunkedMessageOnQueueFull</code> parameters. When the threshold is reached, the consumer drops pending messages by silently acknowledging them or asking the broker to redeliver them later.</p>
+<p>The following is an example of how to configure message chunking.</p>
+<pre><code class="hljs css language-c++">ConsumerConfiguration conf;
+conf.setAutoAckOldestChunkedMessageOnQueueFull(<span class="hljs-literal">true</span>);
+conf.setMaxPendingChunkedMessage(<span class="hljs-number">100</span>);
+Consumer consumer;
+client.subscribe(<span class="hljs-string">"my-topic"</span>, <span class="hljs-string">"my-sub"</span>, conf, consumer);
+</code></pre>
 <h2><a class="anchor" aria-hidden="true" id="enable-authentication-in-connection-urls"></a><a href="#enable-authentication-in-connection-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  [...]
 <p>If you use TLS authentication when connecting to Pulsar, you need to add <code>ssl</code> in the connection URLs, and the default port is <code>6651</code>. The following is an example.</p>
 <pre><code class="hljs css language-cpp">ClientConfiguration config = ClientConfiguration();
@@ -555,7 +576,7 @@ client.subscribe(<span class="hljs-string">"topic-avro"</span>, <span class="hlj
 ​
 4. Create a consumer to receive a `User` instance.
 ​c++ ConsumerConfiguration consumerConf; consumerConf.setSchema(createProtobufNativeSchema(User::GetDescriptor())); consumerConf.setSubscriptionInitialPosition(InitialPositionEarliest); Consumer consumer; client.subscribe(&quot;topic-protobuf&quot;, &quot;my-sub&quot;, consumerConf, consumer); Message msg; consumer.receive(msg); User user2; user2.ParseFromArray(msg.getData(), msg.getLength()); ```</code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ja/next/client-libraries-python"><span class="arrow-prev">← </span><span>Python</span></a><a class="docs-next button" href="/docs/ja/next/client-libraries-node"><span>Node.js</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#supported-platforms">Supported platforms</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/ja/next/client-libraries-python"><span class="arrow-prev">← </span><span>Python</span></a><a class="docs-next button" href="/docs/ja/next/client-libraries-node"><span>Node.js</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#supported-platforms">Supported platforms</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/ja/next/client-libraries-dotnet.html b/content/docs/ja/next/client-libraries-dotnet.html
index 500fd4d..304056c 100644
--- a/content/docs/ja/next/client-libraries-dotnet.html
+++ b/content/docs/ja/next/client-libraries-dotnet.html
@@ -243,10 +243,7 @@ metadata[<span class="hljs-string">"SomeKey"</span>] = <span class="hljs-string"
 <p>Messages can be acknowledged individually or cumulatively. For details about message acknowledgement, see <a href="/docs/ja/next/concepts-messaging#acknowledgement">acknowledgement</a>.</p>
 <ul>
 <li><p>Acknowledge messages individually.</p>
-<pre><code class="hljs css language-c#"><span class="hljs-keyword">await</span> <span class="hljs-keyword">foreach</span> (<span class="hljs-keyword">var</span> message <span class="hljs-keyword">in</span> consumer.Messages())
-{
-    Console.WriteLine(<span class="hljs-string">"Received: "</span> + Encoding.UTF8.GetString(message.Data.ToArray()));
-}
+<pre><code class="hljs css language-c#"><span class="hljs-keyword">await</span> consumer.Acknowledge(message);
 </code></pre></li>
 <li><p>Acknowledge messages cumulatively.</p>
 <pre><code class="hljs css language-c#"><span class="hljs-keyword">await</span> consumer.AcknowledgeCumulative(message);
diff --git a/content/docs/ja/next/client-libraries-dotnet/index.html b/content/docs/ja/next/client-libraries-dotnet/index.html
index 500fd4d..304056c 100644
--- a/content/docs/ja/next/client-libraries-dotnet/index.html
+++ b/content/docs/ja/next/client-libraries-dotnet/index.html
@@ -243,10 +243,7 @@ metadata[<span class="hljs-string">"SomeKey"</span>] = <span class="hljs-string"
 <p>Messages can be acknowledged individually or cumulatively. For details about message acknowledgement, see <a href="/docs/ja/next/concepts-messaging#acknowledgement">acknowledgement</a>.</p>
 <ul>
 <li><p>Acknowledge messages individually.</p>
-<pre><code class="hljs css language-c#"><span class="hljs-keyword">await</span> <span class="hljs-keyword">foreach</span> (<span class="hljs-keyword">var</span> message <span class="hljs-keyword">in</span> consumer.Messages())
-{
-    Console.WriteLine(<span class="hljs-string">"Received: "</span> + Encoding.UTF8.GetString(message.Data.ToArray()));
-}
+<pre><code class="hljs css language-c#"><span class="hljs-keyword">await</span> consumer.Acknowledge(message);
 </code></pre></li>
 <li><p>Acknowledge messages cumulatively.</p>
 <pre><code class="hljs css language-c#"><span class="hljs-keyword">await</span> consumer.AcknowledgeCumulative(message);
diff --git a/content/docs/ja/next/client-libraries-java.html b/content/docs/ja/next/client-libraries-java.html
index ef7d13e..5fd4e57 100644
--- a/content/docs/ja/next/client-libraries-java.html
+++ b/content/docs/ja/next/client-libraries-java.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="ja"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar Java client · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="You can use a Pulsar Java client to create the Java [producer](#producer), [consumer](#consumer), and [readers](#reader) of messages and to perform [administrative tasks](/docs/ja [...]
+<!DOCTYPE html><html lang="ja"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar Java client · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="You can use a Pulsar Java client to create the Java [producer](#producer), [consumer](#consumer), [readers](#reader) and [TableView](#tableview) of messages and to perform [admini [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,8 +74,8 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ja" target="_blank" rel="noreferrer noopener">Translate</a><h1 id="__docusaurus" class="postHeaderTitle">Pulsar Java client</h1></header><article><div><span><p>You can use a Pulsar Java client to create the Java <a href="#producer">producer</a>, <a href="#consumer" [...]
-<p>All the methods in <a href="#producer">producer</a>, <a href="#consumer">consumer</a>, and <a href="#reader">reader</a> of a Java client are thread-safe.</p>
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ja" target="_blank" rel="noreferrer noopener">Translate</a><h1 id="__docusaurus" class="postHeaderTitle">Pulsar Java client</h1></header><article><div><span><p>You can use a Pulsar Java client to create the Java <a href="#producer">producer</a>, <a href="#consumer" [...]
+<p>All the methods in <a href="#producer">producer</a>, <a href="#consumer">consumer</a>, <a href="#reader">readers</a> and <a href="#tableview">TableView</a> of a Java client are thread-safe.</p>
 <p>Javadoc for the Pulsar client is divided into two domains by package as follows.</p>
 <table>
 <thead>
@@ -250,7 +250,7 @@ Available options are as follows:</li>
 <ul>
 <li><p><strong>FAIL</strong>: if encryption fails, unencrypted messages fail to send.</p></li>
 <li><p><strong>SEND</strong>: if encryption fails, unencrypted messages are sent. |
-<code>ProducerCryptoFailureAction.FAIL</code> <code>batchingMaxPublishDelayMicros</code>| long|Batching time period of sending messages.|TimeUnit.MILLISECONDS.toMicros(1) <code>batchingMaxMessages</code> |int|The maximum number of messages permitted in a batch.|1000 <code>batchingEnabled</code>| boolean|Enable batching of messages. |true <code>compressionType</code>|CompressionType|Message data compression type used by a producer.<br>
+<code>ProducerCryptoFailureAction.FAIL</code> <code>batchingMaxPublishDelayMicros</code>| long|Batching time period of sending messages.|TimeUnit.MILLISECONDS.toMicros(1) <code>batchingMaxMessages</code> |int|The maximum number of messages permitted in a batch.|1000 <code>batchingEnabled</code>| boolean|Enable batching of messages. |true <code>chunkingEnabled</code> | boolean | Enable chunking of messages. |false <code>compressionType</code>|CompressionType|Message data compression type  [...]
 Available options:</p></li>
 <li><p><a href="https://github.com/lz4/lz4"><code>LZ4</code></a></p></li>
 <li><p><a href="https://zlib.net/"><code>ZLIB</code></a></p>
@@ -289,6 +289,18 @@ You can configure parameters if you do not want to use the default configuration
     .send();
 </code></pre>
 <p>You can terminate the builder chain with <code>sendAsync()</code> and get a future return.</p>
+<h3><a class="anchor" aria-hidden="true" id="enable-chunking"></a><a href="#enable-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>Message <a href="/docs/ja/next/concepts-messaging#chunking">chunking</a> enables Pulsar to process large payload messages by splitting the message into chunks at the producer side and aggregating chunked messages at the consumer side.</p>
+<p>The message chunking feature is OFF by default. The following is an example about how to enable message chunking when creating a producer.</p>
+<pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
+        .topic(topic)
+        .enableChunking(<span class="hljs-keyword">true</span>)
+        .enableBatching(<span class="hljs-keyword">false</span>)
+        .create();
+</code></pre>
+<blockquote>
+<p><strong>Note:</strong> To enable chunking, you need to disable batching (<code>enableBatching</code>=<code>false</code>) concurrently.</p>
+</blockquote>
 <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 Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="/docs/ja/next/reference-terminology#consumer">consumer</a> by first instantiating a <a href="https://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
  object and passing it a URL for a Pulsar broker (as <a href="#client-configuration">above</a>).</p>
@@ -416,7 +428,7 @@ To set a custom dead letter topic name:
   
 When specifying the dead letter policy while not specifying `ackTimeoutMillis`, you can set the ack timeout to 30000 millisecond.|None `autoUpdatePartitions`|boolean|If `autoUpdatePartitions` is enabled, a consumer subscribes to partition increasement automatically.  
   
-**Note**: this is only for partitioned consumers.|true `replicateSubscriptionState`|boolean|If `replicateSubscriptionState` is enabled, a subscription state is replicated to geo-replicated clusters.|false `negativeAckRedeliveryBackoff`|NegativeAckRedeliveryBackoff|Interface for custom message is negativeAcked policy. You can specify `NegativeAckRedeliveryBackoff` for a consumer.| `NegativeAckRedeliveryExponentialBackoff`
+**Note**: this is only for partitioned consumers.|true `replicateSubscriptionState`|boolean|If `replicateSubscriptionState` is enabled, a subscription state is replicated to geo-replicated clusters.|false `negativeAckRedeliveryBackoff`|RedeliveryBackoff|Interface for custom message is negativeAcked policy. You can specify `RedeliveryBackoff` for a consumer.| `MultiplierRedeliveryBackoff` `ackTimeoutRedeliveryBackoff`|RedeliveryBackoff|Interface for custom message is ackTimeout policy. Yo [...]
 
 You can configure parameters if you do not want to use the default configuration. For a full list, see the Javadoc for the {@inject: javadoc:ConsumerBuilder:/client/org/apache/pulsar/client/api/ConsumerBuilder} class.
 
@@ -485,22 +497,68 @@ consumer.acknowledge(messages)
 &gt;     .build();
 &gt; ```
 
+### Configure chunking
+
+You can limit the maximum number of chunked messages a consumer maintains concurrently by configuring the `maxPendingChunkedMessage` and `autoAckOldestChunkedMessageOnQueueFull` parameters. When the threshold is reached, the consumer drops pending messages by silently acknowledging them or asking the broker to redeliver them later. The `expireTimeOfIncompleteChunkedMessage` parameter decides the time interval to expire incomplete chunks if the consumer fails to receive all chunks of a me [...]
+
+The following is an example of how to configure message chunking.
+
+```java
+Consumer&lt;byte[]&gt; consumer = client.newConsumer()
+        .topic(topic)
+        .subscriptionName(&quot;test&quot;)
+        .autoAckOldestChunkedMessageOnQueueFull(true)
+        .maxPendingChunkedMessage(100)
+        .expireTimeOfIncompleteChunkedMessage(10, TimeUnit.MINUTES)
+        .subscribe();
+```
+
 ### Negative acknowledgment redelivery backoff
 
-The `NegativeAckRedeliveryBackoff` introduces a redelivery backoff mechanism. You can achieve redelivery with different delays by setting `redeliveryCount` of messages.
+The `RedeliveryBackoff` introduces a redelivery backoff mechanism. You can achieve redelivery with different delays by setting `redeliveryCount` of messages.
+
+```java
+Consumer consumer =  client.newConsumer()
+        .topic(&quot;my-topic&quot;)
+        .subscriptionName(&quot;my-subscription&quot;)
+        .negativeAckRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+                .minDelayMs(1000)
+                .maxDelayMs(60 * 1000)
+                .build())
+        .subscribe();
+```
+
+### Acknowledgement timeout redelivery backoff
+
+The `RedeliveryBackoff` introduces a redelivery backoff mechanism. You can redeliver messages with different delays by setting the number of times the messages is retried.
 
 ```java
 Consumer consumer =  client.newConsumer()
         .topic(&quot;my-topic&quot;)
         .subscriptionName(&quot;my-subscription&quot;)
-        .negativeAckRedeliveryBackoff(NegativeAckRedeliveryExponentialBackoff.builder()
-                .minNackTimeMs(1000)
-                .maxNackTimeMs(60 * 1000)
+        .ackTimeout(10, TimeUnit.SECOND)
+        .ackTimeoutRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+                .minDelayMs(1000)
+                .maxDelayMs(60000)
+                .multiplier(2)
                 .build())
         .subscribe();
 ```
 
-&gt; **Note** - The `negativeAckRedeliveryBackoff` does not work with `consumer.negativeAcknowledge(MessageId messageId)` because you are not able to get the redelivery count from the message ID. - If a consumer crashes, it triggers the redelivery of unacked messages. In this case, `NegativeAckRedeliveryBackoff` does not take effect and the messages might get redelivered earlier than the delay time from the backoff.
+The message redelivery behavior should be as follows.
+
+| Redelivery count | Redelivery delay |
+|:---------------- |:---------------- |
+| 1                | 10 + 1 seconds   |
+| 2                | 10 + 2 seconds   |
+| 3                | 10 + 4 seconds   |
+| 4                | 10 + 8 seconds   |
+| 5                | 10 + 16 seconds  |
+| 6                | 10 + 32 seconds  |
+| 7                | 10 + 60 seconds  |
+| 8                | 10 + 60 seconds  |
+
+&gt; **Note** - The `negativeAckRedeliveryBackoff` does not work with `consumer.negativeAcknowledge(MessageId messageId)` because you are not able to get the redelivery count from the message ID. - If a consumer crashes, it triggers the redelivery of unacked messages. In this case, `RedeliveryBackoff` does not take effect and the messages might get redelivered earlier than the delay time from the backoff.
 
 ### Multi-topic subscriptions
 
@@ -854,6 +912,40 @@ pulsarClient.newReader()
 
 Total hash range size is 65536, so the max end of the range should be less than or equal to 65535.
 
+## TableView
+
+The TableView interface serves an encapsulated access pattern, providing a continuously updated key-value map view of the compacted topic data. Messages without keys will be ignored.
+
+With TableView, Pulsar clients can fetch all the message updates from a topic and construct a map with the latest values of each key. These values can then be used to build a local cache of data. In addition, you can register consumers with the TableView by specifying a listener to perform a scan of the map and then receive notifications when new messages are received. Consequently, event handling can be triggered to serve use cases, such as event-driven applications and message monitoring.
+
+&gt; **Note:** Each TableView uses one Reader instance per partition, and reads the topic starting from the compacted view by default. It is highly recommended to enable automatic compaction by [configuring the topic compaction policies](/docs/ja/next/cookbooks-compaction#configuring-compaction-to-run-automatically) for the given topic or namespace. More frequent compaction results in shorter startup times because less data is replayed to reconstruct the TableView of the topic.
+
+The following figure illustrates the dynamic construction of a TableView updated with newer values of each key. ![TableView](/docs/assets/tableview.png)
+
+### Configure TableView
+
+The following is an example of how to configure a TableView.
+
+    try (TableView&lt;String&gt; tv = client.newTableViewBuilder(Schema.STRING)
+      .topic(&quot;tableview-test&quot;)
+      .create()) {
+        String value = tv.get(&quot;my-key&quot;);
+        System.out.println(&quot;Key's value: &quot; + value);
+    }
+    
+
+You can use the available parameters in the `loadConf` configuration or related [API](https://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/TableViewBuilder.html) to customize your TableView.
+
+| Name | Type| Required? |
+
+&lt;div style=&quot;width:300px&quot;&gt;
+  Description
+&lt;/div&gt;
+| Default                                                                                                     |
+| ----------------------------------------------------------------------------------------------------------- |
+| `topic` | string | yes | The topic name of the TableView. | N/A                                             |
+| `autoUpdatePartitionInterval` | int | no | The interval to check for newly added partitions. | 60 (seconds) |
+
 ## Schema
 
 In Pulsar, all message data consists of byte arrays &quot;under the hood.&quot; [Message schemas](/docs/ja/next/schema-get-started) enable you to use other types of data when constructing and handling messages (from simple types like strings to more complex, application-specific types). If you construct, say, a [producer](#producer) without specifying a schema, then the producer can only produce messages of type `byte[]`. The following is an example.
@@ -1038,7 +1130,7 @@ PulsarClient client = PulsarClient.builder()
     .authentication(auth)
     .build();
 ```</code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ja/next/client-libraries"><span class="arrow-prev">← </span><span>概要</span></a><a class="docs-next button" href="/docs/ja/next/client-libraries-go"><span>Go</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="#maven">Maven</a></li><li><a href="#gradle">Gradle</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ja/next/client-libraries"><span class="arrow-prev">← </span><span>概要</span></a><a class="docs-next button" href="/docs/ja/next/client-libraries-go"><span>Go</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="#maven">Maven</a></li><li><a href="#gradle">Gradle</a></li> [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/ja/next/client-libraries-java/index.html b/content/docs/ja/next/client-libraries-java/index.html
index ef7d13e..5fd4e57 100644
--- a/content/docs/ja/next/client-libraries-java/index.html
+++ b/content/docs/ja/next/client-libraries-java/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="ja"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar Java client · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="You can use a Pulsar Java client to create the Java [producer](#producer), [consumer](#consumer), and [readers](#reader) of messages and to perform [administrative tasks](/docs/ja [...]
+<!DOCTYPE html><html lang="ja"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar Java client · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="You can use a Pulsar Java client to create the Java [producer](#producer), [consumer](#consumer), [readers](#reader) and [TableView](#tableview) of messages and to perform [admini [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,8 +74,8 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ja" target="_blank" rel="noreferrer noopener">Translate</a><h1 id="__docusaurus" class="postHeaderTitle">Pulsar Java client</h1></header><article><div><span><p>You can use a Pulsar Java client to create the Java <a href="#producer">producer</a>, <a href="#consumer" [...]
-<p>All the methods in <a href="#producer">producer</a>, <a href="#consumer">consumer</a>, and <a href="#reader">reader</a> of a Java client are thread-safe.</p>
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ja" target="_blank" rel="noreferrer noopener">Translate</a><h1 id="__docusaurus" class="postHeaderTitle">Pulsar Java client</h1></header><article><div><span><p>You can use a Pulsar Java client to create the Java <a href="#producer">producer</a>, <a href="#consumer" [...]
+<p>All the methods in <a href="#producer">producer</a>, <a href="#consumer">consumer</a>, <a href="#reader">readers</a> and <a href="#tableview">TableView</a> of a Java client are thread-safe.</p>
 <p>Javadoc for the Pulsar client is divided into two domains by package as follows.</p>
 <table>
 <thead>
@@ -250,7 +250,7 @@ Available options are as follows:</li>
 <ul>
 <li><p><strong>FAIL</strong>: if encryption fails, unencrypted messages fail to send.</p></li>
 <li><p><strong>SEND</strong>: if encryption fails, unencrypted messages are sent. |
-<code>ProducerCryptoFailureAction.FAIL</code> <code>batchingMaxPublishDelayMicros</code>| long|Batching time period of sending messages.|TimeUnit.MILLISECONDS.toMicros(1) <code>batchingMaxMessages</code> |int|The maximum number of messages permitted in a batch.|1000 <code>batchingEnabled</code>| boolean|Enable batching of messages. |true <code>compressionType</code>|CompressionType|Message data compression type used by a producer.<br>
+<code>ProducerCryptoFailureAction.FAIL</code> <code>batchingMaxPublishDelayMicros</code>| long|Batching time period of sending messages.|TimeUnit.MILLISECONDS.toMicros(1) <code>batchingMaxMessages</code> |int|The maximum number of messages permitted in a batch.|1000 <code>batchingEnabled</code>| boolean|Enable batching of messages. |true <code>chunkingEnabled</code> | boolean | Enable chunking of messages. |false <code>compressionType</code>|CompressionType|Message data compression type  [...]
 Available options:</p></li>
 <li><p><a href="https://github.com/lz4/lz4"><code>LZ4</code></a></p></li>
 <li><p><a href="https://zlib.net/"><code>ZLIB</code></a></p>
@@ -289,6 +289,18 @@ You can configure parameters if you do not want to use the default configuration
     .send();
 </code></pre>
 <p>You can terminate the builder chain with <code>sendAsync()</code> and get a future return.</p>
+<h3><a class="anchor" aria-hidden="true" id="enable-chunking"></a><a href="#enable-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>Message <a href="/docs/ja/next/concepts-messaging#chunking">chunking</a> enables Pulsar to process large payload messages by splitting the message into chunks at the producer side and aggregating chunked messages at the consumer side.</p>
+<p>The message chunking feature is OFF by default. The following is an example about how to enable message chunking when creating a producer.</p>
+<pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
+        .topic(topic)
+        .enableChunking(<span class="hljs-keyword">true</span>)
+        .enableBatching(<span class="hljs-keyword">false</span>)
+        .create();
+</code></pre>
+<blockquote>
+<p><strong>Note:</strong> To enable chunking, you need to disable batching (<code>enableBatching</code>=<code>false</code>) concurrently.</p>
+</blockquote>
 <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 Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="/docs/ja/next/reference-terminology#consumer">consumer</a> by first instantiating a <a href="https://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
  object and passing it a URL for a Pulsar broker (as <a href="#client-configuration">above</a>).</p>
@@ -416,7 +428,7 @@ To set a custom dead letter topic name:
   
 When specifying the dead letter policy while not specifying `ackTimeoutMillis`, you can set the ack timeout to 30000 millisecond.|None `autoUpdatePartitions`|boolean|If `autoUpdatePartitions` is enabled, a consumer subscribes to partition increasement automatically.  
   
-**Note**: this is only for partitioned consumers.|true `replicateSubscriptionState`|boolean|If `replicateSubscriptionState` is enabled, a subscription state is replicated to geo-replicated clusters.|false `negativeAckRedeliveryBackoff`|NegativeAckRedeliveryBackoff|Interface for custom message is negativeAcked policy. You can specify `NegativeAckRedeliveryBackoff` for a consumer.| `NegativeAckRedeliveryExponentialBackoff`
+**Note**: this is only for partitioned consumers.|true `replicateSubscriptionState`|boolean|If `replicateSubscriptionState` is enabled, a subscription state is replicated to geo-replicated clusters.|false `negativeAckRedeliveryBackoff`|RedeliveryBackoff|Interface for custom message is negativeAcked policy. You can specify `RedeliveryBackoff` for a consumer.| `MultiplierRedeliveryBackoff` `ackTimeoutRedeliveryBackoff`|RedeliveryBackoff|Interface for custom message is ackTimeout policy. Yo [...]
 
 You can configure parameters if you do not want to use the default configuration. For a full list, see the Javadoc for the {@inject: javadoc:ConsumerBuilder:/client/org/apache/pulsar/client/api/ConsumerBuilder} class.
 
@@ -485,22 +497,68 @@ consumer.acknowledge(messages)
 &gt;     .build();
 &gt; ```
 
+### Configure chunking
+
+You can limit the maximum number of chunked messages a consumer maintains concurrently by configuring the `maxPendingChunkedMessage` and `autoAckOldestChunkedMessageOnQueueFull` parameters. When the threshold is reached, the consumer drops pending messages by silently acknowledging them or asking the broker to redeliver them later. The `expireTimeOfIncompleteChunkedMessage` parameter decides the time interval to expire incomplete chunks if the consumer fails to receive all chunks of a me [...]
+
+The following is an example of how to configure message chunking.
+
+```java
+Consumer&lt;byte[]&gt; consumer = client.newConsumer()
+        .topic(topic)
+        .subscriptionName(&quot;test&quot;)
+        .autoAckOldestChunkedMessageOnQueueFull(true)
+        .maxPendingChunkedMessage(100)
+        .expireTimeOfIncompleteChunkedMessage(10, TimeUnit.MINUTES)
+        .subscribe();
+```
+
 ### Negative acknowledgment redelivery backoff
 
-The `NegativeAckRedeliveryBackoff` introduces a redelivery backoff mechanism. You can achieve redelivery with different delays by setting `redeliveryCount` of messages.
+The `RedeliveryBackoff` introduces a redelivery backoff mechanism. You can achieve redelivery with different delays by setting `redeliveryCount` of messages.
+
+```java
+Consumer consumer =  client.newConsumer()
+        .topic(&quot;my-topic&quot;)
+        .subscriptionName(&quot;my-subscription&quot;)
+        .negativeAckRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+                .minDelayMs(1000)
+                .maxDelayMs(60 * 1000)
+                .build())
+        .subscribe();
+```
+
+### Acknowledgement timeout redelivery backoff
+
+The `RedeliveryBackoff` introduces a redelivery backoff mechanism. You can redeliver messages with different delays by setting the number of times the messages is retried.
 
 ```java
 Consumer consumer =  client.newConsumer()
         .topic(&quot;my-topic&quot;)
         .subscriptionName(&quot;my-subscription&quot;)
-        .negativeAckRedeliveryBackoff(NegativeAckRedeliveryExponentialBackoff.builder()
-                .minNackTimeMs(1000)
-                .maxNackTimeMs(60 * 1000)
+        .ackTimeout(10, TimeUnit.SECOND)
+        .ackTimeoutRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+                .minDelayMs(1000)
+                .maxDelayMs(60000)
+                .multiplier(2)
                 .build())
         .subscribe();
 ```
 
-&gt; **Note** - The `negativeAckRedeliveryBackoff` does not work with `consumer.negativeAcknowledge(MessageId messageId)` because you are not able to get the redelivery count from the message ID. - If a consumer crashes, it triggers the redelivery of unacked messages. In this case, `NegativeAckRedeliveryBackoff` does not take effect and the messages might get redelivered earlier than the delay time from the backoff.
+The message redelivery behavior should be as follows.
+
+| Redelivery count | Redelivery delay |
+|:---------------- |:---------------- |
+| 1                | 10 + 1 seconds   |
+| 2                | 10 + 2 seconds   |
+| 3                | 10 + 4 seconds   |
+| 4                | 10 + 8 seconds   |
+| 5                | 10 + 16 seconds  |
+| 6                | 10 + 32 seconds  |
+| 7                | 10 + 60 seconds  |
+| 8                | 10 + 60 seconds  |
+
+&gt; **Note** - The `negativeAckRedeliveryBackoff` does not work with `consumer.negativeAcknowledge(MessageId messageId)` because you are not able to get the redelivery count from the message ID. - If a consumer crashes, it triggers the redelivery of unacked messages. In this case, `RedeliveryBackoff` does not take effect and the messages might get redelivered earlier than the delay time from the backoff.
 
 ### Multi-topic subscriptions
 
@@ -854,6 +912,40 @@ pulsarClient.newReader()
 
 Total hash range size is 65536, so the max end of the range should be less than or equal to 65535.
 
+## TableView
+
+The TableView interface serves an encapsulated access pattern, providing a continuously updated key-value map view of the compacted topic data. Messages without keys will be ignored.
+
+With TableView, Pulsar clients can fetch all the message updates from a topic and construct a map with the latest values of each key. These values can then be used to build a local cache of data. In addition, you can register consumers with the TableView by specifying a listener to perform a scan of the map and then receive notifications when new messages are received. Consequently, event handling can be triggered to serve use cases, such as event-driven applications and message monitoring.
+
+&gt; **Note:** Each TableView uses one Reader instance per partition, and reads the topic starting from the compacted view by default. It is highly recommended to enable automatic compaction by [configuring the topic compaction policies](/docs/ja/next/cookbooks-compaction#configuring-compaction-to-run-automatically) for the given topic or namespace. More frequent compaction results in shorter startup times because less data is replayed to reconstruct the TableView of the topic.
+
+The following figure illustrates the dynamic construction of a TableView updated with newer values of each key. ![TableView](/docs/assets/tableview.png)
+
+### Configure TableView
+
+The following is an example of how to configure a TableView.
+
+    try (TableView&lt;String&gt; tv = client.newTableViewBuilder(Schema.STRING)
+      .topic(&quot;tableview-test&quot;)
+      .create()) {
+        String value = tv.get(&quot;my-key&quot;);
+        System.out.println(&quot;Key's value: &quot; + value);
+    }
+    
+
+You can use the available parameters in the `loadConf` configuration or related [API](https://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/TableViewBuilder.html) to customize your TableView.
+
+| Name | Type| Required? |
+
+&lt;div style=&quot;width:300px&quot;&gt;
+  Description
+&lt;/div&gt;
+| Default                                                                                                     |
+| ----------------------------------------------------------------------------------------------------------- |
+| `topic` | string | yes | The topic name of the TableView. | N/A                                             |
+| `autoUpdatePartitionInterval` | int | no | The interval to check for newly added partitions. | 60 (seconds) |
+
 ## Schema
 
 In Pulsar, all message data consists of byte arrays &quot;under the hood.&quot; [Message schemas](/docs/ja/next/schema-get-started) enable you to use other types of data when constructing and handling messages (from simple types like strings to more complex, application-specific types). If you construct, say, a [producer](#producer) without specifying a schema, then the producer can only produce messages of type `byte[]`. The following is an example.
@@ -1038,7 +1130,7 @@ PulsarClient client = PulsarClient.builder()
     .authentication(auth)
     .build();
 ```</code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ja/next/client-libraries"><span class="arrow-prev">← </span><span>概要</span></a><a class="docs-next button" href="/docs/ja/next/client-libraries-go"><span>Go</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="#maven">Maven</a></li><li><a href="#gradle">Gradle</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ja/next/client-libraries"><span class="arrow-prev">← </span><span>概要</span></a><a class="docs-next button" href="/docs/ja/next/client-libraries-go"><span>Go</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="#maven">Maven</a></li><li><a href="#gradle">Gradle</a></li> [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/ja/next/client-libraries-websocket.html b/content/docs/ja/next/client-libraries-websocket.html
index bb47e92..220ad15 100644
--- a/content/docs/ja/next/client-libraries-websocket.html
+++ b/content/docs/ja/next/client-libraries-websocket.html
@@ -92,12 +92,12 @@
 <h3><a class="anchor" aria-hidden="true" id="as-a-separate-component"></a><a href="#as-a-separate-component" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
 <p>In this mode, the WebSocket service will be run from a Pulsar <a href="/docs/ja/next/reference-terminology#broker">broker</a> as a separate service. Configuration for this mode is handled in the <a href="/docs/ja/next/reference-configuration#websocket"><code>conf/websocket.conf</code></a> configuration file. You'll need to set <em>at least</em> the following parameters:</p>
 <ul>
-<li><a href="/docs/ja/next/reference-configuration#websocket-configurationStoreServers"><code>configurationStoreServers</code></a></li>
+<li><a href="/docs/ja/next/reference-configuration#websocket"><code>configurationMetadataStoreUrl</code></a></li>
 <li><a href="/docs/ja/next/reference-configuration#websocket-webServicePort"><code>webServicePort</code></a></li>
 <li><a href="/docs/ja/next/reference-configuration#websocket-clusterName"><code>clusterName</code></a></li>
 </ul>
 <p>Here's an example:</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>
+<pre><code class="hljs css language-properties"><span class="hljs-attr">configurationMetadataStoreUrl</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>
 </code></pre>
diff --git a/content/docs/ja/next/client-libraries-websocket/index.html b/content/docs/ja/next/client-libraries-websocket/index.html
index bb47e92..220ad15 100644
--- a/content/docs/ja/next/client-libraries-websocket/index.html
+++ b/content/docs/ja/next/client-libraries-websocket/index.html
@@ -92,12 +92,12 @@
 <h3><a class="anchor" aria-hidden="true" id="as-a-separate-component"></a><a href="#as-a-separate-component" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
 <p>In this mode, the WebSocket service will be run from a Pulsar <a href="/docs/ja/next/reference-terminology#broker">broker</a> as a separate service. Configuration for this mode is handled in the <a href="/docs/ja/next/reference-configuration#websocket"><code>conf/websocket.conf</code></a> configuration file. You'll need to set <em>at least</em> the following parameters:</p>
 <ul>
-<li><a href="/docs/ja/next/reference-configuration#websocket-configurationStoreServers"><code>configurationStoreServers</code></a></li>
+<li><a href="/docs/ja/next/reference-configuration#websocket"><code>configurationMetadataStoreUrl</code></a></li>
 <li><a href="/docs/ja/next/reference-configuration#websocket-webServicePort"><code>webServicePort</code></a></li>
 <li><a href="/docs/ja/next/reference-configuration#websocket-clusterName"><code>clusterName</code></a></li>
 </ul>
 <p>Here's an example:</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>
+<pre><code class="hljs css language-properties"><span class="hljs-attr">configurationMetadataStoreUrl</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>
 </code></pre>
diff --git a/content/docs/ja/next/client-libraries.html b/content/docs/ja/next/client-libraries.html
index 2b04654..7d58fef 100644
--- a/content/docs/ja/next/client-libraries.html
+++ b/content/docs/ja/next/client-libraries.html
@@ -85,7 +85,7 @@
 <li><a href="/docs/ja/next/client-libraries-dotnet">C# client</a></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="feature-matrix"></a><a href="#feature-matrix" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>Pulsar client feature matrix for different languages is listed on <a href="https://github.com/apache/pulsar/wiki/PIP-108%3A-Pulsar-Feature-Matrix-%28Client-and-Function%29">Pulsar Feature Matrix (Client and Function)</a> page.</p>
+<p>Pulsar client feature matrix for different languages is listed on <a href="https://docs.google.com/spreadsheets/d/1YHYTkIXR8-Ql103u-IMI18TXLlGStK8uJjDsOOA0T20/edit#gid=1784579914">Pulsar Feature Matrix (Client and Function)</a> page.</p>
 <h2><a class="anchor" aria-hidden="true" id="third-party-clients"></a><a href="#third-party-clients" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
 <p>Besides the official released clients, multiple projects on developing Pulsar clients are available in different languages.</p>
 <blockquote>
diff --git a/content/docs/ja/next/client-libraries/index.html b/content/docs/ja/next/client-libraries/index.html
index 2b04654..7d58fef 100644
--- a/content/docs/ja/next/client-libraries/index.html
+++ b/content/docs/ja/next/client-libraries/index.html
@@ -85,7 +85,7 @@
 <li><a href="/docs/ja/next/client-libraries-dotnet">C# client</a></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="feature-matrix"></a><a href="#feature-matrix" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>Pulsar client feature matrix for different languages is listed on <a href="https://github.com/apache/pulsar/wiki/PIP-108%3A-Pulsar-Feature-Matrix-%28Client-and-Function%29">Pulsar Feature Matrix (Client and Function)</a> page.</p>
+<p>Pulsar client feature matrix for different languages is listed on <a href="https://docs.google.com/spreadsheets/d/1YHYTkIXR8-Ql103u-IMI18TXLlGStK8uJjDsOOA0T20/edit#gid=1784579914">Pulsar Feature Matrix (Client and Function)</a> page.</p>
 <h2><a class="anchor" aria-hidden="true" id="third-party-clients"></a><a href="#third-party-clients" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
 <p>Besides the official released clients, multiple projects on developing Pulsar clients are available in different languages.</p>
 <blockquote>
diff --git a/content/docs/ja/next/concepts-architecture-overview.html b/content/docs/ja/next/concepts-architecture-overview.html
index 1e4b085..bc2168a 100644
--- a/content/docs/ja/next/concepts-architecture-overview.html
+++ b/content/docs/ja/next/concepts-architecture-overview.html
@@ -109,6 +109,9 @@
 </blockquote>
 <h2><a class="anchor" aria-hidden="true" id="metadata-store"></a><a href="#metadata-store" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>The Pulsar metadata store maintains all the metadata of a Pulsar cluster, such as topic metadata, schema, broker load data, and so on. Pulsar uses <a href="https://zookeeper.apache.org/">Apache ZooKeeper</a> for metadata storage, cluster configuration, and coordination. The Pulsar metadata store can be deployed on a separate ZooKeeper cluster or deployed on an existing ZooKeeper cluster. You can use one ZooKeeper cluster for both Pulsar metadata store and <a href="https://bookkeeper.a [...]
+<blockquote>
+<p>Pulsar also supports more metadata backend services, including <a href="https://etcd.io/">ETCD</a> and <a href="http://rocksdb.org/">RocksDB</a> (for standalone Pulsar only).</p>
+</blockquote>
 <p>In a Pulsar instance:</p>
 <ul>
 <li>A configuration store quorum stores configuration for tenants, namespaces, and other entities that need to be globally consistent.</li>
@@ -163,9 +166,10 @@
 <p>For the sake of performance and fault tolerance, you can run as many instances of the Pulsar proxy as you'd like.</p>
 </blockquote>
 <p>Architecturally, the Pulsar proxy gets all the information it requires from ZooKeeper. When starting the proxy on a machine, you only need to provide ZooKeeper connection strings for the cluster-specific and instance-wide configuration store clusters. Here's an example:</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
+<pre><code class="hljs css language-bash">$ <span class="hljs-built_in">cd</span> /path/to/pulsar/directory
+$ bin/pulsar proxy \
+  --metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181 \
+  --configuration-metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181
 </code></pre>
 <blockquote>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-proxy-docs"></a><a href="#pulsar-proxy-docs" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
diff --git a/content/docs/ja/next/concepts-architecture-overview/index.html b/content/docs/ja/next/concepts-architecture-overview/index.html
index 1e4b085..bc2168a 100644
--- a/content/docs/ja/next/concepts-architecture-overview/index.html
+++ b/content/docs/ja/next/concepts-architecture-overview/index.html
@@ -109,6 +109,9 @@
 </blockquote>
 <h2><a class="anchor" aria-hidden="true" id="metadata-store"></a><a href="#metadata-store" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>The Pulsar metadata store maintains all the metadata of a Pulsar cluster, such as topic metadata, schema, broker load data, and so on. Pulsar uses <a href="https://zookeeper.apache.org/">Apache ZooKeeper</a> for metadata storage, cluster configuration, and coordination. The Pulsar metadata store can be deployed on a separate ZooKeeper cluster or deployed on an existing ZooKeeper cluster. You can use one ZooKeeper cluster for both Pulsar metadata store and <a href="https://bookkeeper.a [...]
+<blockquote>
+<p>Pulsar also supports more metadata backend services, including <a href="https://etcd.io/">ETCD</a> and <a href="http://rocksdb.org/">RocksDB</a> (for standalone Pulsar only).</p>
+</blockquote>
 <p>In a Pulsar instance:</p>
 <ul>
 <li>A configuration store quorum stores configuration for tenants, namespaces, and other entities that need to be globally consistent.</li>
@@ -163,9 +166,10 @@
 <p>For the sake of performance and fault tolerance, you can run as many instances of the Pulsar proxy as you'd like.</p>
 </blockquote>
 <p>Architecturally, the Pulsar proxy gets all the information it requires from ZooKeeper. When starting the proxy on a machine, you only need to provide ZooKeeper connection strings for the cluster-specific and instance-wide configuration store clusters. Here's an example:</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
+<pre><code class="hljs css language-bash">$ <span class="hljs-built_in">cd</span> /path/to/pulsar/directory
+$ bin/pulsar proxy \
+  --metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181 \
+  --configuration-metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181
 </code></pre>
 <blockquote>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-proxy-docs"></a><a href="#pulsar-proxy-docs" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
diff --git a/content/docs/ja/next/concepts-messaging.html b/content/docs/ja/next/concepts-messaging.html
index b30041f..6af20b9 100644
--- a/content/docs/ja/next/concepts-messaging.html
+++ b/content/docs/ja/next/concepts-messaging.html
@@ -149,16 +149,26 @@ nettyMaxFrameSizeBytes=5253120
 <p>To avoid redelivering acknowledged messages in a batch to the consumer, Pulsar introduces batch index acknowledgement since Pulsar 2.6.0. When batch index acknowledgement is enabled, the consumer filters out the batch index that has been acknowledged and sends the batch index acknowledgement request to the broker. The broker maintains the batch index acknowledgement status and tracks the acknowledgement status of each batch index to avoid dispatching acknowledged messages to the consu [...]
 <p>By default, batch index acknowledgement is disabled (<code>acknowledgmentAtBatchIndexLevelEnabled=false</code>). You can enable batch index acknowledgement by setting the <code>acknowledgmentAtBatchIndexLevelEnabled</code> parameter to <code>true</code> at the broker side. Enabling batch index acknowledgement results in more memory overheads.</p>
 <h3><a class="anchor" aria-hidden="true" id="chunking"></a><a href="#chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 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>Before you enable chunking, read the following instructions. - Batching and chunking cannot be enabled simultaneously. To enable chunking, you must disable batching in advance. - Chunking is only supported for persisted topics. - Chunking is only supported for Exclusive and Failover subscription types.</p>
-<p>When chunking is enabled (<code>chunkingEnabled=true</code>), if the message size is greater than the allowed maximum publish-payload size, the producer splits the original message into chunked messages and publishes them with chunked metadata to the broker separately and in order. At the broker side, the chunked messages are stored in the managed-ledger in the same way as that of ordinary messages. The only difference is that the consumer needs to buffer the chunked messages and comb [...]
-<p>The consumer consumes the chunked messages and buffers them until the consumer receives all the chunks of a message. And then the consumer stitches chunked messages together and places them into the receiver-queue. Clients consume messages from the receiver-queue. Once the consumer consumes the entire large message and acknowledges it, the consumer internally sends acknowledgement of all the chunk messages associated to that large message. You can set the <code>maxPendingChunkedMessag [...]
-<p>The broker does not require any changes to support chunking for non-shared subscription. The broker only uses <code>chunkedMessageRate</code> to record chunked message rate on the topic.</p>
-<h4><a class="anchor" aria-hidden="true" id="handle-chunked-messages-with-one-producer-and-one-ordered-consumer"></a><a href="#handle-chunked-messages-with-one-producer-and-one-ordered-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98  [...]
-<p>As shown in the following figure, when a topic has one producer which publishes large message payload in chunked messages along with regular non-chunked messages. The producer publishes message M1 in three chunks M1-C1, M1-C2 and M1-C3. The broker stores all the three chunked messages in the managed-ledger and dispatches to the ordered (exclusive/failover) consumer in the same order. The consumer buffers all the chunked messages in memory until it receives all the chunked messages, co [...]
+<p>Message chunking enables Pulsar to process large payload messages by splitting the message into chunks at the producer side and aggregating chunked messages at the consumer side.</p>
+<p>With message chunking enabled, when the size of a message exceeds the allowed maximum payload size (the <code>maxMessageSize</code> parameter of broker), the workflow of messaging is as follows: 1. The producer splits the original message into chunked messages and publishes them with chunked metadata to the broker separately and in order. 2. The broker stores the chunked messages in one managed-ledger in the same way as that of ordinary messages, and it uses the <code>chunkedMessageRa [...]
+<p><strong>Limitations:</strong> - Chunking is only available for persisted topics. - Chunking is only available for the exclusive and failover subscription types. - Chunking cannot be enabled simultaneously with batching.</p>
+<h4><a class="anchor" aria-hidden="true" id="handle-consecutive-chunked-messages-with-one-ordered-consumer"></a><a href="#handle-consecutive-chunked-messages-with-one-ordered-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-. [...]
+<p>The following figure shows a topic with one producer which publishes a large message payload in chunked messages along with regular non-chunked messages. The producer publishes message M1 in three chunks labeled M1-C1, M1-C2 and M1-C3. The broker stores all the three chunked messages in the managed-ledger and dispatches them to the ordered (exclusive/failover) consumer in the same order. The consumer buffers all the chunked messages in memory until it receives all the chunked messages [...]
 <p><img src="/docs/assets/chunking-01.png" alt=""></p>
-<h4><a class="anchor" aria-hidden="true" id="handle-chunked-messages-with-multiple-producers-and-one-ordered-consumer"></a><a href="#handle-chunked-messages-with-multiple-producers-and-one-ordered-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C1 [...]
-<p>When multiple publishers publish chunked messages into a single topic, the broker stores all the chunked messages coming from different publishers in the same managed-ledger. As shown below, Producer 1 publishes message M1 in three chunks M1-C1, M1-C2 and M1-C3. Producer 2 publishes message M2 in three chunks M2-C1, M2-C2 and M2-C3. All chunked messages of the specific message are still in order but might not be consecutive in the managed-ledger. This brings some memory pressure to th [...]
+<h4><a class="anchor" aria-hidden="true" id="handle-interwoven-chunked-messages-with-one-ordered-consumer"></a><a href="#handle-interwoven-chunked-messages-with-one-ordered-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 [...]
+<p>When multiple producers publish chunked messages into a single topic, the broker stores all the chunked messages coming from different producers in the same managed-ledger. The chunked messages in the managed-ledger can be interwoven with each other. As shown below, Producer 1 publishes message M1 in three chunks M1-C1, M1-C2 and M1-C3. Producer 2 publishes message M2 in three chunks M2-C1, M2-C2 and M2-C3. All chunked messages of the specific message are still in order but might not  [...]
 <p><img src="/docs/assets/chunking-02.png" alt=""></p>
+<blockquote>
+<p><strong>Note</strong>  <br>
+In this case, interwoven chunked messages may bring some memory pressure to the consumer because the consumer keeps a separate buffer for each large message to aggregate all its chunks in one message. You can limit the maximum number of chunked messages a consumer maintains concurrently by configuring the <code>maxPendingChunkedMessage</code> parameter. When the threshold is reached, the consumer drops pending messages by silently acknowledging them or asking the broker to redeliver them [...]
+</blockquote>
+<h4><a class="anchor" aria-hidden="true" id="enable-message-chunking"></a><a href="#enable-message-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 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><strong>Prerequisite:</strong> Disable batching by setting the <code>enableBatching</code> parameter to <code>false</code>.</p>
+<p>The message chunking feature is OFF by default. To enable message chunking, set the <code>chunkingEnabled</code> parameter to <code>true</code> when creating a producer.</p>
+<blockquote>
+<p><strong>Note</strong>  <br>
+If the consumer fails to receive all chunks of a message within a specified time period, it expires incomplete chunks. The default value is 1 minute. For more information about the <code>expireTimeOfIncompleteChunkedMessage</code> parameter, refer to <a href="https://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/">org.apache.pulsar.client.api</a>.</p>
+</blockquote>
 <h2><a class="anchor" aria-hidden="true" id="consumers"></a><a href="#consumers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
 <p>A consumer is a process that attaches to a topic via a subscription and then receives messages.</p>
 <p>A consumer sends a <a href="/docs/ja/next/develop-binary-protocol#flow-control">flow permit request</a> to a broker to get messages. There is a queue at the consumer side to receive messages pushed from the broker. You can configure the queue size with the <a href="/docs/ja/next/client-libraries-java#configure-consumer"><code>receiverQueueSize</code></a> parameter. The default size is <code>1000</code>). Each time <code>consumer.receive()</code> is called, a message is dequeued from t [...]
@@ -224,14 +234,38 @@ If batching is enabled, all messages in one batch are redelivered to the consume
 <p>It happens sometimes that consumers fail to process messages successfully. In this case, you can use <a href="#negative-acknowledgement">negative acknowledgement</a> to redeliver the messages after consumption failures. For the Shared subscription type, the messages are redelivered to other consumers; for other subscription types, the messages are redelivered to the same consumer.</p>
 <p>But this is not flexible enough. A better way is to use the <strong>redelivery backoff mechanism</strong>. You can redeliver messages with different delays by setting the number of times the messages are retried.</p>
 <p>Use the following API to enable <code>Negative Redelivery Backoff</code>.</p>
-<pre><code class="hljs css language-java">consumer.negativeAckRedeliveryBackoff(NegativeAckRedeliveryExponentialBackoff.builder()
-        .minNackTimeMs(<span class="hljs-number">1000</span>)
-        .maxNackTimeMs(<span class="hljs-number">60</span> * <span class="hljs-number">1000</span>)
+<pre><code class="hljs css language-java">consumer.negativeAckRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+        .minDelayMs(<span class="hljs-number">1000</span>)
+        .maxDelayMs(<span class="hljs-number">60</span> * <span class="hljs-number">1000</span>)
         .build())
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="acknowledgement-timeout"></a><a href="#acknowledgement-timeout" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 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>The acknowledgement timeout mechanism allows you to set a time range during which the client tracks the unacknowledged messages. After this acknowledgement timeout (<code>ackTimeout</code>) period, the client sends <code>redeliver unacknowledged messages</code> request to the broker, thus the broker resends the unacknowledged messages to the consumer.</p>
 <p>You can configure the acknowledgement timeout mechanism to redeliver the message if it is not acknowledged after <code>ackTimeout</code> or to execute a timer task to check the acknowledgement timeout messages during every <code>ackTimeoutTickTime</code> period.</p>
+<p>You can also use the redelivery backoff mechanism, redeliver messages with different delays by setting the number of times the messages is retried.</p>
+<p>If you want to use redelivery backoff, you can use the following API.</p>
+<pre><code class="hljs css language-java">consumer.ackTimeout(<span class="hljs-number">10</span>, TimeUnit.SECOND)
+        .ackTimeoutRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+        .minDelayMs(<span class="hljs-number">1000</span>)
+        .maxDelayMs(<span class="hljs-number">60000</span>)
+        .multiplier(<span class="hljs-number">2</span>).build())
+</code></pre>
+<p>The message redelivery behavior should be as follows.</p>
+<table>
+<thead>
+<tr><th style="text-align:left">Redelivery count</th><th style="text-align:left">Redelivery delay</th></tr>
+</thead>
+<tbody>
+<tr><td style="text-align:left">1</td><td style="text-align:left">10 + 1 seconds</td></tr>
+<tr><td style="text-align:left">2</td><td style="text-align:left">10 + 2 seconds</td></tr>
+<tr><td style="text-align:left">3</td><td style="text-align:left">10 + 4 seconds</td></tr>
+<tr><td style="text-align:left">4</td><td style="text-align:left">10 + 8 seconds</td></tr>
+<tr><td style="text-align:left">5</td><td style="text-align:left">10 + 16 seconds</td></tr>
+<tr><td style="text-align:left">6</td><td style="text-align:left">10 + 32 seconds</td></tr>
+<tr><td style="text-align:left">7</td><td style="text-align:left">10 + 60 seconds</td></tr>
+<tr><td style="text-align:left">8</td><td style="text-align:left">10 + 60 seconds</td></tr>
+</tbody>
+</table>
 <blockquote>
 <p><strong>Note</strong></p>
 <ul>
diff --git a/content/docs/ja/next/concepts-messaging/index.html b/content/docs/ja/next/concepts-messaging/index.html
index b30041f..6af20b9 100644
--- a/content/docs/ja/next/concepts-messaging/index.html
+++ b/content/docs/ja/next/concepts-messaging/index.html
@@ -149,16 +149,26 @@ nettyMaxFrameSizeBytes=5253120
 <p>To avoid redelivering acknowledged messages in a batch to the consumer, Pulsar introduces batch index acknowledgement since Pulsar 2.6.0. When batch index acknowledgement is enabled, the consumer filters out the batch index that has been acknowledged and sends the batch index acknowledgement request to the broker. The broker maintains the batch index acknowledgement status and tracks the acknowledgement status of each batch index to avoid dispatching acknowledged messages to the consu [...]
 <p>By default, batch index acknowledgement is disabled (<code>acknowledgmentAtBatchIndexLevelEnabled=false</code>). You can enable batch index acknowledgement by setting the <code>acknowledgmentAtBatchIndexLevelEnabled</code> parameter to <code>true</code> at the broker side. Enabling batch index acknowledgement results in more memory overheads.</p>
 <h3><a class="anchor" aria-hidden="true" id="chunking"></a><a href="#chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 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>Before you enable chunking, read the following instructions. - Batching and chunking cannot be enabled simultaneously. To enable chunking, you must disable batching in advance. - Chunking is only supported for persisted topics. - Chunking is only supported for Exclusive and Failover subscription types.</p>
-<p>When chunking is enabled (<code>chunkingEnabled=true</code>), if the message size is greater than the allowed maximum publish-payload size, the producer splits the original message into chunked messages and publishes them with chunked metadata to the broker separately and in order. At the broker side, the chunked messages are stored in the managed-ledger in the same way as that of ordinary messages. The only difference is that the consumer needs to buffer the chunked messages and comb [...]
-<p>The consumer consumes the chunked messages and buffers them until the consumer receives all the chunks of a message. And then the consumer stitches chunked messages together and places them into the receiver-queue. Clients consume messages from the receiver-queue. Once the consumer consumes the entire large message and acknowledges it, the consumer internally sends acknowledgement of all the chunk messages associated to that large message. You can set the <code>maxPendingChunkedMessag [...]
-<p>The broker does not require any changes to support chunking for non-shared subscription. The broker only uses <code>chunkedMessageRate</code> to record chunked message rate on the topic.</p>
-<h4><a class="anchor" aria-hidden="true" id="handle-chunked-messages-with-one-producer-and-one-ordered-consumer"></a><a href="#handle-chunked-messages-with-one-producer-and-one-ordered-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98  [...]
-<p>As shown in the following figure, when a topic has one producer which publishes large message payload in chunked messages along with regular non-chunked messages. The producer publishes message M1 in three chunks M1-C1, M1-C2 and M1-C3. The broker stores all the three chunked messages in the managed-ledger and dispatches to the ordered (exclusive/failover) consumer in the same order. The consumer buffers all the chunked messages in memory until it receives all the chunked messages, co [...]
+<p>Message chunking enables Pulsar to process large payload messages by splitting the message into chunks at the producer side and aggregating chunked messages at the consumer side.</p>
+<p>With message chunking enabled, when the size of a message exceeds the allowed maximum payload size (the <code>maxMessageSize</code> parameter of broker), the workflow of messaging is as follows: 1. The producer splits the original message into chunked messages and publishes them with chunked metadata to the broker separately and in order. 2. The broker stores the chunked messages in one managed-ledger in the same way as that of ordinary messages, and it uses the <code>chunkedMessageRa [...]
+<p><strong>Limitations:</strong> - Chunking is only available for persisted topics. - Chunking is only available for the exclusive and failover subscription types. - Chunking cannot be enabled simultaneously with batching.</p>
+<h4><a class="anchor" aria-hidden="true" id="handle-consecutive-chunked-messages-with-one-ordered-consumer"></a><a href="#handle-consecutive-chunked-messages-with-one-ordered-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-. [...]
+<p>The following figure shows a topic with one producer which publishes a large message payload in chunked messages along with regular non-chunked messages. The producer publishes message M1 in three chunks labeled M1-C1, M1-C2 and M1-C3. The broker stores all the three chunked messages in the managed-ledger and dispatches them to the ordered (exclusive/failover) consumer in the same order. The consumer buffers all the chunked messages in memory until it receives all the chunked messages [...]
 <p><img src="/docs/assets/chunking-01.png" alt=""></p>
-<h4><a class="anchor" aria-hidden="true" id="handle-chunked-messages-with-multiple-producers-and-one-ordered-consumer"></a><a href="#handle-chunked-messages-with-multiple-producers-and-one-ordered-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C1 [...]
-<p>When multiple publishers publish chunked messages into a single topic, the broker stores all the chunked messages coming from different publishers in the same managed-ledger. As shown below, Producer 1 publishes message M1 in three chunks M1-C1, M1-C2 and M1-C3. Producer 2 publishes message M2 in three chunks M2-C1, M2-C2 and M2-C3. All chunked messages of the specific message are still in order but might not be consecutive in the managed-ledger. This brings some memory pressure to th [...]
+<h4><a class="anchor" aria-hidden="true" id="handle-interwoven-chunked-messages-with-one-ordered-consumer"></a><a href="#handle-interwoven-chunked-messages-with-one-ordered-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 [...]
+<p>When multiple producers publish chunked messages into a single topic, the broker stores all the chunked messages coming from different producers in the same managed-ledger. The chunked messages in the managed-ledger can be interwoven with each other. As shown below, Producer 1 publishes message M1 in three chunks M1-C1, M1-C2 and M1-C3. Producer 2 publishes message M2 in three chunks M2-C1, M2-C2 and M2-C3. All chunked messages of the specific message are still in order but might not  [...]
 <p><img src="/docs/assets/chunking-02.png" alt=""></p>
+<blockquote>
+<p><strong>Note</strong>  <br>
+In this case, interwoven chunked messages may bring some memory pressure to the consumer because the consumer keeps a separate buffer for each large message to aggregate all its chunks in one message. You can limit the maximum number of chunked messages a consumer maintains concurrently by configuring the <code>maxPendingChunkedMessage</code> parameter. When the threshold is reached, the consumer drops pending messages by silently acknowledging them or asking the broker to redeliver them [...]
+</blockquote>
+<h4><a class="anchor" aria-hidden="true" id="enable-message-chunking"></a><a href="#enable-message-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 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><strong>Prerequisite:</strong> Disable batching by setting the <code>enableBatching</code> parameter to <code>false</code>.</p>
+<p>The message chunking feature is OFF by default. To enable message chunking, set the <code>chunkingEnabled</code> parameter to <code>true</code> when creating a producer.</p>
+<blockquote>
+<p><strong>Note</strong>  <br>
+If the consumer fails to receive all chunks of a message within a specified time period, it expires incomplete chunks. The default value is 1 minute. For more information about the <code>expireTimeOfIncompleteChunkedMessage</code> parameter, refer to <a href="https://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/">org.apache.pulsar.client.api</a>.</p>
+</blockquote>
 <h2><a class="anchor" aria-hidden="true" id="consumers"></a><a href="#consumers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
 <p>A consumer is a process that attaches to a topic via a subscription and then receives messages.</p>
 <p>A consumer sends a <a href="/docs/ja/next/develop-binary-protocol#flow-control">flow permit request</a> to a broker to get messages. There is a queue at the consumer side to receive messages pushed from the broker. You can configure the queue size with the <a href="/docs/ja/next/client-libraries-java#configure-consumer"><code>receiverQueueSize</code></a> parameter. The default size is <code>1000</code>). Each time <code>consumer.receive()</code> is called, a message is dequeued from t [...]
@@ -224,14 +234,38 @@ If batching is enabled, all messages in one batch are redelivered to the consume
 <p>It happens sometimes that consumers fail to process messages successfully. In this case, you can use <a href="#negative-acknowledgement">negative acknowledgement</a> to redeliver the messages after consumption failures. For the Shared subscription type, the messages are redelivered to other consumers; for other subscription types, the messages are redelivered to the same consumer.</p>
 <p>But this is not flexible enough. A better way is to use the <strong>redelivery backoff mechanism</strong>. You can redeliver messages with different delays by setting the number of times the messages are retried.</p>
 <p>Use the following API to enable <code>Negative Redelivery Backoff</code>.</p>
-<pre><code class="hljs css language-java">consumer.negativeAckRedeliveryBackoff(NegativeAckRedeliveryExponentialBackoff.builder()
-        .minNackTimeMs(<span class="hljs-number">1000</span>)
-        .maxNackTimeMs(<span class="hljs-number">60</span> * <span class="hljs-number">1000</span>)
+<pre><code class="hljs css language-java">consumer.negativeAckRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+        .minDelayMs(<span class="hljs-number">1000</span>)
+        .maxDelayMs(<span class="hljs-number">60</span> * <span class="hljs-number">1000</span>)
         .build())
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="acknowledgement-timeout"></a><a href="#acknowledgement-timeout" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 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>The acknowledgement timeout mechanism allows you to set a time range during which the client tracks the unacknowledged messages. After this acknowledgement timeout (<code>ackTimeout</code>) period, the client sends <code>redeliver unacknowledged messages</code> request to the broker, thus the broker resends the unacknowledged messages to the consumer.</p>
 <p>You can configure the acknowledgement timeout mechanism to redeliver the message if it is not acknowledged after <code>ackTimeout</code> or to execute a timer task to check the acknowledgement timeout messages during every <code>ackTimeoutTickTime</code> period.</p>
+<p>You can also use the redelivery backoff mechanism, redeliver messages with different delays by setting the number of times the messages is retried.</p>
+<p>If you want to use redelivery backoff, you can use the following API.</p>
+<pre><code class="hljs css language-java">consumer.ackTimeout(<span class="hljs-number">10</span>, TimeUnit.SECOND)
+        .ackTimeoutRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+        .minDelayMs(<span class="hljs-number">1000</span>)
+        .maxDelayMs(<span class="hljs-number">60000</span>)
+        .multiplier(<span class="hljs-number">2</span>).build())
+</code></pre>
+<p>The message redelivery behavior should be as follows.</p>
+<table>
+<thead>
+<tr><th style="text-align:left">Redelivery count</th><th style="text-align:left">Redelivery delay</th></tr>
+</thead>
+<tbody>
+<tr><td style="text-align:left">1</td><td style="text-align:left">10 + 1 seconds</td></tr>
+<tr><td style="text-align:left">2</td><td style="text-align:left">10 + 2 seconds</td></tr>
+<tr><td style="text-align:left">3</td><td style="text-align:left">10 + 4 seconds</td></tr>
+<tr><td style="text-align:left">4</td><td style="text-align:left">10 + 8 seconds</td></tr>
+<tr><td style="text-align:left">5</td><td style="text-align:left">10 + 16 seconds</td></tr>
+<tr><td style="text-align:left">6</td><td style="text-align:left">10 + 32 seconds</td></tr>
+<tr><td style="text-align:left">7</td><td style="text-align:left">10 + 60 seconds</td></tr>
+<tr><td style="text-align:left">8</td><td style="text-align:left">10 + 60 seconds</td></tr>
+</tbody>
+</table>
 <blockquote>
 <p><strong>Note</strong></p>
 <ul>
diff --git a/content/docs/ja/next/deploy-bare-metal-multi-cluster.html b/content/docs/ja/next/deploy-bare-metal-multi-cluster.html
index ed5945d..820c90f 100644
--- a/content/docs/ja/next/deploy-bare-metal-multi-cluster.html
+++ b/content/docs/ja/next/deploy-bare-metal-multi-cluster.html
@@ -219,8 +219,8 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.9.1
 <p>You can initialize this metadata using the <a href="/docs/ja/next/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/ja/next/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. The following is an example:</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 \
-  --configuration-store zk1.us-west.example.com:2184 \
+  --metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
+  --configuration-metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
   --web-service-url http://pulsar.us-west.example.com:8080/ \
   --web-service-url-tls https://pulsar.us-west.example.com:8443/ \
   --broker-service-url pulsar://pulsar.us-west.example.com:6650/ \
@@ -267,14 +267,14 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.9.1
 <p>Once you set up ZooKeeper, initialize cluster metadata, and spin up BookKeeper bookies, you can deploy brokers.</p>
 <h3><a class="anchor" aria-hidden="true" id="broker-configuration"></a><a href="#broker-configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.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>You can configure brokers using the <a href="/docs/ja/next/reference-configuration#broker"><code>conf/broker.conf</code></a> configuration file.</p>
-<p>The most important element of broker configuration is ensuring that each broker is aware of its local ZooKeeper quorum as well as the configuration store quorum. Make sure that you set the <a href="/docs/ja/next/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> parameter to reflect the local quorum and the <a href="/docs/ja/next/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameter to reflect the [...]
+<p>The most important element of broker configuration is ensuring that each broker is aware of its local ZooKeeper quorum as well as the configuration store quorum. Make sure that you set the <a href="/docs/ja/next/reference-configuration#broker"><code>metadataStoreUrl</code></a> parameter to reflect the local quorum and the <a href="/docs/ja/next/reference-configuration#broker"><code>configurationMetadataStoreUrl</code></a> parameter to reflect the configuration store quorum (although y [...]
 <p>You also need to specify the name of the <a href="/docs/ja/next/reference-terminology#cluster">cluster</a> to which the broker belongs using the <a href="/docs/ja/next/reference-configuration#broker-clusterName"><code>clusterName</code></a> parameter. In addition, you need to match the broker and web service ports provided when you initialize the metadata (especially when you use a different port from default) of the cluster.</p>
 <p>The following is an example configuration:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-comment"># Local ZooKeeper servers</span>
-<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">metadataStoreUrl</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-comment">
 # Configuration store quorum connection string.</span>
-<span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2184,zk2.us-west.example.com:2184,zk3.us-west.example.com:2184</span>
+<span class="hljs-attr">configurationMetadataStoreUrl</span>=<span class="hljs-string">zk1.us-west.example.com:2184,zk2.us-west.example.com:2184,zk3.us-west.example.com:2184</span>
 
 <span class="hljs-attr">clusterName</span>=<span class="hljs-string">us-west</span>
 <span class="hljs-comment">
diff --git a/content/docs/ja/next/deploy-bare-metal-multi-cluster/index.html b/content/docs/ja/next/deploy-bare-metal-multi-cluster/index.html
index ed5945d..820c90f 100644
--- a/content/docs/ja/next/deploy-bare-metal-multi-cluster/index.html
+++ b/content/docs/ja/next/deploy-bare-metal-multi-cluster/index.html
@@ -219,8 +219,8 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.9.1
 <p>You can initialize this metadata using the <a href="/docs/ja/next/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/ja/next/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. The following is an example:</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 \
-  --configuration-store zk1.us-west.example.com:2184 \
+  --metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
+  --configuration-metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
   --web-service-url http://pulsar.us-west.example.com:8080/ \
   --web-service-url-tls https://pulsar.us-west.example.com:8443/ \
   --broker-service-url pulsar://pulsar.us-west.example.com:6650/ \
@@ -267,14 +267,14 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.9.1
 <p>Once you set up ZooKeeper, initialize cluster metadata, and spin up BookKeeper bookies, you can deploy brokers.</p>
 <h3><a class="anchor" aria-hidden="true" id="broker-configuration"></a><a href="#broker-configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.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>You can configure brokers using the <a href="/docs/ja/next/reference-configuration#broker"><code>conf/broker.conf</code></a> configuration file.</p>
-<p>The most important element of broker configuration is ensuring that each broker is aware of its local ZooKeeper quorum as well as the configuration store quorum. Make sure that you set the <a href="/docs/ja/next/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> parameter to reflect the local quorum and the <a href="/docs/ja/next/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameter to reflect the [...]
+<p>The most important element of broker configuration is ensuring that each broker is aware of its local ZooKeeper quorum as well as the configuration store quorum. Make sure that you set the <a href="/docs/ja/next/reference-configuration#broker"><code>metadataStoreUrl</code></a> parameter to reflect the local quorum and the <a href="/docs/ja/next/reference-configuration#broker"><code>configurationMetadataStoreUrl</code></a> parameter to reflect the configuration store quorum (although y [...]
 <p>You also need to specify the name of the <a href="/docs/ja/next/reference-terminology#cluster">cluster</a> to which the broker belongs using the <a href="/docs/ja/next/reference-configuration#broker-clusterName"><code>clusterName</code></a> parameter. In addition, you need to match the broker and web service ports provided when you initialize the metadata (especially when you use a different port from default) of the cluster.</p>
 <p>The following is an example configuration:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-comment"># Local ZooKeeper servers</span>
-<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">metadataStoreUrl</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-comment">
 # Configuration store quorum connection string.</span>
-<span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2184,zk2.us-west.example.com:2184,zk3.us-west.example.com:2184</span>
+<span class="hljs-attr">configurationMetadataStoreUrl</span>=<span class="hljs-string">zk1.us-west.example.com:2184,zk2.us-west.example.com:2184,zk3.us-west.example.com:2184</span>
 
 <span class="hljs-attr">clusterName</span>=<span class="hljs-string">us-west</span>
 <span class="hljs-comment">
diff --git a/content/docs/ja/next/deploy-bare-metal.html b/content/docs/ja/next/deploy-bare-metal.html
index 5ac2910..8fc3e21 100644
--- a/content/docs/ja/next/deploy-bare-metal.html
+++ b/content/docs/ja/next/deploy-bare-metal.html
@@ -273,8 +273,8 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <p>You can initialize this metadata using the <a href="/docs/ja/next/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/ja/next/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. This command can be run on any machine in your ZooKeeper cluster. The following is an example:</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 \
-  --configuration-store zk1.us-west.example.com:2181 \
+  --metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
+  --configuration-metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
   --web-service-url http://pulsar.us-west.example.com:8080 \
   --web-service-url-tls https://pulsar.us-west.example.com:8443 \
   --broker-service-url pulsar://pulsar.us-west.example.com:6650 \
@@ -335,9 +335,9 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <h2><a class="anchor" aria-hidden="true" id="deploy-pulsar-brokers"></a><a href="#deploy-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-.98 0-2 [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide the administrative interface of Pulsar. A good choice is to run <strong>3 brokers</strong>, one for each machine that already runs a BookKeeper bookie.</p>
 <h3><a class="anchor" aria-hidden="true" id="configure-brokers"></a><a href="#configure-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- [...]
-<p>The most important element of broker configuration is ensuring that each broker is aware of the ZooKeeper cluster that you have deployed. Ensure that the <a href="/docs/ja/next/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="/docs/ja/next/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters are correct. In this case, since you only have 1 cluster and no configuration store setup, [...]
-<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>
+<p>The most important element of broker configuration is ensuring that each broker is aware of the ZooKeeper cluster that you have deployed. Ensure that the <a href="/docs/ja/next/reference-configuration#broker"><code>metadataStoreUrl</code></a> and <a href="/docs/ja/next/reference-configuration#broker"><code>configurationMetadataStoreUrl</code></a> parameters are correct. In this case, since you only have 1 cluster and no configuration store setup, the <code>configurationMetadataStoreUr [...]
+<pre><code class="hljs css language-properties"><span class="hljs-attr">metadataStoreUrl</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">configurationMetadataStoreUrl</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>You also need to specify the cluster name (matching the name that you provided when you <a href="#initialize-cluster-metadata">initialize the metadata of the cluster</a>):</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
diff --git a/content/docs/ja/next/deploy-bare-metal/index.html b/content/docs/ja/next/deploy-bare-metal/index.html
index 5ac2910..8fc3e21 100644
--- a/content/docs/ja/next/deploy-bare-metal/index.html
+++ b/content/docs/ja/next/deploy-bare-metal/index.html
@@ -273,8 +273,8 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <p>You can initialize this metadata using the <a href="/docs/ja/next/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/ja/next/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. This command can be run on any machine in your ZooKeeper cluster. The following is an example:</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 \
-  --configuration-store zk1.us-west.example.com:2181 \
+  --metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
+  --configuration-metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
   --web-service-url http://pulsar.us-west.example.com:8080 \
   --web-service-url-tls https://pulsar.us-west.example.com:8443 \
   --broker-service-url pulsar://pulsar.us-west.example.com:6650 \
@@ -335,9 +335,9 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <h2><a class="anchor" aria-hidden="true" id="deploy-pulsar-brokers"></a><a href="#deploy-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-.98 0-2 [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide the administrative interface of Pulsar. A good choice is to run <strong>3 brokers</strong>, one for each machine that already runs a BookKeeper bookie.</p>
 <h3><a class="anchor" aria-hidden="true" id="configure-brokers"></a><a href="#configure-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- [...]
-<p>The most important element of broker configuration is ensuring that each broker is aware of the ZooKeeper cluster that you have deployed. Ensure that the <a href="/docs/ja/next/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="/docs/ja/next/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters are correct. In this case, since you only have 1 cluster and no configuration store setup, [...]
-<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>
+<p>The most important element of broker configuration is ensuring that each broker is aware of the ZooKeeper cluster that you have deployed. Ensure that the <a href="/docs/ja/next/reference-configuration#broker"><code>metadataStoreUrl</code></a> and <a href="/docs/ja/next/reference-configuration#broker"><code>configurationMetadataStoreUrl</code></a> parameters are correct. In this case, since you only have 1 cluster and no configuration store setup, the <code>configurationMetadataStoreUr [...]
+<pre><code class="hljs css language-properties"><span class="hljs-attr">metadataStoreUrl</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">configurationMetadataStoreUrl</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>You also need to specify the cluster name (matching the name that you provided when you <a href="#initialize-cluster-metadata">initialize the metadata of the cluster</a>):</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
diff --git a/content/docs/ja/next/develop-binary-protocol.html b/content/docs/ja/next/develop-binary-protocol.html
index 3e7e49b..cfe4b2c 100644
--- a/content/docs/ja/next/develop-binary-protocol.html
+++ b/content/docs/ja/next/develop-binary-protocol.html
@@ -230,7 +230,7 @@
 </code></pre>
 <p>Parameters: * <code>request_id</code> → Original id of the <code>CreateProducer</code> request * <code>producer_name</code> → Generated globally unique producer name or the name specified by the client, if any.</p>
 <h5><a class="anchor" aria-hidden="true" id="command-send"></a><a href="#command-send" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>Command <code>Send</code> is used to publish a new message within the context of an already existing producer. This command is used in a frame that includes command as well as message payload, for which the complete format is specified in the <a href="#payload-commands">payload commands</a> section.</p>
+<p>Command <code>Send</code> is used to publish a new message within the context of an already existing producer. If a producer has not yet been created for the connection, the broker will terminate the connection. This command is used in a frame that includes command as well as message payload, for which the complete format is specified in the <a href="#payload-commands">payload commands</a> section.</p>
 <pre><code class="hljs css language-protobuf"><span class="hljs-class"><span class="hljs-keyword">message</span> <span class="hljs-title">CommandSend</span> </span>{
   <span class="hljs-string">"producer_id"</span> : <span class="hljs-number">1</span>,
   <span class="hljs-string">"sequence_id"</span> : <span class="hljs-number">0</span>,
diff --git a/content/docs/ja/next/develop-binary-protocol/index.html b/content/docs/ja/next/develop-binary-protocol/index.html
index 3e7e49b..cfe4b2c 100644
--- a/content/docs/ja/next/develop-binary-protocol/index.html
+++ b/content/docs/ja/next/develop-binary-protocol/index.html
@@ -230,7 +230,7 @@
 </code></pre>
 <p>Parameters: * <code>request_id</code> → Original id of the <code>CreateProducer</code> request * <code>producer_name</code> → Generated globally unique producer name or the name specified by the client, if any.</p>
 <h5><a class="anchor" aria-hidden="true" id="command-send"></a><a href="#command-send" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>Command <code>Send</code> is used to publish a new message within the context of an already existing producer. This command is used in a frame that includes command as well as message payload, for which the complete format is specified in the <a href="#payload-commands">payload commands</a> section.</p>
+<p>Command <code>Send</code> is used to publish a new message within the context of an already existing producer. If a producer has not yet been created for the connection, the broker will terminate the connection. This command is used in a frame that includes command as well as message payload, for which the complete format is specified in the <a href="#payload-commands">payload commands</a> section.</p>
 <pre><code class="hljs css language-protobuf"><span class="hljs-class"><span class="hljs-keyword">message</span> <span class="hljs-title">CommandSend</span> </span>{
   <span class="hljs-string">"producer_id"</span> : <span class="hljs-number">1</span>,
   <span class="hljs-string">"sequence_id"</span> : <span class="hljs-number">0</span>,
diff --git a/content/docs/ja/next/functions-runtime.html b/content/docs/ja/next/functions-runtime.html
index 7f3cb20..d9a5307 100644
--- a/content/docs/ja/next/functions-runtime.html
+++ b/content/docs/ja/next/functions-runtime.html
@@ -298,7 +298,7 @@ If you use tokens that expire when deploying functions, these tokens will expire
 <p>For example, if you use token authentication, you need to configure the following properties in the <code>function-worker.yml</code> file.</p>
 <pre><code class="hljs css language-Yaml"><span class="hljs-attr">clientAuthenticationPlugin:</span> <span class="hljs-string">org.apache.pulsar.client.impl.auth.AuthenticationToken</span>
 <span class="hljs-attr">clientAuthenticationParameters:</span> <span class="hljs-string">file:///etc/pulsar/token/admin-token.txt</span>
-<span class="hljs-attr">configurationStoreServers:</span> <span class="hljs-string">zookeeper-cluster:2181</span> <span class="hljs-comment"># auth requires a connection to zookeeper</span>
+<span class="hljs-attr">configurationMetadataStoreUrl:</span> <span class="hljs-string">zk:zookeeper-cluster:2181</span> <span class="hljs-comment"># auth requires a connection to zookeeper</span>
 <span class="hljs-attr">authenticationProviders:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">"org.apache.pulsar.broker.authentication.AuthenticationProviderToken"</span>
 <span class="hljs-attr">authorizationEnabled:</span> <span class="hljs-literal">true</span>
diff --git a/content/docs/ja/next/functions-runtime/index.html b/content/docs/ja/next/functions-runtime/index.html
index 7f3cb20..d9a5307 100644
--- a/content/docs/ja/next/functions-runtime/index.html
+++ b/content/docs/ja/next/functions-runtime/index.html
@@ -298,7 +298,7 @@ If you use tokens that expire when deploying functions, these tokens will expire
 <p>For example, if you use token authentication, you need to configure the following properties in the <code>function-worker.yml</code> file.</p>
 <pre><code class="hljs css language-Yaml"><span class="hljs-attr">clientAuthenticationPlugin:</span> <span class="hljs-string">org.apache.pulsar.client.impl.auth.AuthenticationToken</span>
 <span class="hljs-attr">clientAuthenticationParameters:</span> <span class="hljs-string">file:///etc/pulsar/token/admin-token.txt</span>
-<span class="hljs-attr">configurationStoreServers:</span> <span class="hljs-string">zookeeper-cluster:2181</span> <span class="hljs-comment"># auth requires a connection to zookeeper</span>
+<span class="hljs-attr">configurationMetadataStoreUrl:</span> <span class="hljs-string">zk:zookeeper-cluster:2181</span> <span class="hljs-comment"># auth requires a connection to zookeeper</span>
 <span class="hljs-attr">authenticationProviders:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">"org.apache.pulsar.broker.authentication.AuthenticationProviderToken"</span>
 <span class="hljs-attr">authorizationEnabled:</span> <span class="hljs-literal">true</span>
diff --git a/content/docs/ja/next/functions-worker.html b/content/docs/ja/next/functions-worker.html
index 5870f17..d01c205 100644
--- a/content/docs/ja/next/functions-worker.html
+++ b/content/docs/ja/next/functions-worker.html
@@ -235,10 +235,10 @@ authenticationProviders: ['org.apache.pulsar.broker.authentication.Authenticatio
   # tokenPublicKey:     file:///path/to/public.key 
 </code></pre>
 <h5><a class="anchor" aria-hidden="true" id="enable-authorization-provider"></a><a href="#enable-authorization-provider" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 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>To enable authorization on Functions Worker, you need to configure <code>authorizationEnabled</code>, <code>authorizationProvider</code> and <code>configurationStoreServers</code>. The authentication provider connects to <code>configurationStoreServers</code> to receive namespace policies.</p>
+<p>To enable authorization on Functions Worker, you need to configure <code>authorizationEnabled</code>, <code>authorizationProvider</code> and <code>configurationMetadataStoreUrl</code>. The authentication provider connects to <code>configurationMetadataStoreUrl</code> to receive namespace policies.</p>
 <pre><code class="hljs css language-yaml"><span class="hljs-attr">authorizationEnabled:</span> <span class="hljs-literal">true</span>
 <span class="hljs-attr">authorizationProvider:</span> <span class="hljs-string">org.apache.pulsar.broker.authorization.PulsarAuthorizationProvider</span>
-<span class="hljs-attr">configurationStoreServers:</span> <span class="hljs-string">&lt;configuration-store-servers&gt;</span>
+<span class="hljs-attr">configurationMetadataStoreUrl:</span> <span class="hljs-string">&lt;meta-type&gt;:&lt;configuration-metadata-store-url&gt;</span>
 </code></pre>
 <p>You should also configure a list of superuser roles. The superuser roles are able to access any admin API. The following is a configuration example.</p>
 <pre><code class="hljs css language-yaml"><span class="hljs-attr">superUserRoles:</span>
diff --git a/content/docs/ja/next/functions-worker/index.html b/content/docs/ja/next/functions-worker/index.html
index 5870f17..d01c205 100644
--- a/content/docs/ja/next/functions-worker/index.html
+++ b/content/docs/ja/next/functions-worker/index.html
@@ -235,10 +235,10 @@ authenticationProviders: ['org.apache.pulsar.broker.authentication.Authenticatio
   # tokenPublicKey:     file:///path/to/public.key 
 </code></pre>
 <h5><a class="anchor" aria-hidden="true" id="enable-authorization-provider"></a><a href="#enable-authorization-provider" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 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>To enable authorization on Functions Worker, you need to configure <code>authorizationEnabled</code>, <code>authorizationProvider</code> and <code>configurationStoreServers</code>. The authentication provider connects to <code>configurationStoreServers</code> to receive namespace policies.</p>
+<p>To enable authorization on Functions Worker, you need to configure <code>authorizationEnabled</code>, <code>authorizationProvider</code> and <code>configurationMetadataStoreUrl</code>. The authentication provider connects to <code>configurationMetadataStoreUrl</code> to receive namespace policies.</p>
 <pre><code class="hljs css language-yaml"><span class="hljs-attr">authorizationEnabled:</span> <span class="hljs-literal">true</span>
 <span class="hljs-attr">authorizationProvider:</span> <span class="hljs-string">org.apache.pulsar.broker.authorization.PulsarAuthorizationProvider</span>
-<span class="hljs-attr">configurationStoreServers:</span> <span class="hljs-string">&lt;configuration-store-servers&gt;</span>
+<span class="hljs-attr">configurationMetadataStoreUrl:</span> <span class="hljs-string">&lt;meta-type&gt;:&lt;configuration-metadata-store-url&gt;</span>
 </code></pre>
 <p>You should also configure a list of superuser roles. The superuser roles are able to access any admin API. The following is a configuration example.</p>
 <pre><code class="hljs css language-yaml"><span class="hljs-attr">superUserRoles:</span>
diff --git a/content/docs/ja/next/io-file-source.html b/content/docs/ja/next/io-file-source.html
index e20cc21..9db08d5 100644
--- a/content/docs/ja/next/io-file-source.html
+++ b/content/docs/ja/next/io-file-source.html
@@ -39,6 +39,7 @@
 <tr><td><code>ignoreHiddenFiles</code></td><td>Boolean</td><td>false</td><td>true</td><td>Whether the hidden files should be ignored or not.</td></tr>
 <tr><td><code>pollingInterval</code></td><td>Long</td><td>false</td><td>10000L</td><td>Indicates how long to wait before performing a directory listing.</td></tr>
 <tr><td><code>numWorkers</code></td><td>Integer</td><td>false</td><td>1</td><td>The number of worker threads that process files.<br /><br /> This allows you to process a larger number of files concurrently. <br /><br />However, setting this to a value greater than 1 makes the data from multiple files mixed in the target topic.</td></tr>
+<tr><td><code>processedFileSuffix</code></td><td>String</td><td>false</td><td>NULL</td><td>If set, do not delete but only rename file that has been processed. <br /><br />  This config only work when 'keepFile' property is false.</td></tr>
 </tbody>
 </table>
 <h3><a class="anchor" aria-hidden="true" id="example"></a><a href="#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-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
@@ -58,7 +59,8 @@
       <span class="hljs-attr">"maximumSize"</span>: <span class="hljs-number">5000000</span>,
       <span class="hljs-attr">"ignoreHiddenFiles"</span>: <span class="hljs-literal">true</span>,
       <span class="hljs-attr">"pollingInterval"</span>: <span class="hljs-number">5000</span>,
-      <span class="hljs-attr">"numWorkers"</span>: <span class="hljs-number">1</span>
+      <span class="hljs-attr">"numWorkers"</span>: <span class="hljs-number">1</span>,
+      <span class="hljs-attr">"processedFileSuffix"</span>: <span class="hljs-string">".processed_done"</span>
    }
 }
 </code></pre></li>
@@ -76,6 +78,7 @@
     <span class="hljs-attr">ignoreHiddenFiles:</span> <span class="hljs-literal">true</span>
     <span class="hljs-attr">pollingInterval:</span> <span class="hljs-number">5000</span>
     <span class="hljs-attr">numWorkers:</span> <span class="hljs-number">1</span>
+    <span class="hljs-attr">processedFileSuffix:</span> <span class="hljs-string">".processed_done"</span>
 </code></pre></li>
 </ul>
 <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.2 [...]
diff --git a/content/docs/ja/next/io-file-source/index.html b/content/docs/ja/next/io-file-source/index.html
index e20cc21..9db08d5 100644
--- a/content/docs/ja/next/io-file-source/index.html
+++ b/content/docs/ja/next/io-file-source/index.html
@@ -39,6 +39,7 @@
 <tr><td><code>ignoreHiddenFiles</code></td><td>Boolean</td><td>false</td><td>true</td><td>Whether the hidden files should be ignored or not.</td></tr>
 <tr><td><code>pollingInterval</code></td><td>Long</td><td>false</td><td>10000L</td><td>Indicates how long to wait before performing a directory listing.</td></tr>
 <tr><td><code>numWorkers</code></td><td>Integer</td><td>false</td><td>1</td><td>The number of worker threads that process files.<br /><br /> This allows you to process a larger number of files concurrently. <br /><br />However, setting this to a value greater than 1 makes the data from multiple files mixed in the target topic.</td></tr>
+<tr><td><code>processedFileSuffix</code></td><td>String</td><td>false</td><td>NULL</td><td>If set, do not delete but only rename file that has been processed. <br /><br />  This config only work when 'keepFile' property is false.</td></tr>
 </tbody>
 </table>
 <h3><a class="anchor" aria-hidden="true" id="example"></a><a href="#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-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
@@ -58,7 +59,8 @@
       <span class="hljs-attr">"maximumSize"</span>: <span class="hljs-number">5000000</span>,
       <span class="hljs-attr">"ignoreHiddenFiles"</span>: <span class="hljs-literal">true</span>,
       <span class="hljs-attr">"pollingInterval"</span>: <span class="hljs-number">5000</span>,
-      <span class="hljs-attr">"numWorkers"</span>: <span class="hljs-number">1</span>
+      <span class="hljs-attr">"numWorkers"</span>: <span class="hljs-number">1</span>,
+      <span class="hljs-attr">"processedFileSuffix"</span>: <span class="hljs-string">".processed_done"</span>
    }
 }
 </code></pre></li>
@@ -76,6 +78,7 @@
     <span class="hljs-attr">ignoreHiddenFiles:</span> <span class="hljs-literal">true</span>
     <span class="hljs-attr">pollingInterval:</span> <span class="hljs-number">5000</span>
     <span class="hljs-attr">numWorkers:</span> <span class="hljs-number">1</span>
+    <span class="hljs-attr">processedFileSuffix:</span> <span class="hljs-string">".processed_done"</span>
 </code></pre></li>
 </ul>
 <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.2 [...]
diff --git a/content/docs/ja/next/reference-cli-tools.html b/content/docs/ja/next/reference-cli-tools.html
index ecb261eb..4879d91 100644
--- a/content/docs/ja/next/reference-cli-tools.html
+++ b/content/docs/ja/next/reference-cli-tools.html
@@ -223,14 +223,14 @@
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--configuration-store</code></td><td>Configuration store connection string</td><td></td></tr>
-<tr><td><code>-zk</code> , <code>--zookeeper-servers</code></td><td>Local ZooKeeper connection string</td><td></td></tr>
+<tr><td><code>-cms</code>, <code>--configuration-metadata-store</code></td><td>Configuration meta store connection string</td><td></td></tr>
+<tr><td><code>-md</code> , <code>--metadata-store</code></td><td>Metadata Store service url</td><td></td></tr>
 </tbody>
 </table>
 <p>Example</p>
 <pre><code class="hljs css language-bash">$ PULSAR_PROXY_CONF=/path/to/proxy.conf pulsar proxy \
-  --zookeeper-servers zk-0,zk-1,zk2 \
-  --configuration-store zk-0,zk-1,zk-2
+  --metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181 \
+  --configuration-metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181
 </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  [...]
 <p>Run a broker service with local bookies and local ZooKeeper</p>
@@ -615,7 +615,7 @@
 <tr><td><code>-time</code>, <code>--test-duration</code></td><td>Test duration (in seconds). If this value is less than or equal to 0, it keeps publishing messages.</td><td>0</td></tr>
 <tr><td><code>--threads</code></td><td>Number of threads writing</td><td>1</td></tr>
 <tr><td><code>-w</code>, <code>--write-quorum</code></td><td>Ledger write quorum</td><td>1</td></tr>
-<tr><td><code>-zk</code>, <code>--zookeeperServers</code></td><td>ZooKeeper connection string</td><td></td></tr>
+<tr><td><code>-md</code>, <code>--metadata-store</code></td><td>Metadata store service URL. For example: zk:my-zk:2181</td><td></td></tr>
 </tbody>
 </table>
 <h3><a class="anchor" aria-hidden="true" id="monitor-brokers"></a><a href="#monitor-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  [...]
diff --git a/content/docs/ja/next/reference-cli-tools/index.html b/content/docs/ja/next/reference-cli-tools/index.html
index ecb261eb..4879d91 100644
--- a/content/docs/ja/next/reference-cli-tools/index.html
+++ b/content/docs/ja/next/reference-cli-tools/index.html
@@ -223,14 +223,14 @@
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--configuration-store</code></td><td>Configuration store connection string</td><td></td></tr>
-<tr><td><code>-zk</code> , <code>--zookeeper-servers</code></td><td>Local ZooKeeper connection string</td><td></td></tr>
+<tr><td><code>-cms</code>, <code>--configuration-metadata-store</code></td><td>Configuration meta store connection string</td><td></td></tr>
+<tr><td><code>-md</code> , <code>--metadata-store</code></td><td>Metadata Store service url</td><td></td></tr>
 </tbody>
 </table>
 <p>Example</p>
 <pre><code class="hljs css language-bash">$ PULSAR_PROXY_CONF=/path/to/proxy.conf pulsar proxy \
-  --zookeeper-servers zk-0,zk-1,zk2 \
-  --configuration-store zk-0,zk-1,zk-2
+  --metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181 \
+  --configuration-metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181
 </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  [...]
 <p>Run a broker service with local bookies and local ZooKeeper</p>
@@ -615,7 +615,7 @@
 <tr><td><code>-time</code>, <code>--test-duration</code></td><td>Test duration (in seconds). If this value is less than or equal to 0, it keeps publishing messages.</td><td>0</td></tr>
 <tr><td><code>--threads</code></td><td>Number of threads writing</td><td>1</td></tr>
 <tr><td><code>-w</code>, <code>--write-quorum</code></td><td>Ledger write quorum</td><td>1</td></tr>
-<tr><td><code>-zk</code>, <code>--zookeeperServers</code></td><td>ZooKeeper connection string</td><td></td></tr>
+<tr><td><code>-md</code>, <code>--metadata-store</code></td><td>Metadata store service URL. For example: zk:my-zk:2181</td><td></td></tr>
 </tbody>
 </table>
 <h3><a class="anchor" aria-hidden="true" id="monitor-brokers"></a><a href="#monitor-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  [...]
diff --git a/content/docs/ja/next/reference-configuration.html b/content/docs/ja/next/reference-configuration.html
index f81a416..971dcdd 100644
--- a/content/docs/ja/next/reference-configuration.html
+++ b/content/docs/ja/next/reference-configuration.html
@@ -209,7 +209,7 @@
 <p>If there are multiple listeners, separate them with commas.</p>
 <p><strong>Note</strong>: do not use this configuration with <code>advertisedAddress</code> and <code>brokerServicePort</code>. If the value of this configuration is empty, the broker uses <code>advertisedAddress</code> and <code>brokerServicePort</code>|/| |internalListenerName|Specify the internal listener name for the broker.</p>
 <p><strong>Note</strong>: the listener name must be contained in <code>advertisedListeners</code>.</p>
-<p>If the value of this configuration is empty, the broker uses the first listener as the internal listener.|/| |authenticateOriginalAuthData| If this flag is set to <code>true</code>, the broker authenticates the original Auth data; else it just accepts the originalPrincipal and authorizes it (if required). |false| |enablePersistentTopics| Whether persistent topics are enabled on the broker |true| |enableNonPersistentTopics| Whether non-persistent topics are enabled on the broker |true| [...]
+<p>If the value of this configuration is empty, the broker uses the first listener as the internal listener.|/| |authenticateOriginalAuthData| If this flag is set to <code>true</code>, the broker authenticates the original Auth data; else it just accepts the originalPrincipal and authorizes it (if required). |false| |enablePersistentTopics| Whether persistent topics are enabled on the broker |true| |enableNonPersistentTopics| Whether non-persistent topics are enabled on the broker |true| [...]
 <ul>
 <li><p>'producer_request_hold' Policy which holds producer's send request until the resource becomes available (or holding times out)</p></li>
 <li><p>'producer_exception' Policy which throws <code>javax.jms.ResourceAllocationException</code> to the producer</p></li>
@@ -218,32 +218,44 @@
 <li><p><code>delete_when_no_subscriptions</code>: delete the topic which has no subscriptions or active producers.</p>
 <ul>
 <li><p><code>delete_when_subscriptions_caught_up</code>: delete the topic whose subscriptions have no backlogs and which has no active producers or consumers. | <code>delete_when_no_subscriptions</code> | | brokerDeleteInactiveTopicsMaxInactiveDurationSeconds | Set the maximum duration for inactive topics. If it is not specified, the <code>brokerDeleteInactiveTopicsFrequencySeconds</code> parameter is adopted. | N/A | |forceDeleteTenantAllowed| Enable you to delete a tenant forcefully. | [...]
-<p>Set this threshold to 0 means disabling the compression check.|N/A |delayedDeliveryEnabled| Whether to enable the delayed delivery for messages. If disabled, messages will be immediately delivered and there will be no tracking overhead.|true| |delayedDeliveryTickTimeMillis|Control the tick time for retrying on delayed delivery, which affects the accuracy of the delivery time compared to the scheduled time. By default, it is 1 second.|1000| |activeConsumerFailoverDelayTimeMillis| How l [...]
+<p>Set this threshold to 0 means disabling the compression check.|N/A |delayedDeliveryEnabled| Whether to enable the delayed delivery for messages. If disabled, messages will be immediately delivered and there will be no tracking overhead.|true| |delayedDeliveryTickTimeMillis|Control the tick time for retrying on delayed delivery, which affects the accuracy of the delivery time compared to the scheduled time. By default, it is 1 second.|1000| |activeConsumerFailoverDelayTimeMillis| How l [...]
 <p>Setting this configuration to a value <strong>greater than 0</strong> deletes inactive subscriptions automatically.<br>
 Setting this configuration to <strong>0</strong> does not delete inactive subscriptions automatically.</p>
 <p>Since this configuration takes effect on all topics, if there is even one topic whose subscriptions should not be deleted automatically, you need to set it to 0.<br>
-Instead, you can set a subscription expiration time for each <strong>namespace</strong> using the <a href="https://pulsar.apache.org/tools/pulsar-admin/2.6.0-SNAPSHOT/#-em-set-subscription-expiration-time-em-"><code>pulsar-admin namespaces set-subscription-expiration-time options</code> command</a>. | 0 | |maxConcurrentLookupRequest| Max number of concurrent lookup request broker allows to throttle heavy incoming lookup traffic |50000| |maxConcurrentTopicLoadRequest| Max number of concur [...]
+Instead, you can set a subscription expiration time for each <strong>namespace</strong> using the <a href="https://pulsar.apache.org/tools/pulsar-admin/2.6.0-SNAPSHOT/#-em-set-subscription-expiration-time-em-"><code>pulsar-admin namespaces set-subscription-expiration-time options</code> command</a>. | 0 | |maxConcurrentLookupRequest| Max number of concurrent lookup request broker allows to throttle heavy incoming lookup traffic |50000| |maxConcurrentTopicLoadRequest| Max number of concur [...]
 <ul>
 <li>The max rollover time has been reached</li>
 <li>The max entries have been written to the ledger</li>
-<li>The max ledger size has been written to the ledger|50000| |managedLedgerMinLedgerRolloverTimeMinutes| Minimum time between ledger rollover for a topic |10| |managedLedgerMaxLedgerRolloverTimeMinutes| Maximum time before forcing a ledger rollover for a topic |240| |managedLedgerCursorMaxEntriesPerLedger| Max number of entries to append to a cursor ledger |50000| |managedLedgerCursorRolloverTimeInSeconds| Max time before triggering a rollover on a cursor ledger |14400| |managedLedgerMa [...]
-<code>brokerDeleteInactiveTopicsFrequencySeconds</code>.|60| |transactionCoordinatorEnabled|Whether to enable transaction coordinator in broker.|true| |transactionMetadataStoreProviderClassName| |org.apache.pulsar.transaction.coordinator.impl.InMemTransactionMetadataStoreProvider| |defaultRetentionTimeInMinutes| Default message retention time |0| |defaultRetentionSizeInMB| Default retention size |0| |keepAliveIntervalSeconds| How often to check whether the connections are still alive |30 [...]
-|haProxyProtocolEnabled | Enable or disable the <a href="http://www.haproxy.org/">HAProxy</a> protocol. |false| | maxTopicsPerNamespace | The maximum number of persistent topics that can be created in the namespace. When the number of topics reaches this threshold, the broker rejects the request of creating a new topic, including the auto-created topics by the producer or consumer, until the number of connected consumers decreases. The default value 0 disables the check. | 0 | |subscript [...]
-</ul>
-<p>Available options are <code>NONE</code>, <code>LZ4</code>, <code>ZLIB</code>, <code>ZSTD</code>, and <code>SNAPPY</code>).</p>
-<p>If this value is <code>NONE</code> or invalid, the <code>managedLedgerInfo</code> is not compressed.</p>
-<p><strong>Note</strong> that after enabling this configuration, if you want to degrade a broker, you need to change the value to <code>NONE</code> and make sure all ledger metadata is saved without compression. | None | | additionalServlets | Additional servlet name.</p>
-<p>If you have multiple additional servlets, separate them by commas.</p>
-<p>For example, additionalServlet_1, additionalServlet_2 | N/A | | additionalServletDirectory | Location of broker additional servlet NAR directory | ./brokerAdditionalServlet | | brokerEntryMetadataInterceptors | Set broker entry metadata interceptors.</p>
-<p>Multiple interceptors should be separated by commas.</p>
-<p>Available values:</p>
-<ul>
-<li>org.apache.pulsar.common.intercept.AppendBrokerTimestampMetadataInterceptor</li>
-<li>org.apache.pulsar.common.intercept.AppendIndexMetadataInterceptor</li>
+<li>The max ledger size has been written to the ledger|50000| |managedLedgerMinLedgerRolloverTimeMinutes| Minimum time between ledger rollover for a topic |10| |managedLedgerMaxLedgerRolloverTimeMinutes| Maximum time before forcing a ledger rollover for a topic |240| |managedLedgerInactiveLedgerRolloverTimeSeconds| Time to rollover ledger for inactive topic |0| |managedLedgerCursorMaxEntriesPerLedger| Max number of entries to append to a cursor ledger |50000| |managedLedgerCursorRollover [...]
 </ul></li>
 </ul></li>
 </ul>
-<pre><code class="hljs">    Example  
+<pre><code class="hljs">    Available values: 
+    - `org.apache.pulsar.broker.loadbalance.impl.ThresholdShedder`
+    - `org.apache.pulsar.broker.loadbalance.impl.OverloadShedder`
+    - `org.apache.pulsar.broker.loadbalance.impl.UniformLoadShedder`
+      
+    For the comparisons of the shedding strategies, see [here](administration-load-balance/#shed-load-automatically).|`org.apache.pulsar.broker.loadbalance.impl.ThresholdShedder` |replicationMetricsEnabled| Enable replication metrics |true| |replicationConnectionsPerBroker| Max number of connections to open for each broker in a remote cluster More connections host-to-host lead to better throughput over high-latency links. |16| |replicationProducerQueueSize| Replicator producer queue size [...]
+    |haProxyProtocolEnabled | Enable or disable the [HAProxy](http://www.haproxy.org/) protocol. |false| | maxTopicsPerNamespace | The maximum number of persistent topics that can be created in the namespace. When the number of topics reaches this threshold, the broker rejects the request of creating a new topic, including the auto-created topics by the producer or consumer, until the number of connected consumers decreases. The default value 0 disables the check. | 0 | |subscriptionType [...]
+      
+    Available options are `NONE`, `LZ4`, `ZLIB`, `ZSTD`, and `SNAPPY`).   
+      
+    If this value is `NONE` or invalid, the `managedLedgerInfo` is not compressed.   
+      
+    **Note** that after enabling this configuration, if you want to degrade a broker, you need to change the value to `NONE` and make sure all ledger metadata is saved without compression. | None | | additionalServlets | Additional servlet name.   
+      
+    If you have multiple additional servlets, separate them by commas.   
+      
+    For example, additionalServlet_1, additionalServlet_2 | N/A | | additionalServletDirectory | Location of broker additional servlet NAR directory | ./brokerAdditionalServlet | | brokerEntryMetadataInterceptors | Set broker entry metadata interceptors.  
+      
+    Multiple interceptors should be separated by commas.   
+      
+    Available values:
+    - org.apache.pulsar.common.intercept.AppendBrokerTimestampMetadataInterceptor
+    - org.apache.pulsar.common.intercept.AppendIndexMetadataInterceptor
+      
+      
+    Example  
     brokerEntryMetadataInterceptors=org.apache.pulsar.common.intercept.AppendBrokerTimestampMetadataInterceptor, org.apache.pulsar.common.intercept.AppendIndexMetadataInterceptor|N/A | | enableExposingBrokerEntryMetadataToClient|Whether to expose broker entry metadata to client or not.  
       
     Available values:
@@ -252,6 +264,22 @@ Instead, you can set a subscription expiration time for each <strong>namespace</
       
     Example  
     enableExposingBrokerEntryMetadataToClient=true | false |&lt;/p&gt; 
+    #### Deprecated parameters of Broker
+    
+    The following parameters have been deprecated in the `conf/broker.conf` file.
+    
+    | Name                                         | Description                                                                                                     | Default |
+    | -------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | ------- |
+    | backlogQuotaDefaultLimitGB                   | Use `backlogQuotaDefaultLimitBytes` instead.                                                                    | -1      |
+    | brokerServicePurgeInactiveFrequencyInSeconds | Use `brokerDeleteInactiveTopicsFrequencySeconds`.                                                               | 60      |
+    | tlsEnabled                                   | Use `webServicePortTls` and `brokerServicePortTls` instead.                                                     | false   |
+    | replicationTlsEnabled                        | Enable TLS when talking with other clusters to replicate messages. Use `brokerClientTlsEnabled` instead.        | false   |
+    | subscriptionKeySharedEnable                  | Whether to enable the Key_Shared subscription. Use `subscriptionTypesEnabled` instead.                          | true    |
+    | zookeeperServers                             | Zookeeper quorum connection string. Use `metadataStoreUrl` instead.                                             | N/A     |
+    | configurationStoreServers                    | Configuration store connection string (as a comma-separated list). Use `configurationMetadataStoreUrl` instead. | N/A     |
+    | zooKeeperSessionTimeoutMillis                | Zookeeper session timeout in milliseconds. Use `metadataStoreSessionTimeoutMillis` instead.                     | 30000   |
+    | zooKeeperCacheExpirySeconds                  | ZooKeeper cache expiry time in seconds. Use `metadataStoreCacheExpirySeconds` instead.                          | 300     |
+    
     ## Client
     
     You can use the [`pulsar-client`](/docs/ja/next/reference-cli-tools#pulsar-client) CLI tool to publish messages to and consume messages from Pulsar topics. You can use this tool in place of a client library.
@@ -321,32 +349,51 @@ Instead, you can set a subscription expiration time for each <strong>namespace</
                                 - PKCS12&lt;/td&gt; 
                                     &lt;/tr&gt; 
                                     &lt;/tbody&gt; &lt;/table&gt; 
+                                    #### Deprecated parameters of standalone Pulsar
+                                    
+                                    The following parameters have been deprecated in the `conf/standalone.conf` file.
+                                    
+                                    | Name                             | Description                                                                                      | Default |
+                                    | -------------------------------- | ------------------------------------------------------------------------------------------------ | ------- |
+                                    | zooKeeperOperationTimeoutSeconds | ZooKeeper operation timeout in seconds. Use `metadataStoreOperationTimeoutSeconds` instead.      | 30      |
+                                    | zooKeeperCacheExpirySeconds      | ZooKeeper cache expiry time in seconds. Use `metadataStoreCacheExpirySeconds` instead.           | 300     |
+                                    | zooKeeperSessionTimeoutMillis    | The ZooKeeper session timeout, in milliseconds. Use `metadataStoreSessionTimeoutMillis` instead. | 30000   |
+                                    
                                     ## WebSocket
                                     
-                                    | Name                                 | Description                            | Default |
-                                    | ------------------------------------ | -------------------------------------- | ------- |
-                                    | configurationStoreServers            |                                        |         |
-                                    | zooKeeperSessionTimeoutMillis        |                                        | 30000   |
-                                    | zooKeeperCacheExpirySeconds          | ZooKeeper cache expiry time in seconds | 300     |
-                                    | serviceUrl                           |                                        |         |
-                                    | serviceUrlTls                        |                                        |         |
-                                    | brokerServiceUrl                     |                                        |         |
-                                    | brokerServiceUrlTls                  |                                        |         |
-                                    | webServicePort                       |                                        | 8080    |
-                                    | webServicePortTls                    |                                        | 8443    |
-                                    | bindAddress                          |                                        | 0.0.0.0 |
-                                    | clusterName                          |                                        |         |
-                                    | authenticationEnabled                |                                        | false   |
-                                    | authenticationProviders              |                                        |         |
-                                    | authorizationEnabled                 |                                        | false   |
-                                    | superUserRoles                       |                                        |         |
-                                    | brokerClientAuthenticationPlugin     |                                        |         |
-                                    | brokerClientAuthenticationParameters |                                        |         |
-                                    | tlsEnabled                           |                                        | false   |
-                                    | tlsAllowInsecureConnection           |                                        | false   |
-                                    | tlsCertificateFilePath               |                                        |         |
-                                    | tlsKeyFilePath                       |                                        |         |
-                                    | tlsTrustCertsFilePath                |                                        |         |
+                                    | Name                                 | Description                                     | Default |
+                                    | ------------------------------------ | ----------------------------------------------- | ------- |
+                                    | configurationMetadataStoreUrl        |                                                 |         |
+                                    | metadataStoreSessionTimeoutMillis    | Metadata store session timeout in milliseconds. | 30000   |
+                                    | metadataStoreCacheExpirySeconds      | Metadata store cache expiry time in seconds     | 300     |
+                                    | serviceUrl                           |                                                 |         |
+                                    | serviceUrlTls                        |                                                 |         |
+                                    | brokerServiceUrl                     |                                                 |         |
+                                    | brokerServiceUrlTls                  |                                                 |         |
+                                    | webServicePort                       |                                                 | 8080    |
+                                    | webServicePortTls                    |                                                 | 8443    |
+                                    | bindAddress                          |                                                 | 0.0.0.0 |
+                                    | clusterName                          |                                                 |         |
+                                    | authenticationEnabled                |                                                 | false   |
+                                    | authenticationProviders              |                                                 |         |
+                                    | authorizationEnabled                 |                                                 | false   |
+                                    | superUserRoles                       |                                                 |         |
+                                    | brokerClientAuthenticationPlugin     |                                                 |         |
+                                    | brokerClientAuthenticationParameters |                                                 |         |
+                                    | tlsEnabled                           |                                                 | false   |
+                                    | tlsAllowInsecureConnection           |                                                 | false   |
+                                    | tlsCertificateFilePath               |                                                 |         |
+                                    | tlsKeyFilePath                       |                                                 |         |
+                                    | tlsTrustCertsFilePath                |                                                 |         |
+                                    
+                                    #### Deprecated parameters of WebSocket
+                                    
+                                    The following parameters have been deprecated in the `conf/websocket.conf` file.
+                                    
+                                    | Name                          | Description                                                                                     | Default |
+                                    | ----------------------------- | ----------------------------------------------------------------------------------------------- | ------- |
+                                    | zooKeeperSessionTimeoutMillis | The ZooKeeper session timeout in milliseconds. Use `metadataStoreSessionTimeoutMillis` instead. | 30000   |
+                                    | zooKeeperCacheExpirySeconds   | ZooKeeper cache expiry time in seconds. Use `metadataStoreCacheExpirySeconds` instead.          | 300     |
                                     
                                     ## Pulsar proxy
                                     
@@ -359,6 +406,16 @@ Instead, you can set a subscription expiration time for each <strong>namespace</
                                             - 2: Parse and log channel information, command information and message body.&lt;/td&gt; 
                                                 &lt;/tr&gt; 
                                                 &lt;/tbody&gt; &lt;/table&gt; 
+                                                #### Deprecated parameters of Pulsar proxy
+                                                
+                                                The following parameters have been deprecated in the `conf/proxy.conf` file.
+                                                
+                                                | Name                        | Description                                                                                   | Default |
+                                                | --------------------------- | --------------------------------------------------------------------------------------------- | ------- |
+                                                | tlsEnabledInProxy           | Deprecated - use `servicePortTls` and `webServicePortTls` instead.                            | false   |
+                                                | zookeeperSessionTimeoutMs   | ZooKeeper session timeout (in milliseconds). Use `metadataStoreSessionTimeoutMillis` instead. | 30000   |
+                                                | zooKeeperCacheExpirySeconds | ZooKeeper cache expiry time in seconds. Use `metadataStoreCacheExpirySeconds` instead.        | 300     |
+                                                
                                                 ## ZooKeeper
                                                 
                                                 ZooKeeper handles a broad range of essential configuration- and coordination-related tasks for Pulsar. The default configuration file for ZooKeeper is in the `conf/zookeeper.conf` file in your Pulsar installation. The following parameters are available:
diff --git a/content/docs/ja/next/reference-configuration/index.html b/content/docs/ja/next/reference-configuration/index.html
index f81a416..971dcdd 100644
--- a/content/docs/ja/next/reference-configuration/index.html
+++ b/content/docs/ja/next/reference-configuration/index.html
@@ -209,7 +209,7 @@
 <p>If there are multiple listeners, separate them with commas.</p>
 <p><strong>Note</strong>: do not use this configuration with <code>advertisedAddress</code> and <code>brokerServicePort</code>. If the value of this configuration is empty, the broker uses <code>advertisedAddress</code> and <code>brokerServicePort</code>|/| |internalListenerName|Specify the internal listener name for the broker.</p>
 <p><strong>Note</strong>: the listener name must be contained in <code>advertisedListeners</code>.</p>
-<p>If the value of this configuration is empty, the broker uses the first listener as the internal listener.|/| |authenticateOriginalAuthData| If this flag is set to <code>true</code>, the broker authenticates the original Auth data; else it just accepts the originalPrincipal and authorizes it (if required). |false| |enablePersistentTopics| Whether persistent topics are enabled on the broker |true| |enableNonPersistentTopics| Whether non-persistent topics are enabled on the broker |true| [...]
+<p>If the value of this configuration is empty, the broker uses the first listener as the internal listener.|/| |authenticateOriginalAuthData| If this flag is set to <code>true</code>, the broker authenticates the original Auth data; else it just accepts the originalPrincipal and authorizes it (if required). |false| |enablePersistentTopics| Whether persistent topics are enabled on the broker |true| |enableNonPersistentTopics| Whether non-persistent topics are enabled on the broker |true| [...]
 <ul>
 <li><p>'producer_request_hold' Policy which holds producer's send request until the resource becomes available (or holding times out)</p></li>
 <li><p>'producer_exception' Policy which throws <code>javax.jms.ResourceAllocationException</code> to the producer</p></li>
@@ -218,32 +218,44 @@
 <li><p><code>delete_when_no_subscriptions</code>: delete the topic which has no subscriptions or active producers.</p>
 <ul>
 <li><p><code>delete_when_subscriptions_caught_up</code>: delete the topic whose subscriptions have no backlogs and which has no active producers or consumers. | <code>delete_when_no_subscriptions</code> | | brokerDeleteInactiveTopicsMaxInactiveDurationSeconds | Set the maximum duration for inactive topics. If it is not specified, the <code>brokerDeleteInactiveTopicsFrequencySeconds</code> parameter is adopted. | N/A | |forceDeleteTenantAllowed| Enable you to delete a tenant forcefully. | [...]
-<p>Set this threshold to 0 means disabling the compression check.|N/A |delayedDeliveryEnabled| Whether to enable the delayed delivery for messages. If disabled, messages will be immediately delivered and there will be no tracking overhead.|true| |delayedDeliveryTickTimeMillis|Control the tick time for retrying on delayed delivery, which affects the accuracy of the delivery time compared to the scheduled time. By default, it is 1 second.|1000| |activeConsumerFailoverDelayTimeMillis| How l [...]
+<p>Set this threshold to 0 means disabling the compression check.|N/A |delayedDeliveryEnabled| Whether to enable the delayed delivery for messages. If disabled, messages will be immediately delivered and there will be no tracking overhead.|true| |delayedDeliveryTickTimeMillis|Control the tick time for retrying on delayed delivery, which affects the accuracy of the delivery time compared to the scheduled time. By default, it is 1 second.|1000| |activeConsumerFailoverDelayTimeMillis| How l [...]
 <p>Setting this configuration to a value <strong>greater than 0</strong> deletes inactive subscriptions automatically.<br>
 Setting this configuration to <strong>0</strong> does not delete inactive subscriptions automatically.</p>
 <p>Since this configuration takes effect on all topics, if there is even one topic whose subscriptions should not be deleted automatically, you need to set it to 0.<br>
-Instead, you can set a subscription expiration time for each <strong>namespace</strong> using the <a href="https://pulsar.apache.org/tools/pulsar-admin/2.6.0-SNAPSHOT/#-em-set-subscription-expiration-time-em-"><code>pulsar-admin namespaces set-subscription-expiration-time options</code> command</a>. | 0 | |maxConcurrentLookupRequest| Max number of concurrent lookup request broker allows to throttle heavy incoming lookup traffic |50000| |maxConcurrentTopicLoadRequest| Max number of concur [...]
+Instead, you can set a subscription expiration time for each <strong>namespace</strong> using the <a href="https://pulsar.apache.org/tools/pulsar-admin/2.6.0-SNAPSHOT/#-em-set-subscription-expiration-time-em-"><code>pulsar-admin namespaces set-subscription-expiration-time options</code> command</a>. | 0 | |maxConcurrentLookupRequest| Max number of concurrent lookup request broker allows to throttle heavy incoming lookup traffic |50000| |maxConcurrentTopicLoadRequest| Max number of concur [...]
 <ul>
 <li>The max rollover time has been reached</li>
 <li>The max entries have been written to the ledger</li>
-<li>The max ledger size has been written to the ledger|50000| |managedLedgerMinLedgerRolloverTimeMinutes| Minimum time between ledger rollover for a topic |10| |managedLedgerMaxLedgerRolloverTimeMinutes| Maximum time before forcing a ledger rollover for a topic |240| |managedLedgerCursorMaxEntriesPerLedger| Max number of entries to append to a cursor ledger |50000| |managedLedgerCursorRolloverTimeInSeconds| Max time before triggering a rollover on a cursor ledger |14400| |managedLedgerMa [...]
-<code>brokerDeleteInactiveTopicsFrequencySeconds</code>.|60| |transactionCoordinatorEnabled|Whether to enable transaction coordinator in broker.|true| |transactionMetadataStoreProviderClassName| |org.apache.pulsar.transaction.coordinator.impl.InMemTransactionMetadataStoreProvider| |defaultRetentionTimeInMinutes| Default message retention time |0| |defaultRetentionSizeInMB| Default retention size |0| |keepAliveIntervalSeconds| How often to check whether the connections are still alive |30 [...]
-|haProxyProtocolEnabled | Enable or disable the <a href="http://www.haproxy.org/">HAProxy</a> protocol. |false| | maxTopicsPerNamespace | The maximum number of persistent topics that can be created in the namespace. When the number of topics reaches this threshold, the broker rejects the request of creating a new topic, including the auto-created topics by the producer or consumer, until the number of connected consumers decreases. The default value 0 disables the check. | 0 | |subscript [...]
-</ul>
-<p>Available options are <code>NONE</code>, <code>LZ4</code>, <code>ZLIB</code>, <code>ZSTD</code>, and <code>SNAPPY</code>).</p>
-<p>If this value is <code>NONE</code> or invalid, the <code>managedLedgerInfo</code> is not compressed.</p>
-<p><strong>Note</strong> that after enabling this configuration, if you want to degrade a broker, you need to change the value to <code>NONE</code> and make sure all ledger metadata is saved without compression. | None | | additionalServlets | Additional servlet name.</p>
-<p>If you have multiple additional servlets, separate them by commas.</p>
-<p>For example, additionalServlet_1, additionalServlet_2 | N/A | | additionalServletDirectory | Location of broker additional servlet NAR directory | ./brokerAdditionalServlet | | brokerEntryMetadataInterceptors | Set broker entry metadata interceptors.</p>
-<p>Multiple interceptors should be separated by commas.</p>
-<p>Available values:</p>
-<ul>
-<li>org.apache.pulsar.common.intercept.AppendBrokerTimestampMetadataInterceptor</li>
-<li>org.apache.pulsar.common.intercept.AppendIndexMetadataInterceptor</li>
+<li>The max ledger size has been written to the ledger|50000| |managedLedgerMinLedgerRolloverTimeMinutes| Minimum time between ledger rollover for a topic |10| |managedLedgerMaxLedgerRolloverTimeMinutes| Maximum time before forcing a ledger rollover for a topic |240| |managedLedgerInactiveLedgerRolloverTimeSeconds| Time to rollover ledger for inactive topic |0| |managedLedgerCursorMaxEntriesPerLedger| Max number of entries to append to a cursor ledger |50000| |managedLedgerCursorRollover [...]
 </ul></li>
 </ul></li>
 </ul>
-<pre><code class="hljs">    Example  
+<pre><code class="hljs">    Available values: 
+    - `org.apache.pulsar.broker.loadbalance.impl.ThresholdShedder`
+    - `org.apache.pulsar.broker.loadbalance.impl.OverloadShedder`
+    - `org.apache.pulsar.broker.loadbalance.impl.UniformLoadShedder`
+      
+    For the comparisons of the shedding strategies, see [here](administration-load-balance/#shed-load-automatically).|`org.apache.pulsar.broker.loadbalance.impl.ThresholdShedder` |replicationMetricsEnabled| Enable replication metrics |true| |replicationConnectionsPerBroker| Max number of connections to open for each broker in a remote cluster More connections host-to-host lead to better throughput over high-latency links. |16| |replicationProducerQueueSize| Replicator producer queue size [...]
+    |haProxyProtocolEnabled | Enable or disable the [HAProxy](http://www.haproxy.org/) protocol. |false| | maxTopicsPerNamespace | The maximum number of persistent topics that can be created in the namespace. When the number of topics reaches this threshold, the broker rejects the request of creating a new topic, including the auto-created topics by the producer or consumer, until the number of connected consumers decreases. The default value 0 disables the check. | 0 | |subscriptionType [...]
+      
+    Available options are `NONE`, `LZ4`, `ZLIB`, `ZSTD`, and `SNAPPY`).   
+      
+    If this value is `NONE` or invalid, the `managedLedgerInfo` is not compressed.   
+      
+    **Note** that after enabling this configuration, if you want to degrade a broker, you need to change the value to `NONE` and make sure all ledger metadata is saved without compression. | None | | additionalServlets | Additional servlet name.   
+      
+    If you have multiple additional servlets, separate them by commas.   
+      
+    For example, additionalServlet_1, additionalServlet_2 | N/A | | additionalServletDirectory | Location of broker additional servlet NAR directory | ./brokerAdditionalServlet | | brokerEntryMetadataInterceptors | Set broker entry metadata interceptors.  
+      
+    Multiple interceptors should be separated by commas.   
+      
+    Available values:
+    - org.apache.pulsar.common.intercept.AppendBrokerTimestampMetadataInterceptor
+    - org.apache.pulsar.common.intercept.AppendIndexMetadataInterceptor
+      
+      
+    Example  
     brokerEntryMetadataInterceptors=org.apache.pulsar.common.intercept.AppendBrokerTimestampMetadataInterceptor, org.apache.pulsar.common.intercept.AppendIndexMetadataInterceptor|N/A | | enableExposingBrokerEntryMetadataToClient|Whether to expose broker entry metadata to client or not.  
       
     Available values:
@@ -252,6 +264,22 @@ Instead, you can set a subscription expiration time for each <strong>namespace</
       
     Example  
     enableExposingBrokerEntryMetadataToClient=true | false |&lt;/p&gt; 
+    #### Deprecated parameters of Broker
+    
+    The following parameters have been deprecated in the `conf/broker.conf` file.
+    
+    | Name                                         | Description                                                                                                     | Default |
+    | -------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | ------- |
+    | backlogQuotaDefaultLimitGB                   | Use `backlogQuotaDefaultLimitBytes` instead.                                                                    | -1      |
+    | brokerServicePurgeInactiveFrequencyInSeconds | Use `brokerDeleteInactiveTopicsFrequencySeconds`.                                                               | 60      |
+    | tlsEnabled                                   | Use `webServicePortTls` and `brokerServicePortTls` instead.                                                     | false   |
+    | replicationTlsEnabled                        | Enable TLS when talking with other clusters to replicate messages. Use `brokerClientTlsEnabled` instead.        | false   |
+    | subscriptionKeySharedEnable                  | Whether to enable the Key_Shared subscription. Use `subscriptionTypesEnabled` instead.                          | true    |
+    | zookeeperServers                             | Zookeeper quorum connection string. Use `metadataStoreUrl` instead.                                             | N/A     |
+    | configurationStoreServers                    | Configuration store connection string (as a comma-separated list). Use `configurationMetadataStoreUrl` instead. | N/A     |
+    | zooKeeperSessionTimeoutMillis                | Zookeeper session timeout in milliseconds. Use `metadataStoreSessionTimeoutMillis` instead.                     | 30000   |
+    | zooKeeperCacheExpirySeconds                  | ZooKeeper cache expiry time in seconds. Use `metadataStoreCacheExpirySeconds` instead.                          | 300     |
+    
     ## Client
     
     You can use the [`pulsar-client`](/docs/ja/next/reference-cli-tools#pulsar-client) CLI tool to publish messages to and consume messages from Pulsar topics. You can use this tool in place of a client library.
@@ -321,32 +349,51 @@ Instead, you can set a subscription expiration time for each <strong>namespace</
                                 - PKCS12&lt;/td&gt; 
                                     &lt;/tr&gt; 
                                     &lt;/tbody&gt; &lt;/table&gt; 
+                                    #### Deprecated parameters of standalone Pulsar
+                                    
+                                    The following parameters have been deprecated in the `conf/standalone.conf` file.
+                                    
+                                    | Name                             | Description                                                                                      | Default |
+                                    | -------------------------------- | ------------------------------------------------------------------------------------------------ | ------- |
+                                    | zooKeeperOperationTimeoutSeconds | ZooKeeper operation timeout in seconds. Use `metadataStoreOperationTimeoutSeconds` instead.      | 30      |
+                                    | zooKeeperCacheExpirySeconds      | ZooKeeper cache expiry time in seconds. Use `metadataStoreCacheExpirySeconds` instead.           | 300     |
+                                    | zooKeeperSessionTimeoutMillis    | The ZooKeeper session timeout, in milliseconds. Use `metadataStoreSessionTimeoutMillis` instead. | 30000   |
+                                    
                                     ## WebSocket
                                     
-                                    | Name                                 | Description                            | Default |
-                                    | ------------------------------------ | -------------------------------------- | ------- |
-                                    | configurationStoreServers            |                                        |         |
-                                    | zooKeeperSessionTimeoutMillis        |                                        | 30000   |
-                                    | zooKeeperCacheExpirySeconds          | ZooKeeper cache expiry time in seconds | 300     |
-                                    | serviceUrl                           |                                        |         |
-                                    | serviceUrlTls                        |                                        |         |
-                                    | brokerServiceUrl                     |                                        |         |
-                                    | brokerServiceUrlTls                  |                                        |         |
-                                    | webServicePort                       |                                        | 8080    |
-                                    | webServicePortTls                    |                                        | 8443    |
-                                    | bindAddress                          |                                        | 0.0.0.0 |
-                                    | clusterName                          |                                        |         |
-                                    | authenticationEnabled                |                                        | false   |
-                                    | authenticationProviders              |                                        |         |
-                                    | authorizationEnabled                 |                                        | false   |
-                                    | superUserRoles                       |                                        |         |
-                                    | brokerClientAuthenticationPlugin     |                                        |         |
-                                    | brokerClientAuthenticationParameters |                                        |         |
-                                    | tlsEnabled                           |                                        | false   |
-                                    | tlsAllowInsecureConnection           |                                        | false   |
-                                    | tlsCertificateFilePath               |                                        |         |
-                                    | tlsKeyFilePath                       |                                        |         |
-                                    | tlsTrustCertsFilePath                |                                        |         |
+                                    | Name                                 | Description                                     | Default |
+                                    | ------------------------------------ | ----------------------------------------------- | ------- |
+                                    | configurationMetadataStoreUrl        |                                                 |         |
+                                    | metadataStoreSessionTimeoutMillis    | Metadata store session timeout in milliseconds. | 30000   |
+                                    | metadataStoreCacheExpirySeconds      | Metadata store cache expiry time in seconds     | 300     |
+                                    | serviceUrl                           |                                                 |         |
+                                    | serviceUrlTls                        |                                                 |         |
+                                    | brokerServiceUrl                     |                                                 |         |
+                                    | brokerServiceUrlTls                  |                                                 |         |
+                                    | webServicePort                       |                                                 | 8080    |
+                                    | webServicePortTls                    |                                                 | 8443    |
+                                    | bindAddress                          |                                                 | 0.0.0.0 |
+                                    | clusterName                          |                                                 |         |
+                                    | authenticationEnabled                |                                                 | false   |
+                                    | authenticationProviders              |                                                 |         |
+                                    | authorizationEnabled                 |                                                 | false   |
+                                    | superUserRoles                       |                                                 |         |
+                                    | brokerClientAuthenticationPlugin     |                                                 |         |
+                                    | brokerClientAuthenticationParameters |                                                 |         |
+                                    | tlsEnabled                           |                                                 | false   |
+                                    | tlsAllowInsecureConnection           |                                                 | false   |
+                                    | tlsCertificateFilePath               |                                                 |         |
+                                    | tlsKeyFilePath                       |                                                 |         |
+                                    | tlsTrustCertsFilePath                |                                                 |         |
+                                    
+                                    #### Deprecated parameters of WebSocket
+                                    
+                                    The following parameters have been deprecated in the `conf/websocket.conf` file.
+                                    
+                                    | Name                          | Description                                                                                     | Default |
+                                    | ----------------------------- | ----------------------------------------------------------------------------------------------- | ------- |
+                                    | zooKeeperSessionTimeoutMillis | The ZooKeeper session timeout in milliseconds. Use `metadataStoreSessionTimeoutMillis` instead. | 30000   |
+                                    | zooKeeperCacheExpirySeconds   | ZooKeeper cache expiry time in seconds. Use `metadataStoreCacheExpirySeconds` instead.          | 300     |
                                     
                                     ## Pulsar proxy
                                     
@@ -359,6 +406,16 @@ Instead, you can set a subscription expiration time for each <strong>namespace</
                                             - 2: Parse and log channel information, command information and message body.&lt;/td&gt; 
                                                 &lt;/tr&gt; 
                                                 &lt;/tbody&gt; &lt;/table&gt; 
+                                                #### Deprecated parameters of Pulsar proxy
+                                                
+                                                The following parameters have been deprecated in the `conf/proxy.conf` file.
+                                                
+                                                | Name                        | Description                                                                                   | Default |
+                                                | --------------------------- | --------------------------------------------------------------------------------------------- | ------- |
+                                                | tlsEnabledInProxy           | Deprecated - use `servicePortTls` and `webServicePortTls` instead.                            | false   |
+                                                | zookeeperSessionTimeoutMs   | ZooKeeper session timeout (in milliseconds). Use `metadataStoreSessionTimeoutMillis` instead. | 30000   |
+                                                | zooKeeperCacheExpirySeconds | ZooKeeper cache expiry time in seconds. Use `metadataStoreCacheExpirySeconds` instead.        | 300     |
+                                                
                                                 ## ZooKeeper
                                                 
                                                 ZooKeeper handles a broad range of essential configuration- and coordination-related tasks for Pulsar. The default configuration file for ZooKeeper is in the `conf/zookeeper.conf` file in your Pulsar installation. The following parameters are available:
diff --git a/content/docs/ja/next/reference-metrics.html b/content/docs/ja/next/reference-metrics.html
index 062b13a..7e2231c 100644
--- a/content/docs/ja/next/reference-metrics.html
+++ b/content/docs/ja/next/reference-metrics.html
@@ -202,9 +202,10 @@
 <tr><th>Name</th><th>Type</th><th>Description</th></tr>
 </thead>
 <tbody>
-<tr><td>bookkeeper_server_BOOKIE_QUARANTINE_count</td><td>Counter</td><td>The number of bookie clients to be quarantined.</td></tr>
+<tr><td>pulsar_managedLedger_client_bookkeeper_client_BOOKIE_QUARANTINE</td><td>Counter</td><td>The number of bookie clients to be quarantined.</td></tr>
 </tbody>
 </table>
+<p>If you want to expose this metric, set <code>bookkeeperClientExposeStatsToPrometheus</code> to <code>true</code> in the <code>broker.conf</code> file. |</p>
 <h3><a class="anchor" aria-hidden="true" id="namespace-metrics"></a><a href="#namespace-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- [...]
 <blockquote>
 <p>Namespace metrics are only exposed when <code>exposeTopicLevelMetricsInPrometheus</code> is set to <code>false</code>.</p>
@@ -302,6 +303,7 @@ Available thresholds:</p>
 <tr><td>pulsar_consumers_count</td><td>Gauge</td><td>The number of active consumers of the topic connected to this broker.</td></tr>
 <tr><td>pulsar_rate_in</td><td>Gauge</td><td>The total message rate of the topic coming into this broker (messages/second).</td></tr>
 <tr><td>pulsar_rate_out</td><td>Gauge</td><td>The total message rate of the topic going out from this broker (messages/second).</td></tr>
+<tr><td>pulsar_publish_rate_limit_times</td><td>Gauge</td><td>The number of times the publish rate limit is triggered.</td></tr>
 <tr><td>pulsar_throughput_in</td><td>Gauge</td><td>The total throughput of the topic coming into this broker (bytes/second).</td></tr>
 <tr><td>pulsar_throughput_out</td><td>Gauge</td><td>The total throughput of the topic going out from this broker (bytes/second).</td></tr>
 <tr><td>pulsar_storage_size</td><td>Gauge</td><td>The total storage size of the topics in this topic owned by this broker (bytes).</td></tr>
diff --git a/content/docs/ja/next/reference-metrics/index.html b/content/docs/ja/next/reference-metrics/index.html
index 062b13a..7e2231c 100644
--- a/content/docs/ja/next/reference-metrics/index.html
+++ b/content/docs/ja/next/reference-metrics/index.html
@@ -202,9 +202,10 @@
 <tr><th>Name</th><th>Type</th><th>Description</th></tr>
 </thead>
 <tbody>
-<tr><td>bookkeeper_server_BOOKIE_QUARANTINE_count</td><td>Counter</td><td>The number of bookie clients to be quarantined.</td></tr>
+<tr><td>pulsar_managedLedger_client_bookkeeper_client_BOOKIE_QUARANTINE</td><td>Counter</td><td>The number of bookie clients to be quarantined.</td></tr>
 </tbody>
 </table>
+<p>If you want to expose this metric, set <code>bookkeeperClientExposeStatsToPrometheus</code> to <code>true</code> in the <code>broker.conf</code> file. |</p>
 <h3><a class="anchor" aria-hidden="true" id="namespace-metrics"></a><a href="#namespace-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- [...]
 <blockquote>
 <p>Namespace metrics are only exposed when <code>exposeTopicLevelMetricsInPrometheus</code> is set to <code>false</code>.</p>
@@ -302,6 +303,7 @@ Available thresholds:</p>
 <tr><td>pulsar_consumers_count</td><td>Gauge</td><td>The number of active consumers of the topic connected to this broker.</td></tr>
 <tr><td>pulsar_rate_in</td><td>Gauge</td><td>The total message rate of the topic coming into this broker (messages/second).</td></tr>
 <tr><td>pulsar_rate_out</td><td>Gauge</td><td>The total message rate of the topic going out from this broker (messages/second).</td></tr>
+<tr><td>pulsar_publish_rate_limit_times</td><td>Gauge</td><td>The number of times the publish rate limit is triggered.</td></tr>
 <tr><td>pulsar_throughput_in</td><td>Gauge</td><td>The total throughput of the topic coming into this broker (bytes/second).</td></tr>
 <tr><td>pulsar_throughput_out</td><td>Gauge</td><td>The total throughput of the topic going out from this broker (bytes/second).</td></tr>
 <tr><td>pulsar_storage_size</td><td>Gauge</td><td>The total storage size of the topics in this topic owned by this broker (bytes).</td></tr>
diff --git a/content/docs/ja/next/schema-evolution-compatibility.html b/content/docs/ja/next/schema-evolution-compatibility.html
index 1cea5c6..34eec98 100644
--- a/content/docs/ja/next/schema-evolution-compatibility.html
+++ b/content/docs/ja/next/schema-evolution-compatibility.html
@@ -428,7 +428,7 @@
 <p>In some data formats, for example, Avro, you can define fields with default values. Consequently, adding or removing a field with a default value is a fully compatible change.</p>
 <blockquote>
 <p><strong>Tip</strong></p>
-<p>You can set schema compatibility check strategy at namespace or broker level. For how to set the strategy, see <a href="/docs/ja/next/schema-manage/#set-schema-compatibility-check-strategy">here</a>.</p>
+<p>You can set schema compatibility check strategy at the topic, namespace or broker level. For how to set the strategy, see <a href="/docs/ja/next/schema-manage/#set-schema-compatibility-check-strategy">here</a>.</p>
 </blockquote>
 <h2><a class="anchor" aria-hidden="true" id="schema-verification"></a><a href="#schema-verification" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
 <p>When a producer or a consumer tries to connect to a topic, a broker performs some checks to verify a schema.</p>
diff --git a/content/docs/ja/next/schema-evolution-compatibility/index.html b/content/docs/ja/next/schema-evolution-compatibility/index.html
index 1cea5c6..34eec98 100644
--- a/content/docs/ja/next/schema-evolution-compatibility/index.html
+++ b/content/docs/ja/next/schema-evolution-compatibility/index.html
@@ -428,7 +428,7 @@
 <p>In some data formats, for example, Avro, you can define fields with default values. Consequently, adding or removing a field with a default value is a fully compatible change.</p>
 <blockquote>
 <p><strong>Tip</strong></p>
-<p>You can set schema compatibility check strategy at namespace or broker level. For how to set the strategy, see <a href="/docs/ja/next/schema-manage/#set-schema-compatibility-check-strategy">here</a>.</p>
+<p>You can set schema compatibility check strategy at the topic, namespace or broker level. For how to set the strategy, see <a href="/docs/ja/next/schema-manage/#set-schema-compatibility-check-strategy">here</a>.</p>
 </blockquote>
 <h2><a class="anchor" aria-hidden="true" id="schema-verification"></a><a href="#schema-verification" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
 <p>When a producer or a consumer tries to connect to a topic, a broker performs some checks to verify a schema.</p>
diff --git a/content/docs/ja/next/security-overview.html b/content/docs/ja/next/security-overview.html
index 82a3e3a..543a2bb 100644
--- a/content/docs/ja/next/security-overview.html
+++ b/content/docs/ja/next/security-overview.html
@@ -91,7 +91,7 @@
 <li><a href="/docs/ja/next/security-kerberos">Kerberos</a></li>
 <li><a href="/docs/ja/next/security-jwt">JSON Web Token Authentication</a></li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ja/next/administration-isolation"><span class="arrow-prev">← </span><span>Pulsar isolation</span></a><a class="docs-next button" href="/docs/ja/next/security-policy-and-supported-versions"><span>Next</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#role-tokens">Role tokens</a></li><li><a href="#authentication-providers" [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ja/next/administration-isolation"><span class="arrow-prev">← </span><span>Pulsar isolation</span></a><a class="docs-next button" href="/docs/ja/next/security-policy-and-supported-versions"><span>Security Policy and Supported Versions</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#role-tokens">Role tokens</a></li><li>< [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/ja/next/security-overview/index.html b/content/docs/ja/next/security-overview/index.html
index 82a3e3a..543a2bb 100644
--- a/content/docs/ja/next/security-overview/index.html
+++ b/content/docs/ja/next/security-overview/index.html
@@ -91,7 +91,7 @@
 <li><a href="/docs/ja/next/security-kerberos">Kerberos</a></li>
 <li><a href="/docs/ja/next/security-jwt">JSON Web Token Authentication</a></li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ja/next/administration-isolation"><span class="arrow-prev">← </span><span>Pulsar isolation</span></a><a class="docs-next button" href="/docs/ja/next/security-policy-and-supported-versions"><span>Next</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#role-tokens">Role tokens</a></li><li><a href="#authentication-providers" [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ja/next/administration-isolation"><span class="arrow-prev">← </span><span>Pulsar isolation</span></a><a class="docs-next button" href="/docs/ja/next/security-policy-and-supported-versions"><span>Security Policy and Supported Versions</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#role-tokens">Role tokens</a></li><li>< [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/ja/next/security-tls-keystore.html b/content/docs/ja/next/security-tls-keystore.html
index bba4e9a..5d947fb 100644
--- a/content/docs/ja/next/security-tls-keystore.html
+++ b/content/docs/ja/next/security-tls-keystore.html
@@ -160,48 +160,41 @@ brokerClientTlsTrustStorePassword= // <span class="hljs-keyword">Set</span> this
 <li>tlsCiphers=[TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256], A cipher suite is a named combination of authentication, encryption, MAC and key exchange algorithm used to negotiate the security settings for a network connection using TLS network protocol. By default, it is null. <a href="https://www.openssl.org/docs/man1.0.2/apps/ciphers.html">OpenSSL Ciphers</a> <a href="http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#ciphersuites">JDK Ciphers</a></li>
 <li>tlsProtocols=[TLSv1.3,TLSv1.2] (list out the TLS protocols that you are going to accept from clients). By default, it is not set.</li>
 </ol>
-<pre><code class="hljs"><span class="hljs-comment">### Configuring Clients</span>
-
-This is similar <span class="hljs-keyword">to</span> [TLS encryption configuing <span class="hljs-keyword">for</span><span class="hljs-built_in"> client </span>with PEM type](security-tls-transport.md#Client configuration).
-<span class="hljs-keyword">For</span> a a minimal configuration,<span class="hljs-built_in"> user </span>need <span class="hljs-keyword">to</span> provide the TrustStore information.
-
-e.g. 
-1. <span class="hljs-keyword">for</span> [Command-line tools](reference-cli-tools.md) like [`pulsar-admin`](reference-cli-tools#pulsar-admin), [`pulsar-perf`](reference-cli-tools#pulsar-perf), <span class="hljs-keyword">and</span> [`pulsar-client`](reference-cli-tools#pulsar-client) use the `conf/client.conf`<span class="hljs-built_in"> config </span>file <span class="hljs-keyword">in</span> a Pulsar installation.
-
-    ```properties
-    <span class="hljs-attribute">webServiceUrl</span>=https://broker.example.com:8443/
-    <span class="hljs-attribute">brokerServiceUrl</span>=pulsar+ssl://broker.example.com:6651/
-    <span class="hljs-attribute">useKeyStoreTls</span>=<span class="hljs-literal">true</span>
-    <span class="hljs-attribute">tlsTrustStoreType</span>=JKS
-    <span class="hljs-attribute">tlsTrustStorePath</span>=/var/private/tls/client.truststore.jks
-    <span class="hljs-attribute">tlsTrustStorePassword</span>=clientpw
-    ```
-
-1. <span class="hljs-keyword">for</span> java<span class="hljs-built_in"> client
-</span>    ```java
-    import org.apache.pulsar.client.api.PulsarClient;
-
-    PulsarClient<span class="hljs-built_in"> client </span>= PulsarClient.builder()
-        .serviceUrl(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>)
-        .enableTls(<span class="hljs-literal">true</span>)
-        .useKeyStoreTls(<span class="hljs-literal">true</span>)
-        .tlsTrustStorePath(<span class="hljs-string">"/var/private/tls/client.truststore.jks"</span>)
-        .tlsTrustStorePassword(<span class="hljs-string">"clientpw"</span>)
-        .allowTlsInsecureConnection(<span class="hljs-literal">false</span>)
-        .build();
-    ```
+<h3><a class="anchor" aria-hidden="true" id="configuring-clients"></a><a href="#configuring-clients" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
+<p>This is similar to [TLS encryption configuing for client with PEM type](/docs/ja/next/security-tls-transport#Client configuration). For a a minimal configuration, user need to provide the TrustStore information.</p>
+<p>e.g.</p>
+<ol>
+<li><p>for <a href="/docs/ja/next/reference-cli-tools">Command-line tools</a> like <a href="reference-cli-tools#pulsar-admin"><code>pulsar-admin</code></a>, <a href="reference-cli-tools#pulsar-perf"><code>pulsar-perf</code></a>, and <a href="reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> use the <code>conf/client.conf</code> config file in a Pulsar installation.</p>
+<pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">https://broker.example.com:8443/</span>
+<span class="hljs-attr">brokerServiceUrl</span>=<span class="hljs-string">pulsar+ssl://broker.example.com:6651/</span>
+<span class="hljs-attr">useKeyStoreTls</span>=<span class="hljs-string">true</span>
+<span class="hljs-attr">tlsTrustStoreType</span>=<span class="hljs-string">JKS</span>
+<span class="hljs-attr">tlsTrustStorePath</span>=<span class="hljs-string">/var/private/tls/client.truststore.jks</span>
+<span class="hljs-attr">tlsTrustStorePassword</span>=<span class="hljs-string">clientpw</span>
+</code></pre></li>
+<li><p>for java client</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 
-1. <span class="hljs-keyword">for</span> java admin<span class="hljs-built_in"> client
-</span>```java
-    PulsarAdmin amdin = PulsarAdmin.builder().serviceHttpUrl(<span class="hljs-string">"https://broker.example.com:8443"</span>)
-                .useKeyStoreTls(<span class="hljs-literal">true</span>)
+PulsarClient client = PulsarClient.builder()
+    .serviceUrl(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>)
+    .enableTls(<span class="hljs-keyword">true</span>)
+    .useKeyStoreTls(<span class="hljs-keyword">true</span>)
+    .tlsTrustStorePath(<span class="hljs-string">"/var/private/tls/client.truststore.jks"</span>)
+    .tlsTrustStorePassword(<span class="hljs-string">"clientpw"</span>)
+    .allowTlsInsecureConnection(<span class="hljs-keyword">false</span>)
+    .build();
+</code></pre></li>
+<li><p>for java admin client</p></li>
+</ol>
+<pre><code class="hljs css language-java">    PulsarAdmin amdin = PulsarAdmin.builder().serviceHttpUrl(<span class="hljs-string">"https://broker.example.com:8443"</span>)
+                .useKeyStoreTls(<span class="hljs-keyword">true</span>)
                 .tlsTrustStorePath(<span class="hljs-string">"/var/private/tls/client.truststore.jks"</span>)
                 .tlsTrustStorePassword(<span class="hljs-string">"clientpw"</span>)
-                .allowTlsInsecureConnection(<span class="hljs-literal">false</span>)
+                .allowTlsInsecureConnection(<span class="hljs-keyword">false</span>)
                 .build();
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="tls-authentication-with-keystore-configure"></a><a href="#tls-authentication-with-keystore-configure" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c [...]
-<p>This similar to <a href="security-tls-authentication.md">TLS authentication with PEM type</a></p>
+<p>This similar to <a href="/docs/ja/next/security-tls-authentication">TLS authentication with PEM type</a></p>
 <h3><a class="anchor" aria-hidden="true" id="broker-authentication-config"></a><a href="#broker-authentication-config" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
 <p><code>broker.conf</code></p>
 <pre><code class="hljs css language-properties"><span class="hljs-comment"># Configuration to enable authentication</span>
@@ -241,7 +234,7 @@ e.g.
 <p>Besides the TLS encryption configuring. The main work is configuring the KeyStore, which contains a valid CN as client role, for client.</p>
 <p>e.g.</p>
 <ol>
-<li><p>for <a href="reference-cli-tools.md">Command-line tools</a> like <a href="reference-cli-tools#pulsar-admin"><code>pulsar-admin</code></a>, <a href="reference-cli-tools#pulsar-perf"><code>pulsar-perf</code></a>, and <a href="reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> use the <code>conf/client.conf</code> config file in a Pulsar installation.</p>
+<li><p>for <a href="/docs/ja/next/reference-cli-tools">Command-line tools</a> like <a href="reference-cli-tools#pulsar-admin"><code>pulsar-admin</code></a>, <a href="reference-cli-tools#pulsar-perf"><code>pulsar-perf</code></a>, and <a href="reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> use the <code>conf/client.conf</code> config file in a Pulsar installation.</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">https://broker.example.com:8443/</span>
 <span class="hljs-attr">brokerServiceUrl</span>=<span class="hljs-string">pulsar+ssl://broker.example.com:6651/</span>
 <span class="hljs-attr">useKeyStoreTls</span>=<span class="hljs-string">true</span>
@@ -283,7 +276,7 @@ PulsarClient client = PulsarClient.builder()
 <pre><code class="hljs css language-shell">-Djavax.net.debug=all
 </code></pre>
 <p>You can find more details on this in <a href="http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/ReadDebug.html">Oracle documentation</a> on <a href="http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/ReadDebug.html">debugging SSL/TLS connections</a>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ja/next/security-tls-authentication"><span class="arrow-prev">← </span><span>Authentication using TLS</span></a><a class="docs-next button" href="/docs/ja/next/security-jwt"><span>Authentication using JWT</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="#tls-encryption-with-keystore-configure [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ja/next/security-tls-authentication"><span class="arrow-prev">← </span><span>Authentication using TLS</span></a><a class="docs-next button" href="/docs/ja/next/security-jwt"><span>Authentication using JWT</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="#tls-encryption-with-keystore-configure [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/ja/next/security-tls-keystore/index.html b/content/docs/ja/next/security-tls-keystore/index.html
index bba4e9a..5d947fb 100644
--- a/content/docs/ja/next/security-tls-keystore/index.html
+++ b/content/docs/ja/next/security-tls-keystore/index.html
@@ -160,48 +160,41 @@ brokerClientTlsTrustStorePassword= // <span class="hljs-keyword">Set</span> this
 <li>tlsCiphers=[TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256], A cipher suite is a named combination of authentication, encryption, MAC and key exchange algorithm used to negotiate the security settings for a network connection using TLS network protocol. By default, it is null. <a href="https://www.openssl.org/docs/man1.0.2/apps/ciphers.html">OpenSSL Ciphers</a> <a href="http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#ciphersuites">JDK Ciphers</a></li>
 <li>tlsProtocols=[TLSv1.3,TLSv1.2] (list out the TLS protocols that you are going to accept from clients). By default, it is not set.</li>
 </ol>
-<pre><code class="hljs"><span class="hljs-comment">### Configuring Clients</span>
-
-This is similar <span class="hljs-keyword">to</span> [TLS encryption configuing <span class="hljs-keyword">for</span><span class="hljs-built_in"> client </span>with PEM type](security-tls-transport.md#Client configuration).
-<span class="hljs-keyword">For</span> a a minimal configuration,<span class="hljs-built_in"> user </span>need <span class="hljs-keyword">to</span> provide the TrustStore information.
-
-e.g. 
-1. <span class="hljs-keyword">for</span> [Command-line tools](reference-cli-tools.md) like [`pulsar-admin`](reference-cli-tools#pulsar-admin), [`pulsar-perf`](reference-cli-tools#pulsar-perf), <span class="hljs-keyword">and</span> [`pulsar-client`](reference-cli-tools#pulsar-client) use the `conf/client.conf`<span class="hljs-built_in"> config </span>file <span class="hljs-keyword">in</span> a Pulsar installation.
-
-    ```properties
-    <span class="hljs-attribute">webServiceUrl</span>=https://broker.example.com:8443/
-    <span class="hljs-attribute">brokerServiceUrl</span>=pulsar+ssl://broker.example.com:6651/
-    <span class="hljs-attribute">useKeyStoreTls</span>=<span class="hljs-literal">true</span>
-    <span class="hljs-attribute">tlsTrustStoreType</span>=JKS
-    <span class="hljs-attribute">tlsTrustStorePath</span>=/var/private/tls/client.truststore.jks
-    <span class="hljs-attribute">tlsTrustStorePassword</span>=clientpw
-    ```
-
-1. <span class="hljs-keyword">for</span> java<span class="hljs-built_in"> client
-</span>    ```java
-    import org.apache.pulsar.client.api.PulsarClient;
-
-    PulsarClient<span class="hljs-built_in"> client </span>= PulsarClient.builder()
-        .serviceUrl(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>)
-        .enableTls(<span class="hljs-literal">true</span>)
-        .useKeyStoreTls(<span class="hljs-literal">true</span>)
-        .tlsTrustStorePath(<span class="hljs-string">"/var/private/tls/client.truststore.jks"</span>)
-        .tlsTrustStorePassword(<span class="hljs-string">"clientpw"</span>)
-        .allowTlsInsecureConnection(<span class="hljs-literal">false</span>)
-        .build();
-    ```
+<h3><a class="anchor" aria-hidden="true" id="configuring-clients"></a><a href="#configuring-clients" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
+<p>This is similar to [TLS encryption configuing for client with PEM type](/docs/ja/next/security-tls-transport#Client configuration). For a a minimal configuration, user need to provide the TrustStore information.</p>
+<p>e.g.</p>
+<ol>
+<li><p>for <a href="/docs/ja/next/reference-cli-tools">Command-line tools</a> like <a href="reference-cli-tools#pulsar-admin"><code>pulsar-admin</code></a>, <a href="reference-cli-tools#pulsar-perf"><code>pulsar-perf</code></a>, and <a href="reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> use the <code>conf/client.conf</code> config file in a Pulsar installation.</p>
+<pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">https://broker.example.com:8443/</span>
+<span class="hljs-attr">brokerServiceUrl</span>=<span class="hljs-string">pulsar+ssl://broker.example.com:6651/</span>
+<span class="hljs-attr">useKeyStoreTls</span>=<span class="hljs-string">true</span>
+<span class="hljs-attr">tlsTrustStoreType</span>=<span class="hljs-string">JKS</span>
+<span class="hljs-attr">tlsTrustStorePath</span>=<span class="hljs-string">/var/private/tls/client.truststore.jks</span>
+<span class="hljs-attr">tlsTrustStorePassword</span>=<span class="hljs-string">clientpw</span>
+</code></pre></li>
+<li><p>for java client</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 
-1. <span class="hljs-keyword">for</span> java admin<span class="hljs-built_in"> client
-</span>```java
-    PulsarAdmin amdin = PulsarAdmin.builder().serviceHttpUrl(<span class="hljs-string">"https://broker.example.com:8443"</span>)
-                .useKeyStoreTls(<span class="hljs-literal">true</span>)
+PulsarClient client = PulsarClient.builder()
+    .serviceUrl(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>)
+    .enableTls(<span class="hljs-keyword">true</span>)
+    .useKeyStoreTls(<span class="hljs-keyword">true</span>)
+    .tlsTrustStorePath(<span class="hljs-string">"/var/private/tls/client.truststore.jks"</span>)
+    .tlsTrustStorePassword(<span class="hljs-string">"clientpw"</span>)
+    .allowTlsInsecureConnection(<span class="hljs-keyword">false</span>)
+    .build();
+</code></pre></li>
+<li><p>for java admin client</p></li>
+</ol>
+<pre><code class="hljs css language-java">    PulsarAdmin amdin = PulsarAdmin.builder().serviceHttpUrl(<span class="hljs-string">"https://broker.example.com:8443"</span>)
+                .useKeyStoreTls(<span class="hljs-keyword">true</span>)
                 .tlsTrustStorePath(<span class="hljs-string">"/var/private/tls/client.truststore.jks"</span>)
                 .tlsTrustStorePassword(<span class="hljs-string">"clientpw"</span>)
-                .allowTlsInsecureConnection(<span class="hljs-literal">false</span>)
+                .allowTlsInsecureConnection(<span class="hljs-keyword">false</span>)
                 .build();
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="tls-authentication-with-keystore-configure"></a><a href="#tls-authentication-with-keystore-configure" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c [...]
-<p>This similar to <a href="security-tls-authentication.md">TLS authentication with PEM type</a></p>
+<p>This similar to <a href="/docs/ja/next/security-tls-authentication">TLS authentication with PEM type</a></p>
 <h3><a class="anchor" aria-hidden="true" id="broker-authentication-config"></a><a href="#broker-authentication-config" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
 <p><code>broker.conf</code></p>
 <pre><code class="hljs css language-properties"><span class="hljs-comment"># Configuration to enable authentication</span>
@@ -241,7 +234,7 @@ e.g.
 <p>Besides the TLS encryption configuring. The main work is configuring the KeyStore, which contains a valid CN as client role, for client.</p>
 <p>e.g.</p>
 <ol>
-<li><p>for <a href="reference-cli-tools.md">Command-line tools</a> like <a href="reference-cli-tools#pulsar-admin"><code>pulsar-admin</code></a>, <a href="reference-cli-tools#pulsar-perf"><code>pulsar-perf</code></a>, and <a href="reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> use the <code>conf/client.conf</code> config file in a Pulsar installation.</p>
+<li><p>for <a href="/docs/ja/next/reference-cli-tools">Command-line tools</a> like <a href="reference-cli-tools#pulsar-admin"><code>pulsar-admin</code></a>, <a href="reference-cli-tools#pulsar-perf"><code>pulsar-perf</code></a>, and <a href="reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> use the <code>conf/client.conf</code> config file in a Pulsar installation.</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">https://broker.example.com:8443/</span>
 <span class="hljs-attr">brokerServiceUrl</span>=<span class="hljs-string">pulsar+ssl://broker.example.com:6651/</span>
 <span class="hljs-attr">useKeyStoreTls</span>=<span class="hljs-string">true</span>
@@ -283,7 +276,7 @@ PulsarClient client = PulsarClient.builder()
 <pre><code class="hljs css language-shell">-Djavax.net.debug=all
 </code></pre>
 <p>You can find more details on this in <a href="http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/ReadDebug.html">Oracle documentation</a> on <a href="http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/ReadDebug.html">debugging SSL/TLS connections</a>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ja/next/security-tls-authentication"><span class="arrow-prev">← </span><span>Authentication using TLS</span></a><a class="docs-next button" href="/docs/ja/next/security-jwt"><span>Authentication using JWT</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="#tls-encryption-with-keystore-configure [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ja/next/security-tls-authentication"><span class="arrow-prev">← </span><span>Authentication using TLS</span></a><a class="docs-next button" href="/docs/ja/next/security-jwt"><span>Authentication using JWT</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="#tls-encryption-with-keystore-configure [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/ja/next/security-tls-transport.html b/content/docs/ja/next/security-tls-transport.html
index b2423c4..2b3b07f 100644
--- a/content/docs/ja/next/security-tls-transport.html
+++ b/content/docs/ja/next/security-tls-transport.html
@@ -251,7 +251,7 @@ var client = PulsarClient.Builder()
                          .VerifyCertificateAuthority(true) //Default is 'true'
                          .VerifyCertificateName(false)     //Default is 'false'
                          .Build();</code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ja/next/security-policy-and-supported-versions"><span class="arrow-prev">← </span><span>Previous</span></a><a class="docs-next button" href="/docs/ja/next/security-tls-authentication"><span>Authentication using TLS</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#tls-overview">TLS overview</a></li><li><a href="#tls-conc [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ja/next/security-policy-and-supported-versions"><span class="arrow-prev">← </span><span>Security Policy and Supported Versions</span></a><a class="docs-next button" href="/docs/ja/next/security-tls-authentication"><span>Authentication using TLS</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#tls-overview">TLS overview< [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/ja/next/security-tls-transport/index.html b/content/docs/ja/next/security-tls-transport/index.html
index b2423c4..2b3b07f 100644
--- a/content/docs/ja/next/security-tls-transport/index.html
+++ b/content/docs/ja/next/security-tls-transport/index.html
@@ -251,7 +251,7 @@ var client = PulsarClient.Builder()
                          .VerifyCertificateAuthority(true) //Default is 'true'
                          .VerifyCertificateName(false)     //Default is 'false'
                          .Build();</code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ja/next/security-policy-and-supported-versions"><span class="arrow-prev">← </span><span>Previous</span></a><a class="docs-next button" href="/docs/ja/next/security-tls-authentication"><span>Authentication using TLS</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#tls-overview">TLS overview</a></li><li><a href="#tls-conc [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ja/next/security-policy-and-supported-versions"><span class="arrow-prev">← </span><span>Security Policy and Supported Versions</span></a><a class="docs-next button" href="/docs/ja/next/security-tls-authentication"><span>Authentication using TLS</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#tls-overview">TLS overview< [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/ja/next/standalone.html b/content/docs/ja/next/standalone.html
index b3339ce..cb1e4a0 100644
--- a/content/docs/ja/next/standalone.html
+++ b/content/docs/ja/next/standalone.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="ja"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>ローカルでスタンドアロンのPulsarを設定する · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="ローカル開発とテストのために、マシン上でPulsar をスタンドアロンモードで 実行できます。 スタンドアロンモードには Pulsar brokerに加え、必要となる ZooKeeper と BookKeeper といったコンポーネントが含まれており、これらは単一の Java Virtual Machine (JVM) プロセス内で動作します。 [...]
+<!DOCTYPE html><html lang="ja"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>ローカルでスタンドアロンのPulsarを設定する · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="ローカル開発とテストのために、マシン上でPulsar をスタンドアロンモードで 実行できます。 The standalone mode includes a Pulsar broker, the necessary [RocksDB](http://rocksdb.org/) and BookKeeper components running  [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,7 +74,7 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ja" target="_blank" rel="noreferrer noopener">Translate</a><h1 id="__docusaurus" class="postHeaderTitle">ローカルでスタンドアロンのPulsarを設定する</h1></header><article><div><span><p>ローカル開発とテストのために、マシン上でPulsar をスタンドアロンモードで 実行できます。 スタンドアロンモードには Pulsar brokerに加え、必要となる ZooKeeper と Boo [...]
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ja" target="_blank" rel="noreferrer noopener">Translate</a><h1 id="__docusaurus" class="postHeaderTitle">ローカルでスタンドアロンのPulsarを設定する</h1></header><article><div><span><p>ローカル開発とテストのために、マシン上でPulsar をスタンドアロンモードで 実行できます。 The standalone mode includes a Pulsar broker, the n [...]
 <blockquote>
 <p><strong>本番でのPulsarはどうする?</strong>  <br>
 もしプロダクション環境向けの完全なインストールガイドをお探しの場合は、<a href="/docs/ja/next/deploy-bare-metal">Pulsar インスタンスのデプロイ</a>を参照してください。</p>
@@ -111,7 +111,8 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.9.1
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>bin</code></td><td style="text-align:left">Pulsar のコマンドラインツール <a href="/docs/ja/next/reference-cli-tools#pulsar"><code>pulsar</code></a> や <a href="https://pulsar.apache.org/tools/pulsar-admin/"><code>pulsar-admin</code></a> など。</td></tr>
-<tr><td style="text-align:left"><code>conf</code></td><td style="text-align:left"><a href="/docs/ja/next/reference-configuration#broker">Broker設定</a>、 <a href="/docs/ja/next/reference-configuration#zookeeper">ZooKeeper 設定</a>、その他を含む Pulsar の設定ファイル。</td></tr>
+<tr><td style="text-align:left"><code>conf</code></td><td style="text-align:left">Configuration files for Pulsar, including <a href="/docs/ja/next/reference-configuration#broker">broker configuration</a> and more.</td></tr>
+<tr><td style="text-align:left"><strong>Note:</strong> Pulsar standalone uses RocksDB as the local metadata store and its configuration file path <a href="/docs/ja/next/reference-configuration"><code>metadataStoreConfigPath</code></a> is configurable in the <code>standalone.conf</code> file. For more information about the configurations of RocksDB, see <a href="https://github.com/facebook/rocksdb/blob/main/examples/rocksdb_option_file_example.ini">here</a> and related <a href="https://gi [...]
 <tr><td style="text-align:left"><code>examples</code></td><td style="text-align:left"><a href="/docs/ja/next/functions-overview">Pulsar 関数</a> の例を含むJava JARファイル。</td></tr>
 <tr><td style="text-align:left"><code>instances</code></td><td style="text-align:left">Artifacts created for <a href="/docs/ja/next/functions-overview">Pulsar Functions</a>.</td></tr>
 <tr><td style="text-align:left"><code>lib</code></td><td style="text-align:left">The <a href="https://en.wikipedia.org/wiki/JAR_(file_format)">JAR</a> files used by Pulsar.</td></tr>
@@ -124,7 +125,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.9.1
 <tr><th style="text-align:left">ディレクトリ</th><th style="text-align:left">内容</th></tr>
 </thead>
 <tbody>
-<tr><td style="text-align:left"><code>data</code></td><td style="text-align:left">The data storage directory used by ZooKeeper and BookKeeper.</td></tr>
+<tr><td style="text-align:left"><code>data</code></td><td style="text-align:left">The data storage directory used by RocksDB and BookKeeper.</td></tr>
 <tr><td style="text-align:left"><code>logs</code></td><td style="text-align:left">Logs created by the installation.</td></tr>
 </tbody>
 </table>
diff --git a/content/docs/ja/next/standalone/index.html b/content/docs/ja/next/standalone/index.html
index b3339ce..cb1e4a0 100644
--- a/content/docs/ja/next/standalone/index.html
+++ b/content/docs/ja/next/standalone/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="ja"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>ローカルでスタンドアロンのPulsarを設定する · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="ローカル開発とテストのために、マシン上でPulsar をスタンドアロンモードで 実行できます。 スタンドアロンモードには Pulsar brokerに加え、必要となる ZooKeeper と BookKeeper といったコンポーネントが含まれており、これらは単一の Java Virtual Machine (JVM) プロセス内で動作します。 [...]
+<!DOCTYPE html><html lang="ja"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>ローカルでスタンドアロンのPulsarを設定する · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="ローカル開発とテストのために、マシン上でPulsar をスタンドアロンモードで 実行できます。 The standalone mode includes a Pulsar broker, the necessary [RocksDB](http://rocksdb.org/) and BookKeeper components running  [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,7 +74,7 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ja" target="_blank" rel="noreferrer noopener">Translate</a><h1 id="__docusaurus" class="postHeaderTitle">ローカルでスタンドアロンのPulsarを設定する</h1></header><article><div><span><p>ローカル開発とテストのために、マシン上でPulsar をスタンドアロンモードで 実行できます。 スタンドアロンモードには Pulsar brokerに加え、必要となる ZooKeeper と Boo [...]
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ja" target="_blank" rel="noreferrer noopener">Translate</a><h1 id="__docusaurus" class="postHeaderTitle">ローカルでスタンドアロンのPulsarを設定する</h1></header><article><div><span><p>ローカル開発とテストのために、マシン上でPulsar をスタンドアロンモードで 実行できます。 The standalone mode includes a Pulsar broker, the n [...]
 <blockquote>
 <p><strong>本番でのPulsarはどうする?</strong>  <br>
 もしプロダクション環境向けの完全なインストールガイドをお探しの場合は、<a href="/docs/ja/next/deploy-bare-metal">Pulsar インスタンスのデプロイ</a>を参照してください。</p>
@@ -111,7 +111,8 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.9.1
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>bin</code></td><td style="text-align:left">Pulsar のコマンドラインツール <a href="/docs/ja/next/reference-cli-tools#pulsar"><code>pulsar</code></a> や <a href="https://pulsar.apache.org/tools/pulsar-admin/"><code>pulsar-admin</code></a> など。</td></tr>
-<tr><td style="text-align:left"><code>conf</code></td><td style="text-align:left"><a href="/docs/ja/next/reference-configuration#broker">Broker設定</a>、 <a href="/docs/ja/next/reference-configuration#zookeeper">ZooKeeper 設定</a>、その他を含む Pulsar の設定ファイル。</td></tr>
+<tr><td style="text-align:left"><code>conf</code></td><td style="text-align:left">Configuration files for Pulsar, including <a href="/docs/ja/next/reference-configuration#broker">broker configuration</a> and more.</td></tr>
+<tr><td style="text-align:left"><strong>Note:</strong> Pulsar standalone uses RocksDB as the local metadata store and its configuration file path <a href="/docs/ja/next/reference-configuration"><code>metadataStoreConfigPath</code></a> is configurable in the <code>standalone.conf</code> file. For more information about the configurations of RocksDB, see <a href="https://github.com/facebook/rocksdb/blob/main/examples/rocksdb_option_file_example.ini">here</a> and related <a href="https://gi [...]
 <tr><td style="text-align:left"><code>examples</code></td><td style="text-align:left"><a href="/docs/ja/next/functions-overview">Pulsar 関数</a> の例を含むJava JARファイル。</td></tr>
 <tr><td style="text-align:left"><code>instances</code></td><td style="text-align:left">Artifacts created for <a href="/docs/ja/next/functions-overview">Pulsar Functions</a>.</td></tr>
 <tr><td style="text-align:left"><code>lib</code></td><td style="text-align:left">The <a href="https://en.wikipedia.org/wiki/JAR_(file_format)">JAR</a> files used by Pulsar.</td></tr>
@@ -124,7 +125,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.9.1
 <tr><th style="text-align:left">ディレクトリ</th><th style="text-align:left">内容</th></tr>
 </thead>
 <tbody>
-<tr><td style="text-align:left"><code>data</code></td><td style="text-align:left">The data storage directory used by ZooKeeper and BookKeeper.</td></tr>
+<tr><td style="text-align:left"><code>data</code></td><td style="text-align:left">The data storage directory used by RocksDB and BookKeeper.</td></tr>
 <tr><td style="text-align:left"><code>logs</code></td><td style="text-align:left">Logs created by the installation.</td></tr>
 </tbody>
 </table>
diff --git a/content/docs/ja/next/tiered-storage-azure.html b/content/docs/ja/next/tiered-storage-azure.html
index e09a2da..a21e85c 100644
--- a/content/docs/ja/next/tiered-storage-azure.html
+++ b/content/docs/ja/next/tiered-storage-azure.html
@@ -193,27 +193,21 @@ ls offloaders
 </code></pre>
 <p><strong>Output</strong></p>
 <pre><code class="hljs"><span class="hljs-attribute">Offload was a success</span>
-</code></pre></li>
-</ul>
-<pre><code class="hljs">If there is an error in offloading, the error is propagated to the `pulsar-admin topics offload-status` command.
-
-```bash
-bin/pulsar-admin topics offload-status persistent://my-tenant/my-namespace/topic1
-```
-
-**Output**
-
-```
-Error in offload
+</code></pre>
+<p>If there is an error in offloading, the error is propagated to the <code>pulsar-admin topics offload-status</code> command.</p>
+<pre><code class="hljs css language-bash">bin/pulsar-admin topics offload-status persistent://my-tenant/my-namespace/topic1
+</code></pre>
+<p><strong>Output</strong></p>
+<pre><code class="hljs"><span class="hljs-keyword">Error </span>in offload
 null
 
 Reason: Error offloading: org.apache.bookkeeper.mledger.ManagedLedgerException: 
-```
-
-&gt; #### Tip
-&gt; 
-&gt; For more information about the `pulsar-admin topics offload-status options` command, including flags, descriptions, and default values, see [here](https://pulsar.apache.org/tools/pulsar-admin/2.6.0-SNAPSHOT/#-em-offload-status-em-). 
 </code></pre>
+<blockquote>
+<h4><a class="anchor" aria-hidden="true" id="tip-2"></a><a href="#tip-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
+<p>For more information about the <code>pulsar-admin topics offload-status options</code> command, including flags, descriptions, and default values, see <a href="https://pulsar.apache.org/tools/pulsar-admin/2.6.0-SNAPSHOT/#-em-offload-status-em-">here</a>.</p>
+</blockquote></li>
+</ul>
 </span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ja/next/tiered-storage-filesystem"><span class="arrow-prev">← </span><span>Filesystem offloader</span></a><a class="docs-next button" href="/docs/ja/next/tiered-storage-aliyun"><span>Aliyun OSS offloader</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href=" [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
diff --git a/content/docs/ja/next/tiered-storage-azure/index.html b/content/docs/ja/next/tiered-storage-azure/index.html
index e09a2da..a21e85c 100644
--- a/content/docs/ja/next/tiered-storage-azure/index.html
+++ b/content/docs/ja/next/tiered-storage-azure/index.html
@@ -193,27 +193,21 @@ ls offloaders
 </code></pre>
 <p><strong>Output</strong></p>
 <pre><code class="hljs"><span class="hljs-attribute">Offload was a success</span>
-</code></pre></li>
-</ul>
-<pre><code class="hljs">If there is an error in offloading, the error is propagated to the `pulsar-admin topics offload-status` command.
-
-```bash
-bin/pulsar-admin topics offload-status persistent://my-tenant/my-namespace/topic1
-```
-
-**Output**
-
-```
-Error in offload
+</code></pre>
+<p>If there is an error in offloading, the error is propagated to the <code>pulsar-admin topics offload-status</code> command.</p>
+<pre><code class="hljs css language-bash">bin/pulsar-admin topics offload-status persistent://my-tenant/my-namespace/topic1
+</code></pre>
+<p><strong>Output</strong></p>
+<pre><code class="hljs"><span class="hljs-keyword">Error </span>in offload
 null
 
 Reason: Error offloading: org.apache.bookkeeper.mledger.ManagedLedgerException: 
-```
-
-&gt; #### Tip
-&gt; 
-&gt; For more information about the `pulsar-admin topics offload-status options` command, including flags, descriptions, and default values, see [here](https://pulsar.apache.org/tools/pulsar-admin/2.6.0-SNAPSHOT/#-em-offload-status-em-). 
 </code></pre>
+<blockquote>
+<h4><a class="anchor" aria-hidden="true" id="tip-2"></a><a href="#tip-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
+<p>For more information about the <code>pulsar-admin topics offload-status options</code> command, including flags, descriptions, and default values, see <a href="https://pulsar.apache.org/tools/pulsar-admin/2.6.0-SNAPSHOT/#-em-offload-status-em-">here</a>.</p>
+</blockquote></li>
+</ul>
 </span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ja/next/tiered-storage-filesystem"><span class="arrow-prev">← </span><span>Filesystem offloader</span></a><a class="docs-next button" href="/docs/ja/next/tiered-storage-aliyun"><span>Aliyun OSS offloader</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href=" [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
diff --git a/content/docs/ko/next/admin-api-clusters.html b/content/docs/ko/next/admin-api-clusters.html
index 99d9126..5d2c073 100644
--- a/content/docs/ko/next/admin-api-clusters.html
+++ b/content/docs/ko/next/admin-api-clusters.html
@@ -121,8 +121,8 @@
 <p>Here's an example cluster metadata initialization command:</p>
 <pre><code class="hljs css language-shell">bin/pulsar initialize-cluster-metadata \
   --cluster us-west \
-  --zookeeper zk1.us-west.example.com:2181 \
-  --configuration-store zk1.us-west.example.com:2184 \
+  --metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
+  --configuration-metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
   --web-service-url http://pulsar.us-west.example.com:8080/ \
   --web-service-url-tls https://pulsar.us-west.example.com:8443/ \
   --broker-service-url pulsar://pulsar.us-west.example.com:6650/ \
diff --git a/content/docs/ko/next/admin-api-clusters/index.html b/content/docs/ko/next/admin-api-clusters/index.html
index 99d9126..5d2c073 100644
--- a/content/docs/ko/next/admin-api-clusters/index.html
+++ b/content/docs/ko/next/admin-api-clusters/index.html
@@ -121,8 +121,8 @@
 <p>Here's an example cluster metadata initialization command:</p>
 <pre><code class="hljs css language-shell">bin/pulsar initialize-cluster-metadata \
   --cluster us-west \
-  --zookeeper zk1.us-west.example.com:2181 \
-  --configuration-store zk1.us-west.example.com:2184 \
+  --metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
+  --configuration-metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
   --web-service-url http://pulsar.us-west.example.com:8080/ \
   --web-service-url-tls https://pulsar.us-west.example.com:8443/ \
   --broker-service-url pulsar://pulsar.us-west.example.com:6650/ \
diff --git a/content/docs/ko/next/administration-load-balance.html b/content/docs/ko/next/administration-load-balance.html
index ea7340a..f7310e7 100644
--- a/content/docs/ko/next/administration-load-balance.html
+++ b/content/docs/ko/next/administration-load-balance.html
@@ -156,13 +156,16 @@
 # Prevent the same topics to be shed and moved to other brokers more that once within this timeframe</span>
 <span class="hljs-attr">loadBalancerSheddingGracePeriodMinutes</span>=<span class="hljs-string">30</span>
 </code></pre>
-<p>Pulsar supports three types of shedding strategies:</p>
+<p>Pulsar supports the following types of shedding strategies. From Pulsar 2.10, the <strong>default</strong> shedding strategy is <code>ThresholdShedder</code>.</p>
 <h5><a class="anchor" aria-hidden="true" id="thresholdshedder"></a><a href="#thresholdshedder" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.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>This strategy tends to shed the bundles if any broker's usage is above the configured threshold. It does this by first computing the average resource usage per broker for the whole cluster. The resource usage for each broker is calculated using the following method: LocalBrokerData#getMaxResourceUsageWithWeight). The weights for each resource are configurable. Historical observations are included in the running average based on the broker's setting for loadBalancerHistoryResourcePerce [...]
+<p>This strategy tends to shed the bundles if any broker's usage is above the configured threshold. It does this by first computing the average resource usage per broker for the whole cluster. The resource usage for each broker is calculated using the following method: LocalBrokerData#getMaxResourceUsageWithWeight. The weights for each resource are configurable. Historical observations are included in the running average based on the broker's setting for loadBalancerHistoryResourcePercen [...]
+<p><img src="/docs/assets/ThresholdShedder.png" alt="Shedding strategy - ThresholdShedder"></p>
 <h5><a class="anchor" aria-hidden="true" id="overloadshedder"></a><a href="#overloadshedder" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>This strategy will attempt to shed exactly one bundle on brokers which are overloaded, that is, whose maximum system resource usage exceeds loadBalancerBrokerOverloadedThresholdPercentage. To see which resources are considered when determining the maximum system resource. A bundle is recommended for unloading off that broker if and only if the following conditions hold: The broker has at least two bundles assigned and the broker has at least one bundle that has not been unloaded recen [...]
+<p><img src="/docs/assets/OverloadShedder.png" alt="Shedding strategy - OverloadShedder"></p>
 <h5><a class="anchor" aria-hidden="true" id="uniformloadshedder"></a><a href="#uniformloadshedder" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>This strategy tends to distribute load uniformly across all brokers. This strategy checks laod difference between broker with highest load and broker with lowest load. If the difference is higher than configured thresholds <code>loadBalancerMsgRateDifferenceShedderThreshold</code> and <code>loadBalancerMsgThroughputMultiplierDifferenceShedderThreshold</code> then it finds out bundles which can be unloaded to distribute traffic evenly across all brokers. Configure broker with below val [...]
+<p><img src="/docs/assets/UniformLoadShedder.png" alt="Shedding strategy - UniformLoadShedder"></p>
 <h4><a class="anchor" aria-hidden="true" id="broker-overload-thresholds"></a><a href="#broker-overload-thresholds" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
 <p>The determinations of when a broker is overloaded is based on threshold of CPU, network and memory usage. Whenever either of those metrics reaches the threshold, the system triggers the shedding (if enabled).</p>
 <p>By default, overload threshold is set at 85%:</p>
diff --git a/content/docs/ko/next/administration-load-balance/index.html b/content/docs/ko/next/administration-load-balance/index.html
index ea7340a..f7310e7 100644
--- a/content/docs/ko/next/administration-load-balance/index.html
+++ b/content/docs/ko/next/administration-load-balance/index.html
@@ -156,13 +156,16 @@
 # Prevent the same topics to be shed and moved to other brokers more that once within this timeframe</span>
 <span class="hljs-attr">loadBalancerSheddingGracePeriodMinutes</span>=<span class="hljs-string">30</span>
 </code></pre>
-<p>Pulsar supports three types of shedding strategies:</p>
+<p>Pulsar supports the following types of shedding strategies. From Pulsar 2.10, the <strong>default</strong> shedding strategy is <code>ThresholdShedder</code>.</p>
 <h5><a class="anchor" aria-hidden="true" id="thresholdshedder"></a><a href="#thresholdshedder" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.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>This strategy tends to shed the bundles if any broker's usage is above the configured threshold. It does this by first computing the average resource usage per broker for the whole cluster. The resource usage for each broker is calculated using the following method: LocalBrokerData#getMaxResourceUsageWithWeight). The weights for each resource are configurable. Historical observations are included in the running average based on the broker's setting for loadBalancerHistoryResourcePerce [...]
+<p>This strategy tends to shed the bundles if any broker's usage is above the configured threshold. It does this by first computing the average resource usage per broker for the whole cluster. The resource usage for each broker is calculated using the following method: LocalBrokerData#getMaxResourceUsageWithWeight. The weights for each resource are configurable. Historical observations are included in the running average based on the broker's setting for loadBalancerHistoryResourcePercen [...]
+<p><img src="/docs/assets/ThresholdShedder.png" alt="Shedding strategy - ThresholdShedder"></p>
 <h5><a class="anchor" aria-hidden="true" id="overloadshedder"></a><a href="#overloadshedder" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>This strategy will attempt to shed exactly one bundle on brokers which are overloaded, that is, whose maximum system resource usage exceeds loadBalancerBrokerOverloadedThresholdPercentage. To see which resources are considered when determining the maximum system resource. A bundle is recommended for unloading off that broker if and only if the following conditions hold: The broker has at least two bundles assigned and the broker has at least one bundle that has not been unloaded recen [...]
+<p><img src="/docs/assets/OverloadShedder.png" alt="Shedding strategy - OverloadShedder"></p>
 <h5><a class="anchor" aria-hidden="true" id="uniformloadshedder"></a><a href="#uniformloadshedder" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>This strategy tends to distribute load uniformly across all brokers. This strategy checks laod difference between broker with highest load and broker with lowest load. If the difference is higher than configured thresholds <code>loadBalancerMsgRateDifferenceShedderThreshold</code> and <code>loadBalancerMsgThroughputMultiplierDifferenceShedderThreshold</code> then it finds out bundles which can be unloaded to distribute traffic evenly across all brokers. Configure broker with below val [...]
+<p><img src="/docs/assets/UniformLoadShedder.png" alt="Shedding strategy - UniformLoadShedder"></p>
 <h4><a class="anchor" aria-hidden="true" id="broker-overload-thresholds"></a><a href="#broker-overload-thresholds" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
 <p>The determinations of when a broker is overloaded is based on threshold of CPU, network and memory usage. Whenever either of those metrics reaches the threshold, the system triggers the shedding (if enabled).</p>
 <p>By default, overload threshold is set at 85%:</p>
diff --git a/content/docs/ko/next/administration-proxy.html b/content/docs/ko/next/administration-proxy.html
index a77fee3..533e580 100644
--- a/content/docs/ko/next/administration-proxy.html
+++ b/content/docs/ko/next/administration-proxy.html
@@ -76,15 +76,9 @@
             });
         </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ko" target="_blank" rel="noreferrer noopener">Translate</a><h1 id="__docusaurus" class="postHeaderTitle">Pulsar proxy</h1></header><article><div><span><p>Pulsar proxy is an optional gateway. Pulsar proxy is used when direct connections between clients and Pulsar br [...]
 <h2><a class="anchor" aria-hidden="true" id="configure-the-proxy"></a><a href="#configure-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.2 [...]
-<p>Before using the proxy, you need to configure it with the brokers addresses in the cluster. You can configure the proxy to connect directly to service discovery, or specify a broker URL in the configuration.</p>
-<h3><a class="anchor" aria-hidden="true" id="use-service-discovery"></a><a href="#use-service-discovery" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 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>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>
+<p>Before using the proxy, you need to configure it with the brokers addresses in the cluster. You can configure the broker URL in the proxy configuration, or the proxy to connect directly using service discovery.</p>
 <blockquote>
-<p>To use service discovery, you need to open the network ACLs, so the proxy can connects to the ZooKeeper nodes through the ZooKeeper client port (port <code>2181</code>) and the configuration store client port (port <code>2184</code>).</p>
-<p>However, it is not secure to use service discovery. Because if the network ACL is open, when someone compromises a proxy, they have full access to ZooKeeper.</p>
+<p>In a production environment service discovery is not recommended.</p>
 </blockquote>
 <h3><a class="anchor" aria-hidden="true" id="use-broker-urls"></a><a href="#use-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-2.5  [...]
 <p>It is more secure to specify a URL to connect to the brokers.</p>
@@ -102,10 +96,21 @@
 <p>The hostname in the URLs provided should be a DNS entry which points to multiple brokers or a virtual IP address, which is backed by multiple broker IP addresses, so that the proxy does not lose connectivity to Pulsar cluster if a single broker becomes unavailable.</p>
 <p>The ports to connect to the brokers (6650 and 8080, or in the case of TLS, 6651 and 8443) should be open in the network ACLs.</p>
 <p>Note that if you do not use functions, you do not need to configure <code>functionWorkerWebServiceURL</code>.</p>
+<h3><a class="anchor" aria-hidden="true" id="use-service-discovery"></a><a href="#use-service-discovery" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 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>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">metadataStoreUrl</span>=<span class="hljs-string">my-zk-0:2181,my-zk-1:2181,my-zk-2:2181</span>
+<span class="hljs-attr">configurationMetadataStoreUrl</span>=<span class="hljs-string">my-zk-0:2184,my-zk-remote:2184</span>
+</code></pre>
+<blockquote>
+<p>To use service discovery, you need to open the network ACLs, so the proxy can connects to the ZooKeeper nodes through the ZooKeeper client port (port <code>2181</code>) and the configuration store client port (port <code>2184</code>).</p>
+<p>However, it is not secure to use service discovery. Because if the network ACL is open, when someone compromises a proxy, they have full access to ZooKeeper.</p>
+</blockquote>
 <h2><a class="anchor" aria-hidden="true" id="start-the-proxy"></a><a href="#start-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-2-2.5  [...]
 <p>To start the proxy:</p>
 <pre><code class="hljs css language-bash">$ <span class="hljs-built_in">cd</span> /path/to/pulsar/directory
-$ bin/pulsar proxy
+$ bin/pulsar proxy \
+  --metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181 \
+  --configuration-metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181
 </code></pre>
 <blockquote>
 <p>You can run multiple instances of the Pulsar proxy in a cluster.</p>
@@ -117,7 +122,7 @@ $ bin/pulsar proxy
 <h2><a class="anchor" aria-hidden="true" id="use-pulsar-clients-with-the-proxy"></a><a href="#use-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.5S1 [...]
 <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 that the frontend uses. If the address is the DNS address <code>pulsar.cluster.default</code>, for example, the connection URL for clients is <code>pulsar://pulsar.cluster.default:6650</code>.</p>
 <p>For more information on Proxy configuration, refer to <a href="/docs/ko/next/reference-configuration#pulsar-proxy">Pulsar proxy</a>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ko/next/administration-load-balance"><span class="arrow-prev">← </span><span>Load balance</span></a><a class="docs-next button" href="/docs/ko/next/administration-upgrade"><span>Upgrade</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#configure-the-proxy">Configure the proxy</a><ul class="toc-headings"><li><a href="#use [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ko/next/administration-load-balance"><span class="arrow-prev">← </span><span>Load balance</span></a><a class="docs-next button" href="/docs/ko/next/administration-upgrade"><span>Upgrade</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#configure-the-proxy">Configure the proxy</a><ul class="toc-headings"><li><a href="#use [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/ko/next/administration-proxy/index.html b/content/docs/ko/next/administration-proxy/index.html
index a77fee3..533e580 100644
--- a/content/docs/ko/next/administration-proxy/index.html
+++ b/content/docs/ko/next/administration-proxy/index.html
@@ -76,15 +76,9 @@
             });
         </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ko" target="_blank" rel="noreferrer noopener">Translate</a><h1 id="__docusaurus" class="postHeaderTitle">Pulsar proxy</h1></header><article><div><span><p>Pulsar proxy is an optional gateway. Pulsar proxy is used when direct connections between clients and Pulsar br [...]
 <h2><a class="anchor" aria-hidden="true" id="configure-the-proxy"></a><a href="#configure-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.2 [...]
-<p>Before using the proxy, you need to configure it with the brokers addresses in the cluster. You can configure the proxy to connect directly to service discovery, or specify a broker URL in the configuration.</p>
-<h3><a class="anchor" aria-hidden="true" id="use-service-discovery"></a><a href="#use-service-discovery" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 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>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>
+<p>Before using the proxy, you need to configure it with the brokers addresses in the cluster. You can configure the broker URL in the proxy configuration, or the proxy to connect directly using service discovery.</p>
 <blockquote>
-<p>To use service discovery, you need to open the network ACLs, so the proxy can connects to the ZooKeeper nodes through the ZooKeeper client port (port <code>2181</code>) and the configuration store client port (port <code>2184</code>).</p>
-<p>However, it is not secure to use service discovery. Because if the network ACL is open, when someone compromises a proxy, they have full access to ZooKeeper.</p>
+<p>In a production environment service discovery is not recommended.</p>
 </blockquote>
 <h3><a class="anchor" aria-hidden="true" id="use-broker-urls"></a><a href="#use-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-2.5  [...]
 <p>It is more secure to specify a URL to connect to the brokers.</p>
@@ -102,10 +96,21 @@
 <p>The hostname in the URLs provided should be a DNS entry which points to multiple brokers or a virtual IP address, which is backed by multiple broker IP addresses, so that the proxy does not lose connectivity to Pulsar cluster if a single broker becomes unavailable.</p>
 <p>The ports to connect to the brokers (6650 and 8080, or in the case of TLS, 6651 and 8443) should be open in the network ACLs.</p>
 <p>Note that if you do not use functions, you do not need to configure <code>functionWorkerWebServiceURL</code>.</p>
+<h3><a class="anchor" aria-hidden="true" id="use-service-discovery"></a><a href="#use-service-discovery" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 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>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">metadataStoreUrl</span>=<span class="hljs-string">my-zk-0:2181,my-zk-1:2181,my-zk-2:2181</span>
+<span class="hljs-attr">configurationMetadataStoreUrl</span>=<span class="hljs-string">my-zk-0:2184,my-zk-remote:2184</span>
+</code></pre>
+<blockquote>
+<p>To use service discovery, you need to open the network ACLs, so the proxy can connects to the ZooKeeper nodes through the ZooKeeper client port (port <code>2181</code>) and the configuration store client port (port <code>2184</code>).</p>
+<p>However, it is not secure to use service discovery. Because if the network ACL is open, when someone compromises a proxy, they have full access to ZooKeeper.</p>
+</blockquote>
 <h2><a class="anchor" aria-hidden="true" id="start-the-proxy"></a><a href="#start-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-2-2.5  [...]
 <p>To start the proxy:</p>
 <pre><code class="hljs css language-bash">$ <span class="hljs-built_in">cd</span> /path/to/pulsar/directory
-$ bin/pulsar proxy
+$ bin/pulsar proxy \
+  --metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181 \
+  --configuration-metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181
 </code></pre>
 <blockquote>
 <p>You can run multiple instances of the Pulsar proxy in a cluster.</p>
@@ -117,7 +122,7 @@ $ bin/pulsar proxy
 <h2><a class="anchor" aria-hidden="true" id="use-pulsar-clients-with-the-proxy"></a><a href="#use-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.5S1 [...]
 <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 that the frontend uses. If the address is the DNS address <code>pulsar.cluster.default</code>, for example, the connection URL for clients is <code>pulsar://pulsar.cluster.default:6650</code>.</p>
 <p>For more information on Proxy configuration, refer to <a href="/docs/ko/next/reference-configuration#pulsar-proxy">Pulsar proxy</a>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ko/next/administration-load-balance"><span class="arrow-prev">← </span><span>Load balance</span></a><a class="docs-next button" href="/docs/ko/next/administration-upgrade"><span>Upgrade</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#configure-the-proxy">Configure the proxy</a><ul class="toc-headings"><li><a href="#use [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ko/next/administration-load-balance"><span class="arrow-prev">← </span><span>Load balance</span></a><a class="docs-next button" href="/docs/ko/next/administration-upgrade"><span>Upgrade</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#configure-the-proxy">Configure the proxy</a><ul class="toc-headings"><li><a href="#use [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/ko/next/administration-pulsar-manager.html b/content/docs/ko/next/administration-pulsar-manager.html
index 0bd48a8..f1f6c6a 100644
--- a/content/docs/ko/next/administration-pulsar-manager.html
+++ b/content/docs/ko/next/administration-pulsar-manager.html
@@ -138,7 +138,7 @@ docker build -f docker/Dockerfile <span class="hljs-params">--build-arg</span> B
 <ul>
 <li>Method 1: use command-line tool</li>
 </ul>
-<pre><code class="hljs">wget https:<span class="hljs-string">//dist.apache.org/repos/dist/release/pulsar/pulsar-manager/apache-pulsar-manager-0.2.0/apache-pulsar-manager-0.2.0-bin.tar.gz</span>
+<pre><code class="hljs">wget https:<span class="hljs-string">//dist.apache.org/repos/dist/release/pulsar/pulsar-manager/pulsar-manager-0.2.0/apache-pulsar-manager-0.2.0-bin.tar.gz</span>
 tar -zxvf apache-pulsar-manager-0.2.0-bin.tar.gz
 <span class="hljs-keyword">cd</span> pulsar-manager
 tar -zxvf pulsar-manager.tar
diff --git a/content/docs/ko/next/administration-pulsar-manager/index.html b/content/docs/ko/next/administration-pulsar-manager/index.html
index 0bd48a8..f1f6c6a 100644
--- a/content/docs/ko/next/administration-pulsar-manager/index.html
+++ b/content/docs/ko/next/administration-pulsar-manager/index.html
@@ -138,7 +138,7 @@ docker build -f docker/Dockerfile <span class="hljs-params">--build-arg</span> B
 <ul>
 <li>Method 1: use command-line tool</li>
 </ul>
-<pre><code class="hljs">wget https:<span class="hljs-string">//dist.apache.org/repos/dist/release/pulsar/pulsar-manager/apache-pulsar-manager-0.2.0/apache-pulsar-manager-0.2.0-bin.tar.gz</span>
+<pre><code class="hljs">wget https:<span class="hljs-string">//dist.apache.org/repos/dist/release/pulsar/pulsar-manager/pulsar-manager-0.2.0/apache-pulsar-manager-0.2.0-bin.tar.gz</span>
 tar -zxvf apache-pulsar-manager-0.2.0-bin.tar.gz
 <span class="hljs-keyword">cd</span> pulsar-manager
 tar -zxvf pulsar-manager.tar
diff --git a/content/docs/ko/next/administration-zk-bk.html b/content/docs/ko/next/administration-zk-bk.html
index 2e708ad..a09cf55 100644
--- a/content/docs/ko/next/administration-zk-bk.html
+++ b/content/docs/ko/next/administration-zk-bk.html
@@ -156,26 +156,12 @@
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-daemon start configuration-store</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="zookeeper-configuration"></a><a href="#zookeeper-configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
-<p>In Pulsar, ZooKeeper configuration is handled by two separate configuration files in the <code>conf</code> directory of your Pulsar installation: <code>conf/zookeeper.conf</code> for <a href="#local-zookeeper">local ZooKeeper</a> and <code>conf/global-zookeeper.conf</code> for <a href="#configuration-store">configuration store</a>.</p>
-<h4><a class="anchor" aria-hidden="true" id="local-zookeeper"></a><a href="#local-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  [...]
-<p>The <a href="/docs/ko/next/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> file handles the configuration for local ZooKeeper. The table below shows the available parameters:</p>
-<table>
-<thead>
-<tr><th>Name</th><th>Description</th><th>Default</th></tr>
-</thead>
-<tbody>
-<tr><td>tickTime</td><td>The tick is the basic unit of time in ZooKeeper, measured in milliseconds and used to regulate things like heartbeats and timeouts. tickTime is the length of a single tick.</td><td>2000</td></tr>
-<tr><td>initLimit</td><td>The maximum time, in ticks, that the leader ZooKeeper server allows follower ZooKeeper servers to successfully connect and sync. The tick time is set in milliseconds using the tickTime parameter.</td><td>10</td></tr>
-<tr><td>syncLimit</td><td>The maximum time, in ticks, that a follower ZooKeeper server is allowed to sync with other ZooKeeper servers. The tick time is set in milliseconds using the tickTime parameter.</td><td>5</td></tr>
-<tr><td>dataDir</td><td>The location where ZooKeeper stores in-memory database snapshots as well as the transaction log of updates to the database.</td><td>data/zookeeper</td></tr>
-<tr><td>clientPort</td><td>The port on which the ZooKeeper server listens for connections.</td><td>2181</td></tr>
-<tr><td>autopurge.snapRetainCount</td><td>In ZooKeeper, auto purge determines how many recent snapshots of the database stored in dataDir to retain within the time interval specified by autopurge.purgeInterval (while deleting the rest).</td><td>3</td></tr>
-<tr><td>autopurge.purgeInterval</td><td>The time interval, in hours, which triggers the ZooKeeper database purge task. Setting to a non-zero number enables auto purge; setting to 0 disables. Read this guide before enabling auto purge.</td><td>1</td></tr>
-<tr><td>maxClientCnxns</td><td>The maximum number of client connections. Increase this if you need to handle more ZooKeeper clients.</td><td>60</td></tr>
-</tbody>
-</table>
-<h4><a class="anchor" aria-hidden="true" id="configuration-store"></a><a href="#configuration-store" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
-<p>The <a href="/docs/ko/next/reference-configuration#configuration-store"><code>conf/global-zookeeper.conf</code></a> file handles the configuration for configuration store. The table below shows the available parameters:</p>
+<p>In Pulsar, ZooKeeper configuration is handled by two separate configuration files in the <code>conf</code> directory of your Pulsar installation: * The <code>conf/zookeeper.conf</code> file handles the configuration for local ZooKeeper. * The <code>conf/global-zookeeper.conf</code> file handles the configuration for configuration store. See <a href="/docs/ko/next/reference-configuration#zookeeper">parameters</a> for more details.</p>
+<h4><a class="anchor" aria-hidden="true" id="configure-batching-operations"></a><a href="#configure-batching-operations" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 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>Using the batching operations reduces the remote procedure call (RPC) traffic between ZooKeeper client and servers. It also reduces the number of write transactions, because each batching operation corresponds to a single ZooKeeper transaction, containing multiple read and write operations.</p>
+<p>The following figure demonstrates a basic benchmark of batching read/write operations that can be requested to ZooKeeper in one second:</p>
+<p><img src="/docs/assets/zookeeper-batching.png" alt="Zookeeper batching benchmark"></p>
+<p>To enable batching operations, set the <a href="/docs/ko/next/reference-configuration#broker"><code>metadataStoreBatchingEnabled</code></a> parameter to <code>true</code> on the broker side.</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-.83.42-1 [...]
 <p>BookKeeper stores all durable message in Pulsar. BookKeeper is a distributed <a href="https://en.wikipedia.org/wiki/Write-ahead_logging">write-ahead log</a> WAL system that guarantees read consistency of independent message logs calls ledgers. Individual BookKeeper servers are also called <em>bookies</em>.</p>
 <blockquote>
diff --git a/content/docs/ko/next/administration-zk-bk/index.html b/content/docs/ko/next/administration-zk-bk/index.html
index 2e708ad..a09cf55 100644
--- a/content/docs/ko/next/administration-zk-bk/index.html
+++ b/content/docs/ko/next/administration-zk-bk/index.html
@@ -156,26 +156,12 @@
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-daemon start configuration-store</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="zookeeper-configuration"></a><a href="#zookeeper-configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
-<p>In Pulsar, ZooKeeper configuration is handled by two separate configuration files in the <code>conf</code> directory of your Pulsar installation: <code>conf/zookeeper.conf</code> for <a href="#local-zookeeper">local ZooKeeper</a> and <code>conf/global-zookeeper.conf</code> for <a href="#configuration-store">configuration store</a>.</p>
-<h4><a class="anchor" aria-hidden="true" id="local-zookeeper"></a><a href="#local-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  [...]
-<p>The <a href="/docs/ko/next/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> file handles the configuration for local ZooKeeper. The table below shows the available parameters:</p>
-<table>
-<thead>
-<tr><th>Name</th><th>Description</th><th>Default</th></tr>
-</thead>
-<tbody>
-<tr><td>tickTime</td><td>The tick is the basic unit of time in ZooKeeper, measured in milliseconds and used to regulate things like heartbeats and timeouts. tickTime is the length of a single tick.</td><td>2000</td></tr>
-<tr><td>initLimit</td><td>The maximum time, in ticks, that the leader ZooKeeper server allows follower ZooKeeper servers to successfully connect and sync. The tick time is set in milliseconds using the tickTime parameter.</td><td>10</td></tr>
-<tr><td>syncLimit</td><td>The maximum time, in ticks, that a follower ZooKeeper server is allowed to sync with other ZooKeeper servers. The tick time is set in milliseconds using the tickTime parameter.</td><td>5</td></tr>
-<tr><td>dataDir</td><td>The location where ZooKeeper stores in-memory database snapshots as well as the transaction log of updates to the database.</td><td>data/zookeeper</td></tr>
-<tr><td>clientPort</td><td>The port on which the ZooKeeper server listens for connections.</td><td>2181</td></tr>
-<tr><td>autopurge.snapRetainCount</td><td>In ZooKeeper, auto purge determines how many recent snapshots of the database stored in dataDir to retain within the time interval specified by autopurge.purgeInterval (while deleting the rest).</td><td>3</td></tr>
-<tr><td>autopurge.purgeInterval</td><td>The time interval, in hours, which triggers the ZooKeeper database purge task. Setting to a non-zero number enables auto purge; setting to 0 disables. Read this guide before enabling auto purge.</td><td>1</td></tr>
-<tr><td>maxClientCnxns</td><td>The maximum number of client connections. Increase this if you need to handle more ZooKeeper clients.</td><td>60</td></tr>
-</tbody>
-</table>
-<h4><a class="anchor" aria-hidden="true" id="configuration-store"></a><a href="#configuration-store" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
-<p>The <a href="/docs/ko/next/reference-configuration#configuration-store"><code>conf/global-zookeeper.conf</code></a> file handles the configuration for configuration store. The table below shows the available parameters:</p>
+<p>In Pulsar, ZooKeeper configuration is handled by two separate configuration files in the <code>conf</code> directory of your Pulsar installation: * The <code>conf/zookeeper.conf</code> file handles the configuration for local ZooKeeper. * The <code>conf/global-zookeeper.conf</code> file handles the configuration for configuration store. See <a href="/docs/ko/next/reference-configuration#zookeeper">parameters</a> for more details.</p>
+<h4><a class="anchor" aria-hidden="true" id="configure-batching-operations"></a><a href="#configure-batching-operations" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 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>Using the batching operations reduces the remote procedure call (RPC) traffic between ZooKeeper client and servers. It also reduces the number of write transactions, because each batching operation corresponds to a single ZooKeeper transaction, containing multiple read and write operations.</p>
+<p>The following figure demonstrates a basic benchmark of batching read/write operations that can be requested to ZooKeeper in one second:</p>
+<p><img src="/docs/assets/zookeeper-batching.png" alt="Zookeeper batching benchmark"></p>
+<p>To enable batching operations, set the <a href="/docs/ko/next/reference-configuration#broker"><code>metadataStoreBatchingEnabled</code></a> parameter to <code>true</code> on the broker side.</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-.83.42-1 [...]
 <p>BookKeeper stores all durable message in Pulsar. BookKeeper is a distributed <a href="https://en.wikipedia.org/wiki/Write-ahead_logging">write-ahead log</a> WAL system that guarantees read consistency of independent message logs calls ledgers. Individual BookKeeper servers are also called <em>bookies</em>.</p>
 <blockquote>
diff --git a/content/docs/ko/next/client-libraries-cpp.html b/content/docs/ko/next/client-libraries-cpp.html
index 3f93c4a..f4b76ea 100644
--- a/content/docs/ko/next/client-libraries-cpp.html
+++ b/content/docs/ko/next/client-libraries-cpp.html
@@ -315,90 +315,6 @@ ${PULSAR_HOME}/pulsar-client-cpp/build/lib/Release/pulsar.dll</p></li>
 <p>If you use TLS authentication, you need to add <code>ssl</code>, and the default port is <code>6651</code>. The following is an example.</p>
 <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="create-a-consumer"></a><a href="#create-a-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 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 use Pulsar as a consumer, you need to create a consumer on the C++ client. There are two main ways of using the consumer: - <a href="#blocking-example">Blocking style</a>: synchronously calling <code>receive(msg)</code>. - <a href="#consumer-with-a-message-listener">Non-blocking</a> (event based) style: using a message listener.</p>
-<h3><a class="anchor" aria-hidden="true" id="blocking-example"></a><a href="#blocking-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-.98 0-2-1.22-2-2. [...]
-<p>The benefit of this approach is that it is the simplest code. Simply keeps calling <code>receive(msg)</code> which blocks until a message is received.</p>
-<p>This example starts a subscription at the earliest offset and consumes 100 messages.</p>
-<pre><code class="hljs css language-c++"><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-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
-
-<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
-    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
-
-    Consumer consumer;
-    ConsumerConfiguration <span class="hljs-built_in">config</span>;
-    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
-    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
-    <span class="hljs-keyword">if</span> (result != ResultOk) {
-        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
-    }
-
-    Message msg;
-    <span class="hljs-keyword">int</span> ctr = <span class="hljs-number">0</span>;
-    <span class="hljs-comment">// consume 100 messages</span>
-    <span class="hljs-keyword">while</span> (ctr &lt; <span class="hljs-number">100</span>) {
-        consumer.receive(msg);
-        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Received: "</span> &lt;&lt; msg
-            &lt;&lt; <span class="hljs-string">"  with payload '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-
-        consumer.acknowledge(msg);
-        ctr++;
-    }
-
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming synchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-
-    client.<span class="hljs-built_in">close</span>();
-    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
-}
-</code></pre>
-<h3><a class="anchor" aria-hidden="true" id="consumer-with-a-message-listener"></a><a href="#consumer-with-a-message-listener" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13. [...]
-<p>You can avoid running a loop with blocking calls with an event based style by using a message listener which is invoked for each message that is received.</p>
-<p>This example starts a subscription at the earliest offset and consumes 100 messages.</p>
-<pre><code class="hljs css language-c++"><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-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;atomic&gt;</span></span>
-<span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;thread&gt;</span></span>
-
-<span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
-
-<span class="hljs-built_in">std</span>::atomic&lt;<span class="hljs-keyword">uint32_t</span>&gt; messagesReceived;
-
-<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">handleAckComplete</span><span class="hljs-params">(Result res)</span> </span>{
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Ack res: "</span> &lt;&lt; res &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-}
-
-<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">listener</span><span class="hljs-params">(Consumer consumer, <span class="hljs-keyword">const</span> Message&amp; msg)</span> </span>{
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Got message "</span> &lt;&lt; msg &lt;&lt; <span class="hljs-string">" with content '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-    messagesReceived++;
-    consumer.acknowledgeAsync(msg.getMessageId(), handleAckComplete);
-}
-
-<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
-    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
-
-    Consumer consumer;
-    ConsumerConfiguration <span class="hljs-built_in">config</span>;
-    <span class="hljs-built_in">config</span>.setMessageListener(listener);
-    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
-    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
-    <span class="hljs-keyword">if</span> (result != ResultOk) {
-        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
-    }
-
-    <span class="hljs-comment">// wait for 100 messages to be consumed</span>
-    <span class="hljs-keyword">while</span> (messagesReceived &lt; <span class="hljs-number">100</span>) {
-        <span class="hljs-built_in">std</span>::this_thread::sleep_for(<span class="hljs-built_in">std</span>::chrono::milliseconds(<span class="hljs-number">100</span>));
-    }
-
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming asynchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-
-    client.<span class="hljs-built_in">close</span>();
-    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
-}
-</code></pre>
 <h2><a class="anchor" aria-hidden="true" id="create-a-producer"></a><a href="#create-a-producer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 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 use Pulsar as a producer, you need to create a producer on the C++ client. There are two main ways of using a producer: - <a href="#simple-blocking-example">Blocking style</a> : each call to <code>send</code> waits for an ack from the broker. - <a href="#non-blocking-example">Non-blocking asynchronous style</a> : <code>sendAsync</code> is called instead of <code>send</code> and a callback is supplied for when the ack is received from the broker.</p>
 <h3><a class="anchor" aria-hidden="true" id="simple-blocking-example"></a><a href="#simple-blocking-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-.98 [...]
@@ -502,6 +418,111 @@ ${PULSAR_HOME}/pulsar-client-cpp/build/lib/Release/pulsar.dll</p></li>
 producerConf.setPartitionsRoutingMode(ProducerConfiguration::UseSinglePartition);
 producerConf.setLazyStartPartitionedProducers(<span class="hljs-literal">true</span>);
 </code></pre>
+<h3><a class="anchor" aria-hidden="true" id="enable-chunking"></a><a href="#enable-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>Message <a href="/docs/ko/next/concepts-messaging#chunking">chunking</a> enables Pulsar to process large payload messages by splitting the message into chunks at the producer side and aggregating chunked messages at the consumer side.</p>
+<p>The message chunking feature is OFF by default. The following is an example about how to enable message chunking when creating a producer.</p>
+<pre><code class="hljs css language-c++">ProducerConfiguration conf;
+conf.setBatchingEnabled(<span class="hljs-literal">false</span>);
+conf.setChunkingEnabled(<span class="hljs-literal">true</span>);
+Producer producer;
+client.createProducer(<span class="hljs-string">"my-topic"</span>, conf, producer);
+</code></pre>
+<blockquote>
+<p><strong>Note:</strong> To enable chunking, you need to disable batching (<code>setBatchingEnabled</code>=<code>false</code>) concurrently.</p>
+</blockquote>
+<h2><a class="anchor" aria-hidden="true" id="create-a-consumer"></a><a href="#create-a-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 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 use Pulsar as a consumer, you need to create a consumer on the C++ client. There are two main ways of using the consumer: - <a href="#blocking-example">Blocking style</a>: synchronously calling <code>receive(msg)</code>. - <a href="#consumer-with-a-message-listener">Non-blocking</a> (event based) style: using a message listener.</p>
+<h3><a class="anchor" aria-hidden="true" id="blocking-example"></a><a href="#blocking-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-.98 0-2-1.22-2-2. [...]
+<p>The benefit of this approach is that it is the simplest code. Simply keeps calling <code>receive(msg)</code> which blocks until a message is received.</p>
+<p>This example starts a subscription at the earliest offset and consumes 100 messages.</p>
+<pre><code class="hljs css language-c++"><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-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
+
+<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
+    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
+
+    Consumer consumer;
+    ConsumerConfiguration <span class="hljs-built_in">config</span>;
+    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
+    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
+    <span class="hljs-keyword">if</span> (result != ResultOk) {
+        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
+    }
+
+    Message msg;
+    <span class="hljs-keyword">int</span> ctr = <span class="hljs-number">0</span>;
+    <span class="hljs-comment">// consume 100 messages</span>
+    <span class="hljs-keyword">while</span> (ctr &lt; <span class="hljs-number">100</span>) {
+        consumer.receive(msg);
+        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Received: "</span> &lt;&lt; msg
+            &lt;&lt; <span class="hljs-string">"  with payload '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+
+        consumer.acknowledge(msg);
+        ctr++;
+    }
+
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming synchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+
+    client.<span class="hljs-built_in">close</span>();
+    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
+}
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="consumer-with-a-message-listener"></a><a href="#consumer-with-a-message-listener" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13. [...]
+<p>You can avoid running a loop with blocking calls with an event based style by using a message listener which is invoked for each message that is received.</p>
+<p>This example starts a subscription at the earliest offset and consumes 100 messages.</p>
+<pre><code class="hljs css language-c++"><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-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;atomic&gt;</span></span>
+<span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;thread&gt;</span></span>
+
+<span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
+
+<span class="hljs-built_in">std</span>::atomic&lt;<span class="hljs-keyword">uint32_t</span>&gt; messagesReceived;
+
+<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">handleAckComplete</span><span class="hljs-params">(Result res)</span> </span>{
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Ack res: "</span> &lt;&lt; res &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+}
+
+<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">listener</span><span class="hljs-params">(Consumer consumer, <span class="hljs-keyword">const</span> Message&amp; msg)</span> </span>{
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Got message "</span> &lt;&lt; msg &lt;&lt; <span class="hljs-string">" with content '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+    messagesReceived++;
+    consumer.acknowledgeAsync(msg.getMessageId(), handleAckComplete);
+}
+
+<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
+    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
+
+    Consumer consumer;
+    ConsumerConfiguration <span class="hljs-built_in">config</span>;
+    <span class="hljs-built_in">config</span>.setMessageListener(listener);
+    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
+    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
+    <span class="hljs-keyword">if</span> (result != ResultOk) {
+        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
+    }
+
+    <span class="hljs-comment">// wait for 100 messages to be consumed</span>
+    <span class="hljs-keyword">while</span> (messagesReceived &lt; <span class="hljs-number">100</span>) {
+        <span class="hljs-built_in">std</span>::this_thread::sleep_for(<span class="hljs-built_in">std</span>::chrono::milliseconds(<span class="hljs-number">100</span>));
+    }
+
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming asynchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+
+    client.<span class="hljs-built_in">close</span>();
+    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
+}
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="configure-chunking"></a><a href="#configure-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>You can limit the maximum number of chunked messages a consumer maintains concurrently by configuring the <code>setMaxPendingChunkedMessage</code> and <code>setAutoAckOldestChunkedMessageOnQueueFull</code> parameters. When the threshold is reached, the consumer drops pending messages by silently acknowledging them or asking the broker to redeliver them later.</p>
+<p>The following is an example of how to configure message chunking.</p>
+<pre><code class="hljs css language-c++">ConsumerConfiguration conf;
+conf.setAutoAckOldestChunkedMessageOnQueueFull(<span class="hljs-literal">true</span>);
+conf.setMaxPendingChunkedMessage(<span class="hljs-number">100</span>);
+Consumer consumer;
+client.subscribe(<span class="hljs-string">"my-topic"</span>, <span class="hljs-string">"my-sub"</span>, conf, consumer);
+</code></pre>
 <h2><a class="anchor" aria-hidden="true" id="enable-authentication-in-connection-urls"></a><a href="#enable-authentication-in-connection-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  [...]
 <p>If you use TLS authentication when connecting to Pulsar, you need to add <code>ssl</code> in the connection URLs, and the default port is <code>6651</code>. The following is an example.</p>
 <pre><code class="hljs css language-cpp">ClientConfiguration config = ClientConfiguration();
@@ -555,7 +576,7 @@ client.subscribe(<span class="hljs-string">"topic-avro"</span>, <span class="hlj
 ​
 4. Create a consumer to receive a `User` instance.
 ​c++ ConsumerConfiguration consumerConf; consumerConf.setSchema(createProtobufNativeSchema(User::GetDescriptor())); consumerConf.setSubscriptionInitialPosition(InitialPositionEarliest); Consumer consumer; client.subscribe(&quot;topic-protobuf&quot;, &quot;my-sub&quot;, consumerConf, consumer); Message msg; consumer.receive(msg); User user2; user2.ParseFromArray(msg.getData(), msg.getLength()); ```</code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ko/next/client-libraries-python"><span class="arrow-prev">← </span><span>Python</span></a><a class="docs-next button" href="/docs/ko/next/client-libraries-node"><span>Node.js</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#supported-platforms">Supported platforms</a></li><li><a href="#system-requirements">System requir [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ko/next/client-libraries-python"><span class="arrow-prev">← </span><span>Python</span></a><a class="docs-next button" href="/docs/ko/next/client-libraries-node"><span>Node.js</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#supported-platforms">Supported platforms</a></li><li><a href="#system-requirements">System requir [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/ko/next/client-libraries-cpp/index.html b/content/docs/ko/next/client-libraries-cpp/index.html
index 3f93c4a..f4b76ea 100644
--- a/content/docs/ko/next/client-libraries-cpp/index.html
+++ b/content/docs/ko/next/client-libraries-cpp/index.html
@@ -315,90 +315,6 @@ ${PULSAR_HOME}/pulsar-client-cpp/build/lib/Release/pulsar.dll</p></li>
 <p>If you use TLS authentication, you need to add <code>ssl</code>, and the default port is <code>6651</code>. The following is an example.</p>
 <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="create-a-consumer"></a><a href="#create-a-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 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 use Pulsar as a consumer, you need to create a consumer on the C++ client. There are two main ways of using the consumer: - <a href="#blocking-example">Blocking style</a>: synchronously calling <code>receive(msg)</code>. - <a href="#consumer-with-a-message-listener">Non-blocking</a> (event based) style: using a message listener.</p>
-<h3><a class="anchor" aria-hidden="true" id="blocking-example"></a><a href="#blocking-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-.98 0-2-1.22-2-2. [...]
-<p>The benefit of this approach is that it is the simplest code. Simply keeps calling <code>receive(msg)</code> which blocks until a message is received.</p>
-<p>This example starts a subscription at the earliest offset and consumes 100 messages.</p>
-<pre><code class="hljs css language-c++"><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-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
-
-<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
-    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
-
-    Consumer consumer;
-    ConsumerConfiguration <span class="hljs-built_in">config</span>;
-    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
-    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
-    <span class="hljs-keyword">if</span> (result != ResultOk) {
-        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
-    }
-
-    Message msg;
-    <span class="hljs-keyword">int</span> ctr = <span class="hljs-number">0</span>;
-    <span class="hljs-comment">// consume 100 messages</span>
-    <span class="hljs-keyword">while</span> (ctr &lt; <span class="hljs-number">100</span>) {
-        consumer.receive(msg);
-        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Received: "</span> &lt;&lt; msg
-            &lt;&lt; <span class="hljs-string">"  with payload '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-
-        consumer.acknowledge(msg);
-        ctr++;
-    }
-
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming synchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-
-    client.<span class="hljs-built_in">close</span>();
-    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
-}
-</code></pre>
-<h3><a class="anchor" aria-hidden="true" id="consumer-with-a-message-listener"></a><a href="#consumer-with-a-message-listener" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13. [...]
-<p>You can avoid running a loop with blocking calls with an event based style by using a message listener which is invoked for each message that is received.</p>
-<p>This example starts a subscription at the earliest offset and consumes 100 messages.</p>
-<pre><code class="hljs css language-c++"><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-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;atomic&gt;</span></span>
-<span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;thread&gt;</span></span>
-
-<span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
-
-<span class="hljs-built_in">std</span>::atomic&lt;<span class="hljs-keyword">uint32_t</span>&gt; messagesReceived;
-
-<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">handleAckComplete</span><span class="hljs-params">(Result res)</span> </span>{
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Ack res: "</span> &lt;&lt; res &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-}
-
-<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">listener</span><span class="hljs-params">(Consumer consumer, <span class="hljs-keyword">const</span> Message&amp; msg)</span> </span>{
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Got message "</span> &lt;&lt; msg &lt;&lt; <span class="hljs-string">" with content '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-    messagesReceived++;
-    consumer.acknowledgeAsync(msg.getMessageId(), handleAckComplete);
-}
-
-<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
-    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
-
-    Consumer consumer;
-    ConsumerConfiguration <span class="hljs-built_in">config</span>;
-    <span class="hljs-built_in">config</span>.setMessageListener(listener);
-    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
-    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
-    <span class="hljs-keyword">if</span> (result != ResultOk) {
-        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
-    }
-
-    <span class="hljs-comment">// wait for 100 messages to be consumed</span>
-    <span class="hljs-keyword">while</span> (messagesReceived &lt; <span class="hljs-number">100</span>) {
-        <span class="hljs-built_in">std</span>::this_thread::sleep_for(<span class="hljs-built_in">std</span>::chrono::milliseconds(<span class="hljs-number">100</span>));
-    }
-
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming asynchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-
-    client.<span class="hljs-built_in">close</span>();
-    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
-}
-</code></pre>
 <h2><a class="anchor" aria-hidden="true" id="create-a-producer"></a><a href="#create-a-producer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 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 use Pulsar as a producer, you need to create a producer on the C++ client. There are two main ways of using a producer: - <a href="#simple-blocking-example">Blocking style</a> : each call to <code>send</code> waits for an ack from the broker. - <a href="#non-blocking-example">Non-blocking asynchronous style</a> : <code>sendAsync</code> is called instead of <code>send</code> and a callback is supplied for when the ack is received from the broker.</p>
 <h3><a class="anchor" aria-hidden="true" id="simple-blocking-example"></a><a href="#simple-blocking-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-.98 [...]
@@ -502,6 +418,111 @@ ${PULSAR_HOME}/pulsar-client-cpp/build/lib/Release/pulsar.dll</p></li>
 producerConf.setPartitionsRoutingMode(ProducerConfiguration::UseSinglePartition);
 producerConf.setLazyStartPartitionedProducers(<span class="hljs-literal">true</span>);
 </code></pre>
+<h3><a class="anchor" aria-hidden="true" id="enable-chunking"></a><a href="#enable-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>Message <a href="/docs/ko/next/concepts-messaging#chunking">chunking</a> enables Pulsar to process large payload messages by splitting the message into chunks at the producer side and aggregating chunked messages at the consumer side.</p>
+<p>The message chunking feature is OFF by default. The following is an example about how to enable message chunking when creating a producer.</p>
+<pre><code class="hljs css language-c++">ProducerConfiguration conf;
+conf.setBatchingEnabled(<span class="hljs-literal">false</span>);
+conf.setChunkingEnabled(<span class="hljs-literal">true</span>);
+Producer producer;
+client.createProducer(<span class="hljs-string">"my-topic"</span>, conf, producer);
+</code></pre>
+<blockquote>
+<p><strong>Note:</strong> To enable chunking, you need to disable batching (<code>setBatchingEnabled</code>=<code>false</code>) concurrently.</p>
+</blockquote>
+<h2><a class="anchor" aria-hidden="true" id="create-a-consumer"></a><a href="#create-a-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 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 use Pulsar as a consumer, you need to create a consumer on the C++ client. There are two main ways of using the consumer: - <a href="#blocking-example">Blocking style</a>: synchronously calling <code>receive(msg)</code>. - <a href="#consumer-with-a-message-listener">Non-blocking</a> (event based) style: using a message listener.</p>
+<h3><a class="anchor" aria-hidden="true" id="blocking-example"></a><a href="#blocking-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-.98 0-2-1.22-2-2. [...]
+<p>The benefit of this approach is that it is the simplest code. Simply keeps calling <code>receive(msg)</code> which blocks until a message is received.</p>
+<p>This example starts a subscription at the earliest offset and consumes 100 messages.</p>
+<pre><code class="hljs css language-c++"><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-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
+
+<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
+    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
+
+    Consumer consumer;
+    ConsumerConfiguration <span class="hljs-built_in">config</span>;
+    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
+    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
+    <span class="hljs-keyword">if</span> (result != ResultOk) {
+        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
+    }
+
+    Message msg;
+    <span class="hljs-keyword">int</span> ctr = <span class="hljs-number">0</span>;
+    <span class="hljs-comment">// consume 100 messages</span>
+    <span class="hljs-keyword">while</span> (ctr &lt; <span class="hljs-number">100</span>) {
+        consumer.receive(msg);
+        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Received: "</span> &lt;&lt; msg
+            &lt;&lt; <span class="hljs-string">"  with payload '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+
+        consumer.acknowledge(msg);
+        ctr++;
+    }
+
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming synchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+
+    client.<span class="hljs-built_in">close</span>();
+    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
+}
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="consumer-with-a-message-listener"></a><a href="#consumer-with-a-message-listener" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13. [...]
+<p>You can avoid running a loop with blocking calls with an event based style by using a message listener which is invoked for each message that is received.</p>
+<p>This example starts a subscription at the earliest offset and consumes 100 messages.</p>
+<pre><code class="hljs css language-c++"><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-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;atomic&gt;</span></span>
+<span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;thread&gt;</span></span>
+
+<span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
+
+<span class="hljs-built_in">std</span>::atomic&lt;<span class="hljs-keyword">uint32_t</span>&gt; messagesReceived;
+
+<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">handleAckComplete</span><span class="hljs-params">(Result res)</span> </span>{
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Ack res: "</span> &lt;&lt; res &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+}
+
+<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">listener</span><span class="hljs-params">(Consumer consumer, <span class="hljs-keyword">const</span> Message&amp; msg)</span> </span>{
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Got message "</span> &lt;&lt; msg &lt;&lt; <span class="hljs-string">" with content '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+    messagesReceived++;
+    consumer.acknowledgeAsync(msg.getMessageId(), handleAckComplete);
+}
+
+<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
+    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
+
+    Consumer consumer;
+    ConsumerConfiguration <span class="hljs-built_in">config</span>;
+    <span class="hljs-built_in">config</span>.setMessageListener(listener);
+    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
+    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
+    <span class="hljs-keyword">if</span> (result != ResultOk) {
+        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
+    }
+
+    <span class="hljs-comment">// wait for 100 messages to be consumed</span>
+    <span class="hljs-keyword">while</span> (messagesReceived &lt; <span class="hljs-number">100</span>) {
+        <span class="hljs-built_in">std</span>::this_thread::sleep_for(<span class="hljs-built_in">std</span>::chrono::milliseconds(<span class="hljs-number">100</span>));
+    }
+
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming asynchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+
+    client.<span class="hljs-built_in">close</span>();
+    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
+}
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="configure-chunking"></a><a href="#configure-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>You can limit the maximum number of chunked messages a consumer maintains concurrently by configuring the <code>setMaxPendingChunkedMessage</code> and <code>setAutoAckOldestChunkedMessageOnQueueFull</code> parameters. When the threshold is reached, the consumer drops pending messages by silently acknowledging them or asking the broker to redeliver them later.</p>
+<p>The following is an example of how to configure message chunking.</p>
+<pre><code class="hljs css language-c++">ConsumerConfiguration conf;
+conf.setAutoAckOldestChunkedMessageOnQueueFull(<span class="hljs-literal">true</span>);
+conf.setMaxPendingChunkedMessage(<span class="hljs-number">100</span>);
+Consumer consumer;
+client.subscribe(<span class="hljs-string">"my-topic"</span>, <span class="hljs-string">"my-sub"</span>, conf, consumer);
+</code></pre>
 <h2><a class="anchor" aria-hidden="true" id="enable-authentication-in-connection-urls"></a><a href="#enable-authentication-in-connection-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  [...]
 <p>If you use TLS authentication when connecting to Pulsar, you need to add <code>ssl</code> in the connection URLs, and the default port is <code>6651</code>. The following is an example.</p>
 <pre><code class="hljs css language-cpp">ClientConfiguration config = ClientConfiguration();
@@ -555,7 +576,7 @@ client.subscribe(<span class="hljs-string">"topic-avro"</span>, <span class="hlj
 ​
 4. Create a consumer to receive a `User` instance.
 ​c++ ConsumerConfiguration consumerConf; consumerConf.setSchema(createProtobufNativeSchema(User::GetDescriptor())); consumerConf.setSubscriptionInitialPosition(InitialPositionEarliest); Consumer consumer; client.subscribe(&quot;topic-protobuf&quot;, &quot;my-sub&quot;, consumerConf, consumer); Message msg; consumer.receive(msg); User user2; user2.ParseFromArray(msg.getData(), msg.getLength()); ```</code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ko/next/client-libraries-python"><span class="arrow-prev">← </span><span>Python</span></a><a class="docs-next button" href="/docs/ko/next/client-libraries-node"><span>Node.js</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#supported-platforms">Supported platforms</a></li><li><a href="#system-requirements">System requir [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ko/next/client-libraries-python"><span class="arrow-prev">← </span><span>Python</span></a><a class="docs-next button" href="/docs/ko/next/client-libraries-node"><span>Node.js</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#supported-platforms">Supported platforms</a></li><li><a href="#system-requirements">System requir [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/ko/next/client-libraries-dotnet.html b/content/docs/ko/next/client-libraries-dotnet.html
index a369eec..d6133fe 100644
--- a/content/docs/ko/next/client-libraries-dotnet.html
+++ b/content/docs/ko/next/client-libraries-dotnet.html
@@ -243,10 +243,7 @@ metadata[<span class="hljs-string">"SomeKey"</span>] = <span class="hljs-string"
 <p>Messages can be acknowledged individually or cumulatively. For details about message acknowledgement, see <a href="/docs/ko/next/concepts-messaging#acknowledgement">acknowledgement</a>.</p>
 <ul>
 <li><p>Acknowledge messages individually.</p>
-<pre><code class="hljs css language-c#"><span class="hljs-keyword">await</span> <span class="hljs-keyword">foreach</span> (<span class="hljs-keyword">var</span> message <span class="hljs-keyword">in</span> consumer.Messages())
-{
-    Console.WriteLine(<span class="hljs-string">"Received: "</span> + Encoding.UTF8.GetString(message.Data.ToArray()));
-}
+<pre><code class="hljs css language-c#"><span class="hljs-keyword">await</span> consumer.Acknowledge(message);
 </code></pre></li>
 <li><p>Acknowledge messages cumulatively.</p>
 <pre><code class="hljs css language-c#"><span class="hljs-keyword">await</span> consumer.AcknowledgeCumulative(message);
diff --git a/content/docs/ko/next/client-libraries-dotnet/index.html b/content/docs/ko/next/client-libraries-dotnet/index.html
index a369eec..d6133fe 100644
--- a/content/docs/ko/next/client-libraries-dotnet/index.html
+++ b/content/docs/ko/next/client-libraries-dotnet/index.html
@@ -243,10 +243,7 @@ metadata[<span class="hljs-string">"SomeKey"</span>] = <span class="hljs-string"
 <p>Messages can be acknowledged individually or cumulatively. For details about message acknowledgement, see <a href="/docs/ko/next/concepts-messaging#acknowledgement">acknowledgement</a>.</p>
 <ul>
 <li><p>Acknowledge messages individually.</p>
-<pre><code class="hljs css language-c#"><span class="hljs-keyword">await</span> <span class="hljs-keyword">foreach</span> (<span class="hljs-keyword">var</span> message <span class="hljs-keyword">in</span> consumer.Messages())
-{
-    Console.WriteLine(<span class="hljs-string">"Received: "</span> + Encoding.UTF8.GetString(message.Data.ToArray()));
-}
+<pre><code class="hljs css language-c#"><span class="hljs-keyword">await</span> consumer.Acknowledge(message);
 </code></pre></li>
 <li><p>Acknowledge messages cumulatively.</p>
 <pre><code class="hljs css language-c#"><span class="hljs-keyword">await</span> consumer.AcknowledgeCumulative(message);
diff --git a/content/docs/ko/next/client-libraries-java.html b/content/docs/ko/next/client-libraries-java.html
index 6fa5c08..0c1e6c6 100644
--- a/content/docs/ko/next/client-libraries-java.html
+++ b/content/docs/ko/next/client-libraries-java.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="ko"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar Java client · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="You can use a Pulsar Java client to create the Java [producer](#producer), [consumer](#consumer), and [readers](#reader) of messages and to perform [administrative tasks](/docs/ko [...]
+<!DOCTYPE html><html lang="ko"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar Java client · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="You can use a Pulsar Java client to create the Java [producer](#producer), [consumer](#consumer), [readers](#reader) and [TableView](#tableview) of messages and to perform [admini [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,8 +74,8 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ko" target="_blank" rel="noreferrer noopener">Translate</a><h1 id="__docusaurus" class="postHeaderTitle">Pulsar Java client</h1></header><article><div><span><p>You can use a Pulsar Java client to create the Java <a href="#producer">producer</a>, <a href="#consumer" [...]
-<p>All the methods in <a href="#producer">producer</a>, <a href="#consumer">consumer</a>, and <a href="#reader">reader</a> of a Java client are thread-safe.</p>
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ko" target="_blank" rel="noreferrer noopener">Translate</a><h1 id="__docusaurus" class="postHeaderTitle">Pulsar Java client</h1></header><article><div><span><p>You can use a Pulsar Java client to create the Java <a href="#producer">producer</a>, <a href="#consumer" [...]
+<p>All the methods in <a href="#producer">producer</a>, <a href="#consumer">consumer</a>, <a href="#reader">readers</a> and <a href="#tableview">TableView</a> of a Java client are thread-safe.</p>
 <p>Javadoc for the Pulsar client is divided into two domains by package as follows.</p>
 <table>
 <thead>
@@ -250,7 +250,7 @@ Available options are as follows:</li>
 <ul>
 <li><p><strong>FAIL</strong>: if encryption fails, unencrypted messages fail to send.</p></li>
 <li><p><strong>SEND</strong>: if encryption fails, unencrypted messages are sent. |
-<code>ProducerCryptoFailureAction.FAIL</code> <code>batchingMaxPublishDelayMicros</code>| long|Batching time period of sending messages.|TimeUnit.MILLISECONDS.toMicros(1) <code>batchingMaxMessages</code> |int|The maximum number of messages permitted in a batch.|1000 <code>batchingEnabled</code>| boolean|Enable batching of messages. |true <code>compressionType</code>|CompressionType|Message data compression type used by a producer.<br>
+<code>ProducerCryptoFailureAction.FAIL</code> <code>batchingMaxPublishDelayMicros</code>| long|Batching time period of sending messages.|TimeUnit.MILLISECONDS.toMicros(1) <code>batchingMaxMessages</code> |int|The maximum number of messages permitted in a batch.|1000 <code>batchingEnabled</code>| boolean|Enable batching of messages. |true <code>chunkingEnabled</code> | boolean | Enable chunking of messages. |false <code>compressionType</code>|CompressionType|Message data compression type  [...]
 Available options:</p></li>
 <li><p><a href="https://github.com/lz4/lz4"><code>LZ4</code></a></p></li>
 <li><p><a href="https://zlib.net/"><code>ZLIB</code></a></p>
@@ -289,6 +289,18 @@ You can configure parameters if you do not want to use the default configuration
     .send();
 </code></pre>
 <p>You can terminate the builder chain with <code>sendAsync()</code> and get a future return.</p>
+<h3><a class="anchor" aria-hidden="true" id="enable-chunking"></a><a href="#enable-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>Message <a href="/docs/ko/next/concepts-messaging#chunking">chunking</a> enables Pulsar to process large payload messages by splitting the message into chunks at the producer side and aggregating chunked messages at the consumer side.</p>
+<p>The message chunking feature is OFF by default. The following is an example about how to enable message chunking when creating a producer.</p>
+<pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
+        .topic(topic)
+        .enableChunking(<span class="hljs-keyword">true</span>)
+        .enableBatching(<span class="hljs-keyword">false</span>)
+        .create();
+</code></pre>
+<blockquote>
+<p><strong>Note:</strong> To enable chunking, you need to disable batching (<code>enableBatching</code>=<code>false</code>) concurrently.</p>
+</blockquote>
 <h2><a class="anchor" aria-hidden="true" id="consumer"></a><a href="#consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <p>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="/docs/ko/next/reference-terminology#consumer">consumer</a> by first instantiating a <a href="https://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
  object and passing it a URL for a Pulsar broker (as <a href="#client-configuration">above</a>).</p>
@@ -416,7 +428,7 @@ To set a custom dead letter topic name:
   
 When specifying the dead letter policy while not specifying `ackTimeoutMillis`, you can set the ack timeout to 30000 millisecond.|None `autoUpdatePartitions`|boolean|If `autoUpdatePartitions` is enabled, a consumer subscribes to partition increasement automatically.  
   
-**Note**: this is only for partitioned consumers.|true `replicateSubscriptionState`|boolean|If `replicateSubscriptionState` is enabled, a subscription state is replicated to geo-replicated clusters.|false `negativeAckRedeliveryBackoff`|NegativeAckRedeliveryBackoff|Interface for custom message is negativeAcked policy. You can specify `NegativeAckRedeliveryBackoff` for a consumer.| `NegativeAckRedeliveryExponentialBackoff`
+**Note**: this is only for partitioned consumers.|true `replicateSubscriptionState`|boolean|If `replicateSubscriptionState` is enabled, a subscription state is replicated to geo-replicated clusters.|false `negativeAckRedeliveryBackoff`|RedeliveryBackoff|Interface for custom message is negativeAcked policy. You can specify `RedeliveryBackoff` for a consumer.| `MultiplierRedeliveryBackoff` `ackTimeoutRedeliveryBackoff`|RedeliveryBackoff|Interface for custom message is ackTimeout policy. Yo [...]
 
 You can configure parameters if you do not want to use the default configuration. For a full list, see the Javadoc for the {@inject: javadoc:ConsumerBuilder:/client/org/apache/pulsar/client/api/ConsumerBuilder} class.
 
@@ -485,22 +497,68 @@ consumer.acknowledge(messages)
 &gt;     .build();
 &gt; ```
 
+### Configure chunking
+
+You can limit the maximum number of chunked messages a consumer maintains concurrently by configuring the `maxPendingChunkedMessage` and `autoAckOldestChunkedMessageOnQueueFull` parameters. When the threshold is reached, the consumer drops pending messages by silently acknowledging them or asking the broker to redeliver them later. The `expireTimeOfIncompleteChunkedMessage` parameter decides the time interval to expire incomplete chunks if the consumer fails to receive all chunks of a me [...]
+
+The following is an example of how to configure message chunking.
+
+```java
+Consumer&lt;byte[]&gt; consumer = client.newConsumer()
+        .topic(topic)
+        .subscriptionName(&quot;test&quot;)
+        .autoAckOldestChunkedMessageOnQueueFull(true)
+        .maxPendingChunkedMessage(100)
+        .expireTimeOfIncompleteChunkedMessage(10, TimeUnit.MINUTES)
+        .subscribe();
+```
+
 ### Negative acknowledgment redelivery backoff
 
-The `NegativeAckRedeliveryBackoff` introduces a redelivery backoff mechanism. You can achieve redelivery with different delays by setting `redeliveryCount` of messages.
+The `RedeliveryBackoff` introduces a redelivery backoff mechanism. You can achieve redelivery with different delays by setting `redeliveryCount` of messages.
+
+```java
+Consumer consumer =  client.newConsumer()
+        .topic(&quot;my-topic&quot;)
+        .subscriptionName(&quot;my-subscription&quot;)
+        .negativeAckRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+                .minDelayMs(1000)
+                .maxDelayMs(60 * 1000)
+                .build())
+        .subscribe();
+```
+
+### Acknowledgement timeout redelivery backoff
+
+The `RedeliveryBackoff` introduces a redelivery backoff mechanism. You can redeliver messages with different delays by setting the number of times the messages is retried.
 
 ```java
 Consumer consumer =  client.newConsumer()
         .topic(&quot;my-topic&quot;)
         .subscriptionName(&quot;my-subscription&quot;)
-        .negativeAckRedeliveryBackoff(NegativeAckRedeliveryExponentialBackoff.builder()
-                .minNackTimeMs(1000)
-                .maxNackTimeMs(60 * 1000)
+        .ackTimeout(10, TimeUnit.SECOND)
+        .ackTimeoutRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+                .minDelayMs(1000)
+                .maxDelayMs(60000)
+                .multiplier(2)
                 .build())
         .subscribe();
 ```
 
-&gt; **Note** - The `negativeAckRedeliveryBackoff` does not work with `consumer.negativeAcknowledge(MessageId messageId)` because you are not able to get the redelivery count from the message ID. - If a consumer crashes, it triggers the redelivery of unacked messages. In this case, `NegativeAckRedeliveryBackoff` does not take effect and the messages might get redelivered earlier than the delay time from the backoff.
+The message redelivery behavior should be as follows.
+
+| Redelivery count | Redelivery delay |
+|:---------------- |:---------------- |
+| 1                | 10 + 1 seconds   |
+| 2                | 10 + 2 seconds   |
+| 3                | 10 + 4 seconds   |
+| 4                | 10 + 8 seconds   |
+| 5                | 10 + 16 seconds  |
+| 6                | 10 + 32 seconds  |
+| 7                | 10 + 60 seconds  |
+| 8                | 10 + 60 seconds  |
+
+&gt; **Note** - The `negativeAckRedeliveryBackoff` does not work with `consumer.negativeAcknowledge(MessageId messageId)` because you are not able to get the redelivery count from the message ID. - If a consumer crashes, it triggers the redelivery of unacked messages. In this case, `RedeliveryBackoff` does not take effect and the messages might get redelivered earlier than the delay time from the backoff.
 
 ### 다중 토픽 구독
 
@@ -854,6 +912,40 @@ pulsarClient.newReader()
 
 Total hash range size is 65536, so the max end of the range should be less than or equal to 65535.
 
+## TableView
+
+The TableView interface serves an encapsulated access pattern, providing a continuously updated key-value map view of the compacted topic data. Messages without keys will be ignored.
+
+With TableView, Pulsar clients can fetch all the message updates from a topic and construct a map with the latest values of each key. These values can then be used to build a local cache of data. In addition, you can register consumers with the TableView by specifying a listener to perform a scan of the map and then receive notifications when new messages are received. Consequently, event handling can be triggered to serve use cases, such as event-driven applications and message monitoring.
+
+&gt; **Note:** Each TableView uses one Reader instance per partition, and reads the topic starting from the compacted view by default. It is highly recommended to enable automatic compaction by [configuring the topic compaction policies](/docs/ko/next/cookbooks-compaction#configuring-compaction-to-run-automatically) for the given topic or namespace. More frequent compaction results in shorter startup times because less data is replayed to reconstruct the TableView of the topic.
+
+The following figure illustrates the dynamic construction of a TableView updated with newer values of each key. ![TableView](/docs/assets/tableview.png)
+
+### Configure TableView
+
+The following is an example of how to configure a TableView.
+
+    try (TableView&lt;String&gt; tv = client.newTableViewBuilder(Schema.STRING)
+      .topic(&quot;tableview-test&quot;)
+      .create()) {
+        String value = tv.get(&quot;my-key&quot;);
+        System.out.println(&quot;Key's value: &quot; + value);
+    }
+    
+
+You can use the available parameters in the `loadConf` configuration or related [API](https://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/TableViewBuilder.html) to customize your TableView.
+
+| Name | Type| Required? |
+
+&lt;div style=&quot;width:300px&quot;&gt;
+  Description
+&lt;/div&gt;
+| Default                                                                                                     |
+| ----------------------------------------------------------------------------------------------------------- |
+| `topic` | string | yes | The topic name of the TableView. | N/A                                             |
+| `autoUpdatePartitionInterval` | int | no | The interval to check for newly added partitions. | 60 (seconds) |
+
 ## Schema
 
 In Pulsar, all message data consists of byte arrays &quot;under the hood.&quot; [Message schemas](/docs/ko/next/schema-get-started) enable you to use other types of data when constructing and handling messages (from simple types like strings to more complex, application-specific types). If you construct, say, a [producer](#producer) without specifying a schema, then the producer can only produce messages of type `byte[]`. The following is an example.
@@ -1038,7 +1130,7 @@ PulsarClient client = PulsarClient.builder()
     .authentication(auth)
     .build();
 ```</code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ko/next/client-libraries"><span class="arrow-prev">← </span><span>Overview</span></a><a class="docs-next button" href="/docs/ko/next/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven">Maven</a></li><li><a href="#gradl [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ko/next/client-libraries"><span class="arrow-prev">← </span><span>Overview</span></a><a class="docs-next button" href="/docs/ko/next/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven">Maven</a></li><li><a href="#gradl [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/ko/next/client-libraries-java/index.html b/content/docs/ko/next/client-libraries-java/index.html
index 6fa5c08..0c1e6c6 100644
--- a/content/docs/ko/next/client-libraries-java/index.html
+++ b/content/docs/ko/next/client-libraries-java/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="ko"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar Java client · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="You can use a Pulsar Java client to create the Java [producer](#producer), [consumer](#consumer), and [readers](#reader) of messages and to perform [administrative tasks](/docs/ko [...]
+<!DOCTYPE html><html lang="ko"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar Java client · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="You can use a Pulsar Java client to create the Java [producer](#producer), [consumer](#consumer), [readers](#reader) and [TableView](#tableview) of messages and to perform [admini [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,8 +74,8 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ko" target="_blank" rel="noreferrer noopener">Translate</a><h1 id="__docusaurus" class="postHeaderTitle">Pulsar Java client</h1></header><article><div><span><p>You can use a Pulsar Java client to create the Java <a href="#producer">producer</a>, <a href="#consumer" [...]
-<p>All the methods in <a href="#producer">producer</a>, <a href="#consumer">consumer</a>, and <a href="#reader">reader</a> of a Java client are thread-safe.</p>
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ko" target="_blank" rel="noreferrer noopener">Translate</a><h1 id="__docusaurus" class="postHeaderTitle">Pulsar Java client</h1></header><article><div><span><p>You can use a Pulsar Java client to create the Java <a href="#producer">producer</a>, <a href="#consumer" [...]
+<p>All the methods in <a href="#producer">producer</a>, <a href="#consumer">consumer</a>, <a href="#reader">readers</a> and <a href="#tableview">TableView</a> of a Java client are thread-safe.</p>
 <p>Javadoc for the Pulsar client is divided into two domains by package as follows.</p>
 <table>
 <thead>
@@ -250,7 +250,7 @@ Available options are as follows:</li>
 <ul>
 <li><p><strong>FAIL</strong>: if encryption fails, unencrypted messages fail to send.</p></li>
 <li><p><strong>SEND</strong>: if encryption fails, unencrypted messages are sent. |
-<code>ProducerCryptoFailureAction.FAIL</code> <code>batchingMaxPublishDelayMicros</code>| long|Batching time period of sending messages.|TimeUnit.MILLISECONDS.toMicros(1) <code>batchingMaxMessages</code> |int|The maximum number of messages permitted in a batch.|1000 <code>batchingEnabled</code>| boolean|Enable batching of messages. |true <code>compressionType</code>|CompressionType|Message data compression type used by a producer.<br>
+<code>ProducerCryptoFailureAction.FAIL</code> <code>batchingMaxPublishDelayMicros</code>| long|Batching time period of sending messages.|TimeUnit.MILLISECONDS.toMicros(1) <code>batchingMaxMessages</code> |int|The maximum number of messages permitted in a batch.|1000 <code>batchingEnabled</code>| boolean|Enable batching of messages. |true <code>chunkingEnabled</code> | boolean | Enable chunking of messages. |false <code>compressionType</code>|CompressionType|Message data compression type  [...]
 Available options:</p></li>
 <li><p><a href="https://github.com/lz4/lz4"><code>LZ4</code></a></p></li>
 <li><p><a href="https://zlib.net/"><code>ZLIB</code></a></p>
@@ -289,6 +289,18 @@ You can configure parameters if you do not want to use the default configuration
     .send();
 </code></pre>
 <p>You can terminate the builder chain with <code>sendAsync()</code> and get a future return.</p>
+<h3><a class="anchor" aria-hidden="true" id="enable-chunking"></a><a href="#enable-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>Message <a href="/docs/ko/next/concepts-messaging#chunking">chunking</a> enables Pulsar to process large payload messages by splitting the message into chunks at the producer side and aggregating chunked messages at the consumer side.</p>
+<p>The message chunking feature is OFF by default. The following is an example about how to enable message chunking when creating a producer.</p>
+<pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
+        .topic(topic)
+        .enableChunking(<span class="hljs-keyword">true</span>)
+        .enableBatching(<span class="hljs-keyword">false</span>)
+        .create();
+</code></pre>
+<blockquote>
+<p><strong>Note:</strong> To enable chunking, you need to disable batching (<code>enableBatching</code>=<code>false</code>) concurrently.</p>
+</blockquote>
 <h2><a class="anchor" aria-hidden="true" id="consumer"></a><a href="#consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <p>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="/docs/ko/next/reference-terminology#consumer">consumer</a> by first instantiating a <a href="https://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
  object and passing it a URL for a Pulsar broker (as <a href="#client-configuration">above</a>).</p>
@@ -416,7 +428,7 @@ To set a custom dead letter topic name:
   
 When specifying the dead letter policy while not specifying `ackTimeoutMillis`, you can set the ack timeout to 30000 millisecond.|None `autoUpdatePartitions`|boolean|If `autoUpdatePartitions` is enabled, a consumer subscribes to partition increasement automatically.  
   
-**Note**: this is only for partitioned consumers.|true `replicateSubscriptionState`|boolean|If `replicateSubscriptionState` is enabled, a subscription state is replicated to geo-replicated clusters.|false `negativeAckRedeliveryBackoff`|NegativeAckRedeliveryBackoff|Interface for custom message is negativeAcked policy. You can specify `NegativeAckRedeliveryBackoff` for a consumer.| `NegativeAckRedeliveryExponentialBackoff`
+**Note**: this is only for partitioned consumers.|true `replicateSubscriptionState`|boolean|If `replicateSubscriptionState` is enabled, a subscription state is replicated to geo-replicated clusters.|false `negativeAckRedeliveryBackoff`|RedeliveryBackoff|Interface for custom message is negativeAcked policy. You can specify `RedeliveryBackoff` for a consumer.| `MultiplierRedeliveryBackoff` `ackTimeoutRedeliveryBackoff`|RedeliveryBackoff|Interface for custom message is ackTimeout policy. Yo [...]
 
 You can configure parameters if you do not want to use the default configuration. For a full list, see the Javadoc for the {@inject: javadoc:ConsumerBuilder:/client/org/apache/pulsar/client/api/ConsumerBuilder} class.
 
@@ -485,22 +497,68 @@ consumer.acknowledge(messages)
 &gt;     .build();
 &gt; ```
 
+### Configure chunking
+
+You can limit the maximum number of chunked messages a consumer maintains concurrently by configuring the `maxPendingChunkedMessage` and `autoAckOldestChunkedMessageOnQueueFull` parameters. When the threshold is reached, the consumer drops pending messages by silently acknowledging them or asking the broker to redeliver them later. The `expireTimeOfIncompleteChunkedMessage` parameter decides the time interval to expire incomplete chunks if the consumer fails to receive all chunks of a me [...]
+
+The following is an example of how to configure message chunking.
+
+```java
+Consumer&lt;byte[]&gt; consumer = client.newConsumer()
+        .topic(topic)
+        .subscriptionName(&quot;test&quot;)
+        .autoAckOldestChunkedMessageOnQueueFull(true)
+        .maxPendingChunkedMessage(100)
+        .expireTimeOfIncompleteChunkedMessage(10, TimeUnit.MINUTES)
+        .subscribe();
+```
+
 ### Negative acknowledgment redelivery backoff
 
-The `NegativeAckRedeliveryBackoff` introduces a redelivery backoff mechanism. You can achieve redelivery with different delays by setting `redeliveryCount` of messages.
+The `RedeliveryBackoff` introduces a redelivery backoff mechanism. You can achieve redelivery with different delays by setting `redeliveryCount` of messages.
+
+```java
+Consumer consumer =  client.newConsumer()
+        .topic(&quot;my-topic&quot;)
+        .subscriptionName(&quot;my-subscription&quot;)
+        .negativeAckRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+                .minDelayMs(1000)
+                .maxDelayMs(60 * 1000)
+                .build())
+        .subscribe();
+```
+
+### Acknowledgement timeout redelivery backoff
+
+The `RedeliveryBackoff` introduces a redelivery backoff mechanism. You can redeliver messages with different delays by setting the number of times the messages is retried.
 
 ```java
 Consumer consumer =  client.newConsumer()
         .topic(&quot;my-topic&quot;)
         .subscriptionName(&quot;my-subscription&quot;)
-        .negativeAckRedeliveryBackoff(NegativeAckRedeliveryExponentialBackoff.builder()
-                .minNackTimeMs(1000)
-                .maxNackTimeMs(60 * 1000)
+        .ackTimeout(10, TimeUnit.SECOND)
+        .ackTimeoutRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+                .minDelayMs(1000)
+                .maxDelayMs(60000)
+                .multiplier(2)
                 .build())
         .subscribe();
 ```
 
-&gt; **Note** - The `negativeAckRedeliveryBackoff` does not work with `consumer.negativeAcknowledge(MessageId messageId)` because you are not able to get the redelivery count from the message ID. - If a consumer crashes, it triggers the redelivery of unacked messages. In this case, `NegativeAckRedeliveryBackoff` does not take effect and the messages might get redelivered earlier than the delay time from the backoff.
+The message redelivery behavior should be as follows.
+
+| Redelivery count | Redelivery delay |
+|:---------------- |:---------------- |
+| 1                | 10 + 1 seconds   |
+| 2                | 10 + 2 seconds   |
+| 3                | 10 + 4 seconds   |
+| 4                | 10 + 8 seconds   |
+| 5                | 10 + 16 seconds  |
+| 6                | 10 + 32 seconds  |
+| 7                | 10 + 60 seconds  |
+| 8                | 10 + 60 seconds  |
+
+&gt; **Note** - The `negativeAckRedeliveryBackoff` does not work with `consumer.negativeAcknowledge(MessageId messageId)` because you are not able to get the redelivery count from the message ID. - If a consumer crashes, it triggers the redelivery of unacked messages. In this case, `RedeliveryBackoff` does not take effect and the messages might get redelivered earlier than the delay time from the backoff.
 
 ### 다중 토픽 구독
 
@@ -854,6 +912,40 @@ pulsarClient.newReader()
 
 Total hash range size is 65536, so the max end of the range should be less than or equal to 65535.
 
+## TableView
+
+The TableView interface serves an encapsulated access pattern, providing a continuously updated key-value map view of the compacted topic data. Messages without keys will be ignored.
+
+With TableView, Pulsar clients can fetch all the message updates from a topic and construct a map with the latest values of each key. These values can then be used to build a local cache of data. In addition, you can register consumers with the TableView by specifying a listener to perform a scan of the map and then receive notifications when new messages are received. Consequently, event handling can be triggered to serve use cases, such as event-driven applications and message monitoring.
+
+&gt; **Note:** Each TableView uses one Reader instance per partition, and reads the topic starting from the compacted view by default. It is highly recommended to enable automatic compaction by [configuring the topic compaction policies](/docs/ko/next/cookbooks-compaction#configuring-compaction-to-run-automatically) for the given topic or namespace. More frequent compaction results in shorter startup times because less data is replayed to reconstruct the TableView of the topic.
+
+The following figure illustrates the dynamic construction of a TableView updated with newer values of each key. ![TableView](/docs/assets/tableview.png)
+
+### Configure TableView
+
+The following is an example of how to configure a TableView.
+
+    try (TableView&lt;String&gt; tv = client.newTableViewBuilder(Schema.STRING)
+      .topic(&quot;tableview-test&quot;)
+      .create()) {
+        String value = tv.get(&quot;my-key&quot;);
+        System.out.println(&quot;Key's value: &quot; + value);
+    }
+    
+
+You can use the available parameters in the `loadConf` configuration or related [API](https://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/TableViewBuilder.html) to customize your TableView.
+
+| Name | Type| Required? |
+
+&lt;div style=&quot;width:300px&quot;&gt;
+  Description
+&lt;/div&gt;
+| Default                                                                                                     |
+| ----------------------------------------------------------------------------------------------------------- |
+| `topic` | string | yes | The topic name of the TableView. | N/A                                             |
+| `autoUpdatePartitionInterval` | int | no | The interval to check for newly added partitions. | 60 (seconds) |
+
 ## Schema
 
 In Pulsar, all message data consists of byte arrays &quot;under the hood.&quot; [Message schemas](/docs/ko/next/schema-get-started) enable you to use other types of data when constructing and handling messages (from simple types like strings to more complex, application-specific types). If you construct, say, a [producer](#producer) without specifying a schema, then the producer can only produce messages of type `byte[]`. The following is an example.
@@ -1038,7 +1130,7 @@ PulsarClient client = PulsarClient.builder()
     .authentication(auth)
     .build();
 ```</code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ko/next/client-libraries"><span class="arrow-prev">← </span><span>Overview</span></a><a class="docs-next button" href="/docs/ko/next/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven">Maven</a></li><li><a href="#gradl [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ko/next/client-libraries"><span class="arrow-prev">← </span><span>Overview</span></a><a class="docs-next button" href="/docs/ko/next/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven">Maven</a></li><li><a href="#gradl [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/ko/next/client-libraries-websocket.html b/content/docs/ko/next/client-libraries-websocket.html
index e9852d1..70fe63d 100644
--- a/content/docs/ko/next/client-libraries-websocket.html
+++ b/content/docs/ko/next/client-libraries-websocket.html
@@ -92,12 +92,12 @@
 <h3><a class="anchor" aria-hidden="true" id="as-a-separate-component"></a><a href="#as-a-separate-component" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
 <p>In this mode, the WebSocket service will be run from a Pulsar <a href="/docs/ko/next/reference-terminology#broker">broker</a> as a separate service. Configuration for this mode is handled in the <a href="/docs/ko/next/reference-configuration#websocket"><code>conf/websocket.conf</code></a> configuration file. You'll need to set <em>at least</em> the following parameters:</p>
 <ul>
-<li><a href="/docs/ko/next/reference-configuration#websocket-configurationStoreServers"><code>configurationStoreServers</code></a></li>
+<li><a href="/docs/ko/next/reference-configuration#websocket"><code>configurationMetadataStoreUrl</code></a></li>
 <li><a href="/docs/ko/next/reference-configuration#websocket-webServicePort"><code>webServicePort</code></a></li>
 <li><a href="/docs/ko/next/reference-configuration#websocket-clusterName"><code>clusterName</code></a></li>
 </ul>
 <p>Here's an example:</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>
+<pre><code class="hljs css language-properties"><span class="hljs-attr">configurationMetadataStoreUrl</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>
 </code></pre>
diff --git a/content/docs/ko/next/client-libraries-websocket/index.html b/content/docs/ko/next/client-libraries-websocket/index.html
index e9852d1..70fe63d 100644
--- a/content/docs/ko/next/client-libraries-websocket/index.html
+++ b/content/docs/ko/next/client-libraries-websocket/index.html
@@ -92,12 +92,12 @@
 <h3><a class="anchor" aria-hidden="true" id="as-a-separate-component"></a><a href="#as-a-separate-component" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
 <p>In this mode, the WebSocket service will be run from a Pulsar <a href="/docs/ko/next/reference-terminology#broker">broker</a> as a separate service. Configuration for this mode is handled in the <a href="/docs/ko/next/reference-configuration#websocket"><code>conf/websocket.conf</code></a> configuration file. You'll need to set <em>at least</em> the following parameters:</p>
 <ul>
-<li><a href="/docs/ko/next/reference-configuration#websocket-configurationStoreServers"><code>configurationStoreServers</code></a></li>
+<li><a href="/docs/ko/next/reference-configuration#websocket"><code>configurationMetadataStoreUrl</code></a></li>
 <li><a href="/docs/ko/next/reference-configuration#websocket-webServicePort"><code>webServicePort</code></a></li>
 <li><a href="/docs/ko/next/reference-configuration#websocket-clusterName"><code>clusterName</code></a></li>
 </ul>
 <p>Here's an example:</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>
+<pre><code class="hljs css language-properties"><span class="hljs-attr">configurationMetadataStoreUrl</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>
 </code></pre>
diff --git a/content/docs/ko/next/client-libraries.html b/content/docs/ko/next/client-libraries.html
index 1ab738c..3a6a8b9 100644
--- a/content/docs/ko/next/client-libraries.html
+++ b/content/docs/ko/next/client-libraries.html
@@ -85,7 +85,7 @@
 <li><a href="/docs/ko/next/client-libraries-dotnet">C# client</a></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="feature-matrix"></a><a href="#feature-matrix" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>Pulsar client feature matrix for different languages is listed on <a href="https://github.com/apache/pulsar/wiki/PIP-108%3A-Pulsar-Feature-Matrix-%28Client-and-Function%29">Pulsar Feature Matrix (Client and Function)</a> page.</p>
+<p>Pulsar client feature matrix for different languages is listed on <a href="https://docs.google.com/spreadsheets/d/1YHYTkIXR8-Ql103u-IMI18TXLlGStK8uJjDsOOA0T20/edit#gid=1784579914">Pulsar Feature Matrix (Client and Function)</a> page.</p>
 <h2><a class="anchor" aria-hidden="true" id="third-party-clients"></a><a href="#third-party-clients" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
 <p>공식 출시 된 client 외에도 Pulsar client 개발에 대한 여러 프로젝트가 다른 언어로 제공됩니다.</p>
 <blockquote>
diff --git a/content/docs/ko/next/client-libraries/index.html b/content/docs/ko/next/client-libraries/index.html
index 1ab738c..3a6a8b9 100644
--- a/content/docs/ko/next/client-libraries/index.html
+++ b/content/docs/ko/next/client-libraries/index.html
@@ -85,7 +85,7 @@
 <li><a href="/docs/ko/next/client-libraries-dotnet">C# client</a></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="feature-matrix"></a><a href="#feature-matrix" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>Pulsar client feature matrix for different languages is listed on <a href="https://github.com/apache/pulsar/wiki/PIP-108%3A-Pulsar-Feature-Matrix-%28Client-and-Function%29">Pulsar Feature Matrix (Client and Function)</a> page.</p>
+<p>Pulsar client feature matrix for different languages is listed on <a href="https://docs.google.com/spreadsheets/d/1YHYTkIXR8-Ql103u-IMI18TXLlGStK8uJjDsOOA0T20/edit#gid=1784579914">Pulsar Feature Matrix (Client and Function)</a> page.</p>
 <h2><a class="anchor" aria-hidden="true" id="third-party-clients"></a><a href="#third-party-clients" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
 <p>공식 출시 된 client 외에도 Pulsar client 개발에 대한 여러 프로젝트가 다른 언어로 제공됩니다.</p>
 <blockquote>
diff --git a/content/docs/ko/next/concepts-architecture-overview.html b/content/docs/ko/next/concepts-architecture-overview.html
index 0b41155..907acfc 100644
--- a/content/docs/ko/next/concepts-architecture-overview.html
+++ b/content/docs/ko/next/concepts-architecture-overview.html
@@ -109,6 +109,9 @@
 </blockquote>
 <h2><a class="anchor" aria-hidden="true" id="metadata-store"></a><a href="#metadata-store" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>The Pulsar metadata store maintains all the metadata of a Pulsar cluster, such as topic metadata, schema, broker load data, and so on. Pulsar uses <a href="https://zookeeper.apache.org/">Apache ZooKeeper</a> for metadata storage, cluster configuration, and coordination. The Pulsar metadata store can be deployed on a separate ZooKeeper cluster or deployed on an existing ZooKeeper cluster. You can use one ZooKeeper cluster for both Pulsar metadata store and <a href="https://bookkeeper.a [...]
+<blockquote>
+<p>Pulsar also supports more metadata backend services, including <a href="https://etcd.io/">ETCD</a> and <a href="http://rocksdb.org/">RocksDB</a> (for standalone Pulsar only).</p>
+</blockquote>
 <p>In a Pulsar instance:</p>
 <ul>
 <li>구성(configuration) 저장소인 쿼럼(Zookeeper) 은 테넌트, 네임 스페이스 및 전체적으로 일관성이 필요한 다른 엔터티에 대한 구성을 저장합니다.</li>
@@ -163,9 +166,10 @@
 <p>성능 및 내결함성을 위해 원하는 만큼 Pulsar proxy 인스턴스를 실행 할 수 있습니다.</p>
 </blockquote>
 <p>구조적으로 Pulsar proxy는 ZooKeeper에서 필요한 모든 정보를 얻습니다. 시스템에서 프록시를 시작할 때, 각 인스턴스 클러스터와 전체 구성 저장소 클러스터에 ZooKeeper 연결 문자열만 제공하면 됩니다. Here's an example:</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
+<pre><code class="hljs css language-bash">$ <span class="hljs-built_in">cd</span> /path/to/pulsar/directory
+$ bin/pulsar proxy \
+  --metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181 \
+  --configuration-metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181
 </code></pre>
 <blockquote>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-proxy-docs"></a><a href="#pulsar-proxy-docs" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
diff --git a/content/docs/ko/next/concepts-architecture-overview/index.html b/content/docs/ko/next/concepts-architecture-overview/index.html
index 0b41155..907acfc 100644
--- a/content/docs/ko/next/concepts-architecture-overview/index.html
+++ b/content/docs/ko/next/concepts-architecture-overview/index.html
@@ -109,6 +109,9 @@
 </blockquote>
 <h2><a class="anchor" aria-hidden="true" id="metadata-store"></a><a href="#metadata-store" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>The Pulsar metadata store maintains all the metadata of a Pulsar cluster, such as topic metadata, schema, broker load data, and so on. Pulsar uses <a href="https://zookeeper.apache.org/">Apache ZooKeeper</a> for metadata storage, cluster configuration, and coordination. The Pulsar metadata store can be deployed on a separate ZooKeeper cluster or deployed on an existing ZooKeeper cluster. You can use one ZooKeeper cluster for both Pulsar metadata store and <a href="https://bookkeeper.a [...]
+<blockquote>
+<p>Pulsar also supports more metadata backend services, including <a href="https://etcd.io/">ETCD</a> and <a href="http://rocksdb.org/">RocksDB</a> (for standalone Pulsar only).</p>
+</blockquote>
 <p>In a Pulsar instance:</p>
 <ul>
 <li>구성(configuration) 저장소인 쿼럼(Zookeeper) 은 테넌트, 네임 스페이스 및 전체적으로 일관성이 필요한 다른 엔터티에 대한 구성을 저장합니다.</li>
@@ -163,9 +166,10 @@
 <p>성능 및 내결함성을 위해 원하는 만큼 Pulsar proxy 인스턴스를 실행 할 수 있습니다.</p>
 </blockquote>
 <p>구조적으로 Pulsar proxy는 ZooKeeper에서 필요한 모든 정보를 얻습니다. 시스템에서 프록시를 시작할 때, 각 인스턴스 클러스터와 전체 구성 저장소 클러스터에 ZooKeeper 연결 문자열만 제공하면 됩니다. Here's an example:</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
+<pre><code class="hljs css language-bash">$ <span class="hljs-built_in">cd</span> /path/to/pulsar/directory
+$ bin/pulsar proxy \
+  --metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181 \
+  --configuration-metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181
 </code></pre>
 <blockquote>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-proxy-docs"></a><a href="#pulsar-proxy-docs" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
diff --git a/content/docs/ko/next/concepts-messaging.html b/content/docs/ko/next/concepts-messaging.html
index f835e85..c713f4d 100644
--- a/content/docs/ko/next/concepts-messaging.html
+++ b/content/docs/ko/next/concepts-messaging.html
@@ -149,16 +149,26 @@ nettyMaxFrameSizeBytes=5253120
 <p>To avoid redelivering acknowledged messages in a batch to the consumer, Pulsar introduces batch index acknowledgement since Pulsar 2.6.0. When batch index acknowledgement is enabled, the consumer filters out the batch index that has been acknowledged and sends the batch index acknowledgement request to the broker. The broker maintains the batch index acknowledgement status and tracks the acknowledgement status of each batch index to avoid dispatching acknowledged messages to the consu [...]
 <p>By default, batch index acknowledgement is disabled (<code>acknowledgmentAtBatchIndexLevelEnabled=false</code>). You can enable batch index acknowledgement by setting the <code>acknowledgmentAtBatchIndexLevelEnabled</code> parameter to <code>true</code> at the broker side. Enabling batch index acknowledgement results in more memory overheads.</p>
 <h3><a class="anchor" aria-hidden="true" id="chunking"></a><a href="#chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 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>Before you enable chunking, read the following instructions. - Batching and chunking cannot be enabled simultaneously. To enable chunking, you must disable batching in advance. - Chunking is only supported for persisted topics. - Chunking is only supported for Exclusive and Failover subscription types.</p>
-<p>When chunking is enabled (<code>chunkingEnabled=true</code>), if the message size is greater than the allowed maximum publish-payload size, the producer splits the original message into chunked messages and publishes them with chunked metadata to the broker separately and in order. At the broker side, the chunked messages are stored in the managed-ledger in the same way as that of ordinary messages. The only difference is that the consumer needs to buffer the chunked messages and comb [...]
-<p>The consumer consumes the chunked messages and buffers them until the consumer receives all the chunks of a message. And then the consumer stitches chunked messages together and places them into the receiver-queue. Clients consume messages from the receiver-queue. Once the consumer consumes the entire large message and acknowledges it, the consumer internally sends acknowledgement of all the chunk messages associated to that large message. You can set the <code>maxPendingChunkedMessag [...]
-<p>The broker does not require any changes to support chunking for non-shared subscription. The broker only uses <code>chunkedMessageRate</code> to record chunked message rate on the topic.</p>
-<h4><a class="anchor" aria-hidden="true" id="handle-chunked-messages-with-one-producer-and-one-ordered-consumer"></a><a href="#handle-chunked-messages-with-one-producer-and-one-ordered-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98  [...]
-<p>As shown in the following figure, when a topic has one producer which publishes large message payload in chunked messages along with regular non-chunked messages. The producer publishes message M1 in three chunks M1-C1, M1-C2 and M1-C3. The broker stores all the three chunked messages in the managed-ledger and dispatches to the ordered (exclusive/failover) consumer in the same order. The consumer buffers all the chunked messages in memory until it receives all the chunked messages, co [...]
+<p>Message chunking enables Pulsar to process large payload messages by splitting the message into chunks at the producer side and aggregating chunked messages at the consumer side.</p>
+<p>With message chunking enabled, when the size of a message exceeds the allowed maximum payload size (the <code>maxMessageSize</code> parameter of broker), the workflow of messaging is as follows: 1. The producer splits the original message into chunked messages and publishes them with chunked metadata to the broker separately and in order. 2. The broker stores the chunked messages in one managed-ledger in the same way as that of ordinary messages, and it uses the <code>chunkedMessageRa [...]
+<p><strong>Limitations:</strong> - Chunking is only available for persisted topics. - Chunking is only available for the exclusive and failover subscription types. - Chunking cannot be enabled simultaneously with batching.</p>
+<h4><a class="anchor" aria-hidden="true" id="handle-consecutive-chunked-messages-with-one-ordered-consumer"></a><a href="#handle-consecutive-chunked-messages-with-one-ordered-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-. [...]
+<p>The following figure shows a topic with one producer which publishes a large message payload in chunked messages along with regular non-chunked messages. The producer publishes message M1 in three chunks labeled M1-C1, M1-C2 and M1-C3. The broker stores all the three chunked messages in the managed-ledger and dispatches them to the ordered (exclusive/failover) consumer in the same order. The consumer buffers all the chunked messages in memory until it receives all the chunked messages [...]
 <p><img src="/docs/assets/chunking-01.png" alt=""></p>
-<h4><a class="anchor" aria-hidden="true" id="handle-chunked-messages-with-multiple-producers-and-one-ordered-consumer"></a><a href="#handle-chunked-messages-with-multiple-producers-and-one-ordered-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C1 [...]
-<p>When multiple publishers publish chunked messages into a single topic, the broker stores all the chunked messages coming from different publishers in the same managed-ledger. As shown below, Producer 1 publishes message M1 in three chunks M1-C1, M1-C2 and M1-C3. Producer 2 publishes message M2 in three chunks M2-C1, M2-C2 and M2-C3. All chunked messages of the specific message are still in order but might not be consecutive in the managed-ledger. This brings some memory pressure to th [...]
+<h4><a class="anchor" aria-hidden="true" id="handle-interwoven-chunked-messages-with-one-ordered-consumer"></a><a href="#handle-interwoven-chunked-messages-with-one-ordered-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 [...]
+<p>When multiple producers publish chunked messages into a single topic, the broker stores all the chunked messages coming from different producers in the same managed-ledger. The chunked messages in the managed-ledger can be interwoven with each other. As shown below, Producer 1 publishes message M1 in three chunks M1-C1, M1-C2 and M1-C3. Producer 2 publishes message M2 in three chunks M2-C1, M2-C2 and M2-C3. All chunked messages of the specific message are still in order but might not  [...]
 <p><img src="/docs/assets/chunking-02.png" alt=""></p>
+<blockquote>
+<p><strong>Note</strong>  <br>
+In this case, interwoven chunked messages may bring some memory pressure to the consumer because the consumer keeps a separate buffer for each large message to aggregate all its chunks in one message. You can limit the maximum number of chunked messages a consumer maintains concurrently by configuring the <code>maxPendingChunkedMessage</code> parameter. When the threshold is reached, the consumer drops pending messages by silently acknowledging them or asking the broker to redeliver them [...]
+</blockquote>
+<h4><a class="anchor" aria-hidden="true" id="enable-message-chunking"></a><a href="#enable-message-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 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><strong>Prerequisite:</strong> Disable batching by setting the <code>enableBatching</code> parameter to <code>false</code>.</p>
+<p>The message chunking feature is OFF by default. To enable message chunking, set the <code>chunkingEnabled</code> parameter to <code>true</code> when creating a producer.</p>
+<blockquote>
+<p><strong>Note</strong>  <br>
+If the consumer fails to receive all chunks of a message within a specified time period, it expires incomplete chunks. The default value is 1 minute. For more information about the <code>expireTimeOfIncompleteChunkedMessage</code> parameter, refer to <a href="https://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/">org.apache.pulsar.client.api</a>.</p>
+</blockquote>
 <h2><a class="anchor" aria-hidden="true" id="consumers"></a><a href="#consumers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
 <p>A consumer is a process that attaches to a topic via a subscription and then receives messages.</p>
 <p>소비자는 메시지를 얻기 위해 <a href="/docs/ko/next/develop-binary-protocol#flow-control">흐름 승인 요청</a>을 브로커에게 보낸다. 소비자 측에는 브로커로부터 푸시되는 메시지를 받기 위한 큐가 있다. You can configure the queue size with the <a href="/docs/ko/next/client-libraries-java#configure-consumer"><code>receiverQueueSize</code></a> parameter. The default size is <code>1000</code>). 매번 <code>consumer.receive()</code>가 호출될 때마다 메시지가 버퍼로부터 적출된다.</p>
@@ -224,14 +234,38 @@ If batching is enabled, all messages in one batch are redelivered to the consume
 <p>It happens sometimes that consumers fail to process messages successfully. In this case, you can use <a href="#negative-acknowledgement">negative acknowledgement</a> to redeliver the messages after consumption failures. For the Shared subscription type, the messages are redelivered to other consumers; for other subscription types, the messages are redelivered to the same consumer.</p>
 <p>But this is not flexible enough. A better way is to use the <strong>redelivery backoff mechanism</strong>. You can redeliver messages with different delays by setting the number of times the messages are retried.</p>
 <p>Use the following API to enable <code>Negative Redelivery Backoff</code>.</p>
-<pre><code class="hljs css language-java">consumer.negativeAckRedeliveryBackoff(NegativeAckRedeliveryExponentialBackoff.builder()
-        .minNackTimeMs(<span class="hljs-number">1000</span>)
-        .maxNackTimeMs(<span class="hljs-number">60</span> * <span class="hljs-number">1000</span>)
+<pre><code class="hljs css language-java">consumer.negativeAckRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+        .minDelayMs(<span class="hljs-number">1000</span>)
+        .maxDelayMs(<span class="hljs-number">60</span> * <span class="hljs-number">1000</span>)
         .build())
 </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- [...]
 <p>The acknowledgement timeout mechanism allows you to set a time range during which the client tracks the unacknowledged messages. After this acknowledgement timeout (<code>ackTimeout</code>) period, the client sends <code>redeliver unacknowledged messages</code> request to the broker, thus the broker resends the unacknowledged messages to the consumer.</p>
 <p>You can configure the acknowledgement timeout mechanism to redeliver the message if it is not acknowledged after <code>ackTimeout</code> or to execute a timer task to check the acknowledgement timeout messages during every <code>ackTimeoutTickTime</code> period.</p>
+<p>You can also use the redelivery backoff mechanism, redeliver messages with different delays by setting the number of times the messages is retried.</p>
+<p>If you want to use redelivery backoff, you can use the following API.</p>
+<pre><code class="hljs css language-java">consumer.ackTimeout(<span class="hljs-number">10</span>, TimeUnit.SECOND)
+        .ackTimeoutRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+        .minDelayMs(<span class="hljs-number">1000</span>)
+        .maxDelayMs(<span class="hljs-number">60000</span>)
+        .multiplier(<span class="hljs-number">2</span>).build())
+</code></pre>
+<p>The message redelivery behavior should be as follows.</p>
+<table>
+<thead>
+<tr><th style="text-align:left">Redelivery count</th><th style="text-align:left">Redelivery delay</th></tr>
+</thead>
+<tbody>
+<tr><td style="text-align:left">1</td><td style="text-align:left">10 + 1 seconds</td></tr>
+<tr><td style="text-align:left">2</td><td style="text-align:left">10 + 2 seconds</td></tr>
+<tr><td style="text-align:left">3</td><td style="text-align:left">10 + 4 seconds</td></tr>
+<tr><td style="text-align:left">4</td><td style="text-align:left">10 + 8 seconds</td></tr>
+<tr><td style="text-align:left">5</td><td style="text-align:left">10 + 16 seconds</td></tr>
+<tr><td style="text-align:left">6</td><td style="text-align:left">10 + 32 seconds</td></tr>
+<tr><td style="text-align:left">7</td><td style="text-align:left">10 + 60 seconds</td></tr>
+<tr><td style="text-align:left">8</td><td style="text-align:left">10 + 60 seconds</td></tr>
+</tbody>
+</table>
 <blockquote>
 <p><strong>Note</strong></p>
 <ul>
diff --git a/content/docs/ko/next/concepts-messaging/index.html b/content/docs/ko/next/concepts-messaging/index.html
index f835e85..c713f4d 100644
--- a/content/docs/ko/next/concepts-messaging/index.html
+++ b/content/docs/ko/next/concepts-messaging/index.html
@@ -149,16 +149,26 @@ nettyMaxFrameSizeBytes=5253120
 <p>To avoid redelivering acknowledged messages in a batch to the consumer, Pulsar introduces batch index acknowledgement since Pulsar 2.6.0. When batch index acknowledgement is enabled, the consumer filters out the batch index that has been acknowledged and sends the batch index acknowledgement request to the broker. The broker maintains the batch index acknowledgement status and tracks the acknowledgement status of each batch index to avoid dispatching acknowledged messages to the consu [...]
 <p>By default, batch index acknowledgement is disabled (<code>acknowledgmentAtBatchIndexLevelEnabled=false</code>). You can enable batch index acknowledgement by setting the <code>acknowledgmentAtBatchIndexLevelEnabled</code> parameter to <code>true</code> at the broker side. Enabling batch index acknowledgement results in more memory overheads.</p>
 <h3><a class="anchor" aria-hidden="true" id="chunking"></a><a href="#chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 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>Before you enable chunking, read the following instructions. - Batching and chunking cannot be enabled simultaneously. To enable chunking, you must disable batching in advance. - Chunking is only supported for persisted topics. - Chunking is only supported for Exclusive and Failover subscription types.</p>
-<p>When chunking is enabled (<code>chunkingEnabled=true</code>), if the message size is greater than the allowed maximum publish-payload size, the producer splits the original message into chunked messages and publishes them with chunked metadata to the broker separately and in order. At the broker side, the chunked messages are stored in the managed-ledger in the same way as that of ordinary messages. The only difference is that the consumer needs to buffer the chunked messages and comb [...]
-<p>The consumer consumes the chunked messages and buffers them until the consumer receives all the chunks of a message. And then the consumer stitches chunked messages together and places them into the receiver-queue. Clients consume messages from the receiver-queue. Once the consumer consumes the entire large message and acknowledges it, the consumer internally sends acknowledgement of all the chunk messages associated to that large message. You can set the <code>maxPendingChunkedMessag [...]
-<p>The broker does not require any changes to support chunking for non-shared subscription. The broker only uses <code>chunkedMessageRate</code> to record chunked message rate on the topic.</p>
-<h4><a class="anchor" aria-hidden="true" id="handle-chunked-messages-with-one-producer-and-one-ordered-consumer"></a><a href="#handle-chunked-messages-with-one-producer-and-one-ordered-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98  [...]
-<p>As shown in the following figure, when a topic has one producer which publishes large message payload in chunked messages along with regular non-chunked messages. The producer publishes message M1 in three chunks M1-C1, M1-C2 and M1-C3. The broker stores all the three chunked messages in the managed-ledger and dispatches to the ordered (exclusive/failover) consumer in the same order. The consumer buffers all the chunked messages in memory until it receives all the chunked messages, co [...]
+<p>Message chunking enables Pulsar to process large payload messages by splitting the message into chunks at the producer side and aggregating chunked messages at the consumer side.</p>
+<p>With message chunking enabled, when the size of a message exceeds the allowed maximum payload size (the <code>maxMessageSize</code> parameter of broker), the workflow of messaging is as follows: 1. The producer splits the original message into chunked messages and publishes them with chunked metadata to the broker separately and in order. 2. The broker stores the chunked messages in one managed-ledger in the same way as that of ordinary messages, and it uses the <code>chunkedMessageRa [...]
+<p><strong>Limitations:</strong> - Chunking is only available for persisted topics. - Chunking is only available for the exclusive and failover subscription types. - Chunking cannot be enabled simultaneously with batching.</p>
+<h4><a class="anchor" aria-hidden="true" id="handle-consecutive-chunked-messages-with-one-ordered-consumer"></a><a href="#handle-consecutive-chunked-messages-with-one-ordered-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-. [...]
+<p>The following figure shows a topic with one producer which publishes a large message payload in chunked messages along with regular non-chunked messages. The producer publishes message M1 in three chunks labeled M1-C1, M1-C2 and M1-C3. The broker stores all the three chunked messages in the managed-ledger and dispatches them to the ordered (exclusive/failover) consumer in the same order. The consumer buffers all the chunked messages in memory until it receives all the chunked messages [...]
 <p><img src="/docs/assets/chunking-01.png" alt=""></p>
-<h4><a class="anchor" aria-hidden="true" id="handle-chunked-messages-with-multiple-producers-and-one-ordered-consumer"></a><a href="#handle-chunked-messages-with-multiple-producers-and-one-ordered-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C1 [...]
-<p>When multiple publishers publish chunked messages into a single topic, the broker stores all the chunked messages coming from different publishers in the same managed-ledger. As shown below, Producer 1 publishes message M1 in three chunks M1-C1, M1-C2 and M1-C3. Producer 2 publishes message M2 in three chunks M2-C1, M2-C2 and M2-C3. All chunked messages of the specific message are still in order but might not be consecutive in the managed-ledger. This brings some memory pressure to th [...]
+<h4><a class="anchor" aria-hidden="true" id="handle-interwoven-chunked-messages-with-one-ordered-consumer"></a><a href="#handle-interwoven-chunked-messages-with-one-ordered-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 [...]
+<p>When multiple producers publish chunked messages into a single topic, the broker stores all the chunked messages coming from different producers in the same managed-ledger. The chunked messages in the managed-ledger can be interwoven with each other. As shown below, Producer 1 publishes message M1 in three chunks M1-C1, M1-C2 and M1-C3. Producer 2 publishes message M2 in three chunks M2-C1, M2-C2 and M2-C3. All chunked messages of the specific message are still in order but might not  [...]
 <p><img src="/docs/assets/chunking-02.png" alt=""></p>
+<blockquote>
+<p><strong>Note</strong>  <br>
+In this case, interwoven chunked messages may bring some memory pressure to the consumer because the consumer keeps a separate buffer for each large message to aggregate all its chunks in one message. You can limit the maximum number of chunked messages a consumer maintains concurrently by configuring the <code>maxPendingChunkedMessage</code> parameter. When the threshold is reached, the consumer drops pending messages by silently acknowledging them or asking the broker to redeliver them [...]
+</blockquote>
+<h4><a class="anchor" aria-hidden="true" id="enable-message-chunking"></a><a href="#enable-message-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 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><strong>Prerequisite:</strong> Disable batching by setting the <code>enableBatching</code> parameter to <code>false</code>.</p>
+<p>The message chunking feature is OFF by default. To enable message chunking, set the <code>chunkingEnabled</code> parameter to <code>true</code> when creating a producer.</p>
+<blockquote>
+<p><strong>Note</strong>  <br>
+If the consumer fails to receive all chunks of a message within a specified time period, it expires incomplete chunks. The default value is 1 minute. For more information about the <code>expireTimeOfIncompleteChunkedMessage</code> parameter, refer to <a href="https://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/">org.apache.pulsar.client.api</a>.</p>
+</blockquote>
 <h2><a class="anchor" aria-hidden="true" id="consumers"></a><a href="#consumers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
 <p>A consumer is a process that attaches to a topic via a subscription and then receives messages.</p>
 <p>소비자는 메시지를 얻기 위해 <a href="/docs/ko/next/develop-binary-protocol#flow-control">흐름 승인 요청</a>을 브로커에게 보낸다. 소비자 측에는 브로커로부터 푸시되는 메시지를 받기 위한 큐가 있다. You can configure the queue size with the <a href="/docs/ko/next/client-libraries-java#configure-consumer"><code>receiverQueueSize</code></a> parameter. The default size is <code>1000</code>). 매번 <code>consumer.receive()</code>가 호출될 때마다 메시지가 버퍼로부터 적출된다.</p>
@@ -224,14 +234,38 @@ If batching is enabled, all messages in one batch are redelivered to the consume
 <p>It happens sometimes that consumers fail to process messages successfully. In this case, you can use <a href="#negative-acknowledgement">negative acknowledgement</a> to redeliver the messages after consumption failures. For the Shared subscription type, the messages are redelivered to other consumers; for other subscription types, the messages are redelivered to the same consumer.</p>
 <p>But this is not flexible enough. A better way is to use the <strong>redelivery backoff mechanism</strong>. You can redeliver messages with different delays by setting the number of times the messages are retried.</p>
 <p>Use the following API to enable <code>Negative Redelivery Backoff</code>.</p>
-<pre><code class="hljs css language-java">consumer.negativeAckRedeliveryBackoff(NegativeAckRedeliveryExponentialBackoff.builder()
-        .minNackTimeMs(<span class="hljs-number">1000</span>)
-        .maxNackTimeMs(<span class="hljs-number">60</span> * <span class="hljs-number">1000</span>)
+<pre><code class="hljs css language-java">consumer.negativeAckRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+        .minDelayMs(<span class="hljs-number">1000</span>)
+        .maxDelayMs(<span class="hljs-number">60</span> * <span class="hljs-number">1000</span>)
         .build())
 </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- [...]
 <p>The acknowledgement timeout mechanism allows you to set a time range during which the client tracks the unacknowledged messages. After this acknowledgement timeout (<code>ackTimeout</code>) period, the client sends <code>redeliver unacknowledged messages</code> request to the broker, thus the broker resends the unacknowledged messages to the consumer.</p>
 <p>You can configure the acknowledgement timeout mechanism to redeliver the message if it is not acknowledged after <code>ackTimeout</code> or to execute a timer task to check the acknowledgement timeout messages during every <code>ackTimeoutTickTime</code> period.</p>
+<p>You can also use the redelivery backoff mechanism, redeliver messages with different delays by setting the number of times the messages is retried.</p>
+<p>If you want to use redelivery backoff, you can use the following API.</p>
+<pre><code class="hljs css language-java">consumer.ackTimeout(<span class="hljs-number">10</span>, TimeUnit.SECOND)
+        .ackTimeoutRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+        .minDelayMs(<span class="hljs-number">1000</span>)
+        .maxDelayMs(<span class="hljs-number">60000</span>)
+        .multiplier(<span class="hljs-number">2</span>).build())
+</code></pre>
+<p>The message redelivery behavior should be as follows.</p>
+<table>
+<thead>
+<tr><th style="text-align:left">Redelivery count</th><th style="text-align:left">Redelivery delay</th></tr>
+</thead>
+<tbody>
+<tr><td style="text-align:left">1</td><td style="text-align:left">10 + 1 seconds</td></tr>
+<tr><td style="text-align:left">2</td><td style="text-align:left">10 + 2 seconds</td></tr>
+<tr><td style="text-align:left">3</td><td style="text-align:left">10 + 4 seconds</td></tr>
+<tr><td style="text-align:left">4</td><td style="text-align:left">10 + 8 seconds</td></tr>
+<tr><td style="text-align:left">5</td><td style="text-align:left">10 + 16 seconds</td></tr>
+<tr><td style="text-align:left">6</td><td style="text-align:left">10 + 32 seconds</td></tr>
+<tr><td style="text-align:left">7</td><td style="text-align:left">10 + 60 seconds</td></tr>
+<tr><td style="text-align:left">8</td><td style="text-align:left">10 + 60 seconds</td></tr>
+</tbody>
+</table>
 <blockquote>
 <p><strong>Note</strong></p>
 <ul>
diff --git a/content/docs/ko/next/deploy-bare-metal-multi-cluster.html b/content/docs/ko/next/deploy-bare-metal-multi-cluster.html
index 5887ea2..3d0d137 100644
--- a/content/docs/ko/next/deploy-bare-metal-multi-cluster.html
+++ b/content/docs/ko/next/deploy-bare-metal-multi-cluster.html
@@ -219,8 +219,8 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.9.1
 <p>You can initialize this metadata using the <a href="/docs/ko/next/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/ko/next/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. The following is an example:</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 \
-  --configuration-store zk1.us-west.example.com:2184 \
+  --metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
+  --configuration-metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
   --web-service-url http://pulsar.us-west.example.com:8080/ \
   --web-service-url-tls https://pulsar.us-west.example.com:8443/ \
   --broker-service-url pulsar://pulsar.us-west.example.com:6650/ \
@@ -267,14 +267,14 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.9.1
 <p>Once you set up ZooKeeper, initialize cluster metadata, and spin up BookKeeper bookies, you can deploy brokers.</p>
 <h3><a class="anchor" aria-hidden="true" id="broker-configuration"></a><a href="#broker-configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.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>You can configure brokers using the <a href="/docs/ko/next/reference-configuration#broker"><code>conf/broker.conf</code></a> configuration file.</p>
-<p>The most important element of broker configuration is ensuring that each broker is aware of its local ZooKeeper quorum as well as the configuration store quorum. Make sure that you set the <a href="/docs/ko/next/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> parameter to reflect the local quorum and the <a href="/docs/ko/next/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameter to reflect the [...]
+<p>The most important element of broker configuration is ensuring that each broker is aware of its local ZooKeeper quorum as well as the configuration store quorum. Make sure that you set the <a href="/docs/ko/next/reference-configuration#broker"><code>metadataStoreUrl</code></a> parameter to reflect the local quorum and the <a href="/docs/ko/next/reference-configuration#broker"><code>configurationMetadataStoreUrl</code></a> parameter to reflect the configuration store quorum (although y [...]
 <p>You also need to specify the name of the <a href="/docs/ko/next/reference-terminology#cluster">cluster</a> to which the broker belongs using the <a href="/docs/ko/next/reference-configuration#broker-clusterName"><code>clusterName</code></a> parameter. In addition, you need to match the broker and web service ports provided when you initialize the metadata (especially when you use a different port from default) of the cluster.</p>
 <p>The following is an example configuration:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-comment"># Local ZooKeeper servers</span>
-<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">metadataStoreUrl</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-comment">
 # Configuration store quorum connection string.</span>
-<span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2184,zk2.us-west.example.com:2184,zk3.us-west.example.com:2184</span>
+<span class="hljs-attr">configurationMetadataStoreUrl</span>=<span class="hljs-string">zk1.us-west.example.com:2184,zk2.us-west.example.com:2184,zk3.us-west.example.com:2184</span>
 
 <span class="hljs-attr">clusterName</span>=<span class="hljs-string">us-west</span>
 <span class="hljs-comment">
diff --git a/content/docs/ko/next/deploy-bare-metal-multi-cluster/index.html b/content/docs/ko/next/deploy-bare-metal-multi-cluster/index.html
index 5887ea2..3d0d137 100644
--- a/content/docs/ko/next/deploy-bare-metal-multi-cluster/index.html
+++ b/content/docs/ko/next/deploy-bare-metal-multi-cluster/index.html
@@ -219,8 +219,8 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.9.1
 <p>You can initialize this metadata using the <a href="/docs/ko/next/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/ko/next/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. The following is an example:</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 \
-  --configuration-store zk1.us-west.example.com:2184 \
+  --metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
+  --configuration-metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
   --web-service-url http://pulsar.us-west.example.com:8080/ \
   --web-service-url-tls https://pulsar.us-west.example.com:8443/ \
   --broker-service-url pulsar://pulsar.us-west.example.com:6650/ \
@@ -267,14 +267,14 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.9.1
 <p>Once you set up ZooKeeper, initialize cluster metadata, and spin up BookKeeper bookies, you can deploy brokers.</p>
 <h3><a class="anchor" aria-hidden="true" id="broker-configuration"></a><a href="#broker-configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.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>You can configure brokers using the <a href="/docs/ko/next/reference-configuration#broker"><code>conf/broker.conf</code></a> configuration file.</p>
-<p>The most important element of broker configuration is ensuring that each broker is aware of its local ZooKeeper quorum as well as the configuration store quorum. Make sure that you set the <a href="/docs/ko/next/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> parameter to reflect the local quorum and the <a href="/docs/ko/next/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameter to reflect the [...]
+<p>The most important element of broker configuration is ensuring that each broker is aware of its local ZooKeeper quorum as well as the configuration store quorum. Make sure that you set the <a href="/docs/ko/next/reference-configuration#broker"><code>metadataStoreUrl</code></a> parameter to reflect the local quorum and the <a href="/docs/ko/next/reference-configuration#broker"><code>configurationMetadataStoreUrl</code></a> parameter to reflect the configuration store quorum (although y [...]
 <p>You also need to specify the name of the <a href="/docs/ko/next/reference-terminology#cluster">cluster</a> to which the broker belongs using the <a href="/docs/ko/next/reference-configuration#broker-clusterName"><code>clusterName</code></a> parameter. In addition, you need to match the broker and web service ports provided when you initialize the metadata (especially when you use a different port from default) of the cluster.</p>
 <p>The following is an example configuration:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-comment"># Local ZooKeeper servers</span>
-<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">metadataStoreUrl</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-comment">
 # Configuration store quorum connection string.</span>
-<span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2184,zk2.us-west.example.com:2184,zk3.us-west.example.com:2184</span>
+<span class="hljs-attr">configurationMetadataStoreUrl</span>=<span class="hljs-string">zk1.us-west.example.com:2184,zk2.us-west.example.com:2184,zk3.us-west.example.com:2184</span>
 
 <span class="hljs-attr">clusterName</span>=<span class="hljs-string">us-west</span>
 <span class="hljs-comment">
diff --git a/content/docs/ko/next/deploy-bare-metal.html b/content/docs/ko/next/deploy-bare-metal.html
index 34b8564..bfc35f2 100644
--- a/content/docs/ko/next/deploy-bare-metal.html
+++ b/content/docs/ko/next/deploy-bare-metal.html
@@ -273,8 +273,8 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <p>You can initialize this metadata using the <a href="/docs/ko/next/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/ko/next/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. This command can be run on any machine in your ZooKeeper cluster. The following is an example:</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 \
-  --configuration-store zk1.us-west.example.com:2181 \
+  --metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
+  --configuration-metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
   --web-service-url http://pulsar.us-west.example.com:8080 \
   --web-service-url-tls https://pulsar.us-west.example.com:8443 \
   --broker-service-url pulsar://pulsar.us-west.example.com:6650 \
@@ -335,9 +335,9 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <h2><a class="anchor" aria-hidden="true" id="deploy-pulsar-brokers"></a><a href="#deploy-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-.98 0-2 [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide the administrative interface of Pulsar. A good choice is to run <strong>3 brokers</strong>, one for each machine that already runs a BookKeeper bookie.</p>
 <h3><a class="anchor" aria-hidden="true" id="configure-brokers"></a><a href="#configure-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- [...]
-<p>The most important element of broker configuration is ensuring that each broker is aware of the ZooKeeper cluster that you have deployed. Ensure that the <a href="/docs/ko/next/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="/docs/ko/next/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters are correct. In this case, since you only have 1 cluster and no configuration store setup, [...]
-<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>
+<p>The most important element of broker configuration is ensuring that each broker is aware of the ZooKeeper cluster that you have deployed. Ensure that the <a href="/docs/ko/next/reference-configuration#broker"><code>metadataStoreUrl</code></a> and <a href="/docs/ko/next/reference-configuration#broker"><code>configurationMetadataStoreUrl</code></a> parameters are correct. In this case, since you only have 1 cluster and no configuration store setup, the <code>configurationMetadataStoreUr [...]
+<pre><code class="hljs css language-properties"><span class="hljs-attr">metadataStoreUrl</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">configurationMetadataStoreUrl</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>You also need to specify the cluster name (matching the name that you provided when you <a href="#initialize-cluster-metadata">initialize the metadata of the cluster</a>):</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
diff --git a/content/docs/ko/next/deploy-bare-metal/index.html b/content/docs/ko/next/deploy-bare-metal/index.html
index 34b8564..bfc35f2 100644
--- a/content/docs/ko/next/deploy-bare-metal/index.html
+++ b/content/docs/ko/next/deploy-bare-metal/index.html
@@ -273,8 +273,8 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <p>You can initialize this metadata using the <a href="/docs/ko/next/reference-cli-tools#pulsar-initialize-cluster-metadata"><code>initialize-cluster-metadata</code></a> command of the <a href="/docs/ko/next/reference-cli-tools#pulsar"><code>pulsar</code></a> CLI tool. This command can be run on any machine in your ZooKeeper cluster. The following is an example:</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 \
-  --configuration-store zk1.us-west.example.com:2181 \
+  --metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
+  --configuration-metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
   --web-service-url http://pulsar.us-west.example.com:8080 \
   --web-service-url-tls https://pulsar.us-west.example.com:8443 \
   --broker-service-url pulsar://pulsar.us-west.example.com:6650 \
@@ -335,9 +335,9 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <h2><a class="anchor" aria-hidden="true" id="deploy-pulsar-brokers"></a><a href="#deploy-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-.98 0-2 [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide the administrative interface of Pulsar. A good choice is to run <strong>3 brokers</strong>, one for each machine that already runs a BookKeeper bookie.</p>
 <h3><a class="anchor" aria-hidden="true" id="configure-brokers"></a><a href="#configure-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- [...]
-<p>The most important element of broker configuration is ensuring that each broker is aware of the ZooKeeper cluster that you have deployed. Ensure that the <a href="/docs/ko/next/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="/docs/ko/next/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters are correct. In this case, since you only have 1 cluster and no configuration store setup, [...]
-<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>
+<p>The most important element of broker configuration is ensuring that each broker is aware of the ZooKeeper cluster that you have deployed. Ensure that the <a href="/docs/ko/next/reference-configuration#broker"><code>metadataStoreUrl</code></a> and <a href="/docs/ko/next/reference-configuration#broker"><code>configurationMetadataStoreUrl</code></a> parameters are correct. In this case, since you only have 1 cluster and no configuration store setup, the <code>configurationMetadataStoreUr [...]
+<pre><code class="hljs css language-properties"><span class="hljs-attr">metadataStoreUrl</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">configurationMetadataStoreUrl</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>You also need to specify the cluster name (matching the name that you provided when you <a href="#initialize-cluster-metadata">initialize the metadata of the cluster</a>):</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
diff --git a/content/docs/ko/next/develop-binary-protocol.html b/content/docs/ko/next/develop-binary-protocol.html
index 2b6e166..40c5f47 100644
--- a/content/docs/ko/next/develop-binary-protocol.html
+++ b/content/docs/ko/next/develop-binary-protocol.html
@@ -230,7 +230,7 @@
 </code></pre>
 <p>Parameters: * <code>request_id</code> → Original id of the <code>CreateProducer</code> request * <code>producer_name</code> → Generated globally unique producer name or the name specified by the client, if any.</p>
 <h5><a class="anchor" aria-hidden="true" id="command-send"></a><a href="#command-send" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>Command <code>Send</code> is used to publish a new message within the context of an already existing producer. This command is used in a frame that includes command as well as message payload, for which the complete format is specified in the <a href="#payload-commands">payload commands</a> section.</p>
+<p>Command <code>Send</code> is used to publish a new message within the context of an already existing producer. If a producer has not yet been created for the connection, the broker will terminate the connection. This command is used in a frame that includes command as well as message payload, for which the complete format is specified in the <a href="#payload-commands">payload commands</a> section.</p>
 <pre><code class="hljs css language-protobuf"><span class="hljs-class"><span class="hljs-keyword">message</span> <span class="hljs-title">CommandSend</span> </span>{
   <span class="hljs-string">"producer_id"</span> : <span class="hljs-number">1</span>,
   <span class="hljs-string">"sequence_id"</span> : <span class="hljs-number">0</span>,
diff --git a/content/docs/ko/next/develop-binary-protocol/index.html b/content/docs/ko/next/develop-binary-protocol/index.html
index 2b6e166..40c5f47 100644
--- a/content/docs/ko/next/develop-binary-protocol/index.html
+++ b/content/docs/ko/next/develop-binary-protocol/index.html
@@ -230,7 +230,7 @@
 </code></pre>
 <p>Parameters: * <code>request_id</code> → Original id of the <code>CreateProducer</code> request * <code>producer_name</code> → Generated globally unique producer name or the name specified by the client, if any.</p>
 <h5><a class="anchor" aria-hidden="true" id="command-send"></a><a href="#command-send" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 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>Command <code>Send</code> is used to publish a new message within the context of an already existing producer. This command is used in a frame that includes command as well as message payload, for which the complete format is specified in the <a href="#payload-commands">payload commands</a> section.</p>
+<p>Command <code>Send</code> is used to publish a new message within the context of an already existing producer. If a producer has not yet been created for the connection, the broker will terminate the connection. This command is used in a frame that includes command as well as message payload, for which the complete format is specified in the <a href="#payload-commands">payload commands</a> section.</p>
 <pre><code class="hljs css language-protobuf"><span class="hljs-class"><span class="hljs-keyword">message</span> <span class="hljs-title">CommandSend</span> </span>{
   <span class="hljs-string">"producer_id"</span> : <span class="hljs-number">1</span>,
   <span class="hljs-string">"sequence_id"</span> : <span class="hljs-number">0</span>,
diff --git a/content/docs/ko/next/functions-runtime.html b/content/docs/ko/next/functions-runtime.html
index 505a821..21a8c1b 100644
--- a/content/docs/ko/next/functions-runtime.html
+++ b/content/docs/ko/next/functions-runtime.html
@@ -298,7 +298,7 @@ If you use tokens that expire when deploying functions, these tokens will expire
 <p>For example, if you use token authentication, you need to configure the following properties in the <code>function-worker.yml</code> file.</p>
 <pre><code class="hljs css language-Yaml"><span class="hljs-attr">clientAuthenticationPlugin:</span> <span class="hljs-string">org.apache.pulsar.client.impl.auth.AuthenticationToken</span>
 <span class="hljs-attr">clientAuthenticationParameters:</span> <span class="hljs-string">file:///etc/pulsar/token/admin-token.txt</span>
-<span class="hljs-attr">configurationStoreServers:</span> <span class="hljs-string">zookeeper-cluster:2181</span> <span class="hljs-comment"># auth requires a connection to zookeeper</span>
+<span class="hljs-attr">configurationMetadataStoreUrl:</span> <span class="hljs-string">zk:zookeeper-cluster:2181</span> <span class="hljs-comment"># auth requires a connection to zookeeper</span>
 <span class="hljs-attr">authenticationProviders:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">"org.apache.pulsar.broker.authentication.AuthenticationProviderToken"</span>
 <span class="hljs-attr">authorizationEnabled:</span> <span class="hljs-literal">true</span>
diff --git a/content/docs/ko/next/functions-runtime/index.html b/content/docs/ko/next/functions-runtime/index.html
index 505a821..21a8c1b 100644
--- a/content/docs/ko/next/functions-runtime/index.html
+++ b/content/docs/ko/next/functions-runtime/index.html
@@ -298,7 +298,7 @@ If you use tokens that expire when deploying functions, these tokens will expire
 <p>For example, if you use token authentication, you need to configure the following properties in the <code>function-worker.yml</code> file.</p>
 <pre><code class="hljs css language-Yaml"><span class="hljs-attr">clientAuthenticationPlugin:</span> <span class="hljs-string">org.apache.pulsar.client.impl.auth.AuthenticationToken</span>
 <span class="hljs-attr">clientAuthenticationParameters:</span> <span class="hljs-string">file:///etc/pulsar/token/admin-token.txt</span>
-<span class="hljs-attr">configurationStoreServers:</span> <span class="hljs-string">zookeeper-cluster:2181</span> <span class="hljs-comment"># auth requires a connection to zookeeper</span>
+<span class="hljs-attr">configurationMetadataStoreUrl:</span> <span class="hljs-string">zk:zookeeper-cluster:2181</span> <span class="hljs-comment"># auth requires a connection to zookeeper</span>
 <span class="hljs-attr">authenticationProviders:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">"org.apache.pulsar.broker.authentication.AuthenticationProviderToken"</span>
 <span class="hljs-attr">authorizationEnabled:</span> <span class="hljs-literal">true</span>
diff --git a/content/docs/ko/next/functions-worker.html b/content/docs/ko/next/functions-worker.html
index 8019bf5..8a072af 100644
--- a/content/docs/ko/next/functions-worker.html
+++ b/content/docs/ko/next/functions-worker.html
@@ -235,10 +235,10 @@ authenticationProviders: ['org.apache.pulsar.broker.authentication.Authenticatio
   # tokenPublicKey:     file:///path/to/public.key 
 </code></pre>
 <h5><a class="anchor" aria-hidden="true" id="enable-authorization-provider"></a><a href="#enable-authorization-provider" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 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>To enable authorization on Functions Worker, you need to configure <code>authorizationEnabled</code>, <code>authorizationProvider</code> and <code>configurationStoreServers</code>. The authentication provider connects to <code>configurationStoreServers</code> to receive namespace policies.</p>
+<p>To enable authorization on Functions Worker, you need to configure <code>authorizationEnabled</code>, <code>authorizationProvider</code> and <code>configurationMetadataStoreUrl</code>. The authentication provider connects to <code>configurationMetadataStoreUrl</code> to receive namespace policies.</p>
 <pre><code class="hljs css language-yaml"><span class="hljs-attr">authorizationEnabled:</span> <span class="hljs-literal">true</span>
 <span class="hljs-attr">authorizationProvider:</span> <span class="hljs-string">org.apache.pulsar.broker.authorization.PulsarAuthorizationProvider</span>
-<span class="hljs-attr">configurationStoreServers:</span> <span class="hljs-string">&lt;configuration-store-servers&gt;</span>
+<span class="hljs-attr">configurationMetadataStoreUrl:</span> <span class="hljs-string">&lt;meta-type&gt;:&lt;configuration-metadata-store-url&gt;</span>
 </code></pre>
 <p>You should also configure a list of superuser roles. The superuser roles are able to access any admin API. The following is a configuration example.</p>
 <pre><code class="hljs css language-yaml"><span class="hljs-attr">superUserRoles:</span>
diff --git a/content/docs/ko/next/functions-worker/index.html b/content/docs/ko/next/functions-worker/index.html
index 8019bf5..8a072af 100644
--- a/content/docs/ko/next/functions-worker/index.html
+++ b/content/docs/ko/next/functions-worker/index.html
@@ -235,10 +235,10 @@ authenticationProviders: ['org.apache.pulsar.broker.authentication.Authenticatio
   # tokenPublicKey:     file:///path/to/public.key 
 </code></pre>
 <h5><a class="anchor" aria-hidden="true" id="enable-authorization-provider"></a><a href="#enable-authorization-provider" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 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>To enable authorization on Functions Worker, you need to configure <code>authorizationEnabled</code>, <code>authorizationProvider</code> and <code>configurationStoreServers</code>. The authentication provider connects to <code>configurationStoreServers</code> to receive namespace policies.</p>
+<p>To enable authorization on Functions Worker, you need to configure <code>authorizationEnabled</code>, <code>authorizationProvider</code> and <code>configurationMetadataStoreUrl</code>. The authentication provider connects to <code>configurationMetadataStoreUrl</code> to receive namespace policies.</p>
 <pre><code class="hljs css language-yaml"><span class="hljs-attr">authorizationEnabled:</span> <span class="hljs-literal">true</span>
 <span class="hljs-attr">authorizationProvider:</span> <span class="hljs-string">org.apache.pulsar.broker.authorization.PulsarAuthorizationProvider</span>
-<span class="hljs-attr">configurationStoreServers:</span> <span class="hljs-string">&lt;configuration-store-servers&gt;</span>
+<span class="hljs-attr">configurationMetadataStoreUrl:</span> <span class="hljs-string">&lt;meta-type&gt;:&lt;configuration-metadata-store-url&gt;</span>
 </code></pre>
 <p>You should also configure a list of superuser roles. The superuser roles are able to access any admin API. The following is a configuration example.</p>
 <pre><code class="hljs css language-yaml"><span class="hljs-attr">superUserRoles:</span>
diff --git a/content/docs/ko/next/io-file-source.html b/content/docs/ko/next/io-file-source.html
index 265f799..c1a5f9a 100644
--- a/content/docs/ko/next/io-file-source.html
+++ b/content/docs/ko/next/io-file-source.html
@@ -39,6 +39,7 @@
 <tr><td><code>ignoreHiddenFiles</code></td><td>Boolean</td><td>false</td><td>true</td><td>Whether the hidden files should be ignored or not.</td></tr>
 <tr><td><code>pollingInterval</code></td><td>Long</td><td>false</td><td>10000L</td><td>Indicates how long to wait before performing a directory listing.</td></tr>
 <tr><td><code>numWorkers</code></td><td>Integer</td><td>false</td><td>1</td><td>The number of worker threads that process files.<br /><br /> This allows you to process a larger number of files concurrently. <br /><br />However, setting this to a value greater than 1 makes the data from multiple files mixed in the target topic.</td></tr>
+<tr><td><code>processedFileSuffix</code></td><td>String</td><td>false</td><td>NULL</td><td>If set, do not delete but only rename file that has been processed. <br /><br />  This config only work when 'keepFile' property is false.</td></tr>
 </tbody>
 </table>
 <h3><a class="anchor" aria-hidden="true" id="example"></a><a href="#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-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
@@ -58,7 +59,8 @@
       <span class="hljs-attr">"maximumSize"</span>: <span class="hljs-number">5000000</span>,
       <span class="hljs-attr">"ignoreHiddenFiles"</span>: <span class="hljs-literal">true</span>,
       <span class="hljs-attr">"pollingInterval"</span>: <span class="hljs-number">5000</span>,
-      <span class="hljs-attr">"numWorkers"</span>: <span class="hljs-number">1</span>
+      <span class="hljs-attr">"numWorkers"</span>: <span class="hljs-number">1</span>,
+      <span class="hljs-attr">"processedFileSuffix"</span>: <span class="hljs-string">".processed_done"</span>
    }
 }
 </code></pre></li>
@@ -76,6 +78,7 @@
     <span class="hljs-attr">ignoreHiddenFiles:</span> <span class="hljs-literal">true</span>
     <span class="hljs-attr">pollingInterval:</span> <span class="hljs-number">5000</span>
     <span class="hljs-attr">numWorkers:</span> <span class="hljs-number">1</span>
+    <span class="hljs-attr">processedFileSuffix:</span> <span class="hljs-string">".processed_done"</span>
 </code></pre></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="usage"></a><a href="#usage" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 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 [...]
diff --git a/content/docs/ko/next/io-file-source/index.html b/content/docs/ko/next/io-file-source/index.html
index 265f799..c1a5f9a 100644
--- a/content/docs/ko/next/io-file-source/index.html
+++ b/content/docs/ko/next/io-file-source/index.html
@@ -39,6 +39,7 @@
 <tr><td><code>ignoreHiddenFiles</code></td><td>Boolean</td><td>false</td><td>true</td><td>Whether the hidden files should be ignored or not.</td></tr>
 <tr><td><code>pollingInterval</code></td><td>Long</td><td>false</td><td>10000L</td><td>Indicates how long to wait before performing a directory listing.</td></tr>
 <tr><td><code>numWorkers</code></td><td>Integer</td><td>false</td><td>1</td><td>The number of worker threads that process files.<br /><br /> This allows you to process a larger number of files concurrently. <br /><br />However, setting this to a value greater than 1 makes the data from multiple files mixed in the target topic.</td></tr>
+<tr><td><code>processedFileSuffix</code></td><td>String</td><td>false</td><td>NULL</td><td>If set, do not delete but only rename file that has been processed. <br /><br />  This config only work when 'keepFile' property is false.</td></tr>
 </tbody>
 </table>
 <h3><a class="anchor" aria-hidden="true" id="example"></a><a href="#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-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
@@ -58,7 +59,8 @@
       <span class="hljs-attr">"maximumSize"</span>: <span class="hljs-number">5000000</span>,
       <span class="hljs-attr">"ignoreHiddenFiles"</span>: <span class="hljs-literal">true</span>,
       <span class="hljs-attr">"pollingInterval"</span>: <span class="hljs-number">5000</span>,
-      <span class="hljs-attr">"numWorkers"</span>: <span class="hljs-number">1</span>
+      <span class="hljs-attr">"numWorkers"</span>: <span class="hljs-number">1</span>,
+      <span class="hljs-attr">"processedFileSuffix"</span>: <span class="hljs-string">".processed_done"</span>
    }
 }
 </code></pre></li>
@@ -76,6 +78,7 @@
     <span class="hljs-attr">ignoreHiddenFiles:</span> <span class="hljs-literal">true</span>
     <span class="hljs-attr">pollingInterval:</span> <span class="hljs-number">5000</span>
     <span class="hljs-attr">numWorkers:</span> <span class="hljs-number">1</span>
+    <span class="hljs-attr">processedFileSuffix:</span> <span class="hljs-string">".processed_done"</span>
 </code></pre></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="usage"></a><a href="#usage" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 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 [...]
diff --git a/content/docs/ko/next/reference-cli-tools.html b/content/docs/ko/next/reference-cli-tools.html
index 7259f01..1fd61c4 100644
--- a/content/docs/ko/next/reference-cli-tools.html
+++ b/content/docs/ko/next/reference-cli-tools.html
@@ -223,14 +223,14 @@
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--configuration-store</code></td><td>Configuration store connection string</td><td></td></tr>
-<tr><td><code>-zk</code> , <code>--zookeeper-servers</code></td><td>Local ZooKeeper connection string</td><td></td></tr>
+<tr><td><code>-cms</code>, <code>--configuration-metadata-store</code></td><td>Configuration meta store connection string</td><td></td></tr>
+<tr><td><code>-md</code> , <code>--metadata-store</code></td><td>Metadata Store service url</td><td></td></tr>
 </tbody>
 </table>
 <p>Example</p>
 <pre><code class="hljs css language-bash">$ PULSAR_PROXY_CONF=/path/to/proxy.conf pulsar proxy \
-  --zookeeper-servers zk-0,zk-1,zk2 \
-  --configuration-store zk-0,zk-1,zk-2
+  --metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181 \
+  --configuration-metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="standalone"></a><a href="#standalone" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
 <p>Run a broker service with local bookies and local ZooKeeper</p>
@@ -615,7 +615,7 @@
 <tr><td><code>-time</code>, <code>--test-duration</code></td><td>Test duration (in seconds). If this value is less than or equal to 0, it keeps publishing messages.</td><td>0</td></tr>
 <tr><td><code>--threads</code></td><td>Number of threads writing</td><td>1</td></tr>
 <tr><td><code>-w</code>, <code>--write-quorum</code></td><td>Ledger write quorum</td><td>1</td></tr>
-<tr><td><code>-zk</code>, <code>--zookeeperServers</code></td><td>ZooKeeper connection string</td><td></td></tr>
+<tr><td><code>-md</code>, <code>--metadata-store</code></td><td>Metadata store service URL. For example: zk:my-zk:2181</td><td></td></tr>
 </tbody>
 </table>
 <h3><a class="anchor" aria-hidden="true" id="monitor-brokers"></a><a href="#monitor-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  [...]
diff --git a/content/docs/ko/next/reference-cli-tools/index.html b/content/docs/ko/next/reference-cli-tools/index.html
index 7259f01..1fd61c4 100644
--- a/content/docs/ko/next/reference-cli-tools/index.html
+++ b/content/docs/ko/next/reference-cli-tools/index.html
@@ -223,14 +223,14 @@
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--configuration-store</code></td><td>Configuration store connection string</td><td></td></tr>
-<tr><td><code>-zk</code> , <code>--zookeeper-servers</code></td><td>Local ZooKeeper connection string</td><td></td></tr>
+<tr><td><code>-cms</code>, <code>--configuration-metadata-store</code></td><td>Configuration meta store connection string</td><td></td></tr>
+<tr><td><code>-md</code> , <code>--metadata-store</code></td><td>Metadata Store service url</td><td></td></tr>
 </tbody>
 </table>
 <p>Example</p>
 <pre><code class="hljs css language-bash">$ PULSAR_PROXY_CONF=/path/to/proxy.conf pulsar proxy \
-  --zookeeper-servers zk-0,zk-1,zk2 \
-  --configuration-store zk-0,zk-1,zk-2
+  --metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181 \
+  --configuration-metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="standalone"></a><a href="#standalone" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
 <p>Run a broker service with local bookies and local ZooKeeper</p>
@@ -615,7 +615,7 @@
 <tr><td><code>-time</code>, <code>--test-duration</code></td><td>Test duration (in seconds). If this value is less than or equal to 0, it keeps publishing messages.</td><td>0</td></tr>
 <tr><td><code>--threads</code></td><td>Number of threads writing</td><td>1</td></tr>
 <tr><td><code>-w</code>, <code>--write-quorum</code></td><td>Ledger write quorum</td><td>1</td></tr>
-<tr><td><code>-zk</code>, <code>--zookeeperServers</code></td><td>ZooKeeper connection string</td><td></td></tr>
+<tr><td><code>-md</code>, <code>--metadata-store</code></td><td>Metadata store service URL. For example: zk:my-zk:2181</td><td></td></tr>
 </tbody>
 </table>
 <h3><a class="anchor" aria-hidden="true" id="monitor-brokers"></a><a href="#monitor-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  [...]
diff --git a/content/docs/ko/next/reference-configuration.html b/content/docs/ko/next/reference-configuration.html
index a66e70a..b109717 100644
--- a/content/docs/ko/next/reference-configuration.html
+++ b/content/docs/ko/next/reference-configuration.html
@@ -209,7 +209,7 @@
 <p>If there are multiple listeners, separate them with commas.</p>
 <p><strong>Note</strong>: do not use this configuration with <code>advertisedAddress</code> and <code>brokerServicePort</code>. If the value of this configuration is empty, the broker uses <code>advertisedAddress</code> and <code>brokerServicePort</code>|/| |internalListenerName|Specify the internal listener name for the broker.</p>
 <p><strong>Note</strong>: the listener name must be contained in <code>advertisedListeners</code>.</p>
-<p>If the value of this configuration is empty, the broker uses the first listener as the internal listener.|/| |authenticateOriginalAuthData| If this flag is set to <code>true</code>, the broker authenticates the original Auth data; else it just accepts the originalPrincipal and authorizes it (if required). |false| |enablePersistentTopics| Whether persistent topics are enabled on the broker |true| |enableNonPersistentTopics| Whether non-persistent topics are enabled on the broker |true| [...]
+<p>If the value of this configuration is empty, the broker uses the first listener as the internal listener.|/| |authenticateOriginalAuthData| If this flag is set to <code>true</code>, the broker authenticates the original Auth data; else it just accepts the originalPrincipal and authorizes it (if required). |false| |enablePersistentTopics| Whether persistent topics are enabled on the broker |true| |enableNonPersistentTopics| Whether non-persistent topics are enabled on the broker |true| [...]
 <ul>
 <li><p>'producer_request_hold' Policy which holds producer's send request until the resource becomes available (or holding times out)</p></li>
 <li><p>'producer_exception' Policy which throws <code>javax.jms.ResourceAllocationException</code> to the producer</p></li>
@@ -218,32 +218,44 @@
 <li><p><code>delete_when_no_subscriptions</code>: delete the topic which has no subscriptions or active producers.</p>
 <ul>
 <li><p><code>delete_when_subscriptions_caught_up</code>: delete the topic whose subscriptions have no backlogs and which has no active producers or consumers. | <code>delete_when_no_subscriptions</code> | | brokerDeleteInactiveTopicsMaxInactiveDurationSeconds | Set the maximum duration for inactive topics. If it is not specified, the <code>brokerDeleteInactiveTopicsFrequencySeconds</code> parameter is adopted. | N/A | |forceDeleteTenantAllowed| Enable you to delete a tenant forcefully. | [...]
-<p>Set this threshold to 0 means disabling the compression check.|N/A |delayedDeliveryEnabled| Whether to enable the delayed delivery for messages. If disabled, messages will be immediately delivered and there will be no tracking overhead.|true| |delayedDeliveryTickTimeMillis|Control the tick time for retrying on delayed delivery, which affects the accuracy of the delivery time compared to the scheduled time. By default, it is 1 second.|1000| |activeConsumerFailoverDelayTimeMillis| How l [...]
+<p>Set this threshold to 0 means disabling the compression check.|N/A |delayedDeliveryEnabled| Whether to enable the delayed delivery for messages. If disabled, messages will be immediately delivered and there will be no tracking overhead.|true| |delayedDeliveryTickTimeMillis|Control the tick time for retrying on delayed delivery, which affects the accuracy of the delivery time compared to the scheduled time. By default, it is 1 second.|1000| |activeConsumerFailoverDelayTimeMillis| How l [...]
 <p>Setting this configuration to a value <strong>greater than 0</strong> deletes inactive subscriptions automatically.<br>
 Setting this configuration to <strong>0</strong> does not delete inactive subscriptions automatically.</p>
 <p>Since this configuration takes effect on all topics, if there is even one topic whose subscriptions should not be deleted automatically, you need to set it to 0.<br>
-Instead, you can set a subscription expiration time for each <strong>namespace</strong> using the <a href="https://pulsar.apache.org/tools/pulsar-admin/2.6.0-SNAPSHOT/#-em-set-subscription-expiration-time-em-"><code>pulsar-admin namespaces set-subscription-expiration-time options</code> command</a>. | 0 | |maxConcurrentLookupRequest| Max number of concurrent lookup request broker allows to throttle heavy incoming lookup traffic |50000| |maxConcurrentTopicLoadRequest| Max number of concur [...]
+Instead, you can set a subscription expiration time for each <strong>namespace</strong> using the <a href="https://pulsar.apache.org/tools/pulsar-admin/2.6.0-SNAPSHOT/#-em-set-subscription-expiration-time-em-"><code>pulsar-admin namespaces set-subscription-expiration-time options</code> command</a>. | 0 | |maxConcurrentLookupRequest| Max number of concurrent lookup request broker allows to throttle heavy incoming lookup traffic |50000| |maxConcurrentTopicLoadRequest| Max number of concur [...]
 <ul>
 <li>The max rollover time has been reached</li>
 <li>The max entries have been written to the ledger</li>
-<li>The max ledger size has been written to the ledger|50000| |managedLedgerMinLedgerRolloverTimeMinutes| Minimum time between ledger rollover for a topic |10| |managedLedgerMaxLedgerRolloverTimeMinutes| Maximum time before forcing a ledger rollover for a topic |240| |managedLedgerCursorMaxEntriesPerLedger| Max number of entries to append to a cursor ledger |50000| |managedLedgerCursorRolloverTimeInSeconds| Max time before triggering a rollover on a cursor ledger |14400| |managedLedgerMa [...]
-<code>brokerDeleteInactiveTopicsFrequencySeconds</code>.|60| |transactionCoordinatorEnabled|Whether to enable transaction coordinator in broker.|true| |transactionMetadataStoreProviderClassName| |org.apache.pulsar.transaction.coordinator.impl.InMemTransactionMetadataStoreProvider| |defaultRetentionTimeInMinutes| Default message retention time |0| |defaultRetentionSizeInMB| Default retention size |0| |keepAliveIntervalSeconds| How often to check whether the connections are still alive |30 [...]
-|haProxyProtocolEnabled | Enable or disable the <a href="http://www.haproxy.org/">HAProxy</a> protocol. |false| | maxTopicsPerNamespace | The maximum number of persistent topics that can be created in the namespace. When the number of topics reaches this threshold, the broker rejects the request of creating a new topic, including the auto-created topics by the producer or consumer, until the number of connected consumers decreases. The default value 0 disables the check. | 0 | |subscript [...]
-</ul>
-<p>Available options are <code>NONE</code>, <code>LZ4</code>, <code>ZLIB</code>, <code>ZSTD</code>, and <code>SNAPPY</code>).</p>
-<p>If this value is <code>NONE</code> or invalid, the <code>managedLedgerInfo</code> is not compressed.</p>
-<p><strong>Note</strong> that after enabling this configuration, if you want to degrade a broker, you need to change the value to <code>NONE</code> and make sure all ledger metadata is saved without compression. | None | | additionalServlets | Additional servlet name.</p>
-<p>If you have multiple additional servlets, separate them by commas.</p>
-<p>For example, additionalServlet_1, additionalServlet_2 | N/A | | additionalServletDirectory | Location of broker additional servlet NAR directory | ./brokerAdditionalServlet | | brokerEntryMetadataInterceptors | Set broker entry metadata interceptors.</p>
-<p>Multiple interceptors should be separated by commas.</p>
-<p>Available values:</p>
-<ul>
-<li>org.apache.pulsar.common.intercept.AppendBrokerTimestampMetadataInterceptor</li>
-<li>org.apache.pulsar.common.intercept.AppendIndexMetadataInterceptor</li>
+<li>The max ledger size has been written to the ledger|50000| |managedLedgerMinLedgerRolloverTimeMinutes| Minimum time between ledger rollover for a topic |10| |managedLedgerMaxLedgerRolloverTimeMinutes| Maximum time before forcing a ledger rollover for a topic |240| |managedLedgerInactiveLedgerRolloverTimeSeconds| Time to rollover ledger for inactive topic |0| |managedLedgerCursorMaxEntriesPerLedger| Max number of entries to append to a cursor ledger |50000| |managedLedgerCursorRollover [...]
 </ul></li>
 </ul></li>
 </ul>
-<pre><code class="hljs">    Example  
+<pre><code class="hljs">    Available values: 
+    - `org.apache.pulsar.broker.loadbalance.impl.ThresholdShedder`
+    - `org.apache.pulsar.broker.loadbalance.impl.OverloadShedder`
+    - `org.apache.pulsar.broker.loadbalance.impl.UniformLoadShedder`
+      
+    For the comparisons of the shedding strategies, see [here](administration-load-balance/#shed-load-automatically).|`org.apache.pulsar.broker.loadbalance.impl.ThresholdShedder` |replicationMetricsEnabled| Enable replication metrics |true| |replicationConnectionsPerBroker| Max number of connections to open for each broker in a remote cluster More connections host-to-host lead to better throughput over high-latency links. |16| |replicationProducerQueueSize| Replicator producer queue size [...]
+    |haProxyProtocolEnabled | Enable or disable the [HAProxy](http://www.haproxy.org/) protocol. |false| | maxTopicsPerNamespace | The maximum number of persistent topics that can be created in the namespace. When the number of topics reaches this threshold, the broker rejects the request of creating a new topic, including the auto-created topics by the producer or consumer, until the number of connected consumers decreases. The default value 0 disables the check. | 0 | |subscriptionType [...]
+      
+    Available options are `NONE`, `LZ4`, `ZLIB`, `ZSTD`, and `SNAPPY`).   
+      
+    If this value is `NONE` or invalid, the `managedLedgerInfo` is not compressed.   
+      
+    **Note** that after enabling this configuration, if you want to degrade a broker, you need to change the value to `NONE` and make sure all ledger metadata is saved without compression. | None | | additionalServlets | Additional servlet name.   
+      
+    If you have multiple additional servlets, separate them by commas.   
+      
+    For example, additionalServlet_1, additionalServlet_2 | N/A | | additionalServletDirectory | Location of broker additional servlet NAR directory | ./brokerAdditionalServlet | | brokerEntryMetadataInterceptors | Set broker entry metadata interceptors.  
+      
+    Multiple interceptors should be separated by commas.   
+      
+    Available values:
+    - org.apache.pulsar.common.intercept.AppendBrokerTimestampMetadataInterceptor
+    - org.apache.pulsar.common.intercept.AppendIndexMetadataInterceptor
+      
+      
+    Example  
     brokerEntryMetadataInterceptors=org.apache.pulsar.common.intercept.AppendBrokerTimestampMetadataInterceptor, org.apache.pulsar.common.intercept.AppendIndexMetadataInterceptor|N/A | | enableExposingBrokerEntryMetadataToClient|Whether to expose broker entry metadata to client or not.  
       
     Available values:
@@ -252,6 +264,22 @@ Instead, you can set a subscription expiration time for each <strong>namespace</
       
     Example  
     enableExposingBrokerEntryMetadataToClient=true | false |&lt;/p&gt; 
+    #### Deprecated parameters of Broker
+    
+    The following parameters have been deprecated in the `conf/broker.conf` file.
+    
+    | Name                                         | Description                                                                                                     | Default |
+    | -------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | ------- |
+    | backlogQuotaDefaultLimitGB                   | Use `backlogQuotaDefaultLimitBytes` instead.                                                                    | -1      |
+    | brokerServicePurgeInactiveFrequencyInSeconds | Use `brokerDeleteInactiveTopicsFrequencySeconds`.                                                               | 60      |
+    | tlsEnabled                                   | Use `webServicePortTls` and `brokerServicePortTls` instead.                                                     | false   |
+    | replicationTlsEnabled                        | Enable TLS when talking with other clusters to replicate messages. Use `brokerClientTlsEnabled` instead.        | false   |
+    | subscriptionKeySharedEnable                  | Whether to enable the Key_Shared subscription. Use `subscriptionTypesEnabled` instead.                          | true    |
+    | zookeeperServers                             | Zookeeper quorum connection string. Use `metadataStoreUrl` instead.                                             | N/A     |
+    | configurationStoreServers                    | Configuration store connection string (as a comma-separated list). Use `configurationMetadataStoreUrl` instead. | N/A     |
+    | zooKeeperSessionTimeoutMillis                | Zookeeper session timeout in milliseconds. Use `metadataStoreSessionTimeoutMillis` instead.                     | 30000   |
+    | zooKeeperCacheExpirySeconds                  | ZooKeeper cache expiry time in seconds. Use `metadataStoreCacheExpirySeconds` instead.                          | 300     |
+    
     ## Client
     
     You can use the [`pulsar-client`](/docs/ko/next/reference-cli-tools#pulsar-client) CLI tool to publish messages to and consume messages from Pulsar topics. You can use this tool in place of a client library.
@@ -321,32 +349,51 @@ Instead, you can set a subscription expiration time for each <strong>namespace</
                                 - PKCS12&lt;/td&gt; 
                                     &lt;/tr&gt; 
                                     &lt;/tbody&gt; &lt;/table&gt; 
+                                    #### Deprecated parameters of standalone Pulsar
+                                    
+                                    The following parameters have been deprecated in the `conf/standalone.conf` file.
+                                    
+                                    | Name                             | Description                                                                                      | Default |
+                                    | -------------------------------- | ------------------------------------------------------------------------------------------------ | ------- |
+                                    | zooKeeperOperationTimeoutSeconds | ZooKeeper operation timeout in seconds. Use `metadataStoreOperationTimeoutSeconds` instead.      | 30      |
+                                    | zooKeeperCacheExpirySeconds      | ZooKeeper cache expiry time in seconds. Use `metadataStoreCacheExpirySeconds` instead.           | 300     |
+                                    | zooKeeperSessionTimeoutMillis    | The ZooKeeper session timeout, in milliseconds. Use `metadataStoreSessionTimeoutMillis` instead. | 30000   |
+                                    
                                     ## WebSocket
                                     
-                                    | Name                                 | Description                            | Default |
-                                    | ------------------------------------ | -------------------------------------- | ------- |
-                                    | configurationStoreServers            |                                        |         |
-                                    | zooKeeperSessionTimeoutMillis        |                                        | 30000   |
-                                    | zooKeeperCacheExpirySeconds          | ZooKeeper cache expiry time in seconds | 300     |
-                                    | serviceUrl                           |                                        |         |
-                                    | serviceUrlTls                        |                                        |         |
-                                    | brokerServiceUrl                     |                                        |         |
-                                    | brokerServiceUrlTls                  |                                        |         |
-                                    | webServicePort                       |                                        | 8080    |
-                                    | webServicePortTls                    |                                        | 8443    |
-                                    | bindAddress                          |                                        | 0.0.0.0 |
-                                    | clusterName                          |                                        |         |
-                                    | authenticationEnabled                |                                        | false   |
-                                    | authenticationProviders              |                                        |         |
-                                    | authorizationEnabled                 |                                        | false   |
-                                    | superUserRoles                       |                                        |         |
-                                    | brokerClientAuthenticationPlugin     |                                        |         |
-                                    | brokerClientAuthenticationParameters |                                        |         |
-                                    | tlsEnabled                           |                                        | false   |
-                                    | tlsAllowInsecureConnection           |                                        | false   |
-                                    | tlsCertificateFilePath               |                                        |         |
-                                    | tlsKeyFilePath                       |                                        |         |
-                                    | tlsTrustCertsFilePath                |                                        |         |
+                                    | Name                                 | Description                                     | Default |
+                                    | ------------------------------------ | ----------------------------------------------- | ------- |
+                                    | configurationMetadataStoreUrl        |                                                 |         |
+                                    | metadataStoreSessionTimeoutMillis    | Metadata store session timeout in milliseconds. | 30000   |
+                                    | metadataStoreCacheExpirySeconds      | Metadata store cache expiry time in seconds     | 300     |
+                                    | serviceUrl                           |                                                 |         |
+                                    | serviceUrlTls                        |                                                 |         |
+                                    | brokerServiceUrl                     |                                                 |         |
+                                    | brokerServiceUrlTls                  |                                                 |         |
+                                    | webServicePort                       |                                                 | 8080    |
+                                    | webServicePortTls                    |                                                 | 8443    |
+                                    | bindAddress                          |                                                 | 0.0.0.0 |
+                                    | clusterName                          |                                                 |         |
+                                    | authenticationEnabled                |                                                 | false   |
+                                    | authenticationProviders              |                                                 |         |
+                                    | authorizationEnabled                 |                                                 | false   |
+                                    | superUserRoles                       |                                                 |         |
+                                    | brokerClientAuthenticationPlugin     |                                                 |         |
+                                    | brokerClientAuthenticationParameters |                                                 |         |
+                                    | tlsEnabled                           |                                                 | false   |
+                                    | tlsAllowInsecureConnection           |                                                 | false   |
+                                    | tlsCertificateFilePath               |                                                 |         |
+                                    | tlsKeyFilePath                       |                                                 |         |
+                                    | tlsTrustCertsFilePath                |                                                 |         |
+                                    
+                                    #### Deprecated parameters of WebSocket
+                                    
+                                    The following parameters have been deprecated in the `conf/websocket.conf` file.
+                                    
+                                    | Name                          | Description                                                                                     | Default |
+                                    | ----------------------------- | ----------------------------------------------------------------------------------------------- | ------- |
+                                    | zooKeeperSessionTimeoutMillis | The ZooKeeper session timeout in milliseconds. Use `metadataStoreSessionTimeoutMillis` instead. | 30000   |
+                                    | zooKeeperCacheExpirySeconds   | ZooKeeper cache expiry time in seconds. Use `metadataStoreCacheExpirySeconds` instead.          | 300     |
                                     
                                     ## Pulsar proxy
                                     
@@ -359,6 +406,16 @@ Instead, you can set a subscription expiration time for each <strong>namespace</
                                             - 2: Parse and log channel information, command information and message body.&lt;/td&gt; 
                                                 &lt;/tr&gt; 
                                                 &lt;/tbody&gt; &lt;/table&gt; 
+                                                #### Deprecated parameters of Pulsar proxy
+                                                
+                                                The following parameters have been deprecated in the `conf/proxy.conf` file.
+                                                
+                                                | Name                        | Description                                                                                   | Default |
+                                                | --------------------------- | --------------------------------------------------------------------------------------------- | ------- |
+                                                | tlsEnabledInProxy           | Deprecated - use `servicePortTls` and `webServicePortTls` instead.                            | false   |
+                                                | zookeeperSessionTimeoutMs   | ZooKeeper session timeout (in milliseconds). Use `metadataStoreSessionTimeoutMillis` instead. | 30000   |
+                                                | zooKeeperCacheExpirySeconds | ZooKeeper cache expiry time in seconds. Use `metadataStoreCacheExpirySeconds` instead.        | 300     |
+                                                
                                                 ## ZooKeeper
                                                 
                                                 ZooKeeper handles a broad range of essential configuration- and coordination-related tasks for Pulsar. The default configuration file for ZooKeeper is in the `conf/zookeeper.conf` file in your Pulsar installation. The following parameters are available:
diff --git a/content/docs/ko/next/reference-configuration/index.html b/content/docs/ko/next/reference-configuration/index.html
index a66e70a..b109717 100644
--- a/content/docs/ko/next/reference-configuration/index.html
+++ b/content/docs/ko/next/reference-configuration/index.html
@@ -209,7 +209,7 @@
 <p>If there are multiple listeners, separate them with commas.</p>
 <p><strong>Note</strong>: do not use this configuration with <code>advertisedAddress</code> and <code>brokerServicePort</code>. If the value of this configuration is empty, the broker uses <code>advertisedAddress</code> and <code>brokerServicePort</code>|/| |internalListenerName|Specify the internal listener name for the broker.</p>
 <p><strong>Note</strong>: the listener name must be contained in <code>advertisedListeners</code>.</p>
-<p>If the value of this configuration is empty, the broker uses the first listener as the internal listener.|/| |authenticateOriginalAuthData| If this flag is set to <code>true</code>, the broker authenticates the original Auth data; else it just accepts the originalPrincipal and authorizes it (if required). |false| |enablePersistentTopics| Whether persistent topics are enabled on the broker |true| |enableNonPersistentTopics| Whether non-persistent topics are enabled on the broker |true| [...]
+<p>If the value of this configuration is empty, the broker uses the first listener as the internal listener.|/| |authenticateOriginalAuthData| If this flag is set to <code>true</code>, the broker authenticates the original Auth data; else it just accepts the originalPrincipal and authorizes it (if required). |false| |enablePersistentTopics| Whether persistent topics are enabled on the broker |true| |enableNonPersistentTopics| Whether non-persistent topics are enabled on the broker |true| [...]
 <ul>
 <li><p>'producer_request_hold' Policy which holds producer's send request until the resource becomes available (or holding times out)</p></li>
 <li><p>'producer_exception' Policy which throws <code>javax.jms.ResourceAllocationException</code> to the producer</p></li>
@@ -218,32 +218,44 @@
 <li><p><code>delete_when_no_subscriptions</code>: delete the topic which has no subscriptions or active producers.</p>
 <ul>
 <li><p><code>delete_when_subscriptions_caught_up</code>: delete the topic whose subscriptions have no backlogs and which has no active producers or consumers. | <code>delete_when_no_subscriptions</code> | | brokerDeleteInactiveTopicsMaxInactiveDurationSeconds | Set the maximum duration for inactive topics. If it is not specified, the <code>brokerDeleteInactiveTopicsFrequencySeconds</code> parameter is adopted. | N/A | |forceDeleteTenantAllowed| Enable you to delete a tenant forcefully. | [...]
-<p>Set this threshold to 0 means disabling the compression check.|N/A |delayedDeliveryEnabled| Whether to enable the delayed delivery for messages. If disabled, messages will be immediately delivered and there will be no tracking overhead.|true| |delayedDeliveryTickTimeMillis|Control the tick time for retrying on delayed delivery, which affects the accuracy of the delivery time compared to the scheduled time. By default, it is 1 second.|1000| |activeConsumerFailoverDelayTimeMillis| How l [...]
+<p>Set this threshold to 0 means disabling the compression check.|N/A |delayedDeliveryEnabled| Whether to enable the delayed delivery for messages. If disabled, messages will be immediately delivered and there will be no tracking overhead.|true| |delayedDeliveryTickTimeMillis|Control the tick time for retrying on delayed delivery, which affects the accuracy of the delivery time compared to the scheduled time. By default, it is 1 second.|1000| |activeConsumerFailoverDelayTimeMillis| How l [...]
 <p>Setting this configuration to a value <strong>greater than 0</strong> deletes inactive subscriptions automatically.<br>
 Setting this configuration to <strong>0</strong> does not delete inactive subscriptions automatically.</p>
 <p>Since this configuration takes effect on all topics, if there is even one topic whose subscriptions should not be deleted automatically, you need to set it to 0.<br>
-Instead, you can set a subscription expiration time for each <strong>namespace</strong> using the <a href="https://pulsar.apache.org/tools/pulsar-admin/2.6.0-SNAPSHOT/#-em-set-subscription-expiration-time-em-"><code>pulsar-admin namespaces set-subscription-expiration-time options</code> command</a>. | 0 | |maxConcurrentLookupRequest| Max number of concurrent lookup request broker allows to throttle heavy incoming lookup traffic |50000| |maxConcurrentTopicLoadRequest| Max number of concur [...]
+Instead, you can set a subscription expiration time for each <strong>namespace</strong> using the <a href="https://pulsar.apache.org/tools/pulsar-admin/2.6.0-SNAPSHOT/#-em-set-subscription-expiration-time-em-"><code>pulsar-admin namespaces set-subscription-expiration-time options</code> command</a>. | 0 | |maxConcurrentLookupRequest| Max number of concurrent lookup request broker allows to throttle heavy incoming lookup traffic |50000| |maxConcurrentTopicLoadRequest| Max number of concur [...]
 <ul>
 <li>The max rollover time has been reached</li>
 <li>The max entries have been written to the ledger</li>
-<li>The max ledger size has been written to the ledger|50000| |managedLedgerMinLedgerRolloverTimeMinutes| Minimum time between ledger rollover for a topic |10| |managedLedgerMaxLedgerRolloverTimeMinutes| Maximum time before forcing a ledger rollover for a topic |240| |managedLedgerCursorMaxEntriesPerLedger| Max number of entries to append to a cursor ledger |50000| |managedLedgerCursorRolloverTimeInSeconds| Max time before triggering a rollover on a cursor ledger |14400| |managedLedgerMa [...]
-<code>brokerDeleteInactiveTopicsFrequencySeconds</code>.|60| |transactionCoordinatorEnabled|Whether to enable transaction coordinator in broker.|true| |transactionMetadataStoreProviderClassName| |org.apache.pulsar.transaction.coordinator.impl.InMemTransactionMetadataStoreProvider| |defaultRetentionTimeInMinutes| Default message retention time |0| |defaultRetentionSizeInMB| Default retention size |0| |keepAliveIntervalSeconds| How often to check whether the connections are still alive |30 [...]
-|haProxyProtocolEnabled | Enable or disable the <a href="http://www.haproxy.org/">HAProxy</a> protocol. |false| | maxTopicsPerNamespace | The maximum number of persistent topics that can be created in the namespace. When the number of topics reaches this threshold, the broker rejects the request of creating a new topic, including the auto-created topics by the producer or consumer, until the number of connected consumers decreases. The default value 0 disables the check. | 0 | |subscript [...]
-</ul>
-<p>Available options are <code>NONE</code>, <code>LZ4</code>, <code>ZLIB</code>, <code>ZSTD</code>, and <code>SNAPPY</code>).</p>
-<p>If this value is <code>NONE</code> or invalid, the <code>managedLedgerInfo</code> is not compressed.</p>
-<p><strong>Note</strong> that after enabling this configuration, if you want to degrade a broker, you need to change the value to <code>NONE</code> and make sure all ledger metadata is saved without compression. | None | | additionalServlets | Additional servlet name.</p>
-<p>If you have multiple additional servlets, separate them by commas.</p>
-<p>For example, additionalServlet_1, additionalServlet_2 | N/A | | additionalServletDirectory | Location of broker additional servlet NAR directory | ./brokerAdditionalServlet | | brokerEntryMetadataInterceptors | Set broker entry metadata interceptors.</p>
-<p>Multiple interceptors should be separated by commas.</p>
-<p>Available values:</p>
-<ul>
-<li>org.apache.pulsar.common.intercept.AppendBrokerTimestampMetadataInterceptor</li>
-<li>org.apache.pulsar.common.intercept.AppendIndexMetadataInterceptor</li>
+<li>The max ledger size has been written to the ledger|50000| |managedLedgerMinLedgerRolloverTimeMinutes| Minimum time between ledger rollover for a topic |10| |managedLedgerMaxLedgerRolloverTimeMinutes| Maximum time before forcing a ledger rollover for a topic |240| |managedLedgerInactiveLedgerRolloverTimeSeconds| Time to rollover ledger for inactive topic |0| |managedLedgerCursorMaxEntriesPerLedger| Max number of entries to append to a cursor ledger |50000| |managedLedgerCursorRollover [...]
 </ul></li>
 </ul></li>
 </ul>
-<pre><code class="hljs">    Example  
+<pre><code class="hljs">    Available values: 
+    - `org.apache.pulsar.broker.loadbalance.impl.ThresholdShedder`
+    - `org.apache.pulsar.broker.loadbalance.impl.OverloadShedder`
+    - `org.apache.pulsar.broker.loadbalance.impl.UniformLoadShedder`
+      
+    For the comparisons of the shedding strategies, see [here](administration-load-balance/#shed-load-automatically).|`org.apache.pulsar.broker.loadbalance.impl.ThresholdShedder` |replicationMetricsEnabled| Enable replication metrics |true| |replicationConnectionsPerBroker| Max number of connections to open for each broker in a remote cluster More connections host-to-host lead to better throughput over high-latency links. |16| |replicationProducerQueueSize| Replicator producer queue size [...]
+    |haProxyProtocolEnabled | Enable or disable the [HAProxy](http://www.haproxy.org/) protocol. |false| | maxTopicsPerNamespace | The maximum number of persistent topics that can be created in the namespace. When the number of topics reaches this threshold, the broker rejects the request of creating a new topic, including the auto-created topics by the producer or consumer, until the number of connected consumers decreases. The default value 0 disables the check. | 0 | |subscriptionType [...]
+      
+    Available options are `NONE`, `LZ4`, `ZLIB`, `ZSTD`, and `SNAPPY`).   
+      
+    If this value is `NONE` or invalid, the `managedLedgerInfo` is not compressed.   
+      
+    **Note** that after enabling this configuration, if you want to degrade a broker, you need to change the value to `NONE` and make sure all ledger metadata is saved without compression. | None | | additionalServlets | Additional servlet name.   
+      
+    If you have multiple additional servlets, separate them by commas.   
+      
+    For example, additionalServlet_1, additionalServlet_2 | N/A | | additionalServletDirectory | Location of broker additional servlet NAR directory | ./brokerAdditionalServlet | | brokerEntryMetadataInterceptors | Set broker entry metadata interceptors.  
+      
+    Multiple interceptors should be separated by commas.   
+      
+    Available values:
+    - org.apache.pulsar.common.intercept.AppendBrokerTimestampMetadataInterceptor
+    - org.apache.pulsar.common.intercept.AppendIndexMetadataInterceptor
+      
+      
+    Example  
     brokerEntryMetadataInterceptors=org.apache.pulsar.common.intercept.AppendBrokerTimestampMetadataInterceptor, org.apache.pulsar.common.intercept.AppendIndexMetadataInterceptor|N/A | | enableExposingBrokerEntryMetadataToClient|Whether to expose broker entry metadata to client or not.  
       
     Available values:
@@ -252,6 +264,22 @@ Instead, you can set a subscription expiration time for each <strong>namespace</
       
     Example  
     enableExposingBrokerEntryMetadataToClient=true | false |&lt;/p&gt; 
+    #### Deprecated parameters of Broker
+    
+    The following parameters have been deprecated in the `conf/broker.conf` file.
+    
+    | Name                                         | Description                                                                                                     | Default |
+    | -------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | ------- |
+    | backlogQuotaDefaultLimitGB                   | Use `backlogQuotaDefaultLimitBytes` instead.                                                                    | -1      |
+    | brokerServicePurgeInactiveFrequencyInSeconds | Use `brokerDeleteInactiveTopicsFrequencySeconds`.                                                               | 60      |
+    | tlsEnabled                                   | Use `webServicePortTls` and `brokerServicePortTls` instead.                                                     | false   |
+    | replicationTlsEnabled                        | Enable TLS when talking with other clusters to replicate messages. Use `brokerClientTlsEnabled` instead.        | false   |
+    | subscriptionKeySharedEnable                  | Whether to enable the Key_Shared subscription. Use `subscriptionTypesEnabled` instead.                          | true    |
+    | zookeeperServers                             | Zookeeper quorum connection string. Use `metadataStoreUrl` instead.                                             | N/A     |
+    | configurationStoreServers                    | Configuration store connection string (as a comma-separated list). Use `configurationMetadataStoreUrl` instead. | N/A     |
+    | zooKeeperSessionTimeoutMillis                | Zookeeper session timeout in milliseconds. Use `metadataStoreSessionTimeoutMillis` instead.                     | 30000   |
+    | zooKeeperCacheExpirySeconds                  | ZooKeeper cache expiry time in seconds. Use `metadataStoreCacheExpirySeconds` instead.                          | 300     |
+    
     ## Client
     
     You can use the [`pulsar-client`](/docs/ko/next/reference-cli-tools#pulsar-client) CLI tool to publish messages to and consume messages from Pulsar topics. You can use this tool in place of a client library.
@@ -321,32 +349,51 @@ Instead, you can set a subscription expiration time for each <strong>namespace</
                                 - PKCS12&lt;/td&gt; 
                                     &lt;/tr&gt; 
                                     &lt;/tbody&gt; &lt;/table&gt; 
+                                    #### Deprecated parameters of standalone Pulsar
+                                    
+                                    The following parameters have been deprecated in the `conf/standalone.conf` file.
+                                    
+                                    | Name                             | Description                                                                                      | Default |
+                                    | -------------------------------- | ------------------------------------------------------------------------------------------------ | ------- |
+                                    | zooKeeperOperationTimeoutSeconds | ZooKeeper operation timeout in seconds. Use `metadataStoreOperationTimeoutSeconds` instead.      | 30      |
+                                    | zooKeeperCacheExpirySeconds      | ZooKeeper cache expiry time in seconds. Use `metadataStoreCacheExpirySeconds` instead.           | 300     |
+                                    | zooKeeperSessionTimeoutMillis    | The ZooKeeper session timeout, in milliseconds. Use `metadataStoreSessionTimeoutMillis` instead. | 30000   |
+                                    
                                     ## WebSocket
                                     
-                                    | Name                                 | Description                            | Default |
-                                    | ------------------------------------ | -------------------------------------- | ------- |
-                                    | configurationStoreServers            |                                        |         |
-                                    | zooKeeperSessionTimeoutMillis        |                                        | 30000   |
-                                    | zooKeeperCacheExpirySeconds          | ZooKeeper cache expiry time in seconds | 300     |
-                                    | serviceUrl                           |                                        |         |
-                                    | serviceUrlTls                        |                                        |         |
-                                    | brokerServiceUrl                     |                                        |         |
-                                    | brokerServiceUrlTls                  |                                        |         |
-                                    | webServicePort                       |                                        | 8080    |
-                                    | webServicePortTls                    |                                        | 8443    |
-                                    | bindAddress                          |                                        | 0.0.0.0 |
-                                    | clusterName                          |                                        |         |
-                                    | authenticationEnabled                |                                        | false   |
-                                    | authenticationProviders              |                                        |         |
-                                    | authorizationEnabled                 |                                        | false   |
-                                    | superUserRoles                       |                                        |         |
-                                    | brokerClientAuthenticationPlugin     |                                        |         |
-                                    | brokerClientAuthenticationParameters |                                        |         |
-                                    | tlsEnabled                           |                                        | false   |
-                                    | tlsAllowInsecureConnection           |                                        | false   |
-                                    | tlsCertificateFilePath               |                                        |         |
-                                    | tlsKeyFilePath                       |                                        |         |
-                                    | tlsTrustCertsFilePath                |                                        |         |
+                                    | Name                                 | Description                                     | Default |
+                                    | ------------------------------------ | ----------------------------------------------- | ------- |
+                                    | configurationMetadataStoreUrl        |                                                 |         |
+                                    | metadataStoreSessionTimeoutMillis    | Metadata store session timeout in milliseconds. | 30000   |
+                                    | metadataStoreCacheExpirySeconds      | Metadata store cache expiry time in seconds     | 300     |
+                                    | serviceUrl                           |                                                 |         |
+                                    | serviceUrlTls                        |                                                 |         |
+                                    | brokerServiceUrl                     |                                                 |         |
+                                    | brokerServiceUrlTls                  |                                                 |         |
+                                    | webServicePort                       |                                                 | 8080    |
+                                    | webServicePortTls                    |                                                 | 8443    |
+                                    | bindAddress                          |                                                 | 0.0.0.0 |
+                                    | clusterName                          |                                                 |         |
+                                    | authenticationEnabled                |                                                 | false   |
+                                    | authenticationProviders              |                                                 |         |
+                                    | authorizationEnabled                 |                                                 | false   |
+                                    | superUserRoles                       |                                                 |         |
+                                    | brokerClientAuthenticationPlugin     |                                                 |         |
+                                    | brokerClientAuthenticationParameters |                                                 |         |
+                                    | tlsEnabled                           |                                                 | false   |
+                                    | tlsAllowInsecureConnection           |                                                 | false   |
+                                    | tlsCertificateFilePath               |                                                 |         |
+                                    | tlsKeyFilePath                       |                                                 |         |
+                                    | tlsTrustCertsFilePath                |                                                 |         |
+                                    
+                                    #### Deprecated parameters of WebSocket
+                                    
+                                    The following parameters have been deprecated in the `conf/websocket.conf` file.
+                                    
+                                    | Name                          | Description                                                                                     | Default |
+                                    | ----------------------------- | ----------------------------------------------------------------------------------------------- | ------- |
+                                    | zooKeeperSessionTimeoutMillis | The ZooKeeper session timeout in milliseconds. Use `metadataStoreSessionTimeoutMillis` instead. | 30000   |
+                                    | zooKeeperCacheExpirySeconds   | ZooKeeper cache expiry time in seconds. Use `metadataStoreCacheExpirySeconds` instead.          | 300     |
                                     
                                     ## Pulsar proxy
                                     
@@ -359,6 +406,16 @@ Instead, you can set a subscription expiration time for each <strong>namespace</
                                             - 2: Parse and log channel information, command information and message body.&lt;/td&gt; 
                                                 &lt;/tr&gt; 
                                                 &lt;/tbody&gt; &lt;/table&gt; 
+                                                #### Deprecated parameters of Pulsar proxy
+                                                
+                                                The following parameters have been deprecated in the `conf/proxy.conf` file.
+                                                
+                                                | Name                        | Description                                                                                   | Default |
+                                                | --------------------------- | --------------------------------------------------------------------------------------------- | ------- |
+                                                | tlsEnabledInProxy           | Deprecated - use `servicePortTls` and `webServicePortTls` instead.                            | false   |
+                                                | zookeeperSessionTimeoutMs   | ZooKeeper session timeout (in milliseconds). Use `metadataStoreSessionTimeoutMillis` instead. | 30000   |
+                                                | zooKeeperCacheExpirySeconds | ZooKeeper cache expiry time in seconds. Use `metadataStoreCacheExpirySeconds` instead.        | 300     |
+                                                
                                                 ## ZooKeeper
                                                 
                                                 ZooKeeper handles a broad range of essential configuration- and coordination-related tasks for Pulsar. The default configuration file for ZooKeeper is in the `conf/zookeeper.conf` file in your Pulsar installation. The following parameters are available:
diff --git a/content/docs/ko/next/reference-metrics.html b/content/docs/ko/next/reference-metrics.html
index e5abdca..bfa4d42 100644
--- a/content/docs/ko/next/reference-metrics.html
+++ b/content/docs/ko/next/reference-metrics.html
@@ -202,9 +202,10 @@
 <tr><th>Name</th><th>Type</th><th>Description</th></tr>
 </thead>
 <tbody>
-<tr><td>bookkeeper_server_BOOKIE_QUARANTINE_count</td><td>Counter</td><td>The number of bookie clients to be quarantined.</td></tr>
+<tr><td>pulsar_managedLedger_client_bookkeeper_client_BOOKIE_QUARANTINE</td><td>Counter</td><td>The number of bookie clients to be quarantined.</td></tr>
 </tbody>
 </table>
+<p>If you want to expose this metric, set <code>bookkeeperClientExposeStatsToPrometheus</code> to <code>true</code> in the <code>broker.conf</code> file. |</p>
 <h3><a class="anchor" aria-hidden="true" id="namespace-metrics"></a><a href="#namespace-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- [...]
 <blockquote>
 <p>Namespace metrics are only exposed when <code>exposeTopicLevelMetricsInPrometheus</code> is set to <code>false</code>.</p>
@@ -302,6 +303,7 @@ Available thresholds:</p>
 <tr><td>pulsar_consumers_count</td><td>Gauge</td><td>The number of active consumers of the topic connected to this broker.</td></tr>
 <tr><td>pulsar_rate_in</td><td>Gauge</td><td>The total message rate of the topic coming into this broker (messages/second).</td></tr>
 <tr><td>pulsar_rate_out</td><td>Gauge</td><td>The total message rate of the topic going out from this broker (messages/second).</td></tr>
+<tr><td>pulsar_publish_rate_limit_times</td><td>Gauge</td><td>The number of times the publish rate limit is triggered.</td></tr>
 <tr><td>pulsar_throughput_in</td><td>Gauge</td><td>The total throughput of the topic coming into this broker (bytes/second).</td></tr>
 <tr><td>pulsar_throughput_out</td><td>Gauge</td><td>The total throughput of the topic going out from this broker (bytes/second).</td></tr>
 <tr><td>pulsar_storage_size</td><td>Gauge</td><td>The total storage size of the topics in this topic owned by this broker (bytes).</td></tr>
diff --git a/content/docs/ko/next/reference-metrics/index.html b/content/docs/ko/next/reference-metrics/index.html
index e5abdca..bfa4d42 100644
--- a/content/docs/ko/next/reference-metrics/index.html
+++ b/content/docs/ko/next/reference-metrics/index.html
@@ -202,9 +202,10 @@
 <tr><th>Name</th><th>Type</th><th>Description</th></tr>
 </thead>
 <tbody>
-<tr><td>bookkeeper_server_BOOKIE_QUARANTINE_count</td><td>Counter</td><td>The number of bookie clients to be quarantined.</td></tr>
+<tr><td>pulsar_managedLedger_client_bookkeeper_client_BOOKIE_QUARANTINE</td><td>Counter</td><td>The number of bookie clients to be quarantined.</td></tr>
 </tbody>
 </table>
+<p>If you want to expose this metric, set <code>bookkeeperClientExposeStatsToPrometheus</code> to <code>true</code> in the <code>broker.conf</code> file. |</p>
 <h3><a class="anchor" aria-hidden="true" id="namespace-metrics"></a><a href="#namespace-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- [...]
 <blockquote>
 <p>Namespace metrics are only exposed when <code>exposeTopicLevelMetricsInPrometheus</code> is set to <code>false</code>.</p>
@@ -302,6 +303,7 @@ Available thresholds:</p>
 <tr><td>pulsar_consumers_count</td><td>Gauge</td><td>The number of active consumers of the topic connected to this broker.</td></tr>
 <tr><td>pulsar_rate_in</td><td>Gauge</td><td>The total message rate of the topic coming into this broker (messages/second).</td></tr>
 <tr><td>pulsar_rate_out</td><td>Gauge</td><td>The total message rate of the topic going out from this broker (messages/second).</td></tr>
+<tr><td>pulsar_publish_rate_limit_times</td><td>Gauge</td><td>The number of times the publish rate limit is triggered.</td></tr>
 <tr><td>pulsar_throughput_in</td><td>Gauge</td><td>The total throughput of the topic coming into this broker (bytes/second).</td></tr>
 <tr><td>pulsar_throughput_out</td><td>Gauge</td><td>The total throughput of the topic going out from this broker (bytes/second).</td></tr>
 <tr><td>pulsar_storage_size</td><td>Gauge</td><td>The total storage size of the topics in this topic owned by this broker (bytes).</td></tr>
diff --git a/content/docs/ko/next/schema-evolution-compatibility.html b/content/docs/ko/next/schema-evolution-compatibility.html
index b8cd2fd..ea08599 100644
--- a/content/docs/ko/next/schema-evolution-compatibility.html
+++ b/content/docs/ko/next/schema-evolution-compatibility.html
@@ -428,7 +428,7 @@
 <p>In some data formats, for example, Avro, you can define fields with default values. Consequently, adding or removing a field with a default value is a fully compatible change.</p>
 <blockquote>
 <p><strong>Tip</strong></p>
-<p>You can set schema compatibility check strategy at namespace or broker level. For how to set the strategy, see <a href="/docs/ko/next/schema-manage/#set-schema-compatibility-check-strategy">here</a>.</p>
+<p>You can set schema compatibility check strategy at the topic, namespace or broker level. For how to set the strategy, see <a href="/docs/ko/next/schema-manage/#set-schema-compatibility-check-strategy">here</a>.</p>
 </blockquote>
 <h2><a class="anchor" aria-hidden="true" id="schema-verification"></a><a href="#schema-verification" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
 <p>When a producer or a consumer tries to connect to a topic, a broker performs some checks to verify a schema.</p>
diff --git a/content/docs/ko/next/schema-evolution-compatibility/index.html b/content/docs/ko/next/schema-evolution-compatibility/index.html
index b8cd2fd..ea08599 100644
--- a/content/docs/ko/next/schema-evolution-compatibility/index.html
+++ b/content/docs/ko/next/schema-evolution-compatibility/index.html
@@ -428,7 +428,7 @@
 <p>In some data formats, for example, Avro, you can define fields with default values. Consequently, adding or removing a field with a default value is a fully compatible change.</p>
 <blockquote>
 <p><strong>Tip</strong></p>
-<p>You can set schema compatibility check strategy at namespace or broker level. For how to set the strategy, see <a href="/docs/ko/next/schema-manage/#set-schema-compatibility-check-strategy">here</a>.</p>
+<p>You can set schema compatibility check strategy at the topic, namespace or broker level. For how to set the strategy, see <a href="/docs/ko/next/schema-manage/#set-schema-compatibility-check-strategy">here</a>.</p>
 </blockquote>
 <h2><a class="anchor" aria-hidden="true" id="schema-verification"></a><a href="#schema-verification" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
 <p>When a producer or a consumer tries to connect to a topic, a broker performs some checks to verify a schema.</p>
diff --git a/content/docs/ko/next/security-overview.html b/content/docs/ko/next/security-overview.html
index 6e87c0f..0489b7b 100644
--- a/content/docs/ko/next/security-overview.html
+++ b/content/docs/ko/next/security-overview.html
@@ -91,7 +91,7 @@
 <li><a href="/docs/ko/next/security-kerberos">Kerberos</a></li>
 <li><a href="/docs/ko/next/security-jwt">JSON Web Token Authentication</a></li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ko/next/administration-isolation"><span class="arrow-prev">← </span><span>Pulsar isolation</span></a><a class="docs-next button" href="/docs/ko/next/security-policy-and-supported-versions"><span>Next</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#role-tokens">Role tokens</a></li><li><a href="#authentication-providers" [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ko/next/administration-isolation"><span class="arrow-prev">← </span><span>Pulsar isolation</span></a><a class="docs-next button" href="/docs/ko/next/security-policy-and-supported-versions"><span>Security Policy and Supported Versions</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#role-tokens">Role tokens</a></li><li>< [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/ko/next/security-overview/index.html b/content/docs/ko/next/security-overview/index.html
index 6e87c0f..0489b7b 100644
--- a/content/docs/ko/next/security-overview/index.html
+++ b/content/docs/ko/next/security-overview/index.html
@@ -91,7 +91,7 @@
 <li><a href="/docs/ko/next/security-kerberos">Kerberos</a></li>
 <li><a href="/docs/ko/next/security-jwt">JSON Web Token Authentication</a></li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ko/next/administration-isolation"><span class="arrow-prev">← </span><span>Pulsar isolation</span></a><a class="docs-next button" href="/docs/ko/next/security-policy-and-supported-versions"><span>Next</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#role-tokens">Role tokens</a></li><li><a href="#authentication-providers" [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ko/next/administration-isolation"><span class="arrow-prev">← </span><span>Pulsar isolation</span></a><a class="docs-next button" href="/docs/ko/next/security-policy-and-supported-versions"><span>Security Policy and Supported Versions</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#role-tokens">Role tokens</a></li><li>< [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/ko/next/security-tls-keystore.html b/content/docs/ko/next/security-tls-keystore.html
index ad3362c..88b908e 100644
--- a/content/docs/ko/next/security-tls-keystore.html
+++ b/content/docs/ko/next/security-tls-keystore.html
@@ -160,48 +160,41 @@ brokerClientTlsTrustStorePassword= // <span class="hljs-keyword">Set</span> this
 <li>tlsCiphers=[TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256], A cipher suite is a named combination of authentication, encryption, MAC and key exchange algorithm used to negotiate the security settings for a network connection using TLS network protocol. By default, it is null. <a href="https://www.openssl.org/docs/man1.0.2/apps/ciphers.html">OpenSSL Ciphers</a> <a href="http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#ciphersuites">JDK Ciphers</a></li>
 <li>tlsProtocols=[TLSv1.3,TLSv1.2] (list out the TLS protocols that you are going to accept from clients). By default, it is not set.</li>
 </ol>
-<pre><code class="hljs"><span class="hljs-comment">### Configuring Clients</span>
-
-This is similar <span class="hljs-keyword">to</span> [TLS encryption configuing <span class="hljs-keyword">for</span><span class="hljs-built_in"> client </span>with PEM type](security-tls-transport.md#Client configuration).
-<span class="hljs-keyword">For</span> a a minimal configuration,<span class="hljs-built_in"> user </span>need <span class="hljs-keyword">to</span> provide the TrustStore information.
-
-e.g. 
-1. <span class="hljs-keyword">for</span> [Command-line tools](reference-cli-tools.md) like [`pulsar-admin`](reference-cli-tools#pulsar-admin), [`pulsar-perf`](reference-cli-tools#pulsar-perf), <span class="hljs-keyword">and</span> [`pulsar-client`](reference-cli-tools#pulsar-client) use the `conf/client.conf`<span class="hljs-built_in"> config </span>file <span class="hljs-keyword">in</span> a Pulsar installation.
-
-    ```properties
-    <span class="hljs-attribute">webServiceUrl</span>=https://broker.example.com:8443/
-    <span class="hljs-attribute">brokerServiceUrl</span>=pulsar+ssl://broker.example.com:6651/
-    <span class="hljs-attribute">useKeyStoreTls</span>=<span class="hljs-literal">true</span>
-    <span class="hljs-attribute">tlsTrustStoreType</span>=JKS
-    <span class="hljs-attribute">tlsTrustStorePath</span>=/var/private/tls/client.truststore.jks
-    <span class="hljs-attribute">tlsTrustStorePassword</span>=clientpw
-    ```
-
-1. <span class="hljs-keyword">for</span> java<span class="hljs-built_in"> client
-</span>    ```java
-    import org.apache.pulsar.client.api.PulsarClient;
-
-    PulsarClient<span class="hljs-built_in"> client </span>= PulsarClient.builder()
-        .serviceUrl(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>)
-        .enableTls(<span class="hljs-literal">true</span>)
-        .useKeyStoreTls(<span class="hljs-literal">true</span>)
-        .tlsTrustStorePath(<span class="hljs-string">"/var/private/tls/client.truststore.jks"</span>)
-        .tlsTrustStorePassword(<span class="hljs-string">"clientpw"</span>)
-        .allowTlsInsecureConnection(<span class="hljs-literal">false</span>)
-        .build();
-    ```
+<h3><a class="anchor" aria-hidden="true" id="configuring-clients"></a><a href="#configuring-clients" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
+<p>This is similar to [TLS encryption configuing for client with PEM type](/docs/ko/next/security-tls-transport#Client configuration). For a a minimal configuration, user need to provide the TrustStore information.</p>
+<p>e.g.</p>
+<ol>
+<li><p>for <a href="/docs/ko/next/reference-cli-tools">Command-line tools</a> like <a href="reference-cli-tools#pulsar-admin"><code>pulsar-admin</code></a>, <a href="reference-cli-tools#pulsar-perf"><code>pulsar-perf</code></a>, and <a href="reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> use the <code>conf/client.conf</code> config file in a Pulsar installation.</p>
+<pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">https://broker.example.com:8443/</span>
+<span class="hljs-attr">brokerServiceUrl</span>=<span class="hljs-string">pulsar+ssl://broker.example.com:6651/</span>
+<span class="hljs-attr">useKeyStoreTls</span>=<span class="hljs-string">true</span>
+<span class="hljs-attr">tlsTrustStoreType</span>=<span class="hljs-string">JKS</span>
+<span class="hljs-attr">tlsTrustStorePath</span>=<span class="hljs-string">/var/private/tls/client.truststore.jks</span>
+<span class="hljs-attr">tlsTrustStorePassword</span>=<span class="hljs-string">clientpw</span>
+</code></pre></li>
+<li><p>for java client</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 
-1. <span class="hljs-keyword">for</span> java admin<span class="hljs-built_in"> client
-</span>```java
-    PulsarAdmin amdin = PulsarAdmin.builder().serviceHttpUrl(<span class="hljs-string">"https://broker.example.com:8443"</span>)
-                .useKeyStoreTls(<span class="hljs-literal">true</span>)
+PulsarClient client = PulsarClient.builder()
+    .serviceUrl(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>)
+    .enableTls(<span class="hljs-keyword">true</span>)
+    .useKeyStoreTls(<span class="hljs-keyword">true</span>)
+    .tlsTrustStorePath(<span class="hljs-string">"/var/private/tls/client.truststore.jks"</span>)
+    .tlsTrustStorePassword(<span class="hljs-string">"clientpw"</span>)
+    .allowTlsInsecureConnection(<span class="hljs-keyword">false</span>)
+    .build();
+</code></pre></li>
+<li><p>for java admin client</p></li>
+</ol>
+<pre><code class="hljs css language-java">    PulsarAdmin amdin = PulsarAdmin.builder().serviceHttpUrl(<span class="hljs-string">"https://broker.example.com:8443"</span>)
+                .useKeyStoreTls(<span class="hljs-keyword">true</span>)
                 .tlsTrustStorePath(<span class="hljs-string">"/var/private/tls/client.truststore.jks"</span>)
                 .tlsTrustStorePassword(<span class="hljs-string">"clientpw"</span>)
-                .allowTlsInsecureConnection(<span class="hljs-literal">false</span>)
+                .allowTlsInsecureConnection(<span class="hljs-keyword">false</span>)
                 .build();
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="tls-authentication-with-keystore-configure"></a><a href="#tls-authentication-with-keystore-configure" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c [...]
-<p>This similar to <a href="security-tls-authentication.md">TLS authentication with PEM type</a></p>
+<p>This similar to <a href="/docs/ko/next/security-tls-authentication">TLS authentication with PEM type</a></p>
 <h3><a class="anchor" aria-hidden="true" id="broker-authentication-config"></a><a href="#broker-authentication-config" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
 <p><code>broker.conf</code></p>
 <pre><code class="hljs css language-properties"><span class="hljs-comment"># Configuration to enable authentication</span>
@@ -241,7 +234,7 @@ e.g.
 <p>Besides the TLS encryption configuring. The main work is configuring the KeyStore, which contains a valid CN as client role, for client.</p>
 <p>e.g.</p>
 <ol>
-<li><p>for <a href="reference-cli-tools.md">Command-line tools</a> like <a href="reference-cli-tools#pulsar-admin"><code>pulsar-admin</code></a>, <a href="reference-cli-tools#pulsar-perf"><code>pulsar-perf</code></a>, and <a href="reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> use the <code>conf/client.conf</code> config file in a Pulsar installation.</p>
+<li><p>for <a href="/docs/ko/next/reference-cli-tools">Command-line tools</a> like <a href="reference-cli-tools#pulsar-admin"><code>pulsar-admin</code></a>, <a href="reference-cli-tools#pulsar-perf"><code>pulsar-perf</code></a>, and <a href="reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> use the <code>conf/client.conf</code> config file in a Pulsar installation.</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">https://broker.example.com:8443/</span>
 <span class="hljs-attr">brokerServiceUrl</span>=<span class="hljs-string">pulsar+ssl://broker.example.com:6651/</span>
 <span class="hljs-attr">useKeyStoreTls</span>=<span class="hljs-string">true</span>
@@ -283,7 +276,7 @@ PulsarClient client = PulsarClient.builder()
 <pre><code class="hljs css language-shell">-Djavax.net.debug=all
 </code></pre>
 <p>You can find more details on this in <a href="http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/ReadDebug.html">Oracle documentation</a> on <a href="http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/ReadDebug.html">debugging SSL/TLS connections</a>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ko/next/security-tls-authentication"><span class="arrow-prev">← </span><span>Authentication using TLS</span></a><a class="docs-next button" href="/docs/ko/next/security-jwt"><span>Authentication using JWT</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#overview">Overview</a></li><li><a href="#tls-encryption-with-keysto [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ko/next/security-tls-authentication"><span class="arrow-prev">← </span><span>Authentication using TLS</span></a><a class="docs-next button" href="/docs/ko/next/security-jwt"><span>Authentication using JWT</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#overview">Overview</a></li><li><a href="#tls-encryption-with-keysto [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/ko/next/security-tls-keystore/index.html b/content/docs/ko/next/security-tls-keystore/index.html
index ad3362c..88b908e 100644
--- a/content/docs/ko/next/security-tls-keystore/index.html
+++ b/content/docs/ko/next/security-tls-keystore/index.html
@@ -160,48 +160,41 @@ brokerClientTlsTrustStorePassword= // <span class="hljs-keyword">Set</span> this
 <li>tlsCiphers=[TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256], A cipher suite is a named combination of authentication, encryption, MAC and key exchange algorithm used to negotiate the security settings for a network connection using TLS network protocol. By default, it is null. <a href="https://www.openssl.org/docs/man1.0.2/apps/ciphers.html">OpenSSL Ciphers</a> <a href="http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#ciphersuites">JDK Ciphers</a></li>
 <li>tlsProtocols=[TLSv1.3,TLSv1.2] (list out the TLS protocols that you are going to accept from clients). By default, it is not set.</li>
 </ol>
-<pre><code class="hljs"><span class="hljs-comment">### Configuring Clients</span>
-
-This is similar <span class="hljs-keyword">to</span> [TLS encryption configuing <span class="hljs-keyword">for</span><span class="hljs-built_in"> client </span>with PEM type](security-tls-transport.md#Client configuration).
-<span class="hljs-keyword">For</span> a a minimal configuration,<span class="hljs-built_in"> user </span>need <span class="hljs-keyword">to</span> provide the TrustStore information.
-
-e.g. 
-1. <span class="hljs-keyword">for</span> [Command-line tools](reference-cli-tools.md) like [`pulsar-admin`](reference-cli-tools#pulsar-admin), [`pulsar-perf`](reference-cli-tools#pulsar-perf), <span class="hljs-keyword">and</span> [`pulsar-client`](reference-cli-tools#pulsar-client) use the `conf/client.conf`<span class="hljs-built_in"> config </span>file <span class="hljs-keyword">in</span> a Pulsar installation.
-
-    ```properties
-    <span class="hljs-attribute">webServiceUrl</span>=https://broker.example.com:8443/
-    <span class="hljs-attribute">brokerServiceUrl</span>=pulsar+ssl://broker.example.com:6651/
-    <span class="hljs-attribute">useKeyStoreTls</span>=<span class="hljs-literal">true</span>
-    <span class="hljs-attribute">tlsTrustStoreType</span>=JKS
-    <span class="hljs-attribute">tlsTrustStorePath</span>=/var/private/tls/client.truststore.jks
-    <span class="hljs-attribute">tlsTrustStorePassword</span>=clientpw
-    ```
-
-1. <span class="hljs-keyword">for</span> java<span class="hljs-built_in"> client
-</span>    ```java
-    import org.apache.pulsar.client.api.PulsarClient;
-
-    PulsarClient<span class="hljs-built_in"> client </span>= PulsarClient.builder()
-        .serviceUrl(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>)
-        .enableTls(<span class="hljs-literal">true</span>)
-        .useKeyStoreTls(<span class="hljs-literal">true</span>)
-        .tlsTrustStorePath(<span class="hljs-string">"/var/private/tls/client.truststore.jks"</span>)
-        .tlsTrustStorePassword(<span class="hljs-string">"clientpw"</span>)
-        .allowTlsInsecureConnection(<span class="hljs-literal">false</span>)
-        .build();
-    ```
+<h3><a class="anchor" aria-hidden="true" id="configuring-clients"></a><a href="#configuring-clients" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
+<p>This is similar to [TLS encryption configuing for client with PEM type](/docs/ko/next/security-tls-transport#Client configuration). For a a minimal configuration, user need to provide the TrustStore information.</p>
+<p>e.g.</p>
+<ol>
+<li><p>for <a href="/docs/ko/next/reference-cli-tools">Command-line tools</a> like <a href="reference-cli-tools#pulsar-admin"><code>pulsar-admin</code></a>, <a href="reference-cli-tools#pulsar-perf"><code>pulsar-perf</code></a>, and <a href="reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> use the <code>conf/client.conf</code> config file in a Pulsar installation.</p>
+<pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">https://broker.example.com:8443/</span>
+<span class="hljs-attr">brokerServiceUrl</span>=<span class="hljs-string">pulsar+ssl://broker.example.com:6651/</span>
+<span class="hljs-attr">useKeyStoreTls</span>=<span class="hljs-string">true</span>
+<span class="hljs-attr">tlsTrustStoreType</span>=<span class="hljs-string">JKS</span>
+<span class="hljs-attr">tlsTrustStorePath</span>=<span class="hljs-string">/var/private/tls/client.truststore.jks</span>
+<span class="hljs-attr">tlsTrustStorePassword</span>=<span class="hljs-string">clientpw</span>
+</code></pre></li>
+<li><p>for java client</p>
+<pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
 
-1. <span class="hljs-keyword">for</span> java admin<span class="hljs-built_in"> client
-</span>```java
-    PulsarAdmin amdin = PulsarAdmin.builder().serviceHttpUrl(<span class="hljs-string">"https://broker.example.com:8443"</span>)
-                .useKeyStoreTls(<span class="hljs-literal">true</span>)
+PulsarClient client = PulsarClient.builder()
+    .serviceUrl(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>)
+    .enableTls(<span class="hljs-keyword">true</span>)
+    .useKeyStoreTls(<span class="hljs-keyword">true</span>)
+    .tlsTrustStorePath(<span class="hljs-string">"/var/private/tls/client.truststore.jks"</span>)
+    .tlsTrustStorePassword(<span class="hljs-string">"clientpw"</span>)
+    .allowTlsInsecureConnection(<span class="hljs-keyword">false</span>)
+    .build();
+</code></pre></li>
+<li><p>for java admin client</p></li>
+</ol>
+<pre><code class="hljs css language-java">    PulsarAdmin amdin = PulsarAdmin.builder().serviceHttpUrl(<span class="hljs-string">"https://broker.example.com:8443"</span>)
+                .useKeyStoreTls(<span class="hljs-keyword">true</span>)
                 .tlsTrustStorePath(<span class="hljs-string">"/var/private/tls/client.truststore.jks"</span>)
                 .tlsTrustStorePassword(<span class="hljs-string">"clientpw"</span>)
-                .allowTlsInsecureConnection(<span class="hljs-literal">false</span>)
+                .allowTlsInsecureConnection(<span class="hljs-keyword">false</span>)
                 .build();
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="tls-authentication-with-keystore-configure"></a><a href="#tls-authentication-with-keystore-configure" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c [...]
-<p>This similar to <a href="security-tls-authentication.md">TLS authentication with PEM type</a></p>
+<p>This similar to <a href="/docs/ko/next/security-tls-authentication">TLS authentication with PEM type</a></p>
 <h3><a class="anchor" aria-hidden="true" id="broker-authentication-config"></a><a href="#broker-authentication-config" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
 <p><code>broker.conf</code></p>
 <pre><code class="hljs css language-properties"><span class="hljs-comment"># Configuration to enable authentication</span>
@@ -241,7 +234,7 @@ e.g.
 <p>Besides the TLS encryption configuring. The main work is configuring the KeyStore, which contains a valid CN as client role, for client.</p>
 <p>e.g.</p>
 <ol>
-<li><p>for <a href="reference-cli-tools.md">Command-line tools</a> like <a href="reference-cli-tools#pulsar-admin"><code>pulsar-admin</code></a>, <a href="reference-cli-tools#pulsar-perf"><code>pulsar-perf</code></a>, and <a href="reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> use the <code>conf/client.conf</code> config file in a Pulsar installation.</p>
+<li><p>for <a href="/docs/ko/next/reference-cli-tools">Command-line tools</a> like <a href="reference-cli-tools#pulsar-admin"><code>pulsar-admin</code></a>, <a href="reference-cli-tools#pulsar-perf"><code>pulsar-perf</code></a>, and <a href="reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> use the <code>conf/client.conf</code> config file in a Pulsar installation.</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">https://broker.example.com:8443/</span>
 <span class="hljs-attr">brokerServiceUrl</span>=<span class="hljs-string">pulsar+ssl://broker.example.com:6651/</span>
 <span class="hljs-attr">useKeyStoreTls</span>=<span class="hljs-string">true</span>
@@ -283,7 +276,7 @@ PulsarClient client = PulsarClient.builder()
 <pre><code class="hljs css language-shell">-Djavax.net.debug=all
 </code></pre>
 <p>You can find more details on this in <a href="http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/ReadDebug.html">Oracle documentation</a> on <a href="http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/ReadDebug.html">debugging SSL/TLS connections</a>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ko/next/security-tls-authentication"><span class="arrow-prev">← </span><span>Authentication using TLS</span></a><a class="docs-next button" href="/docs/ko/next/security-jwt"><span>Authentication using JWT</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#overview">Overview</a></li><li><a href="#tls-encryption-with-keysto [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ko/next/security-tls-authentication"><span class="arrow-prev">← </span><span>Authentication using TLS</span></a><a class="docs-next button" href="/docs/ko/next/security-jwt"><span>Authentication using JWT</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#overview">Overview</a></li><li><a href="#tls-encryption-with-keysto [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/ko/next/security-tls-transport.html b/content/docs/ko/next/security-tls-transport.html
index 63ad8ee..3c14b96 100644
--- a/content/docs/ko/next/security-tls-transport.html
+++ b/content/docs/ko/next/security-tls-transport.html
@@ -251,7 +251,7 @@ var client = PulsarClient.Builder()
                          .VerifyCertificateAuthority(true) //Default is 'true'
                          .VerifyCertificateName(false)     //Default is 'false'
                          .Build();</code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ko/next/security-policy-and-supported-versions"><span class="arrow-prev">← </span><span>Previous</span></a><a class="docs-next button" href="/docs/ko/next/security-tls-authentication"><span>Authentication using TLS</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#tls-overview">TLS overview</a></li><li><a href="#tls-conc [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ko/next/security-policy-and-supported-versions"><span class="arrow-prev">← </span><span>Security Policy and Supported Versions</span></a><a class="docs-next button" href="/docs/ko/next/security-tls-authentication"><span>Authentication using TLS</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#tls-overview">TLS overview< [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/ko/next/security-tls-transport/index.html b/content/docs/ko/next/security-tls-transport/index.html
index 63ad8ee..3c14b96 100644
--- a/content/docs/ko/next/security-tls-transport/index.html
+++ b/content/docs/ko/next/security-tls-transport/index.html
@@ -251,7 +251,7 @@ var client = PulsarClient.Builder()
                          .VerifyCertificateAuthority(true) //Default is 'true'
                          .VerifyCertificateName(false)     //Default is 'false'
                          .Build();</code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ko/next/security-policy-and-supported-versions"><span class="arrow-prev">← </span><span>Previous</span></a><a class="docs-next button" href="/docs/ko/next/security-tls-authentication"><span>Authentication using TLS</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#tls-overview">TLS overview</a></li><li><a href="#tls-conc [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ko/next/security-policy-and-supported-versions"><span class="arrow-prev">← </span><span>Security Policy and Supported Versions</span></a><a class="docs-next button" href="/docs/ko/next/security-tls-authentication"><span>Authentication using TLS</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#tls-overview">TLS overview< [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/ko/next/standalone.html b/content/docs/ko/next/standalone.html
index 235a0f9..5396049 100644
--- a/content/docs/ko/next/standalone.html
+++ b/content/docs/ko/next/standalone.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="ko"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>로컬 독립형 Pulsar 구성 · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="로컬 개발 및 테스트를 위해 여러분의 컴퓨터에서 Pulsar를 독립형 모드로 실행할 수 있습니다. 독립형 모드에는 Pulsar 브로커와 별도의 JVM (Java Virtual Machine) 프로세스에서 실행되는 필수 구성 요소인 Zookeeper 및 BookKeeper 가 있습니다."/><meta name="docsear [...]
+<!DOCTYPE html><html lang="ko"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>로컬 독립형 Pulsar 구성 · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="로컬 개발 및 테스트를 위해 여러분의 컴퓨터에서 Pulsar를 독립형 모드로 실행할 수 있습니다. The standalone mode includes a Pulsar broker, the necessary [RocksDB](http://rocksdb.org/) and BookKeeper components running i [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,7 +74,7 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ko" target="_blank" rel="noreferrer noopener">Translate</a><h1 id="__docusaurus" class="postHeaderTitle">로컬 독립형 Pulsar 구성</h1></header><article><div><span><p>로컬 개발 및 테스트를 위해 여러분의 컴퓨터에서 Pulsar를 독립형 모드로 실행할 수 있습니다. 독립형 모드에는 Pulsar 브로커와 별도의 JVM (Java Virtual Machine)  [...]
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ko" target="_blank" rel="noreferrer noopener">Translate</a><h1 id="__docusaurus" class="postHeaderTitle">로컬 독립형 Pulsar 구성</h1></header><article><div><span><p>로컬 개발 및 테스트를 위해 여러분의 컴퓨터에서 Pulsar를 독립형 모드로 실행할 수 있습니다. The standalone mode includes a Pulsar broker, the ne [...]
 <blockquote>
 <p><strong>Pulsar in production?</strong>  <br>
 If you're looking to run a full production Pulsar installation, see the <a href="/docs/ko/next/deploy-bare-metal">Deploying a Pulsar instance</a> guide.</p>
@@ -111,7 +111,8 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.9.1
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>bin</code></td><td style="text-align:left">Pulsar's command-line tools, such as <a href="/docs/ko/next/reference-cli-tools#pulsar"><code>pulsar</code></a> and <a href="https://pulsar.apache.org/tools/pulsar-admin/"><code>pulsar-admin</code></a>.</td></tr>
-<tr><td style="text-align:left"><code>conf</code></td><td style="text-align:left">구성 파일들이 있습니다. <a href="/docs/ko/next/reference-configuration#broker">broker configuration</a>, <a href="/docs/ko/next/reference-configuration#zookeeper">ZooKeeper configuration</a> 등.</td></tr>
+<tr><td style="text-align:left"><code>conf</code></td><td style="text-align:left">Configuration files for Pulsar, including <a href="/docs/ko/next/reference-configuration#broker">broker configuration</a> and more.</td></tr>
+<tr><td style="text-align:left"><strong>Note:</strong> Pulsar standalone uses RocksDB as the local metadata store and its configuration file path <a href="/docs/ko/next/reference-configuration"><code>metadataStoreConfigPath</code></a> is configurable in the <code>standalone.conf</code> file. For more information about the configurations of RocksDB, see <a href="https://github.com/facebook/rocksdb/blob/main/examples/rocksdb_option_file_example.ini">here</a> and related <a href="https://gi [...]
 <tr><td style="text-align:left"><code>examples</code></td><td style="text-align:left"><a href="/docs/ko/next/functions-overview">Pulsar Functions</a> 예제가 포함된 Java Jar 파일들이 있습니다.</td></tr>
 <tr><td style="text-align:left"><code>인스턴스</code></td><td style="text-align:left"><a href="/docs/ko/next/functions-overview">Pulsar Functions</a>을 위하여 생성된 아티펙트.</td></tr>
 <tr><td style="text-align:left"><code>lib</code></td><td style="text-align:left">The <a href="https://en.wikipedia.org/wiki/JAR_(file_format)">JAR</a> files used by Pulsar.</td></tr>
@@ -124,7 +125,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.9.1
 <tr><th style="text-align:left">디렉토리</th><th style="text-align:left">포함</th></tr>
 </thead>
 <tbody>
-<tr><td style="text-align:left"><code>데이터</code></td><td style="text-align:left">The data storage directory used by ZooKeeper and BookKeeper.</td></tr>
+<tr><td style="text-align:left"><code>데이터</code></td><td style="text-align:left">The data storage directory used by RocksDB and BookKeeper.</td></tr>
 <tr><td style="text-align:left"><code>로그</code></td><td style="text-align:left">Logs created by the installation.</td></tr>
 </tbody>
 </table>
diff --git a/content/docs/ko/next/standalone/index.html b/content/docs/ko/next/standalone/index.html
index 235a0f9..5396049 100644
--- a/content/docs/ko/next/standalone/index.html
+++ b/content/docs/ko/next/standalone/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="ko"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>로컬 독립형 Pulsar 구성 · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="로컬 개발 및 테스트를 위해 여러분의 컴퓨터에서 Pulsar를 독립형 모드로 실행할 수 있습니다. 독립형 모드에는 Pulsar 브로커와 별도의 JVM (Java Virtual Machine) 프로세스에서 실행되는 필수 구성 요소인 Zookeeper 및 BookKeeper 가 있습니다."/><meta name="docsear [...]
+<!DOCTYPE html><html lang="ko"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>로컬 독립형 Pulsar 구성 · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="로컬 개발 및 테스트를 위해 여러분의 컴퓨터에서 Pulsar를 독립형 모드로 실행할 수 있습니다. The standalone mode includes a Pulsar broker, the necessary [RocksDB](http://rocksdb.org/) and BookKeeper components running i [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,7 +74,7 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ko" target="_blank" rel="noreferrer noopener">Translate</a><h1 id="__docusaurus" class="postHeaderTitle">로컬 독립형 Pulsar 구성</h1></header><article><div><span><p>로컬 개발 및 테스트를 위해 여러분의 컴퓨터에서 Pulsar를 독립형 모드로 실행할 수 있습니다. 독립형 모드에는 Pulsar 브로커와 별도의 JVM (Java Virtual Machine)  [...]
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ko" target="_blank" rel="noreferrer noopener">Translate</a><h1 id="__docusaurus" class="postHeaderTitle">로컬 독립형 Pulsar 구성</h1></header><article><div><span><p>로컬 개발 및 테스트를 위해 여러분의 컴퓨터에서 Pulsar를 독립형 모드로 실행할 수 있습니다. The standalone mode includes a Pulsar broker, the ne [...]
 <blockquote>
 <p><strong>Pulsar in production?</strong>  <br>
 If you're looking to run a full production Pulsar installation, see the <a href="/docs/ko/next/deploy-bare-metal">Deploying a Pulsar instance</a> guide.</p>
@@ -111,7 +111,8 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.9.1
 </thead>
 <tbody>
 <tr><td style="text-align:left"><code>bin</code></td><td style="text-align:left">Pulsar's command-line tools, such as <a href="/docs/ko/next/reference-cli-tools#pulsar"><code>pulsar</code></a> and <a href="https://pulsar.apache.org/tools/pulsar-admin/"><code>pulsar-admin</code></a>.</td></tr>
-<tr><td style="text-align:left"><code>conf</code></td><td style="text-align:left">구성 파일들이 있습니다. <a href="/docs/ko/next/reference-configuration#broker">broker configuration</a>, <a href="/docs/ko/next/reference-configuration#zookeeper">ZooKeeper configuration</a> 등.</td></tr>
+<tr><td style="text-align:left"><code>conf</code></td><td style="text-align:left">Configuration files for Pulsar, including <a href="/docs/ko/next/reference-configuration#broker">broker configuration</a> and more.</td></tr>
+<tr><td style="text-align:left"><strong>Note:</strong> Pulsar standalone uses RocksDB as the local metadata store and its configuration file path <a href="/docs/ko/next/reference-configuration"><code>metadataStoreConfigPath</code></a> is configurable in the <code>standalone.conf</code> file. For more information about the configurations of RocksDB, see <a href="https://github.com/facebook/rocksdb/blob/main/examples/rocksdb_option_file_example.ini">here</a> and related <a href="https://gi [...]
 <tr><td style="text-align:left"><code>examples</code></td><td style="text-align:left"><a href="/docs/ko/next/functions-overview">Pulsar Functions</a> 예제가 포함된 Java Jar 파일들이 있습니다.</td></tr>
 <tr><td style="text-align:left"><code>인스턴스</code></td><td style="text-align:left"><a href="/docs/ko/next/functions-overview">Pulsar Functions</a>을 위하여 생성된 아티펙트.</td></tr>
 <tr><td style="text-align:left"><code>lib</code></td><td style="text-align:left">The <a href="https://en.wikipedia.org/wiki/JAR_(file_format)">JAR</a> files used by Pulsar.</td></tr>
@@ -124,7 +125,7 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.9.1
 <tr><th style="text-align:left">디렉토리</th><th style="text-align:left">포함</th></tr>
 </thead>
 <tbody>
-<tr><td style="text-align:left"><code>데이터</code></td><td style="text-align:left">The data storage directory used by ZooKeeper and BookKeeper.</td></tr>
+<tr><td style="text-align:left"><code>데이터</code></td><td style="text-align:left">The data storage directory used by RocksDB and BookKeeper.</td></tr>
 <tr><td style="text-align:left"><code>로그</code></td><td style="text-align:left">Logs created by the installation.</td></tr>
 </tbody>
 </table>
diff --git a/content/docs/ko/next/tiered-storage-azure.html b/content/docs/ko/next/tiered-storage-azure.html
index f5effad..ebd0a0e 100644
--- a/content/docs/ko/next/tiered-storage-azure.html
+++ b/content/docs/ko/next/tiered-storage-azure.html
@@ -193,27 +193,21 @@ ls offloaders
 </code></pre>
 <p><strong>Output</strong></p>
 <pre><code class="hljs"><span class="hljs-attribute">Offload was a success</span>
-</code></pre></li>
-</ul>
-<pre><code class="hljs">If there is an error in offloading, the error is propagated to the `pulsar-admin topics offload-status` command.
-
-```bash
-bin/pulsar-admin topics offload-status persistent://my-tenant/my-namespace/topic1
-```
-
-**Output**
-
-```
-Error in offload
+</code></pre>
+<p>If there is an error in offloading, the error is propagated to the <code>pulsar-admin topics offload-status</code> command.</p>
+<pre><code class="hljs css language-bash">bin/pulsar-admin topics offload-status persistent://my-tenant/my-namespace/topic1
+</code></pre>
+<p><strong>Output</strong></p>
+<pre><code class="hljs"><span class="hljs-keyword">Error </span>in offload
 null
 
 Reason: Error offloading: org.apache.bookkeeper.mledger.ManagedLedgerException: 
-```
-
-&gt; #### Tip
-&gt; 
-&gt; For more information about the `pulsar-admin topics offload-status options` command, including flags, descriptions, and default values, see [here](https://pulsar.apache.org/tools/pulsar-admin/2.6.0-SNAPSHOT/#-em-offload-status-em-). 
 </code></pre>
+<blockquote>
+<h4><a class="anchor" aria-hidden="true" id="tip-2"></a><a href="#tip-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
+<p>For more information about the <code>pulsar-admin topics offload-status options</code> command, including flags, descriptions, and default values, see <a href="https://pulsar.apache.org/tools/pulsar-admin/2.6.0-SNAPSHOT/#-em-offload-status-em-">here</a>.</p>
+</blockquote></li>
+</ul>
 </span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ko/next/tiered-storage-filesystem"><span class="arrow-prev">← </span><span>Filesystem offloader</span></a><a class="docs-next button" href="/docs/ko/next/tiered-storage-aliyun"><span>Aliyun OSS offloader</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href=" [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
diff --git a/content/docs/ko/next/tiered-storage-azure/index.html b/content/docs/ko/next/tiered-storage-azure/index.html
index f5effad..ebd0a0e 100644
--- a/content/docs/ko/next/tiered-storage-azure/index.html
+++ b/content/docs/ko/next/tiered-storage-azure/index.html
@@ -193,27 +193,21 @@ ls offloaders
 </code></pre>
 <p><strong>Output</strong></p>
 <pre><code class="hljs"><span class="hljs-attribute">Offload was a success</span>
-</code></pre></li>
-</ul>
-<pre><code class="hljs">If there is an error in offloading, the error is propagated to the `pulsar-admin topics offload-status` command.
-
-```bash
-bin/pulsar-admin topics offload-status persistent://my-tenant/my-namespace/topic1
-```
-
-**Output**
-
-```
-Error in offload
+</code></pre>
+<p>If there is an error in offloading, the error is propagated to the <code>pulsar-admin topics offload-status</code> command.</p>
+<pre><code class="hljs css language-bash">bin/pulsar-admin topics offload-status persistent://my-tenant/my-namespace/topic1
+</code></pre>
+<p><strong>Output</strong></p>
+<pre><code class="hljs"><span class="hljs-keyword">Error </span>in offload
 null
 
 Reason: Error offloading: org.apache.bookkeeper.mledger.ManagedLedgerException: 
-```
-
-&gt; #### Tip
-&gt; 
-&gt; For more information about the `pulsar-admin topics offload-status options` command, including flags, descriptions, and default values, see [here](https://pulsar.apache.org/tools/pulsar-admin/2.6.0-SNAPSHOT/#-em-offload-status-em-). 
 </code></pre>
+<blockquote>
+<h4><a class="anchor" aria-hidden="true" id="tip-2"></a><a href="#tip-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
+<p>For more information about the <code>pulsar-admin topics offload-status options</code> command, including flags, descriptions, and default values, see <a href="https://pulsar.apache.org/tools/pulsar-admin/2.6.0-SNAPSHOT/#-em-offload-status-em-">here</a>.</p>
+</blockquote></li>
+</ul>
 </span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ko/next/tiered-storage-filesystem"><span class="arrow-prev">← </span><span>Filesystem offloader</span></a><a class="docs-next button" href="/docs/ko/next/tiered-storage-aliyun"><span>Aliyun OSS offloader</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href=" [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
diff --git a/content/docs/zh-CN/next/admin-api-clusters.html b/content/docs/zh-CN/next/admin-api-clusters.html
index ed47a1d..dbb2315 100644
--- a/content/docs/zh-CN/next/admin-api-clusters.html
+++ b/content/docs/zh-CN/next/admin-api-clusters.html
@@ -122,8 +122,8 @@
 <p>集群元数据初始化命令示例如下:</p>
 <pre><code class="hljs css language-shell">bin/pulsar initialize-cluster-metadata \
   --cluster us-west \
-  --zookeeper zk1.us-west.example.com:2181 \
-  --configuration-store zk1.us-west.example.com:2184 \
+  --metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
+  --configuration-metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
   --web-service-url http://pulsar.us-west.example.com:8080/ \
   --web-service-url-tls https://pulsar.us-west.example.com:8443/ \
   --broker-service-url pulsar://pulsar.us-west.example.com:6650/ \
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 ed47a1d..dbb2315 100644
--- a/content/docs/zh-CN/next/admin-api-clusters/index.html
+++ b/content/docs/zh-CN/next/admin-api-clusters/index.html
@@ -122,8 +122,8 @@
 <p>集群元数据初始化命令示例如下:</p>
 <pre><code class="hljs css language-shell">bin/pulsar initialize-cluster-metadata \
   --cluster us-west \
-  --zookeeper zk1.us-west.example.com:2181 \
-  --configuration-store zk1.us-west.example.com:2184 \
+  --metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
+  --configuration-metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
   --web-service-url http://pulsar.us-west.example.com:8080/ \
   --web-service-url-tls https://pulsar.us-west.example.com:8443/ \
   --broker-service-url pulsar://pulsar.us-west.example.com:6650/ \
diff --git a/content/docs/zh-CN/next/administration-load-balance.html b/content/docs/zh-CN/next/administration-load-balance.html
index d54aadb..737a8cc 100644
--- a/content/docs/zh-CN/next/administration-load-balance.html
+++ b/content/docs/zh-CN/next/administration-load-balance.html
@@ -155,13 +155,16 @@
 # 防止同一个主题,在同一个时间窗口,被多次迁移的时间间隔。</span>
 <span class="hljs-attr">loadBalancerSheddingGracePeriodMinutes</span>=<span class="hljs-string">30</span>
 </code></pre>
-<p>Pulsar supports three types of shedding strategies:</p>
+<p>Pulsar supports the following types of shedding strategies. From Pulsar 2.10, the <strong>default</strong> shedding strategy is <code>ThresholdShedder</code>.</p>
 <h5><a class="anchor" aria-hidden="true" id="thresholdshedder"></a><a href="#thresholdshedder" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.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>如果任意 broker 的使用率高于配置的阈值,此策略就会切分出 bundle。 它实现该目标的做法是:首先计算整个集群中每个 broker 的平均资源使用率。 The resource usage for each broker is calculated using the following method: LocalBrokerData#getMaxResourceUsageWithWeight). 每种资源的权重是可配置的。 根据 broeker 的 loadBalancerHistoryResourcePercentage 的设置,历史观测值被包含在运行时的平均值中。 一旦计算出平均资源使用量,将 broker 的当前/历史使用量和 broker 的平均使用量进行比较。 如果 broker 的使用率大于每个 broker 的平均使用率加上 loadBalancerBrokerThresholdShedderPercentage 后的值,该负载 shedder 会建议移除足够多的 bundle,将卸载的 broker 提升到当前平均 broker 使用率 [...]
+<p>如果任意 broker 的使用率高于配置的阈值,此策略就会切分出 bundle。 它实现该目标的做法是:首先计算整个集群中每个 broker 的平均资源使用率。 The resource usage for each broker is calculated using the following method: LocalBrokerData#getMaxResourceUsageWithWeight. 每种资源的权重是可配置的。 根据 broeker 的 loadBalancerHistoryResourcePercentage 的设置,历史观测值被包含在运行时的平均值中。 一旦计算出平均资源使用量,将 broker 的当前/历史使用量和 broker 的平均使用量进行比较。 如果 broker 的使用率大于每个 broker 的平均使用率加上 loadBalancerBrokerThresholdShedderPercentage 后的值,该负载 shedder 会建议移除足够多的 bundle,将卸载的 broker 提升到当前平均 broker 使用率以 [...]
+<p><img src="/docs/assets/ThresholdShedder.png" alt="Shedding strategy - ThresholdShedder"></p>
 <h5><a class="anchor" aria-hidden="true" id="overloadshedder"></a><a href="#overloadshedder" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>This strategy will attempt to shed exactly one bundle on brokers which are overloaded, that is, whose maximum system resource usage exceeds loadBalancerBrokerOverloadedThresholdPercentage. To see which resources are considered when determining the maximum system resource. A bundle is recommended for unloading off that broker if and only if the following conditions hold: The broker has at least two bundles assigned and the broker has at least one bundle that has not been unloaded recen [...]
+<p><img src="/docs/assets/OverloadShedder.png" alt="Shedding strategy - OverloadShedder"></p>
 <h5><a class="anchor" aria-hidden="true" id="uniformloadshedder"></a><a href="#uniformloadshedder" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>This strategy tends to distribute load uniformly across all brokers. This strategy checks laod difference between broker with highest load and broker with lowest load. If the difference is higher than configured thresholds <code>loadBalancerMsgRateDifferenceShedderThreshold</code> and <code>loadBalancerMsgThroughputMultiplierDifferenceShedderThreshold</code> then it finds out bundles which can be unloaded to distribute traffic evenly across all brokers. 使用以下值配置 broker 来启用此策略。 <code>lo [...]
+<p><img src="/docs/assets/UniformLoadShedder.png" alt="Shedding strategy - UniformLoadShedder"></p>
 <h4><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 [...]
 <p>Broker 是基于 CPU、网络和内存使用的阈值来判断是否过载的。 当其中任何一个指标超过阈值时,将会触发切分操作(如果允许的话)。</p>
 <p>默认情况下,负载阈值设置为85%:</p>
diff --git a/content/docs/zh-CN/next/administration-load-balance/index.html b/content/docs/zh-CN/next/administration-load-balance/index.html
index d54aadb..737a8cc 100644
--- a/content/docs/zh-CN/next/administration-load-balance/index.html
+++ b/content/docs/zh-CN/next/administration-load-balance/index.html
@@ -155,13 +155,16 @@
 # 防止同一个主题,在同一个时间窗口,被多次迁移的时间间隔。</span>
 <span class="hljs-attr">loadBalancerSheddingGracePeriodMinutes</span>=<span class="hljs-string">30</span>
 </code></pre>
-<p>Pulsar supports three types of shedding strategies:</p>
+<p>Pulsar supports the following types of shedding strategies. From Pulsar 2.10, the <strong>default</strong> shedding strategy is <code>ThresholdShedder</code>.</p>
 <h5><a class="anchor" aria-hidden="true" id="thresholdshedder"></a><a href="#thresholdshedder" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.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>如果任意 broker 的使用率高于配置的阈值,此策略就会切分出 bundle。 它实现该目标的做法是:首先计算整个集群中每个 broker 的平均资源使用率。 The resource usage for each broker is calculated using the following method: LocalBrokerData#getMaxResourceUsageWithWeight). 每种资源的权重是可配置的。 根据 broeker 的 loadBalancerHistoryResourcePercentage 的设置,历史观测值被包含在运行时的平均值中。 一旦计算出平均资源使用量,将 broker 的当前/历史使用量和 broker 的平均使用量进行比较。 如果 broker 的使用率大于每个 broker 的平均使用率加上 loadBalancerBrokerThresholdShedderPercentage 后的值,该负载 shedder 会建议移除足够多的 bundle,将卸载的 broker 提升到当前平均 broker 使用率 [...]
+<p>如果任意 broker 的使用率高于配置的阈值,此策略就会切分出 bundle。 它实现该目标的做法是:首先计算整个集群中每个 broker 的平均资源使用率。 The resource usage for each broker is calculated using the following method: LocalBrokerData#getMaxResourceUsageWithWeight. 每种资源的权重是可配置的。 根据 broeker 的 loadBalancerHistoryResourcePercentage 的设置,历史观测值被包含在运行时的平均值中。 一旦计算出平均资源使用量,将 broker 的当前/历史使用量和 broker 的平均使用量进行比较。 如果 broker 的使用率大于每个 broker 的平均使用率加上 loadBalancerBrokerThresholdShedderPercentage 后的值,该负载 shedder 会建议移除足够多的 bundle,将卸载的 broker 提升到当前平均 broker 使用率以 [...]
+<p><img src="/docs/assets/ThresholdShedder.png" alt="Shedding strategy - ThresholdShedder"></p>
 <h5><a class="anchor" aria-hidden="true" id="overloadshedder"></a><a href="#overloadshedder" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>This strategy will attempt to shed exactly one bundle on brokers which are overloaded, that is, whose maximum system resource usage exceeds loadBalancerBrokerOverloadedThresholdPercentage. To see which resources are considered when determining the maximum system resource. A bundle is recommended for unloading off that broker if and only if the following conditions hold: The broker has at least two bundles assigned and the broker has at least one bundle that has not been unloaded recen [...]
+<p><img src="/docs/assets/OverloadShedder.png" alt="Shedding strategy - OverloadShedder"></p>
 <h5><a class="anchor" aria-hidden="true" id="uniformloadshedder"></a><a href="#uniformloadshedder" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>This strategy tends to distribute load uniformly across all brokers. This strategy checks laod difference between broker with highest load and broker with lowest load. If the difference is higher than configured thresholds <code>loadBalancerMsgRateDifferenceShedderThreshold</code> and <code>loadBalancerMsgThroughputMultiplierDifferenceShedderThreshold</code> then it finds out bundles which can be unloaded to distribute traffic evenly across all brokers. 使用以下值配置 broker 来启用此策略。 <code>lo [...]
+<p><img src="/docs/assets/UniformLoadShedder.png" alt="Shedding strategy - UniformLoadShedder"></p>
 <h4><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 [...]
 <p>Broker 是基于 CPU、网络和内存使用的阈值来判断是否过载的。 当其中任何一个指标超过阈值时,将会触发切分操作(如果允许的话)。</p>
 <p>默认情况下,负载阈值设置为85%:</p>
diff --git a/content/docs/zh-CN/next/administration-proxy.html b/content/docs/zh-CN/next/administration-proxy.html
index c36b93d..783b9cf 100644
--- a/content/docs/zh-CN/next/administration-proxy.html
+++ b/content/docs/zh-CN/next/administration-proxy.html
@@ -77,15 +77,9 @@
             });
         </script></nav></div><div class="container mainContainer docsContainer"><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 id="__docusaurus" class="postHeaderTitle">Pulsar 代理</h1></header><article><div><span><p>Pulsar proxy 是可选网关。 当客户端和 broker 之间不能直连或者不方便直连时,可以使用 Pulsar Proxy。 例如,当 Pulsar 运行在云环境、<a href="https://kubernet [...]
 <h2><a class="anchor" aria-hidden="true" id="配置-proxy"></a><a href="#配置-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-2-2.5 0-.83.42-1.64  [...]
-<p>使用 proxy 之前,需要为 proxy 配置集群内 broker 的地址。 可以配置 proxy 直接连到服务发现(比如ZooKeeper),也可以在配置中指定 broker URL。</p>
-<h3><a class="anchor" aria-hidden="true" id="使用服务发现"></a><a href="#使用服务发现" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>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>
+<p>使用 proxy 之前,需要为 proxy 配置集群内 broker 的地址。 You can configure the broker URL in the proxy configuration, or the proxy to connect directly using service discovery.</p>
 <blockquote>
-<p>要使用服务发现,必须开启网络 ACL,proxy 通过端口 <code>2181</code>(本地 ZooKeeper 集群)或 <code>2184</code>(配置存储集群)连接到 ZooKeeper 节点。</p>
-<p>However, it is not secure to use service discovery. Because if the network ACL is open, when someone compromises a proxy, they have full access to ZooKeeper.</p>
+<p>In a production environment service discovery is not recommended.</p>
 </blockquote>
 <h3><a class="anchor" aria-hidden="true" id="使用-broker-url"></a><a href="#使用-broker-url" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>通过指定 URL 连接到 broker 更安全。</p>
@@ -103,10 +97,21 @@
 <p>URL 中的域名可以是映射到多个 broker 的 DNS 域名,也可以是虚拟 IP。由于有多个 broker IP,即使集群中的单个 broker 不可用,proxy 和集群也不会断开连接。</p>
 <p>The ports to connect to the brokers (6650 and 8080, or in the case of TLS, 6651 and 8443) should be open in the network ACLs.</p>
 <p>注意:如果不使用 Pulsar Functions,则不需要配置 <code>functionWorkerWebServiceURL</code>。</p>
+<h3><a class="anchor" aria-hidden="true" id="使用服务发现"></a><a href="#使用服务发现" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<p>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">metadataStoreUrl</span>=<span class="hljs-string">my-zk-0:2181,my-zk-1:2181,my-zk-2:2181</span>
+<span class="hljs-attr">configurationMetadataStoreUrl</span>=<span class="hljs-string">my-zk-0:2184,my-zk-remote:2184</span>
+</code></pre>
+<blockquote>
+<p>要使用服务发现,必须开启网络 ACL,proxy 通过端口 <code>2181</code>(本地 ZooKeeper 集群)或 <code>2184</code>(配置存储集群)连接到 ZooKeeper 节点。</p>
+<p>However, it is not secure to use service discovery. Because if the network ACL is open, when someone compromises a proxy, they have full access to ZooKeeper.</p>
+</blockquote>
 <h2><a class="anchor" aria-hidden="true" id="启动-proxy"></a><a href="#启动-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-2-2.5 0-.83.42-1.64  [...]
 <p>To start the proxy:</p>
 <pre><code class="hljs css language-bash">$ <span class="hljs-built_in">cd</span> /path/to/pulsar/directory
-$ bin/pulsar proxy
+$ bin/pulsar proxy \
+  --metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181 \
+  --configuration-metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181
 </code></pre>
 <blockquote>
 <p>一个集群可以运行多个 Pulsar proxy 实例。</p>
@@ -118,7 +123,7 @@ $ bin/pulsar proxy
 <h2><a class="anchor" aria-hidden="true" id="pulsar-客户端连接-proxy"></a><a href="#pulsar-客户端连接-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>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 that the frontend uses. 例如,地址是 DNS 地址 <code>pulsar.cluster.default</code>,则客户端连接的 URL 是 <code>pulsar://pulsar.cluster.default:6650</code>。</p>
 <p>了解更多关于 Pulsar proxy 的信息,参阅 <a href="/docs/zh-CN/next/reference-configuration#pulsar-proxy"> Pulsar proxy</a>。</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/administration-load-balance"><span class="arrow-prev">← </span><span>负载均衡</span></a><a class="docs-next button" href="/docs/zh-CN/next/administration-upgrade"><span>升级</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#配置-proxy">配置 Proxy</a><ul class="toc-headings"><li><a href="#使用服务发现">使用服务发现</a></li><li><a hr [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/administration-load-balance"><span class="arrow-prev">← </span><span>负载均衡</span></a><a class="docs-next button" href="/docs/zh-CN/next/administration-upgrade"><span>升级</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#配置-proxy">配置 Proxy</a><ul class="toc-headings"><li><a href="#使用-broker-url">使用 broker URL</a> [...]
       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 c36b93d..783b9cf 100644
--- a/content/docs/zh-CN/next/administration-proxy/index.html
+++ b/content/docs/zh-CN/next/administration-proxy/index.html
@@ -77,15 +77,9 @@
             });
         </script></nav></div><div class="container mainContainer docsContainer"><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 id="__docusaurus" class="postHeaderTitle">Pulsar 代理</h1></header><article><div><span><p>Pulsar proxy 是可选网关。 当客户端和 broker 之间不能直连或者不方便直连时,可以使用 Pulsar Proxy。 例如,当 Pulsar 运行在云环境、<a href="https://kubernet [...]
 <h2><a class="anchor" aria-hidden="true" id="配置-proxy"></a><a href="#配置-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-2-2.5 0-.83.42-1.64  [...]
-<p>使用 proxy 之前,需要为 proxy 配置集群内 broker 的地址。 可以配置 proxy 直接连到服务发现(比如ZooKeeper),也可以在配置中指定 broker URL。</p>
-<h3><a class="anchor" aria-hidden="true" id="使用服务发现"></a><a href="#使用服务发现" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>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>
+<p>使用 proxy 之前,需要为 proxy 配置集群内 broker 的地址。 You can configure the broker URL in the proxy configuration, or the proxy to connect directly using service discovery.</p>
 <blockquote>
-<p>要使用服务发现,必须开启网络 ACL,proxy 通过端口 <code>2181</code>(本地 ZooKeeper 集群)或 <code>2184</code>(配置存储集群)连接到 ZooKeeper 节点。</p>
-<p>However, it is not secure to use service discovery. Because if the network ACL is open, when someone compromises a proxy, they have full access to ZooKeeper.</p>
+<p>In a production environment service discovery is not recommended.</p>
 </blockquote>
 <h3><a class="anchor" aria-hidden="true" id="使用-broker-url"></a><a href="#使用-broker-url" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>通过指定 URL 连接到 broker 更安全。</p>
@@ -103,10 +97,21 @@
 <p>URL 中的域名可以是映射到多个 broker 的 DNS 域名,也可以是虚拟 IP。由于有多个 broker IP,即使集群中的单个 broker 不可用,proxy 和集群也不会断开连接。</p>
 <p>The ports to connect to the brokers (6650 and 8080, or in the case of TLS, 6651 and 8443) should be open in the network ACLs.</p>
 <p>注意:如果不使用 Pulsar Functions,则不需要配置 <code>functionWorkerWebServiceURL</code>。</p>
+<h3><a class="anchor" aria-hidden="true" id="使用服务发现"></a><a href="#使用服务发现" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<p>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">metadataStoreUrl</span>=<span class="hljs-string">my-zk-0:2181,my-zk-1:2181,my-zk-2:2181</span>
+<span class="hljs-attr">configurationMetadataStoreUrl</span>=<span class="hljs-string">my-zk-0:2184,my-zk-remote:2184</span>
+</code></pre>
+<blockquote>
+<p>要使用服务发现,必须开启网络 ACL,proxy 通过端口 <code>2181</code>(本地 ZooKeeper 集群)或 <code>2184</code>(配置存储集群)连接到 ZooKeeper 节点。</p>
+<p>However, it is not secure to use service discovery. Because if the network ACL is open, when someone compromises a proxy, they have full access to ZooKeeper.</p>
+</blockquote>
 <h2><a class="anchor" aria-hidden="true" id="启动-proxy"></a><a href="#启动-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-2-2.5 0-.83.42-1.64  [...]
 <p>To start the proxy:</p>
 <pre><code class="hljs css language-bash">$ <span class="hljs-built_in">cd</span> /path/to/pulsar/directory
-$ bin/pulsar proxy
+$ bin/pulsar proxy \
+  --metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181 \
+  --configuration-metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181
 </code></pre>
 <blockquote>
 <p>一个集群可以运行多个 Pulsar proxy 实例。</p>
@@ -118,7 +123,7 @@ $ bin/pulsar proxy
 <h2><a class="anchor" aria-hidden="true" id="pulsar-客户端连接-proxy"></a><a href="#pulsar-客户端连接-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>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 that the frontend uses. 例如,地址是 DNS 地址 <code>pulsar.cluster.default</code>,则客户端连接的 URL 是 <code>pulsar://pulsar.cluster.default:6650</code>。</p>
 <p>了解更多关于 Pulsar proxy 的信息,参阅 <a href="/docs/zh-CN/next/reference-configuration#pulsar-proxy"> Pulsar proxy</a>。</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/administration-load-balance"><span class="arrow-prev">← </span><span>负载均衡</span></a><a class="docs-next button" href="/docs/zh-CN/next/administration-upgrade"><span>升级</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#配置-proxy">配置 Proxy</a><ul class="toc-headings"><li><a href="#使用服务发现">使用服务发现</a></li><li><a hr [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/administration-load-balance"><span class="arrow-prev">← </span><span>负载均衡</span></a><a class="docs-next button" href="/docs/zh-CN/next/administration-upgrade"><span>升级</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#配置-proxy">配置 Proxy</a><ul class="toc-headings"><li><a href="#使用-broker-url">使用 broker URL</a> [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/next/administration-pulsar-manager.html b/content/docs/zh-CN/next/administration-pulsar-manager.html
index fc11d12..484e80e 100644
--- a/content/docs/zh-CN/next/administration-pulsar-manager.html
+++ b/content/docs/zh-CN/next/administration-pulsar-manager.html
@@ -139,7 +139,7 @@ docker build -f docker/Dockerfile <span class="hljs-params">--build-arg</span> B
 <ul>
 <li>方法 1:使用命令行工具</li>
 </ul>
-<pre><code class="hljs">wget https:<span class="hljs-string">//dist.apache.org/repos/dist/release/pulsar/pulsar-manager/apache-pulsar-manager-0.2.0/apache-pulsar-manager-0.2.0-bin.tar.gz</span>
+<pre><code class="hljs">wget https:<span class="hljs-string">//dist.apache.org/repos/dist/release/pulsar/pulsar-manager/pulsar-manager-0.2.0/apache-pulsar-manager-0.2.0-bin.tar.gz</span>
 tar -zxvf apache-pulsar-manager-0.2.0-bin.tar.gz
 <span class="hljs-keyword">cd</span> pulsar-manager
 tar -zxvf pulsar-manager.tar
diff --git a/content/docs/zh-CN/next/administration-pulsar-manager/index.html b/content/docs/zh-CN/next/administration-pulsar-manager/index.html
index fc11d12..484e80e 100644
--- a/content/docs/zh-CN/next/administration-pulsar-manager/index.html
+++ b/content/docs/zh-CN/next/administration-pulsar-manager/index.html
@@ -139,7 +139,7 @@ docker build -f docker/Dockerfile <span class="hljs-params">--build-arg</span> B
 <ul>
 <li>方法 1:使用命令行工具</li>
 </ul>
-<pre><code class="hljs">wget https:<span class="hljs-string">//dist.apache.org/repos/dist/release/pulsar/pulsar-manager/apache-pulsar-manager-0.2.0/apache-pulsar-manager-0.2.0-bin.tar.gz</span>
+<pre><code class="hljs">wget https:<span class="hljs-string">//dist.apache.org/repos/dist/release/pulsar/pulsar-manager/pulsar-manager-0.2.0/apache-pulsar-manager-0.2.0-bin.tar.gz</span>
 tar -zxvf apache-pulsar-manager-0.2.0-bin.tar.gz
 <span class="hljs-keyword">cd</span> pulsar-manager
 tar -zxvf pulsar-manager.tar
diff --git a/content/docs/zh-CN/next/administration-zk-bk.html b/content/docs/zh-CN/next/administration-zk-bk.html
index 5ec3e22..dc6372a 100644
--- a/content/docs/zh-CN/next/administration-zk-bk.html
+++ b/content/docs/zh-CN/next/administration-zk-bk.html
@@ -157,26 +157,12 @@
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-daemon start configuration-store</span>
 </code></pre>
 <h3><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  [...]
-<p>在 Pulsar 的安装目录中有两个独立的 ZooKeeper 配置文件:一是<a href="#local-zookeeper">本地 ZooKeeper 集群</a>使用<code>conf/zookeeper.conf</code>配置文件,二是<a href="#configuration-store">配置存储集群</a>使用的<code>conf/global-zookeeper.conf</code>配置文件。</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. [...]
-<p>The <a href="/docs/zh-CN/next/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> file handles the configuration for local ZooKeeper. The table below shows the available parameters:</p>
-<table>
-<thead>
-<tr><th>配置项</th><th>说明</th><th>默认值</th></tr>
-</thead>
-<tbody>
-<tr><td>tickTime</td><td>tick 是 Zookeeper 基本的时间单位,以毫秒为单位。用于处理心跳和超时,tickTime 是单个tick的长度。</td><td>2000</td></tr>
-<tr><td>initLimit</td><td>Zookeeper leader 服务器允许 follower 服务器成功连接和同步的最大时间。使用 tickTime 参数为时间刻度,以毫秒为单位。</td><td>10</td></tr>
-<tr><td>syncLimit</td><td>Zookeeper follower 服务器允许从其他 Zookeeper 服务器同步的最大耗时。使用 tickTime 参数为时间刻度,以毫秒为单位。</td><td>5</td></tr>
-<tr><td>dataDir</td><td>Zookeeper 存储内存数据库快照和数据库更新的日志的目录。</td><td>data/zookeeper</td></tr>
-<tr><td>clientPort</td><td>Zookeeper 服务器监听连接的端口。</td><td>2181</td></tr>
-<tr><td>autopurge.snapRetainCount</td><td>ZooKeeper 中自动清理决定了在 autopurge.purgeInterval 参数设定的时间间隔内,存储在 dataDir 中的数据库快照数(其他快照会被删除)。</td><td>3</td></tr>
-<tr><td>autopurge.purgeInterval</td><td>The time interval, in hours, which triggers the ZooKeeper database purge task. Setting to a non-zero number enables auto purge; setting to 0 disables. Read this guide before enabling auto purge.</td><td>1</td></tr>
-<tr><td>maxClientCnxns</td><td>客户端连接的最大数量,如果你需要处理更多的 Zookeeper 客户端,就需要增加这个配置项的值。</td><td>60</td></tr>
-</tbody>
-</table>
-<h4><a class="anchor" aria-hidden="true" id="configuration-store"></a><a href="#configuration-store" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
-<p>配置存储服务集群使用的配置文件是<a href="/docs/zh-CN/next/reference-configuration#configuration-store"><code>conf/global-zookeeper.conf</code></a>。 下表是可用的配置项列表:</p>
+<p>In Pulsar, ZooKeeper configuration is handled by two separate configuration files in the <code>conf</code> directory of your Pulsar installation: * The <code>conf/zookeeper.conf</code> file handles the configuration for local ZooKeeper. * The <code>conf/global-zookeeper.conf</code> file handles the configuration for configuration store. See <a href="/docs/zh-CN/next/reference-configuration#zookeeper">parameters</a> for more details.</p>
+<h4><a class="anchor" aria-hidden="true" id="configure-batching-operations"></a><a href="#configure-batching-operations" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 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>Using the batching operations reduces the remote procedure call (RPC) traffic between ZooKeeper client and servers. It also reduces the number of write transactions, because each batching operation corresponds to a single ZooKeeper transaction, containing multiple read and write operations.</p>
+<p>The following figure demonstrates a basic benchmark of batching read/write operations that can be requested to ZooKeeper in one second:</p>
+<p><img src="/docs/assets/zookeeper-batching.png" alt="Zookeeper batching benchmark"></p>
+<p>To enable batching operations, set the <a href="/docs/zh-CN/next/reference-configuration#broker"><code>metadataStoreBatchingEnabled</code></a> parameter to <code>true</code> on the broker side.</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-.83.42-1 [...]
 <p>Pulsar 使用 BookKeeper 来存储所有的持久化消息。 BookKeeper 是一个分布式的<a href="https://en.wikipedia.org/wiki/Write-ahead_logging"> 预写日志(write-ahead log)</a> 系统。它保证了独立消息日志读取的一致性,称为 ledger。 每个 BookKeeper 服务器也被称为 <em>bookie</em>。</p>
 <blockquote>
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 5ec3e22..dc6372a 100644
--- a/content/docs/zh-CN/next/administration-zk-bk/index.html
+++ b/content/docs/zh-CN/next/administration-zk-bk/index.html
@@ -157,26 +157,12 @@
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-daemon start configuration-store</span>
 </code></pre>
 <h3><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  [...]
-<p>在 Pulsar 的安装目录中有两个独立的 ZooKeeper 配置文件:一是<a href="#local-zookeeper">本地 ZooKeeper 集群</a>使用<code>conf/zookeeper.conf</code>配置文件,二是<a href="#configuration-store">配置存储集群</a>使用的<code>conf/global-zookeeper.conf</code>配置文件。</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. [...]
-<p>The <a href="/docs/zh-CN/next/reference-configuration#zookeeper"><code>conf/zookeeper.conf</code></a> file handles the configuration for local ZooKeeper. The table below shows the available parameters:</p>
-<table>
-<thead>
-<tr><th>配置项</th><th>说明</th><th>默认值</th></tr>
-</thead>
-<tbody>
-<tr><td>tickTime</td><td>tick 是 Zookeeper 基本的时间单位,以毫秒为单位。用于处理心跳和超时,tickTime 是单个tick的长度。</td><td>2000</td></tr>
-<tr><td>initLimit</td><td>Zookeeper leader 服务器允许 follower 服务器成功连接和同步的最大时间。使用 tickTime 参数为时间刻度,以毫秒为单位。</td><td>10</td></tr>
-<tr><td>syncLimit</td><td>Zookeeper follower 服务器允许从其他 Zookeeper 服务器同步的最大耗时。使用 tickTime 参数为时间刻度,以毫秒为单位。</td><td>5</td></tr>
-<tr><td>dataDir</td><td>Zookeeper 存储内存数据库快照和数据库更新的日志的目录。</td><td>data/zookeeper</td></tr>
-<tr><td>clientPort</td><td>Zookeeper 服务器监听连接的端口。</td><td>2181</td></tr>
-<tr><td>autopurge.snapRetainCount</td><td>ZooKeeper 中自动清理决定了在 autopurge.purgeInterval 参数设定的时间间隔内,存储在 dataDir 中的数据库快照数(其他快照会被删除)。</td><td>3</td></tr>
-<tr><td>autopurge.purgeInterval</td><td>The time interval, in hours, which triggers the ZooKeeper database purge task. Setting to a non-zero number enables auto purge; setting to 0 disables. Read this guide before enabling auto purge.</td><td>1</td></tr>
-<tr><td>maxClientCnxns</td><td>客户端连接的最大数量,如果你需要处理更多的 Zookeeper 客户端,就需要增加这个配置项的值。</td><td>60</td></tr>
-</tbody>
-</table>
-<h4><a class="anchor" aria-hidden="true" id="configuration-store"></a><a href="#configuration-store" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
-<p>配置存储服务集群使用的配置文件是<a href="/docs/zh-CN/next/reference-configuration#configuration-store"><code>conf/global-zookeeper.conf</code></a>。 下表是可用的配置项列表:</p>
+<p>In Pulsar, ZooKeeper configuration is handled by two separate configuration files in the <code>conf</code> directory of your Pulsar installation: * The <code>conf/zookeeper.conf</code> file handles the configuration for local ZooKeeper. * The <code>conf/global-zookeeper.conf</code> file handles the configuration for configuration store. See <a href="/docs/zh-CN/next/reference-configuration#zookeeper">parameters</a> for more details.</p>
+<h4><a class="anchor" aria-hidden="true" id="configure-batching-operations"></a><a href="#configure-batching-operations" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 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>Using the batching operations reduces the remote procedure call (RPC) traffic between ZooKeeper client and servers. It also reduces the number of write transactions, because each batching operation corresponds to a single ZooKeeper transaction, containing multiple read and write operations.</p>
+<p>The following figure demonstrates a basic benchmark of batching read/write operations that can be requested to ZooKeeper in one second:</p>
+<p><img src="/docs/assets/zookeeper-batching.png" alt="Zookeeper batching benchmark"></p>
+<p>To enable batching operations, set the <a href="/docs/zh-CN/next/reference-configuration#broker"><code>metadataStoreBatchingEnabled</code></a> parameter to <code>true</code> on the broker side.</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-.83.42-1 [...]
 <p>Pulsar 使用 BookKeeper 来存储所有的持久化消息。 BookKeeper 是一个分布式的<a href="https://en.wikipedia.org/wiki/Write-ahead_logging"> 预写日志(write-ahead log)</a> 系统。它保证了独立消息日志读取的一致性,称为 ledger。 每个 BookKeeper 服务器也被称为 <em>bookie</em>。</p>
 <blockquote>
diff --git a/content/docs/zh-CN/next/client-libraries-cpp.html b/content/docs/zh-CN/next/client-libraries-cpp.html
index 88122e9..98ffade 100644
--- a/content/docs/zh-CN/next/client-libraries-cpp.html
+++ b/content/docs/zh-CN/next/client-libraries-cpp.html
@@ -316,90 +316,6 @@ ${PULSAR_HOME}/pulsar-client-cpp/build/lib/Release/pulsar.dll</p></li>
 <p>如果您使用 TLS 身份验证,您需要添加 <code>ssl</code>,默认端口是 <code>6651</code>。 以下是一个例子。</p>
 <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="create-a-consumer"></a><a href="#create-a-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 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 use Pulsar as a consumer, you need to create a consumer on the C++ client. There are two main ways of using the consumer: - <a href="#blocking-example">Blocking style</a>: synchronously calling <code>receive(msg)</code>. - <a href="#consumer-with-a-message-listener">Non-blocking</a> (event based) style: using a message listener.</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.09V6 [...]
-<p>The benefit of this approach is that it is the simplest code. Simply keeps calling <code>receive(msg)</code> which blocks until a message is received.</p>
-<p>此示例在最早的偏移量开始订阅并消费100条消息。</p>
-<pre><code class="hljs css language-c++"><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-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
-
-<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
-    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
-
-    Consumer consumer;
-    ConsumerConfiguration <span class="hljs-built_in">config</span>;
-    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
-    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
-    <span class="hljs-keyword">if</span> (result != ResultOk) {
-        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
-    }
-
-    Message msg;
-    <span class="hljs-keyword">int</span> ctr = <span class="hljs-number">0</span>;
-    <span class="hljs-comment">// consume 100 messages</span>
-    <span class="hljs-keyword">while</span> (ctr &lt; <span class="hljs-number">100</span>) {
-        consumer.receive(msg);
-        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Received: "</span> &lt;&lt; msg
-            &lt;&lt; <span class="hljs-string">"  with payload '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-
-        consumer.acknowledge(msg);
-        ctr++;
-    }
-
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming synchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-
-    client.<span class="hljs-built_in">close</span>();
-    <span class="hljs-keyword">return</span> <span class="hljs-number">0</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>你可以不运行循环阻塞方式,而选择调用基于事件的消息监听方式来接收每一条消息。</p>
-<p>此示例在最早的偏移量开始订阅并消费100条消息。</p>
-<pre><code class="hljs css language-c++"><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-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;atomic&gt;</span></span>
-<span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;thread&gt;</span></span>
-
-<span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
-
-<span class="hljs-built_in">std</span>::atomic&lt;<span class="hljs-keyword">uint32_t</span>&gt; messagesReceived;
-
-<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">handleAckComplete</span><span class="hljs-params">(Result res)</span> </span>{
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Ack res: "</span> &lt;&lt; res &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-}
-
-<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">listener</span><span class="hljs-params">(Consumer consumer, <span class="hljs-keyword">const</span> Message&amp; msg)</span> </span>{
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Got message "</span> &lt;&lt; msg &lt;&lt; <span class="hljs-string">" with content '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-    messagesReceived++;
-    consumer.acknowledgeAsync(msg.getMessageId(), handleAckComplete);
-}
-
-<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
-    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
-
-    Consumer consumer;
-    ConsumerConfiguration <span class="hljs-built_in">config</span>;
-    <span class="hljs-built_in">config</span>.setMessageListener(listener);
-    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
-    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
-    <span class="hljs-keyword">if</span> (result != ResultOk) {
-        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
-    }
-
-    <span class="hljs-comment">// wait for 100 messages to be consumed</span>
-    <span class="hljs-keyword">while</span> (messagesReceived &lt; <span class="hljs-number">100</span>) {
-        <span class="hljs-built_in">std</span>::this_thread::sleep_for(<span class="hljs-built_in">std</span>::chrono::milliseconds(<span class="hljs-number">100</span>));
-    }
-
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming asynchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-
-    client.<span class="hljs-built_in">close</span>();
-    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
-}
-</code></pre>
 <h2><a class="anchor" aria-hidden="true" id="create-a-producer"></a><a href="#create-a-producer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 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 use Pulsar as a producer, you need to create a producer on the C++ client. There are two main ways of using a producer: - <a href="#simple-blocking-example">Blocking style</a> : each call to <code>send</code> waits for an ack from the broker. - <a href="#non-blocking-example">Non-blocking asynchronous style</a> : <code>sendAsync</code> is called instead of <code>send</code> and a callback is supplied for when the ack is received from the broker.</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- [...]
@@ -503,6 +419,111 @@ ${PULSAR_HOME}/pulsar-client-cpp/build/lib/Release/pulsar.dll</p></li>
 producerConf.setPartitionsRoutingMode(ProducerConfiguration::UseSinglePartition);
 producerConf.setLazyStartPartitionedProducers(<span class="hljs-literal">true</span>);
 </code></pre>
+<h3><a class="anchor" aria-hidden="true" id="enable-chunking"></a><a href="#enable-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>Message <a href="/docs/zh-CN/next/concepts-messaging#chunking">chunking</a> enables Pulsar to process large payload messages by splitting the message into chunks at the producer side and aggregating chunked messages at the consumer side.</p>
+<p>The message chunking feature is OFF by default. The following is an example about how to enable message chunking when creating a producer.</p>
+<pre><code class="hljs css language-c++">ProducerConfiguration conf;
+conf.setBatchingEnabled(<span class="hljs-literal">false</span>);
+conf.setChunkingEnabled(<span class="hljs-literal">true</span>);
+Producer producer;
+client.createProducer(<span class="hljs-string">"my-topic"</span>, conf, producer);
+</code></pre>
+<blockquote>
+<p><strong>Note:</strong> To enable chunking, you need to disable batching (<code>setBatchingEnabled</code>=<code>false</code>) concurrently.</p>
+</blockquote>
+<h2><a class="anchor" aria-hidden="true" id="create-a-consumer"></a><a href="#create-a-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 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 use Pulsar as a consumer, you need to create a consumer on the C++ client. There are two main ways of using the consumer: - <a href="#blocking-example">Blocking style</a>: synchronously calling <code>receive(msg)</code>. - <a href="#consumer-with-a-message-listener">Non-blocking</a> (event based) style: using a message listener.</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.09V6 [...]
+<p>The benefit of this approach is that it is the simplest code. Simply keeps calling <code>receive(msg)</code> which blocks until a message is received.</p>
+<p>此示例在最早的偏移量开始订阅并消费100条消息。</p>
+<pre><code class="hljs css language-c++"><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-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
+
+<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
+    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
+
+    Consumer consumer;
+    ConsumerConfiguration <span class="hljs-built_in">config</span>;
+    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
+    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
+    <span class="hljs-keyword">if</span> (result != ResultOk) {
+        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
+    }
+
+    Message msg;
+    <span class="hljs-keyword">int</span> ctr = <span class="hljs-number">0</span>;
+    <span class="hljs-comment">// consume 100 messages</span>
+    <span class="hljs-keyword">while</span> (ctr &lt; <span class="hljs-number">100</span>) {
+        consumer.receive(msg);
+        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Received: "</span> &lt;&lt; msg
+            &lt;&lt; <span class="hljs-string">"  with payload '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+
+        consumer.acknowledge(msg);
+        ctr++;
+    }
+
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming synchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+
+    client.<span class="hljs-built_in">close</span>();
+    <span class="hljs-keyword">return</span> <span class="hljs-number">0</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>You can avoid running a loop with blocking calls with an event based style by using a message listener which is invoked for each message that is received.</p>
+<p>此示例在最早的偏移量开始订阅并消费100条消息。</p>
+<pre><code class="hljs css language-c++"><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-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;atomic&gt;</span></span>
+<span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;thread&gt;</span></span>
+
+<span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
+
+<span class="hljs-built_in">std</span>::atomic&lt;<span class="hljs-keyword">uint32_t</span>&gt; messagesReceived;
+
+<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">handleAckComplete</span><span class="hljs-params">(Result res)</span> </span>{
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Ack res: "</span> &lt;&lt; res &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+}
+
+<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">listener</span><span class="hljs-params">(Consumer consumer, <span class="hljs-keyword">const</span> Message&amp; msg)</span> </span>{
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Got message "</span> &lt;&lt; msg &lt;&lt; <span class="hljs-string">" with content '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+    messagesReceived++;
+    consumer.acknowledgeAsync(msg.getMessageId(), handleAckComplete);
+}
+
+<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
+    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
+
+    Consumer consumer;
+    ConsumerConfiguration <span class="hljs-built_in">config</span>;
+    <span class="hljs-built_in">config</span>.setMessageListener(listener);
+    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
+    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
+    <span class="hljs-keyword">if</span> (result != ResultOk) {
+        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
+    }
+
+    <span class="hljs-comment">// wait for 100 messages to be consumed</span>
+    <span class="hljs-keyword">while</span> (messagesReceived &lt; <span class="hljs-number">100</span>) {
+        <span class="hljs-built_in">std</span>::this_thread::sleep_for(<span class="hljs-built_in">std</span>::chrono::milliseconds(<span class="hljs-number">100</span>));
+    }
+
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming asynchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+
+    client.<span class="hljs-built_in">close</span>();
+    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
+}
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="configure-chunking"></a><a href="#configure-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>You can limit the maximum number of chunked messages a consumer maintains concurrently by configuring the <code>setMaxPendingChunkedMessage</code> and <code>setAutoAckOldestChunkedMessageOnQueueFull</code> parameters. When the threshold is reached, the consumer drops pending messages by silently acknowledging them or asking the broker to redeliver them later.</p>
+<p>The following is an example of how to configure message chunking.</p>
+<pre><code class="hljs css language-c++">ConsumerConfiguration conf;
+conf.setAutoAckOldestChunkedMessageOnQueueFull(<span class="hljs-literal">true</span>);
+conf.setMaxPendingChunkedMessage(<span class="hljs-number">100</span>);
+Consumer consumer;
+client.subscribe(<span class="hljs-string">"my-topic"</span>, <span class="hljs-string">"my-sub"</span>, conf, consumer);
+</code></pre>
 <h2><a class="anchor" aria-hidden="true" id="启用连接-url-的身份验证"></a><a href="#启用连接-url-的身份验证" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>If you use TLS authentication when connecting to Pulsar, you need to add <code>ssl</code> in the connection URLs, and the default port is <code>6651</code>. The following is an example.</p>
 <pre><code class="hljs css language-cpp">ClientConfiguration config = ClientConfiguration();
@@ -557,7 +578,7 @@ client.subscribe(<span class="hljs-string">"topic-avro"</span>, <span class="hlj
 4. Create a consumer to receive a `User` instance.
 ​c++ ConsumerConfiguration consumerConf; consumerConf.setSchema(createProtobufNativeSchema(User::GetDescriptor())); consumerConf.setSubscriptionInitialPosition(InitialPositionEarliest); Consumer consumer; client.subscribe(&quot;topic-protobuf&quot;, &quot;my-sub&quot;, consumerConf, consumer); Message msg; consumer.receive(msg); User user2; user2.ParseFromArray(msg.getData(), msg.getLength()); ```</code></pre>
 </span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/client-libraries-python"><span class="arrow-prev">← </span><span>Python</span></a><a class="docs-next button" href="/docs/zh-CN/next/client-libraries-node"><span>Node.js
-</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="#linux">Linux</a><ul class="toc-headings"><li><a href="#编译">编译</a></li><li><a href="#安装依赖项">安装依赖项</a></li><li><a href="#安装-rpm">安装 RPM</a></li><li><a href="#安装-debian">安装 Debian</a></li><li><a href="#编译-1">编译</a></li></ul></li><li><a href="#macos">MacOS</a><ul class="toc-headings"><li><a href="#编译-2 [...]
+</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="#linux">Linux</a><ul class="toc-headings"><li><a href="#编译">编译</a></li><li><a href="#安装依赖项">安装依赖项</a></li><li><a href="#安装-rpm">安装 RPM</a></li><li><a href="#安装-debian">安装 Debian</a></li><li><a href="#编译-1">编译</a></li></ul></li><li><a href="#macos">MacOS</a><ul class="toc-headings"><li><a href="#编译-2 [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
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 88122e9..98ffade 100644
--- a/content/docs/zh-CN/next/client-libraries-cpp/index.html
+++ b/content/docs/zh-CN/next/client-libraries-cpp/index.html
@@ -316,90 +316,6 @@ ${PULSAR_HOME}/pulsar-client-cpp/build/lib/Release/pulsar.dll</p></li>
 <p>如果您使用 TLS 身份验证,您需要添加 <code>ssl</code>,默认端口是 <code>6651</code>。 以下是一个例子。</p>
 <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="create-a-consumer"></a><a href="#create-a-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 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 use Pulsar as a consumer, you need to create a consumer on the C++ client. There are two main ways of using the consumer: - <a href="#blocking-example">Blocking style</a>: synchronously calling <code>receive(msg)</code>. - <a href="#consumer-with-a-message-listener">Non-blocking</a> (event based) style: using a message listener.</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.09V6 [...]
-<p>The benefit of this approach is that it is the simplest code. Simply keeps calling <code>receive(msg)</code> which blocks until a message is received.</p>
-<p>此示例在最早的偏移量开始订阅并消费100条消息。</p>
-<pre><code class="hljs css language-c++"><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-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
-
-<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
-    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
-
-    Consumer consumer;
-    ConsumerConfiguration <span class="hljs-built_in">config</span>;
-    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
-    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
-    <span class="hljs-keyword">if</span> (result != ResultOk) {
-        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
-    }
-
-    Message msg;
-    <span class="hljs-keyword">int</span> ctr = <span class="hljs-number">0</span>;
-    <span class="hljs-comment">// consume 100 messages</span>
-    <span class="hljs-keyword">while</span> (ctr &lt; <span class="hljs-number">100</span>) {
-        consumer.receive(msg);
-        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Received: "</span> &lt;&lt; msg
-            &lt;&lt; <span class="hljs-string">"  with payload '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-
-        consumer.acknowledge(msg);
-        ctr++;
-    }
-
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming synchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-
-    client.<span class="hljs-built_in">close</span>();
-    <span class="hljs-keyword">return</span> <span class="hljs-number">0</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>你可以不运行循环阻塞方式,而选择调用基于事件的消息监听方式来接收每一条消息。</p>
-<p>此示例在最早的偏移量开始订阅并消费100条消息。</p>
-<pre><code class="hljs css language-c++"><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-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;atomic&gt;</span></span>
-<span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;thread&gt;</span></span>
-
-<span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
-
-<span class="hljs-built_in">std</span>::atomic&lt;<span class="hljs-keyword">uint32_t</span>&gt; messagesReceived;
-
-<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">handleAckComplete</span><span class="hljs-params">(Result res)</span> </span>{
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Ack res: "</span> &lt;&lt; res &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-}
-
-<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">listener</span><span class="hljs-params">(Consumer consumer, <span class="hljs-keyword">const</span> Message&amp; msg)</span> </span>{
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Got message "</span> &lt;&lt; msg &lt;&lt; <span class="hljs-string">" with content '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-    messagesReceived++;
-    consumer.acknowledgeAsync(msg.getMessageId(), handleAckComplete);
-}
-
-<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
-    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
-
-    Consumer consumer;
-    ConsumerConfiguration <span class="hljs-built_in">config</span>;
-    <span class="hljs-built_in">config</span>.setMessageListener(listener);
-    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
-    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
-    <span class="hljs-keyword">if</span> (result != ResultOk) {
-        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
-    }
-
-    <span class="hljs-comment">// wait for 100 messages to be consumed</span>
-    <span class="hljs-keyword">while</span> (messagesReceived &lt; <span class="hljs-number">100</span>) {
-        <span class="hljs-built_in">std</span>::this_thread::sleep_for(<span class="hljs-built_in">std</span>::chrono::milliseconds(<span class="hljs-number">100</span>));
-    }
-
-    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming asynchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
-
-    client.<span class="hljs-built_in">close</span>();
-    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
-}
-</code></pre>
 <h2><a class="anchor" aria-hidden="true" id="create-a-producer"></a><a href="#create-a-producer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 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 use Pulsar as a producer, you need to create a producer on the C++ client. There are two main ways of using a producer: - <a href="#simple-blocking-example">Blocking style</a> : each call to <code>send</code> waits for an ack from the broker. - <a href="#non-blocking-example">Non-blocking asynchronous style</a> : <code>sendAsync</code> is called instead of <code>send</code> and a callback is supplied for when the ack is received from the broker.</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- [...]
@@ -503,6 +419,111 @@ ${PULSAR_HOME}/pulsar-client-cpp/build/lib/Release/pulsar.dll</p></li>
 producerConf.setPartitionsRoutingMode(ProducerConfiguration::UseSinglePartition);
 producerConf.setLazyStartPartitionedProducers(<span class="hljs-literal">true</span>);
 </code></pre>
+<h3><a class="anchor" aria-hidden="true" id="enable-chunking"></a><a href="#enable-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>Message <a href="/docs/zh-CN/next/concepts-messaging#chunking">chunking</a> enables Pulsar to process large payload messages by splitting the message into chunks at the producer side and aggregating chunked messages at the consumer side.</p>
+<p>The message chunking feature is OFF by default. The following is an example about how to enable message chunking when creating a producer.</p>
+<pre><code class="hljs css language-c++">ProducerConfiguration conf;
+conf.setBatchingEnabled(<span class="hljs-literal">false</span>);
+conf.setChunkingEnabled(<span class="hljs-literal">true</span>);
+Producer producer;
+client.createProducer(<span class="hljs-string">"my-topic"</span>, conf, producer);
+</code></pre>
+<blockquote>
+<p><strong>Note:</strong> To enable chunking, you need to disable batching (<code>setBatchingEnabled</code>=<code>false</code>) concurrently.</p>
+</blockquote>
+<h2><a class="anchor" aria-hidden="true" id="create-a-consumer"></a><a href="#create-a-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 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 use Pulsar as a consumer, you need to create a consumer on the C++ client. There are two main ways of using the consumer: - <a href="#blocking-example">Blocking style</a>: synchronously calling <code>receive(msg)</code>. - <a href="#consumer-with-a-message-listener">Non-blocking</a> (event based) style: using a message listener.</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.09V6 [...]
+<p>The benefit of this approach is that it is the simplest code. Simply keeps calling <code>receive(msg)</code> which blocks until a message is received.</p>
+<p>此示例在最早的偏移量开始订阅并消费100条消息。</p>
+<pre><code class="hljs css language-c++"><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-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
+
+<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
+    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
+
+    Consumer consumer;
+    ConsumerConfiguration <span class="hljs-built_in">config</span>;
+    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
+    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
+    <span class="hljs-keyword">if</span> (result != ResultOk) {
+        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
+    }
+
+    Message msg;
+    <span class="hljs-keyword">int</span> ctr = <span class="hljs-number">0</span>;
+    <span class="hljs-comment">// consume 100 messages</span>
+    <span class="hljs-keyword">while</span> (ctr &lt; <span class="hljs-number">100</span>) {
+        consumer.receive(msg);
+        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Received: "</span> &lt;&lt; msg
+            &lt;&lt; <span class="hljs-string">"  with payload '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+
+        consumer.acknowledge(msg);
+        ctr++;
+    }
+
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming synchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+
+    client.<span class="hljs-built_in">close</span>();
+    <span class="hljs-keyword">return</span> <span class="hljs-number">0</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>You can avoid running a loop with blocking calls with an event based style by using a message listener which is invoked for each message that is received.</p>
+<p>此示例在最早的偏移量开始订阅并消费100条消息。</p>
+<pre><code class="hljs css language-c++"><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-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;atomic&gt;</span></span>
+<span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;thread&gt;</span></span>
+
+<span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> pulsar;
+
+<span class="hljs-built_in">std</span>::atomic&lt;<span class="hljs-keyword">uint32_t</span>&gt; messagesReceived;
+
+<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">handleAckComplete</span><span class="hljs-params">(Result res)</span> </span>{
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Ack res: "</span> &lt;&lt; res &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+}
+
+<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">listener</span><span class="hljs-params">(Consumer consumer, <span class="hljs-keyword">const</span> Message&amp; msg)</span> </span>{
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Got message "</span> &lt;&lt; msg &lt;&lt; <span class="hljs-string">" with content '"</span> &lt;&lt; msg.getDataAsString() &lt;&lt; <span class="hljs-string">"'"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+    messagesReceived++;
+    consumer.acknowledgeAsync(msg.getMessageId(), handleAckComplete);
+}
+
+<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
+    <span class="hljs-function"><span class="hljs-built_in">Client</span> <span class="hljs-title">client</span><span class="hljs-params">(<span class="hljs-string">"pulsar://localhost:6650"</span>)</span></span>;
+
+    Consumer consumer;
+    ConsumerConfiguration <span class="hljs-built_in">config</span>;
+    <span class="hljs-built_in">config</span>.setMessageListener(listener);
+    <span class="hljs-built_in">config</span>.setSubscriptionInitialPosition(InitialPositionEarliest);
+    Result result = client.subscribe(<span class="hljs-string">"persistent://public/default/my-topic"</span>, <span class="hljs-string">"consumer-1"</span>, <span class="hljs-built_in">config</span>, consumer);
+    <span class="hljs-keyword">if</span> (result != ResultOk) {
+        <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Failed to subscribe: "</span> &lt;&lt; result &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
+    }
+
+    <span class="hljs-comment">// wait for 100 messages to be consumed</span>
+    <span class="hljs-keyword">while</span> (messagesReceived &lt; <span class="hljs-number">100</span>) {
+        <span class="hljs-built_in">std</span>::this_thread::sleep_for(<span class="hljs-built_in">std</span>::chrono::milliseconds(<span class="hljs-number">100</span>));
+    }
+
+    <span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Finished consuming asynchronously!"</span> &lt;&lt; <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
+
+    client.<span class="hljs-built_in">close</span>();
+    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
+}
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="configure-chunking"></a><a href="#configure-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>You can limit the maximum number of chunked messages a consumer maintains concurrently by configuring the <code>setMaxPendingChunkedMessage</code> and <code>setAutoAckOldestChunkedMessageOnQueueFull</code> parameters. When the threshold is reached, the consumer drops pending messages by silently acknowledging them or asking the broker to redeliver them later.</p>
+<p>The following is an example of how to configure message chunking.</p>
+<pre><code class="hljs css language-c++">ConsumerConfiguration conf;
+conf.setAutoAckOldestChunkedMessageOnQueueFull(<span class="hljs-literal">true</span>);
+conf.setMaxPendingChunkedMessage(<span class="hljs-number">100</span>);
+Consumer consumer;
+client.subscribe(<span class="hljs-string">"my-topic"</span>, <span class="hljs-string">"my-sub"</span>, conf, consumer);
+</code></pre>
 <h2><a class="anchor" aria-hidden="true" id="启用连接-url-的身份验证"></a><a href="#启用连接-url-的身份验证" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>If you use TLS authentication when connecting to Pulsar, you need to add <code>ssl</code> in the connection URLs, and the default port is <code>6651</code>. The following is an example.</p>
 <pre><code class="hljs css language-cpp">ClientConfiguration config = ClientConfiguration();
@@ -557,7 +578,7 @@ client.subscribe(<span class="hljs-string">"topic-avro"</span>, <span class="hlj
 4. Create a consumer to receive a `User` instance.
 ​c++ ConsumerConfiguration consumerConf; consumerConf.setSchema(createProtobufNativeSchema(User::GetDescriptor())); consumerConf.setSubscriptionInitialPosition(InitialPositionEarliest); Consumer consumer; client.subscribe(&quot;topic-protobuf&quot;, &quot;my-sub&quot;, consumerConf, consumer); Message msg; consumer.receive(msg); User user2; user2.ParseFromArray(msg.getData(), msg.getLength()); ```</code></pre>
 </span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/client-libraries-python"><span class="arrow-prev">← </span><span>Python</span></a><a class="docs-next button" href="/docs/zh-CN/next/client-libraries-node"><span>Node.js
-</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="#linux">Linux</a><ul class="toc-headings"><li><a href="#编译">编译</a></li><li><a href="#安装依赖项">安装依赖项</a></li><li><a href="#安装-rpm">安装 RPM</a></li><li><a href="#安装-debian">安装 Debian</a></li><li><a href="#编译-1">编译</a></li></ul></li><li><a href="#macos">MacOS</a><ul class="toc-headings"><li><a href="#编译-2 [...]
+</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="#linux">Linux</a><ul class="toc-headings"><li><a href="#编译">编译</a></li><li><a href="#安装依赖项">安装依赖项</a></li><li><a href="#安装-rpm">安装 RPM</a></li><li><a href="#安装-debian">安装 Debian</a></li><li><a href="#编译-1">编译</a></li></ul></li><li><a href="#macos">MacOS</a><ul class="toc-headings"><li><a href="#编译-2 [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/next/client-libraries-dotnet.html b/content/docs/zh-CN/next/client-libraries-dotnet.html
index 8d80259..1ec5f9e 100644
--- a/content/docs/zh-CN/next/client-libraries-dotnet.html
+++ b/content/docs/zh-CN/next/client-libraries-dotnet.html
@@ -244,10 +244,7 @@ metadata[<span class="hljs-string">"SomeKey"</span>] = <span class="hljs-string"
 <p>消息可以是逐个确认,也可以累积一起确认。 关于消息确认的详情,请参阅 <a href="/docs/zh-CN/next/concepts-messaging#acknowledgement">消息确认</a> 章节。</p>
 <ul>
 <li><p>逐条确认消息。</p>
-<pre><code class="hljs css language-c#"><span class="hljs-keyword">await</span> <span class="hljs-keyword">foreach</span> (<span class="hljs-keyword">var</span> message <span class="hljs-keyword">in</span> consumer.Messages())
-{
-    Console.WriteLine(<span class="hljs-string">"Received: "</span> + Encoding.UTF8.GetString(message.Data.ToArray()));
-}
+<pre><code class="hljs css language-c#"><span class="hljs-keyword">await</span> consumer.Acknowledge(message);
 </code></pre></li>
 <li><p>累积确认消息。</p>
 <pre><code class="hljs css language-c#"><span class="hljs-keyword">await</span> consumer.AcknowledgeCumulative(message);
diff --git a/content/docs/zh-CN/next/client-libraries-dotnet/index.html b/content/docs/zh-CN/next/client-libraries-dotnet/index.html
index 8d80259..1ec5f9e 100644
--- a/content/docs/zh-CN/next/client-libraries-dotnet/index.html
+++ b/content/docs/zh-CN/next/client-libraries-dotnet/index.html
@@ -244,10 +244,7 @@ metadata[<span class="hljs-string">"SomeKey"</span>] = <span class="hljs-string"
 <p>消息可以是逐个确认,也可以累积一起确认。 关于消息确认的详情,请参阅 <a href="/docs/zh-CN/next/concepts-messaging#acknowledgement">消息确认</a> 章节。</p>
 <ul>
 <li><p>逐条确认消息。</p>
-<pre><code class="hljs css language-c#"><span class="hljs-keyword">await</span> <span class="hljs-keyword">foreach</span> (<span class="hljs-keyword">var</span> message <span class="hljs-keyword">in</span> consumer.Messages())
-{
-    Console.WriteLine(<span class="hljs-string">"Received: "</span> + Encoding.UTF8.GetString(message.Data.ToArray()));
-}
+<pre><code class="hljs css language-c#"><span class="hljs-keyword">await</span> consumer.Acknowledge(message);
 </code></pre></li>
 <li><p>累积确认消息。</p>
 <pre><code class="hljs css language-c#"><span class="hljs-keyword">await</span> consumer.AcknowledgeCumulative(message);
diff --git a/content/docs/zh-CN/next/client-libraries-java.html b/content/docs/zh-CN/next/client-libraries-java.html
index 87d38d9..83047af 100644
--- a/content/docs/zh-CN/next/client-libraries-java.html
+++ b/content/docs/zh-CN/next/client-libraries-java.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar Java 客户端 · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="可以使用 Pulsar Java 客户端来创建消息的 Java [生产者](#producer), [消费者](#consumer), 以及 [Reader](#reader) ,还可以执行 [管理任务](/docs/zh-CN/next/admin-api-overview)。 Java 客户端的当前版本是 **2.9.1**。"/><meta name [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar Java 客户端 · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="You can use a Pulsar Java client to create the Java [producer](#producer), [consumer](#consumer), [readers](#reader) and [TableView](#tableview) of messages and to perform [admini [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -75,8 +75,8 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer docsContainer"><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 id="__docusaurus" class="postHeaderTitle">Pulsar Java 客户端</h1></header><article><div><span><p>可以使用 Pulsar Java 客户端来创建消息的 Java <a href="#producer">生产者</a>, <a href="#consumer">消费者</a>, 以及 <a href="#re [...]
-<p>在利用 Java 客户端所创建的<a href="#producer">生产者</a>,<a href="#consumer">消费者</a>和<a href="#reader">读者</a>中所提供的方法都是线程安全的。</p>
+        </script></nav></div><div class="container mainContainer docsContainer"><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 id="__docusaurus" class="postHeaderTitle">Pulsar Java 客户端</h1></header><article><div><span><p>You can use a Pulsar Java client to create the Java <a href="#producer">producer</a>, <a href="#consumer" [...]
+<p>All the methods in <a href="#producer">producer</a>, <a href="#consumer">consumer</a>, <a href="#reader">readers</a> and <a href="#tableview">TableView</a> of a Java client are thread-safe.</p>
 <p>Pulsar 客户端的Javadoc 分为如下两个包:</p>
 <table>
 <thead>
@@ -251,7 +251,7 @@ If it is set to <code>false</code>,当传出消息队列已满时, <code>Sen
 <ul>
 <li><p><strong>FAIL</strong>:如果加密失败,则未加密的消息将会发送失败。</p></li>
 <li><p><strong>SEND</strong>:如果加密失败,则未加密的消息将会发送成功。 |
-<code>ProducerCryptoFailureAction.FAIL</code> <code>batchingMaxPublishDelayMicros</code>| long | 发送消息时的批处理时间。| TimeUnit.MILLISECONDS.toMicros(1) <code>batchingMaxMessages</code> | int | 一批消息中允许的最大消息个数。| 1000 <code>batchingEnabled</code>| boolean | 启用消息批处理。| true <code>compressionType</code>|CompressionType|Message data compression type used by a producer.<br>
+<code>ProducerCryptoFailureAction.FAIL</code> <code>batchingMaxPublishDelayMicros</code>| long | 发送消息时的批处理时间。| TimeUnit.MILLISECONDS.toMicros(1) <code>batchingMaxMessages</code> | int | 一批消息中允许的最大消息个数。| 1000 <code>batchingEnabled</code>| boolean | 启用消息批处理。| true <code>chunkingEnabled</code> | boolean | Enable chunking of messages. |false <code>compressionType</code>|CompressionType|Message data compression type used by a producer.<br>
 Available options:</p></li>
 <li><p><a href="https://github.com/lz4/lz4"><code>LZ4</code></a></p></li>
 <li><p><a href="https://zlib.net/"><code>ZLIB</code></a></p>
@@ -290,6 +290,18 @@ You can configure parameters if you do not want to use the default configuration
     .send();
 </code></pre>
 <p>You can terminate the builder chain with <code>sendAsync()</code> and get a future return.</p>
+<h3><a class="anchor" aria-hidden="true" id="enable-chunking"></a><a href="#enable-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>Message <a href="/docs/zh-CN/next/concepts-messaging#chunking">chunking</a> enables Pulsar to process large payload messages by splitting the message into chunks at the producer side and aggregating chunked messages at the consumer side.</p>
+<p>The message chunking feature is OFF by default. The following is an example about how to enable message chunking when creating a producer.</p>
+<pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
+        .topic(topic)
+        .enableChunking(<span class="hljs-keyword">true</span>)
+        .enableBatching(<span class="hljs-keyword">false</span>)
+        .create();
+</code></pre>
+<blockquote>
+<p><strong>Note:</strong> To enable chunking, you need to disable batching (<code>enableBatching</code>=<code>false</code>) concurrently.</p>
+</blockquote>
 <h2><a class="anchor" aria-hidden="true" id="消费者consumer"></a><a href="#消费者consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-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中,消费者订阅topic主题并处理生产者发布到这些主题的消息。 你可以首先实例化一个<a href="https://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
 对象并传递给他一个borker(<a href="#client-configuration">如上所示</a>) URL来实例化一个<a href="/docs/zh-CN/next/reference-terminology#consumer">消费者</a>。</p>
@@ -417,7 +429,7 @@ To set a custom dead letter topic name:
   
 When specifying the dead letter policy while not specifying `ackTimeoutMillis`, you can set the ack timeout to 30000 millisecond.|None `autoUpdatePartitions`|boolean|If `autoUpdatePartitions` is enabled, a consumer subscribes to partition increasement automatically.  
   
-**Note**: this is only for partitioned consumers.|true `replicateSubscriptionState`|boolean|If `replicateSubscriptionState` is enabled, a subscription state is replicated to geo-replicated clusters.|false `negativeAckRedeliveryBackoff`|NegativeAckRedeliveryBackoff|Interface for custom message is negativeAcked policy. You can specify `NegativeAckRedeliveryBackoff` for a consumer.| `NegativeAckRedeliveryExponentialBackoff`
+**Note**: this is only for partitioned consumers.|true `replicateSubscriptionState`|boolean|If `replicateSubscriptionState` is enabled, a subscription state is replicated to geo-replicated clusters.|false `negativeAckRedeliveryBackoff`|RedeliveryBackoff|Interface for custom message is negativeAcked policy. You can specify `RedeliveryBackoff` for a consumer.| `MultiplierRedeliveryBackoff` `ackTimeoutRedeliveryBackoff`|RedeliveryBackoff|Interface for custom message is ackTimeout policy. Yo [...]
 
 You can configure parameters if you do not want to use the default configuration. For a full list, see the Javadoc for the {@inject: javadoc:ConsumerBuilder:/client/org/apache/pulsar/client/api/ConsumerBuilder} class.
 
@@ -486,22 +498,68 @@ consumer.acknowledge(messages)
 &gt;     .build();
 &gt; ```
 
+### Configure chunking
+
+You can limit the maximum number of chunked messages a consumer maintains concurrently by configuring the `maxPendingChunkedMessage` and `autoAckOldestChunkedMessageOnQueueFull` parameters. When the threshold is reached, the consumer drops pending messages by silently acknowledging them or asking the broker to redeliver them later. The `expireTimeOfIncompleteChunkedMessage` parameter decides the time interval to expire incomplete chunks if the consumer fails to receive all chunks of a me [...]
+
+The following is an example of how to configure message chunking.
+
+```java
+Consumer&lt;byte[]&gt; consumer = client.newConsumer()
+        .topic(topic)
+        .subscriptionName(&quot;test&quot;)
+        .autoAckOldestChunkedMessageOnQueueFull(true)
+        .maxPendingChunkedMessage(100)
+        .expireTimeOfIncompleteChunkedMessage(10, TimeUnit.MINUTES)
+        .subscribe();
+```
+
 ### Negative acknowledgment redelivery backoff
 
-The `NegativeAckRedeliveryBackoff` introduces a redelivery backoff mechanism. You can achieve redelivery with different delays by setting `redeliveryCount` of messages.
+The `RedeliveryBackoff` introduces a redelivery backoff mechanism. You can achieve redelivery with different delays by setting `redeliveryCount` of messages.
+
+```java
+Consumer consumer =  client.newConsumer()
+        .topic(&quot;my-topic&quot;)
+        .subscriptionName(&quot;my-subscription&quot;)
+        .negativeAckRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+                .minDelayMs(1000)
+                .maxDelayMs(60 * 1000)
+                .build())
+        .subscribe();
+```
+
+### Acknowledgement timeout redelivery backoff
+
+The `RedeliveryBackoff` introduces a redelivery backoff mechanism. You can redeliver messages with different delays by setting the number of times the messages is retried.
 
 ```java
 Consumer consumer =  client.newConsumer()
         .topic(&quot;my-topic&quot;)
         .subscriptionName(&quot;my-subscription&quot;)
-        .negativeAckRedeliveryBackoff(NegativeAckRedeliveryExponentialBackoff.builder()
-                .minNackTimeMs(1000)
-                .maxNackTimeMs(60 * 1000)
+        .ackTimeout(10, TimeUnit.SECOND)
+        .ackTimeoutRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+                .minDelayMs(1000)
+                .maxDelayMs(60000)
+                .multiplier(2)
                 .build())
         .subscribe();
 ```
 
-&gt; **Note** - The `negativeAckRedeliveryBackoff` does not work with `consumer.negativeAcknowledge(MessageId messageId)` because you are not able to get the redelivery count from the message ID. - If a consumer crashes, it triggers the redelivery of unacked messages. In this case, `NegativeAckRedeliveryBackoff` does not take effect and the messages might get redelivered earlier than the delay time from the backoff.
+The message redelivery behavior should be as follows.
+
+| Redelivery count | Redelivery delay |
+|:---------------- |:---------------- |
+| 1                | 10 + 1 seconds   |
+| 2                | 10 + 2 seconds   |
+| 3                | 10 + 4 seconds   |
+| 4                | 10 + 8 seconds   |
+| 5                | 10 + 16 seconds  |
+| 6                | 10 + 32 seconds  |
+| 7                | 10 + 60 seconds  |
+| 8                | 10 + 60 seconds  |
+
+&gt; **Note** - The `negativeAckRedeliveryBackoff` does not work with `consumer.negativeAcknowledge(MessageId messageId)` because you are not able to get the redelivery count from the message ID. - If a consumer crashes, it triggers the redelivery of unacked messages. In this case, `RedeliveryBackoff` does not take effect and the messages might get redelivered earlier than the delay time from the backoff.
 
 ### 多主题订阅
 
@@ -855,6 +913,40 @@ pulsarClient.newReader()
 
 Total hash range size is 65536, so the max end of the range should be less than or equal to 65535.
 
+## TableView
+
+The TableView interface serves an encapsulated access pattern, providing a continuously updated key-value map view of the compacted topic data. Messages without keys will be ignored.
+
+With TableView, Pulsar clients can fetch all the message updates from a topic and construct a map with the latest values of each key. These values can then be used to build a local cache of data. In addition, you can register consumers with the TableView by specifying a listener to perform a scan of the map and then receive notifications when new messages are received. Consequently, event handling can be triggered to serve use cases, such as event-driven applications and message monitoring.
+
+&gt; **Note:** Each TableView uses one Reader instance per partition, and reads the topic starting from the compacted view by default. It is highly recommended to enable automatic compaction by [configuring the topic compaction policies](/docs/zh-CN/next/cookbooks-compaction#configuring-compaction-to-run-automatically) for the given topic or namespace. More frequent compaction results in shorter startup times because less data is replayed to reconstruct the TableView of the topic.
+
+The following figure illustrates the dynamic construction of a TableView updated with newer values of each key. ![TableView](/docs/assets/tableview.png)
+
+### Configure TableView
+
+The following is an example of how to configure a TableView.
+
+    try (TableView&lt;String&gt; tv = client.newTableViewBuilder(Schema.STRING)
+      .topic(&quot;tableview-test&quot;)
+      .create()) {
+        String value = tv.get(&quot;my-key&quot;);
+        System.out.println(&quot;Key's value: &quot; + value);
+    }
+    
+
+You can use the available parameters in the `loadConf` configuration or related [API](https://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/TableViewBuilder.html) to customize your TableView.
+
+| Name | Type| Required? |
+
+&lt;div style=&quot;width:300px&quot;&gt;
+  说明
+&lt;/div&gt;
+| 默认值                                                                                                         |
+| ----------------------------------------------------------------------------------------------------------- |
+| `topic` | string | yes | The topic name of the TableView. | N/A                                             |
+| `autoUpdatePartitionInterval` | int | no | The interval to check for newly added partitions. | 60 (seconds) |
+
 ## Schema
 
 In Pulsar, all message data consists of byte arrays &quot;under the hood.&quot; [Message schemas](/docs/zh-CN/next/schema-get-started) enable you to use other types of data when constructing and handling messages (from simple types like strings to more complex, application-specific types). 如果在不指定 schema 的情况下构造 [生产者](#producer),那么生产者只能生产 `byte[]` 类型的消息。 The following is an example.
@@ -1039,7 +1131,7 @@ PulsarClient client = PulsarClient.builder()
     .authentication(auth)
     .build();
 ```</code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/client-libraries"><span class="arrow-prev">← </span><span>概述</span></a><a class="docs-next button" href="/docs/zh-CN/next/client-libraries-go"><span>Go</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="#maven">Maven</a></li><li><a href="#gradle">Gradle</a></li></ [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/client-libraries"><span class="arrow-prev">← </span><span>概述</span></a><a class="docs-next button" href="/docs/zh-CN/next/client-libraries-go"><span>Go</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="#maven">Maven</a></li><li><a href="#gradle">Gradle</a></li></ [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
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 87d38d9..83047af 100644
--- a/content/docs/zh-CN/next/client-libraries-java/index.html
+++ b/content/docs/zh-CN/next/client-libraries-java/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar Java 客户端 · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="可以使用 Pulsar Java 客户端来创建消息的 Java [生产者](#producer), [消费者](#consumer), 以及 [Reader](#reader) ,还可以执行 [管理任务](/docs/zh-CN/next/admin-api-overview)。 Java 客户端的当前版本是 **2.9.1**。"/><meta name [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Pulsar Java 客户端 · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="You can use a Pulsar Java client to create the Java [producer](#producer), [consumer](#consumer), [readers](#reader) and [TableView](#tableview) of messages and to perform [admini [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -75,8 +75,8 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer docsContainer"><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 id="__docusaurus" class="postHeaderTitle">Pulsar Java 客户端</h1></header><article><div><span><p>可以使用 Pulsar Java 客户端来创建消息的 Java <a href="#producer">生产者</a>, <a href="#consumer">消费者</a>, 以及 <a href="#re [...]
-<p>在利用 Java 客户端所创建的<a href="#producer">生产者</a>,<a href="#consumer">消费者</a>和<a href="#reader">读者</a>中所提供的方法都是线程安全的。</p>
+        </script></nav></div><div class="container mainContainer docsContainer"><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 id="__docusaurus" class="postHeaderTitle">Pulsar Java 客户端</h1></header><article><div><span><p>You can use a Pulsar Java client to create the Java <a href="#producer">producer</a>, <a href="#consumer" [...]
+<p>All the methods in <a href="#producer">producer</a>, <a href="#consumer">consumer</a>, <a href="#reader">readers</a> and <a href="#tableview">TableView</a> of a Java client are thread-safe.</p>
 <p>Pulsar 客户端的Javadoc 分为如下两个包:</p>
 <table>
 <thead>
@@ -251,7 +251,7 @@ If it is set to <code>false</code>,当传出消息队列已满时, <code>Sen
 <ul>
 <li><p><strong>FAIL</strong>:如果加密失败,则未加密的消息将会发送失败。</p></li>
 <li><p><strong>SEND</strong>:如果加密失败,则未加密的消息将会发送成功。 |
-<code>ProducerCryptoFailureAction.FAIL</code> <code>batchingMaxPublishDelayMicros</code>| long | 发送消息时的批处理时间。| TimeUnit.MILLISECONDS.toMicros(1) <code>batchingMaxMessages</code> | int | 一批消息中允许的最大消息个数。| 1000 <code>batchingEnabled</code>| boolean | 启用消息批处理。| true <code>compressionType</code>|CompressionType|Message data compression type used by a producer.<br>
+<code>ProducerCryptoFailureAction.FAIL</code> <code>batchingMaxPublishDelayMicros</code>| long | 发送消息时的批处理时间。| TimeUnit.MILLISECONDS.toMicros(1) <code>batchingMaxMessages</code> | int | 一批消息中允许的最大消息个数。| 1000 <code>batchingEnabled</code>| boolean | 启用消息批处理。| true <code>chunkingEnabled</code> | boolean | Enable chunking of messages. |false <code>compressionType</code>|CompressionType|Message data compression type used by a producer.<br>
 Available options:</p></li>
 <li><p><a href="https://github.com/lz4/lz4"><code>LZ4</code></a></p></li>
 <li><p><a href="https://zlib.net/"><code>ZLIB</code></a></p>
@@ -290,6 +290,18 @@ You can configure parameters if you do not want to use the default configuration
     .send();
 </code></pre>
 <p>You can terminate the builder chain with <code>sendAsync()</code> and get a future return.</p>
+<h3><a class="anchor" aria-hidden="true" id="enable-chunking"></a><a href="#enable-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>Message <a href="/docs/zh-CN/next/concepts-messaging#chunking">chunking</a> enables Pulsar to process large payload messages by splitting the message into chunks at the producer side and aggregating chunked messages at the consumer side.</p>
+<p>The message chunking feature is OFF by default. The following is an example about how to enable message chunking when creating a producer.</p>
+<pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
+        .topic(topic)
+        .enableChunking(<span class="hljs-keyword">true</span>)
+        .enableBatching(<span class="hljs-keyword">false</span>)
+        .create();
+</code></pre>
+<blockquote>
+<p><strong>Note:</strong> To enable chunking, you need to disable batching (<code>enableBatching</code>=<code>false</code>) concurrently.</p>
+</blockquote>
 <h2><a class="anchor" aria-hidden="true" id="消费者consumer"></a><a href="#消费者consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-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中,消费者订阅topic主题并处理生产者发布到这些主题的消息。 你可以首先实例化一个<a href="https://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
 对象并传递给他一个borker(<a href="#client-configuration">如上所示</a>) URL来实例化一个<a href="/docs/zh-CN/next/reference-terminology#consumer">消费者</a>。</p>
@@ -417,7 +429,7 @@ To set a custom dead letter topic name:
   
 When specifying the dead letter policy while not specifying `ackTimeoutMillis`, you can set the ack timeout to 30000 millisecond.|None `autoUpdatePartitions`|boolean|If `autoUpdatePartitions` is enabled, a consumer subscribes to partition increasement automatically.  
   
-**Note**: this is only for partitioned consumers.|true `replicateSubscriptionState`|boolean|If `replicateSubscriptionState` is enabled, a subscription state is replicated to geo-replicated clusters.|false `negativeAckRedeliveryBackoff`|NegativeAckRedeliveryBackoff|Interface for custom message is negativeAcked policy. You can specify `NegativeAckRedeliveryBackoff` for a consumer.| `NegativeAckRedeliveryExponentialBackoff`
+**Note**: this is only for partitioned consumers.|true `replicateSubscriptionState`|boolean|If `replicateSubscriptionState` is enabled, a subscription state is replicated to geo-replicated clusters.|false `negativeAckRedeliveryBackoff`|RedeliveryBackoff|Interface for custom message is negativeAcked policy. You can specify `RedeliveryBackoff` for a consumer.| `MultiplierRedeliveryBackoff` `ackTimeoutRedeliveryBackoff`|RedeliveryBackoff|Interface for custom message is ackTimeout policy. Yo [...]
 
 You can configure parameters if you do not want to use the default configuration. For a full list, see the Javadoc for the {@inject: javadoc:ConsumerBuilder:/client/org/apache/pulsar/client/api/ConsumerBuilder} class.
 
@@ -486,22 +498,68 @@ consumer.acknowledge(messages)
 &gt;     .build();
 &gt; ```
 
+### Configure chunking
+
+You can limit the maximum number of chunked messages a consumer maintains concurrently by configuring the `maxPendingChunkedMessage` and `autoAckOldestChunkedMessageOnQueueFull` parameters. When the threshold is reached, the consumer drops pending messages by silently acknowledging them or asking the broker to redeliver them later. The `expireTimeOfIncompleteChunkedMessage` parameter decides the time interval to expire incomplete chunks if the consumer fails to receive all chunks of a me [...]
+
+The following is an example of how to configure message chunking.
+
+```java
+Consumer&lt;byte[]&gt; consumer = client.newConsumer()
+        .topic(topic)
+        .subscriptionName(&quot;test&quot;)
+        .autoAckOldestChunkedMessageOnQueueFull(true)
+        .maxPendingChunkedMessage(100)
+        .expireTimeOfIncompleteChunkedMessage(10, TimeUnit.MINUTES)
+        .subscribe();
+```
+
 ### Negative acknowledgment redelivery backoff
 
-The `NegativeAckRedeliveryBackoff` introduces a redelivery backoff mechanism. You can achieve redelivery with different delays by setting `redeliveryCount` of messages.
+The `RedeliveryBackoff` introduces a redelivery backoff mechanism. You can achieve redelivery with different delays by setting `redeliveryCount` of messages.
+
+```java
+Consumer consumer =  client.newConsumer()
+        .topic(&quot;my-topic&quot;)
+        .subscriptionName(&quot;my-subscription&quot;)
+        .negativeAckRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+                .minDelayMs(1000)
+                .maxDelayMs(60 * 1000)
+                .build())
+        .subscribe();
+```
+
+### Acknowledgement timeout redelivery backoff
+
+The `RedeliveryBackoff` introduces a redelivery backoff mechanism. You can redeliver messages with different delays by setting the number of times the messages is retried.
 
 ```java
 Consumer consumer =  client.newConsumer()
         .topic(&quot;my-topic&quot;)
         .subscriptionName(&quot;my-subscription&quot;)
-        .negativeAckRedeliveryBackoff(NegativeAckRedeliveryExponentialBackoff.builder()
-                .minNackTimeMs(1000)
-                .maxNackTimeMs(60 * 1000)
+        .ackTimeout(10, TimeUnit.SECOND)
+        .ackTimeoutRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+                .minDelayMs(1000)
+                .maxDelayMs(60000)
+                .multiplier(2)
                 .build())
         .subscribe();
 ```
 
-&gt; **Note** - The `negativeAckRedeliveryBackoff` does not work with `consumer.negativeAcknowledge(MessageId messageId)` because you are not able to get the redelivery count from the message ID. - If a consumer crashes, it triggers the redelivery of unacked messages. In this case, `NegativeAckRedeliveryBackoff` does not take effect and the messages might get redelivered earlier than the delay time from the backoff.
+The message redelivery behavior should be as follows.
+
+| Redelivery count | Redelivery delay |
+|:---------------- |:---------------- |
+| 1                | 10 + 1 seconds   |
+| 2                | 10 + 2 seconds   |
+| 3                | 10 + 4 seconds   |
+| 4                | 10 + 8 seconds   |
+| 5                | 10 + 16 seconds  |
+| 6                | 10 + 32 seconds  |
+| 7                | 10 + 60 seconds  |
+| 8                | 10 + 60 seconds  |
+
+&gt; **Note** - The `negativeAckRedeliveryBackoff` does not work with `consumer.negativeAcknowledge(MessageId messageId)` because you are not able to get the redelivery count from the message ID. - If a consumer crashes, it triggers the redelivery of unacked messages. In this case, `RedeliveryBackoff` does not take effect and the messages might get redelivered earlier than the delay time from the backoff.
 
 ### 多主题订阅
 
@@ -855,6 +913,40 @@ pulsarClient.newReader()
 
 Total hash range size is 65536, so the max end of the range should be less than or equal to 65535.
 
+## TableView
+
+The TableView interface serves an encapsulated access pattern, providing a continuously updated key-value map view of the compacted topic data. Messages without keys will be ignored.
+
+With TableView, Pulsar clients can fetch all the message updates from a topic and construct a map with the latest values of each key. These values can then be used to build a local cache of data. In addition, you can register consumers with the TableView by specifying a listener to perform a scan of the map and then receive notifications when new messages are received. Consequently, event handling can be triggered to serve use cases, such as event-driven applications and message monitoring.
+
+&gt; **Note:** Each TableView uses one Reader instance per partition, and reads the topic starting from the compacted view by default. It is highly recommended to enable automatic compaction by [configuring the topic compaction policies](/docs/zh-CN/next/cookbooks-compaction#configuring-compaction-to-run-automatically) for the given topic or namespace. More frequent compaction results in shorter startup times because less data is replayed to reconstruct the TableView of the topic.
+
+The following figure illustrates the dynamic construction of a TableView updated with newer values of each key. ![TableView](/docs/assets/tableview.png)
+
+### Configure TableView
+
+The following is an example of how to configure a TableView.
+
+    try (TableView&lt;String&gt; tv = client.newTableViewBuilder(Schema.STRING)
+      .topic(&quot;tableview-test&quot;)
+      .create()) {
+        String value = tv.get(&quot;my-key&quot;);
+        System.out.println(&quot;Key's value: &quot; + value);
+    }
+    
+
+You can use the available parameters in the `loadConf` configuration or related [API](https://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/TableViewBuilder.html) to customize your TableView.
+
+| Name | Type| Required? |
+
+&lt;div style=&quot;width:300px&quot;&gt;
+  说明
+&lt;/div&gt;
+| 默认值                                                                                                         |
+| ----------------------------------------------------------------------------------------------------------- |
+| `topic` | string | yes | The topic name of the TableView. | N/A                                             |
+| `autoUpdatePartitionInterval` | int | no | The interval to check for newly added partitions. | 60 (seconds) |
+
 ## Schema
 
 In Pulsar, all message data consists of byte arrays &quot;under the hood.&quot; [Message schemas](/docs/zh-CN/next/schema-get-started) enable you to use other types of data when constructing and handling messages (from simple types like strings to more complex, application-specific types). 如果在不指定 schema 的情况下构造 [生产者](#producer),那么生产者只能生产 `byte[]` 类型的消息。 The following is an example.
@@ -1039,7 +1131,7 @@ PulsarClient client = PulsarClient.builder()
     .authentication(auth)
     .build();
 ```</code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/client-libraries"><span class="arrow-prev">← </span><span>概述</span></a><a class="docs-next button" href="/docs/zh-CN/next/client-libraries-go"><span>Go</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="#maven">Maven</a></li><li><a href="#gradle">Gradle</a></li></ [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/client-libraries"><span class="arrow-prev">← </span><span>概述</span></a><a class="docs-next button" href="/docs/zh-CN/next/client-libraries-go"><span>Go</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="#maven">Maven</a></li><li><a href="#gradle">Gradle</a></li></ [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/zh-CN/next/client-libraries-websocket.html b/content/docs/zh-CN/next/client-libraries-websocket.html
index 60f403d..e9714ef 100644
--- a/content/docs/zh-CN/next/client-libraries-websocket.html
+++ b/content/docs/zh-CN/next/client-libraries-websocket.html
@@ -93,12 +93,12 @@
 <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.6 [...]
 <p>在这种模式下,WebSocket 会作为单独的服务在 Pulsar <a href="/docs/zh-CN/next/reference-terminology#broker">broker</a> 上运行。 运行此模式,需在 <a href="/docs/zh-CN/next/reference-configuration#websocket"><code>conf/websocket.conf</code></a> 文件中进行配置。 <em>至少</em>需要设置以下参数:</p>
 <ul>
-<li><a href="/docs/zh-CN/next/reference-configuration#websocket-configurationStoreServers"><code>configurationStoreServers</code></a></li>
+<li><a href="/docs/zh-CN/next/reference-configuration#websocket"><code>configurationMetadataStoreUrl</code></a></li>
 <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>
-<pre><code class="hljs css language-properties"><span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1:2181,zk2:2181,zk3:2181</span>
+<pre><code class="hljs css language-properties"><span class="hljs-attr">configurationMetadataStoreUrl</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>
 </code></pre>
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 60f403d..e9714ef 100644
--- a/content/docs/zh-CN/next/client-libraries-websocket/index.html
+++ b/content/docs/zh-CN/next/client-libraries-websocket/index.html
@@ -93,12 +93,12 @@
 <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.6 [...]
 <p>在这种模式下,WebSocket 会作为单独的服务在 Pulsar <a href="/docs/zh-CN/next/reference-terminology#broker">broker</a> 上运行。 运行此模式,需在 <a href="/docs/zh-CN/next/reference-configuration#websocket"><code>conf/websocket.conf</code></a> 文件中进行配置。 <em>至少</em>需要设置以下参数:</p>
 <ul>
-<li><a href="/docs/zh-CN/next/reference-configuration#websocket-configurationStoreServers"><code>configurationStoreServers</code></a></li>
+<li><a href="/docs/zh-CN/next/reference-configuration#websocket"><code>configurationMetadataStoreUrl</code></a></li>
 <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>
-<pre><code class="hljs css language-properties"><span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1:2181,zk2:2181,zk3:2181</span>
+<pre><code class="hljs css language-properties"><span class="hljs-attr">configurationMetadataStoreUrl</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>
 </code></pre>
diff --git a/content/docs/zh-CN/next/client-libraries.html b/content/docs/zh-CN/next/client-libraries.html
index b5627a4..2014a20 100644
--- a/content/docs/zh-CN/next/client-libraries.html
+++ b/content/docs/zh-CN/next/client-libraries.html
@@ -86,7 +86,7 @@
 <li><a href="/docs/zh-CN/next/client-libraries-dotnet">C# 客户端</a></li>
 </ul>
 <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 client feature matrix for different languages is listed on <a href="https://github.com/apache/pulsar/wiki/PIP-108%3A-Pulsar-Feature-Matrix-%28Client-and-Function%29">Pulsar Feature Matrix (Client and Function)</a> page.</p>
+<p>Pulsar client feature matrix for different languages is listed on <a href="https://docs.google.com/spreadsheets/d/1YHYTkIXR8-Ql103u-IMI18TXLlGStK8uJjDsOOA0T20/edit#gid=1784579914">Pulsar Feature Matrix (Client and Function)</a> page.</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. [...]
 <p>除了正式发布的客户端外,还有多个以不同语言开发 Pulsar 客户端的项目。</p>
 <blockquote>
diff --git a/content/docs/zh-CN/next/client-libraries/index.html b/content/docs/zh-CN/next/client-libraries/index.html
index b5627a4..2014a20 100644
--- a/content/docs/zh-CN/next/client-libraries/index.html
+++ b/content/docs/zh-CN/next/client-libraries/index.html
@@ -86,7 +86,7 @@
 <li><a href="/docs/zh-CN/next/client-libraries-dotnet">C# 客户端</a></li>
 </ul>
 <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 client feature matrix for different languages is listed on <a href="https://github.com/apache/pulsar/wiki/PIP-108%3A-Pulsar-Feature-Matrix-%28Client-and-Function%29">Pulsar Feature Matrix (Client and Function)</a> page.</p>
+<p>Pulsar client feature matrix for different languages is listed on <a href="https://docs.google.com/spreadsheets/d/1YHYTkIXR8-Ql103u-IMI18TXLlGStK8uJjDsOOA0T20/edit#gid=1784579914">Pulsar Feature Matrix (Client and Function)</a> page.</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. [...]
 <p>除了正式发布的客户端外,还有多个以不同语言开发 Pulsar 客户端的项目。</p>
 <blockquote>
diff --git a/content/docs/zh-CN/next/concepts-architecture-overview.html b/content/docs/zh-CN/next/concepts-architecture-overview.html
index 3dbeb4f..d8742be 100644
--- a/content/docs/zh-CN/next/concepts-architecture-overview.html
+++ b/content/docs/zh-CN/next/concepts-architecture-overview.html
@@ -110,6 +110,9 @@
 </blockquote>
 <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.09 [...]
 <p>Pulsar 元数据存储维护 Pulsar 集群的全部元数据,比如主题元数据、Schema、Broker 负载数据等等。 Pulsar 使用 <a href="https://zookeeper.apache.org/">Apache ZooKeeper</a> 进行元数据存储、集群配置和协调。 Pulsar 元数据存储可以部署在单独的 ZooKeeper 集群或者是部署在已有的 ZooKeeper 集群。 你可以将 ZooKeeper 用作 Pulsar 元数据存储和 <a href="https://bookkeeper.apache.org/docs/latest/getting-started/concepts/#metadata-storage">BookKeeper 元数据存储</a>。 如果想将部署的 Pulsar broker 连接到一个已有的 BookKeeper 集群,你需要部署单独的 ZooKeeper 集群分别用作 Pulsar 元数据存储和 BookKeeper 元数据存储。</p>
+<blockquote>
+<p>Pulsar also supports more metadata backend services, including <a href="https://etcd.io/">ETCD</a> and <a href="http://rocksdb.org/">RocksDB</a> (for standalone Pulsar only).</p>
+</blockquote>
 <p>在 Pulsar 实例中:</p>
 <ul>
 <li>配置存储 Quorum 存储了租户、命名空间和其他需要全局一致的配置项。</li>
@@ -164,9 +167,10 @@
 <p>为了性能和容错,你可以运行任意个Pulsar proxy。</p>
 </blockquote>
 <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
+<pre><code class="hljs css language-bash">$ <span class="hljs-built_in">cd</span> /path/to/pulsar/directory
+$ bin/pulsar proxy \
+  --metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181 \
+  --configuration-metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181
 </code></pre>
 <blockquote>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-proxy-文档"></a><a href="#pulsar-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-2-2.5  [...]
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 3dbeb4f..d8742be 100644
--- a/content/docs/zh-CN/next/concepts-architecture-overview/index.html
+++ b/content/docs/zh-CN/next/concepts-architecture-overview/index.html
@@ -110,6 +110,9 @@
 </blockquote>
 <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.09 [...]
 <p>Pulsar 元数据存储维护 Pulsar 集群的全部元数据,比如主题元数据、Schema、Broker 负载数据等等。 Pulsar 使用 <a href="https://zookeeper.apache.org/">Apache ZooKeeper</a> 进行元数据存储、集群配置和协调。 Pulsar 元数据存储可以部署在单独的 ZooKeeper 集群或者是部署在已有的 ZooKeeper 集群。 你可以将 ZooKeeper 用作 Pulsar 元数据存储和 <a href="https://bookkeeper.apache.org/docs/latest/getting-started/concepts/#metadata-storage">BookKeeper 元数据存储</a>。 如果想将部署的 Pulsar broker 连接到一个已有的 BookKeeper 集群,你需要部署单独的 ZooKeeper 集群分别用作 Pulsar 元数据存储和 BookKeeper 元数据存储。</p>
+<blockquote>
+<p>Pulsar also supports more metadata backend services, including <a href="https://etcd.io/">ETCD</a> and <a href="http://rocksdb.org/">RocksDB</a> (for standalone Pulsar only).</p>
+</blockquote>
 <p>在 Pulsar 实例中:</p>
 <ul>
 <li>配置存储 Quorum 存储了租户、命名空间和其他需要全局一致的配置项。</li>
@@ -164,9 +167,10 @@
 <p>为了性能和容错,你可以运行任意个Pulsar proxy。</p>
 </blockquote>
 <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
+<pre><code class="hljs css language-bash">$ <span class="hljs-built_in">cd</span> /path/to/pulsar/directory
+$ bin/pulsar proxy \
+  --metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181 \
+  --configuration-metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181
 </code></pre>
 <blockquote>
 <h4><a class="anchor" aria-hidden="true" id="pulsar-proxy-文档"></a><a href="#pulsar-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-2-2.5  [...]
diff --git a/content/docs/zh-CN/next/concepts-messaging.html b/content/docs/zh-CN/next/concepts-messaging.html
index d352920..846559b 100644
--- a/content/docs/zh-CN/next/concepts-messaging.html
+++ b/content/docs/zh-CN/next/concepts-messaging.html
@@ -150,16 +150,26 @@ nettyMaxFrameSizeBytes=5253120
 <p>为了避免批量的向 consumer 重发已确认的消息,Pulsar 从 Pulsar 2.6.0 开始采用批量索引确认机制。如果启用批量索引确认机制,consumer 将筛选出已被确认的批量索引,并将批量索引确认请求发送给 broker。 Broker 维护批量索引的确认状态并跟踪每批索引的确认状态,以避免向 consumer 发送已确认的消息。 当该批信息的所有索引都被确认后,该批信息将被删除。</p>
 <p>By default, batch index acknowledgement is disabled (<code>acknowledgmentAtBatchIndexLevelEnabled=false</code>). You can enable batch index acknowledgement by setting the <code>acknowledgmentAtBatchIndexLevelEnabled</code> parameter to <code>true</code> at the broker side. 启用批量索引确认将会导致更多内存开销。</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.09V6.25c [...]
-<p>当你想要启用分块(chunking) 时,请阅读以下说明。 - Batching and chunking cannot be enabled simultaneously. 如果想要启用分块(chunking) ,您必须提前禁用批量处理。 - Chunking is only supported for persisted topics. - Chunking is only supported for Exclusive and Failover subscription types.</p>
-<p>当启用分块(chunking) 时(<code>chunkingEnabled=true</code>) ,如果消息大小大于允许的最大发布有效载荷大小,则 producer 将原始消息分割成分块的消息,并将它们与块状的元数据一起单独和按顺序发布到 broker。 在 broker 中,分块的消息将和普通的消息以相同的方式存储在 Managed Ledger 上。 唯一的区别是,consumer 需要缓冲分块消息,并在收集完所有分块消息后将其合并成真正的消息。 Managed Ledger 上的分块消息可以和普通消息交织在一起。 如果 producer 未能发布消息的所有分块,则当 consumer 未能在过期时间(expire time) 内接收所有分块时,consumer 可以过期未完成的分块。 By default, the expire time is set to one hour.</p>
-<p>Consumer 会缓存收到的块状消息,直到收到消息的所有分块为止。 然后 consumer 将分块的消息拼接在一起,并将它们放入接收器队列中。 客户端从接收器队列中消费消息。 一旦 consumer 使用整个大消息并确认,consumer 就会在内部发送与该大消息关联的所有分块消息的确认。 You can set the <code>maxPendingChunkedMessage</code> parameter on the consumer. 当达到阈值时,consumer 通过静默确认未分块的消息或通过将其标记为未确认,要求 broker 稍后重新发送这些消息。</p>
-<p>The broker does not require any changes to support chunking for non-shared subscription. The broker only uses <code>chunkedMessageRate</code> to record chunked message rate on the topic.</p>
-<h4><a class="anchor" aria-hidden="true" id="处理一个-producer-和一个订阅-consumer-的分块消息"></a><a href="#处理一个-producer-和一个订阅-consumer-的分块消息" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5 [...]
-<p>如下图所示,当生产者向主题发送一批大的分块消息和普通的非分块消息时。 假设生产者发送的消息为 M1,M1 有三个分块 M1-C1,M1-C2 和 M1-C3。 这个 broker 在其管理的ledger里面保存所有的三个块消息,然后以相同的顺序分发给消费者(独占/灾备模式)。 消费者将在内存缓存所有的块消息,直到收到所有的消息块。将这些消息合并成为原始的消息M1,发送给处理进程。</p>
+<p>Message chunking enables Pulsar to process large payload messages by splitting the message into chunks at the producer side and aggregating chunked messages at the consumer side.</p>
+<p>With message chunking enabled, when the size of a message exceeds the allowed maximum payload size (the <code>maxMessageSize</code> parameter of broker), the workflow of messaging is as follows: 1. The producer splits the original message into chunked messages and publishes them with chunked metadata to the broker separately and in order. 2. The broker stores the chunked messages in one managed-ledger in the same way as that of ordinary messages, and it uses the <code>chunkedMessageRa [...]
+<p><strong>Limitations:</strong> - Chunking is only available for persisted topics. - Chunking is only available for the exclusive and failover subscription types. - Chunking cannot be enabled simultaneously with batching.</p>
+<h4><a class="anchor" aria-hidden="true" id="handle-consecutive-chunked-messages-with-one-ordered-consumer"></a><a href="#handle-consecutive-chunked-messages-with-one-ordered-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-. [...]
+<p>The following figure shows a topic with one producer which publishes a large message payload in chunked messages along with regular non-chunked messages. The producer publishes message M1 in three chunks labeled M1-C1, M1-C2 and M1-C3. The broker stores all the three chunked messages in the managed-ledger and dispatches them to the ordered (exclusive/failover) consumer in the same order. The consumer buffers all the chunked messages in memory until it receives all the chunked messages [...]
 <p><img src="/docs/assets/chunking-01.png" alt=""></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. [...]
-<p>当多个生产者发布块消息到单个主题,这个 Broker 在同一个 Ledger 里面保存来自不同生产者的所有块消息。 如下所示,生产者1发布的消息 M1,M1 由 M1-C1, M1-C2 和 M1-C3 三个块组成。 生产者2发布的消息 M2,M2 由 M2-C1, M2-C2 和 M2-C3 三个块组成。 这些特定消息的所有分块是顺序排列的,但是其在 ledger 里面可能不是连续的。 这种方式会给消费者带来一定的内存负担。因为消费者会为每个大消息在内存开辟一块缓冲区,以便将所有的块消息合并为原始的大消息。</p>
+<h4><a class="anchor" aria-hidden="true" id="handle-interwoven-chunked-messages-with-one-ordered-consumer"></a><a href="#handle-interwoven-chunked-messages-with-one-ordered-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 [...]
+<p>When multiple producers publish chunked messages into a single topic, the broker stores all the chunked messages coming from different producers in the same managed-ledger. The chunked messages in the managed-ledger can be interwoven with each other. 如下所示,生产者1发布的消息 M1,M1 由 M1-C1, M1-C2 和 M1-C3 三个块组成。 生产者2发布的消息 M2,M2 由 M2-C1, M2-C2 和 M2-C3 三个块组成。 这些特定消息的所有分块是顺序排列的,但是其在 ledger 里面可能不是连续的。</p>
 <p><img src="/docs/assets/chunking-02.png" alt=""></p>
+<blockquote>
+<p><strong>Note</strong>  <br>
+In this case, interwoven chunked messages may bring some memory pressure to the consumer because the consumer keeps a separate buffer for each large message to aggregate all its chunks in one message. You can limit the maximum number of chunked messages a consumer maintains concurrently by configuring the <code>maxPendingChunkedMessage</code> parameter. When the threshold is reached, the consumer drops pending messages by silently acknowledging them or asking the broker to redeliver them [...]
+</blockquote>
+<h4><a class="anchor" aria-hidden="true" id="enable-message-chunking"></a><a href="#enable-message-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 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><strong>Prerequisite:</strong> Disable batching by setting the <code>enableBatching</code> parameter to <code>false</code>.</p>
+<p>The message chunking feature is OFF by default. To enable message chunking, set the <code>chunkingEnabled</code> parameter to <code>true</code> when creating a producer.</p>
+<blockquote>
+<p><strong>Note</strong>  <br>
+If the consumer fails to receive all chunks of a message within a specified time period, it expires incomplete chunks. The default value is 1 minute. For more information about the <code>expireTimeOfIncompleteChunkedMessage</code> parameter, refer to <a href="https://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/">org.apache.pulsar.client.api</a>.</p>
+</blockquote>
 <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.2 [...]
 <p>A consumer is a process that attaches to a topic via a subscription and then receives messages.</p>
 <p>Consumer 向 broker 发送消息流获取申请(<a href="/docs/zh-CN/next/develop-binary-protocol#flow-control">flow permit request</a>)以获取消息。 在 Consumer 端有一个队列,用于接收从 broker 推送来的消息。 你能够通过<a href="/docs/zh-CN/next/client-libraries-java#configure-consumer"><code>receiverQueueSize</code></a>参数配置队列的长度 (队列的默认长度是<code>1000</code>) 每当 <code>consumer.receive()</code> 被调用一次,就从缓冲区(buffer)获取一条消息。</p>
@@ -225,14 +235,38 @@ If batching is enabled, all messages in one batch are redelivered to the consume
 <p>It happens sometimes that consumers fail to process messages successfully. In this case, you can use <a href="#negative-acknowledgement">negative acknowledgement</a> to redeliver the messages after consumption failures. For the Shared subscription type, the messages are redelivered to other consumers; for other subscription types, the messages are redelivered to the same consumer.</p>
 <p>But this is not flexible enough. A better way is to use the <strong>redelivery backoff mechanism</strong>. You can redeliver messages with different delays by setting the number of times the messages are retried.</p>
 <p>Use the following API to enable <code>Negative Redelivery Backoff</code>.</p>
-<pre><code class="hljs css language-java">consumer.negativeAckRedeliveryBackoff(NegativeAckRedeliveryExponentialBackoff.builder()
-        .minNackTimeMs(<span class="hljs-number">1000</span>)
-        .maxNackTimeMs(<span class="hljs-number">60</span> * <span class="hljs-number">1000</span>)
+<pre><code class="hljs css language-java">consumer.negativeAckRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+        .minDelayMs(<span class="hljs-number">1000</span>)
+        .maxDelayMs(<span class="hljs-number">60</span> * <span class="hljs-number">1000</span>)
         .build())
 </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>The acknowledgement timeout mechanism allows you to set a time range during which the client tracks the unacknowledged messages. After this acknowledgement timeout (<code>ackTimeout</code>) period, the client sends <code>redeliver unacknowledged messages</code> request to the broker, thus the broker resends the unacknowledged messages to the consumer.</p>
 <p>You can configure the acknowledgement timeout mechanism to redeliver the message if it is not acknowledged after <code>ackTimeout</code> or to execute a timer task to check the acknowledgement timeout messages during every <code>ackTimeoutTickTime</code> period.</p>
+<p>You can also use the redelivery backoff mechanism, redeliver messages with different delays by setting the number of times the messages is retried.</p>
+<p>If you want to use redelivery backoff, you can use the following API.</p>
+<pre><code class="hljs css language-java">consumer.ackTimeout(<span class="hljs-number">10</span>, TimeUnit.SECOND)
+        .ackTimeoutRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+        .minDelayMs(<span class="hljs-number">1000</span>)
+        .maxDelayMs(<span class="hljs-number">60000</span>)
+        .multiplier(<span class="hljs-number">2</span>).build())
+</code></pre>
+<p>The message redelivery behavior should be as follows.</p>
+<table>
+<thead>
+<tr><th style="text-align:left">Redelivery count</th><th style="text-align:left">Redelivery delay</th></tr>
+</thead>
+<tbody>
+<tr><td style="text-align:left">1</td><td style="text-align:left">10 + 1 seconds</td></tr>
+<tr><td style="text-align:left">2</td><td style="text-align:left">10 + 2 seconds</td></tr>
+<tr><td style="text-align:left">3</td><td style="text-align:left">10 + 4 seconds</td></tr>
+<tr><td style="text-align:left">4</td><td style="text-align:left">10 + 8 seconds</td></tr>
+<tr><td style="text-align:left">5</td><td style="text-align:left">10 + 16 seconds</td></tr>
+<tr><td style="text-align:left">6</td><td style="text-align:left">10 + 32 seconds</td></tr>
+<tr><td style="text-align:left">7</td><td style="text-align:left">10 + 60 seconds</td></tr>
+<tr><td style="text-align:left">8</td><td style="text-align:left">10 + 60 seconds</td></tr>
+</tbody>
+</table>
 <blockquote>
 <p><strong>Note</strong></p>
 <ul>
diff --git a/content/docs/zh-CN/next/concepts-messaging/index.html b/content/docs/zh-CN/next/concepts-messaging/index.html
index d352920..846559b 100644
--- a/content/docs/zh-CN/next/concepts-messaging/index.html
+++ b/content/docs/zh-CN/next/concepts-messaging/index.html
@@ -150,16 +150,26 @@ nettyMaxFrameSizeBytes=5253120
 <p>为了避免批量的向 consumer 重发已确认的消息,Pulsar 从 Pulsar 2.6.0 开始采用批量索引确认机制。如果启用批量索引确认机制,consumer 将筛选出已被确认的批量索引,并将批量索引确认请求发送给 broker。 Broker 维护批量索引的确认状态并跟踪每批索引的确认状态,以避免向 consumer 发送已确认的消息。 当该批信息的所有索引都被确认后,该批信息将被删除。</p>
 <p>By default, batch index acknowledgement is disabled (<code>acknowledgmentAtBatchIndexLevelEnabled=false</code>). You can enable batch index acknowledgement by setting the <code>acknowledgmentAtBatchIndexLevelEnabled</code> parameter to <code>true</code> at the broker side. 启用批量索引确认将会导致更多内存开销。</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.09V6.25c [...]
-<p>当你想要启用分块(chunking) 时,请阅读以下说明。 - Batching and chunking cannot be enabled simultaneously. 如果想要启用分块(chunking) ,您必须提前禁用批量处理。 - Chunking is only supported for persisted topics. - Chunking is only supported for Exclusive and Failover subscription types.</p>
-<p>当启用分块(chunking) 时(<code>chunkingEnabled=true</code>) ,如果消息大小大于允许的最大发布有效载荷大小,则 producer 将原始消息分割成分块的消息,并将它们与块状的元数据一起单独和按顺序发布到 broker。 在 broker 中,分块的消息将和普通的消息以相同的方式存储在 Managed Ledger 上。 唯一的区别是,consumer 需要缓冲分块消息,并在收集完所有分块消息后将其合并成真正的消息。 Managed Ledger 上的分块消息可以和普通消息交织在一起。 如果 producer 未能发布消息的所有分块,则当 consumer 未能在过期时间(expire time) 内接收所有分块时,consumer 可以过期未完成的分块。 By default, the expire time is set to one hour.</p>
-<p>Consumer 会缓存收到的块状消息,直到收到消息的所有分块为止。 然后 consumer 将分块的消息拼接在一起,并将它们放入接收器队列中。 客户端从接收器队列中消费消息。 一旦 consumer 使用整个大消息并确认,consumer 就会在内部发送与该大消息关联的所有分块消息的确认。 You can set the <code>maxPendingChunkedMessage</code> parameter on the consumer. 当达到阈值时,consumer 通过静默确认未分块的消息或通过将其标记为未确认,要求 broker 稍后重新发送这些消息。</p>
-<p>The broker does not require any changes to support chunking for non-shared subscription. The broker only uses <code>chunkedMessageRate</code> to record chunked message rate on the topic.</p>
-<h4><a class="anchor" aria-hidden="true" id="处理一个-producer-和一个订阅-consumer-的分块消息"></a><a href="#处理一个-producer-和一个订阅-consumer-的分块消息" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5 [...]
-<p>如下图所示,当生产者向主题发送一批大的分块消息和普通的非分块消息时。 假设生产者发送的消息为 M1,M1 有三个分块 M1-C1,M1-C2 和 M1-C3。 这个 broker 在其管理的ledger里面保存所有的三个块消息,然后以相同的顺序分发给消费者(独占/灾备模式)。 消费者将在内存缓存所有的块消息,直到收到所有的消息块。将这些消息合并成为原始的消息M1,发送给处理进程。</p>
+<p>Message chunking enables Pulsar to process large payload messages by splitting the message into chunks at the producer side and aggregating chunked messages at the consumer side.</p>
+<p>With message chunking enabled, when the size of a message exceeds the allowed maximum payload size (the <code>maxMessageSize</code> parameter of broker), the workflow of messaging is as follows: 1. The producer splits the original message into chunked messages and publishes them with chunked metadata to the broker separately and in order. 2. The broker stores the chunked messages in one managed-ledger in the same way as that of ordinary messages, and it uses the <code>chunkedMessageRa [...]
+<p><strong>Limitations:</strong> - Chunking is only available for persisted topics. - Chunking is only available for the exclusive and failover subscription types. - Chunking cannot be enabled simultaneously with batching.</p>
+<h4><a class="anchor" aria-hidden="true" id="handle-consecutive-chunked-messages-with-one-ordered-consumer"></a><a href="#handle-consecutive-chunked-messages-with-one-ordered-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-. [...]
+<p>The following figure shows a topic with one producer which publishes a large message payload in chunked messages along with regular non-chunked messages. The producer publishes message M1 in three chunks labeled M1-C1, M1-C2 and M1-C3. The broker stores all the three chunked messages in the managed-ledger and dispatches them to the ordered (exclusive/failover) consumer in the same order. The consumer buffers all the chunked messages in memory until it receives all the chunked messages [...]
 <p><img src="/docs/assets/chunking-01.png" alt=""></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. [...]
-<p>当多个生产者发布块消息到单个主题,这个 Broker 在同一个 Ledger 里面保存来自不同生产者的所有块消息。 如下所示,生产者1发布的消息 M1,M1 由 M1-C1, M1-C2 和 M1-C3 三个块组成。 生产者2发布的消息 M2,M2 由 M2-C1, M2-C2 和 M2-C3 三个块组成。 这些特定消息的所有分块是顺序排列的,但是其在 ledger 里面可能不是连续的。 这种方式会给消费者带来一定的内存负担。因为消费者会为每个大消息在内存开辟一块缓冲区,以便将所有的块消息合并为原始的大消息。</p>
+<h4><a class="anchor" aria-hidden="true" id="handle-interwoven-chunked-messages-with-one-ordered-consumer"></a><a href="#handle-interwoven-chunked-messages-with-one-ordered-consumer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 [...]
+<p>When multiple producers publish chunked messages into a single topic, the broker stores all the chunked messages coming from different producers in the same managed-ledger. The chunked messages in the managed-ledger can be interwoven with each other. 如下所示,生产者1发布的消息 M1,M1 由 M1-C1, M1-C2 和 M1-C3 三个块组成。 生产者2发布的消息 M2,M2 由 M2-C1, M2-C2 和 M2-C3 三个块组成。 这些特定消息的所有分块是顺序排列的,但是其在 ledger 里面可能不是连续的。</p>
 <p><img src="/docs/assets/chunking-02.png" alt=""></p>
+<blockquote>
+<p><strong>Note</strong>  <br>
+In this case, interwoven chunked messages may bring some memory pressure to the consumer because the consumer keeps a separate buffer for each large message to aggregate all its chunks in one message. You can limit the maximum number of chunked messages a consumer maintains concurrently by configuring the <code>maxPendingChunkedMessage</code> parameter. When the threshold is reached, the consumer drops pending messages by silently acknowledging them or asking the broker to redeliver them [...]
+</blockquote>
+<h4><a class="anchor" aria-hidden="true" id="enable-message-chunking"></a><a href="#enable-message-chunking" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 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><strong>Prerequisite:</strong> Disable batching by setting the <code>enableBatching</code> parameter to <code>false</code>.</p>
+<p>The message chunking feature is OFF by default. To enable message chunking, set the <code>chunkingEnabled</code> parameter to <code>true</code> when creating a producer.</p>
+<blockquote>
+<p><strong>Note</strong>  <br>
+If the consumer fails to receive all chunks of a message within a specified time period, it expires incomplete chunks. The default value is 1 minute. For more information about the <code>expireTimeOfIncompleteChunkedMessage</code> parameter, refer to <a href="https://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/">org.apache.pulsar.client.api</a>.</p>
+</blockquote>
 <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.2 [...]
 <p>A consumer is a process that attaches to a topic via a subscription and then receives messages.</p>
 <p>Consumer 向 broker 发送消息流获取申请(<a href="/docs/zh-CN/next/develop-binary-protocol#flow-control">flow permit request</a>)以获取消息。 在 Consumer 端有一个队列,用于接收从 broker 推送来的消息。 你能够通过<a href="/docs/zh-CN/next/client-libraries-java#configure-consumer"><code>receiverQueueSize</code></a>参数配置队列的长度 (队列的默认长度是<code>1000</code>) 每当 <code>consumer.receive()</code> 被调用一次,就从缓冲区(buffer)获取一条消息。</p>
@@ -225,14 +235,38 @@ If batching is enabled, all messages in one batch are redelivered to the consume
 <p>It happens sometimes that consumers fail to process messages successfully. In this case, you can use <a href="#negative-acknowledgement">negative acknowledgement</a> to redeliver the messages after consumption failures. For the Shared subscription type, the messages are redelivered to other consumers; for other subscription types, the messages are redelivered to the same consumer.</p>
 <p>But this is not flexible enough. A better way is to use the <strong>redelivery backoff mechanism</strong>. You can redeliver messages with different delays by setting the number of times the messages are retried.</p>
 <p>Use the following API to enable <code>Negative Redelivery Backoff</code>.</p>
-<pre><code class="hljs css language-java">consumer.negativeAckRedeliveryBackoff(NegativeAckRedeliveryExponentialBackoff.builder()
-        .minNackTimeMs(<span class="hljs-number">1000</span>)
-        .maxNackTimeMs(<span class="hljs-number">60</span> * <span class="hljs-number">1000</span>)
+<pre><code class="hljs css language-java">consumer.negativeAckRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+        .minDelayMs(<span class="hljs-number">1000</span>)
+        .maxDelayMs(<span class="hljs-number">60</span> * <span class="hljs-number">1000</span>)
         .build())
 </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>The acknowledgement timeout mechanism allows you to set a time range during which the client tracks the unacknowledged messages. After this acknowledgement timeout (<code>ackTimeout</code>) period, the client sends <code>redeliver unacknowledged messages</code> request to the broker, thus the broker resends the unacknowledged messages to the consumer.</p>
 <p>You can configure the acknowledgement timeout mechanism to redeliver the message if it is not acknowledged after <code>ackTimeout</code> or to execute a timer task to check the acknowledgement timeout messages during every <code>ackTimeoutTickTime</code> period.</p>
+<p>You can also use the redelivery backoff mechanism, redeliver messages with different delays by setting the number of times the messages is retried.</p>
+<p>If you want to use redelivery backoff, you can use the following API.</p>
+<pre><code class="hljs css language-java">consumer.ackTimeout(<span class="hljs-number">10</span>, TimeUnit.SECOND)
+        .ackTimeoutRedeliveryBackoff(MultiplierRedeliveryBackoff.builder()
+        .minDelayMs(<span class="hljs-number">1000</span>)
+        .maxDelayMs(<span class="hljs-number">60000</span>)
+        .multiplier(<span class="hljs-number">2</span>).build())
+</code></pre>
+<p>The message redelivery behavior should be as follows.</p>
+<table>
+<thead>
+<tr><th style="text-align:left">Redelivery count</th><th style="text-align:left">Redelivery delay</th></tr>
+</thead>
+<tbody>
+<tr><td style="text-align:left">1</td><td style="text-align:left">10 + 1 seconds</td></tr>
+<tr><td style="text-align:left">2</td><td style="text-align:left">10 + 2 seconds</td></tr>
+<tr><td style="text-align:left">3</td><td style="text-align:left">10 + 4 seconds</td></tr>
+<tr><td style="text-align:left">4</td><td style="text-align:left">10 + 8 seconds</td></tr>
+<tr><td style="text-align:left">5</td><td style="text-align:left">10 + 16 seconds</td></tr>
+<tr><td style="text-align:left">6</td><td style="text-align:left">10 + 32 seconds</td></tr>
+<tr><td style="text-align:left">7</td><td style="text-align:left">10 + 60 seconds</td></tr>
+<tr><td style="text-align:left">8</td><td style="text-align:left">10 + 60 seconds</td></tr>
+</tbody>
+</table>
 <blockquote>
 <p><strong>Note</strong></p>
 <ul>
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 f116bbb..7a239ff 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
@@ -220,8 +220,8 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.9.1
 <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 \
-  --configuration-store zk1.us-west.example.com:2184 \
+  --metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
+  --configuration-metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
   --web-service-url http://pulsar.us-west.example.com:8080/ \
   --web-service-url-tls https://pulsar.us-west.example.com:8443/ \
   --broker-service-url pulsar://pulsar.us-west.example.com:6650/ \
@@ -268,14 +268,14 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.9.1
 <p>一旦部署了 Zookeeper,初始化了集群元数据,部署了 Bookeeper bookies 后,你就能开始部署 broker了。</p>
 <h3><a class="anchor" aria-hidden="true" id="broker-configuration"></a><a href="#broker-configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.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>你能够通过<a href="/docs/zh-CN/next/reference-configuration#broker"><code>conf/broker.conf</code></a>配置文件配置broker。</p>
-<p>The most important element of broker configuration is ensuring that each broker is aware of its local ZooKeeper quorum as well as the configuration store quorum. 必须确保<a href="/docs/zh-CN/next/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a>设置为本地 zookeeper 集群的地址,确保<a href="/docs/zh-CN/next/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a>设置为配置存储集群的地址(即使配置存储集群和本地的 Zookeeper 集群是同一个,也需要配置该选项)。</p>
+<p>The most important element of broker configuration is ensuring that each broker is aware of its local ZooKeeper quorum as well as the configuration store quorum. Make sure that you set the <a href="/docs/zh-CN/next/reference-configuration#broker"><code>metadataStoreUrl</code></a> parameter to reflect the local quorum and the <a href="/docs/zh-CN/next/reference-configuration#broker"><code>configurationMetadataStoreUrl</code></a> parameter to reflect the configuration store quorum (alth [...]
 <p>You also need to specify the name of the <a href="/docs/zh-CN/next/reference-terminology#cluster">cluster</a> to which the broker belongs using the <a href="/docs/zh-CN/next/reference-configuration#broker-clusterName"><code>clusterName</code></a> parameter. 此外,broker 和 web 服务的端口必须和初始化集群元数据时指定的端口是一样的(特别是当你使用了和默认值不同的端口的时候)。</p>
 <p>下面是一个示例配置:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-comment"># Local ZooKeeper servers</span>
-<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">metadataStoreUrl</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-comment">
 # Configuration store quorum connection string.</span>
-<span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2184,zk2.us-west.example.com:2184,zk3.us-west.example.com:2184</span>
+<span class="hljs-attr">configurationMetadataStoreUrl</span>=<span class="hljs-string">zk1.us-west.example.com:2184,zk2.us-west.example.com:2184,zk3.us-west.example.com:2184</span>
 
 <span class="hljs-attr">clusterName</span>=<span class="hljs-string">us-west</span>
 <span class="hljs-comment">
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 f116bbb..7a239ff 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
@@ -220,8 +220,8 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.9.1
 <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 \
-  --configuration-store zk1.us-west.example.com:2184 \
+  --metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
+  --configuration-metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
   --web-service-url http://pulsar.us-west.example.com:8080/ \
   --web-service-url-tls https://pulsar.us-west.example.com:8443/ \
   --broker-service-url pulsar://pulsar.us-west.example.com:6650/ \
@@ -268,14 +268,14 @@ $ <span class="hljs-built_in">cd</span> apache-pulsar-2.9.1
 <p>一旦部署了 Zookeeper,初始化了集群元数据,部署了 Bookeeper bookies 后,你就能开始部署 broker了。</p>
 <h3><a class="anchor" aria-hidden="true" id="broker-configuration"></a><a href="#broker-configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.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>你能够通过<a href="/docs/zh-CN/next/reference-configuration#broker"><code>conf/broker.conf</code></a>配置文件配置broker。</p>
-<p>The most important element of broker configuration is ensuring that each broker is aware of its local ZooKeeper quorum as well as the configuration store quorum. 必须确保<a href="/docs/zh-CN/next/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a>设置为本地 zookeeper 集群的地址,确保<a href="/docs/zh-CN/next/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a>设置为配置存储集群的地址(即使配置存储集群和本地的 Zookeeper 集群是同一个,也需要配置该选项)。</p>
+<p>The most important element of broker configuration is ensuring that each broker is aware of its local ZooKeeper quorum as well as the configuration store quorum. Make sure that you set the <a href="/docs/zh-CN/next/reference-configuration#broker"><code>metadataStoreUrl</code></a> parameter to reflect the local quorum and the <a href="/docs/zh-CN/next/reference-configuration#broker"><code>configurationMetadataStoreUrl</code></a> parameter to reflect the configuration store quorum (alth [...]
 <p>You also need to specify the name of the <a href="/docs/zh-CN/next/reference-terminology#cluster">cluster</a> to which the broker belongs using the <a href="/docs/zh-CN/next/reference-configuration#broker-clusterName"><code>clusterName</code></a> parameter. 此外,broker 和 web 服务的端口必须和初始化集群元数据时指定的端口是一样的(特别是当你使用了和默认值不同的端口的时候)。</p>
 <p>下面是一个示例配置:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-comment"># Local ZooKeeper servers</span>
-<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">metadataStoreUrl</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-comment">
 # Configuration store quorum connection string.</span>
-<span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2184,zk2.us-west.example.com:2184,zk3.us-west.example.com:2184</span>
+<span class="hljs-attr">configurationMetadataStoreUrl</span>=<span class="hljs-string">zk1.us-west.example.com:2184,zk2.us-west.example.com:2184,zk3.us-west.example.com:2184</span>
 
 <span class="hljs-attr">clusterName</span>=<span class="hljs-string">us-west</span>
 <span class="hljs-comment">
diff --git a/content/docs/zh-CN/next/deploy-bare-metal.html b/content/docs/zh-CN/next/deploy-bare-metal.html
index c416d24..d0de44f 100644
--- a/content/docs/zh-CN/next/deploy-bare-metal.html
+++ b/content/docs/zh-CN/next/deploy-bare-metal.html
@@ -274,8 +274,8 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <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 \
-  --configuration-store zk1.us-west.example.com:2181 \
+  --metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
+  --configuration-metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
   --web-service-url http://pulsar.us-west.example.com:8080 \
   --web-service-url-tls https://pulsar.us-west.example.com:8443 \
   --broker-service-url pulsar://pulsar.us-west.example.com:6650 \
@@ -336,9 +336,9 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <h2><a class="anchor" aria-hidden="true" id="部署-pulsar-broker"></a><a href="#部署-pulsar-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. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Broker 用来处理 Pulsar 消息,并且提供管理Pulsar的接口。 一个好的选择是运行 <strong>3 个 broker</strong>,每个 broker 已经运行了 Bookkeeper bookie。</p>
 <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>Broker 配置中有一些非常重要的参数,这些参数可以确保每个Broker 连接到已部署的 ZooKeeper 集群。 需要确认 <a href="/docs/zh-CN/next/reference-configuration#broker-zookeeperServers"> <code>zookeeperServers</code></a> 和 <a href="/docs/zh-CN/next/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> 配置项的值是正确的。 在当前情况下,由于只有一个集群,没有单独用来存储配置的 Zookeeper 集群,那么配置项<code>configurationStoreServers</code>和<code>zookeeperServers</code> 是一样的值。</p>
-<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>
+<p>Broker 配置中有一些非常重要的参数,这些参数可以确保每个Broker 连接到已部署的 ZooKeeper 集群。 Ensure that the <a href="/docs/zh-CN/next/reference-configuration#broker"><code>metadataStoreUrl</code></a> and <a href="/docs/zh-CN/next/reference-configuration#broker"><code>configurationMetadataStoreUrl</code></a> parameters are correct. In this case, since you only have 1 cluster and no configuration store setup, the <code>configurationMetadataStoreUrl</code> point to the same <code>metadataStoreUrl</code>.</p>
+<pre><code class="hljs css language-properties"><span class="hljs-attr">metadataStoreUrl</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">configurationMetadataStoreUrl</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>你必须配置集群的名字( <a href="#initialize-cluster-metadata">初始化集群元数据</a> 提供的集群名字必须和这个配置项匹配):</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
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 c416d24..d0de44f 100644
--- a/content/docs/zh-CN/next/deploy-bare-metal/index.html
+++ b/content/docs/zh-CN/next/deploy-bare-metal/index.html
@@ -274,8 +274,8 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <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 \
-  --configuration-store zk1.us-west.example.com:2181 \
+  --metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
+  --configuration-metadata-store zk:zk1.us-west.example.com:2181,zk2.us-west.example.com:2181/my-chroot-path \
   --web-service-url http://pulsar.us-west.example.com:8080 \
   --web-service-url-tls https://pulsar.us-west.example.com:8443 \
   --broker-service-url pulsar://pulsar.us-west.example.com:6650 \
@@ -336,9 +336,9 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <h2><a class="anchor" aria-hidden="true" id="部署-pulsar-broker"></a><a href="#部署-pulsar-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. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Broker 用来处理 Pulsar 消息,并且提供管理Pulsar的接口。 一个好的选择是运行 <strong>3 个 broker</strong>,每个 broker 已经运行了 Bookkeeper bookie。</p>
 <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>Broker 配置中有一些非常重要的参数,这些参数可以确保每个Broker 连接到已部署的 ZooKeeper 集群。 需要确认 <a href="/docs/zh-CN/next/reference-configuration#broker-zookeeperServers"> <code>zookeeperServers</code></a> 和 <a href="/docs/zh-CN/next/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> 配置项的值是正确的。 在当前情况下,由于只有一个集群,没有单独用来存储配置的 Zookeeper 集群,那么配置项<code>configurationStoreServers</code>和<code>zookeeperServers</code> 是一样的值。</p>
-<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>
+<p>Broker 配置中有一些非常重要的参数,这些参数可以确保每个Broker 连接到已部署的 ZooKeeper 集群。 Ensure that the <a href="/docs/zh-CN/next/reference-configuration#broker"><code>metadataStoreUrl</code></a> and <a href="/docs/zh-CN/next/reference-configuration#broker"><code>configurationMetadataStoreUrl</code></a> parameters are correct. In this case, since you only have 1 cluster and no configuration store setup, the <code>configurationMetadataStoreUrl</code> point to the same <code>metadataStoreUrl</code>.</p>
+<pre><code class="hljs css language-properties"><span class="hljs-attr">metadataStoreUrl</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">configurationMetadataStoreUrl</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>你必须配置集群的名字( <a href="#initialize-cluster-metadata">初始化集群元数据</a> 提供的集群名字必须和这个配置项匹配):</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
diff --git a/content/docs/zh-CN/next/develop-binary-protocol.html b/content/docs/zh-CN/next/develop-binary-protocol.html
index 678fd45..2c63846 100644
--- a/content/docs/zh-CN/next/develop-binary-protocol.html
+++ b/content/docs/zh-CN/next/develop-binary-protocol.html
@@ -231,7 +231,7 @@
 </code></pre>
 <p>参数: * <code>request_id</code> → <code>创建生产者</code> 时指定的请求ID; * <code>producer_name</code> → 生成的全局唯一的生产者名称或者客户端指定的名称(如果有的话)</p>
 <h5><a class="anchor" aria-hidden="true" id="发送命令"></a><a href="#发送命令" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
-<p>命令 <code>Send</code> 是给一个已经存在的生产者在上下文中发布新的消息的。 此命令用在消息帧中,此消息帧包含了该命令及消息的有效载荷。<a href="#payload-commands">payload commands</a>包含了完整的命令格式。</p>
+<p>命令 <code>Send</code> 是给一个已经存在的生产者在上下文中发布新的消息的。 If a producer has not yet been created for the connection, the broker will terminate the connection. This command is used in a frame that includes command as well as message payload, for which the complete format is specified in the <a href="#payload-commands">payload commands</a> section.</p>
 <pre><code class="hljs css language-protobuf"><span class="hljs-class"><span class="hljs-keyword">message</span> <span class="hljs-title">CommandSend</span> </span>{
   <span class="hljs-string">"producer_id"</span> : <span class="hljs-number">1</span>,
   <span class="hljs-string">"sequence_id"</span> : <span class="hljs-number">0</span>,
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 678fd45..2c63846 100644
--- a/content/docs/zh-CN/next/develop-binary-protocol/index.html
+++ b/content/docs/zh-CN/next/develop-binary-protocol/index.html
@@ -231,7 +231,7 @@
 </code></pre>
 <p>参数: * <code>request_id</code> → <code>创建生产者</code> 时指定的请求ID; * <code>producer_name</code> → 生成的全局唯一的生产者名称或者客户端指定的名称(如果有的话)</p>
 <h5><a class="anchor" aria-hidden="true" id="发送命令"></a><a href="#发送命令" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
-<p>命令 <code>Send</code> 是给一个已经存在的生产者在上下文中发布新的消息的。 此命令用在消息帧中,此消息帧包含了该命令及消息的有效载荷。<a href="#payload-commands">payload commands</a>包含了完整的命令格式。</p>
+<p>命令 <code>Send</code> 是给一个已经存在的生产者在上下文中发布新的消息的。 If a producer has not yet been created for the connection, the broker will terminate the connection. This command is used in a frame that includes command as well as message payload, for which the complete format is specified in the <a href="#payload-commands">payload commands</a> section.</p>
 <pre><code class="hljs css language-protobuf"><span class="hljs-class"><span class="hljs-keyword">message</span> <span class="hljs-title">CommandSend</span> </span>{
   <span class="hljs-string">"producer_id"</span> : <span class="hljs-number">1</span>,
   <span class="hljs-string">"sequence_id"</span> : <span class="hljs-number">0</span>,
diff --git a/content/docs/zh-CN/next/functions-runtime.html b/content/docs/zh-CN/next/functions-runtime.html
index 0610f18..0ff6475 100644
--- a/content/docs/zh-CN/next/functions-runtime.html
+++ b/content/docs/zh-CN/next/functions-runtime.html
@@ -299,7 +299,7 @@ If you use tokens that expire when deploying functions, these tokens will expire
 <p>例如,如果是使用 Token 认证,你必须在<code>function-worker.yml</code>文件内配置如下属性。</p>
 <pre><code class="hljs css language-Yaml"><span class="hljs-attr">clientAuthenticationPlugin:</span> <span class="hljs-string">org.apache.pulsar.client.impl.auth.AuthenticationToken</span>
 <span class="hljs-attr">clientAuthenticationParameters:</span> <span class="hljs-string">file:///etc/pulsar/token/admin-token.txt</span>
-<span class="hljs-attr">configurationStoreServers:</span> <span class="hljs-string">zookeeper-cluster:2181</span> <span class="hljs-comment"># auth requires a connection to zookeeper</span>
+<span class="hljs-attr">configurationMetadataStoreUrl:</span> <span class="hljs-string">zk:zookeeper-cluster:2181</span> <span class="hljs-comment"># auth requires a connection to zookeeper</span>
 <span class="hljs-attr">authenticationProviders:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">"org.apache.pulsar.broker.authentication.AuthenticationProviderToken"</span>
 <span class="hljs-attr">authorizationEnabled:</span> <span class="hljs-literal">true</span>
diff --git a/content/docs/zh-CN/next/functions-runtime/index.html b/content/docs/zh-CN/next/functions-runtime/index.html
index 0610f18..0ff6475 100644
--- a/content/docs/zh-CN/next/functions-runtime/index.html
+++ b/content/docs/zh-CN/next/functions-runtime/index.html
@@ -299,7 +299,7 @@ If you use tokens that expire when deploying functions, these tokens will expire
 <p>例如,如果是使用 Token 认证,你必须在<code>function-worker.yml</code>文件内配置如下属性。</p>
 <pre><code class="hljs css language-Yaml"><span class="hljs-attr">clientAuthenticationPlugin:</span> <span class="hljs-string">org.apache.pulsar.client.impl.auth.AuthenticationToken</span>
 <span class="hljs-attr">clientAuthenticationParameters:</span> <span class="hljs-string">file:///etc/pulsar/token/admin-token.txt</span>
-<span class="hljs-attr">configurationStoreServers:</span> <span class="hljs-string">zookeeper-cluster:2181</span> <span class="hljs-comment"># auth requires a connection to zookeeper</span>
+<span class="hljs-attr">configurationMetadataStoreUrl:</span> <span class="hljs-string">zk:zookeeper-cluster:2181</span> <span class="hljs-comment"># auth requires a connection to zookeeper</span>
 <span class="hljs-attr">authenticationProviders:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">"org.apache.pulsar.broker.authentication.AuthenticationProviderToken"</span>
 <span class="hljs-attr">authorizationEnabled:</span> <span class="hljs-literal">true</span>
diff --git a/content/docs/zh-CN/next/functions-worker.html b/content/docs/zh-CN/next/functions-worker.html
index 3ceb865..5ca5010 100644
--- a/content/docs/zh-CN/next/functions-worker.html
+++ b/content/docs/zh-CN/next/functions-worker.html
@@ -236,10 +236,10 @@ authenticationProviders: ['org.apache.pulsar.broker.authentication.Authenticatio
   # tokenPublicKey:     file:///path/to/public.key 
 </code></pre>
 <h5><a class="anchor" aria-hidden="true" id="启用授权提供程序"></a><a href="#启用授权提供程序" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
-<p>如果需要启用函数 Worker 授权机制,你必须配置<code>authorizationEnabled</code>,<code>authorizationProvider</code>和<code>configurationStoreServers</code>。 The authentication provider connects to <code>configurationStoreServers</code> to receive namespace policies.</p>
+<p>To enable authorization on Functions Worker, you need to configure <code>authorizationEnabled</code>, <code>authorizationProvider</code> and <code>configurationMetadataStoreUrl</code>. The authentication provider connects to <code>configurationMetadataStoreUrl</code> to receive namespace policies.</p>
 <pre><code class="hljs css language-yaml"><span class="hljs-attr">authorizationEnabled:</span> <span class="hljs-literal">true</span>
 <span class="hljs-attr">authorizationProvider:</span> <span class="hljs-string">org.apache.pulsar.broker.authorization.PulsarAuthorizationProvider</span>
-<span class="hljs-attr">configurationStoreServers:</span> <span class="hljs-string">&lt;configuration-store-servers&gt;</span>
+<span class="hljs-attr">configurationMetadataStoreUrl:</span> <span class="hljs-string">&lt;meta-type&gt;:&lt;configuration-metadata-store-url&gt;</span>
 </code></pre>
 <p>You should also configure a list of superuser roles. The superuser roles are able to access any admin API. The following is a configuration example.</p>
 <pre><code class="hljs css language-yaml"><span class="hljs-attr">superUserRoles:</span>
diff --git a/content/docs/zh-CN/next/functions-worker/index.html b/content/docs/zh-CN/next/functions-worker/index.html
index 3ceb865..5ca5010 100644
--- a/content/docs/zh-CN/next/functions-worker/index.html
+++ b/content/docs/zh-CN/next/functions-worker/index.html
@@ -236,10 +236,10 @@ authenticationProviders: ['org.apache.pulsar.broker.authentication.Authenticatio
   # tokenPublicKey:     file:///path/to/public.key 
 </code></pre>
 <h5><a class="anchor" aria-hidden="true" id="启用授权提供程序"></a><a href="#启用授权提供程序" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
-<p>如果需要启用函数 Worker 授权机制,你必须配置<code>authorizationEnabled</code>,<code>authorizationProvider</code>和<code>configurationStoreServers</code>。 The authentication provider connects to <code>configurationStoreServers</code> to receive namespace policies.</p>
+<p>To enable authorization on Functions Worker, you need to configure <code>authorizationEnabled</code>, <code>authorizationProvider</code> and <code>configurationMetadataStoreUrl</code>. The authentication provider connects to <code>configurationMetadataStoreUrl</code> to receive namespace policies.</p>
 <pre><code class="hljs css language-yaml"><span class="hljs-attr">authorizationEnabled:</span> <span class="hljs-literal">true</span>
 <span class="hljs-attr">authorizationProvider:</span> <span class="hljs-string">org.apache.pulsar.broker.authorization.PulsarAuthorizationProvider</span>
-<span class="hljs-attr">configurationStoreServers:</span> <span class="hljs-string">&lt;configuration-store-servers&gt;</span>
+<span class="hljs-attr">configurationMetadataStoreUrl:</span> <span class="hljs-string">&lt;meta-type&gt;:&lt;configuration-metadata-store-url&gt;</span>
 </code></pre>
 <p>You should also configure a list of superuser roles. The superuser roles are able to access any admin API. The following is a configuration example.</p>
 <pre><code class="hljs css language-yaml"><span class="hljs-attr">superUserRoles:</span>
diff --git a/content/docs/zh-CN/next/io-file-source.html b/content/docs/zh-CN/next/io-file-source.html
index b993f32..9bd875e 100644
--- a/content/docs/zh-CN/next/io-file-source.html
+++ b/content/docs/zh-CN/next/io-file-source.html
@@ -39,6 +39,7 @@
 <tr><td><code>ignoreHiddenFiles</code></td><td>Boolean</td><td>false</td><td>true</td><td>是否忽略隐藏文件。</td></tr>
 <tr><td><code>pollingInterval</code></td><td>Long</td><td>false</td><td>10000L</td><td>标出在执行目录列表前等待多长时间。</td></tr>
 <tr><td><code>numWorkers</code></td><td>Integer</td><td>false</td><td>1</td><td>处理文件的工作线程数量。<br /><br /> 这允许您同时处理更多的文件。 <br /><br />然而,设置这个值大于1,使得多个文件的数据混合在目标主题中。</td></tr>
+<tr><td><code>processedFileSuffix</code></td><td>String</td><td>false</td><td>NULL</td><td>If set, do not delete but only rename file that has been processed. <br /><br />  This config only work when 'keepFile' property is false.</td></tr>
 </tbody>
 </table>
 <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 [...]
@@ -58,7 +59,8 @@
       <span class="hljs-attr">"maximumSize"</span>: <span class="hljs-number">5000000</span>,
       <span class="hljs-attr">"ignoreHiddenFiles"</span>: <span class="hljs-literal">true</span>,
       <span class="hljs-attr">"pollingInterval"</span>: <span class="hljs-number">5000</span>,
-      <span class="hljs-attr">"numWorkers"</span>: <span class="hljs-number">1</span>
+      <span class="hljs-attr">"numWorkers"</span>: <span class="hljs-number">1</span>,
+      <span class="hljs-attr">"processedFileSuffix"</span>: <span class="hljs-string">".processed_done"</span>
    }
 }
 </code></pre></li>
@@ -76,6 +78,7 @@
     <span class="hljs-attr">ignoreHiddenFiles:</span> <span class="hljs-literal">true</span>
     <span class="hljs-attr">pollingInterval:</span> <span class="hljs-number">5000</span>
     <span class="hljs-attr">numWorkers:</span> <span class="hljs-number">1</span>
+    <span class="hljs-attr">processedFileSuffix:</span> <span class="hljs-string">".processed_done"</span>
 </code></pre></li>
 </ul>
 <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.25c [...]
diff --git a/content/docs/zh-CN/next/io-file-source/index.html b/content/docs/zh-CN/next/io-file-source/index.html
index b993f32..9bd875e 100644
--- a/content/docs/zh-CN/next/io-file-source/index.html
+++ b/content/docs/zh-CN/next/io-file-source/index.html
@@ -39,6 +39,7 @@
 <tr><td><code>ignoreHiddenFiles</code></td><td>Boolean</td><td>false</td><td>true</td><td>是否忽略隐藏文件。</td></tr>
 <tr><td><code>pollingInterval</code></td><td>Long</td><td>false</td><td>10000L</td><td>标出在执行目录列表前等待多长时间。</td></tr>
 <tr><td><code>numWorkers</code></td><td>Integer</td><td>false</td><td>1</td><td>处理文件的工作线程数量。<br /><br /> 这允许您同时处理更多的文件。 <br /><br />然而,设置这个值大于1,使得多个文件的数据混合在目标主题中。</td></tr>
+<tr><td><code>processedFileSuffix</code></td><td>String</td><td>false</td><td>NULL</td><td>If set, do not delete but only rename file that has been processed. <br /><br />  This config only work when 'keepFile' property is false.</td></tr>
 </tbody>
 </table>
 <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 [...]
@@ -58,7 +59,8 @@
       <span class="hljs-attr">"maximumSize"</span>: <span class="hljs-number">5000000</span>,
       <span class="hljs-attr">"ignoreHiddenFiles"</span>: <span class="hljs-literal">true</span>,
       <span class="hljs-attr">"pollingInterval"</span>: <span class="hljs-number">5000</span>,
-      <span class="hljs-attr">"numWorkers"</span>: <span class="hljs-number">1</span>
+      <span class="hljs-attr">"numWorkers"</span>: <span class="hljs-number">1</span>,
+      <span class="hljs-attr">"processedFileSuffix"</span>: <span class="hljs-string">".processed_done"</span>
    }
 }
 </code></pre></li>
@@ -76,6 +78,7 @@
     <span class="hljs-attr">ignoreHiddenFiles:</span> <span class="hljs-literal">true</span>
     <span class="hljs-attr">pollingInterval:</span> <span class="hljs-number">5000</span>
     <span class="hljs-attr">numWorkers:</span> <span class="hljs-number">1</span>
+    <span class="hljs-attr">processedFileSuffix:</span> <span class="hljs-string">".processed_done"</span>
 </code></pre></li>
 </ul>
 <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.25c [...]
diff --git a/content/docs/zh-CN/next/reference-cli-tools.html b/content/docs/zh-CN/next/reference-cli-tools.html
index 55753a1..61c2c0d 100644
--- a/content/docs/zh-CN/next/reference-cli-tools.html
+++ b/content/docs/zh-CN/next/reference-cli-tools.html
@@ -224,14 +224,14 @@
 <tr><th>标记</th><th>说明</th><th>默认值</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--configuration-store</code></td><td>配置存储连接字符串</td><td></td></tr>
-<tr><td><code>-zk</code> , <code>--zookeeper-servers</code></td><td>本地 ZooKeeper 连接字符串</td><td></td></tr>
+<tr><td><code>-cms</code>, <code>--configuration-metadata-store</code></td><td>Configuration meta store connection string</td><td></td></tr>
+<tr><td><code>-md</code> , <code>--metadata-store</code></td><td>Metadata Store service url</td><td></td></tr>
 </tbody>
 </table>
 <p>示例</p>
 <pre><code class="hljs css language-bash">$ PULSAR_PROXY_CONF=/path/to/proxy.conf pulsar proxy \
-  --zookeeper-servers zk-0,zk-1,zk2 \
-  --configuration-store zk-0,zk-1,zk-2
+  --metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181 \
+  --configuration-metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="standalone"></a><a href="#standalone" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
 <p>运行使用本地 bookie 和本地 ZooKeeper 的 broker 服务</p>
@@ -617,7 +617,7 @@
 <tr><td><code>-time</code>, <code>--test-duration</code></td><td>测试持续时间(单位:秒)。如果这个值小于或等于0,它就会一直发布消息。</td><td>0</td></tr>
 <tr><td><code>--threads</code></td><td>正在写入的线程数</td><td>1</td></tr>
 <tr><td><code>-w</code>, <code>--write-quorum</code></td><td>Ledger write quorum</td><td>1</td></tr>
-<tr><td><code>-zk</code>, <code>--zookeeperServers</code></td><td>ZooKeeper 连接字符串</td><td></td></tr>
+<tr><td><code>-md</code>, <code>--metadata-store</code></td><td>Metadata store service URL. For example: zk:my-zk:2181</td><td></td></tr>
 </tbody>
 </table>
 <h3><a class="anchor" aria-hidden="true" id="monitor-brokers"></a><a href="#monitor-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  [...]
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 55753a1..61c2c0d 100644
--- a/content/docs/zh-CN/next/reference-cli-tools/index.html
+++ b/content/docs/zh-CN/next/reference-cli-tools/index.html
@@ -224,14 +224,14 @@
 <tr><th>标记</th><th>说明</th><th>默认值</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--configuration-store</code></td><td>配置存储连接字符串</td><td></td></tr>
-<tr><td><code>-zk</code> , <code>--zookeeper-servers</code></td><td>本地 ZooKeeper 连接字符串</td><td></td></tr>
+<tr><td><code>-cms</code>, <code>--configuration-metadata-store</code></td><td>Configuration meta store connection string</td><td></td></tr>
+<tr><td><code>-md</code> , <code>--metadata-store</code></td><td>Metadata Store service url</td><td></td></tr>
 </tbody>
 </table>
 <p>示例</p>
 <pre><code class="hljs css language-bash">$ PULSAR_PROXY_CONF=/path/to/proxy.conf pulsar proxy \
-  --zookeeper-servers zk-0,zk-1,zk2 \
-  --configuration-store zk-0,zk-1,zk-2
+  --metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181 \
+  --configuration-metadata-store zk:my-zk-1:2181,my-zk-2:2181,my-zk-3:2181
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="standalone"></a><a href="#standalone" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
 <p>运行使用本地 bookie 和本地 ZooKeeper 的 broker 服务</p>
@@ -617,7 +617,7 @@
 <tr><td><code>-time</code>, <code>--test-duration</code></td><td>测试持续时间(单位:秒)。如果这个值小于或等于0,它就会一直发布消息。</td><td>0</td></tr>
 <tr><td><code>--threads</code></td><td>正在写入的线程数</td><td>1</td></tr>
 <tr><td><code>-w</code>, <code>--write-quorum</code></td><td>Ledger write quorum</td><td>1</td></tr>
-<tr><td><code>-zk</code>, <code>--zookeeperServers</code></td><td>ZooKeeper 连接字符串</td><td></td></tr>
+<tr><td><code>-md</code>, <code>--metadata-store</code></td><td>Metadata store service URL. For example: zk:my-zk:2181</td><td></td></tr>
 </tbody>
 </table>
 <h3><a class="anchor" aria-hidden="true" id="monitor-brokers"></a><a href="#monitor-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  [...]
diff --git a/content/docs/zh-CN/next/reference-configuration.html b/content/docs/zh-CN/next/reference-configuration.html
index 0c5594b..36936ac 100644
--- a/content/docs/zh-CN/next/reference-configuration.html
+++ b/content/docs/zh-CN/next/reference-configuration.html
@@ -210,7 +210,7 @@
 <p>If there are multiple listeners, separate them with commas.</p>
 <p><strong>Note</strong>: do not use this configuration with <code>advertisedAddress</code> and <code>brokerServicePort</code>. If the value of this configuration is empty, the broker uses <code>advertisedAddress</code> and <code>brokerServicePort</code>|/| |internalListenerName|Specify the internal listener name for the broker.</p>
 <p><strong>Note</strong>: the listener name must be contained in <code>advertisedListeners</code>.</p>
-<p>If the value of this configuration is empty, the broker uses the first listener as the internal listener.|/| |authenticateOriginalAuthData| If this flag is set to <code>true</code>, the broker authenticates the original Auth data; else it just accepts the originalPrincipal and authorizes it (if required). |false| |enablePersistentTopics| Whether persistent topics are enabled on the broker |true| |enableNonPersistentTopics| Whether non-persistent topics are enabled on the broker |true| [...]
+<p>If the value of this configuration is empty, the broker uses the first listener as the internal listener.|/| |authenticateOriginalAuthData| If this flag is set to <code>true</code>, the broker authenticates the original Auth data; else it just accepts the originalPrincipal and authorizes it (if required). |false| |enablePersistentTopics| Whether persistent topics are enabled on the broker |true| |enableNonPersistentTopics| Whether non-persistent topics are enabled on the broker |true| [...]
 <ul>
 <li><p>'producer_request_hold' Policy which holds producer's send request until the resource becomes available (or holding times out)</p></li>
 <li><p>'producer_exception' Policy which throws <code>javax.jms.ResourceAllocationException</code> to the producer</p></li>
@@ -219,32 +219,44 @@
 <li><p><code>delete_when_no_subscriptions</code>: 删除没有订阅或活动生产者的主题。</p>
 <ul>
... 22586 lines suppressed ...