You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by mm...@apache.org on 2018/12/08 08:56:30 UTC

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

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

mmerli pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/pulsar.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new a893a01  Updated site at revision 32d6334
a893a01 is described below

commit a893a015da26918d0309c58bbf2cc7299652f01c
Author: jenkins <bu...@apache.org>
AuthorDate: Sat Dec 8 08:56:22 2018 +0000

    Updated site at revision 32d6334
---
 content/api/admin/index-all.html                   | 18 +++++++-----
 ....SinkInstanceStatus.SinkInstanceStatusData.html | 31 ++++++++++++++------
 ...rceInstanceStatus.SourceInstanceStatusData.html | 31 ++++++++++++++------
 .../fr/2.1.0-incubating/client-libraries-java.html | 26 ++++++++---------
 .../client-libraries-java/index.html               | 26 ++++++++---------
 content/docs/fr/2.1.0-incubating/deploy-aws.html   |  6 ++--
 .../docs/fr/2.1.0-incubating/deploy-aws/index.html |  6 ++--
 .../fr/2.1.0-incubating/deploy-bare-metal.html     | 22 +++++++-------
 .../2.1.0-incubating/deploy-bare-metal/index.html  | 22 +++++++-------
 .../fr/2.1.0-incubating/functions-quickstart.html  |  6 ++--
 .../functions-quickstart/index.html                |  6 ++--
 .../fr/2.1.1-incubating/client-libraries-java.html | 26 ++++++++---------
 .../client-libraries-java/index.html               | 26 ++++++++---------
 content/docs/fr/2.1.1-incubating/deploy-aws.html   |  6 ++--
 .../docs/fr/2.1.1-incubating/deploy-aws/index.html |  6 ++--
 .../fr/2.1.1-incubating/deploy-bare-metal.html     | 22 +++++++-------
 .../2.1.1-incubating/deploy-bare-metal/index.html  | 22 +++++++-------
 .../fr/2.1.1-incubating/functions-quickstart.html  |  6 ++--
 .../functions-quickstart/index.html                |  6 ++--
 content/docs/fr/client-libraries-java.html         | 26 ++++++++---------
 content/docs/fr/client-libraries-java/index.html   | 26 ++++++++---------
 content/docs/fr/deploy-aws.html                    |  6 ++--
 content/docs/fr/deploy-aws/index.html              |  6 ++--
 content/docs/fr/deploy-bare-metal.html             | 22 +++++++-------
 content/docs/fr/deploy-bare-metal/index.html       | 22 +++++++-------
 content/docs/fr/functions-quickstart.html          |  6 ++--
 content/docs/fr/functions-quickstart/index.html    |  6 ++--
 content/docs/fr/next/client-libraries-java.html    | 26 ++++++++---------
 .../docs/fr/next/client-libraries-java/index.html  | 26 ++++++++---------
 content/docs/fr/next/deploy-aws.html               |  6 ++--
 content/docs/fr/next/deploy-aws/index.html         |  6 ++--
 content/docs/fr/next/deploy-bare-metal.html        | 22 +++++++-------
 content/docs/fr/next/deploy-bare-metal/index.html  | 22 +++++++-------
 content/docs/fr/next/functions-quickstart.html     |  6 ++--
 .../docs/fr/next/functions-quickstart/index.html   |  6 ++--
 content/docs/fr/next/security-token-admin.html     |  2 +-
 .../docs/fr/next/security-token-admin/index.html   |  2 +-
 content/docs/fr/next/security-token-client.html    |  4 +--
 .../docs/fr/next/security-token-client/index.html  |  4 +--
 .../ja/2.1.0-incubating/client-libraries-java.html | 26 ++++++++---------
 .../client-libraries-java/index.html               | 26 ++++++++---------
 content/docs/ja/2.1.0-incubating/deploy-aws.html   |  6 ++--
 .../docs/ja/2.1.0-incubating/deploy-aws/index.html |  6 ++--
 .../ja/2.1.0-incubating/deploy-bare-metal.html     | 22 +++++++-------
 .../2.1.0-incubating/deploy-bare-metal/index.html  | 22 +++++++-------
 .../ja/2.1.0-incubating/functions-quickstart.html  |  6 ++--
 .../functions-quickstart/index.html                |  6 ++--
 .../ja/2.1.1-incubating/client-libraries-java.html | 26 ++++++++---------
 .../client-libraries-java/index.html               | 26 ++++++++---------
 content/docs/ja/2.1.1-incubating/deploy-aws.html   |  6 ++--
 .../docs/ja/2.1.1-incubating/deploy-aws/index.html |  6 ++--
 .../ja/2.1.1-incubating/deploy-bare-metal.html     | 22 +++++++-------
 .../2.1.1-incubating/deploy-bare-metal/index.html  | 22 +++++++-------
 .../ja/2.1.1-incubating/functions-quickstart.html  |  6 ++--
 .../functions-quickstart/index.html                |  6 ++--
 content/docs/ja/client-libraries-java.html         | 26 ++++++++---------
 content/docs/ja/client-libraries-java/index.html   | 26 ++++++++---------
 content/docs/ja/deploy-aws.html                    |  6 ++--
 content/docs/ja/deploy-aws/index.html              |  6 ++--
 content/docs/ja/deploy-bare-metal.html             | 22 +++++++-------
 content/docs/ja/deploy-bare-metal/index.html       | 22 +++++++-------
 content/docs/ja/functions-quickstart.html          |  6 ++--
 content/docs/ja/functions-quickstart/index.html    |  6 ++--
 content/docs/ja/next/client-libraries-java.html    | 26 ++++++++---------
 .../docs/ja/next/client-libraries-java/index.html  | 26 ++++++++---------
 content/docs/ja/next/deploy-aws.html               |  6 ++--
 content/docs/ja/next/deploy-aws/index.html         |  6 ++--
 content/docs/ja/next/deploy-bare-metal.html        | 22 +++++++-------
 content/docs/ja/next/deploy-bare-metal/index.html  | 22 +++++++-------
 content/docs/ja/next/functions-quickstart.html     |  6 ++--
 .../docs/ja/next/functions-quickstart/index.html   |  6 ++--
 content/docs/ja/next/security-token-admin.html     |  2 +-
 .../docs/ja/next/security-token-admin/index.html   |  2 +-
 content/docs/ja/next/security-token-client.html    |  4 +--
 .../docs/ja/next/security-token-client/index.html  |  4 +--
 .../docs/latest/adaptors/PulsarSpark/index.html    |  8 ++---
 .../docs/latest/adaptors/PulsarStorm/index.html    |  6 ++--
 content/docs/latest/admin-api/overview/index.html  | 10 +++----
 content/docs/latest/clients/Cpp/index.html         |  8 ++---
 content/docs/latest/clients/Java/index.html        | 14 ++++-----
 content/docs/latest/clients/Python/index.html      | 10 +++----
 content/docs/latest/clients/WebSocket/index.html   |  8 ++---
 content/docs/latest/clients/go/index.html          |  6 ++--
 .../docs/latest/cookbooks/Encryption/index.html    |  6 ++--
 .../latest/cookbooks/PartitionedTopics/index.html  | 14 ++++-----
 .../latest/cookbooks/RetentionExpiry/index.html    | 14 ++++-----
 .../docs/latest/cookbooks/compaction/index.html    |  6 ++--
 .../cookbooks/message-deduplication/index.html     | 10 +++----
 .../docs/latest/cookbooks/message-queue/index.html | 14 ++++-----
 .../latest/cookbooks/tiered-storage/index.html     |  4 +--
 .../docs/latest/deployment/Kubernetes/index.html   |  4 +--
 .../docs/latest/deployment/aws-cluster/index.html  |  4 +--
 content/docs/latest/deployment/cluster/index.html  |  4 +--
 content/docs/latest/deployment/instance/index.html |  4 +--
 .../ConceptsAndArchitecture/index.html             |  4 +--
 .../latest/getting-started/LocalCluster/index.html |  4 +--
 .../latest/getting-started/Pulsar-2.0/index.html   |  2 +-
 .../docs/latest/getting-started/docker/index.html  |  4 +--
 .../docs/latest/project/BinaryProtocol/index.html  |  4 +--
 content/docs/latest/project/CompileCpp/index.html  |  8 ++---
 .../docs/latest/project/SimulationTools/index.html |  2 +-
 .../docs/latest/project/schema-storage/index.html  |  4 +--
 content/docs/latest/reference/CliTools/index.html  | 18 ++++++------
 .../docs/latest/security/authorization/index.html  | 10 +++----
 content/docs/latest/security/encryption/index.html |  6 ++--
 .../zh-CN/2.1.0-incubating/admin-api-overview.html |  2 +-
 .../2.1.0-incubating/admin-api-overview/index.html |  2 +-
 .../2.1.0-incubating/client-libraries-java.html    | 24 +++++++--------
 .../client-libraries-java/index.html               | 24 +++++++--------
 .../zh-CN/2.1.0-incubating/concepts-messaging.html | 34 +++++++++++-----------
 .../2.1.0-incubating/concepts-messaging/index.html | 34 +++++++++++-----------
 .../docs/zh-CN/2.1.0-incubating/deploy-aws.html    |  6 ++--
 .../zh-CN/2.1.0-incubating/deploy-aws/index.html   |  6 ++--
 .../zh-CN/2.1.0-incubating/deploy-bare-metal.html  | 22 +++++++-------
 .../2.1.0-incubating/deploy-bare-metal/index.html  | 22 +++++++-------
 .../2.1.0-incubating/functions-quickstart.html     |  6 ++--
 .../functions-quickstart/index.html                |  6 ++--
 .../zh-CN/2.1.1-incubating/admin-api-overview.html |  2 +-
 .../2.1.1-incubating/admin-api-overview/index.html |  2 +-
 .../2.1.1-incubating/client-libraries-java.html    | 24 +++++++--------
 .../client-libraries-java/index.html               | 24 +++++++--------
 .../zh-CN/2.1.1-incubating/concepts-messaging.html | 34 +++++++++++-----------
 .../2.1.1-incubating/concepts-messaging/index.html | 34 +++++++++++-----------
 .../docs/zh-CN/2.1.1-incubating/deploy-aws.html    |  6 ++--
 .../zh-CN/2.1.1-incubating/deploy-aws/index.html   |  6 ++--
 .../zh-CN/2.1.1-incubating/deploy-bare-metal.html  | 22 +++++++-------
 .../2.1.1-incubating/deploy-bare-metal/index.html  | 22 +++++++-------
 .../2.1.1-incubating/functions-quickstart.html     |  6 ++--
 .../functions-quickstart/index.html                |  6 ++--
 content/docs/zh-CN/admin-api-overview.html         |  2 +-
 content/docs/zh-CN/admin-api-overview/index.html   |  2 +-
 content/docs/zh-CN/client-libraries-java.html      | 24 +++++++--------
 .../docs/zh-CN/client-libraries-java/index.html    | 24 +++++++--------
 content/docs/zh-CN/concepts-messaging.html         | 34 +++++++++++-----------
 content/docs/zh-CN/concepts-messaging/index.html   | 34 +++++++++++-----------
 content/docs/zh-CN/deploy-aws.html                 |  6 ++--
 content/docs/zh-CN/deploy-aws/index.html           |  6 ++--
 content/docs/zh-CN/deploy-bare-metal.html          | 22 +++++++-------
 content/docs/zh-CN/deploy-bare-metal/index.html    | 22 +++++++-------
 content/docs/zh-CN/functions-quickstart.html       |  6 ++--
 content/docs/zh-CN/functions-quickstart/index.html |  6 ++--
 content/docs/zh-CN/next/admin-api-overview.html    |  2 +-
 .../docs/zh-CN/next/admin-api-overview/index.html  |  2 +-
 content/docs/zh-CN/next/client-libraries-java.html | 24 +++++++--------
 .../zh-CN/next/client-libraries-java/index.html    | 24 +++++++--------
 content/docs/zh-CN/next/concepts-messaging.html    | 34 +++++++++++-----------
 .../docs/zh-CN/next/concepts-messaging/index.html  | 34 +++++++++++-----------
 content/docs/zh-CN/next/deploy-aws.html            |  6 ++--
 content/docs/zh-CN/next/deploy-aws/index.html      |  6 ++--
 content/docs/zh-CN/next/deploy-bare-metal.html     | 22 +++++++-------
 .../docs/zh-CN/next/deploy-bare-metal/index.html   | 22 +++++++-------
 content/docs/zh-CN/next/functions-quickstart.html  |  6 ++--
 .../zh-CN/next/functions-quickstart/index.html     |  6 ++--
 content/docs/zh-CN/next/security-token-admin.html  |  2 +-
 .../zh-CN/next/security-token-admin/index.html     |  2 +-
 content/docs/zh-CN/next/security-token-client.html |  4 +--
 .../zh-CN/next/security-token-client/index.html    |  4 +--
 content/ja/adaptors/PulsarSpark/index.html         |  8 ++---
 content/ja/adaptors/PulsarStorm/index.html         |  6 ++--
 content/ja/admin/AdminInterface/index.html         | 12 ++++----
 content/ja/admin/Authz/index.html                  | 12 ++++----
 content/ja/admin/ClustersBrokers/index.html        |  6 ++--
 content/ja/admin/PropertiesNamespaces/index.html   |  6 ++--
 content/ja/advanced/PartitionedTopics/index.html   | 12 ++++----
 content/ja/advanced/RetentionExpiry/index.html     | 12 ++++----
 content/ja/clients/Cpp/index.html                  |  6 ++--
 content/ja/clients/Java/index.html                 |  8 ++---
 content/ja/clients/Python/index.html               |  8 ++---
 content/ja/clients/WebSocket/index.html            |  8 ++---
 content/ja/deployment/InstanceSetup/index.html     |  6 ++--
 content/ja/deployment/Kubernetes/index.html        |  4 +--
 .../ConceptsAndArchitecture/index.html             |  2 +-
 content/ja/getting-started/LocalCluster/index.html |  4 +--
 content/ja/project/BinaryProtocol/index.html       |  4 +--
 content/ja/project/SimulationTools/index.html      |  2 +-
 content/ja/reference/CliTools/index.html           | 18 ++++++------
 content/swagger/swagger.json                       | 26 ++++++++---------
 177 files changed, 1124 insertions(+), 1094 deletions(-)

diff --git a/content/api/admin/index-all.html b/content/api/admin/index-all.html
index 834c4b6..eab8a90 100644
--- a/content/api/admin/index-all.html
+++ b/content/api/admin/index-all.html
@@ -1470,16 +1470,16 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/pulsar/common/policies/data/FunctionStatus.FunctionInstanceStatus.FunctionInstanceStatusData.html#lastInvocationTime">lastInvocationTime</a></span> - Variable in class org.apache.pulsar.common.policies.data.<a href="org/apache/pulsar/common/policies/data/FunctionStatus.FunctionInstanceStatus.FunctionInstanceStatusData.html" title="class in org.apache.pulsar.common.policies.data">FunctionStatus.FunctionInstanceStatus.FunctionInstanceSta [...]
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/pulsar/common/policies/data/SinkStatus.SinkInstanceStatus.SinkInstanceStatusData.html#lastInvocationTime">lastInvocationTime</a></span> - Variable in class org.apache.pulsar.common.policies.data.<a href="org/apache/pulsar/common/policies/data/SinkStatus.SinkInstanceStatus.SinkInstanceStatusData.html" title="class in org.apache.pulsar.common.policies.data">SinkStatus.SinkInstanceStatus.SinkInstanceStatusData</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/pulsar/common/policies/data/SourceStatus.SourceInstanceStatus.SourceInstanceStatusData.html#lastInvocationTime">lastInvocationTime</a></span> - Variable in class org.apache.pulsar.common.policies.data.<a href="org/apache/pulsar/common/policies/data/SourceStatus.SourceInstanceStatus.SourceInstanceStatusData.html" title="class in org.apache.pulsar.common.policies.data">SourceStatus.SourceInstanceStatus.SourceInstanceStatusData</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/pulsar/common/policies/data/PersistentTopicInternalStats.html#lastLedgerCreatedTimestamp">lastLedgerCreatedTimestamp</a></span> - Variable in class org.apache.pulsar.common.policies.data.<a href="org/apache/pulsar/common/policies/data/PersistentTopicInternalStats.html" title="class in org.apache.pulsar.common.policies.data">PersistentTopicInternalStats</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/pulsar/common/policies/data/PersistentTopicInternalStats.html#lastLedgerCreationFailureTimestamp">lastLedgerCreationFailureTimestamp</a></span> - Variable in class org.apache.pulsar.common.policies.data.<a href="org/apache/pulsar/common/policies/data/PersistentTopicInternalStats.html" title="class in org.apache.pulsar.common.policies.data">PersistentTopicInternalStats</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/pulsar/common/policies/data/PersistentTopicInternalStats.CursorStats.html#lastLedgerSwitchTimestamp">lastLedgerSwitchTimestamp</a></span> - Variable in class org.apache.pulsar.common.policies.data.<a href="org/apache/pulsar/common/policies/data/PersistentTopicInternalStats.CursorStats.html" title="class in org.apache.pulsar.common.policies.data">PersistentTopicInternalStats.CursorStats</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/pulsar/common/policies/data/SinkStatus.SinkInstanceStatus.SinkInstanceStatusData.html#lastReceivedTime">lastReceivedTime</a></span> - Variable in class org.apache.pulsar.common.policies.data.<a href="org/apache/pulsar/common/policies/data/SinkStatus.SinkInstanceStatus.SinkInstanceStatusData.html" title="class in org.apache.pulsar.common.policies.data">SinkStatus.SinkInstanceStatus.SinkInstanceStatusData</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/pulsar/common/policies/data/SourceStatus.SourceInstanceStatus.SourceInstanceStatusData.html#lastReceivedTime">lastReceivedTime</a></span> - Variable in class org.apache.pulsar.common.policies.data.<a href="org/apache/pulsar/common/policies/data/SourceStatus.SourceInstanceStatus.SourceInstanceStatusData.html" title="class in org.apache.pulsar.common.policies.data">SourceStatus.SourceInstanceStatus.SourceInstanceStatusData</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/pulsar/common/policies/data/Policies.html#latency_stats_sample_rate">latency_stats_sample_rate</a></span> - Variable in class org.apache.pulsar.common.policies.data.<a href="org/apache/pulsar/common/policies/data/Policies.html" title="class in org.apache.pulsar.common.policies.data">Policies</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/pulsar/common/policies/data/FunctionStatus.FunctionInstanceStatus.FunctionInstanceStatusData.html#latestSystemExceptions">latestSystemExceptions</a></span> - Variable in class org.apache.pulsar.common.policies.data.<a href="org/apache/pulsar/common/policies/data/FunctionStatus.FunctionInstanceStatus.FunctionInstanceStatusData.html" title="class in org.apache.pulsar.common.policies.data">FunctionStatus.FunctionInstanceStatus.FunctionIns [...]
@@ -1753,11 +1753,11 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/pulsar/common/policies/data/SourceStatus.html#numInstances">numInstances</a></span> - Variable in class org.apache.pulsar.common.policies.data.<a href="org/apache/pulsar/common/policies/data/SourceStatus.html" title="class in org.apache.pulsar.common.policies.data">SourceStatus</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/pulsar/common/policies/data/FunctionStatus.FunctionInstanceStatus.FunctionInstanceStatusData.html#numReceived">numReceived</a></span> - Variable in class org.apache.pulsar.common.policies.data.<a href="org/apache/pulsar/common/policies/data/FunctionStatus.FunctionInstanceStatus.FunctionInstanceStatusData.html" title="class in org.apache.pulsar.common.policies.data">FunctionStatus.FunctionInstanceStatus.FunctionInstanceStatusData</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/pulsar/common/policies/data/SinkStatus.SinkInstanceStatus.SinkInstanceStatusData.html#numReadFromPulsar">numReadFromPulsar</a></span> - Variable in class org.apache.pulsar.common.policies.data.<a href="org/apache/pulsar/common/policies/data/SinkStatus.SinkInstanceStatus.SinkInstanceStatusData.html" title="class in org.apache.pulsar.common.policies.data">SinkStatus.SinkInstanceStatus.SinkInstanceStatusData</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/pulsar/common/policies/data/SinkStatus.SinkInstanceStatus.SinkInstanceStatusData.html#numReceived">numReceived</a></span> - Variable in class org.apache.pulsar.common.policies.data.<a href="org/apache/pulsar/common/policies/data/SinkStatus.SinkInstanceStatus.SinkInstanceStatusData.html" title="class in org.apache.pulsar.common.policies.data">SinkStatus.SinkInstanceStatus.SinkInstanceStatusData</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/pulsar/common/policies/data/FunctionStatus.FunctionInstanceStatus.FunctionInstanceStatusData.html#numReceived">numReceived</a></span> - Variable in class org.apache.pulsar.common.policies.data.<a href="org/apache/pulsar/common/policies/data/FunctionStatus.FunctionInstanceStatus.FunctionInstanceStatusData.html" title="class in org.apache.pulsar.common.policies.data">FunctionStatus.FunctionInstanceStatus.FunctionInstanceStatusData</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/pulsar/common/policies/data/SourceStatus.SourceInstanceStatus.SourceInstanceStatusData.html#numReceived">numReceived</a></span> - Variable in class org.apache.pulsar.common.policies.data.<a href="org/apache/pulsar/common/policies/data/SourceStatus.SourceInstanceStatus.SourceInstanceStatusData.html" title="class in org.apache.pulsar.common.policies.data">SourceStatus.SourceInstanceStatus.SourceInstanceStatusData</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/pulsar/common/policies/data/SourceStatus.SourceInstanceStatus.SourceInstanceStatusData.html#numReceivedFromSource">numReceivedFromSource</a></span> - Variable in class org.apache.pulsar.common.policies.data.<a href="org/apache/pulsar/common/policies/data/SourceStatus.SourceInstanceStatus.SourceInstanceStatusData.html" title="class in org.apache.pulsar.common.policies.data">SourceStatus.SourceInstanceStatus.SourceInstanceStatusData</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/pulsar/common/policies/data/FunctionStatus.FunctionInstanceStatus.FunctionInstanceStatusData.html#numRestarts">numRestarts</a></span> - Variable in class org.apache.pulsar.common.policies.data.<a href="org/apache/pulsar/common/policies/data/FunctionStatus.FunctionInstanceStatus.FunctionInstanceStatusData.html" title="class in org.apache.pulsar.common.policies.data">FunctionStatus.FunctionInstanceStatus.FunctionInstanceStatusData</a></dt>
 <dd>&nbsp;</dd>
@@ -1781,6 +1781,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/pulsar/common/policies/data/FunctionStatus.FunctionInstanceStatus.FunctionInstanceStatusData.html#numUserExceptions">numUserExceptions</a></span> - Variable in class org.apache.pulsar.common.policies.data.<a href="org/apache/pulsar/common/policies/data/FunctionStatus.FunctionInstanceStatus.FunctionInstanceStatusData.html" title="class in org.apache.pulsar.common.policies.data">FunctionStatus.FunctionInstanceStatus.FunctionInstanceStatu [...]
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/pulsar/common/policies/data/SourceStatus.SourceInstanceStatus.SourceInstanceStatusData.html#numWritten">numWritten</a></span> - Variable in class org.apache.pulsar.common.policies.data.<a href="org/apache/pulsar/common/policies/data/SourceStatus.SourceInstanceStatus.SourceInstanceStatusData.html" title="class in org.apache.pulsar.common.policies.data">SourceStatus.SourceInstanceStatus.SourceInstanceStatusData</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/pulsar/common/policies/data/SinkStatus.SinkInstanceStatus.SinkInstanceStatusData.html#numWrittenToSink">numWrittenToSink</a></span> - Variable in class org.apache.pulsar.common.policies.data.<a href="org/apache/pulsar/common/policies/data/SinkStatus.SinkInstanceStatus.SinkInstanceStatusData.html" title="class in org.apache.pulsar.common.policies.data">SinkStatus.SinkInstanceStatus.SinkInstanceStatusData</a></dt>
+<dd>&nbsp;</dd>
 </dl>
 <a name="I:O">
 <!--   -->
diff --git a/content/api/admin/org/apache/pulsar/common/policies/data/SinkStatus.SinkInstanceStatus.SinkInstanceStatusData.html b/content/api/admin/org/apache/pulsar/common/policies/data/SinkStatus.SinkInstanceStatus.SinkInstanceStatusData.html
index 992f903..1e2d3a5 100644
--- a/content/api/admin/org/apache/pulsar/common/policies/data/SinkStatus.SinkInstanceStatus.SinkInstanceStatusData.html
+++ b/content/api/admin/org/apache/pulsar/common/policies/data/SinkStatus.SinkInstanceStatus.SinkInstanceStatusData.html
@@ -131,7 +131,7 @@ extends Object</pre>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/pulsar/common/policies/data/SinkStatus.SinkInstanceStatus.SinkInstanceStatusData.html#lastInvocationTime">lastInvocationTime</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/pulsar/common/policies/data/SinkStatus.SinkInstanceStatus.SinkInstanceStatusData.html#lastReceivedTime">lastReceivedTime</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>List&lt;<a href="../../../../../../org/apache/pulsar/common/policies/data/ExceptionInformation.html" title="class in org.apache.pulsar.common.policies.data">ExceptionInformation</a>&gt;</code></td>
@@ -139,7 +139,7 @@ extends Object</pre>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/pulsar/common/policies/data/SinkStatus.SinkInstanceStatus.SinkInstanceStatusData.html#numReceived">numReceived</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/pulsar/common/policies/data/SinkStatus.SinkInstanceStatus.SinkInstanceStatusData.html#numReadFromPulsar">numReadFromPulsar</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>long</code></td>
@@ -150,10 +150,14 @@ extends Object</pre>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/pulsar/common/policies/data/SinkStatus.SinkInstanceStatus.SinkInstanceStatusData.html#numSystemExceptions">numSystemExceptions</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/pulsar/common/policies/data/SinkStatus.SinkInstanceStatus.SinkInstanceStatusData.html#numWrittenToSink">numWrittenToSink</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/pulsar/common/policies/data/SinkStatus.SinkInstanceStatus.SinkInstanceStatusData.html#running">running</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>String</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/pulsar/common/policies/data/SinkStatus.SinkInstanceStatus.SinkInstanceStatusData.html#workerId">workerId</a></span></code>&nbsp;</td>
 </tr>
@@ -231,13 +235,13 @@ extends Object</pre>
 <pre>public&nbsp;long numRestarts</pre>
 </li>
 </ul>
-<a name="numReceived">
+<a name="numReadFromPulsar">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>numReceived</h4>
-<pre>public&nbsp;long numReceived</pre>
+<h4>numReadFromPulsar</h4>
+<pre>public&nbsp;long numReadFromPulsar</pre>
 </li>
 </ul>
 <a name="numSystemExceptions">
@@ -258,13 +262,22 @@ extends Object</pre>
 <pre>public&nbsp;List&lt;<a href="../../../../../../org/apache/pulsar/common/policies/data/ExceptionInformation.html" title="class in org.apache.pulsar.common.policies.data">ExceptionInformation</a>&gt; latestSystemExceptions</pre>
 </li>
 </ul>
-<a name="lastInvocationTime">
+<a name="numWrittenToSink">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>numWrittenToSink</h4>
+<pre>public&nbsp;long numWrittenToSink</pre>
+</li>
+</ul>
+<a name="lastReceivedTime">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>lastInvocationTime</h4>
-<pre>public&nbsp;long lastInvocationTime</pre>
+<h4>lastReceivedTime</h4>
+<pre>public&nbsp;long lastReceivedTime</pre>
 </li>
 </ul>
 <a name="workerId">
diff --git a/content/api/admin/org/apache/pulsar/common/policies/data/SourceStatus.SourceInstanceStatus.SourceInstanceStatusData.html b/content/api/admin/org/apache/pulsar/common/policies/data/SourceStatus.SourceInstanceStatus.SourceInstanceStatusData.html
index dcbd2de..9edc6bc 100644
--- a/content/api/admin/org/apache/pulsar/common/policies/data/SourceStatus.SourceInstanceStatus.SourceInstanceStatusData.html
+++ b/content/api/admin/org/apache/pulsar/common/policies/data/SourceStatus.SourceInstanceStatus.SourceInstanceStatusData.html
@@ -131,7 +131,7 @@ extends Object</pre>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/pulsar/common/policies/data/SourceStatus.SourceInstanceStatus.SourceInstanceStatusData.html#lastInvocationTime">lastInvocationTime</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/pulsar/common/policies/data/SourceStatus.SourceInstanceStatus.SourceInstanceStatusData.html#lastReceivedTime">lastReceivedTime</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>List&lt;<a href="../../../../../../org/apache/pulsar/common/policies/data/ExceptionInformation.html" title="class in org.apache.pulsar.common.policies.data">ExceptionInformation</a>&gt;</code></td>
@@ -139,7 +139,7 @@ extends Object</pre>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/pulsar/common/policies/data/SourceStatus.SourceInstanceStatus.SourceInstanceStatusData.html#numReceived">numReceived</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/pulsar/common/policies/data/SourceStatus.SourceInstanceStatus.SourceInstanceStatusData.html#numReceivedFromSource">numReceivedFromSource</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>long</code></td>
@@ -150,10 +150,14 @@ extends Object</pre>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/pulsar/common/policies/data/SourceStatus.SourceInstanceStatus.SourceInstanceStatusData.html#numSystemExceptions">numSystemExceptions</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/pulsar/common/policies/data/SourceStatus.SourceInstanceStatus.SourceInstanceStatusData.html#numWritten">numWritten</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/pulsar/common/policies/data/SourceStatus.SourceInstanceStatus.SourceInstanceStatusData.html#running">running</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>String</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/pulsar/common/policies/data/SourceStatus.SourceInstanceStatus.SourceInstanceStatusData.html#workerId">workerId</a></span></code>&nbsp;</td>
 </tr>
@@ -231,13 +235,13 @@ extends Object</pre>
 <pre>public&nbsp;long numRestarts</pre>
 </li>
 </ul>
-<a name="numReceived">
+<a name="numReceivedFromSource">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>numReceived</h4>
-<pre>public&nbsp;long numReceived</pre>
+<h4>numReceivedFromSource</h4>
+<pre>public&nbsp;long numReceivedFromSource</pre>
 </li>
 </ul>
 <a name="numSystemExceptions">
@@ -258,13 +262,22 @@ extends Object</pre>
 <pre>public&nbsp;List&lt;<a href="../../../../../../org/apache/pulsar/common/policies/data/ExceptionInformation.html" title="class in org.apache.pulsar.common.policies.data">ExceptionInformation</a>&gt; latestSystemExceptions</pre>
 </li>
 </ul>
-<a name="lastInvocationTime">
+<a name="numWritten">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>numWritten</h4>
+<pre>public&nbsp;long numWritten</pre>
+</li>
+</ul>
+<a name="lastReceivedTime">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>lastInvocationTime</h4>
-<pre>public&nbsp;long lastInvocationTime</pre>
+<h4>lastReceivedTime</h4>
+<pre>public&nbsp;long lastReceivedTime</pre>
 </li>
 </ul>
 <a name="workerId">
diff --git a/content/docs/fr/2.1.0-incubating/client-libraries-java.html b/content/docs/fr/2.1.0-incubating/client-libraries-java.html
index 093de52..5b449e2 100644
--- a/content/docs/fr/2.1.0-incubating/client-libraries-java.html
+++ b/content/docs/fr/2.1.0-incubating/client-libraries-java.html
@@ -154,9 +154,9 @@ client.close();</p>
     .create();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="message-routing"></a><a href="#message-routing" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="/docs/fr/2.1.0-incubating/cookbooks-partitioned">Partitioned Topics</a> cookbook.</p>
+<p>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="cookbooks-partitioned.md">Partitioned Topics</a> cookbook.</p>
 <h3><a class="anchor" aria-hidden="true" id="async-send"></a><a href="#async-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.42-1 [...]
-<p>You can also publish messages <a href="/docs/fr/2.1.0-incubating/concepts-messaging#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
+<p>You can also publish messages <a href="concepts-messaging.md#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
 <p>Here's an example async send operation:</p>
 <pre><code class="hljs css language-java">producer.sendAsync(<span class="hljs-string">"my-async-message"</span>.getBytes()).thenAccept(msgId -&gt; {
     System.out.printf(<span class="hljs-string">"Message with ID %s successfully sent"</span>, msgId);
@@ -174,17 +174,17 @@ client.close();</p>
 </code></pre>
 <p>As for the previous case, it's also possible to terminate the builder chain with <code>sendAsync()</code> and get a future returned.</p>
 <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>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="/docs/fr/2.1.0-incubating/reference-terminology#consumer">consumer</a> by first instantiating a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
+<p>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="reference-terminology.md#consumer">consumer</a> by first instantiating a <a href="https://pulsar.incubator.apache.org/api/client/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>
 <p>Once you've instantiated a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
  object, you can create a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
- by specifying a <a href="/docs/fr/2.1.0-incubating/reference-terminology#topic">topic</a> and a <a href="/docs/fr/2.1.0-incubating/concepts-messaging#subscription-modes">subscription</a>.</p>
+ by specifying a <a href="reference-terminology.md#topic">topic</a> and a <a href="concepts-messaging.md#subscription-modes">subscription</a>.</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
         .subscriptionName(<span class="hljs-string">"my-subscription"</span>)
         .subscribe();
 </code></pre>
-<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="/docs/fr/2.1.0-incubating/reference-terminology#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
+<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="reference-terminology.md#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">do</span> {
   <span class="hljs-comment">// Wait for a message</span>
   Message msg = consumer.receive();
@@ -207,13 +207,13 @@ client.close();</p>
         .subscribe();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="async-receive"></a><a href="#async-receive" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="/docs/fr/2.1.0-incubating/concepts-messaging#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
+<p>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="concepts-messaging.md#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
 <p>Here's an example:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>Async receive operations return a {@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message} wrapped inside of a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="multi-topic-subscriptions"></a><a href="#multi-topic-subscriptions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
-<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="/docs/fr/2.1.0-incubating/concepts-messaging#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
+<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="concepts-messaging.md#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
 <p>Here are some examples:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
@@ -274,7 +274,7 @@ consumerBuilder
         });
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="reader-interface-readers"></a><a href="#reader-interface-readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
-<p>With the <a href="/docs/fr/2.1.0-incubating/concepts-clients#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
+<p>With the <a href="concepts-clients.md#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
  objects by specifying a topic, a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
 , and {@inject javadoc:ReaderConfiguration:/client/org/apache/pulsar/client/api/ReaderConfiguration}.</p>
 <p>Here's an example:</p>
@@ -294,12 +294,12 @@ Reader reader = pulsarClient.newReader()
 <p>In the example above, a <code>Reader</code> object is instantiated for a specific topic and message (by ID); the reader then iterates over each message in the topic after the message identified by <code>msgIdBytes</code> (how that value is obtained depends on the application).</p>
 <p>The code sample above shows pointing the <code>Reader</code> object to a specific message (by ID), but you can also use <code>MessageId.earliest</code> to point to the earliest available message on the topic of <code>MessageId.latest</code> to point to the most recent available message.</p>
 <h2><a class="anchor" aria-hidden="true" id="schemas"></a><a href="#schemas" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 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, all message data consists of byte arrays &quot;under the hood.&quot; <a href="/docs/fr/2.1.0-incubating/concepts-schema-registry">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an e [...]
+<p>In Pulsar, all message data consists of byte arrays &quot;under the hood.&quot; <a href="concepts-schema-registry.md">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an example:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
 </code></pre>
-<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="/docs/fr/2.1.0-incubating/reference-terminology#topic">topic</a>.</p>
+<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="reference-terminology.md#topic">topic</a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="schema-example"></a><a href="#schema-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- [...]
 <p>Let's say that you have a <code>SensorReading</code> class that you'd like to transmit over a Pulsar topic:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SensorReading</span> </span>{
@@ -352,9 +352,9 @@ Producer&lt;MyPojo&gt; pojoProducer = client.newProducer(pojoSchema)
 </code></pre></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="authentication"></a><a href="#authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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 currently supports two authentication schemes: <a href="/docs/fr/2.1.0-incubating/security-tls-authentication">TLS</a> and <a href="/docs/fr/2.1.0-incubating/security-athenz">Athenz</a>. The Pulsar Java client can be used with both.</p>
+<p>Pulsar currently supports two authentication schemes: <a href="security-tls-authentication.md">TLS</a> and <a href="security-athenz.md">Athenz</a>. The Pulsar Java client can be used with both.</p>
 <h3><a class="anchor" aria-hidden="true" id="tls-authentication"></a><a href="#tls-authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>To use <a href="/docs/fr/2.1.0-incubating/security-tls-authentication">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
+<p>To use <a href="security-tls-authentication.md">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
 <p>Here's an example configuration:</p>
 <pre><code class="hljs css language-java">Map&lt;String, String&gt; authParams = <span class="hljs-keyword">new</span> HashMap&lt;&gt;();
 authParams.put(<span class="hljs-string">"tlsCertFile"</span>, <span class="hljs-string">"/path/to/client-cert.pem"</span>);
@@ -371,7 +371,7 @@ PulsarClient client = PulsarClient.builder()
         .build();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="athenz"></a><a href="#athenz" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>To use <a href="/docs/fr/2.1.0-incubating/security-athenz">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
+<p>To use <a href="security-athenz.md">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
 <ul>
 <li><code>tenantDomain</code></li>
 <li><code>tenantService</code></li>
diff --git a/content/docs/fr/2.1.0-incubating/client-libraries-java/index.html b/content/docs/fr/2.1.0-incubating/client-libraries-java/index.html
index 093de52..5b449e2 100644
--- a/content/docs/fr/2.1.0-incubating/client-libraries-java/index.html
+++ b/content/docs/fr/2.1.0-incubating/client-libraries-java/index.html
@@ -154,9 +154,9 @@ client.close();</p>
     .create();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="message-routing"></a><a href="#message-routing" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="/docs/fr/2.1.0-incubating/cookbooks-partitioned">Partitioned Topics</a> cookbook.</p>
+<p>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="cookbooks-partitioned.md">Partitioned Topics</a> cookbook.</p>
 <h3><a class="anchor" aria-hidden="true" id="async-send"></a><a href="#async-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.42-1 [...]
-<p>You can also publish messages <a href="/docs/fr/2.1.0-incubating/concepts-messaging#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
+<p>You can also publish messages <a href="concepts-messaging.md#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
 <p>Here's an example async send operation:</p>
 <pre><code class="hljs css language-java">producer.sendAsync(<span class="hljs-string">"my-async-message"</span>.getBytes()).thenAccept(msgId -&gt; {
     System.out.printf(<span class="hljs-string">"Message with ID %s successfully sent"</span>, msgId);
@@ -174,17 +174,17 @@ client.close();</p>
 </code></pre>
 <p>As for the previous case, it's also possible to terminate the builder chain with <code>sendAsync()</code> and get a future returned.</p>
 <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>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="/docs/fr/2.1.0-incubating/reference-terminology#consumer">consumer</a> by first instantiating a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
+<p>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="reference-terminology.md#consumer">consumer</a> by first instantiating a <a href="https://pulsar.incubator.apache.org/api/client/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>
 <p>Once you've instantiated a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
  object, you can create a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
- by specifying a <a href="/docs/fr/2.1.0-incubating/reference-terminology#topic">topic</a> and a <a href="/docs/fr/2.1.0-incubating/concepts-messaging#subscription-modes">subscription</a>.</p>
+ by specifying a <a href="reference-terminology.md#topic">topic</a> and a <a href="concepts-messaging.md#subscription-modes">subscription</a>.</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
         .subscriptionName(<span class="hljs-string">"my-subscription"</span>)
         .subscribe();
 </code></pre>
-<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="/docs/fr/2.1.0-incubating/reference-terminology#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
+<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="reference-terminology.md#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">do</span> {
   <span class="hljs-comment">// Wait for a message</span>
   Message msg = consumer.receive();
@@ -207,13 +207,13 @@ client.close();</p>
         .subscribe();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="async-receive"></a><a href="#async-receive" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="/docs/fr/2.1.0-incubating/concepts-messaging#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
+<p>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="concepts-messaging.md#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
 <p>Here's an example:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>Async receive operations return a {@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message} wrapped inside of a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="multi-topic-subscriptions"></a><a href="#multi-topic-subscriptions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
-<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="/docs/fr/2.1.0-incubating/concepts-messaging#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
+<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="concepts-messaging.md#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
 <p>Here are some examples:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
@@ -274,7 +274,7 @@ consumerBuilder
         });
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="reader-interface-readers"></a><a href="#reader-interface-readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
-<p>With the <a href="/docs/fr/2.1.0-incubating/concepts-clients#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
+<p>With the <a href="concepts-clients.md#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
  objects by specifying a topic, a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
 , and {@inject javadoc:ReaderConfiguration:/client/org/apache/pulsar/client/api/ReaderConfiguration}.</p>
 <p>Here's an example:</p>
@@ -294,12 +294,12 @@ Reader reader = pulsarClient.newReader()
 <p>In the example above, a <code>Reader</code> object is instantiated for a specific topic and message (by ID); the reader then iterates over each message in the topic after the message identified by <code>msgIdBytes</code> (how that value is obtained depends on the application).</p>
 <p>The code sample above shows pointing the <code>Reader</code> object to a specific message (by ID), but you can also use <code>MessageId.earliest</code> to point to the earliest available message on the topic of <code>MessageId.latest</code> to point to the most recent available message.</p>
 <h2><a class="anchor" aria-hidden="true" id="schemas"></a><a href="#schemas" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 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, all message data consists of byte arrays &quot;under the hood.&quot; <a href="/docs/fr/2.1.0-incubating/concepts-schema-registry">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an e [...]
+<p>In Pulsar, all message data consists of byte arrays &quot;under the hood.&quot; <a href="concepts-schema-registry.md">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an example:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
 </code></pre>
-<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="/docs/fr/2.1.0-incubating/reference-terminology#topic">topic</a>.</p>
+<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="reference-terminology.md#topic">topic</a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="schema-example"></a><a href="#schema-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- [...]
 <p>Let's say that you have a <code>SensorReading</code> class that you'd like to transmit over a Pulsar topic:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SensorReading</span> </span>{
@@ -352,9 +352,9 @@ Producer&lt;MyPojo&gt; pojoProducer = client.newProducer(pojoSchema)
 </code></pre></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="authentication"></a><a href="#authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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 currently supports two authentication schemes: <a href="/docs/fr/2.1.0-incubating/security-tls-authentication">TLS</a> and <a href="/docs/fr/2.1.0-incubating/security-athenz">Athenz</a>. The Pulsar Java client can be used with both.</p>
+<p>Pulsar currently supports two authentication schemes: <a href="security-tls-authentication.md">TLS</a> and <a href="security-athenz.md">Athenz</a>. The Pulsar Java client can be used with both.</p>
 <h3><a class="anchor" aria-hidden="true" id="tls-authentication"></a><a href="#tls-authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>To use <a href="/docs/fr/2.1.0-incubating/security-tls-authentication">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
+<p>To use <a href="security-tls-authentication.md">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
 <p>Here's an example configuration:</p>
 <pre><code class="hljs css language-java">Map&lt;String, String&gt; authParams = <span class="hljs-keyword">new</span> HashMap&lt;&gt;();
 authParams.put(<span class="hljs-string">"tlsCertFile"</span>, <span class="hljs-string">"/path/to/client-cert.pem"</span>);
@@ -371,7 +371,7 @@ PulsarClient client = PulsarClient.builder()
         .build();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="athenz"></a><a href="#athenz" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>To use <a href="/docs/fr/2.1.0-incubating/security-athenz">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
+<p>To use <a href="security-athenz.md">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
 <ul>
 <li><code>tenantDomain</code></li>
 <li><code>tenantService</code></li>
diff --git a/content/docs/fr/2.1.0-incubating/deploy-aws.html b/content/docs/fr/2.1.0-incubating/deploy-aws.html
index 8aff454..1d1a87c 100644
--- a/content/docs/fr/2.1.0-incubating/deploy-aws.html
+++ b/content/docs/fr/2.1.0-incubating/deploy-aws.html
@@ -138,9 +138,9 @@ id_rsa               id_rsa.pub
 <li>9 total <a href="https://aws.amazon.com/ec2">Elastic Compute Cloud</a> (EC2) instances running the <a href="https://access.redhat.com/articles/3135091">ami-9fa343e7</a> Amazon Machine Image (AMI), which runs <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/7.4_release_notes/index">Red Hat Enterprise Linux (RHEL) 7.4</a>. By default, that includes:
 <ul>
 <li>3 small VMs for ZooKeeper (<a href="https://www.ec2instances.info/?selected=t2.small">t2.small</a> instances)</li>
-<li>3 larger VMs for BookKeeper <a href="/docs/fr/2.1.0-incubating/reference-terminology#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
-<li>2 larger VMs for Pulsar <a href="/docs/fr/2.1.0-incubating/reference-terminology#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
-<li>1 larger VMs for Pulsar <a href="/docs/fr/2.1.0-incubating/reference-terminology#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>3 larger VMs for BookKeeper <a href="reference-terminology.md#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
+<li>2 larger VMs for Pulsar <a href="reference-terminology.md#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>1 larger VMs for Pulsar <a href="reference-terminology.md#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
 </ul></li>
 <li>An EC2 <a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html">security group</a></li>
 <li>A <a href="https://aws.amazon.com/vpc/">virtual private cloud</a> (VPC) for security</li>
diff --git a/content/docs/fr/2.1.0-incubating/deploy-aws/index.html b/content/docs/fr/2.1.0-incubating/deploy-aws/index.html
index 8aff454..1d1a87c 100644
--- a/content/docs/fr/2.1.0-incubating/deploy-aws/index.html
+++ b/content/docs/fr/2.1.0-incubating/deploy-aws/index.html
@@ -138,9 +138,9 @@ id_rsa               id_rsa.pub
 <li>9 total <a href="https://aws.amazon.com/ec2">Elastic Compute Cloud</a> (EC2) instances running the <a href="https://access.redhat.com/articles/3135091">ami-9fa343e7</a> Amazon Machine Image (AMI), which runs <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/7.4_release_notes/index">Red Hat Enterprise Linux (RHEL) 7.4</a>. By default, that includes:
 <ul>
 <li>3 small VMs for ZooKeeper (<a href="https://www.ec2instances.info/?selected=t2.small">t2.small</a> instances)</li>
-<li>3 larger VMs for BookKeeper <a href="/docs/fr/2.1.0-incubating/reference-terminology#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
-<li>2 larger VMs for Pulsar <a href="/docs/fr/2.1.0-incubating/reference-terminology#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
-<li>1 larger VMs for Pulsar <a href="/docs/fr/2.1.0-incubating/reference-terminology#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>3 larger VMs for BookKeeper <a href="reference-terminology.md#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
+<li>2 larger VMs for Pulsar <a href="reference-terminology.md#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>1 larger VMs for Pulsar <a href="reference-terminology.md#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
 </ul></li>
 <li>An EC2 <a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html">security group</a></li>
 <li>A <a href="https://aws.amazon.com/vpc/">virtual private cloud</a> (VPC) for security</li>
diff --git a/content/docs/fr/2.1.0-incubating/deploy-bare-metal.html b/content/docs/fr/2.1.0-incubating/deploy-bare-metal.html
index ef9248a..fa22980 100644
--- a/content/docs/fr/2.1.0-incubating/deploy-bare-metal.html
+++ b/content/docs/fr/2.1.0-incubating/deploy-bare-metal.html
@@ -223,7 +223,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <pre><code class="hljs">
 Once you've applied the desired configuration in <span class="hljs-code">`conf/bookkeeper.conf`</span>, you can start up a bookie on each of your BookKeeper hosts. You can start up each bookie either in the background, using [<span class="hljs-string">nohup</span>](<span class="hljs-link">https://en.wikipedia.org/wiki/Nohup</span>), or in the foreground.
 
-To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">/docs/fr/2.1.0-incubating/reference-cli-tools#pulsar-daemon</span>) CLI tool:
+To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-daemon</span>) CLI tool:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-daemon start bookie
@@ -231,18 +231,18 @@ $ bin/pulsar-daemon start bookie
 <p>To start the bookie in the foreground:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper bookie
 </code></pre>
-<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="/docs/fr/2.1.0-incubating/reference-cli-tools#shell">BookKeeper shell</a> on it:</p>
+<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on it:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell bookiesanity
 </code></pre>
 <p>This will create an ephemeral BookKeeper ledger on the local bookie, write a few entries, read them back, and finally delete the ledger.</p>
-<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="/docs/fr/2.1.0-incubating/reference-cli-tools#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
+<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell simpletest --ensemble &lt;num-bookies&gt; --writeQuorum &lt;num-bookies&gt; --ackQuorum &lt;num-bookies&gt; --numEntries &lt;num-entries&gt;
 </code></pre>
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
 <h3><a class="anchor" aria-hidden="true" id="configuring-brokers"></a><a href="#configuring-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.2 [...]
-<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="/docs/fr/2.1.0-incubating/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="/docs/fr/2.1.0-incubating/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configura [...]
+<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
@@ -250,7 +250,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="enabling-pulsar-functions-optional"></a><a href="#enabling-pulsar-functions-optional" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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>If you want to enable <a href="/docs/fr/2.1.0-incubating/functions-overview">Pulsar Functions</a>, you can follow the instructions as below:</p>
+<p>If you want to enable <a href="functions-overview.md">Pulsar Functions</a>, you can follow the instructions as below:</p>
 <ol>
 <li><p>Edit <code>conf/broker.conf</code> to enable function worker, by setting <code>functionsWorkerEnabled</code> to <code>true</code>.</p>
 <pre><code class="hljs css language-conf"><span class="hljs-attr">functionsWorkerEnabled</span>=<span class="hljs-literal">true</span>
@@ -262,17 +262,17 @@ $ bin/pulsar-daemon start bookie
 </code></pre></li>
 </ol>
 <h3><a class="anchor" aria-hidden="true" id="starting-brokers"></a><a href="#starting-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. [...]
-<p>You can then provide any other configuration changes that you'd like in the <a href="/docs/fr/2.1.0-incubating/reference-configuration#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
-<p>You can start a broker in the foreground using the <a href="/docs/fr/2.1.0-incubating/reference-cli-tools#pulsar-broker"><code>pulsar broker</code></a> command:</p>
+<p>You can then provide any other configuration changes that you'd like in the <a href="reference-configuration.md#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
+<p>You can start a broker in the foreground using the <a href="reference-cli-tools.md#pulsar-broker"><code>pulsar broker</code></a> command:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar broker
 </code></pre>
-<p>You can start a broker in the background using the <a href="/docs/fr/2.1.0-incubating/reference-cli-tools#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
+<p>You can start a broker in the background using the <a href="reference-cli-tools.md#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-daemon start broker
 </code></pre>
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-cluster" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S1 [...]
-<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="/docs/fr/2.1.0-incubating/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/fr/2.1.0-incubating/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
+<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="reference-cli-tools.md#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -300,7 +300,7 @@ $ bin/pulsar-daemon start bookie
   --namespace default \
   --name exclamation
 </code></pre>
-<p>Check if the function is running as expected by <a href="/docs/fr/2.1.0-incubating/functions-deploying#triggering-pulsar-functions">triggering</a> the function.</p>
+<p>Check if the function is running as expected by <a href="functions-deploying.md#triggering-pulsar-functions">triggering</a> the function.</p>
 <pre><code class="hljs css language-bash">bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger --name exclamation --triggerValue <span class="hljs-string">"hello world"</span>
 </code></pre>
 <p>You will see output as below:</p>
diff --git a/content/docs/fr/2.1.0-incubating/deploy-bare-metal/index.html b/content/docs/fr/2.1.0-incubating/deploy-bare-metal/index.html
index ef9248a..fa22980 100644
--- a/content/docs/fr/2.1.0-incubating/deploy-bare-metal/index.html
+++ b/content/docs/fr/2.1.0-incubating/deploy-bare-metal/index.html
@@ -223,7 +223,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <pre><code class="hljs">
 Once you've applied the desired configuration in <span class="hljs-code">`conf/bookkeeper.conf`</span>, you can start up a bookie on each of your BookKeeper hosts. You can start up each bookie either in the background, using [<span class="hljs-string">nohup</span>](<span class="hljs-link">https://en.wikipedia.org/wiki/Nohup</span>), or in the foreground.
 
-To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">/docs/fr/2.1.0-incubating/reference-cli-tools#pulsar-daemon</span>) CLI tool:
+To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-daemon</span>) CLI tool:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-daemon start bookie
@@ -231,18 +231,18 @@ $ bin/pulsar-daemon start bookie
 <p>To start the bookie in the foreground:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper bookie
 </code></pre>
-<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="/docs/fr/2.1.0-incubating/reference-cli-tools#shell">BookKeeper shell</a> on it:</p>
+<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on it:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell bookiesanity
 </code></pre>
 <p>This will create an ephemeral BookKeeper ledger on the local bookie, write a few entries, read them back, and finally delete the ledger.</p>
-<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="/docs/fr/2.1.0-incubating/reference-cli-tools#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
+<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell simpletest --ensemble &lt;num-bookies&gt; --writeQuorum &lt;num-bookies&gt; --ackQuorum &lt;num-bookies&gt; --numEntries &lt;num-entries&gt;
 </code></pre>
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
 <h3><a class="anchor" aria-hidden="true" id="configuring-brokers"></a><a href="#configuring-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.2 [...]
-<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="/docs/fr/2.1.0-incubating/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="/docs/fr/2.1.0-incubating/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configura [...]
+<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
@@ -250,7 +250,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="enabling-pulsar-functions-optional"></a><a href="#enabling-pulsar-functions-optional" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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>If you want to enable <a href="/docs/fr/2.1.0-incubating/functions-overview">Pulsar Functions</a>, you can follow the instructions as below:</p>
+<p>If you want to enable <a href="functions-overview.md">Pulsar Functions</a>, you can follow the instructions as below:</p>
 <ol>
 <li><p>Edit <code>conf/broker.conf</code> to enable function worker, by setting <code>functionsWorkerEnabled</code> to <code>true</code>.</p>
 <pre><code class="hljs css language-conf"><span class="hljs-attr">functionsWorkerEnabled</span>=<span class="hljs-literal">true</span>
@@ -262,17 +262,17 @@ $ bin/pulsar-daemon start bookie
 </code></pre></li>
 </ol>
 <h3><a class="anchor" aria-hidden="true" id="starting-brokers"></a><a href="#starting-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. [...]
-<p>You can then provide any other configuration changes that you'd like in the <a href="/docs/fr/2.1.0-incubating/reference-configuration#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
-<p>You can start a broker in the foreground using the <a href="/docs/fr/2.1.0-incubating/reference-cli-tools#pulsar-broker"><code>pulsar broker</code></a> command:</p>
+<p>You can then provide any other configuration changes that you'd like in the <a href="reference-configuration.md#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
+<p>You can start a broker in the foreground using the <a href="reference-cli-tools.md#pulsar-broker"><code>pulsar broker</code></a> command:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar broker
 </code></pre>
-<p>You can start a broker in the background using the <a href="/docs/fr/2.1.0-incubating/reference-cli-tools#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
+<p>You can start a broker in the background using the <a href="reference-cli-tools.md#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-daemon start broker
 </code></pre>
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-cluster" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S1 [...]
-<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="/docs/fr/2.1.0-incubating/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/fr/2.1.0-incubating/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
+<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="reference-cli-tools.md#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -300,7 +300,7 @@ $ bin/pulsar-daemon start bookie
   --namespace default \
   --name exclamation
 </code></pre>
-<p>Check if the function is running as expected by <a href="/docs/fr/2.1.0-incubating/functions-deploying#triggering-pulsar-functions">triggering</a> the function.</p>
+<p>Check if the function is running as expected by <a href="functions-deploying.md#triggering-pulsar-functions">triggering</a> the function.</p>
 <pre><code class="hljs css language-bash">bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger --name exclamation --triggerValue <span class="hljs-string">"hello world"</span>
 </code></pre>
 <p>You will see output as below:</p>
diff --git a/content/docs/fr/2.1.0-incubating/functions-quickstart.html b/content/docs/fr/2.1.0-incubating/functions-quickstart.html
index c53c449..f8bc9b0 100644
--- a/content/docs/fr/2.1.0-incubating/functions-quickstart.html
+++ b/content/docs/fr/2.1.0-incubating/functions-quickstart.html
@@ -90,7 +90,7 @@ $ bin/pulsar standalone \
 </blockquote>
 <p>--inputs topic1,topic2</p>
 <pre><code class="hljs">
-We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">/docs/fr/2.1.0-incubating/reference-cli-tools#pulsar-client</span>) tool to listen for messages on the output topic:
+We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-client</span>) tool to listen for messages on the output topic:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-client consume persistent://public/default/exclamation-output \
@@ -117,7 +117,7 @@ Hello world!
 <li>If our exclamation function <em>hadn't</em> been running, Pulsar would have durably stored the message data published to the input topic in <a href="https://bookkeeper.apache.org">Apache BookKeeper</a> until a consumer consumed and acknowledged the message</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="run-a-pulsar-function-in-cluster-mode"></a><a href="#run-a-pulsar-function-in-cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 [...]
-<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="/docs/fr/2.1.0-incubating/pulsar-admin#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
+<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="reference-pulsar-admin.md#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
 <p>This command, for example, would deploy the same exclamation function we ran locally above <em>in our Pulsar cluster</em> (rather than outside it):</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --jar examples/api-examples.jar \
@@ -201,7 +201,7 @@ Hello world!
 <p>If you see <code>Deleted successfully</code> in the output, then you've succesfully run, updated, and shut down a Pulsar Function running in cluster mode. Congrats! Now, let's go even further and run a brand new function in the next section.</p>
 <h2><a class="anchor" aria-hidden="true" id="writing-and-running-a-new-function"></a><a href="#writing-and-running-a-new-function" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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 [...]
 <blockquote>
-<p>In order to write and run the <a href="/docs/fr/2.1.0-incubating/functions-api#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
+<p>In order to write and run the <a href="functions-api.md#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
 <pre><code class="hljs css language-bash"></code></pre>
 </blockquote>
 <p>$ pip install pulsar-client</p>
diff --git a/content/docs/fr/2.1.0-incubating/functions-quickstart/index.html b/content/docs/fr/2.1.0-incubating/functions-quickstart/index.html
index c53c449..f8bc9b0 100644
--- a/content/docs/fr/2.1.0-incubating/functions-quickstart/index.html
+++ b/content/docs/fr/2.1.0-incubating/functions-quickstart/index.html
@@ -90,7 +90,7 @@ $ bin/pulsar standalone \
 </blockquote>
 <p>--inputs topic1,topic2</p>
 <pre><code class="hljs">
-We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">/docs/fr/2.1.0-incubating/reference-cli-tools#pulsar-client</span>) tool to listen for messages on the output topic:
+We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-client</span>) tool to listen for messages on the output topic:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-client consume persistent://public/default/exclamation-output \
@@ -117,7 +117,7 @@ Hello world!
 <li>If our exclamation function <em>hadn't</em> been running, Pulsar would have durably stored the message data published to the input topic in <a href="https://bookkeeper.apache.org">Apache BookKeeper</a> until a consumer consumed and acknowledged the message</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="run-a-pulsar-function-in-cluster-mode"></a><a href="#run-a-pulsar-function-in-cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 [...]
-<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="/docs/fr/2.1.0-incubating/pulsar-admin#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
+<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="reference-pulsar-admin.md#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
 <p>This command, for example, would deploy the same exclamation function we ran locally above <em>in our Pulsar cluster</em> (rather than outside it):</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --jar examples/api-examples.jar \
@@ -201,7 +201,7 @@ Hello world!
 <p>If you see <code>Deleted successfully</code> in the output, then you've succesfully run, updated, and shut down a Pulsar Function running in cluster mode. Congrats! Now, let's go even further and run a brand new function in the next section.</p>
 <h2><a class="anchor" aria-hidden="true" id="writing-and-running-a-new-function"></a><a href="#writing-and-running-a-new-function" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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 [...]
 <blockquote>
-<p>In order to write and run the <a href="/docs/fr/2.1.0-incubating/functions-api#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
+<p>In order to write and run the <a href="functions-api.md#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
 <pre><code class="hljs css language-bash"></code></pre>
 </blockquote>
 <p>$ pip install pulsar-client</p>
diff --git a/content/docs/fr/2.1.1-incubating/client-libraries-java.html b/content/docs/fr/2.1.1-incubating/client-libraries-java.html
index b7843cb..f1d43b7 100644
--- a/content/docs/fr/2.1.1-incubating/client-libraries-java.html
+++ b/content/docs/fr/2.1.1-incubating/client-libraries-java.html
@@ -154,9 +154,9 @@ client.close();</p>
     .create();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="message-routing"></a><a href="#message-routing" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="/docs/fr/2.1.1-incubating/cookbooks-partitioned">Partitioned Topics</a> cookbook.</p>
+<p>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="cookbooks-partitioned.md">Partitioned Topics</a> cookbook.</p>
 <h3><a class="anchor" aria-hidden="true" id="async-send"></a><a href="#async-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.42-1 [...]
-<p>You can also publish messages <a href="/docs/fr/2.1.1-incubating/concepts-messaging#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
+<p>You can also publish messages <a href="concepts-messaging.md#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
 <p>Here's an example async send operation:</p>
 <pre><code class="hljs css language-java">producer.sendAsync(<span class="hljs-string">"my-async-message"</span>.getBytes()).thenAccept(msgId -&gt; {
     System.out.printf(<span class="hljs-string">"Message with ID %s successfully sent"</span>, msgId);
@@ -174,17 +174,17 @@ client.close();</p>
 </code></pre>
 <p>As for the previous case, it's also possible to terminate the builder chain with <code>sendAsync()</code> and get a future returned.</p>
 <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>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="/docs/fr/2.1.1-incubating/reference-terminology#consumer">consumer</a> by first instantiating a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
+<p>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="reference-terminology.md#consumer">consumer</a> by first instantiating a <a href="https://pulsar.incubator.apache.org/api/client/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>
 <p>Once you've instantiated a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
  object, you can create a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
- by specifying a <a href="/docs/fr/2.1.1-incubating/reference-terminology#topic">topic</a> and a <a href="/docs/fr/2.1.1-incubating/concepts-messaging#subscription-modes">subscription</a>.</p>
+ by specifying a <a href="reference-terminology.md#topic">topic</a> and a <a href="concepts-messaging.md#subscription-modes">subscription</a>.</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
         .subscriptionName(<span class="hljs-string">"my-subscription"</span>)
         .subscribe();
 </code></pre>
-<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="/docs/fr/2.1.1-incubating/reference-terminology#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
+<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="reference-terminology.md#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">do</span> {
   <span class="hljs-comment">// Wait for a message</span>
   Message msg = consumer.receive();
@@ -207,13 +207,13 @@ client.close();</p>
         .subscribe();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="async-receive"></a><a href="#async-receive" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="/docs/fr/2.1.1-incubating/concepts-messaging#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
+<p>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="concepts-messaging.md#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
 <p>Here's an example:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>Async receive operations return a {@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message} wrapped inside of a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="multi-topic-subscriptions"></a><a href="#multi-topic-subscriptions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
-<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="/docs/fr/2.1.1-incubating/concepts-messaging#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
+<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="concepts-messaging.md#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
 <p>Here are some examples:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
@@ -274,7 +274,7 @@ consumerBuilder
         });
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="reader-interface-readers"></a><a href="#reader-interface-readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
-<p>With the <a href="/docs/fr/2.1.1-incubating/concepts-clients#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
+<p>With the <a href="concepts-clients.md#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
  objects by specifying a topic, a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
 , and {@inject javadoc:ReaderConfiguration:/client/org/apache/pulsar/client/api/ReaderConfiguration}.</p>
 <p>Here's an example:</p>
@@ -294,12 +294,12 @@ Reader reader = pulsarClient.newReader()
 <p>In the example above, a <code>Reader</code> object is instantiated for a specific topic and message (by ID); the reader then iterates over each message in the topic after the message identified by <code>msgIdBytes</code> (how that value is obtained depends on the application).</p>
 <p>The code sample above shows pointing the <code>Reader</code> object to a specific message (by ID), but you can also use <code>MessageId.earliest</code> to point to the earliest available message on the topic of <code>MessageId.latest</code> to point to the most recent available message.</p>
 <h2><a class="anchor" aria-hidden="true" id="schemas"></a><a href="#schemas" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 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, all message data consists of byte arrays &quot;under the hood.&quot; <a href="/docs/fr/2.1.1-incubating/concepts-schema-registry">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an e [...]
+<p>In Pulsar, all message data consists of byte arrays &quot;under the hood.&quot; <a href="concepts-schema-registry.md">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an example:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
 </code></pre>
-<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="/docs/fr/2.1.1-incubating/reference-terminology#topic">topic</a>.</p>
+<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="reference-terminology.md#topic">topic</a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="schema-example"></a><a href="#schema-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- [...]
 <p>Let's say that you have a <code>SensorReading</code> class that you'd like to transmit over a Pulsar topic:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SensorReading</span> </span>{
@@ -352,9 +352,9 @@ Producer&lt;MyPojo&gt; pojoProducer = client.newProducer(pojoSchema)
 </code></pre></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="authentication"></a><a href="#authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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 currently supports two authentication schemes: <a href="/docs/fr/2.1.1-incubating/security-tls-authentication">TLS</a> and <a href="/docs/fr/2.1.1-incubating/security-athenz">Athenz</a>. The Pulsar Java client can be used with both.</p>
+<p>Pulsar currently supports two authentication schemes: <a href="security-tls-authentication.md">TLS</a> and <a href="security-athenz.md">Athenz</a>. The Pulsar Java client can be used with both.</p>
 <h3><a class="anchor" aria-hidden="true" id="tls-authentication"></a><a href="#tls-authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>To use <a href="/docs/fr/2.1.1-incubating/security-tls-authentication">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
+<p>To use <a href="security-tls-authentication.md">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
 <p>Here's an example configuration:</p>
 <pre><code class="hljs css language-java">Map&lt;String, String&gt; authParams = <span class="hljs-keyword">new</span> HashMap&lt;&gt;();
 authParams.put(<span class="hljs-string">"tlsCertFile"</span>, <span class="hljs-string">"/path/to/client-cert.pem"</span>);
@@ -371,7 +371,7 @@ PulsarClient client = PulsarClient.builder()
         .build();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="athenz"></a><a href="#athenz" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>To use <a href="/docs/fr/2.1.1-incubating/security-athenz">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
+<p>To use <a href="security-athenz.md">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
 <ul>
 <li><code>tenantDomain</code></li>
 <li><code>tenantService</code></li>
diff --git a/content/docs/fr/2.1.1-incubating/client-libraries-java/index.html b/content/docs/fr/2.1.1-incubating/client-libraries-java/index.html
index b7843cb..f1d43b7 100644
--- a/content/docs/fr/2.1.1-incubating/client-libraries-java/index.html
+++ b/content/docs/fr/2.1.1-incubating/client-libraries-java/index.html
@@ -154,9 +154,9 @@ client.close();</p>
     .create();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="message-routing"></a><a href="#message-routing" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="/docs/fr/2.1.1-incubating/cookbooks-partitioned">Partitioned Topics</a> cookbook.</p>
+<p>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="cookbooks-partitioned.md">Partitioned Topics</a> cookbook.</p>
 <h3><a class="anchor" aria-hidden="true" id="async-send"></a><a href="#async-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.42-1 [...]
-<p>You can also publish messages <a href="/docs/fr/2.1.1-incubating/concepts-messaging#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
+<p>You can also publish messages <a href="concepts-messaging.md#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
 <p>Here's an example async send operation:</p>
 <pre><code class="hljs css language-java">producer.sendAsync(<span class="hljs-string">"my-async-message"</span>.getBytes()).thenAccept(msgId -&gt; {
     System.out.printf(<span class="hljs-string">"Message with ID %s successfully sent"</span>, msgId);
@@ -174,17 +174,17 @@ client.close();</p>
 </code></pre>
 <p>As for the previous case, it's also possible to terminate the builder chain with <code>sendAsync()</code> and get a future returned.</p>
 <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>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="/docs/fr/2.1.1-incubating/reference-terminology#consumer">consumer</a> by first instantiating a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
+<p>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="reference-terminology.md#consumer">consumer</a> by first instantiating a <a href="https://pulsar.incubator.apache.org/api/client/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>
 <p>Once you've instantiated a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
  object, you can create a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
- by specifying a <a href="/docs/fr/2.1.1-incubating/reference-terminology#topic">topic</a> and a <a href="/docs/fr/2.1.1-incubating/concepts-messaging#subscription-modes">subscription</a>.</p>
+ by specifying a <a href="reference-terminology.md#topic">topic</a> and a <a href="concepts-messaging.md#subscription-modes">subscription</a>.</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
         .subscriptionName(<span class="hljs-string">"my-subscription"</span>)
         .subscribe();
 </code></pre>
-<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="/docs/fr/2.1.1-incubating/reference-terminology#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
+<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="reference-terminology.md#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">do</span> {
   <span class="hljs-comment">// Wait for a message</span>
   Message msg = consumer.receive();
@@ -207,13 +207,13 @@ client.close();</p>
         .subscribe();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="async-receive"></a><a href="#async-receive" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="/docs/fr/2.1.1-incubating/concepts-messaging#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
+<p>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="concepts-messaging.md#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
 <p>Here's an example:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>Async receive operations return a {@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message} wrapped inside of a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="multi-topic-subscriptions"></a><a href="#multi-topic-subscriptions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
-<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="/docs/fr/2.1.1-incubating/concepts-messaging#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
+<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="concepts-messaging.md#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
 <p>Here are some examples:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
@@ -274,7 +274,7 @@ consumerBuilder
         });
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="reader-interface-readers"></a><a href="#reader-interface-readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
-<p>With the <a href="/docs/fr/2.1.1-incubating/concepts-clients#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
+<p>With the <a href="concepts-clients.md#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
  objects by specifying a topic, a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
 , and {@inject javadoc:ReaderConfiguration:/client/org/apache/pulsar/client/api/ReaderConfiguration}.</p>
 <p>Here's an example:</p>
@@ -294,12 +294,12 @@ Reader reader = pulsarClient.newReader()
 <p>In the example above, a <code>Reader</code> object is instantiated for a specific topic and message (by ID); the reader then iterates over each message in the topic after the message identified by <code>msgIdBytes</code> (how that value is obtained depends on the application).</p>
 <p>The code sample above shows pointing the <code>Reader</code> object to a specific message (by ID), but you can also use <code>MessageId.earliest</code> to point to the earliest available message on the topic of <code>MessageId.latest</code> to point to the most recent available message.</p>
 <h2><a class="anchor" aria-hidden="true" id="schemas"></a><a href="#schemas" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 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, all message data consists of byte arrays &quot;under the hood.&quot; <a href="/docs/fr/2.1.1-incubating/concepts-schema-registry">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an e [...]
+<p>In Pulsar, all message data consists of byte arrays &quot;under the hood.&quot; <a href="concepts-schema-registry.md">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an example:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
 </code></pre>
-<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="/docs/fr/2.1.1-incubating/reference-terminology#topic">topic</a>.</p>
+<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="reference-terminology.md#topic">topic</a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="schema-example"></a><a href="#schema-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- [...]
 <p>Let's say that you have a <code>SensorReading</code> class that you'd like to transmit over a Pulsar topic:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SensorReading</span> </span>{
@@ -352,9 +352,9 @@ Producer&lt;MyPojo&gt; pojoProducer = client.newProducer(pojoSchema)
 </code></pre></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="authentication"></a><a href="#authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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 currently supports two authentication schemes: <a href="/docs/fr/2.1.1-incubating/security-tls-authentication">TLS</a> and <a href="/docs/fr/2.1.1-incubating/security-athenz">Athenz</a>. The Pulsar Java client can be used with both.</p>
+<p>Pulsar currently supports two authentication schemes: <a href="security-tls-authentication.md">TLS</a> and <a href="security-athenz.md">Athenz</a>. The Pulsar Java client can be used with both.</p>
 <h3><a class="anchor" aria-hidden="true" id="tls-authentication"></a><a href="#tls-authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>To use <a href="/docs/fr/2.1.1-incubating/security-tls-authentication">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
+<p>To use <a href="security-tls-authentication.md">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
 <p>Here's an example configuration:</p>
 <pre><code class="hljs css language-java">Map&lt;String, String&gt; authParams = <span class="hljs-keyword">new</span> HashMap&lt;&gt;();
 authParams.put(<span class="hljs-string">"tlsCertFile"</span>, <span class="hljs-string">"/path/to/client-cert.pem"</span>);
@@ -371,7 +371,7 @@ PulsarClient client = PulsarClient.builder()
         .build();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="athenz"></a><a href="#athenz" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>To use <a href="/docs/fr/2.1.1-incubating/security-athenz">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
+<p>To use <a href="security-athenz.md">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
 <ul>
 <li><code>tenantDomain</code></li>
 <li><code>tenantService</code></li>
diff --git a/content/docs/fr/2.1.1-incubating/deploy-aws.html b/content/docs/fr/2.1.1-incubating/deploy-aws.html
index 6e0b74e..f788aa6 100644
--- a/content/docs/fr/2.1.1-incubating/deploy-aws.html
+++ b/content/docs/fr/2.1.1-incubating/deploy-aws.html
@@ -138,9 +138,9 @@ id_rsa               id_rsa.pub
 <li>9 total <a href="https://aws.amazon.com/ec2">Elastic Compute Cloud</a> (EC2) instances running the <a href="https://access.redhat.com/articles/3135091">ami-9fa343e7</a> Amazon Machine Image (AMI), which runs <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/7.4_release_notes/index">Red Hat Enterprise Linux (RHEL) 7.4</a>. By default, that includes:
 <ul>
 <li>3 small VMs for ZooKeeper (<a href="https://www.ec2instances.info/?selected=t2.small">t2.small</a> instances)</li>
-<li>3 larger VMs for BookKeeper <a href="/docs/fr/2.1.1-incubating/reference-terminology#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
-<li>2 larger VMs for Pulsar <a href="/docs/fr/2.1.1-incubating/reference-terminology#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
-<li>1 larger VMs for Pulsar <a href="/docs/fr/2.1.1-incubating/reference-terminology#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>3 larger VMs for BookKeeper <a href="reference-terminology.md#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
+<li>2 larger VMs for Pulsar <a href="reference-terminology.md#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>1 larger VMs for Pulsar <a href="reference-terminology.md#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
 </ul></li>
 <li>An EC2 <a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html">security group</a></li>
 <li>A <a href="https://aws.amazon.com/vpc/">virtual private cloud</a> (VPC) for security</li>
diff --git a/content/docs/fr/2.1.1-incubating/deploy-aws/index.html b/content/docs/fr/2.1.1-incubating/deploy-aws/index.html
index 6e0b74e..f788aa6 100644
--- a/content/docs/fr/2.1.1-incubating/deploy-aws/index.html
+++ b/content/docs/fr/2.1.1-incubating/deploy-aws/index.html
@@ -138,9 +138,9 @@ id_rsa               id_rsa.pub
 <li>9 total <a href="https://aws.amazon.com/ec2">Elastic Compute Cloud</a> (EC2) instances running the <a href="https://access.redhat.com/articles/3135091">ami-9fa343e7</a> Amazon Machine Image (AMI), which runs <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/7.4_release_notes/index">Red Hat Enterprise Linux (RHEL) 7.4</a>. By default, that includes:
 <ul>
 <li>3 small VMs for ZooKeeper (<a href="https://www.ec2instances.info/?selected=t2.small">t2.small</a> instances)</li>
-<li>3 larger VMs for BookKeeper <a href="/docs/fr/2.1.1-incubating/reference-terminology#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
-<li>2 larger VMs for Pulsar <a href="/docs/fr/2.1.1-incubating/reference-terminology#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
-<li>1 larger VMs for Pulsar <a href="/docs/fr/2.1.1-incubating/reference-terminology#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>3 larger VMs for BookKeeper <a href="reference-terminology.md#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
+<li>2 larger VMs for Pulsar <a href="reference-terminology.md#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>1 larger VMs for Pulsar <a href="reference-terminology.md#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
 </ul></li>
 <li>An EC2 <a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html">security group</a></li>
 <li>A <a href="https://aws.amazon.com/vpc/">virtual private cloud</a> (VPC) for security</li>
diff --git a/content/docs/fr/2.1.1-incubating/deploy-bare-metal.html b/content/docs/fr/2.1.1-incubating/deploy-bare-metal.html
index 6343ab6..1e8a011 100644
--- a/content/docs/fr/2.1.1-incubating/deploy-bare-metal.html
+++ b/content/docs/fr/2.1.1-incubating/deploy-bare-metal.html
@@ -223,7 +223,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <pre><code class="hljs">
 Once you've applied the desired configuration in <span class="hljs-code">`conf/bookkeeper.conf`</span>, you can start up a bookie on each of your BookKeeper hosts. You can start up each bookie either in the background, using [<span class="hljs-string">nohup</span>](<span class="hljs-link">https://en.wikipedia.org/wiki/Nohup</span>), or in the foreground.
 
-To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">/docs/fr/2.1.1-incubating/reference-cli-tools#pulsar-daemon</span>) CLI tool:
+To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-daemon</span>) CLI tool:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-daemon start bookie
@@ -231,18 +231,18 @@ $ bin/pulsar-daemon start bookie
 <p>To start the bookie in the foreground:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper bookie
 </code></pre>
-<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="/docs/fr/2.1.1-incubating/reference-cli-tools#shell">BookKeeper shell</a> on it:</p>
+<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on it:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell bookiesanity
 </code></pre>
 <p>This will create an ephemeral BookKeeper ledger on the local bookie, write a few entries, read them back, and finally delete the ledger.</p>
-<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="/docs/fr/2.1.1-incubating/reference-cli-tools#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
+<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell simpletest --ensemble &lt;num-bookies&gt; --writeQuorum &lt;num-bookies&gt; --ackQuorum &lt;num-bookies&gt; --numEntries &lt;num-entries&gt;
 </code></pre>
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
 <h3><a class="anchor" aria-hidden="true" id="configuring-brokers"></a><a href="#configuring-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.2 [...]
-<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="/docs/fr/2.1.1-incubating/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="/docs/fr/2.1.1-incubating/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configura [...]
+<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
@@ -250,7 +250,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="enabling-pulsar-functions-optional"></a><a href="#enabling-pulsar-functions-optional" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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>If you want to enable <a href="/docs/fr/2.1.1-incubating/functions-overview">Pulsar Functions</a>, you can follow the instructions as below:</p>
+<p>If you want to enable <a href="functions-overview.md">Pulsar Functions</a>, you can follow the instructions as below:</p>
 <ol>
 <li><p>Edit <code>conf/broker.conf</code> to enable function worker, by setting <code>functionsWorkerEnabled</code> to <code>true</code>.</p>
 <pre><code class="hljs css language-conf"><span class="hljs-attr">functionsWorkerEnabled</span>=<span class="hljs-literal">true</span>
@@ -262,17 +262,17 @@ $ bin/pulsar-daemon start bookie
 </code></pre></li>
 </ol>
 <h3><a class="anchor" aria-hidden="true" id="starting-brokers"></a><a href="#starting-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. [...]
-<p>You can then provide any other configuration changes that you'd like in the <a href="/docs/fr/2.1.1-incubating/reference-configuration#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
-<p>You can start a broker in the foreground using the <a href="/docs/fr/2.1.1-incubating/reference-cli-tools#pulsar-broker"><code>pulsar broker</code></a> command:</p>
+<p>You can then provide any other configuration changes that you'd like in the <a href="reference-configuration.md#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
+<p>You can start a broker in the foreground using the <a href="reference-cli-tools.md#pulsar-broker"><code>pulsar broker</code></a> command:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar broker
 </code></pre>
-<p>You can start a broker in the background using the <a href="/docs/fr/2.1.1-incubating/reference-cli-tools#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
+<p>You can start a broker in the background using the <a href="reference-cli-tools.md#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-daemon start broker
 </code></pre>
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-cluster" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S1 [...]
-<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="/docs/fr/2.1.1-incubating/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/fr/2.1.1-incubating/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
+<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="reference-cli-tools.md#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -300,7 +300,7 @@ $ bin/pulsar-daemon start bookie
   --namespace default \
   --name exclamation
 </code></pre>
-<p>Check if the function is running as expected by <a href="/docs/fr/2.1.1-incubating/functions-deploying#triggering-pulsar-functions">triggering</a> the function.</p>
+<p>Check if the function is running as expected by <a href="functions-deploying.md#triggering-pulsar-functions">triggering</a> the function.</p>
 <pre><code class="hljs css language-bash">bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger --name exclamation --triggerValue <span class="hljs-string">"hello world"</span>
 </code></pre>
 <p>You will see output as below:</p>
diff --git a/content/docs/fr/2.1.1-incubating/deploy-bare-metal/index.html b/content/docs/fr/2.1.1-incubating/deploy-bare-metal/index.html
index 6343ab6..1e8a011 100644
--- a/content/docs/fr/2.1.1-incubating/deploy-bare-metal/index.html
+++ b/content/docs/fr/2.1.1-incubating/deploy-bare-metal/index.html
@@ -223,7 +223,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <pre><code class="hljs">
 Once you've applied the desired configuration in <span class="hljs-code">`conf/bookkeeper.conf`</span>, you can start up a bookie on each of your BookKeeper hosts. You can start up each bookie either in the background, using [<span class="hljs-string">nohup</span>](<span class="hljs-link">https://en.wikipedia.org/wiki/Nohup</span>), or in the foreground.
 
-To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">/docs/fr/2.1.1-incubating/reference-cli-tools#pulsar-daemon</span>) CLI tool:
+To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-daemon</span>) CLI tool:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-daemon start bookie
@@ -231,18 +231,18 @@ $ bin/pulsar-daemon start bookie
 <p>To start the bookie in the foreground:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper bookie
 </code></pre>
-<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="/docs/fr/2.1.1-incubating/reference-cli-tools#shell">BookKeeper shell</a> on it:</p>
+<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on it:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell bookiesanity
 </code></pre>
 <p>This will create an ephemeral BookKeeper ledger on the local bookie, write a few entries, read them back, and finally delete the ledger.</p>
-<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="/docs/fr/2.1.1-incubating/reference-cli-tools#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
+<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell simpletest --ensemble &lt;num-bookies&gt; --writeQuorum &lt;num-bookies&gt; --ackQuorum &lt;num-bookies&gt; --numEntries &lt;num-entries&gt;
 </code></pre>
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
 <h3><a class="anchor" aria-hidden="true" id="configuring-brokers"></a><a href="#configuring-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.2 [...]
-<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="/docs/fr/2.1.1-incubating/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="/docs/fr/2.1.1-incubating/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configura [...]
+<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
@@ -250,7 +250,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="enabling-pulsar-functions-optional"></a><a href="#enabling-pulsar-functions-optional" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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>If you want to enable <a href="/docs/fr/2.1.1-incubating/functions-overview">Pulsar Functions</a>, you can follow the instructions as below:</p>
+<p>If you want to enable <a href="functions-overview.md">Pulsar Functions</a>, you can follow the instructions as below:</p>
 <ol>
 <li><p>Edit <code>conf/broker.conf</code> to enable function worker, by setting <code>functionsWorkerEnabled</code> to <code>true</code>.</p>
 <pre><code class="hljs css language-conf"><span class="hljs-attr">functionsWorkerEnabled</span>=<span class="hljs-literal">true</span>
@@ -262,17 +262,17 @@ $ bin/pulsar-daemon start bookie
 </code></pre></li>
 </ol>
 <h3><a class="anchor" aria-hidden="true" id="starting-brokers"></a><a href="#starting-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. [...]
-<p>You can then provide any other configuration changes that you'd like in the <a href="/docs/fr/2.1.1-incubating/reference-configuration#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
-<p>You can start a broker in the foreground using the <a href="/docs/fr/2.1.1-incubating/reference-cli-tools#pulsar-broker"><code>pulsar broker</code></a> command:</p>
+<p>You can then provide any other configuration changes that you'd like in the <a href="reference-configuration.md#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
+<p>You can start a broker in the foreground using the <a href="reference-cli-tools.md#pulsar-broker"><code>pulsar broker</code></a> command:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar broker
 </code></pre>
-<p>You can start a broker in the background using the <a href="/docs/fr/2.1.1-incubating/reference-cli-tools#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
+<p>You can start a broker in the background using the <a href="reference-cli-tools.md#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-daemon start broker
 </code></pre>
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-cluster" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S1 [...]
-<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="/docs/fr/2.1.1-incubating/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/fr/2.1.1-incubating/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
+<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="reference-cli-tools.md#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -300,7 +300,7 @@ $ bin/pulsar-daemon start bookie
   --namespace default \
   --name exclamation
 </code></pre>
-<p>Check if the function is running as expected by <a href="/docs/fr/2.1.1-incubating/functions-deploying#triggering-pulsar-functions">triggering</a> the function.</p>
+<p>Check if the function is running as expected by <a href="functions-deploying.md#triggering-pulsar-functions">triggering</a> the function.</p>
 <pre><code class="hljs css language-bash">bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger --name exclamation --triggerValue <span class="hljs-string">"hello world"</span>
 </code></pre>
 <p>You will see output as below:</p>
diff --git a/content/docs/fr/2.1.1-incubating/functions-quickstart.html b/content/docs/fr/2.1.1-incubating/functions-quickstart.html
index 2bb3654..b2b3156 100644
--- a/content/docs/fr/2.1.1-incubating/functions-quickstart.html
+++ b/content/docs/fr/2.1.1-incubating/functions-quickstart.html
@@ -90,7 +90,7 @@ $ bin/pulsar standalone \
 </blockquote>
 <p>--inputs topic1,topic2</p>
 <pre><code class="hljs">
-We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">/docs/fr/2.1.1-incubating/reference-cli-tools#pulsar-client</span>) tool to listen for messages on the output topic:
+We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-client</span>) tool to listen for messages on the output topic:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-client consume persistent://public/default/exclamation-output \
@@ -117,7 +117,7 @@ Hello world!
 <li>If our exclamation function <em>hadn't</em> been running, Pulsar would have durably stored the message data published to the input topic in <a href="https://bookkeeper.apache.org">Apache BookKeeper</a> until a consumer consumed and acknowledged the message</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="run-a-pulsar-function-in-cluster-mode"></a><a href="#run-a-pulsar-function-in-cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 [...]
-<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="/docs/fr/2.1.1-incubating/pulsar-admin#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
+<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="reference-pulsar-admin.md#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
 <p>This command, for example, would deploy the same exclamation function we ran locally above <em>in our Pulsar cluster</em> (rather than outside it):</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --jar examples/api-examples.jar \
@@ -201,7 +201,7 @@ Hello world!
 <p>If you see <code>Deleted successfully</code> in the output, then you've succesfully run, updated, and shut down a Pulsar Function running in cluster mode. Congrats! Now, let's go even further and run a brand new function in the next section.</p>
 <h2><a class="anchor" aria-hidden="true" id="writing-and-running-a-new-function"></a><a href="#writing-and-running-a-new-function" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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 [...]
 <blockquote>
-<p>In order to write and run the <a href="/docs/fr/2.1.1-incubating/functions-api#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
+<p>In order to write and run the <a href="functions-api.md#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
 <pre><code class="hljs css language-bash"></code></pre>
 </blockquote>
 <p>$ pip install pulsar-client</p>
diff --git a/content/docs/fr/2.1.1-incubating/functions-quickstart/index.html b/content/docs/fr/2.1.1-incubating/functions-quickstart/index.html
index 2bb3654..b2b3156 100644
--- a/content/docs/fr/2.1.1-incubating/functions-quickstart/index.html
+++ b/content/docs/fr/2.1.1-incubating/functions-quickstart/index.html
@@ -90,7 +90,7 @@ $ bin/pulsar standalone \
 </blockquote>
 <p>--inputs topic1,topic2</p>
 <pre><code class="hljs">
-We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">/docs/fr/2.1.1-incubating/reference-cli-tools#pulsar-client</span>) tool to listen for messages on the output topic:
+We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-client</span>) tool to listen for messages on the output topic:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-client consume persistent://public/default/exclamation-output \
@@ -117,7 +117,7 @@ Hello world!
 <li>If our exclamation function <em>hadn't</em> been running, Pulsar would have durably stored the message data published to the input topic in <a href="https://bookkeeper.apache.org">Apache BookKeeper</a> until a consumer consumed and acknowledged the message</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="run-a-pulsar-function-in-cluster-mode"></a><a href="#run-a-pulsar-function-in-cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 [...]
-<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="/docs/fr/2.1.1-incubating/pulsar-admin#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
+<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="reference-pulsar-admin.md#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
 <p>This command, for example, would deploy the same exclamation function we ran locally above <em>in our Pulsar cluster</em> (rather than outside it):</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --jar examples/api-examples.jar \
@@ -201,7 +201,7 @@ Hello world!
 <p>If you see <code>Deleted successfully</code> in the output, then you've succesfully run, updated, and shut down a Pulsar Function running in cluster mode. Congrats! Now, let's go even further and run a brand new function in the next section.</p>
 <h2><a class="anchor" aria-hidden="true" id="writing-and-running-a-new-function"></a><a href="#writing-and-running-a-new-function" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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 [...]
 <blockquote>
-<p>In order to write and run the <a href="/docs/fr/2.1.1-incubating/functions-api#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
+<p>In order to write and run the <a href="functions-api.md#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
 <pre><code class="hljs css language-bash"></code></pre>
 </blockquote>
 <p>$ pip install pulsar-client</p>
diff --git a/content/docs/fr/client-libraries-java.html b/content/docs/fr/client-libraries-java.html
index e96dc08..61cb84e 100644
--- a/content/docs/fr/client-libraries-java.html
+++ b/content/docs/fr/client-libraries-java.html
@@ -154,9 +154,9 @@ client.close();</p>
     .create();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="message-routing"></a><a href="#message-routing" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="/docs/fr/cookbooks-partitioned">Partitioned Topics</a> cookbook.</p>
+<p>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="cookbooks-partitioned.md">Partitioned Topics</a> cookbook.</p>
 <h3><a class="anchor" aria-hidden="true" id="async-send"></a><a href="#async-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.42-1 [...]
-<p>You can also publish messages <a href="/docs/fr/concepts-messaging#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
+<p>You can also publish messages <a href="concepts-messaging.md#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
 <p>Here's an example async send operation:</p>
 <pre><code class="hljs css language-java">producer.sendAsync(<span class="hljs-string">"my-async-message"</span>.getBytes()).thenAccept(msgId -&gt; {
     System.out.printf(<span class="hljs-string">"Message with ID %s successfully sent"</span>, msgId);
@@ -174,17 +174,17 @@ client.close();</p>
 </code></pre>
 <p>As for the previous case, it's also possible to terminate the builder chain with <code>sendAsync()</code> and get a future returned.</p>
 <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>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="/docs/fr/reference-terminology#consumer">consumer</a> by first instantiating a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
+<p>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="reference-terminology.md#consumer">consumer</a> by first instantiating a <a href="https://pulsar.incubator.apache.org/api/client/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>
 <p>Once you've instantiated a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
  object, you can create a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
- by specifying a <a href="/docs/fr/reference-terminology#topic">topic</a> and a <a href="/docs/fr/concepts-messaging#subscription-modes">subscription</a>.</p>
+ by specifying a <a href="reference-terminology.md#topic">topic</a> and a <a href="concepts-messaging.md#subscription-modes">subscription</a>.</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
         .subscriptionName(<span class="hljs-string">"my-subscription"</span>)
         .subscribe();
 </code></pre>
-<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="/docs/fr/reference-terminology#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
+<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="reference-terminology.md#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">do</span> {
   <span class="hljs-comment">// Wait for a message</span>
   Message msg = consumer.receive();
@@ -207,13 +207,13 @@ client.close();</p>
         .subscribe();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="async-receive"></a><a href="#async-receive" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="/docs/fr/concepts-messaging#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
+<p>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="concepts-messaging.md#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
 <p>Here's an example:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>Async receive operations return a {@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message} wrapped inside of a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="multi-topic-subscriptions"></a><a href="#multi-topic-subscriptions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
-<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="/docs/fr/concepts-messaging#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
+<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="concepts-messaging.md#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
 <p>Here are some examples:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
@@ -274,7 +274,7 @@ consumerBuilder
         });
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="reader-interface-readers"></a><a href="#reader-interface-readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
-<p>With the <a href="/docs/fr/concepts-clients#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
+<p>With the <a href="concepts-clients.md#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
  objects by specifying a topic, a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
 , and {@inject javadoc:ReaderConfiguration:/client/org/apache/pulsar/client/api/ReaderConfiguration}.</p>
 <p>Here's an example:</p>
@@ -294,12 +294,12 @@ Reader reader = pulsarClient.newReader()
 <p>In the example above, a <code>Reader</code> object is instantiated for a specific topic and message (by ID); the reader then iterates over each message in the topic after the message identified by <code>msgIdBytes</code> (how that value is obtained depends on the application).</p>
 <p>The code sample above shows pointing the <code>Reader</code> object to a specific message (by ID), but you can also use <code>MessageId.earliest</code> to point to the earliest available message on the topic of <code>MessageId.latest</code> to point to the most recent available message.</p>
 <h2><a class="anchor" aria-hidden="true" id="schemas"></a><a href="#schemas" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 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, all message data consists of byte arrays &quot;under the hood.&quot; <a href="/docs/fr/concepts-schema-registry">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an example:</p>
+<p>In Pulsar, all message data consists of byte arrays &quot;under the hood.&quot; <a href="concepts-schema-registry.md">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an example:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
 </code></pre>
-<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="/docs/fr/reference-terminology#topic">topic</a>.</p>
+<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="reference-terminology.md#topic">topic</a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="schema-example"></a><a href="#schema-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- [...]
 <p>Let's say that you have a <code>SensorReading</code> class that you'd like to transmit over a Pulsar topic:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SensorReading</span> </span>{
@@ -352,9 +352,9 @@ Producer&lt;MyPojo&gt; pojoProducer = client.newProducer(pojoSchema)
 </code></pre></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="authentication"></a><a href="#authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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 currently supports two authentication schemes: <a href="/docs/fr/security-tls-authentication">TLS</a> and <a href="/docs/fr/security-athenz">Athenz</a>. The Pulsar Java client can be used with both.</p>
+<p>Pulsar currently supports two authentication schemes: <a href="security-tls-authentication.md">TLS</a> and <a href="security-athenz.md">Athenz</a>. The Pulsar Java client can be used with both.</p>
 <h3><a class="anchor" aria-hidden="true" id="tls-authentication"></a><a href="#tls-authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>To use <a href="/docs/fr/security-tls-authentication">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
+<p>To use <a href="security-tls-authentication.md">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
 <p>Here's an example configuration:</p>
 <pre><code class="hljs css language-java">Map&lt;String, String&gt; authParams = <span class="hljs-keyword">new</span> HashMap&lt;&gt;();
 authParams.put(<span class="hljs-string">"tlsCertFile"</span>, <span class="hljs-string">"/path/to/client-cert.pem"</span>);
@@ -371,7 +371,7 @@ PulsarClient client = PulsarClient.builder()
         .build();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="athenz"></a><a href="#athenz" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>To use <a href="/docs/fr/security-athenz">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
+<p>To use <a href="security-athenz.md">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
 <ul>
 <li><code>tenantDomain</code></li>
 <li><code>tenantService</code></li>
diff --git a/content/docs/fr/client-libraries-java/index.html b/content/docs/fr/client-libraries-java/index.html
index e96dc08..61cb84e 100644
--- a/content/docs/fr/client-libraries-java/index.html
+++ b/content/docs/fr/client-libraries-java/index.html
@@ -154,9 +154,9 @@ client.close();</p>
     .create();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="message-routing"></a><a href="#message-routing" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="/docs/fr/cookbooks-partitioned">Partitioned Topics</a> cookbook.</p>
+<p>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="cookbooks-partitioned.md">Partitioned Topics</a> cookbook.</p>
 <h3><a class="anchor" aria-hidden="true" id="async-send"></a><a href="#async-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.42-1 [...]
-<p>You can also publish messages <a href="/docs/fr/concepts-messaging#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
+<p>You can also publish messages <a href="concepts-messaging.md#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
 <p>Here's an example async send operation:</p>
 <pre><code class="hljs css language-java">producer.sendAsync(<span class="hljs-string">"my-async-message"</span>.getBytes()).thenAccept(msgId -&gt; {
     System.out.printf(<span class="hljs-string">"Message with ID %s successfully sent"</span>, msgId);
@@ -174,17 +174,17 @@ client.close();</p>
 </code></pre>
 <p>As for the previous case, it's also possible to terminate the builder chain with <code>sendAsync()</code> and get a future returned.</p>
 <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>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="/docs/fr/reference-terminology#consumer">consumer</a> by first instantiating a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
+<p>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="reference-terminology.md#consumer">consumer</a> by first instantiating a <a href="https://pulsar.incubator.apache.org/api/client/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>
 <p>Once you've instantiated a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
  object, you can create a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
- by specifying a <a href="/docs/fr/reference-terminology#topic">topic</a> and a <a href="/docs/fr/concepts-messaging#subscription-modes">subscription</a>.</p>
+ by specifying a <a href="reference-terminology.md#topic">topic</a> and a <a href="concepts-messaging.md#subscription-modes">subscription</a>.</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
         .subscriptionName(<span class="hljs-string">"my-subscription"</span>)
         .subscribe();
 </code></pre>
-<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="/docs/fr/reference-terminology#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
+<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="reference-terminology.md#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">do</span> {
   <span class="hljs-comment">// Wait for a message</span>
   Message msg = consumer.receive();
@@ -207,13 +207,13 @@ client.close();</p>
         .subscribe();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="async-receive"></a><a href="#async-receive" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="/docs/fr/concepts-messaging#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
+<p>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="concepts-messaging.md#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
 <p>Here's an example:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>Async receive operations return a {@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message} wrapped inside of a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="multi-topic-subscriptions"></a><a href="#multi-topic-subscriptions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
-<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="/docs/fr/concepts-messaging#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
+<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="concepts-messaging.md#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
 <p>Here are some examples:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
@@ -274,7 +274,7 @@ consumerBuilder
         });
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="reader-interface-readers"></a><a href="#reader-interface-readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
-<p>With the <a href="/docs/fr/concepts-clients#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
+<p>With the <a href="concepts-clients.md#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
  objects by specifying a topic, a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
 , and {@inject javadoc:ReaderConfiguration:/client/org/apache/pulsar/client/api/ReaderConfiguration}.</p>
 <p>Here's an example:</p>
@@ -294,12 +294,12 @@ Reader reader = pulsarClient.newReader()
 <p>In the example above, a <code>Reader</code> object is instantiated for a specific topic and message (by ID); the reader then iterates over each message in the topic after the message identified by <code>msgIdBytes</code> (how that value is obtained depends on the application).</p>
 <p>The code sample above shows pointing the <code>Reader</code> object to a specific message (by ID), but you can also use <code>MessageId.earliest</code> to point to the earliest available message on the topic of <code>MessageId.latest</code> to point to the most recent available message.</p>
 <h2><a class="anchor" aria-hidden="true" id="schemas"></a><a href="#schemas" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 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, all message data consists of byte arrays &quot;under the hood.&quot; <a href="/docs/fr/concepts-schema-registry">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an example:</p>
+<p>In Pulsar, all message data consists of byte arrays &quot;under the hood.&quot; <a href="concepts-schema-registry.md">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an example:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
 </code></pre>
-<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="/docs/fr/reference-terminology#topic">topic</a>.</p>
+<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="reference-terminology.md#topic">topic</a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="schema-example"></a><a href="#schema-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- [...]
 <p>Let's say that you have a <code>SensorReading</code> class that you'd like to transmit over a Pulsar topic:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SensorReading</span> </span>{
@@ -352,9 +352,9 @@ Producer&lt;MyPojo&gt; pojoProducer = client.newProducer(pojoSchema)
 </code></pre></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="authentication"></a><a href="#authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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 currently supports two authentication schemes: <a href="/docs/fr/security-tls-authentication">TLS</a> and <a href="/docs/fr/security-athenz">Athenz</a>. The Pulsar Java client can be used with both.</p>
+<p>Pulsar currently supports two authentication schemes: <a href="security-tls-authentication.md">TLS</a> and <a href="security-athenz.md">Athenz</a>. The Pulsar Java client can be used with both.</p>
 <h3><a class="anchor" aria-hidden="true" id="tls-authentication"></a><a href="#tls-authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>To use <a href="/docs/fr/security-tls-authentication">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
+<p>To use <a href="security-tls-authentication.md">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
 <p>Here's an example configuration:</p>
 <pre><code class="hljs css language-java">Map&lt;String, String&gt; authParams = <span class="hljs-keyword">new</span> HashMap&lt;&gt;();
 authParams.put(<span class="hljs-string">"tlsCertFile"</span>, <span class="hljs-string">"/path/to/client-cert.pem"</span>);
@@ -371,7 +371,7 @@ PulsarClient client = PulsarClient.builder()
         .build();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="athenz"></a><a href="#athenz" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>To use <a href="/docs/fr/security-athenz">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
+<p>To use <a href="security-athenz.md">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
 <ul>
 <li><code>tenantDomain</code></li>
 <li><code>tenantService</code></li>
diff --git a/content/docs/fr/deploy-aws.html b/content/docs/fr/deploy-aws.html
index 3b72396..c0ea2aa 100644
--- a/content/docs/fr/deploy-aws.html
+++ b/content/docs/fr/deploy-aws.html
@@ -138,9 +138,9 @@ id_rsa               id_rsa.pub
 <li>9 total <a href="https://aws.amazon.com/ec2">Elastic Compute Cloud</a> (EC2) instances running the <a href="https://access.redhat.com/articles/3135091">ami-9fa343e7</a> Amazon Machine Image (AMI), which runs <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/7.4_release_notes/index">Red Hat Enterprise Linux (RHEL) 7.4</a>. By default, that includes:
 <ul>
 <li>3 small VMs for ZooKeeper (<a href="https://www.ec2instances.info/?selected=t2.small">t2.small</a> instances)</li>
-<li>3 larger VMs for BookKeeper <a href="/docs/fr/reference-terminology#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
-<li>2 larger VMs for Pulsar <a href="/docs/fr/reference-terminology#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
-<li>1 larger VMs for Pulsar <a href="/docs/fr/reference-terminology#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>3 larger VMs for BookKeeper <a href="reference-terminology.md#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
+<li>2 larger VMs for Pulsar <a href="reference-terminology.md#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>1 larger VMs for Pulsar <a href="reference-terminology.md#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
 </ul></li>
 <li>An EC2 <a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html">security group</a></li>
 <li>A <a href="https://aws.amazon.com/vpc/">virtual private cloud</a> (VPC) for security</li>
diff --git a/content/docs/fr/deploy-aws/index.html b/content/docs/fr/deploy-aws/index.html
index 3b72396..c0ea2aa 100644
--- a/content/docs/fr/deploy-aws/index.html
+++ b/content/docs/fr/deploy-aws/index.html
@@ -138,9 +138,9 @@ id_rsa               id_rsa.pub
 <li>9 total <a href="https://aws.amazon.com/ec2">Elastic Compute Cloud</a> (EC2) instances running the <a href="https://access.redhat.com/articles/3135091">ami-9fa343e7</a> Amazon Machine Image (AMI), which runs <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/7.4_release_notes/index">Red Hat Enterprise Linux (RHEL) 7.4</a>. By default, that includes:
 <ul>
 <li>3 small VMs for ZooKeeper (<a href="https://www.ec2instances.info/?selected=t2.small">t2.small</a> instances)</li>
-<li>3 larger VMs for BookKeeper <a href="/docs/fr/reference-terminology#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
-<li>2 larger VMs for Pulsar <a href="/docs/fr/reference-terminology#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
-<li>1 larger VMs for Pulsar <a href="/docs/fr/reference-terminology#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>3 larger VMs for BookKeeper <a href="reference-terminology.md#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
+<li>2 larger VMs for Pulsar <a href="reference-terminology.md#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>1 larger VMs for Pulsar <a href="reference-terminology.md#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
 </ul></li>
 <li>An EC2 <a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html">security group</a></li>
 <li>A <a href="https://aws.amazon.com/vpc/">virtual private cloud</a> (VPC) for security</li>
diff --git a/content/docs/fr/deploy-bare-metal.html b/content/docs/fr/deploy-bare-metal.html
index ad97ace..7c9bbac 100644
--- a/content/docs/fr/deploy-bare-metal.html
+++ b/content/docs/fr/deploy-bare-metal.html
@@ -223,7 +223,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <pre><code class="hljs">
 Once you've applied the desired configuration in <span class="hljs-code">`conf/bookkeeper.conf`</span>, you can start up a bookie on each of your BookKeeper hosts. You can start up each bookie either in the background, using [<span class="hljs-string">nohup</span>](<span class="hljs-link">https://en.wikipedia.org/wiki/Nohup</span>), or in the foreground.
 
-To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">/docs/fr/reference-cli-tools#pulsar-daemon</span>) CLI tool:
+To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-daemon</span>) CLI tool:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-daemon start bookie
@@ -231,18 +231,18 @@ $ bin/pulsar-daemon start bookie
 <p>To start the bookie in the foreground:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper bookie
 </code></pre>
-<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="/docs/fr/reference-cli-tools#shell">BookKeeper shell</a> on it:</p>
+<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on it:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell bookiesanity
 </code></pre>
 <p>This will create an ephemeral BookKeeper ledger on the local bookie, write a few entries, read them back, and finally delete the ledger.</p>
-<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="/docs/fr/reference-cli-tools#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
+<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell simpletest --ensemble &lt;num-bookies&gt; --writeQuorum &lt;num-bookies&gt; --ackQuorum &lt;num-bookies&gt; --numEntries &lt;num-entries&gt;
 </code></pre>
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
 <h3><a class="anchor" aria-hidden="true" id="configuring-brokers"></a><a href="#configuring-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.2 [...]
-<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="/docs/fr/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="/docs/fr/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>config [...]
+<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
@@ -250,7 +250,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="enabling-pulsar-functions-optional"></a><a href="#enabling-pulsar-functions-optional" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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>If you want to enable <a href="/docs/fr/functions-overview">Pulsar Functions</a>, you can follow the instructions as below:</p>
+<p>If you want to enable <a href="functions-overview.md">Pulsar Functions</a>, you can follow the instructions as below:</p>
 <ol>
 <li><p>Edit <code>conf/broker.conf</code> to enable function worker, by setting <code>functionsWorkerEnabled</code> to <code>true</code>.</p>
 <pre><code class="hljs css language-conf"><span class="hljs-attr">functionsWorkerEnabled</span>=<span class="hljs-literal">true</span>
@@ -262,17 +262,17 @@ $ bin/pulsar-daemon start bookie
 </code></pre></li>
 </ol>
 <h3><a class="anchor" aria-hidden="true" id="starting-brokers"></a><a href="#starting-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. [...]
-<p>You can then provide any other configuration changes that you'd like in the <a href="/docs/fr/reference-configuration#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
-<p>You can start a broker in the foreground using the <a href="/docs/fr/reference-cli-tools#pulsar-broker"><code>pulsar broker</code></a> command:</p>
+<p>You can then provide any other configuration changes that you'd like in the <a href="reference-configuration.md#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
+<p>You can start a broker in the foreground using the <a href="reference-cli-tools.md#pulsar-broker"><code>pulsar broker</code></a> command:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar broker
 </code></pre>
-<p>You can start a broker in the background using the <a href="/docs/fr/reference-cli-tools#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
+<p>You can start a broker in the background using the <a href="reference-cli-tools.md#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-daemon start broker
 </code></pre>
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-cluster" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S1 [...]
-<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="/docs/fr/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/fr/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
+<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="reference-cli-tools.md#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -300,7 +300,7 @@ $ bin/pulsar-daemon start bookie
   --namespace default \
   --name exclamation
 </code></pre>
-<p>Check if the function is running as expected by <a href="/docs/fr/functions-deploying#triggering-pulsar-functions">triggering</a> the function.</p>
+<p>Check if the function is running as expected by <a href="functions-deploying.md#triggering-pulsar-functions">triggering</a> the function.</p>
 <pre><code class="hljs css language-bash">bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger --name exclamation --trigger-value <span class="hljs-string">"hello world"</span>
 </code></pre>
 <p>You will see output as below:</p>
diff --git a/content/docs/fr/deploy-bare-metal/index.html b/content/docs/fr/deploy-bare-metal/index.html
index ad97ace..7c9bbac 100644
--- a/content/docs/fr/deploy-bare-metal/index.html
+++ b/content/docs/fr/deploy-bare-metal/index.html
@@ -223,7 +223,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <pre><code class="hljs">
 Once you've applied the desired configuration in <span class="hljs-code">`conf/bookkeeper.conf`</span>, you can start up a bookie on each of your BookKeeper hosts. You can start up each bookie either in the background, using [<span class="hljs-string">nohup</span>](<span class="hljs-link">https://en.wikipedia.org/wiki/Nohup</span>), or in the foreground.
 
-To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">/docs/fr/reference-cli-tools#pulsar-daemon</span>) CLI tool:
+To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-daemon</span>) CLI tool:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-daemon start bookie
@@ -231,18 +231,18 @@ $ bin/pulsar-daemon start bookie
 <p>To start the bookie in the foreground:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper bookie
 </code></pre>
-<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="/docs/fr/reference-cli-tools#shell">BookKeeper shell</a> on it:</p>
+<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on it:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell bookiesanity
 </code></pre>
 <p>This will create an ephemeral BookKeeper ledger on the local bookie, write a few entries, read them back, and finally delete the ledger.</p>
-<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="/docs/fr/reference-cli-tools#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
+<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell simpletest --ensemble &lt;num-bookies&gt; --writeQuorum &lt;num-bookies&gt; --ackQuorum &lt;num-bookies&gt; --numEntries &lt;num-entries&gt;
 </code></pre>
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
 <h3><a class="anchor" aria-hidden="true" id="configuring-brokers"></a><a href="#configuring-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.2 [...]
-<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="/docs/fr/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="/docs/fr/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>config [...]
+<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
@@ -250,7 +250,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="enabling-pulsar-functions-optional"></a><a href="#enabling-pulsar-functions-optional" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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>If you want to enable <a href="/docs/fr/functions-overview">Pulsar Functions</a>, you can follow the instructions as below:</p>
+<p>If you want to enable <a href="functions-overview.md">Pulsar Functions</a>, you can follow the instructions as below:</p>
 <ol>
 <li><p>Edit <code>conf/broker.conf</code> to enable function worker, by setting <code>functionsWorkerEnabled</code> to <code>true</code>.</p>
 <pre><code class="hljs css language-conf"><span class="hljs-attr">functionsWorkerEnabled</span>=<span class="hljs-literal">true</span>
@@ -262,17 +262,17 @@ $ bin/pulsar-daemon start bookie
 </code></pre></li>
 </ol>
 <h3><a class="anchor" aria-hidden="true" id="starting-brokers"></a><a href="#starting-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. [...]
-<p>You can then provide any other configuration changes that you'd like in the <a href="/docs/fr/reference-configuration#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
-<p>You can start a broker in the foreground using the <a href="/docs/fr/reference-cli-tools#pulsar-broker"><code>pulsar broker</code></a> command:</p>
+<p>You can then provide any other configuration changes that you'd like in the <a href="reference-configuration.md#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
+<p>You can start a broker in the foreground using the <a href="reference-cli-tools.md#pulsar-broker"><code>pulsar broker</code></a> command:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar broker
 </code></pre>
-<p>You can start a broker in the background using the <a href="/docs/fr/reference-cli-tools#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
+<p>You can start a broker in the background using the <a href="reference-cli-tools.md#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-daemon start broker
 </code></pre>
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-cluster" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S1 [...]
-<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="/docs/fr/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/fr/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
+<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="reference-cli-tools.md#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -300,7 +300,7 @@ $ bin/pulsar-daemon start bookie
   --namespace default \
   --name exclamation
 </code></pre>
-<p>Check if the function is running as expected by <a href="/docs/fr/functions-deploying#triggering-pulsar-functions">triggering</a> the function.</p>
+<p>Check if the function is running as expected by <a href="functions-deploying.md#triggering-pulsar-functions">triggering</a> the function.</p>
 <pre><code class="hljs css language-bash">bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger --name exclamation --trigger-value <span class="hljs-string">"hello world"</span>
 </code></pre>
 <p>You will see output as below:</p>
diff --git a/content/docs/fr/functions-quickstart.html b/content/docs/fr/functions-quickstart.html
index 9299427..283491f 100644
--- a/content/docs/fr/functions-quickstart.html
+++ b/content/docs/fr/functions-quickstart.html
@@ -90,7 +90,7 @@ $ bin/pulsar standalone \
 </blockquote>
 <p>--inputs topic1,topic2</p>
 <pre><code class="hljs">
-We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">/docs/fr/reference-cli-tools#pulsar-client</span>) tool to listen for messages on the output topic:
+We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-client</span>) tool to listen for messages on the output topic:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-client consume persistent://public/default/exclamation-output \
@@ -117,7 +117,7 @@ Hello world!
 <li>If our exclamation function <em>hadn't</em> been running, Pulsar would have durably stored the message data published to the input topic in <a href="https://bookkeeper.apache.org">Apache BookKeeper</a> until a consumer consumed and acknowledged the message</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="run-a-pulsar-function-in-cluster-mode"></a><a href="#run-a-pulsar-function-in-cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 [...]
-<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="/docs/fr/pulsar-admin#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
+<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="reference-pulsar-admin.md#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
 <p>This command, for example, would deploy the same exclamation function we ran locally above <em>in our Pulsar cluster</em> (rather than outside it):</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --jar examples/api-examples.jar \
@@ -201,7 +201,7 @@ Hello world!
 <p>If you see <code>Deleted successfully</code> in the output, then you've succesfully run, updated, and shut down a Pulsar Function running in cluster mode. Congrats! Now, let's go even further and run a brand new function in the next section.</p>
 <h2><a class="anchor" aria-hidden="true" id="writing-and-running-a-new-function"></a><a href="#writing-and-running-a-new-function" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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 [...]
 <blockquote>
-<p>In order to write and run the <a href="/docs/fr/functions-api#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
+<p>In order to write and run the <a href="functions-api.md#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
 <pre><code class="hljs css language-bash"></code></pre>
 </blockquote>
 <p>$ pip install pulsar-client</p>
diff --git a/content/docs/fr/functions-quickstart/index.html b/content/docs/fr/functions-quickstart/index.html
index 9299427..283491f 100644
--- a/content/docs/fr/functions-quickstart/index.html
+++ b/content/docs/fr/functions-quickstart/index.html
@@ -90,7 +90,7 @@ $ bin/pulsar standalone \
 </blockquote>
 <p>--inputs topic1,topic2</p>
 <pre><code class="hljs">
-We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">/docs/fr/reference-cli-tools#pulsar-client</span>) tool to listen for messages on the output topic:
+We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-client</span>) tool to listen for messages on the output topic:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-client consume persistent://public/default/exclamation-output \
@@ -117,7 +117,7 @@ Hello world!
 <li>If our exclamation function <em>hadn't</em> been running, Pulsar would have durably stored the message data published to the input topic in <a href="https://bookkeeper.apache.org">Apache BookKeeper</a> until a consumer consumed and acknowledged the message</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="run-a-pulsar-function-in-cluster-mode"></a><a href="#run-a-pulsar-function-in-cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 [...]
-<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="/docs/fr/pulsar-admin#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
+<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="reference-pulsar-admin.md#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
 <p>This command, for example, would deploy the same exclamation function we ran locally above <em>in our Pulsar cluster</em> (rather than outside it):</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --jar examples/api-examples.jar \
@@ -201,7 +201,7 @@ Hello world!
 <p>If you see <code>Deleted successfully</code> in the output, then you've succesfully run, updated, and shut down a Pulsar Function running in cluster mode. Congrats! Now, let's go even further and run a brand new function in the next section.</p>
 <h2><a class="anchor" aria-hidden="true" id="writing-and-running-a-new-function"></a><a href="#writing-and-running-a-new-function" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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 [...]
 <blockquote>
-<p>In order to write and run the <a href="/docs/fr/functions-api#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
+<p>In order to write and run the <a href="functions-api.md#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
 <pre><code class="hljs css language-bash"></code></pre>
 </blockquote>
 <p>$ pip install pulsar-client</p>
diff --git a/content/docs/fr/next/client-libraries-java.html b/content/docs/fr/next/client-libraries-java.html
index 7a15e25..788f371 100644
--- a/content/docs/fr/next/client-libraries-java.html
+++ b/content/docs/fr/next/client-libraries-java.html
@@ -153,9 +153,9 @@ client.close();</p>
     .create();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="message-routing"></a><a href="#message-routing" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="/docs/fr/next/cookbooks-partitioned">Partitioned Topics</a> cookbook.</p>
+<p>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="cookbooks-partitioned.md">Partitioned Topics</a> cookbook.</p>
 <h3><a class="anchor" aria-hidden="true" id="async-send"></a><a href="#async-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.42-1 [...]
-<p>You can also publish messages <a href="/docs/fr/next/concepts-messaging#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
+<p>You can also publish messages <a href="concepts-messaging.md#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
 <p>Here's an example async send operation:</p>
 <pre><code class="hljs css language-java">producer.sendAsync(<span class="hljs-string">"my-async-message"</span>.getBytes()).thenAccept(msgId -&gt; {
     System.out.printf(<span class="hljs-string">"Message with ID %s successfully sent"</span>, msgId);
@@ -173,17 +173,17 @@ client.close();</p>
 </code></pre>
 <p>As for the previous case, it's also possible to terminate the builder chain with <code>sendAsync()</code> and get a future returned.</p>
 <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>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="/docs/fr/next/reference-terminology#consumer">consumer</a> by first instantiating a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
+<p>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="reference-terminology.md#consumer">consumer</a> by first instantiating a <a href="https://pulsar.incubator.apache.org/api/client/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>
 <p>Once you've instantiated a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
  object, you can create a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
- by specifying a <a href="/docs/fr/next/reference-terminology#topic">topic</a> and a <a href="/docs/fr/next/concepts-messaging#subscription-modes">subscription</a>.</p>
+ by specifying a <a href="reference-terminology.md#topic">topic</a> and a <a href="concepts-messaging.md#subscription-modes">subscription</a>.</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
         .subscriptionName(<span class="hljs-string">"my-subscription"</span>)
         .subscribe();
 </code></pre>
-<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="/docs/fr/next/reference-terminology#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
+<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="reference-terminology.md#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">do</span> {
   <span class="hljs-comment">// Wait for a message</span>
   Message msg = consumer.receive();
@@ -206,13 +206,13 @@ client.close();</p>
         .subscribe();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="async-receive"></a><a href="#async-receive" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="/docs/fr/next/concepts-messaging#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
+<p>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="concepts-messaging.md#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
 <p>Here's an example:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>Async receive operations return a {@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message} wrapped inside of a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="multi-topic-subscriptions"></a><a href="#multi-topic-subscriptions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
-<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="/docs/fr/next/concepts-messaging#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
+<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="concepts-messaging.md#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
 <p>Here are some examples:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
@@ -273,7 +273,7 @@ consumerBuilder
         });
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="reader-interface-readers"></a><a href="#reader-interface-readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
-<p>With the <a href="/docs/fr/next/concepts-clients#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
+<p>With the <a href="concepts-clients.md#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
  objects by specifying a topic, a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
 , and {@inject javadoc:ReaderConfiguration:/client/org/apache/pulsar/client/api/ReaderConfiguration}.</p>
 <p>Here's an example:</p>
@@ -293,12 +293,12 @@ Reader reader = pulsarClient.newReader()
 <p>In the example above, a <code>Reader</code> object is instantiated for a specific topic and message (by ID); the reader then iterates over each message in the topic after the message identified by <code>msgIdBytes</code> (how that value is obtained depends on the application).</p>
 <p>The code sample above shows pointing the <code>Reader</code> object to a specific message (by ID), but you can also use <code>MessageId.earliest</code> to point to the earliest available message on the topic of <code>MessageId.latest</code> to point to the most recent available message.</p>
 <h2><a class="anchor" aria-hidden="true" id="schemas"></a><a href="#schemas" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 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, all message data consists of byte arrays &quot;under the hood.&quot; <a href="/docs/fr/next/concepts-schema-registry">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an example:</p>
+<p>In Pulsar, all message data consists of byte arrays &quot;under the hood.&quot; <a href="concepts-schema-registry.md">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an example:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
 </code></pre>
-<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="/docs/fr/next/reference-terminology#topic">topic</a>.</p>
+<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="reference-terminology.md#topic">topic</a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="schema-example"></a><a href="#schema-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- [...]
 <p>Let's say that you have a <code>SensorReading</code> class that you'd like to transmit over a Pulsar topic:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SensorReading</span> </span>{
@@ -351,9 +351,9 @@ Producer&lt;MyPojo&gt; pojoProducer = client.newProducer(pojoSchema)
 </code></pre></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="authentication"></a><a href="#authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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 currently supports two authentication schemes: <a href="/docs/fr/next/security-tls-authentication">TLS</a> and <a href="/docs/fr/next/security-athenz">Athenz</a>. The Pulsar Java client can be used with both.</p>
+<p>Pulsar currently supports two authentication schemes: <a href="security-tls-authentication.md">TLS</a> and <a href="security-athenz.md">Athenz</a>. The Pulsar Java client can be used with both.</p>
 <h3><a class="anchor" aria-hidden="true" id="tls-authentication"></a><a href="#tls-authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>To use <a href="/docs/fr/next/security-tls-authentication">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
+<p>To use <a href="security-tls-authentication.md">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
 <p>Here's an example configuration:</p>
 <pre><code class="hljs css language-java">Map&lt;String, String&gt; authParams = <span class="hljs-keyword">new</span> HashMap&lt;&gt;();
 authParams.put(<span class="hljs-string">"tlsCertFile"</span>, <span class="hljs-string">"/path/to/client-cert.pem"</span>);
@@ -370,7 +370,7 @@ PulsarClient client = PulsarClient.builder()
         .build();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="athenz"></a><a href="#athenz" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>To use <a href="/docs/fr/next/security-athenz">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
+<p>To use <a href="security-athenz.md">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
 <ul>
 <li><code>tenantDomain</code></li>
 <li><code>tenantService</code></li>
diff --git a/content/docs/fr/next/client-libraries-java/index.html b/content/docs/fr/next/client-libraries-java/index.html
index 7a15e25..788f371 100644
--- a/content/docs/fr/next/client-libraries-java/index.html
+++ b/content/docs/fr/next/client-libraries-java/index.html
@@ -153,9 +153,9 @@ client.close();</p>
     .create();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="message-routing"></a><a href="#message-routing" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="/docs/fr/next/cookbooks-partitioned">Partitioned Topics</a> cookbook.</p>
+<p>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="cookbooks-partitioned.md">Partitioned Topics</a> cookbook.</p>
 <h3><a class="anchor" aria-hidden="true" id="async-send"></a><a href="#async-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.42-1 [...]
-<p>You can also publish messages <a href="/docs/fr/next/concepts-messaging#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
+<p>You can also publish messages <a href="concepts-messaging.md#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
 <p>Here's an example async send operation:</p>
 <pre><code class="hljs css language-java">producer.sendAsync(<span class="hljs-string">"my-async-message"</span>.getBytes()).thenAccept(msgId -&gt; {
     System.out.printf(<span class="hljs-string">"Message with ID %s successfully sent"</span>, msgId);
@@ -173,17 +173,17 @@ client.close();</p>
 </code></pre>
 <p>As for the previous case, it's also possible to terminate the builder chain with <code>sendAsync()</code> and get a future returned.</p>
 <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>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="/docs/fr/next/reference-terminology#consumer">consumer</a> by first instantiating a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
+<p>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="reference-terminology.md#consumer">consumer</a> by first instantiating a <a href="https://pulsar.incubator.apache.org/api/client/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>
 <p>Once you've instantiated a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
  object, you can create a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
- by specifying a <a href="/docs/fr/next/reference-terminology#topic">topic</a> and a <a href="/docs/fr/next/concepts-messaging#subscription-modes">subscription</a>.</p>
+ by specifying a <a href="reference-terminology.md#topic">topic</a> and a <a href="concepts-messaging.md#subscription-modes">subscription</a>.</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
         .subscriptionName(<span class="hljs-string">"my-subscription"</span>)
         .subscribe();
 </code></pre>
-<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="/docs/fr/next/reference-terminology#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
+<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="reference-terminology.md#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">do</span> {
   <span class="hljs-comment">// Wait for a message</span>
   Message msg = consumer.receive();
@@ -206,13 +206,13 @@ client.close();</p>
         .subscribe();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="async-receive"></a><a href="#async-receive" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="/docs/fr/next/concepts-messaging#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
+<p>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="concepts-messaging.md#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
 <p>Here's an example:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>Async receive operations return a {@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message} wrapped inside of a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="multi-topic-subscriptions"></a><a href="#multi-topic-subscriptions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
-<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="/docs/fr/next/concepts-messaging#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
+<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="concepts-messaging.md#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
 <p>Here are some examples:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
@@ -273,7 +273,7 @@ consumerBuilder
         });
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="reader-interface-readers"></a><a href="#reader-interface-readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
-<p>With the <a href="/docs/fr/next/concepts-clients#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
+<p>With the <a href="concepts-clients.md#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
  objects by specifying a topic, a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
 , and {@inject javadoc:ReaderConfiguration:/client/org/apache/pulsar/client/api/ReaderConfiguration}.</p>
 <p>Here's an example:</p>
@@ -293,12 +293,12 @@ Reader reader = pulsarClient.newReader()
 <p>In the example above, a <code>Reader</code> object is instantiated for a specific topic and message (by ID); the reader then iterates over each message in the topic after the message identified by <code>msgIdBytes</code> (how that value is obtained depends on the application).</p>
 <p>The code sample above shows pointing the <code>Reader</code> object to a specific message (by ID), but you can also use <code>MessageId.earliest</code> to point to the earliest available message on the topic of <code>MessageId.latest</code> to point to the most recent available message.</p>
 <h2><a class="anchor" aria-hidden="true" id="schemas"></a><a href="#schemas" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 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, all message data consists of byte arrays &quot;under the hood.&quot; <a href="/docs/fr/next/concepts-schema-registry">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an example:</p>
+<p>In Pulsar, all message data consists of byte arrays &quot;under the hood.&quot; <a href="concepts-schema-registry.md">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an example:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
 </code></pre>
-<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="/docs/fr/next/reference-terminology#topic">topic</a>.</p>
+<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="reference-terminology.md#topic">topic</a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="schema-example"></a><a href="#schema-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- [...]
 <p>Let's say that you have a <code>SensorReading</code> class that you'd like to transmit over a Pulsar topic:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SensorReading</span> </span>{
@@ -351,9 +351,9 @@ Producer&lt;MyPojo&gt; pojoProducer = client.newProducer(pojoSchema)
 </code></pre></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="authentication"></a><a href="#authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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 currently supports two authentication schemes: <a href="/docs/fr/next/security-tls-authentication">TLS</a> and <a href="/docs/fr/next/security-athenz">Athenz</a>. The Pulsar Java client can be used with both.</p>
+<p>Pulsar currently supports two authentication schemes: <a href="security-tls-authentication.md">TLS</a> and <a href="security-athenz.md">Athenz</a>. The Pulsar Java client can be used with both.</p>
 <h3><a class="anchor" aria-hidden="true" id="tls-authentication"></a><a href="#tls-authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>To use <a href="/docs/fr/next/security-tls-authentication">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
+<p>To use <a href="security-tls-authentication.md">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
 <p>Here's an example configuration:</p>
 <pre><code class="hljs css language-java">Map&lt;String, String&gt; authParams = <span class="hljs-keyword">new</span> HashMap&lt;&gt;();
 authParams.put(<span class="hljs-string">"tlsCertFile"</span>, <span class="hljs-string">"/path/to/client-cert.pem"</span>);
@@ -370,7 +370,7 @@ PulsarClient client = PulsarClient.builder()
         .build();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="athenz"></a><a href="#athenz" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>To use <a href="/docs/fr/next/security-athenz">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
+<p>To use <a href="security-athenz.md">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
 <ul>
 <li><code>tenantDomain</code></li>
 <li><code>tenantService</code></li>
diff --git a/content/docs/fr/next/deploy-aws.html b/content/docs/fr/next/deploy-aws.html
index 7f0bd53..5cdc462 100644
--- a/content/docs/fr/next/deploy-aws.html
+++ b/content/docs/fr/next/deploy-aws.html
@@ -138,9 +138,9 @@ id_rsa               id_rsa.pub
 <li>9 total <a href="https://aws.amazon.com/ec2">Elastic Compute Cloud</a> (EC2) instances running the <a href="https://access.redhat.com/articles/3135091">ami-9fa343e7</a> Amazon Machine Image (AMI), which runs <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/7.4_release_notes/index">Red Hat Enterprise Linux (RHEL) 7.4</a>. By default, that includes:
 <ul>
 <li>3 small VMs for ZooKeeper (<a href="https://www.ec2instances.info/?selected=t2.small">t2.small</a> instances)</li>
-<li>3 larger VMs for BookKeeper <a href="/docs/fr/next/reference-terminology#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
-<li>2 larger VMs for Pulsar <a href="/docs/fr/next/reference-terminology#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
-<li>1 larger VMs for Pulsar <a href="/docs/fr/next/reference-terminology#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>3 larger VMs for BookKeeper <a href="reference-terminology.md#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
+<li>2 larger VMs for Pulsar <a href="reference-terminology.md#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>1 larger VMs for Pulsar <a href="reference-terminology.md#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
 </ul></li>
 <li>An EC2 <a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html">security group</a></li>
 <li>A <a href="https://aws.amazon.com/vpc/">virtual private cloud</a> (VPC) for security</li>
diff --git a/content/docs/fr/next/deploy-aws/index.html b/content/docs/fr/next/deploy-aws/index.html
index 7f0bd53..5cdc462 100644
--- a/content/docs/fr/next/deploy-aws/index.html
+++ b/content/docs/fr/next/deploy-aws/index.html
@@ -138,9 +138,9 @@ id_rsa               id_rsa.pub
 <li>9 total <a href="https://aws.amazon.com/ec2">Elastic Compute Cloud</a> (EC2) instances running the <a href="https://access.redhat.com/articles/3135091">ami-9fa343e7</a> Amazon Machine Image (AMI), which runs <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/7.4_release_notes/index">Red Hat Enterprise Linux (RHEL) 7.4</a>. By default, that includes:
 <ul>
 <li>3 small VMs for ZooKeeper (<a href="https://www.ec2instances.info/?selected=t2.small">t2.small</a> instances)</li>
-<li>3 larger VMs for BookKeeper <a href="/docs/fr/next/reference-terminology#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
-<li>2 larger VMs for Pulsar <a href="/docs/fr/next/reference-terminology#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
-<li>1 larger VMs for Pulsar <a href="/docs/fr/next/reference-terminology#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>3 larger VMs for BookKeeper <a href="reference-terminology.md#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
+<li>2 larger VMs for Pulsar <a href="reference-terminology.md#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>1 larger VMs for Pulsar <a href="reference-terminology.md#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
 </ul></li>
 <li>An EC2 <a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html">security group</a></li>
 <li>A <a href="https://aws.amazon.com/vpc/">virtual private cloud</a> (VPC) for security</li>
diff --git a/content/docs/fr/next/deploy-bare-metal.html b/content/docs/fr/next/deploy-bare-metal.html
index 0e13bb4..6569618 100644
--- a/content/docs/fr/next/deploy-bare-metal.html
+++ b/content/docs/fr/next/deploy-bare-metal.html
@@ -223,7 +223,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <pre><code class="hljs">
 Once you've applied the desired configuration in <span class="hljs-code">`conf/bookkeeper.conf`</span>, you can start up a bookie on each of your BookKeeper hosts. You can start up each bookie either in the background, using [<span class="hljs-string">nohup</span>](<span class="hljs-link">https://en.wikipedia.org/wiki/Nohup</span>), or in the foreground.
 
-To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">/docs/fr/next/reference-cli-tools#pulsar-daemon</span>) CLI tool:
+To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-daemon</span>) CLI tool:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-daemon start bookie
@@ -231,18 +231,18 @@ $ bin/pulsar-daemon start bookie
 <p>To start the bookie in the foreground:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper bookie
 </code></pre>
-<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="/docs/fr/next/reference-cli-tools#shell">BookKeeper shell</a> on it:</p>
+<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on it:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell bookiesanity
 </code></pre>
 <p>This will create an ephemeral BookKeeper ledger on the local bookie, write a few entries, read them back, and finally delete the ledger.</p>
-<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="/docs/fr/next/reference-cli-tools#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
+<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell simpletest --ensemble &lt;num-bookies&gt; --writeQuorum &lt;num-bookies&gt; --ackQuorum &lt;num-bookies&gt; --numEntries &lt;num-entries&gt;
 </code></pre>
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
 <h3><a class="anchor" aria-hidden="true" id="configuring-brokers"></a><a href="#configuring-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.2 [...]
-<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="/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. In this case, since we only have 1 cluster and no configuration store setup, the <c [...]
+<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
@@ -250,7 +250,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="enabling-pulsar-functions-optional"></a><a href="#enabling-pulsar-functions-optional" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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>If you want to enable <a href="/docs/fr/next/functions-overview">Pulsar Functions</a>, you can follow the instructions as below:</p>
+<p>If you want to enable <a href="functions-overview.md">Pulsar Functions</a>, you can follow the instructions as below:</p>
 <ol>
 <li><p>Edit <code>conf/broker.conf</code> to enable function worker, by setting <code>functionsWorkerEnabled</code> to <code>true</code>.</p>
 <pre><code class="hljs css language-conf"><span class="hljs-attr">functionsWorkerEnabled</span>=<span class="hljs-literal">true</span>
@@ -262,17 +262,17 @@ $ bin/pulsar-daemon start bookie
 </code></pre></li>
 </ol>
 <h3><a class="anchor" aria-hidden="true" id="starting-brokers"></a><a href="#starting-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. [...]
-<p>You can then provide any other configuration changes that you'd like in the <a href="/docs/fr/next/reference-configuration#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
-<p>You can start a broker in the foreground using the <a href="/docs/fr/next/reference-cli-tools#pulsar-broker"><code>pulsar broker</code></a> command:</p>
+<p>You can then provide any other configuration changes that you'd like in the <a href="reference-configuration.md#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
+<p>You can start a broker in the foreground using the <a href="reference-cli-tools.md#pulsar-broker"><code>pulsar broker</code></a> command:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar broker
 </code></pre>
-<p>You can start a broker in the background using the <a href="/docs/fr/next/reference-cli-tools#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
+<p>You can start a broker in the background using the <a href="reference-cli-tools.md#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-daemon start broker
 </code></pre>
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-cluster" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S1 [...]
-<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="/docs/fr/next/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/fr/next/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
+<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="reference-cli-tools.md#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -300,7 +300,7 @@ $ bin/pulsar-daemon start bookie
   --namespace default \
   --name exclamation
 </code></pre>
-<p>Check if the function is running as expected by <a href="/docs/fr/next/functions-deploying#triggering-pulsar-functions">triggering</a> the function.</p>
+<p>Check if the function is running as expected by <a href="functions-deploying.md#triggering-pulsar-functions">triggering</a> the function.</p>
 <pre><code class="hljs css language-bash">bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger --name exclamation --trigger-value <span class="hljs-string">"hello world"</span>
 </code></pre>
 <p>You will see output as below:</p>
diff --git a/content/docs/fr/next/deploy-bare-metal/index.html b/content/docs/fr/next/deploy-bare-metal/index.html
index 0e13bb4..6569618 100644
--- a/content/docs/fr/next/deploy-bare-metal/index.html
+++ b/content/docs/fr/next/deploy-bare-metal/index.html
@@ -223,7 +223,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <pre><code class="hljs">
 Once you've applied the desired configuration in <span class="hljs-code">`conf/bookkeeper.conf`</span>, you can start up a bookie on each of your BookKeeper hosts. You can start up each bookie either in the background, using [<span class="hljs-string">nohup</span>](<span class="hljs-link">https://en.wikipedia.org/wiki/Nohup</span>), or in the foreground.
 
-To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">/docs/fr/next/reference-cli-tools#pulsar-daemon</span>) CLI tool:
+To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-daemon</span>) CLI tool:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-daemon start bookie
@@ -231,18 +231,18 @@ $ bin/pulsar-daemon start bookie
 <p>To start the bookie in the foreground:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper bookie
 </code></pre>
-<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="/docs/fr/next/reference-cli-tools#shell">BookKeeper shell</a> on it:</p>
+<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on it:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell bookiesanity
 </code></pre>
 <p>This will create an ephemeral BookKeeper ledger on the local bookie, write a few entries, read them back, and finally delete the ledger.</p>
-<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="/docs/fr/next/reference-cli-tools#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
+<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell simpletest --ensemble &lt;num-bookies&gt; --writeQuorum &lt;num-bookies&gt; --ackQuorum &lt;num-bookies&gt; --numEntries &lt;num-entries&gt;
 </code></pre>
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
 <h3><a class="anchor" aria-hidden="true" id="configuring-brokers"></a><a href="#configuring-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.2 [...]
-<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="/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. In this case, since we only have 1 cluster and no configuration store setup, the <c [...]
+<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
@@ -250,7 +250,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="enabling-pulsar-functions-optional"></a><a href="#enabling-pulsar-functions-optional" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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>If you want to enable <a href="/docs/fr/next/functions-overview">Pulsar Functions</a>, you can follow the instructions as below:</p>
+<p>If you want to enable <a href="functions-overview.md">Pulsar Functions</a>, you can follow the instructions as below:</p>
 <ol>
 <li><p>Edit <code>conf/broker.conf</code> to enable function worker, by setting <code>functionsWorkerEnabled</code> to <code>true</code>.</p>
 <pre><code class="hljs css language-conf"><span class="hljs-attr">functionsWorkerEnabled</span>=<span class="hljs-literal">true</span>
@@ -262,17 +262,17 @@ $ bin/pulsar-daemon start bookie
 </code></pre></li>
 </ol>
 <h3><a class="anchor" aria-hidden="true" id="starting-brokers"></a><a href="#starting-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. [...]
-<p>You can then provide any other configuration changes that you'd like in the <a href="/docs/fr/next/reference-configuration#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
-<p>You can start a broker in the foreground using the <a href="/docs/fr/next/reference-cli-tools#pulsar-broker"><code>pulsar broker</code></a> command:</p>
+<p>You can then provide any other configuration changes that you'd like in the <a href="reference-configuration.md#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
+<p>You can start a broker in the foreground using the <a href="reference-cli-tools.md#pulsar-broker"><code>pulsar broker</code></a> command:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar broker
 </code></pre>
-<p>You can start a broker in the background using the <a href="/docs/fr/next/reference-cli-tools#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
+<p>You can start a broker in the background using the <a href="reference-cli-tools.md#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-daemon start broker
 </code></pre>
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-cluster" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S1 [...]
-<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="/docs/fr/next/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/fr/next/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
+<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="reference-cli-tools.md#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -300,7 +300,7 @@ $ bin/pulsar-daemon start bookie
   --namespace default \
   --name exclamation
 </code></pre>
-<p>Check if the function is running as expected by <a href="/docs/fr/next/functions-deploying#triggering-pulsar-functions">triggering</a> the function.</p>
+<p>Check if the function is running as expected by <a href="functions-deploying.md#triggering-pulsar-functions">triggering</a> the function.</p>
 <pre><code class="hljs css language-bash">bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger --name exclamation --trigger-value <span class="hljs-string">"hello world"</span>
 </code></pre>
 <p>You will see output as below:</p>
diff --git a/content/docs/fr/next/functions-quickstart.html b/content/docs/fr/next/functions-quickstart.html
index 3e487fb..cdc3195 100644
--- a/content/docs/fr/next/functions-quickstart.html
+++ b/content/docs/fr/next/functions-quickstart.html
@@ -90,7 +90,7 @@ $ bin/pulsar standalone \
 </blockquote>
 <p>--inputs topic1,topic2</p>
 <pre><code class="hljs">
-We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">/docs/fr/next/reference-cli-tools#pulsar-client</span>) tool to listen for messages on the output topic:
+We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-client</span>) tool to listen for messages on the output topic:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-client consume persistent://public/default/exclamation-output \
@@ -117,7 +117,7 @@ Hello world!
 <li>If our exclamation function <em>hadn't</em> been running, Pulsar would have durably stored the message data published to the input topic in <a href="https://bookkeeper.apache.org">Apache BookKeeper</a> until a consumer consumed and acknowledged the message</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="run-a-pulsar-function-in-cluster-mode"></a><a href="#run-a-pulsar-function-in-cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 [...]
-<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="/docs/fr/next/pulsar-admin#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
+<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="reference-pulsar-admin.md#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
 <p>This command, for example, would deploy the same exclamation function we ran locally above <em>in our Pulsar cluster</em> (rather than outside it):</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --jar examples/api-examples.jar \
@@ -201,7 +201,7 @@ Hello world!
 <p>If you see <code>Deleted successfully</code> in the output, then you've succesfully run, updated, and shut down a Pulsar Function running in cluster mode. Congrats! Now, let's go even further and run a brand new function in the next section.</p>
 <h2><a class="anchor" aria-hidden="true" id="writing-and-running-a-new-function"></a><a href="#writing-and-running-a-new-function" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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 [...]
 <blockquote>
-<p>In order to write and run the <a href="/docs/fr/next/functions-api#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
+<p>In order to write and run the <a href="functions-api.md#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
 <pre><code class="hljs css language-bash"></code></pre>
 </blockquote>
 <p>$ pip install pulsar-client</p>
diff --git a/content/docs/fr/next/functions-quickstart/index.html b/content/docs/fr/next/functions-quickstart/index.html
index 3e487fb..cdc3195 100644
--- a/content/docs/fr/next/functions-quickstart/index.html
+++ b/content/docs/fr/next/functions-quickstart/index.html
@@ -90,7 +90,7 @@ $ bin/pulsar standalone \
 </blockquote>
 <p>--inputs topic1,topic2</p>
 <pre><code class="hljs">
-We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">/docs/fr/next/reference-cli-tools#pulsar-client</span>) tool to listen for messages on the output topic:
+We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-client</span>) tool to listen for messages on the output topic:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-client consume persistent://public/default/exclamation-output \
@@ -117,7 +117,7 @@ Hello world!
 <li>If our exclamation function <em>hadn't</em> been running, Pulsar would have durably stored the message data published to the input topic in <a href="https://bookkeeper.apache.org">Apache BookKeeper</a> until a consumer consumed and acknowledged the message</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="run-a-pulsar-function-in-cluster-mode"></a><a href="#run-a-pulsar-function-in-cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 [...]
-<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="/docs/fr/next/pulsar-admin#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
+<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="reference-pulsar-admin.md#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
 <p>This command, for example, would deploy the same exclamation function we ran locally above <em>in our Pulsar cluster</em> (rather than outside it):</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --jar examples/api-examples.jar \
@@ -201,7 +201,7 @@ Hello world!
 <p>If you see <code>Deleted successfully</code> in the output, then you've succesfully run, updated, and shut down a Pulsar Function running in cluster mode. Congrats! Now, let's go even further and run a brand new function in the next section.</p>
 <h2><a class="anchor" aria-hidden="true" id="writing-and-running-a-new-function"></a><a href="#writing-and-running-a-new-function" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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 [...]
 <blockquote>
-<p>In order to write and run the <a href="/docs/fr/next/functions-api#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
+<p>In order to write and run the <a href="functions-api.md#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
 <pre><code class="hljs css language-bash"></code></pre>
 </blockquote>
 <p>$ pip install pulsar-client</p>
diff --git a/content/docs/fr/next/security-token-admin.html b/content/docs/fr/next/security-token-admin.html
index 77dac5d..fdc183a 100644
--- a/content/docs/fr/next/security-token-admin.html
+++ b/content/docs/fr/next/security-token-admin.html
@@ -62,7 +62,7 @@ will need one.
 &gt; #### Always use TLS transport encryption
 &gt; Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 &gt; always use TLS encryption when talking to the Pulsar service. See
-&gt; [Transport Encryption using TLS](/docs/fr/next/security-tls-transport)
+&gt; [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/content/docs/fr/next/security-token-admin/index.html b/content/docs/fr/next/security-token-admin/index.html
index 77dac5d..fdc183a 100644
--- a/content/docs/fr/next/security-token-admin/index.html
+++ b/content/docs/fr/next/security-token-admin/index.html
@@ -62,7 +62,7 @@ will need one.
 &gt; #### Always use TLS transport encryption
 &gt; Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 &gt; always use TLS encryption when talking to the Pulsar service. See
-&gt; [Transport Encryption using TLS](/docs/fr/next/security-tls-transport)
+&gt; [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/content/docs/fr/next/security-token-client.html b/content/docs/fr/next/security-token-client.html
index f23d741..ed2ed88 100644
--- a/content/docs/fr/next/security-token-client.html
+++ b/content/docs/fr/next/security-token-client.html
@@ -59,12 +59,12 @@ Application will specify the token when creating the client instance. An alterna
 a &quot;token supplier&quot;, that is to say a function that returns the token when the client library
 will need one.
 
-See [Token authentication admin](/docs/fr/next/security-token-admin) for a reference on how to enable token
+See [Token authentication admin](security-token-admin.md) for a reference on how to enable token
 authentication on a Pulsar cluster.
 
 ### CLI tools
 
-[Command-line tools](/docs/fr/next/reference-cli-tools) like [`pulsar-admin`](/docs/fr/next/pulsar-admin), [`pulsar-perf`](/docs/fr/next/reference-cli-tools#pulsar-perf), and [`pulsar-client`](/docs/fr/next/reference-cli-tools#pulsar-client) use the `conf/client.conf` config file in a Pulsar installation.
+[Command-line tools](reference-cli-tools.md) like [`pulsar-admin`](reference-pulsar-admin.md), [`pulsar-perf`](reference-cli-tools.md#pulsar-perf), and [`pulsar-client`](reference-cli-tools.md#pulsar-client) use the `conf/client.conf` config file in a Pulsar installation.
 
 You'll need to add the following parameters to that file to use the token authentication with
 Pulsar's CLI tools:
diff --git a/content/docs/fr/next/security-token-client/index.html b/content/docs/fr/next/security-token-client/index.html
index f23d741..ed2ed88 100644
--- a/content/docs/fr/next/security-token-client/index.html
+++ b/content/docs/fr/next/security-token-client/index.html
@@ -59,12 +59,12 @@ Application will specify the token when creating the client instance. An alterna
 a &quot;token supplier&quot;, that is to say a function that returns the token when the client library
 will need one.
 
-See [Token authentication admin](/docs/fr/next/security-token-admin) for a reference on how to enable token
+See [Token authentication admin](security-token-admin.md) for a reference on how to enable token
 authentication on a Pulsar cluster.
 
 ### CLI tools
 
-[Command-line tools](/docs/fr/next/reference-cli-tools) like [`pulsar-admin`](/docs/fr/next/pulsar-admin), [`pulsar-perf`](/docs/fr/next/reference-cli-tools#pulsar-perf), and [`pulsar-client`](/docs/fr/next/reference-cli-tools#pulsar-client) use the `conf/client.conf` config file in a Pulsar installation.
+[Command-line tools](reference-cli-tools.md) like [`pulsar-admin`](reference-pulsar-admin.md), [`pulsar-perf`](reference-cli-tools.md#pulsar-perf), and [`pulsar-client`](reference-cli-tools.md#pulsar-client) use the `conf/client.conf` config file in a Pulsar installation.
 
 You'll need to add the following parameters to that file to use the token authentication with
 Pulsar's CLI tools:
diff --git a/content/docs/ja/2.1.0-incubating/client-libraries-java.html b/content/docs/ja/2.1.0-incubating/client-libraries-java.html
index e1502aa..ac41e3e 100644
--- a/content/docs/ja/2.1.0-incubating/client-libraries-java.html
+++ b/content/docs/ja/2.1.0-incubating/client-libraries-java.html
@@ -154,9 +154,9 @@ client.close();</p>
     .create();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="message-routing"></a><a href="#message-routing" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="/docs/ja/2.1.0-incubating/cookbooks-partitioned">Partitioned Topics</a> cookbook.</p>
+<p>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="cookbooks-partitioned.md">Partitioned Topics</a> cookbook.</p>
 <h3><a class="anchor" aria-hidden="true" id="async-send"></a><a href="#async-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.42-1 [...]
-<p>You can also publish messages <a href="/docs/ja/2.1.0-incubating/concepts-messaging#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
+<p>You can also publish messages <a href="concepts-messaging.md#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
 <p>Here's an example async send operation:</p>
 <pre><code class="hljs css language-java">producer.sendAsync(<span class="hljs-string">"my-async-message"</span>.getBytes()).thenAccept(msgId -&gt; {
     System.out.printf(<span class="hljs-string">"Message with ID %s successfully sent"</span>, msgId);
@@ -174,17 +174,17 @@ client.close();</p>
 </code></pre>
 <p>As for the previous case, it's also possible to terminate the builder chain with <code>sendAsync()</code> and get a future returned.</p>
 <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>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="/docs/ja/2.1.0-incubating/reference-terminology#consumer">consumer</a> by first instantiating a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
+<p>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="reference-terminology.md#consumer">consumer</a> by first instantiating a <a href="https://pulsar.incubator.apache.org/api/client/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>
 <p>Once you've instantiated a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
  object, you can create a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
- by specifying a <a href="/docs/ja/2.1.0-incubating/reference-terminology#topic">topic</a> and a <a href="/docs/ja/2.1.0-incubating/concepts-messaging#subscription-modes">subscription</a>.</p>
+ by specifying a <a href="reference-terminology.md#topic">topic</a> and a <a href="concepts-messaging.md#subscription-modes">subscription</a>.</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
         .subscriptionName(<span class="hljs-string">"my-subscription"</span>)
         .subscribe();
 </code></pre>
-<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="/docs/ja/2.1.0-incubating/reference-terminology#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
+<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="reference-terminology.md#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">do</span> {
   <span class="hljs-comment">// Wait for a message</span>
   Message msg = consumer.receive();
@@ -207,13 +207,13 @@ client.close();</p>
         .subscribe();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="async-receive"></a><a href="#async-receive" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="/docs/ja/2.1.0-incubating/concepts-messaging#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
+<p>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="concepts-messaging.md#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
 <p>Here's an example:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>Async receive operations return a {@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message} wrapped inside of a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="multi-topic-subscriptions"></a><a href="#multi-topic-subscriptions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
-<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="/docs/ja/2.1.0-incubating/concepts-messaging#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
+<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="concepts-messaging.md#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
 <p>Here are some examples:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
@@ -274,7 +274,7 @@ consumerBuilder
         });
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="reader-interface-readers"></a><a href="#reader-interface-readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
-<p>With the <a href="/docs/ja/2.1.0-incubating/concepts-clients#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
+<p>With the <a href="concepts-clients.md#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
  objects by specifying a topic, a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
 , and {@inject javadoc:ReaderConfiguration:/client/org/apache/pulsar/client/api/ReaderConfiguration}.</p>
 <p>Here's an example:</p>
@@ -294,12 +294,12 @@ Reader reader = pulsarClient.newReader()
 <p>In the example above, a <code>Reader</code> object is instantiated for a specific topic and message (by ID); the reader then iterates over each message in the topic after the message identified by <code>msgIdBytes</code> (how that value is obtained depends on the application).</p>
 <p>The code sample above shows pointing the <code>Reader</code> object to a specific message (by ID), but you can also use <code>MessageId.earliest</code> to point to the earliest available message on the topic of <code>MessageId.latest</code> to point to the most recent available message.</p>
 <h2><a class="anchor" aria-hidden="true" id="schemas"></a><a href="#schemas" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 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, all message data consists of byte arrays &quot;under the hood.&quot; <a href="/docs/ja/2.1.0-incubating/concepts-schema-registry">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an e [...]
+<p>In Pulsar, all message data consists of byte arrays &quot;under the hood.&quot; <a href="concepts-schema-registry.md">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an example:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
 </code></pre>
-<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="/docs/ja/2.1.0-incubating/reference-terminology#topic">topic</a>.</p>
+<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="reference-terminology.md#topic">topic</a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="schema-example"></a><a href="#schema-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- [...]
 <p>Let's say that you have a <code>SensorReading</code> class that you'd like to transmit over a Pulsar topic:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SensorReading</span> </span>{
@@ -352,9 +352,9 @@ Producer&lt;MyPojo&gt; pojoProducer = client.newProducer(pojoSchema)
 </code></pre></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="authentication"></a><a href="#authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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 は現在 2 つの認証スキーム、<a href="/docs/ja/2.1.0-incubating/security-tls-authentication">TLS</a> と <a href="/docs/ja/2.1.0-incubating/security-athenz">Athenz</a> に対応しています。Pulsar Java クライアントではどちらを使用することもできます。</p>
+<p>Pulsar は現在 2 つの認証スキーム、<a href="security-tls-authentication.md">TLS</a> と <a href="security-athenz.md">Athenz</a> に対応しています。Pulsar Java クライアントではどちらを使用することもできます。</p>
 <h3><a class="anchor" aria-hidden="true" id="tls-認証"></a><a href="#tls-認証" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>To use <a href="/docs/ja/2.1.0-incubating/security-tls-authentication">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
+<p>To use <a href="security-tls-authentication.md">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
 <p>Here's an example configuration:</p>
 <pre><code class="hljs css language-java">Map&lt;String, String&gt; authParams = <span class="hljs-keyword">new</span> HashMap&lt;&gt;();
 authParams.put(<span class="hljs-string">"tlsCertFile"</span>, <span class="hljs-string">"/path/to/client-cert.pem"</span>);
@@ -371,7 +371,7 @@ PulsarClient client = PulsarClient.builder()
         .build();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="athenz"></a><a href="#athenz" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>To use <a href="/docs/ja/2.1.0-incubating/security-athenz">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
+<p>To use <a href="security-athenz.md">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
 <ul>
 <li><code>tenantDomain</code></li>
 <li><code>tenantService</code></li>
diff --git a/content/docs/ja/2.1.0-incubating/client-libraries-java/index.html b/content/docs/ja/2.1.0-incubating/client-libraries-java/index.html
index e1502aa..ac41e3e 100644
--- a/content/docs/ja/2.1.0-incubating/client-libraries-java/index.html
+++ b/content/docs/ja/2.1.0-incubating/client-libraries-java/index.html
@@ -154,9 +154,9 @@ client.close();</p>
     .create();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="message-routing"></a><a href="#message-routing" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="/docs/ja/2.1.0-incubating/cookbooks-partitioned">Partitioned Topics</a> cookbook.</p>
+<p>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="cookbooks-partitioned.md">Partitioned Topics</a> cookbook.</p>
 <h3><a class="anchor" aria-hidden="true" id="async-send"></a><a href="#async-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.42-1 [...]
-<p>You can also publish messages <a href="/docs/ja/2.1.0-incubating/concepts-messaging#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
+<p>You can also publish messages <a href="concepts-messaging.md#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
 <p>Here's an example async send operation:</p>
 <pre><code class="hljs css language-java">producer.sendAsync(<span class="hljs-string">"my-async-message"</span>.getBytes()).thenAccept(msgId -&gt; {
     System.out.printf(<span class="hljs-string">"Message with ID %s successfully sent"</span>, msgId);
@@ -174,17 +174,17 @@ client.close();</p>
 </code></pre>
 <p>As for the previous case, it's also possible to terminate the builder chain with <code>sendAsync()</code> and get a future returned.</p>
 <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>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="/docs/ja/2.1.0-incubating/reference-terminology#consumer">consumer</a> by first instantiating a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
+<p>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="reference-terminology.md#consumer">consumer</a> by first instantiating a <a href="https://pulsar.incubator.apache.org/api/client/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>
 <p>Once you've instantiated a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
  object, you can create a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
- by specifying a <a href="/docs/ja/2.1.0-incubating/reference-terminology#topic">topic</a> and a <a href="/docs/ja/2.1.0-incubating/concepts-messaging#subscription-modes">subscription</a>.</p>
+ by specifying a <a href="reference-terminology.md#topic">topic</a> and a <a href="concepts-messaging.md#subscription-modes">subscription</a>.</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
         .subscriptionName(<span class="hljs-string">"my-subscription"</span>)
         .subscribe();
 </code></pre>
-<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="/docs/ja/2.1.0-incubating/reference-terminology#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
+<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="reference-terminology.md#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">do</span> {
   <span class="hljs-comment">// Wait for a message</span>
   Message msg = consumer.receive();
@@ -207,13 +207,13 @@ client.close();</p>
         .subscribe();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="async-receive"></a><a href="#async-receive" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="/docs/ja/2.1.0-incubating/concepts-messaging#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
+<p>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="concepts-messaging.md#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
 <p>Here's an example:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>Async receive operations return a {@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message} wrapped inside of a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="multi-topic-subscriptions"></a><a href="#multi-topic-subscriptions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
-<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="/docs/ja/2.1.0-incubating/concepts-messaging#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
+<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="concepts-messaging.md#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
 <p>Here are some examples:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
@@ -274,7 +274,7 @@ consumerBuilder
         });
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="reader-interface-readers"></a><a href="#reader-interface-readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
-<p>With the <a href="/docs/ja/2.1.0-incubating/concepts-clients#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
+<p>With the <a href="concepts-clients.md#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
  objects by specifying a topic, a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
 , and {@inject javadoc:ReaderConfiguration:/client/org/apache/pulsar/client/api/ReaderConfiguration}.</p>
 <p>Here's an example:</p>
@@ -294,12 +294,12 @@ Reader reader = pulsarClient.newReader()
 <p>In the example above, a <code>Reader</code> object is instantiated for a specific topic and message (by ID); the reader then iterates over each message in the topic after the message identified by <code>msgIdBytes</code> (how that value is obtained depends on the application).</p>
 <p>The code sample above shows pointing the <code>Reader</code> object to a specific message (by ID), but you can also use <code>MessageId.earliest</code> to point to the earliest available message on the topic of <code>MessageId.latest</code> to point to the most recent available message.</p>
 <h2><a class="anchor" aria-hidden="true" id="schemas"></a><a href="#schemas" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 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, all message data consists of byte arrays &quot;under the hood.&quot; <a href="/docs/ja/2.1.0-incubating/concepts-schema-registry">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an e [...]
+<p>In Pulsar, all message data consists of byte arrays &quot;under the hood.&quot; <a href="concepts-schema-registry.md">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an example:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
 </code></pre>
-<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="/docs/ja/2.1.0-incubating/reference-terminology#topic">topic</a>.</p>
+<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="reference-terminology.md#topic">topic</a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="schema-example"></a><a href="#schema-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- [...]
 <p>Let's say that you have a <code>SensorReading</code> class that you'd like to transmit over a Pulsar topic:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SensorReading</span> </span>{
@@ -352,9 +352,9 @@ Producer&lt;MyPojo&gt; pojoProducer = client.newProducer(pojoSchema)
 </code></pre></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="authentication"></a><a href="#authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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 は現在 2 つの認証スキーム、<a href="/docs/ja/2.1.0-incubating/security-tls-authentication">TLS</a> と <a href="/docs/ja/2.1.0-incubating/security-athenz">Athenz</a> に対応しています。Pulsar Java クライアントではどちらを使用することもできます。</p>
+<p>Pulsar は現在 2 つの認証スキーム、<a href="security-tls-authentication.md">TLS</a> と <a href="security-athenz.md">Athenz</a> に対応しています。Pulsar Java クライアントではどちらを使用することもできます。</p>
 <h3><a class="anchor" aria-hidden="true" id="tls-認証"></a><a href="#tls-認証" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>To use <a href="/docs/ja/2.1.0-incubating/security-tls-authentication">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
+<p>To use <a href="security-tls-authentication.md">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
 <p>Here's an example configuration:</p>
 <pre><code class="hljs css language-java">Map&lt;String, String&gt; authParams = <span class="hljs-keyword">new</span> HashMap&lt;&gt;();
 authParams.put(<span class="hljs-string">"tlsCertFile"</span>, <span class="hljs-string">"/path/to/client-cert.pem"</span>);
@@ -371,7 +371,7 @@ PulsarClient client = PulsarClient.builder()
         .build();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="athenz"></a><a href="#athenz" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>To use <a href="/docs/ja/2.1.0-incubating/security-athenz">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
+<p>To use <a href="security-athenz.md">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
 <ul>
 <li><code>tenantDomain</code></li>
 <li><code>tenantService</code></li>
diff --git a/content/docs/ja/2.1.0-incubating/deploy-aws.html b/content/docs/ja/2.1.0-incubating/deploy-aws.html
index 19d35be..59d07c1 100644
--- a/content/docs/ja/2.1.0-incubating/deploy-aws.html
+++ b/content/docs/ja/2.1.0-incubating/deploy-aws.html
@@ -138,9 +138,9 @@ id_rsa               id_rsa.pub
 <li>9 total <a href="https://aws.amazon.com/ec2">Elastic Compute Cloud</a> (EC2) instances running the <a href="https://access.redhat.com/articles/3135091">ami-9fa343e7</a> Amazon Machine Image (AMI), which runs <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/7.4_release_notes/index">Red Hat Enterprise Linux (RHEL) 7.4</a>. By default, that includes:
 <ul>
 <li>3 small VMs for ZooKeeper (<a href="https://www.ec2instances.info/?selected=t2.small">t2.small</a> instances)</li>
-<li>3 larger VMs for BookKeeper <a href="/docs/ja/2.1.0-incubating/reference-terminology#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
-<li>2 larger VMs for Pulsar <a href="/docs/ja/2.1.0-incubating/reference-terminology#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
-<li>1 larger VMs for Pulsar <a href="/docs/ja/2.1.0-incubating/reference-terminology#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>3 larger VMs for BookKeeper <a href="reference-terminology.md#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
+<li>2 larger VMs for Pulsar <a href="reference-terminology.md#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>1 larger VMs for Pulsar <a href="reference-terminology.md#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
 </ul></li>
 <li>An EC2 <a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html">security group</a></li>
 <li>A <a href="https://aws.amazon.com/vpc/">virtual private cloud</a> (VPC) for security</li>
diff --git a/content/docs/ja/2.1.0-incubating/deploy-aws/index.html b/content/docs/ja/2.1.0-incubating/deploy-aws/index.html
index 19d35be..59d07c1 100644
--- a/content/docs/ja/2.1.0-incubating/deploy-aws/index.html
+++ b/content/docs/ja/2.1.0-incubating/deploy-aws/index.html
@@ -138,9 +138,9 @@ id_rsa               id_rsa.pub
 <li>9 total <a href="https://aws.amazon.com/ec2">Elastic Compute Cloud</a> (EC2) instances running the <a href="https://access.redhat.com/articles/3135091">ami-9fa343e7</a> Amazon Machine Image (AMI), which runs <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/7.4_release_notes/index">Red Hat Enterprise Linux (RHEL) 7.4</a>. By default, that includes:
 <ul>
 <li>3 small VMs for ZooKeeper (<a href="https://www.ec2instances.info/?selected=t2.small">t2.small</a> instances)</li>
-<li>3 larger VMs for BookKeeper <a href="/docs/ja/2.1.0-incubating/reference-terminology#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
-<li>2 larger VMs for Pulsar <a href="/docs/ja/2.1.0-incubating/reference-terminology#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
-<li>1 larger VMs for Pulsar <a href="/docs/ja/2.1.0-incubating/reference-terminology#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>3 larger VMs for BookKeeper <a href="reference-terminology.md#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
+<li>2 larger VMs for Pulsar <a href="reference-terminology.md#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>1 larger VMs for Pulsar <a href="reference-terminology.md#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
 </ul></li>
 <li>An EC2 <a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html">security group</a></li>
 <li>A <a href="https://aws.amazon.com/vpc/">virtual private cloud</a> (VPC) for security</li>
diff --git a/content/docs/ja/2.1.0-incubating/deploy-bare-metal.html b/content/docs/ja/2.1.0-incubating/deploy-bare-metal.html
index d1c3c3d..119de58 100644
--- a/content/docs/ja/2.1.0-incubating/deploy-bare-metal.html
+++ b/content/docs/ja/2.1.0-incubating/deploy-bare-metal.html
@@ -223,7 +223,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <pre><code class="hljs">
 Once you've applied the desired configuration in <span class="hljs-code">`conf/bookkeeper.conf`</span>, you can start up a bookie on each of your BookKeeper hosts. You can start up each bookie either in the background, using [<span class="hljs-string">nohup</span>](<span class="hljs-link">https://en.wikipedia.org/wiki/Nohup</span>), or in the foreground.
 
-To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">/docs/ja/2.1.0-incubating/reference-cli-tools#pulsar-daemon</span>) CLI tool:
+To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-daemon</span>) CLI tool:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-daemon start bookie
@@ -231,18 +231,18 @@ $ bin/pulsar-daemon start bookie
 <p>To start the bookie in the foreground:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper bookie
 </code></pre>
-<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="/docs/ja/2.1.0-incubating/reference-cli-tools#shell">BookKeeper shell</a> on it:</p>
+<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on it:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell bookiesanity
 </code></pre>
 <p>This will create an ephemeral BookKeeper ledger on the local bookie, write a few entries, read them back, and finally delete the ledger.</p>
-<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="/docs/ja/2.1.0-incubating/reference-cli-tools#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
+<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell simpletest --ensemble &lt;num-bookies&gt; --writeQuorum &lt;num-bookies&gt; --ackQuorum &lt;num-bookies&gt; --numEntries &lt;num-entries&gt;
 </code></pre>
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
 <h3><a class="anchor" aria-hidden="true" id="configuring-brokers"></a><a href="#configuring-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.2 [...]
-<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="/docs/ja/2.1.0-incubating/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="/docs/ja/2.1.0-incubating/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configura [...]
+<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
@@ -250,7 +250,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="enabling-pulsar-functions-optional"></a><a href="#enabling-pulsar-functions-optional" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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>If you want to enable <a href="/docs/ja/2.1.0-incubating/functions-overview">Pulsar Functions</a>, you can follow the instructions as below:</p>
+<p>If you want to enable <a href="functions-overview.md">Pulsar Functions</a>, you can follow the instructions as below:</p>
 <ol>
 <li><p>Edit <code>conf/broker.conf</code> to enable function worker, by setting <code>functionsWorkerEnabled</code> to <code>true</code>.</p>
 <pre><code class="hljs css language-conf"><span class="hljs-attr">functionsWorkerEnabled</span>=<span class="hljs-literal">true</span>
@@ -262,17 +262,17 @@ $ bin/pulsar-daemon start bookie
 </code></pre></li>
 </ol>
 <h3><a class="anchor" aria-hidden="true" id="starting-brokers"></a><a href="#starting-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. [...]
-<p>You can then provide any other configuration changes that you'd like in the <a href="/docs/ja/2.1.0-incubating/reference-configuration#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
-<p>You can start a broker in the foreground using the <a href="/docs/ja/2.1.0-incubating/reference-cli-tools#pulsar-broker"><code>pulsar broker</code></a> command:</p>
+<p>You can then provide any other configuration changes that you'd like in the <a href="reference-configuration.md#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
+<p>You can start a broker in the foreground using the <a href="reference-cli-tools.md#pulsar-broker"><code>pulsar broker</code></a> command:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar broker
 </code></pre>
-<p>You can start a broker in the background using the <a href="/docs/ja/2.1.0-incubating/reference-cli-tools#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
+<p>You can start a broker in the background using the <a href="reference-cli-tools.md#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-daemon start broker
 </code></pre>
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-cluster" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S1 [...]
-<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="/docs/ja/2.1.0-incubating/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/ja/2.1.0-incubating/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
+<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="reference-cli-tools.md#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -300,7 +300,7 @@ $ bin/pulsar-daemon start bookie
   --namespace default \
   --name exclamation
 </code></pre>
-<p>Check if the function is running as expected by <a href="/docs/ja/2.1.0-incubating/functions-deploying#triggering-pulsar-functions">triggering</a> the function.</p>
+<p>Check if the function is running as expected by <a href="functions-deploying.md#triggering-pulsar-functions">triggering</a> the function.</p>
 <pre><code class="hljs css language-bash">bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger --name exclamation --triggerValue <span class="hljs-string">"hello world"</span>
 </code></pre>
 <p>You will see output as below:</p>
diff --git a/content/docs/ja/2.1.0-incubating/deploy-bare-metal/index.html b/content/docs/ja/2.1.0-incubating/deploy-bare-metal/index.html
index d1c3c3d..119de58 100644
--- a/content/docs/ja/2.1.0-incubating/deploy-bare-metal/index.html
+++ b/content/docs/ja/2.1.0-incubating/deploy-bare-metal/index.html
@@ -223,7 +223,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <pre><code class="hljs">
 Once you've applied the desired configuration in <span class="hljs-code">`conf/bookkeeper.conf`</span>, you can start up a bookie on each of your BookKeeper hosts. You can start up each bookie either in the background, using [<span class="hljs-string">nohup</span>](<span class="hljs-link">https://en.wikipedia.org/wiki/Nohup</span>), or in the foreground.
 
-To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">/docs/ja/2.1.0-incubating/reference-cli-tools#pulsar-daemon</span>) CLI tool:
+To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-daemon</span>) CLI tool:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-daemon start bookie
@@ -231,18 +231,18 @@ $ bin/pulsar-daemon start bookie
 <p>To start the bookie in the foreground:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper bookie
 </code></pre>
-<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="/docs/ja/2.1.0-incubating/reference-cli-tools#shell">BookKeeper shell</a> on it:</p>
+<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on it:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell bookiesanity
 </code></pre>
 <p>This will create an ephemeral BookKeeper ledger on the local bookie, write a few entries, read them back, and finally delete the ledger.</p>
-<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="/docs/ja/2.1.0-incubating/reference-cli-tools#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
+<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell simpletest --ensemble &lt;num-bookies&gt; --writeQuorum &lt;num-bookies&gt; --ackQuorum &lt;num-bookies&gt; --numEntries &lt;num-entries&gt;
 </code></pre>
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
 <h3><a class="anchor" aria-hidden="true" id="configuring-brokers"></a><a href="#configuring-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.2 [...]
-<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="/docs/ja/2.1.0-incubating/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="/docs/ja/2.1.0-incubating/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configura [...]
+<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
@@ -250,7 +250,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="enabling-pulsar-functions-optional"></a><a href="#enabling-pulsar-functions-optional" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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>If you want to enable <a href="/docs/ja/2.1.0-incubating/functions-overview">Pulsar Functions</a>, you can follow the instructions as below:</p>
+<p>If you want to enable <a href="functions-overview.md">Pulsar Functions</a>, you can follow the instructions as below:</p>
 <ol>
 <li><p>Edit <code>conf/broker.conf</code> to enable function worker, by setting <code>functionsWorkerEnabled</code> to <code>true</code>.</p>
 <pre><code class="hljs css language-conf"><span class="hljs-attr">functionsWorkerEnabled</span>=<span class="hljs-literal">true</span>
@@ -262,17 +262,17 @@ $ bin/pulsar-daemon start bookie
 </code></pre></li>
 </ol>
 <h3><a class="anchor" aria-hidden="true" id="starting-brokers"></a><a href="#starting-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. [...]
-<p>You can then provide any other configuration changes that you'd like in the <a href="/docs/ja/2.1.0-incubating/reference-configuration#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
-<p>You can start a broker in the foreground using the <a href="/docs/ja/2.1.0-incubating/reference-cli-tools#pulsar-broker"><code>pulsar broker</code></a> command:</p>
+<p>You can then provide any other configuration changes that you'd like in the <a href="reference-configuration.md#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
+<p>You can start a broker in the foreground using the <a href="reference-cli-tools.md#pulsar-broker"><code>pulsar broker</code></a> command:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar broker
 </code></pre>
-<p>You can start a broker in the background using the <a href="/docs/ja/2.1.0-incubating/reference-cli-tools#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
+<p>You can start a broker in the background using the <a href="reference-cli-tools.md#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-daemon start broker
 </code></pre>
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-cluster" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S1 [...]
-<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="/docs/ja/2.1.0-incubating/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/ja/2.1.0-incubating/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
+<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="reference-cli-tools.md#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -300,7 +300,7 @@ $ bin/pulsar-daemon start bookie
   --namespace default \
   --name exclamation
 </code></pre>
-<p>Check if the function is running as expected by <a href="/docs/ja/2.1.0-incubating/functions-deploying#triggering-pulsar-functions">triggering</a> the function.</p>
+<p>Check if the function is running as expected by <a href="functions-deploying.md#triggering-pulsar-functions">triggering</a> the function.</p>
 <pre><code class="hljs css language-bash">bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger --name exclamation --triggerValue <span class="hljs-string">"hello world"</span>
 </code></pre>
 <p>You will see output as below:</p>
diff --git a/content/docs/ja/2.1.0-incubating/functions-quickstart.html b/content/docs/ja/2.1.0-incubating/functions-quickstart.html
index 065169e..9e5a549 100644
--- a/content/docs/ja/2.1.0-incubating/functions-quickstart.html
+++ b/content/docs/ja/2.1.0-incubating/functions-quickstart.html
@@ -90,7 +90,7 @@ $ bin/pulsar standalone \
 </blockquote>
 <p>--inputs topic1,topic2</p>
 <pre><code class="hljs">
-We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">/docs/ja/2.1.0-incubating/reference-cli-tools#pulsar-client</span>) tool to listen for messages on the output topic:
+We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-client</span>) tool to listen for messages on the output topic:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-client consume persistent://public/default/exclamation-output \
@@ -117,7 +117,7 @@ Hello world!
 <li>If our exclamation function <em>hadn't</em> been running, Pulsar would have durably stored the message data published to the input topic in <a href="https://bookkeeper.apache.org">Apache BookKeeper</a> until a consumer consumed and acknowledged the message</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="run-a-pulsar-function-in-cluster-mode"></a><a href="#run-a-pulsar-function-in-cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 [...]
-<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="/docs/ja/2.1.0-incubating/pulsar-admin#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
+<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="reference-pulsar-admin.md#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
 <p>This command, for example, would deploy the same exclamation function we ran locally above <em>in our Pulsar cluster</em> (rather than outside it):</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --jar examples/api-examples.jar \
@@ -201,7 +201,7 @@ Hello world!
 <p>If you see <code>Deleted successfully</code> in the output, then you've succesfully run, updated, and shut down a Pulsar Function running in cluster mode. Congrats! Now, let's go even further and run a brand new function in the next section.</p>
 <h2><a class="anchor" aria-hidden="true" id="writing-and-running-a-new-function"></a><a href="#writing-and-running-a-new-function" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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 [...]
 <blockquote>
-<p>In order to write and run the <a href="/docs/ja/2.1.0-incubating/functions-api#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
+<p>In order to write and run the <a href="functions-api.md#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
 <pre><code class="hljs css language-bash"></code></pre>
 </blockquote>
 <p>$ pip install pulsar-client</p>
diff --git a/content/docs/ja/2.1.0-incubating/functions-quickstart/index.html b/content/docs/ja/2.1.0-incubating/functions-quickstart/index.html
index 065169e..9e5a549 100644
--- a/content/docs/ja/2.1.0-incubating/functions-quickstart/index.html
+++ b/content/docs/ja/2.1.0-incubating/functions-quickstart/index.html
@@ -90,7 +90,7 @@ $ bin/pulsar standalone \
 </blockquote>
 <p>--inputs topic1,topic2</p>
 <pre><code class="hljs">
-We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">/docs/ja/2.1.0-incubating/reference-cli-tools#pulsar-client</span>) tool to listen for messages on the output topic:
+We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-client</span>) tool to listen for messages on the output topic:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-client consume persistent://public/default/exclamation-output \
@@ -117,7 +117,7 @@ Hello world!
 <li>If our exclamation function <em>hadn't</em> been running, Pulsar would have durably stored the message data published to the input topic in <a href="https://bookkeeper.apache.org">Apache BookKeeper</a> until a consumer consumed and acknowledged the message</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="run-a-pulsar-function-in-cluster-mode"></a><a href="#run-a-pulsar-function-in-cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 [...]
-<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="/docs/ja/2.1.0-incubating/pulsar-admin#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
+<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="reference-pulsar-admin.md#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
 <p>This command, for example, would deploy the same exclamation function we ran locally above <em>in our Pulsar cluster</em> (rather than outside it):</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --jar examples/api-examples.jar \
@@ -201,7 +201,7 @@ Hello world!
 <p>If you see <code>Deleted successfully</code> in the output, then you've succesfully run, updated, and shut down a Pulsar Function running in cluster mode. Congrats! Now, let's go even further and run a brand new function in the next section.</p>
 <h2><a class="anchor" aria-hidden="true" id="writing-and-running-a-new-function"></a><a href="#writing-and-running-a-new-function" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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 [...]
 <blockquote>
-<p>In order to write and run the <a href="/docs/ja/2.1.0-incubating/functions-api#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
+<p>In order to write and run the <a href="functions-api.md#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
 <pre><code class="hljs css language-bash"></code></pre>
 </blockquote>
 <p>$ pip install pulsar-client</p>
diff --git a/content/docs/ja/2.1.1-incubating/client-libraries-java.html b/content/docs/ja/2.1.1-incubating/client-libraries-java.html
index ead5787..1569140 100644
--- a/content/docs/ja/2.1.1-incubating/client-libraries-java.html
+++ b/content/docs/ja/2.1.1-incubating/client-libraries-java.html
@@ -154,9 +154,9 @@ client.close();</p>
     .create();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="message-routing"></a><a href="#message-routing" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="/docs/ja/2.1.1-incubating/cookbooks-partitioned">Partitioned Topics</a> cookbook.</p>
+<p>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="cookbooks-partitioned.md">Partitioned Topics</a> cookbook.</p>
 <h3><a class="anchor" aria-hidden="true" id="async-send"></a><a href="#async-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.42-1 [...]
-<p>You can also publish messages <a href="/docs/ja/2.1.1-incubating/concepts-messaging#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
+<p>You can also publish messages <a href="concepts-messaging.md#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
 <p>Here's an example async send operation:</p>
 <pre><code class="hljs css language-java">producer.sendAsync(<span class="hljs-string">"my-async-message"</span>.getBytes()).thenAccept(msgId -&gt; {
     System.out.printf(<span class="hljs-string">"Message with ID %s successfully sent"</span>, msgId);
@@ -174,17 +174,17 @@ client.close();</p>
 </code></pre>
 <p>As for the previous case, it's also possible to terminate the builder chain with <code>sendAsync()</code> and get a future returned.</p>
 <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>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="/docs/ja/2.1.1-incubating/reference-terminology#consumer">consumer</a> by first instantiating a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
+<p>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="reference-terminology.md#consumer">consumer</a> by first instantiating a <a href="https://pulsar.incubator.apache.org/api/client/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>
 <p>Once you've instantiated a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
  object, you can create a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
- by specifying a <a href="/docs/ja/2.1.1-incubating/reference-terminology#topic">topic</a> and a <a href="/docs/ja/2.1.1-incubating/concepts-messaging#subscription-modes">subscription</a>.</p>
+ by specifying a <a href="reference-terminology.md#topic">topic</a> and a <a href="concepts-messaging.md#subscription-modes">subscription</a>.</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
         .subscriptionName(<span class="hljs-string">"my-subscription"</span>)
         .subscribe();
 </code></pre>
-<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="/docs/ja/2.1.1-incubating/reference-terminology#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
+<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="reference-terminology.md#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">do</span> {
   <span class="hljs-comment">// Wait for a message</span>
   Message msg = consumer.receive();
@@ -207,13 +207,13 @@ client.close();</p>
         .subscribe();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="async-receive"></a><a href="#async-receive" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="/docs/ja/2.1.1-incubating/concepts-messaging#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
+<p>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="concepts-messaging.md#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
 <p>Here's an example:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>Async receive operations return a {@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message} wrapped inside of a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="multi-topic-subscriptions"></a><a href="#multi-topic-subscriptions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
-<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="/docs/ja/2.1.1-incubating/concepts-messaging#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
+<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="concepts-messaging.md#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
 <p>Here are some examples:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
@@ -274,7 +274,7 @@ consumerBuilder
         });
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="reader-interface-readers"></a><a href="#reader-interface-readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
-<p>With the <a href="/docs/ja/2.1.1-incubating/concepts-clients#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
+<p>With the <a href="concepts-clients.md#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
  objects by specifying a topic, a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
 , and {@inject javadoc:ReaderConfiguration:/client/org/apache/pulsar/client/api/ReaderConfiguration}.</p>
 <p>Here's an example:</p>
@@ -294,12 +294,12 @@ Reader reader = pulsarClient.newReader()
 <p>In the example above, a <code>Reader</code> object is instantiated for a specific topic and message (by ID); the reader then iterates over each message in the topic after the message identified by <code>msgIdBytes</code> (how that value is obtained depends on the application).</p>
 <p>The code sample above shows pointing the <code>Reader</code> object to a specific message (by ID), but you can also use <code>MessageId.earliest</code> to point to the earliest available message on the topic of <code>MessageId.latest</code> to point to the most recent available message.</p>
 <h2><a class="anchor" aria-hidden="true" id="schemas"></a><a href="#schemas" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 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, all message data consists of byte arrays &quot;under the hood.&quot; <a href="/docs/ja/2.1.1-incubating/concepts-schema-registry">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an e [...]
+<p>In Pulsar, all message data consists of byte arrays &quot;under the hood.&quot; <a href="concepts-schema-registry.md">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an example:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
 </code></pre>
-<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="/docs/ja/2.1.1-incubating/reference-terminology#topic">topic</a>.</p>
+<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="reference-terminology.md#topic">topic</a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="schema-example"></a><a href="#schema-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- [...]
 <p>Let's say that you have a <code>SensorReading</code> class that you'd like to transmit over a Pulsar topic:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SensorReading</span> </span>{
@@ -352,9 +352,9 @@ Producer&lt;MyPojo&gt; pojoProducer = client.newProducer(pojoSchema)
 </code></pre></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="authentication"></a><a href="#authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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 は現在 2 つの認証スキーム、<a href="/docs/ja/2.1.1-incubating/security-tls-authentication">TLS</a> と <a href="/docs/ja/2.1.1-incubating/security-athenz">Athenz</a> に対応しています。Pulsar Java クライアントではどちらを使用することもできます。</p>
+<p>Pulsar は現在 2 つの認証スキーム、<a href="security-tls-authentication.md">TLS</a> と <a href="security-athenz.md">Athenz</a> に対応しています。Pulsar Java クライアントではどちらを使用することもできます。</p>
 <h3><a class="anchor" aria-hidden="true" id="tls-認証"></a><a href="#tls-認証" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>To use <a href="/docs/ja/2.1.1-incubating/security-tls-authentication">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
+<p>To use <a href="security-tls-authentication.md">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
 <p>Here's an example configuration:</p>
 <pre><code class="hljs css language-java">Map&lt;String, String&gt; authParams = <span class="hljs-keyword">new</span> HashMap&lt;&gt;();
 authParams.put(<span class="hljs-string">"tlsCertFile"</span>, <span class="hljs-string">"/path/to/client-cert.pem"</span>);
@@ -371,7 +371,7 @@ PulsarClient client = PulsarClient.builder()
         .build();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="athenz"></a><a href="#athenz" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>To use <a href="/docs/ja/2.1.1-incubating/security-athenz">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
+<p>To use <a href="security-athenz.md">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
 <ul>
 <li><code>tenantDomain</code></li>
 <li><code>tenantService</code></li>
diff --git a/content/docs/ja/2.1.1-incubating/client-libraries-java/index.html b/content/docs/ja/2.1.1-incubating/client-libraries-java/index.html
index ead5787..1569140 100644
--- a/content/docs/ja/2.1.1-incubating/client-libraries-java/index.html
+++ b/content/docs/ja/2.1.1-incubating/client-libraries-java/index.html
@@ -154,9 +154,9 @@ client.close();</p>
     .create();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="message-routing"></a><a href="#message-routing" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="/docs/ja/2.1.1-incubating/cookbooks-partitioned">Partitioned Topics</a> cookbook.</p>
+<p>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="cookbooks-partitioned.md">Partitioned Topics</a> cookbook.</p>
 <h3><a class="anchor" aria-hidden="true" id="async-send"></a><a href="#async-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.42-1 [...]
-<p>You can also publish messages <a href="/docs/ja/2.1.1-incubating/concepts-messaging#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
+<p>You can also publish messages <a href="concepts-messaging.md#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
 <p>Here's an example async send operation:</p>
 <pre><code class="hljs css language-java">producer.sendAsync(<span class="hljs-string">"my-async-message"</span>.getBytes()).thenAccept(msgId -&gt; {
     System.out.printf(<span class="hljs-string">"Message with ID %s successfully sent"</span>, msgId);
@@ -174,17 +174,17 @@ client.close();</p>
 </code></pre>
 <p>As for the previous case, it's also possible to terminate the builder chain with <code>sendAsync()</code> and get a future returned.</p>
 <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>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="/docs/ja/2.1.1-incubating/reference-terminology#consumer">consumer</a> by first instantiating a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
+<p>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="reference-terminology.md#consumer">consumer</a> by first instantiating a <a href="https://pulsar.incubator.apache.org/api/client/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>
 <p>Once you've instantiated a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
  object, you can create a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
- by specifying a <a href="/docs/ja/2.1.1-incubating/reference-terminology#topic">topic</a> and a <a href="/docs/ja/2.1.1-incubating/concepts-messaging#subscription-modes">subscription</a>.</p>
+ by specifying a <a href="reference-terminology.md#topic">topic</a> and a <a href="concepts-messaging.md#subscription-modes">subscription</a>.</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
         .subscriptionName(<span class="hljs-string">"my-subscription"</span>)
         .subscribe();
 </code></pre>
-<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="/docs/ja/2.1.1-incubating/reference-terminology#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
+<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="reference-terminology.md#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">do</span> {
   <span class="hljs-comment">// Wait for a message</span>
   Message msg = consumer.receive();
@@ -207,13 +207,13 @@ client.close();</p>
         .subscribe();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="async-receive"></a><a href="#async-receive" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="/docs/ja/2.1.1-incubating/concepts-messaging#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
+<p>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="concepts-messaging.md#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
 <p>Here's an example:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>Async receive operations return a {@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message} wrapped inside of a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="multi-topic-subscriptions"></a><a href="#multi-topic-subscriptions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
-<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="/docs/ja/2.1.1-incubating/concepts-messaging#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
+<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="concepts-messaging.md#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
 <p>Here are some examples:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
@@ -274,7 +274,7 @@ consumerBuilder
         });
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="reader-interface-readers"></a><a href="#reader-interface-readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
-<p>With the <a href="/docs/ja/2.1.1-incubating/concepts-clients#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
+<p>With the <a href="concepts-clients.md#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
  objects by specifying a topic, a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
 , and {@inject javadoc:ReaderConfiguration:/client/org/apache/pulsar/client/api/ReaderConfiguration}.</p>
 <p>Here's an example:</p>
@@ -294,12 +294,12 @@ Reader reader = pulsarClient.newReader()
 <p>In the example above, a <code>Reader</code> object is instantiated for a specific topic and message (by ID); the reader then iterates over each message in the topic after the message identified by <code>msgIdBytes</code> (how that value is obtained depends on the application).</p>
 <p>The code sample above shows pointing the <code>Reader</code> object to a specific message (by ID), but you can also use <code>MessageId.earliest</code> to point to the earliest available message on the topic of <code>MessageId.latest</code> to point to the most recent available message.</p>
 <h2><a class="anchor" aria-hidden="true" id="schemas"></a><a href="#schemas" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 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, all message data consists of byte arrays &quot;under the hood.&quot; <a href="/docs/ja/2.1.1-incubating/concepts-schema-registry">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an e [...]
+<p>In Pulsar, all message data consists of byte arrays &quot;under the hood.&quot; <a href="concepts-schema-registry.md">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an example:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
 </code></pre>
-<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="/docs/ja/2.1.1-incubating/reference-terminology#topic">topic</a>.</p>
+<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="reference-terminology.md#topic">topic</a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="schema-example"></a><a href="#schema-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- [...]
 <p>Let's say that you have a <code>SensorReading</code> class that you'd like to transmit over a Pulsar topic:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SensorReading</span> </span>{
@@ -352,9 +352,9 @@ Producer&lt;MyPojo&gt; pojoProducer = client.newProducer(pojoSchema)
 </code></pre></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="authentication"></a><a href="#authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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 は現在 2 つの認証スキーム、<a href="/docs/ja/2.1.1-incubating/security-tls-authentication">TLS</a> と <a href="/docs/ja/2.1.1-incubating/security-athenz">Athenz</a> に対応しています。Pulsar Java クライアントではどちらを使用することもできます。</p>
+<p>Pulsar は現在 2 つの認証スキーム、<a href="security-tls-authentication.md">TLS</a> と <a href="security-athenz.md">Athenz</a> に対応しています。Pulsar Java クライアントではどちらを使用することもできます。</p>
 <h3><a class="anchor" aria-hidden="true" id="tls-認証"></a><a href="#tls-認証" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>To use <a href="/docs/ja/2.1.1-incubating/security-tls-authentication">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
+<p>To use <a href="security-tls-authentication.md">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
 <p>Here's an example configuration:</p>
 <pre><code class="hljs css language-java">Map&lt;String, String&gt; authParams = <span class="hljs-keyword">new</span> HashMap&lt;&gt;();
 authParams.put(<span class="hljs-string">"tlsCertFile"</span>, <span class="hljs-string">"/path/to/client-cert.pem"</span>);
@@ -371,7 +371,7 @@ PulsarClient client = PulsarClient.builder()
         .build();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="athenz"></a><a href="#athenz" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>To use <a href="/docs/ja/2.1.1-incubating/security-athenz">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
+<p>To use <a href="security-athenz.md">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
 <ul>
 <li><code>tenantDomain</code></li>
 <li><code>tenantService</code></li>
diff --git a/content/docs/ja/2.1.1-incubating/deploy-aws.html b/content/docs/ja/2.1.1-incubating/deploy-aws.html
index 6b00772..9fcb511 100644
--- a/content/docs/ja/2.1.1-incubating/deploy-aws.html
+++ b/content/docs/ja/2.1.1-incubating/deploy-aws.html
@@ -138,9 +138,9 @@ id_rsa               id_rsa.pub
 <li>9 total <a href="https://aws.amazon.com/ec2">Elastic Compute Cloud</a> (EC2) instances running the <a href="https://access.redhat.com/articles/3135091">ami-9fa343e7</a> Amazon Machine Image (AMI), which runs <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/7.4_release_notes/index">Red Hat Enterprise Linux (RHEL) 7.4</a>. By default, that includes:
 <ul>
 <li>3 small VMs for ZooKeeper (<a href="https://www.ec2instances.info/?selected=t2.small">t2.small</a> instances)</li>
-<li>3 larger VMs for BookKeeper <a href="/docs/ja/2.1.1-incubating/reference-terminology#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
-<li>2 larger VMs for Pulsar <a href="/docs/ja/2.1.1-incubating/reference-terminology#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
-<li>1 larger VMs for Pulsar <a href="/docs/ja/2.1.1-incubating/reference-terminology#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>3 larger VMs for BookKeeper <a href="reference-terminology.md#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
+<li>2 larger VMs for Pulsar <a href="reference-terminology.md#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>1 larger VMs for Pulsar <a href="reference-terminology.md#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
 </ul></li>
 <li>An EC2 <a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html">security group</a></li>
 <li>A <a href="https://aws.amazon.com/vpc/">virtual private cloud</a> (VPC) for security</li>
diff --git a/content/docs/ja/2.1.1-incubating/deploy-aws/index.html b/content/docs/ja/2.1.1-incubating/deploy-aws/index.html
index 6b00772..9fcb511 100644
--- a/content/docs/ja/2.1.1-incubating/deploy-aws/index.html
+++ b/content/docs/ja/2.1.1-incubating/deploy-aws/index.html
@@ -138,9 +138,9 @@ id_rsa               id_rsa.pub
 <li>9 total <a href="https://aws.amazon.com/ec2">Elastic Compute Cloud</a> (EC2) instances running the <a href="https://access.redhat.com/articles/3135091">ami-9fa343e7</a> Amazon Machine Image (AMI), which runs <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/7.4_release_notes/index">Red Hat Enterprise Linux (RHEL) 7.4</a>. By default, that includes:
 <ul>
 <li>3 small VMs for ZooKeeper (<a href="https://www.ec2instances.info/?selected=t2.small">t2.small</a> instances)</li>
-<li>3 larger VMs for BookKeeper <a href="/docs/ja/2.1.1-incubating/reference-terminology#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
-<li>2 larger VMs for Pulsar <a href="/docs/ja/2.1.1-incubating/reference-terminology#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
-<li>1 larger VMs for Pulsar <a href="/docs/ja/2.1.1-incubating/reference-terminology#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>3 larger VMs for BookKeeper <a href="reference-terminology.md#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
+<li>2 larger VMs for Pulsar <a href="reference-terminology.md#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>1 larger VMs for Pulsar <a href="reference-terminology.md#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
 </ul></li>
 <li>An EC2 <a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html">security group</a></li>
 <li>A <a href="https://aws.amazon.com/vpc/">virtual private cloud</a> (VPC) for security</li>
diff --git a/content/docs/ja/2.1.1-incubating/deploy-bare-metal.html b/content/docs/ja/2.1.1-incubating/deploy-bare-metal.html
index 0f3fb89..c504590 100644
--- a/content/docs/ja/2.1.1-incubating/deploy-bare-metal.html
+++ b/content/docs/ja/2.1.1-incubating/deploy-bare-metal.html
@@ -223,7 +223,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <pre><code class="hljs">
 Once you've applied the desired configuration in <span class="hljs-code">`conf/bookkeeper.conf`</span>, you can start up a bookie on each of your BookKeeper hosts. You can start up each bookie either in the background, using [<span class="hljs-string">nohup</span>](<span class="hljs-link">https://en.wikipedia.org/wiki/Nohup</span>), or in the foreground.
 
-To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">/docs/ja/2.1.1-incubating/reference-cli-tools#pulsar-daemon</span>) CLI tool:
+To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-daemon</span>) CLI tool:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-daemon start bookie
@@ -231,18 +231,18 @@ $ bin/pulsar-daemon start bookie
 <p>To start the bookie in the foreground:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper bookie
 </code></pre>
-<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="/docs/ja/2.1.1-incubating/reference-cli-tools#shell">BookKeeper shell</a> on it:</p>
+<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on it:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell bookiesanity
 </code></pre>
 <p>This will create an ephemeral BookKeeper ledger on the local bookie, write a few entries, read them back, and finally delete the ledger.</p>
-<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="/docs/ja/2.1.1-incubating/reference-cli-tools#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
+<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell simpletest --ensemble &lt;num-bookies&gt; --writeQuorum &lt;num-bookies&gt; --ackQuorum &lt;num-bookies&gt; --numEntries &lt;num-entries&gt;
 </code></pre>
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
 <h3><a class="anchor" aria-hidden="true" id="configuring-brokers"></a><a href="#configuring-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.2 [...]
-<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="/docs/ja/2.1.1-incubating/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="/docs/ja/2.1.1-incubating/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configura [...]
+<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
@@ -250,7 +250,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="enabling-pulsar-functions-optional"></a><a href="#enabling-pulsar-functions-optional" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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>If you want to enable <a href="/docs/ja/2.1.1-incubating/functions-overview">Pulsar Functions</a>, you can follow the instructions as below:</p>
+<p>If you want to enable <a href="functions-overview.md">Pulsar Functions</a>, you can follow the instructions as below:</p>
 <ol>
 <li><p>Edit <code>conf/broker.conf</code> to enable function worker, by setting <code>functionsWorkerEnabled</code> to <code>true</code>.</p>
 <pre><code class="hljs css language-conf"><span class="hljs-attr">functionsWorkerEnabled</span>=<span class="hljs-literal">true</span>
@@ -262,17 +262,17 @@ $ bin/pulsar-daemon start bookie
 </code></pre></li>
 </ol>
 <h3><a class="anchor" aria-hidden="true" id="starting-brokers"></a><a href="#starting-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. [...]
-<p>You can then provide any other configuration changes that you'd like in the <a href="/docs/ja/2.1.1-incubating/reference-configuration#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
-<p>You can start a broker in the foreground using the <a href="/docs/ja/2.1.1-incubating/reference-cli-tools#pulsar-broker"><code>pulsar broker</code></a> command:</p>
+<p>You can then provide any other configuration changes that you'd like in the <a href="reference-configuration.md#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
+<p>You can start a broker in the foreground using the <a href="reference-cli-tools.md#pulsar-broker"><code>pulsar broker</code></a> command:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar broker
 </code></pre>
-<p>You can start a broker in the background using the <a href="/docs/ja/2.1.1-incubating/reference-cli-tools#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
+<p>You can start a broker in the background using the <a href="reference-cli-tools.md#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-daemon start broker
 </code></pre>
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-cluster" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S1 [...]
-<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="/docs/ja/2.1.1-incubating/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/ja/2.1.1-incubating/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
+<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="reference-cli-tools.md#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -300,7 +300,7 @@ $ bin/pulsar-daemon start bookie
   --namespace default \
   --name exclamation
 </code></pre>
-<p>Check if the function is running as expected by <a href="/docs/ja/2.1.1-incubating/functions-deploying#triggering-pulsar-functions">triggering</a> the function.</p>
+<p>Check if the function is running as expected by <a href="functions-deploying.md#triggering-pulsar-functions">triggering</a> the function.</p>
 <pre><code class="hljs css language-bash">bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger --name exclamation --triggerValue <span class="hljs-string">"hello world"</span>
 </code></pre>
 <p>You will see output as below:</p>
diff --git a/content/docs/ja/2.1.1-incubating/deploy-bare-metal/index.html b/content/docs/ja/2.1.1-incubating/deploy-bare-metal/index.html
index 0f3fb89..c504590 100644
--- a/content/docs/ja/2.1.1-incubating/deploy-bare-metal/index.html
+++ b/content/docs/ja/2.1.1-incubating/deploy-bare-metal/index.html
@@ -223,7 +223,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <pre><code class="hljs">
 Once you've applied the desired configuration in <span class="hljs-code">`conf/bookkeeper.conf`</span>, you can start up a bookie on each of your BookKeeper hosts. You can start up each bookie either in the background, using [<span class="hljs-string">nohup</span>](<span class="hljs-link">https://en.wikipedia.org/wiki/Nohup</span>), or in the foreground.
 
-To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">/docs/ja/2.1.1-incubating/reference-cli-tools#pulsar-daemon</span>) CLI tool:
+To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-daemon</span>) CLI tool:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-daemon start bookie
@@ -231,18 +231,18 @@ $ bin/pulsar-daemon start bookie
 <p>To start the bookie in the foreground:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper bookie
 </code></pre>
-<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="/docs/ja/2.1.1-incubating/reference-cli-tools#shell">BookKeeper shell</a> on it:</p>
+<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on it:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell bookiesanity
 </code></pre>
 <p>This will create an ephemeral BookKeeper ledger on the local bookie, write a few entries, read them back, and finally delete the ledger.</p>
-<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="/docs/ja/2.1.1-incubating/reference-cli-tools#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
+<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell simpletest --ensemble &lt;num-bookies&gt; --writeQuorum &lt;num-bookies&gt; --ackQuorum &lt;num-bookies&gt; --numEntries &lt;num-entries&gt;
 </code></pre>
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
 <h3><a class="anchor" aria-hidden="true" id="configuring-brokers"></a><a href="#configuring-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.2 [...]
-<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="/docs/ja/2.1.1-incubating/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="/docs/ja/2.1.1-incubating/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configura [...]
+<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
@@ -250,7 +250,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="enabling-pulsar-functions-optional"></a><a href="#enabling-pulsar-functions-optional" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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>If you want to enable <a href="/docs/ja/2.1.1-incubating/functions-overview">Pulsar Functions</a>, you can follow the instructions as below:</p>
+<p>If you want to enable <a href="functions-overview.md">Pulsar Functions</a>, you can follow the instructions as below:</p>
 <ol>
 <li><p>Edit <code>conf/broker.conf</code> to enable function worker, by setting <code>functionsWorkerEnabled</code> to <code>true</code>.</p>
 <pre><code class="hljs css language-conf"><span class="hljs-attr">functionsWorkerEnabled</span>=<span class="hljs-literal">true</span>
@@ -262,17 +262,17 @@ $ bin/pulsar-daemon start bookie
 </code></pre></li>
 </ol>
 <h3><a class="anchor" aria-hidden="true" id="starting-brokers"></a><a href="#starting-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. [...]
-<p>You can then provide any other configuration changes that you'd like in the <a href="/docs/ja/2.1.1-incubating/reference-configuration#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
-<p>You can start a broker in the foreground using the <a href="/docs/ja/2.1.1-incubating/reference-cli-tools#pulsar-broker"><code>pulsar broker</code></a> command:</p>
+<p>You can then provide any other configuration changes that you'd like in the <a href="reference-configuration.md#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
+<p>You can start a broker in the foreground using the <a href="reference-cli-tools.md#pulsar-broker"><code>pulsar broker</code></a> command:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar broker
 </code></pre>
-<p>You can start a broker in the background using the <a href="/docs/ja/2.1.1-incubating/reference-cli-tools#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
+<p>You can start a broker in the background using the <a href="reference-cli-tools.md#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-daemon start broker
 </code></pre>
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-cluster" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S1 [...]
-<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="/docs/ja/2.1.1-incubating/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/ja/2.1.1-incubating/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
+<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="reference-cli-tools.md#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -300,7 +300,7 @@ $ bin/pulsar-daemon start bookie
   --namespace default \
   --name exclamation
 </code></pre>
-<p>Check if the function is running as expected by <a href="/docs/ja/2.1.1-incubating/functions-deploying#triggering-pulsar-functions">triggering</a> the function.</p>
+<p>Check if the function is running as expected by <a href="functions-deploying.md#triggering-pulsar-functions">triggering</a> the function.</p>
 <pre><code class="hljs css language-bash">bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger --name exclamation --triggerValue <span class="hljs-string">"hello world"</span>
 </code></pre>
 <p>You will see output as below:</p>
diff --git a/content/docs/ja/2.1.1-incubating/functions-quickstart.html b/content/docs/ja/2.1.1-incubating/functions-quickstart.html
index 1b5044d..64bd8df 100644
--- a/content/docs/ja/2.1.1-incubating/functions-quickstart.html
+++ b/content/docs/ja/2.1.1-incubating/functions-quickstart.html
@@ -90,7 +90,7 @@ $ bin/pulsar standalone \
 </blockquote>
 <p>--inputs topic1,topic2</p>
 <pre><code class="hljs">
-We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">/docs/ja/2.1.1-incubating/reference-cli-tools#pulsar-client</span>) tool to listen for messages on the output topic:
+We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-client</span>) tool to listen for messages on the output topic:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-client consume persistent://public/default/exclamation-output \
@@ -117,7 +117,7 @@ Hello world!
 <li>If our exclamation function <em>hadn't</em> been running, Pulsar would have durably stored the message data published to the input topic in <a href="https://bookkeeper.apache.org">Apache BookKeeper</a> until a consumer consumed and acknowledged the message</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="run-a-pulsar-function-in-cluster-mode"></a><a href="#run-a-pulsar-function-in-cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 [...]
-<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="/docs/ja/2.1.1-incubating/pulsar-admin#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
+<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="reference-pulsar-admin.md#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
 <p>This command, for example, would deploy the same exclamation function we ran locally above <em>in our Pulsar cluster</em> (rather than outside it):</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --jar examples/api-examples.jar \
@@ -201,7 +201,7 @@ Hello world!
 <p>If you see <code>Deleted successfully</code> in the output, then you've succesfully run, updated, and shut down a Pulsar Function running in cluster mode. Congrats! Now, let's go even further and run a brand new function in the next section.</p>
 <h2><a class="anchor" aria-hidden="true" id="writing-and-running-a-new-function"></a><a href="#writing-and-running-a-new-function" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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 [...]
 <blockquote>
-<p>In order to write and run the <a href="/docs/ja/2.1.1-incubating/functions-api#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
+<p>In order to write and run the <a href="functions-api.md#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
 <pre><code class="hljs css language-bash"></code></pre>
 </blockquote>
 <p>$ pip install pulsar-client</p>
diff --git a/content/docs/ja/2.1.1-incubating/functions-quickstart/index.html b/content/docs/ja/2.1.1-incubating/functions-quickstart/index.html
index 1b5044d..64bd8df 100644
--- a/content/docs/ja/2.1.1-incubating/functions-quickstart/index.html
+++ b/content/docs/ja/2.1.1-incubating/functions-quickstart/index.html
@@ -90,7 +90,7 @@ $ bin/pulsar standalone \
 </blockquote>
 <p>--inputs topic1,topic2</p>
 <pre><code class="hljs">
-We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">/docs/ja/2.1.1-incubating/reference-cli-tools#pulsar-client</span>) tool to listen for messages on the output topic:
+We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-client</span>) tool to listen for messages on the output topic:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-client consume persistent://public/default/exclamation-output \
@@ -117,7 +117,7 @@ Hello world!
 <li>If our exclamation function <em>hadn't</em> been running, Pulsar would have durably stored the message data published to the input topic in <a href="https://bookkeeper.apache.org">Apache BookKeeper</a> until a consumer consumed and acknowledged the message</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="run-a-pulsar-function-in-cluster-mode"></a><a href="#run-a-pulsar-function-in-cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 [...]
-<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="/docs/ja/2.1.1-incubating/pulsar-admin#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
+<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="reference-pulsar-admin.md#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
 <p>This command, for example, would deploy the same exclamation function we ran locally above <em>in our Pulsar cluster</em> (rather than outside it):</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --jar examples/api-examples.jar \
@@ -201,7 +201,7 @@ Hello world!
 <p>If you see <code>Deleted successfully</code> in the output, then you've succesfully run, updated, and shut down a Pulsar Function running in cluster mode. Congrats! Now, let's go even further and run a brand new function in the next section.</p>
 <h2><a class="anchor" aria-hidden="true" id="writing-and-running-a-new-function"></a><a href="#writing-and-running-a-new-function" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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 [...]
 <blockquote>
-<p>In order to write and run the <a href="/docs/ja/2.1.1-incubating/functions-api#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
+<p>In order to write and run the <a href="functions-api.md#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
 <pre><code class="hljs css language-bash"></code></pre>
 </blockquote>
 <p>$ pip install pulsar-client</p>
diff --git a/content/docs/ja/client-libraries-java.html b/content/docs/ja/client-libraries-java.html
index 1e7f7b9..a5ac7e5 100644
--- a/content/docs/ja/client-libraries-java.html
+++ b/content/docs/ja/client-libraries-java.html
@@ -154,9 +154,9 @@ client.close();</p>
     .create();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="message-routing"></a><a href="#message-routing" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="/docs/ja/cookbooks-partitioned">Partitioned Topics</a> cookbook.</p>
+<p>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="cookbooks-partitioned.md">Partitioned Topics</a> cookbook.</p>
 <h3><a class="anchor" aria-hidden="true" id="async-send"></a><a href="#async-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.42-1 [...]
-<p>You can also publish messages <a href="/docs/ja/concepts-messaging#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
+<p>You can also publish messages <a href="concepts-messaging.md#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
 <p>Here's an example async send operation:</p>
 <pre><code class="hljs css language-java">producer.sendAsync(<span class="hljs-string">"my-async-message"</span>.getBytes()).thenAccept(msgId -&gt; {
     System.out.printf(<span class="hljs-string">"Message with ID %s successfully sent"</span>, msgId);
@@ -174,17 +174,17 @@ client.close();</p>
 </code></pre>
 <p>As for the previous case, it's also possible to terminate the builder chain with <code>sendAsync()</code> and get a future returned.</p>
 <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>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="/docs/ja/reference-terminology#consumer">consumer</a> by first instantiating a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
+<p>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="reference-terminology.md#consumer">consumer</a> by first instantiating a <a href="https://pulsar.incubator.apache.org/api/client/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>
 <p>Once you've instantiated a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
  object, you can create a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
- by specifying a <a href="/docs/ja/reference-terminology#topic">topic</a> and a <a href="/docs/ja/concepts-messaging#subscription-modes">subscription</a>.</p>
+ by specifying a <a href="reference-terminology.md#topic">topic</a> and a <a href="concepts-messaging.md#subscription-modes">subscription</a>.</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
         .subscriptionName(<span class="hljs-string">"my-subscription"</span>)
         .subscribe();
 </code></pre>
-<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="/docs/ja/reference-terminology#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
+<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="reference-terminology.md#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">do</span> {
   <span class="hljs-comment">// Wait for a message</span>
   Message msg = consumer.receive();
@@ -207,13 +207,13 @@ client.close();</p>
         .subscribe();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="async-receive"></a><a href="#async-receive" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="/docs/ja/concepts-messaging#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
+<p>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="concepts-messaging.md#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
 <p>Here's an example:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>Async receive operations return a {@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message} wrapped inside of a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="multi-topic-subscriptions"></a><a href="#multi-topic-subscriptions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
-<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="/docs/ja/concepts-messaging#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
+<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="concepts-messaging.md#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
 <p>Here are some examples:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
@@ -274,7 +274,7 @@ consumerBuilder
         });
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="reader-interface-readers"></a><a href="#reader-interface-readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
-<p>With the <a href="/docs/ja/concepts-clients#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
+<p>With the <a href="concepts-clients.md#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
  objects by specifying a topic, a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
 , and {@inject javadoc:ReaderConfiguration:/client/org/apache/pulsar/client/api/ReaderConfiguration}.</p>
 <p>Here's an example:</p>
@@ -294,12 +294,12 @@ Reader reader = pulsarClient.newReader()
 <p>In the example above, a <code>Reader</code> object is instantiated for a specific topic and message (by ID); the reader then iterates over each message in the topic after the message identified by <code>msgIdBytes</code> (how that value is obtained depends on the application).</p>
 <p>The code sample above shows pointing the <code>Reader</code> object to a specific message (by ID), but you can also use <code>MessageId.earliest</code> to point to the earliest available message on the topic of <code>MessageId.latest</code> to point to the most recent available message.</p>
 <h2><a class="anchor" aria-hidden="true" id="schemas"></a><a href="#schemas" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 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, all message data consists of byte arrays &quot;under the hood.&quot; <a href="/docs/ja/concepts-schema-registry">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an example:</p>
+<p>In Pulsar, all message data consists of byte arrays &quot;under the hood.&quot; <a href="concepts-schema-registry.md">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an example:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
 </code></pre>
-<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="/docs/ja/reference-terminology#topic">topic</a>.</p>
+<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="reference-terminology.md#topic">topic</a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="schema-example"></a><a href="#schema-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- [...]
 <p>Let's say that you have a <code>SensorReading</code> class that you'd like to transmit over a Pulsar topic:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SensorReading</span> </span>{
@@ -352,9 +352,9 @@ Producer&lt;MyPojo&gt; pojoProducer = client.newProducer(pojoSchema)
 </code></pre></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="authentication"></a><a href="#authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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 は現在 2 つの認証スキーム、<a href="/docs/ja/security-tls-authentication">TLS</a> と <a href="/docs/ja/security-athenz">Athenz</a> に対応しています。Pulsar Java クライアントではどちらを使用することもできます。</p>
+<p>Pulsar は現在 2 つの認証スキーム、<a href="security-tls-authentication.md">TLS</a> と <a href="security-athenz.md">Athenz</a> に対応しています。Pulsar Java クライアントではどちらを使用することもできます。</p>
 <h3><a class="anchor" aria-hidden="true" id="tls-認証"></a><a href="#tls-認証" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>To use <a href="/docs/ja/security-tls-authentication">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
+<p>To use <a href="security-tls-authentication.md">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
 <p>Here's an example configuration:</p>
 <pre><code class="hljs css language-java">Map&lt;String, String&gt; authParams = <span class="hljs-keyword">new</span> HashMap&lt;&gt;();
 authParams.put(<span class="hljs-string">"tlsCertFile"</span>, <span class="hljs-string">"/path/to/client-cert.pem"</span>);
@@ -371,7 +371,7 @@ PulsarClient client = PulsarClient.builder()
         .build();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="athenz"></a><a href="#athenz" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>To use <a href="/docs/ja/security-athenz">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
+<p>To use <a href="security-athenz.md">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
 <ul>
 <li><code>tenantDomain</code></li>
 <li><code>tenantService</code></li>
diff --git a/content/docs/ja/client-libraries-java/index.html b/content/docs/ja/client-libraries-java/index.html
index 1e7f7b9..a5ac7e5 100644
--- a/content/docs/ja/client-libraries-java/index.html
+++ b/content/docs/ja/client-libraries-java/index.html
@@ -154,9 +154,9 @@ client.close();</p>
     .create();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="message-routing"></a><a href="#message-routing" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="/docs/ja/cookbooks-partitioned">Partitioned Topics</a> cookbook.</p>
+<p>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="cookbooks-partitioned.md">Partitioned Topics</a> cookbook.</p>
 <h3><a class="anchor" aria-hidden="true" id="async-send"></a><a href="#async-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.42-1 [...]
-<p>You can also publish messages <a href="/docs/ja/concepts-messaging#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
+<p>You can also publish messages <a href="concepts-messaging.md#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
 <p>Here's an example async send operation:</p>
 <pre><code class="hljs css language-java">producer.sendAsync(<span class="hljs-string">"my-async-message"</span>.getBytes()).thenAccept(msgId -&gt; {
     System.out.printf(<span class="hljs-string">"Message with ID %s successfully sent"</span>, msgId);
@@ -174,17 +174,17 @@ client.close();</p>
 </code></pre>
 <p>As for the previous case, it's also possible to terminate the builder chain with <code>sendAsync()</code> and get a future returned.</p>
 <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>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="/docs/ja/reference-terminology#consumer">consumer</a> by first instantiating a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
+<p>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="reference-terminology.md#consumer">consumer</a> by first instantiating a <a href="https://pulsar.incubator.apache.org/api/client/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>
 <p>Once you've instantiated a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
  object, you can create a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
- by specifying a <a href="/docs/ja/reference-terminology#topic">topic</a> and a <a href="/docs/ja/concepts-messaging#subscription-modes">subscription</a>.</p>
+ by specifying a <a href="reference-terminology.md#topic">topic</a> and a <a href="concepts-messaging.md#subscription-modes">subscription</a>.</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
         .subscriptionName(<span class="hljs-string">"my-subscription"</span>)
         .subscribe();
 </code></pre>
-<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="/docs/ja/reference-terminology#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
+<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="reference-terminology.md#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">do</span> {
   <span class="hljs-comment">// Wait for a message</span>
   Message msg = consumer.receive();
@@ -207,13 +207,13 @@ client.close();</p>
         .subscribe();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="async-receive"></a><a href="#async-receive" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="/docs/ja/concepts-messaging#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
+<p>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="concepts-messaging.md#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
 <p>Here's an example:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>Async receive operations return a {@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message} wrapped inside of a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="multi-topic-subscriptions"></a><a href="#multi-topic-subscriptions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
-<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="/docs/ja/concepts-messaging#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
+<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="concepts-messaging.md#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
 <p>Here are some examples:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
@@ -274,7 +274,7 @@ consumerBuilder
         });
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="reader-interface-readers"></a><a href="#reader-interface-readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
-<p>With the <a href="/docs/ja/concepts-clients#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
+<p>With the <a href="concepts-clients.md#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
  objects by specifying a topic, a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
 , and {@inject javadoc:ReaderConfiguration:/client/org/apache/pulsar/client/api/ReaderConfiguration}.</p>
 <p>Here's an example:</p>
@@ -294,12 +294,12 @@ Reader reader = pulsarClient.newReader()
 <p>In the example above, a <code>Reader</code> object is instantiated for a specific topic and message (by ID); the reader then iterates over each message in the topic after the message identified by <code>msgIdBytes</code> (how that value is obtained depends on the application).</p>
 <p>The code sample above shows pointing the <code>Reader</code> object to a specific message (by ID), but you can also use <code>MessageId.earliest</code> to point to the earliest available message on the topic of <code>MessageId.latest</code> to point to the most recent available message.</p>
 <h2><a class="anchor" aria-hidden="true" id="schemas"></a><a href="#schemas" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 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, all message data consists of byte arrays &quot;under the hood.&quot; <a href="/docs/ja/concepts-schema-registry">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an example:</p>
+<p>In Pulsar, all message data consists of byte arrays &quot;under the hood.&quot; <a href="concepts-schema-registry.md">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an example:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
 </code></pre>
-<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="/docs/ja/reference-terminology#topic">topic</a>.</p>
+<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="reference-terminology.md#topic">topic</a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="schema-example"></a><a href="#schema-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- [...]
 <p>Let's say that you have a <code>SensorReading</code> class that you'd like to transmit over a Pulsar topic:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SensorReading</span> </span>{
@@ -352,9 +352,9 @@ Producer&lt;MyPojo&gt; pojoProducer = client.newProducer(pojoSchema)
 </code></pre></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="authentication"></a><a href="#authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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 は現在 2 つの認証スキーム、<a href="/docs/ja/security-tls-authentication">TLS</a> と <a href="/docs/ja/security-athenz">Athenz</a> に対応しています。Pulsar Java クライアントではどちらを使用することもできます。</p>
+<p>Pulsar は現在 2 つの認証スキーム、<a href="security-tls-authentication.md">TLS</a> と <a href="security-athenz.md">Athenz</a> に対応しています。Pulsar Java クライアントではどちらを使用することもできます。</p>
 <h3><a class="anchor" aria-hidden="true" id="tls-認証"></a><a href="#tls-認証" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>To use <a href="/docs/ja/security-tls-authentication">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
+<p>To use <a href="security-tls-authentication.md">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
 <p>Here's an example configuration:</p>
 <pre><code class="hljs css language-java">Map&lt;String, String&gt; authParams = <span class="hljs-keyword">new</span> HashMap&lt;&gt;();
 authParams.put(<span class="hljs-string">"tlsCertFile"</span>, <span class="hljs-string">"/path/to/client-cert.pem"</span>);
@@ -371,7 +371,7 @@ PulsarClient client = PulsarClient.builder()
         .build();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="athenz"></a><a href="#athenz" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>To use <a href="/docs/ja/security-athenz">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
+<p>To use <a href="security-athenz.md">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
 <ul>
 <li><code>tenantDomain</code></li>
 <li><code>tenantService</code></li>
diff --git a/content/docs/ja/deploy-aws.html b/content/docs/ja/deploy-aws.html
index bf50294..fff5112 100644
--- a/content/docs/ja/deploy-aws.html
+++ b/content/docs/ja/deploy-aws.html
@@ -138,9 +138,9 @@ id_rsa               id_rsa.pub
 <li>9 total <a href="https://aws.amazon.com/ec2">Elastic Compute Cloud</a> (EC2) instances running the <a href="https://access.redhat.com/articles/3135091">ami-9fa343e7</a> Amazon Machine Image (AMI), which runs <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/7.4_release_notes/index">Red Hat Enterprise Linux (RHEL) 7.4</a>. By default, that includes:
 <ul>
 <li>3 small VMs for ZooKeeper (<a href="https://www.ec2instances.info/?selected=t2.small">t2.small</a> instances)</li>
-<li>3 larger VMs for BookKeeper <a href="/docs/ja/reference-terminology#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
-<li>2 larger VMs for Pulsar <a href="/docs/ja/reference-terminology#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
-<li>1 larger VMs for Pulsar <a href="/docs/ja/reference-terminology#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>3 larger VMs for BookKeeper <a href="reference-terminology.md#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
+<li>2 larger VMs for Pulsar <a href="reference-terminology.md#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>1 larger VMs for Pulsar <a href="reference-terminology.md#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
 </ul></li>
 <li>An EC2 <a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html">security group</a></li>
 <li>A <a href="https://aws.amazon.com/vpc/">virtual private cloud</a> (VPC) for security</li>
diff --git a/content/docs/ja/deploy-aws/index.html b/content/docs/ja/deploy-aws/index.html
index bf50294..fff5112 100644
--- a/content/docs/ja/deploy-aws/index.html
+++ b/content/docs/ja/deploy-aws/index.html
@@ -138,9 +138,9 @@ id_rsa               id_rsa.pub
 <li>9 total <a href="https://aws.amazon.com/ec2">Elastic Compute Cloud</a> (EC2) instances running the <a href="https://access.redhat.com/articles/3135091">ami-9fa343e7</a> Amazon Machine Image (AMI), which runs <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/7.4_release_notes/index">Red Hat Enterprise Linux (RHEL) 7.4</a>. By default, that includes:
 <ul>
 <li>3 small VMs for ZooKeeper (<a href="https://www.ec2instances.info/?selected=t2.small">t2.small</a> instances)</li>
-<li>3 larger VMs for BookKeeper <a href="/docs/ja/reference-terminology#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
-<li>2 larger VMs for Pulsar <a href="/docs/ja/reference-terminology#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
-<li>1 larger VMs for Pulsar <a href="/docs/ja/reference-terminology#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>3 larger VMs for BookKeeper <a href="reference-terminology.md#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
+<li>2 larger VMs for Pulsar <a href="reference-terminology.md#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>1 larger VMs for Pulsar <a href="reference-terminology.md#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
 </ul></li>
 <li>An EC2 <a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html">security group</a></li>
 <li>A <a href="https://aws.amazon.com/vpc/">virtual private cloud</a> (VPC) for security</li>
diff --git a/content/docs/ja/deploy-bare-metal.html b/content/docs/ja/deploy-bare-metal.html
index 0b5701a..c01cf55 100644
--- a/content/docs/ja/deploy-bare-metal.html
+++ b/content/docs/ja/deploy-bare-metal.html
@@ -223,7 +223,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <pre><code class="hljs">
 Once you've applied the desired configuration in <span class="hljs-code">`conf/bookkeeper.conf`</span>, you can start up a bookie on each of your BookKeeper hosts. You can start up each bookie either in the background, using [<span class="hljs-string">nohup</span>](<span class="hljs-link">https://en.wikipedia.org/wiki/Nohup</span>), or in the foreground.
 
-To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">/docs/ja/reference-cli-tools#pulsar-daemon</span>) CLI tool:
+To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-daemon</span>) CLI tool:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-daemon start bookie
@@ -231,18 +231,18 @@ $ bin/pulsar-daemon start bookie
 <p>To start the bookie in the foreground:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper bookie
 </code></pre>
-<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="/docs/ja/reference-cli-tools#shell">BookKeeper shell</a> on it:</p>
+<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on it:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell bookiesanity
 </code></pre>
 <p>This will create an ephemeral BookKeeper ledger on the local bookie, write a few entries, read them back, and finally delete the ledger.</p>
-<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="/docs/ja/reference-cli-tools#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
+<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell simpletest --ensemble &lt;num-bookies&gt; --writeQuorum &lt;num-bookies&gt; --ackQuorum &lt;num-bookies&gt; --numEntries &lt;num-entries&gt;
 </code></pre>
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
 <h3><a class="anchor" aria-hidden="true" id="configuring-brokers"></a><a href="#configuring-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.2 [...]
-<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="/docs/ja/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="/docs/ja/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>config [...]
+<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
@@ -250,7 +250,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="enabling-pulsar-functions-optional"></a><a href="#enabling-pulsar-functions-optional" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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>If you want to enable <a href="/docs/ja/functions-overview">Pulsar Functions</a>, you can follow the instructions as below:</p>
+<p>If you want to enable <a href="functions-overview.md">Pulsar Functions</a>, you can follow the instructions as below:</p>
 <ol>
 <li><p>Edit <code>conf/broker.conf</code> to enable function worker, by setting <code>functionsWorkerEnabled</code> to <code>true</code>.</p>
 <pre><code class="hljs css language-conf"><span class="hljs-attr">functionsWorkerEnabled</span>=<span class="hljs-literal">true</span>
@@ -262,17 +262,17 @@ $ bin/pulsar-daemon start bookie
 </code></pre></li>
 </ol>
 <h3><a class="anchor" aria-hidden="true" id="starting-brokers"></a><a href="#starting-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. [...]
-<p>You can then provide any other configuration changes that you'd like in the <a href="/docs/ja/reference-configuration#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
-<p>You can start a broker in the foreground using the <a href="/docs/ja/reference-cli-tools#pulsar-broker"><code>pulsar broker</code></a> command:</p>
+<p>You can then provide any other configuration changes that you'd like in the <a href="reference-configuration.md#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
+<p>You can start a broker in the foreground using the <a href="reference-cli-tools.md#pulsar-broker"><code>pulsar broker</code></a> command:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar broker
 </code></pre>
-<p>You can start a broker in the background using the <a href="/docs/ja/reference-cli-tools#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
+<p>You can start a broker in the background using the <a href="reference-cli-tools.md#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-daemon start broker
 </code></pre>
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-cluster" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S1 [...]
-<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="/docs/ja/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/ja/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
+<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="reference-cli-tools.md#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -300,7 +300,7 @@ $ bin/pulsar-daemon start bookie
   --namespace default \
   --name exclamation
 </code></pre>
-<p>Check if the function is running as expected by <a href="/docs/ja/functions-deploying#triggering-pulsar-functions">triggering</a> the function.</p>
+<p>Check if the function is running as expected by <a href="functions-deploying.md#triggering-pulsar-functions">triggering</a> the function.</p>
 <pre><code class="hljs css language-bash">bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger --name exclamation --trigger-value <span class="hljs-string">"hello world"</span>
 </code></pre>
 <p>You will see output as below:</p>
diff --git a/content/docs/ja/deploy-bare-metal/index.html b/content/docs/ja/deploy-bare-metal/index.html
index 0b5701a..c01cf55 100644
--- a/content/docs/ja/deploy-bare-metal/index.html
+++ b/content/docs/ja/deploy-bare-metal/index.html
@@ -223,7 +223,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <pre><code class="hljs">
 Once you've applied the desired configuration in <span class="hljs-code">`conf/bookkeeper.conf`</span>, you can start up a bookie on each of your BookKeeper hosts. You can start up each bookie either in the background, using [<span class="hljs-string">nohup</span>](<span class="hljs-link">https://en.wikipedia.org/wiki/Nohup</span>), or in the foreground.
 
-To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">/docs/ja/reference-cli-tools#pulsar-daemon</span>) CLI tool:
+To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-daemon</span>) CLI tool:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-daemon start bookie
@@ -231,18 +231,18 @@ $ bin/pulsar-daemon start bookie
 <p>To start the bookie in the foreground:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper bookie
 </code></pre>
-<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="/docs/ja/reference-cli-tools#shell">BookKeeper shell</a> on it:</p>
+<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on it:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell bookiesanity
 </code></pre>
 <p>This will create an ephemeral BookKeeper ledger on the local bookie, write a few entries, read them back, and finally delete the ledger.</p>
-<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="/docs/ja/reference-cli-tools#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
+<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell simpletest --ensemble &lt;num-bookies&gt; --writeQuorum &lt;num-bookies&gt; --ackQuorum &lt;num-bookies&gt; --numEntries &lt;num-entries&gt;
 </code></pre>
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
 <h3><a class="anchor" aria-hidden="true" id="configuring-brokers"></a><a href="#configuring-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.2 [...]
-<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="/docs/ja/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="/docs/ja/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>config [...]
+<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
@@ -250,7 +250,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="enabling-pulsar-functions-optional"></a><a href="#enabling-pulsar-functions-optional" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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>If you want to enable <a href="/docs/ja/functions-overview">Pulsar Functions</a>, you can follow the instructions as below:</p>
+<p>If you want to enable <a href="functions-overview.md">Pulsar Functions</a>, you can follow the instructions as below:</p>
 <ol>
 <li><p>Edit <code>conf/broker.conf</code> to enable function worker, by setting <code>functionsWorkerEnabled</code> to <code>true</code>.</p>
 <pre><code class="hljs css language-conf"><span class="hljs-attr">functionsWorkerEnabled</span>=<span class="hljs-literal">true</span>
@@ -262,17 +262,17 @@ $ bin/pulsar-daemon start bookie
 </code></pre></li>
 </ol>
 <h3><a class="anchor" aria-hidden="true" id="starting-brokers"></a><a href="#starting-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. [...]
-<p>You can then provide any other configuration changes that you'd like in the <a href="/docs/ja/reference-configuration#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
-<p>You can start a broker in the foreground using the <a href="/docs/ja/reference-cli-tools#pulsar-broker"><code>pulsar broker</code></a> command:</p>
+<p>You can then provide any other configuration changes that you'd like in the <a href="reference-configuration.md#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
+<p>You can start a broker in the foreground using the <a href="reference-cli-tools.md#pulsar-broker"><code>pulsar broker</code></a> command:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar broker
 </code></pre>
-<p>You can start a broker in the background using the <a href="/docs/ja/reference-cli-tools#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
+<p>You can start a broker in the background using the <a href="reference-cli-tools.md#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-daemon start broker
 </code></pre>
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-cluster" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S1 [...]
-<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="/docs/ja/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/ja/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
+<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="reference-cli-tools.md#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -300,7 +300,7 @@ $ bin/pulsar-daemon start bookie
   --namespace default \
   --name exclamation
 </code></pre>
-<p>Check if the function is running as expected by <a href="/docs/ja/functions-deploying#triggering-pulsar-functions">triggering</a> the function.</p>
+<p>Check if the function is running as expected by <a href="functions-deploying.md#triggering-pulsar-functions">triggering</a> the function.</p>
 <pre><code class="hljs css language-bash">bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger --name exclamation --trigger-value <span class="hljs-string">"hello world"</span>
 </code></pre>
 <p>You will see output as below:</p>
diff --git a/content/docs/ja/functions-quickstart.html b/content/docs/ja/functions-quickstart.html
index 725588f..01326a9 100644
--- a/content/docs/ja/functions-quickstart.html
+++ b/content/docs/ja/functions-quickstart.html
@@ -90,7 +90,7 @@ $ bin/pulsar standalone \
 </blockquote>
 <p>--inputs topic1,topic2</p>
 <pre><code class="hljs">
-We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">/docs/ja/reference-cli-tools#pulsar-client</span>) tool to listen for messages on the output topic:
+We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-client</span>) tool to listen for messages on the output topic:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-client consume persistent://public/default/exclamation-output \
@@ -117,7 +117,7 @@ Hello world!
 <li>If our exclamation function <em>hadn't</em> been running, Pulsar would have durably stored the message data published to the input topic in <a href="https://bookkeeper.apache.org">Apache BookKeeper</a> until a consumer consumed and acknowledged the message</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="run-a-pulsar-function-in-cluster-mode"></a><a href="#run-a-pulsar-function-in-cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 [...]
-<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="/docs/ja/pulsar-admin#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
+<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="reference-pulsar-admin.md#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
 <p>This command, for example, would deploy the same exclamation function we ran locally above <em>in our Pulsar cluster</em> (rather than outside it):</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --jar examples/api-examples.jar \
@@ -201,7 +201,7 @@ Hello world!
 <p>If you see <code>Deleted successfully</code> in the output, then you've succesfully run, updated, and shut down a Pulsar Function running in cluster mode. Congrats! Now, let's go even further and run a brand new function in the next section.</p>
 <h2><a class="anchor" aria-hidden="true" id="writing-and-running-a-new-function"></a><a href="#writing-and-running-a-new-function" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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 [...]
 <blockquote>
-<p>In order to write and run the <a href="/docs/ja/functions-api#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
+<p>In order to write and run the <a href="functions-api.md#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
 <pre><code class="hljs css language-bash"></code></pre>
 </blockquote>
 <p>$ pip install pulsar-client</p>
diff --git a/content/docs/ja/functions-quickstart/index.html b/content/docs/ja/functions-quickstart/index.html
index 725588f..01326a9 100644
--- a/content/docs/ja/functions-quickstart/index.html
+++ b/content/docs/ja/functions-quickstart/index.html
@@ -90,7 +90,7 @@ $ bin/pulsar standalone \
 </blockquote>
 <p>--inputs topic1,topic2</p>
 <pre><code class="hljs">
-We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">/docs/ja/reference-cli-tools#pulsar-client</span>) tool to listen for messages on the output topic:
+We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-client</span>) tool to listen for messages on the output topic:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-client consume persistent://public/default/exclamation-output \
@@ -117,7 +117,7 @@ Hello world!
 <li>If our exclamation function <em>hadn't</em> been running, Pulsar would have durably stored the message data published to the input topic in <a href="https://bookkeeper.apache.org">Apache BookKeeper</a> until a consumer consumed and acknowledged the message</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="run-a-pulsar-function-in-cluster-mode"></a><a href="#run-a-pulsar-function-in-cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 [...]
-<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="/docs/ja/pulsar-admin#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
+<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="reference-pulsar-admin.md#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
 <p>This command, for example, would deploy the same exclamation function we ran locally above <em>in our Pulsar cluster</em> (rather than outside it):</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --jar examples/api-examples.jar \
@@ -201,7 +201,7 @@ Hello world!
 <p>If you see <code>Deleted successfully</code> in the output, then you've succesfully run, updated, and shut down a Pulsar Function running in cluster mode. Congrats! Now, let's go even further and run a brand new function in the next section.</p>
 <h2><a class="anchor" aria-hidden="true" id="writing-and-running-a-new-function"></a><a href="#writing-and-running-a-new-function" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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 [...]
 <blockquote>
-<p>In order to write and run the <a href="/docs/ja/functions-api#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
+<p>In order to write and run the <a href="functions-api.md#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
 <pre><code class="hljs css language-bash"></code></pre>
 </blockquote>
 <p>$ pip install pulsar-client</p>
diff --git a/content/docs/ja/next/client-libraries-java.html b/content/docs/ja/next/client-libraries-java.html
index 658810b..7c02e0d 100644
--- a/content/docs/ja/next/client-libraries-java.html
+++ b/content/docs/ja/next/client-libraries-java.html
@@ -153,9 +153,9 @@ client.close();</p>
     .create();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="message-routing"></a><a href="#message-routing" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="/docs/ja/next/cookbooks-partitioned">Partitioned Topics</a> cookbook.</p>
+<p>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="cookbooks-partitioned.md">Partitioned Topics</a> cookbook.</p>
 <h3><a class="anchor" aria-hidden="true" id="async-send"></a><a href="#async-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.42-1 [...]
-<p>You can also publish messages <a href="/docs/ja/next/concepts-messaging#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
+<p>You can also publish messages <a href="concepts-messaging.md#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
 <p>Here's an example async send operation:</p>
 <pre><code class="hljs css language-java">producer.sendAsync(<span class="hljs-string">"my-async-message"</span>.getBytes()).thenAccept(msgId -&gt; {
     System.out.printf(<span class="hljs-string">"Message with ID %s successfully sent"</span>, msgId);
@@ -173,17 +173,17 @@ client.close();</p>
 </code></pre>
 <p>As for the previous case, it's also possible to terminate the builder chain with <code>sendAsync()</code> and get a future returned.</p>
 <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>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.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
+<p>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="reference-terminology.md#consumer">consumer</a> by first instantiating a <a href="https://pulsar.incubator.apache.org/api/client/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>
 <p>Once you've instantiated a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
  object, you can create a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
- by specifying a <a href="/docs/ja/next/reference-terminology#topic">topic</a> and a <a href="/docs/ja/next/concepts-messaging#subscription-modes">subscription</a>.</p>
+ by specifying a <a href="reference-terminology.md#topic">topic</a> and a <a href="concepts-messaging.md#subscription-modes">subscription</a>.</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
         .subscriptionName(<span class="hljs-string">"my-subscription"</span>)
         .subscribe();
 </code></pre>
-<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="/docs/ja/next/reference-terminology#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
+<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="reference-terminology.md#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">do</span> {
   <span class="hljs-comment">// Wait for a message</span>
   Message msg = consumer.receive();
@@ -206,13 +206,13 @@ client.close();</p>
         .subscribe();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="async-receive"></a><a href="#async-receive" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="/docs/ja/next/concepts-messaging#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
+<p>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="concepts-messaging.md#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
 <p>Here's an example:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>Async receive operations return a {@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message} wrapped inside of a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="multi-topic-subscriptions"></a><a href="#multi-topic-subscriptions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
-<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="/docs/ja/next/concepts-messaging#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
+<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="concepts-messaging.md#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
 <p>Here are some examples:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
@@ -273,7 +273,7 @@ consumerBuilder
         });
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="reader-interface-readers"></a><a href="#reader-interface-readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
-<p>With the <a href="/docs/ja/next/concepts-clients#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
+<p>With the <a href="concepts-clients.md#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
  objects by specifying a topic, a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
 , and {@inject javadoc:ReaderConfiguration:/client/org/apache/pulsar/client/api/ReaderConfiguration}.</p>
 <p>Here's an example:</p>
@@ -293,12 +293,12 @@ Reader reader = pulsarClient.newReader()
 <p>In the example above, a <code>Reader</code> object is instantiated for a specific topic and message (by ID); the reader then iterates over each message in the topic after the message identified by <code>msgIdBytes</code> (how that value is obtained depends on the application).</p>
 <p>The code sample above shows pointing the <code>Reader</code> object to a specific message (by ID), but you can also use <code>MessageId.earliest</code> to point to the earliest available message on the topic of <code>MessageId.latest</code> to point to the most recent available message.</p>
 <h2><a class="anchor" aria-hidden="true" id="schemas"></a><a href="#schemas" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 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, all message data consists of byte arrays &quot;under the hood.&quot; <a href="/docs/ja/next/concepts-schema-registry">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an example:</p>
+<p>In Pulsar, all message data consists of byte arrays &quot;under the hood.&quot; <a href="concepts-schema-registry.md">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an example:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
 </code></pre>
-<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="/docs/ja/next/reference-terminology#topic">topic</a>.</p>
+<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="reference-terminology.md#topic">topic</a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="schema-example"></a><a href="#schema-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- [...]
 <p>Let's say that you have a <code>SensorReading</code> class that you'd like to transmit over a Pulsar topic:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SensorReading</span> </span>{
@@ -351,9 +351,9 @@ Producer&lt;MyPojo&gt; pojoProducer = client.newProducer(pojoSchema)
 </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 [...]
-<p>Pulsar は現在 2 つの認証スキーム、<a href="/docs/ja/next/security-tls-authentication">TLS</a> と <a href="/docs/ja/next/security-athenz">Athenz</a> に対応しています。Pulsar Java クライアントではどちらを使用することもできます。</p>
+<p>Pulsar は現在 2 つの認証スキーム、<a href="security-tls-authentication.md">TLS</a> と <a href="security-athenz.md">Athenz</a> に対応しています。Pulsar Java クライアントではどちらを使用することもできます。</p>
 <h3><a class="anchor" aria-hidden="true" id="tls-認証"></a><a href="#tls-認証" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>To use <a href="/docs/ja/next/security-tls-authentication">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
+<p>To use <a href="security-tls-authentication.md">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
 <p>Here's an example configuration:</p>
 <pre><code class="hljs css language-java">Map&lt;String, String&gt; authParams = <span class="hljs-keyword">new</span> HashMap&lt;&gt;();
 authParams.put(<span class="hljs-string">"tlsCertFile"</span>, <span class="hljs-string">"/path/to/client-cert.pem"</span>);
@@ -370,7 +370,7 @@ PulsarClient client = PulsarClient.builder()
         .build();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="athenz"></a><a href="#athenz" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>To use <a href="/docs/ja/next/security-athenz">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
+<p>To use <a href="security-athenz.md">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
 <ul>
 <li><code>tenantDomain</code></li>
 <li><code>tenantService</code></li>
diff --git a/content/docs/ja/next/client-libraries-java/index.html b/content/docs/ja/next/client-libraries-java/index.html
index 658810b..7c02e0d 100644
--- a/content/docs/ja/next/client-libraries-java/index.html
+++ b/content/docs/ja/next/client-libraries-java/index.html
@@ -153,9 +153,9 @@ client.close();</p>
     .create();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="message-routing"></a><a href="#message-routing" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 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>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="/docs/ja/next/cookbooks-partitioned">Partitioned Topics</a> cookbook.</p>
+<p>When using partitioned topics, you can specify the routing mode whenever you publish messages using a producer. For more on specifying a routing mode using the Java client, see the <a href="cookbooks-partitioned.md">Partitioned Topics</a> cookbook.</p>
 <h3><a class="anchor" aria-hidden="true" id="async-send"></a><a href="#async-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.42-1 [...]
-<p>You can also publish messages <a href="/docs/ja/next/concepts-messaging#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
+<p>You can also publish messages <a href="concepts-messaging.md#send-modes">asynchronously</a> using the Java client. With async send, the producer will put the message in a blocking queue and return immediately. The client library will then send the message to the broker in the background. If the queue is full (max size configurable), the producer could be blocked or fail immediately when calling the API, depending on arguments passed to the producer.</p>
 <p>Here's an example async send operation:</p>
 <pre><code class="hljs css language-java">producer.sendAsync(<span class="hljs-string">"my-async-message"</span>.getBytes()).thenAccept(msgId -&gt; {
     System.out.printf(<span class="hljs-string">"Message with ID %s successfully sent"</span>, msgId);
@@ -173,17 +173,17 @@ client.close();</p>
 </code></pre>
 <p>As for the previous case, it's also possible to terminate the builder chain with <code>sendAsync()</code> and get a future returned.</p>
 <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>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.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
+<p>In Pulsar, consumers subscribe to topics and handle messages that producers publish to those topics. You can instantiate a new <a href="reference-terminology.md#consumer">consumer</a> by first instantiating a <a href="https://pulsar.incubator.apache.org/api/client/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>
 <p>Once you've instantiated a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
  object, you can create a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
- by specifying a <a href="/docs/ja/next/reference-terminology#topic">topic</a> and a <a href="/docs/ja/next/concepts-messaging#subscription-modes">subscription</a>.</p>
+ by specifying a <a href="reference-terminology.md#topic">topic</a> and a <a href="concepts-messaging.md#subscription-modes">subscription</a>.</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
         .subscriptionName(<span class="hljs-string">"my-subscription"</span>)
         .subscribe();
 </code></pre>
-<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="/docs/ja/next/reference-terminology#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
+<p>The <code>subscribe</code> method will automatically subscribe the consumer to the specified topic and subscription. One way to make the consumer listen on the topic is to set up a <code>while</code> loop. In this example loop, the consumer listens for messages, prints the contents of any message that's received, and then <a href="reference-terminology.md#acknowledgment-ack">acknowledges</a> that the message has been processed:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">do</span> {
   <span class="hljs-comment">// Wait for a message</span>
   Message msg = consumer.receive();
@@ -206,13 +206,13 @@ client.close();</p>
         .subscribe();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="async-receive"></a><a href="#async-receive" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="/docs/ja/next/concepts-messaging#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
+<p>The <code>receive</code> method will receive messages synchronously (the consumer process will be blocked until a message is available). You can also use <a href="concepts-messaging.md#receive-modes">async receive</a>, which will return immediately with a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a> object that completes once a new message is available.</p>
 <p>Here's an example:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>Async receive operations return a {@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message} wrapped inside of a <a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="multi-topic-subscriptions"></a><a href="#multi-topic-subscriptions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
-<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="/docs/ja/next/concepts-messaging#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
+<p>In addition to subscribing a consumer to a single Pulsar topic, you can also subscribe to multiple topics simultaneously using <a href="concepts-messaging.md#multi-topic-subscriptions">multi-topic subscriptions</a>. To use multi-topic subscriptions you can supply either a regular expression (regex) or a <code>List</code> of topics. If you select topics via regex, all topics must be within the same Pulsar namespace.</p>
 <p>Here are some examples:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
@@ -273,7 +273,7 @@ consumerBuilder
         });
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="reader-interface-readers"></a><a href="#reader-interface-readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
-<p>With the <a href="/docs/ja/next/concepts-clients#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
+<p>With the <a href="concepts-clients.md#reader-interface">reader interface</a>, Pulsar clients can &quot;manually position&quot; themselves within a topic, reading all messages from a specified message onward. The Pulsar API for Java enables you to create <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
  objects by specifying a topic, a <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
 , and {@inject javadoc:ReaderConfiguration:/client/org/apache/pulsar/client/api/ReaderConfiguration}.</p>
 <p>Here's an example:</p>
@@ -293,12 +293,12 @@ Reader reader = pulsarClient.newReader()
 <p>In the example above, a <code>Reader</code> object is instantiated for a specific topic and message (by ID); the reader then iterates over each message in the topic after the message identified by <code>msgIdBytes</code> (how that value is obtained depends on the application).</p>
 <p>The code sample above shows pointing the <code>Reader</code> object to a specific message (by ID), but you can also use <code>MessageId.earliest</code> to point to the earliest available message on the topic of <code>MessageId.latest</code> to point to the most recent available message.</p>
 <h2><a class="anchor" aria-hidden="true" id="schemas"></a><a href="#schemas" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 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, all message data consists of byte arrays &quot;under the hood.&quot; <a href="/docs/ja/next/concepts-schema-registry">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an example:</p>
+<p>In Pulsar, all message data consists of byte arrays &quot;under the hood.&quot; <a href="concepts-schema-registry.md">Message schemas</a> 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 <a href="#producers">producer</a> without specifying a schema, then the producer can only produce messages of type <code>byte[]</code>. Here's an example:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
 </code></pre>
-<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="/docs/ja/next/reference-terminology#topic">topic</a>.</p>
+<p>The producer above is equivalent to a <code>Producer&lt;byte[]&gt;</code> (in fact, you should <em>always</em> explicitly specify the type). If you'd like to use a producer for a different type of data, you'll need to specify a <strong>schema</strong> that informs Pulsar which data type will be transmitted over the <a href="reference-terminology.md#topic">topic</a>.</p>
 <h3><a class="anchor" aria-hidden="true" id="schema-example"></a><a href="#schema-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- [...]
 <p>Let's say that you have a <code>SensorReading</code> class that you'd like to transmit over a Pulsar topic:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SensorReading</span> </span>{
@@ -351,9 +351,9 @@ Producer&lt;MyPojo&gt; pojoProducer = client.newProducer(pojoSchema)
 </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 [...]
-<p>Pulsar は現在 2 つの認証スキーム、<a href="/docs/ja/next/security-tls-authentication">TLS</a> と <a href="/docs/ja/next/security-athenz">Athenz</a> に対応しています。Pulsar Java クライアントではどちらを使用することもできます。</p>
+<p>Pulsar は現在 2 つの認証スキーム、<a href="security-tls-authentication.md">TLS</a> と <a href="security-athenz.md">Athenz</a> に対応しています。Pulsar Java クライアントではどちらを使用することもできます。</p>
 <h3><a class="anchor" aria-hidden="true" id="tls-認証"></a><a href="#tls-認証" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>To use <a href="/docs/ja/next/security-tls-authentication">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
+<p>To use <a href="security-tls-authentication.md">TLS</a>, you need to set TLS to <code>true</code> using the <code>setUseTls</code> method, point your Pulsar client to a TLS cert path, and provide paths to cert and key files.</p>
 <p>Here's an example configuration:</p>
 <pre><code class="hljs css language-java">Map&lt;String, String&gt; authParams = <span class="hljs-keyword">new</span> HashMap&lt;&gt;();
 authParams.put(<span class="hljs-string">"tlsCertFile"</span>, <span class="hljs-string">"/path/to/client-cert.pem"</span>);
@@ -370,7 +370,7 @@ PulsarClient client = PulsarClient.builder()
         .build();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="athenz"></a><a href="#athenz" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>To use <a href="/docs/ja/next/security-athenz">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
+<p>To use <a href="security-athenz.md">Athenz</a> as an authentication provider, you need to <a href="#tls-authentication">use TLS</a> and provide values for four parameters in a hash:</p>
 <ul>
 <li><code>tenantDomain</code></li>
 <li><code>tenantService</code></li>
diff --git a/content/docs/ja/next/deploy-aws.html b/content/docs/ja/next/deploy-aws.html
index 96cd866..06b744f 100644
--- a/content/docs/ja/next/deploy-aws.html
+++ b/content/docs/ja/next/deploy-aws.html
@@ -138,9 +138,9 @@ id_rsa               id_rsa.pub
 <li>9 total <a href="https://aws.amazon.com/ec2">Elastic Compute Cloud</a> (EC2) instances running the <a href="https://access.redhat.com/articles/3135091">ami-9fa343e7</a> Amazon Machine Image (AMI), which runs <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/7.4_release_notes/index">Red Hat Enterprise Linux (RHEL) 7.4</a>. By default, that includes:
 <ul>
 <li>3 small VMs for ZooKeeper (<a href="https://www.ec2instances.info/?selected=t2.small">t2.small</a> instances)</li>
-<li>3 larger VMs for BookKeeper <a href="/docs/ja/next/reference-terminology#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
-<li>2 larger VMs for Pulsar <a href="/docs/ja/next/reference-terminology#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
-<li>1 larger VMs for Pulsar <a href="/docs/ja/next/reference-terminology#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>3 larger VMs for BookKeeper <a href="reference-terminology.md#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
+<li>2 larger VMs for Pulsar <a href="reference-terminology.md#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>1 larger VMs for Pulsar <a href="reference-terminology.md#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
 </ul></li>
 <li>An EC2 <a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html">security group</a></li>
 <li>A <a href="https://aws.amazon.com/vpc/">virtual private cloud</a> (VPC) for security</li>
diff --git a/content/docs/ja/next/deploy-aws/index.html b/content/docs/ja/next/deploy-aws/index.html
index 96cd866..06b744f 100644
--- a/content/docs/ja/next/deploy-aws/index.html
+++ b/content/docs/ja/next/deploy-aws/index.html
@@ -138,9 +138,9 @@ id_rsa               id_rsa.pub
 <li>9 total <a href="https://aws.amazon.com/ec2">Elastic Compute Cloud</a> (EC2) instances running the <a href="https://access.redhat.com/articles/3135091">ami-9fa343e7</a> Amazon Machine Image (AMI), which runs <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/7.4_release_notes/index">Red Hat Enterprise Linux (RHEL) 7.4</a>. By default, that includes:
 <ul>
 <li>3 small VMs for ZooKeeper (<a href="https://www.ec2instances.info/?selected=t2.small">t2.small</a> instances)</li>
-<li>3 larger VMs for BookKeeper <a href="/docs/ja/next/reference-terminology#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
-<li>2 larger VMs for Pulsar <a href="/docs/ja/next/reference-terminology#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
-<li>1 larger VMs for Pulsar <a href="/docs/ja/next/reference-terminology#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>3 larger VMs for BookKeeper <a href="reference-terminology.md#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
+<li>2 larger VMs for Pulsar <a href="reference-terminology.md#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>1 larger VMs for Pulsar <a href="reference-terminology.md#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
 </ul></li>
 <li>An EC2 <a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html">security group</a></li>
 <li>A <a href="https://aws.amazon.com/vpc/">virtual private cloud</a> (VPC) for security</li>
diff --git a/content/docs/ja/next/deploy-bare-metal.html b/content/docs/ja/next/deploy-bare-metal.html
index 17e7aa6..9822ee4 100644
--- a/content/docs/ja/next/deploy-bare-metal.html
+++ b/content/docs/ja/next/deploy-bare-metal.html
@@ -223,7 +223,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <pre><code class="hljs">
 Once you've applied the desired configuration in <span class="hljs-code">`conf/bookkeeper.conf`</span>, you can start up a bookie on each of your BookKeeper hosts. You can start up each bookie either in the background, using [<span class="hljs-string">nohup</span>](<span class="hljs-link">https://en.wikipedia.org/wiki/Nohup</span>), or in the foreground.
 
-To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">/docs/ja/next/reference-cli-tools#pulsar-daemon</span>) CLI tool:
+To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-daemon</span>) CLI tool:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-daemon start bookie
@@ -231,18 +231,18 @@ $ bin/pulsar-daemon start bookie
 <p>To start the bookie in the foreground:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper bookie
 </code></pre>
-<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="/docs/ja/next/reference-cli-tools#shell">BookKeeper shell</a> on it:</p>
+<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on it:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell bookiesanity
 </code></pre>
 <p>This will create an ephemeral BookKeeper ledger on the local bookie, write a few entries, read them back, and finally delete the ledger.</p>
-<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="/docs/ja/next/reference-cli-tools#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
+<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell simpletest --ensemble &lt;num-bookies&gt; --writeQuorum &lt;num-bookies&gt; --ackQuorum &lt;num-bookies&gt; --numEntries &lt;num-entries&gt;
 </code></pre>
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
 <h3><a class="anchor" aria-hidden="true" id="configuring-brokers"></a><a href="#configuring-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.2 [...]
-<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="/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. In this case, since we only have 1 cluster and no configuration store setup, the <c [...]
+<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
@@ -250,7 +250,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="enabling-pulsar-functions-optional"></a><a href="#enabling-pulsar-functions-optional" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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>If you want to enable <a href="/docs/ja/next/functions-overview">Pulsar Functions</a>, you can follow the instructions as below:</p>
+<p>If you want to enable <a href="functions-overview.md">Pulsar Functions</a>, you can follow the instructions as below:</p>
 <ol>
 <li><p>Edit <code>conf/broker.conf</code> to enable function worker, by setting <code>functionsWorkerEnabled</code> to <code>true</code>.</p>
 <pre><code class="hljs css language-conf"><span class="hljs-attr">functionsWorkerEnabled</span>=<span class="hljs-literal">true</span>
@@ -262,17 +262,17 @@ $ bin/pulsar-daemon start bookie
 </code></pre></li>
 </ol>
 <h3><a class="anchor" aria-hidden="true" id="starting-brokers"></a><a href="#starting-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. [...]
-<p>You can then provide any other configuration changes that you'd like in the <a href="/docs/ja/next/reference-configuration#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
-<p>You can start a broker in the foreground using the <a href="/docs/ja/next/reference-cli-tools#pulsar-broker"><code>pulsar broker</code></a> command:</p>
+<p>You can then provide any other configuration changes that you'd like in the <a href="reference-configuration.md#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
+<p>You can start a broker in the foreground using the <a href="reference-cli-tools.md#pulsar-broker"><code>pulsar broker</code></a> command:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar broker
 </code></pre>
-<p>You can start a broker in the background using the <a href="/docs/ja/next/reference-cli-tools#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
+<p>You can start a broker in the background using the <a href="reference-cli-tools.md#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-daemon start broker
 </code></pre>
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-cluster" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S1 [...]
-<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="/docs/ja/next/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/ja/next/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
+<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="reference-cli-tools.md#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -300,7 +300,7 @@ $ bin/pulsar-daemon start bookie
   --namespace default \
   --name exclamation
 </code></pre>
-<p>Check if the function is running as expected by <a href="/docs/ja/next/functions-deploying#triggering-pulsar-functions">triggering</a> the function.</p>
+<p>Check if the function is running as expected by <a href="functions-deploying.md#triggering-pulsar-functions">triggering</a> the function.</p>
 <pre><code class="hljs css language-bash">bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger --name exclamation --trigger-value <span class="hljs-string">"hello world"</span>
 </code></pre>
 <p>You will see output as below:</p>
diff --git a/content/docs/ja/next/deploy-bare-metal/index.html b/content/docs/ja/next/deploy-bare-metal/index.html
index 17e7aa6..9822ee4 100644
--- a/content/docs/ja/next/deploy-bare-metal/index.html
+++ b/content/docs/ja/next/deploy-bare-metal/index.html
@@ -223,7 +223,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <pre><code class="hljs">
 Once you've applied the desired configuration in <span class="hljs-code">`conf/bookkeeper.conf`</span>, you can start up a bookie on each of your BookKeeper hosts. You can start up each bookie either in the background, using [<span class="hljs-string">nohup</span>](<span class="hljs-link">https://en.wikipedia.org/wiki/Nohup</span>), or in the foreground.
 
-To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">/docs/ja/next/reference-cli-tools#pulsar-daemon</span>) CLI tool:
+To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-daemon</span>) CLI tool:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-daemon start bookie
@@ -231,18 +231,18 @@ $ bin/pulsar-daemon start bookie
 <p>To start the bookie in the foreground:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper bookie
 </code></pre>
-<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="/docs/ja/next/reference-cli-tools#shell">BookKeeper shell</a> on it:</p>
+<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on it:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell bookiesanity
 </code></pre>
 <p>This will create an ephemeral BookKeeper ledger on the local bookie, write a few entries, read them back, and finally delete the ledger.</p>
-<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="/docs/ja/next/reference-cli-tools#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
+<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell simpletest --ensemble &lt;num-bookies&gt; --writeQuorum &lt;num-bookies&gt; --ackQuorum &lt;num-bookies&gt; --numEntries &lt;num-entries&gt;
 </code></pre>
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
 <h3><a class="anchor" aria-hidden="true" id="configuring-brokers"></a><a href="#configuring-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.2 [...]
-<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="/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. In this case, since we only have 1 cluster and no configuration store setup, the <c [...]
+<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
@@ -250,7 +250,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="enabling-pulsar-functions-optional"></a><a href="#enabling-pulsar-functions-optional" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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>If you want to enable <a href="/docs/ja/next/functions-overview">Pulsar Functions</a>, you can follow the instructions as below:</p>
+<p>If you want to enable <a href="functions-overview.md">Pulsar Functions</a>, you can follow the instructions as below:</p>
 <ol>
 <li><p>Edit <code>conf/broker.conf</code> to enable function worker, by setting <code>functionsWorkerEnabled</code> to <code>true</code>.</p>
 <pre><code class="hljs css language-conf"><span class="hljs-attr">functionsWorkerEnabled</span>=<span class="hljs-literal">true</span>
@@ -262,17 +262,17 @@ $ bin/pulsar-daemon start bookie
 </code></pre></li>
 </ol>
 <h3><a class="anchor" aria-hidden="true" id="starting-brokers"></a><a href="#starting-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. [...]
-<p>You can then provide any other configuration changes that you'd like in the <a href="/docs/ja/next/reference-configuration#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
-<p>You can start a broker in the foreground using the <a href="/docs/ja/next/reference-cli-tools#pulsar-broker"><code>pulsar broker</code></a> command:</p>
+<p>You can then provide any other configuration changes that you'd like in the <a href="reference-configuration.md#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
+<p>You can start a broker in the foreground using the <a href="reference-cli-tools.md#pulsar-broker"><code>pulsar broker</code></a> command:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar broker
 </code></pre>
-<p>You can start a broker in the background using the <a href="/docs/ja/next/reference-cli-tools#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
+<p>You can start a broker in the background using the <a href="reference-cli-tools.md#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-daemon start broker
 </code></pre>
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-cluster" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S1 [...]
-<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="/docs/ja/next/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/ja/next/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
+<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="reference-cli-tools.md#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -300,7 +300,7 @@ $ bin/pulsar-daemon start bookie
   --namespace default \
   --name exclamation
 </code></pre>
-<p>Check if the function is running as expected by <a href="/docs/ja/next/functions-deploying#triggering-pulsar-functions">triggering</a> the function.</p>
+<p>Check if the function is running as expected by <a href="functions-deploying.md#triggering-pulsar-functions">triggering</a> the function.</p>
 <pre><code class="hljs css language-bash">bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger --name exclamation --trigger-value <span class="hljs-string">"hello world"</span>
 </code></pre>
 <p>You will see output as below:</p>
diff --git a/content/docs/ja/next/functions-quickstart.html b/content/docs/ja/next/functions-quickstart.html
index f225157..266334d 100644
--- a/content/docs/ja/next/functions-quickstart.html
+++ b/content/docs/ja/next/functions-quickstart.html
@@ -90,7 +90,7 @@ $ bin/pulsar standalone \
 </blockquote>
 <p>--inputs topic1,topic2</p>
 <pre><code class="hljs">
-We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">/docs/ja/next/reference-cli-tools#pulsar-client</span>) tool to listen for messages on the output topic:
+We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-client</span>) tool to listen for messages on the output topic:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-client consume persistent://public/default/exclamation-output \
@@ -117,7 +117,7 @@ Hello world!
 <li>If our exclamation function <em>hadn't</em> been running, Pulsar would have durably stored the message data published to the input topic in <a href="https://bookkeeper.apache.org">Apache BookKeeper</a> until a consumer consumed and acknowledged the message</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="run-a-pulsar-function-in-cluster-mode"></a><a href="#run-a-pulsar-function-in-cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 [...]
-<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="/docs/ja/next/pulsar-admin#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
+<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="reference-pulsar-admin.md#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
 <p>This command, for example, would deploy the same exclamation function we ran locally above <em>in our Pulsar cluster</em> (rather than outside it):</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --jar examples/api-examples.jar \
@@ -201,7 +201,7 @@ Hello world!
 <p>If you see <code>Deleted successfully</code> in the output, then you've succesfully run, updated, and shut down a Pulsar Function running in cluster mode. Congrats! Now, let's go even further and run a brand new function in the next section.</p>
 <h2><a class="anchor" aria-hidden="true" id="writing-and-running-a-new-function"></a><a href="#writing-and-running-a-new-function" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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 [...]
 <blockquote>
-<p>In order to write and run the <a href="/docs/ja/next/functions-api#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
+<p>In order to write and run the <a href="functions-api.md#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
 <pre><code class="hljs css language-bash"></code></pre>
 </blockquote>
 <p>$ pip install pulsar-client</p>
diff --git a/content/docs/ja/next/functions-quickstart/index.html b/content/docs/ja/next/functions-quickstart/index.html
index f225157..266334d 100644
--- a/content/docs/ja/next/functions-quickstart/index.html
+++ b/content/docs/ja/next/functions-quickstart/index.html
@@ -90,7 +90,7 @@ $ bin/pulsar standalone \
 </blockquote>
 <p>--inputs topic1,topic2</p>
 <pre><code class="hljs">
-We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">/docs/ja/next/reference-cli-tools#pulsar-client</span>) tool to listen for messages on the output topic:
+We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-client</span>) tool to listen for messages on the output topic:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-client consume persistent://public/default/exclamation-output \
@@ -117,7 +117,7 @@ Hello world!
 <li>If our exclamation function <em>hadn't</em> been running, Pulsar would have durably stored the message data published to the input topic in <a href="https://bookkeeper.apache.org">Apache BookKeeper</a> until a consumer consumed and acknowledged the message</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="run-a-pulsar-function-in-cluster-mode"></a><a href="#run-a-pulsar-function-in-cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 [...]
-<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="/docs/ja/next/pulsar-admin#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
+<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="reference-pulsar-admin.md#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
 <p>This command, for example, would deploy the same exclamation function we ran locally above <em>in our Pulsar cluster</em> (rather than outside it):</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --jar examples/api-examples.jar \
@@ -201,7 +201,7 @@ Hello world!
 <p>If you see <code>Deleted successfully</code> in the output, then you've succesfully run, updated, and shut down a Pulsar Function running in cluster mode. Congrats! Now, let's go even further and run a brand new function in the next section.</p>
 <h2><a class="anchor" aria-hidden="true" id="writing-and-running-a-new-function"></a><a href="#writing-and-running-a-new-function" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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 [...]
 <blockquote>
-<p>In order to write and run the <a href="/docs/ja/next/functions-api#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
+<p>In order to write and run the <a href="functions-api.md#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
 <pre><code class="hljs css language-bash"></code></pre>
 </blockquote>
 <p>$ pip install pulsar-client</p>
diff --git a/content/docs/ja/next/security-token-admin.html b/content/docs/ja/next/security-token-admin.html
index cb9063a..83db037 100644
--- a/content/docs/ja/next/security-token-admin.html
+++ b/content/docs/ja/next/security-token-admin.html
@@ -62,7 +62,7 @@ will need one.
 &gt; #### Always use TLS transport encryption
 &gt; Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 &gt; always use TLS encryption when talking to the Pulsar service. See
-&gt; [Transport Encryption using TLS](/docs/ja/next/security-tls-transport)
+&gt; [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/content/docs/ja/next/security-token-admin/index.html b/content/docs/ja/next/security-token-admin/index.html
index cb9063a..83db037 100644
--- a/content/docs/ja/next/security-token-admin/index.html
+++ b/content/docs/ja/next/security-token-admin/index.html
@@ -62,7 +62,7 @@ will need one.
 &gt; #### Always use TLS transport encryption
 &gt; Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 &gt; always use TLS encryption when talking to the Pulsar service. See
-&gt; [Transport Encryption using TLS](/docs/ja/next/security-tls-transport)
+&gt; [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/content/docs/ja/next/security-token-client.html b/content/docs/ja/next/security-token-client.html
index 2c1d18d..9285a87 100644
--- a/content/docs/ja/next/security-token-client.html
+++ b/content/docs/ja/next/security-token-client.html
@@ -59,12 +59,12 @@ Application will specify the token when creating the client instance. An alterna
 a &quot;token supplier&quot;, that is to say a function that returns the token when the client library
 will need one.
 
-See [Token authentication admin](/docs/ja/next/security-token-admin) for a reference on how to enable token
+See [Token authentication admin](security-token-admin.md) for a reference on how to enable token
 authentication on a Pulsar cluster.
 
 ### CLI tools
 
-[Command-line tools](/docs/ja/next/reference-cli-tools) like [`pulsar-admin`](/docs/ja/next/pulsar-admin), [`pulsar-perf`](/docs/ja/next/reference-cli-tools#pulsar-perf), and [`pulsar-client`](/docs/ja/next/reference-cli-tools#pulsar-client) use the `conf/client.conf` config file in a Pulsar installation.
+[Command-line tools](reference-cli-tools.md) like [`pulsar-admin`](reference-pulsar-admin.md), [`pulsar-perf`](reference-cli-tools.md#pulsar-perf), and [`pulsar-client`](reference-cli-tools.md#pulsar-client) use the `conf/client.conf` config file in a Pulsar installation.
 
 You'll need to add the following parameters to that file to use the token authentication with
 Pulsar's CLI tools:
diff --git a/content/docs/ja/next/security-token-client/index.html b/content/docs/ja/next/security-token-client/index.html
index 2c1d18d..9285a87 100644
--- a/content/docs/ja/next/security-token-client/index.html
+++ b/content/docs/ja/next/security-token-client/index.html
@@ -59,12 +59,12 @@ Application will specify the token when creating the client instance. An alterna
 a &quot;token supplier&quot;, that is to say a function that returns the token when the client library
 will need one.
 
-See [Token authentication admin](/docs/ja/next/security-token-admin) for a reference on how to enable token
+See [Token authentication admin](security-token-admin.md) for a reference on how to enable token
 authentication on a Pulsar cluster.
 
 ### CLI tools
 
-[Command-line tools](/docs/ja/next/reference-cli-tools) like [`pulsar-admin`](/docs/ja/next/pulsar-admin), [`pulsar-perf`](/docs/ja/next/reference-cli-tools#pulsar-perf), and [`pulsar-client`](/docs/ja/next/reference-cli-tools#pulsar-client) use the `conf/client.conf` config file in a Pulsar installation.
+[Command-line tools](reference-cli-tools.md) like [`pulsar-admin`](reference-pulsar-admin.md), [`pulsar-perf`](reference-cli-tools.md#pulsar-perf), and [`pulsar-client`](reference-cli-tools.md#pulsar-client) use the `conf/client.conf` config file in a Pulsar installation.
 
 You'll need to add the following parameters to that file to use the token authentication with
 Pulsar's CLI tools:
diff --git a/content/docs/latest/adaptors/PulsarSpark/index.html b/content/docs/latest/adaptors/PulsarSpark/index.html
index 37d59c5..c00dd49 100644
--- a/content/docs/latest/adaptors/PulsarSpark/index.html
+++ b/content/docs/latest/adaptors/PulsarSpark/index.html
@@ -1079,9 +1079,9 @@
           
           
           
-          <li><a href="/docs/latest/adaptors/PulsarSpark/">Spark Streaming Pulsar receiver</a></li>
           
           
+          <li><a href="/docs/latest/adaptors/PulsarSpark/">Spark Streaming Pulsar receiver</a></li>
           
           
           
@@ -1325,9 +1325,9 @@
           
           
           
-          <li><a href="/docs/latest/adaptors/PulsarSpark/">Spark Streaming Pulsar receiver</a></li>
           
           
+          <li><a href="/docs/latest/adaptors/PulsarSpark/">Spark Streaming Pulsar receiver</a></li>
           
           
           
@@ -1537,6 +1537,8 @@
           
           
           
+          
+          
           <li><a href="/docs/latest/clients/Java/">The Pulsar Java client</a></li>
           
           
@@ -1615,8 +1617,6 @@
           
           
           
-          
-          
           <li><a href="/docs/latest/security/authorization/">Authentication and authorization in Pulsar</a></li>
           
           
diff --git a/content/docs/latest/adaptors/PulsarStorm/index.html b/content/docs/latest/adaptors/PulsarStorm/index.html
index 52000e9..a100055 100644
--- a/content/docs/latest/adaptors/PulsarStorm/index.html
+++ b/content/docs/latest/adaptors/PulsarStorm/index.html
@@ -1083,9 +1083,9 @@
           
           
           
-          <li><a href="/docs/latest/adaptors/PulsarStorm/">Pulsar adaptor for Apache Storm</a></li>
           
           
+          <li><a href="/docs/latest/adaptors/PulsarStorm/">Pulsar adaptor for Apache Storm</a></li>
           
           
           
@@ -1291,6 +1291,8 @@
           
           
           
+          
+          
           <li><a href="/docs/latest/clients/Java/">The Pulsar Java client</a></li>
           
           
@@ -1369,8 +1371,6 @@
           
           
           
-          
-          
           <li><a href="/docs/latest/security/authorization/">Authentication and authorization in Pulsar</a></li>
           
           
diff --git a/content/docs/latest/admin-api/overview/index.html b/content/docs/latest/admin-api/overview/index.html
index 810d289..994ad01 100644
--- a/content/docs/latest/admin-api/overview/index.html
+++ b/content/docs/latest/admin-api/overview/index.html
@@ -1005,6 +1005,8 @@
           
           
           
+          
+          
           <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
@@ -1123,8 +1125,6 @@
           
           
           
-          
-          
           <li><a href="/docs/latest/security/authorization/">Authentication and authorization in Pulsar</a></li>
           
           
@@ -1271,9 +1271,9 @@
           
           
           
-          <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
+          <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
           
@@ -1805,6 +1805,8 @@
           
           
           
+          
+          
           <li><a href="/docs/latest/clients/Java/">The Pulsar Java client</a></li>
           
           
@@ -1883,8 +1885,6 @@
           
           
           
-          
-          
           <li><a href="/docs/latest/security/authorization/">Authentication and authorization in Pulsar</a></li>
           
           
diff --git a/content/docs/latest/clients/Cpp/index.html b/content/docs/latest/clients/Cpp/index.html
index 58e0246..5dabb35 100644
--- a/content/docs/latest/clients/Cpp/index.html
+++ b/content/docs/latest/clients/Cpp/index.html
@@ -1005,9 +1005,9 @@
           
           
           
-          <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
+          <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
           
@@ -1033,6 +1033,8 @@
           
           
           
+          
+          
           <li><a href="/docs/latest/clients/Cpp/">The Pulsar C++ client</a></li>
           
           
@@ -1155,8 +1157,6 @@
           
           
           
-          
-          
           <li><a href="/docs/latest/clients/go/">The Pulsar Go client</a></li>
           
           
@@ -1287,9 +1287,9 @@
           
           
           
-          <li><a href="/docs/latest/clients/Cpp/">The Pulsar C++ client</a></li>
           
           
+          <li><a href="/docs/latest/clients/Cpp/">The Pulsar C++ client</a></li>
           
           
           
diff --git a/content/docs/latest/clients/Java/index.html b/content/docs/latest/clients/Java/index.html
index 73ca7e0..8ce7177 100644
--- a/content/docs/latest/clients/Java/index.html
+++ b/content/docs/latest/clients/Java/index.html
@@ -1005,9 +1005,9 @@
           
           
           
-          <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
+          <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
           
@@ -1033,6 +1033,8 @@
           
           
           
+          
+          
           <li><a href="/docs/latest/clients/Cpp/">The Pulsar C++ client</a></li>
           
           
@@ -1155,8 +1157,6 @@
           
           
           
-          
-          
           <li><a href="/docs/latest/clients/go/">The Pulsar Go client</a></li>
           
           
@@ -1301,6 +1301,8 @@
           
           
           
+          
+          
           <li><a href="/docs/latest/clients/Java/">The Pulsar Java client</a></li>
           
           
@@ -1379,8 +1381,6 @@
           
           
           
-          
-          
           <li><a href="/docs/latest/security/authorization/">Authentication and authorization in Pulsar</a></li>
           
           
@@ -1557,9 +1557,9 @@
           
           
           
-          <li><a href="/docs/latest/clients/Java/">The Pulsar Java client</a></li>
           
           
+          <li><a href="/docs/latest/clients/Java/">The Pulsar Java client</a></li>
           
           
           
@@ -1805,9 +1805,9 @@
           
           
           
-          <li><a href="/docs/latest/clients/Java/">The Pulsar Java client</a></li>
           
           
+          <li><a href="/docs/latest/clients/Java/">The Pulsar Java client</a></li>
           
           
           
diff --git a/content/docs/latest/clients/Python/index.html b/content/docs/latest/clients/Python/index.html
index 60bea8e..4d34e49 100644
--- a/content/docs/latest/clients/Python/index.html
+++ b/content/docs/latest/clients/Python/index.html
@@ -1005,9 +1005,9 @@
           
           
           
-          <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
+          <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
           
@@ -1033,6 +1033,8 @@
           
           
           
+          
+          
           <li><a href="/docs/latest/clients/Cpp/">The Pulsar C++ client</a></li>
           
           
@@ -1155,8 +1157,6 @@
           
           
           
-          
-          
           <li><a href="/docs/latest/clients/go/">The Pulsar Go client</a></li>
           
           
@@ -1343,9 +1343,9 @@
           
           
           
-          <li><a href="/docs/latest/clients/Python/">The Pulsar Python client</a></li>
           
           
+          <li><a href="/docs/latest/clients/Python/">The Pulsar Python client</a></li>
           
           
           
@@ -1365,9 +1365,9 @@
           
           
           
-          <li><a href="/docs/latest/clients/WebSocket/">Pulsar's WebSocket API</a></li>
           
           
+          <li><a href="/docs/latest/clients/WebSocket/">Pulsar's WebSocket API</a></li>
           
           
           
diff --git a/content/docs/latest/clients/WebSocket/index.html b/content/docs/latest/clients/WebSocket/index.html
index b881453..0c3f19d 100644
--- a/content/docs/latest/clients/WebSocket/index.html
+++ b/content/docs/latest/clients/WebSocket/index.html
@@ -1107,9 +1107,9 @@
           
           
           
-          <li><a href="/docs/latest/clients/WebSocket/">Pulsar's WebSocket API</a></li>
           
           
+          <li><a href="/docs/latest/clients/WebSocket/">Pulsar's WebSocket API</a></li>
           
           
           
@@ -1353,9 +1353,9 @@
           
           
           
-          <li><a href="/docs/latest/clients/WebSocket/">Pulsar's WebSocket API</a></li>
           
           
+          <li><a href="/docs/latest/clients/WebSocket/">Pulsar's WebSocket API</a></li>
           
           
           
@@ -1579,9 +1579,9 @@
           
           
           
-          <li><a href="/docs/latest/clients/Python/">The Pulsar Python client</a></li>
           
           
+          <li><a href="/docs/latest/clients/Python/">The Pulsar Python client</a></li>
           
           
           
@@ -1601,9 +1601,9 @@
           
           
           
-          <li><a href="/docs/latest/clients/WebSocket/">Pulsar's WebSocket API</a></li>
           
           
+          <li><a href="/docs/latest/clients/WebSocket/">Pulsar's WebSocket API</a></li>
           
           
           
diff --git a/content/docs/latest/clients/go/index.html b/content/docs/latest/clients/go/index.html
index a06ad5f..1492ffb 100644
--- a/content/docs/latest/clients/go/index.html
+++ b/content/docs/latest/clients/go/index.html
@@ -1005,9 +1005,9 @@
           
           
           
-          <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
+          <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
           
@@ -1033,6 +1033,8 @@
           
           
           
+          
+          
           <li><a href="/docs/latest/clients/Cpp/">The Pulsar C++ client</a></li>
           
           
@@ -1155,8 +1157,6 @@
           
           
           
-          
-          
           <li><a href="/docs/latest/clients/go/">The Pulsar Go client</a></li>
           
           
diff --git a/content/docs/latest/cookbooks/Encryption/index.html b/content/docs/latest/cookbooks/Encryption/index.html
index a6132a3..18ca402 100644
--- a/content/docs/latest/cookbooks/Encryption/index.html
+++ b/content/docs/latest/cookbooks/Encryption/index.html
@@ -1567,9 +1567,9 @@
           
           
           
-          <li><a href="/docs/latest/cookbooks/PartitionedTopics/">Partitioned topics</a></li>
           
           
+          <li><a href="/docs/latest/cookbooks/PartitionedTopics/">Partitioned topics</a></li>
           
           
           
@@ -1823,9 +1823,9 @@
           
           
           
-          <li><a href="/docs/latest/cookbooks/PartitionedTopics/">Partitioned topics</a></li>
           
           
+          <li><a href="/docs/latest/cookbooks/PartitionedTopics/">Partitioned topics</a></li>
           
           
           
@@ -1851,9 +1851,9 @@
           
           
           
-          <li><a href="/docs/latest/cookbooks/RetentionExpiry/">Message retention and expiry</a></li>
           
           
+          <li><a href="/docs/latest/cookbooks/RetentionExpiry/">Message retention and expiry</a></li>
           
           
           
diff --git a/content/docs/latest/cookbooks/PartitionedTopics/index.html b/content/docs/latest/cookbooks/PartitionedTopics/index.html
index d717204..25ce2c6 100644
--- a/content/docs/latest/cookbooks/PartitionedTopics/index.html
+++ b/content/docs/latest/cookbooks/PartitionedTopics/index.html
@@ -1069,9 +1069,9 @@
           
           
           
-          <li><a href="/docs/latest/cookbooks/PartitionedTopics/">Partitioned topics</a></li>
           
           
+          <li><a href="/docs/latest/cookbooks/PartitionedTopics/">Partitioned topics</a></li>
           
           
           
@@ -1315,9 +1315,9 @@
           
           
           
-          <li><a href="/docs/latest/cookbooks/PartitionedTopics/">Partitioned topics</a></li>
           
           
+          <li><a href="/docs/latest/cookbooks/PartitionedTopics/">Partitioned topics</a></li>
           
           
           
@@ -1497,6 +1497,8 @@
           
           
           
+          
+          
           <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
@@ -1615,8 +1617,6 @@
           
           
           
-          
-          
           <li><a href="/docs/latest/security/authorization/">Authentication and authorization in Pulsar</a></li>
           
           
@@ -1829,9 +1829,9 @@
           
           
           
-          <li><a href="/docs/latest/cookbooks/PartitionedTopics/">Partitioned topics</a></li>
           
           
+          <li><a href="/docs/latest/cookbooks/PartitionedTopics/">Partitioned topics</a></li>
           
           
           
@@ -2085,9 +2085,9 @@
           
           
           
-          <li><a href="/docs/latest/cookbooks/PartitionedTopics/">Partitioned topics</a></li>
           
           
+          <li><a href="/docs/latest/cookbooks/PartitionedTopics/">Partitioned topics</a></li>
           
           
           
@@ -2113,9 +2113,9 @@
           
           
           
-          <li><a href="/docs/latest/cookbooks/RetentionExpiry/">Message retention and expiry</a></li>
           
           
+          <li><a href="/docs/latest/cookbooks/RetentionExpiry/">Message retention and expiry</a></li>
           
           
           
diff --git a/content/docs/latest/cookbooks/RetentionExpiry/index.html b/content/docs/latest/cookbooks/RetentionExpiry/index.html
index a592537..0a51438 100644
--- a/content/docs/latest/cookbooks/RetentionExpiry/index.html
+++ b/content/docs/latest/cookbooks/RetentionExpiry/index.html
@@ -1005,6 +1005,8 @@
           
           
           
+          
+          
           <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
@@ -1123,8 +1125,6 @@
           
           
           
-          
-          
           <li><a href="/docs/latest/security/authorization/">Authentication and authorization in Pulsar</a></li>
           
           
@@ -1361,9 +1361,9 @@
           
           
           
-          <li><a href="/docs/latest/cookbooks/RetentionExpiry/">Message retention and expiry</a></li>
           
           
+          <li><a href="/docs/latest/cookbooks/RetentionExpiry/">Message retention and expiry</a></li>
           
           
           
@@ -1607,9 +1607,9 @@
           
           
           
-          <li><a href="/docs/latest/cookbooks/RetentionExpiry/">Message retention and expiry</a></li>
           
           
+          <li><a href="/docs/latest/cookbooks/RetentionExpiry/">Message retention and expiry</a></li>
           
           
           
@@ -1853,9 +1853,9 @@
           
           
           
-          <li><a href="/docs/latest/cookbooks/RetentionExpiry/">Message retention and expiry</a></li>
           
           
+          <li><a href="/docs/latest/cookbooks/RetentionExpiry/">Message retention and expiry</a></li>
           
           
           
@@ -2075,9 +2075,9 @@
           
           
           
-          <li><a href="/docs/latest/cookbooks/PartitionedTopics/">Partitioned topics</a></li>
           
           
+          <li><a href="/docs/latest/cookbooks/PartitionedTopics/">Partitioned topics</a></li>
           
           
           
@@ -2103,9 +2103,9 @@
           
           
           
-          <li><a href="/docs/latest/cookbooks/RetentionExpiry/">Message retention and expiry</a></li>
           
           
+          <li><a href="/docs/latest/cookbooks/RetentionExpiry/">Message retention and expiry</a></li>
           
           
           
diff --git a/content/docs/latest/cookbooks/compaction/index.html b/content/docs/latest/cookbooks/compaction/index.html
index 3c75e4d..fd7475c 100644
--- a/content/docs/latest/cookbooks/compaction/index.html
+++ b/content/docs/latest/cookbooks/compaction/index.html
@@ -1005,6 +1005,8 @@
           
           
           
+          
+          
           <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
@@ -1123,8 +1125,6 @@
           
           
           
-          
-          
           <li><a href="/docs/latest/security/authorization/">Authentication and authorization in Pulsar</a></li>
           
           
@@ -1337,9 +1337,9 @@
           
           
           
-          <li><a href="/docs/latest/cookbooks/PartitionedTopics/">Partitioned topics</a></li>
           
           
+          <li><a href="/docs/latest/cookbooks/PartitionedTopics/">Partitioned topics</a></li>
           
           
           
diff --git a/content/docs/latest/cookbooks/message-deduplication/index.html b/content/docs/latest/cookbooks/message-deduplication/index.html
index 0a2c71c..03df0bf 100644
--- a/content/docs/latest/cookbooks/message-deduplication/index.html
+++ b/content/docs/latest/cookbooks/message-deduplication/index.html
@@ -1005,6 +1005,8 @@
           
           
           
+          
+          
           <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
@@ -1123,8 +1125,6 @@
           
           
           
-          
-          
           <li><a href="/docs/latest/security/authorization/">Authentication and authorization in Pulsar</a></li>
           
           
@@ -1287,9 +1287,9 @@
           
           
           
-          <li><a href="/docs/latest/getting-started/ConceptsAndArchitecture/">Pulsar concepts and architecture</a></li>
           
           
+          <li><a href="/docs/latest/getting-started/ConceptsAndArchitecture/">Pulsar concepts and architecture</a></li>
           
           
           
@@ -1585,9 +1585,9 @@
           
           
           
-          <li><a href="/docs/latest/cookbooks/PartitionedTopics/">Partitioned topics</a></li>
           
           
+          <li><a href="/docs/latest/cookbooks/PartitionedTopics/">Partitioned topics</a></li>
           
           
           
@@ -1613,9 +1613,9 @@
           
           
           
-          <li><a href="/docs/latest/cookbooks/RetentionExpiry/">Message retention and expiry</a></li>
           
           
+          <li><a href="/docs/latest/cookbooks/RetentionExpiry/">Message retention and expiry</a></li>
           
           
           
diff --git a/content/docs/latest/cookbooks/message-queue/index.html b/content/docs/latest/cookbooks/message-queue/index.html
index fadca30..3655ec9 100644
--- a/content/docs/latest/cookbooks/message-queue/index.html
+++ b/content/docs/latest/cookbooks/message-queue/index.html
@@ -1071,9 +1071,9 @@
           
           
           
-          <li><a href="/docs/latest/cookbooks/PartitionedTopics/">Partitioned topics</a></li>
           
           
+          <li><a href="/docs/latest/cookbooks/PartitionedTopics/">Partitioned topics</a></li>
           
           
           
@@ -1301,6 +1301,8 @@
           
           
           
+          
+          
           <li><a href="/docs/latest/clients/Java/">The Pulsar Java client</a></li>
           
           
@@ -1379,8 +1381,6 @@
           
           
           
-          
-          
           <li><a href="/docs/latest/security/authorization/">Authentication and authorization in Pulsar</a></li>
           
           
@@ -1599,9 +1599,9 @@
           
           
           
-          <li><a href="/docs/latest/clients/Python/">The Pulsar Python client</a></li>
           
           
+          <li><a href="/docs/latest/clients/Python/">The Pulsar Python client</a></li>
           
           
           
@@ -1621,9 +1621,9 @@
           
           
           
-          <li><a href="/docs/latest/clients/WebSocket/">Pulsar's WebSocket API</a></li>
           
           
+          <li><a href="/docs/latest/clients/WebSocket/">Pulsar's WebSocket API</a></li>
           
           
           
@@ -2079,9 +2079,9 @@
           
           
           
-          <li><a href="/docs/latest/cookbooks/PartitionedTopics/">Partitioned topics</a></li>
           
           
+          <li><a href="/docs/latest/cookbooks/PartitionedTopics/">Partitioned topics</a></li>
           
           
           
@@ -2107,9 +2107,9 @@
           
           
           
-          <li><a href="/docs/latest/cookbooks/RetentionExpiry/">Message retention and expiry</a></li>
           
           
+          <li><a href="/docs/latest/cookbooks/RetentionExpiry/">Message retention and expiry</a></li>
           
           
           
diff --git a/content/docs/latest/cookbooks/tiered-storage/index.html b/content/docs/latest/cookbooks/tiered-storage/index.html
index 48e4971..92718d6 100644
--- a/content/docs/latest/cookbooks/tiered-storage/index.html
+++ b/content/docs/latest/cookbooks/tiered-storage/index.html
@@ -1005,6 +1005,8 @@
           
           
           
+          
+          
           <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
@@ -1123,8 +1125,6 @@
           
           
           
-          
-          
           <li><a href="/docs/latest/security/authorization/">Authentication and authorization in Pulsar</a></li>
           
           
diff --git a/content/docs/latest/deployment/Kubernetes/index.html b/content/docs/latest/deployment/Kubernetes/index.html
index 82e2140..868a18b 100644
--- a/content/docs/latest/deployment/Kubernetes/index.html
+++ b/content/docs/latest/deployment/Kubernetes/index.html
@@ -1051,9 +1051,9 @@
           
           
           
-          <li><a href="/docs/latest/deployment/Kubernetes/">Deploying Pulsar on Kubernetes</a></li>
           
           
+          <li><a href="/docs/latest/deployment/Kubernetes/">Deploying Pulsar on Kubernetes</a></li>
           
           
           
@@ -1297,9 +1297,9 @@
           
           
           
-          <li><a href="/docs/latest/deployment/Kubernetes/">Deploying Pulsar on Kubernetes</a></li>
           
           
+          <li><a href="/docs/latest/deployment/Kubernetes/">Deploying Pulsar on Kubernetes</a></li>
           
           
           
diff --git a/content/docs/latest/deployment/aws-cluster/index.html b/content/docs/latest/deployment/aws-cluster/index.html
index de4900b..31cfc51 100644
--- a/content/docs/latest/deployment/aws-cluster/index.html
+++ b/content/docs/latest/deployment/aws-cluster/index.html
@@ -1005,6 +1005,8 @@
           
           
           
+          
+          
           <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
@@ -1123,8 +1125,6 @@
           
           
           
-          
-          
           <li><a href="/docs/latest/security/authorization/">Authentication and authorization in Pulsar</a></li>
           
           
diff --git a/content/docs/latest/deployment/cluster/index.html b/content/docs/latest/deployment/cluster/index.html
index 5149139..0a12601 100644
--- a/content/docs/latest/deployment/cluster/index.html
+++ b/content/docs/latest/deployment/cluster/index.html
@@ -1005,6 +1005,8 @@
           
           
           
+          
+          
           <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
@@ -1123,8 +1125,6 @@
           
           
           
-          
-          
           <li><a href="/docs/latest/security/authorization/">Authentication and authorization in Pulsar</a></li>
           
           
diff --git a/content/docs/latest/deployment/instance/index.html b/content/docs/latest/deployment/instance/index.html
index dfec2dd..e4d8219 100644
--- a/content/docs/latest/deployment/instance/index.html
+++ b/content/docs/latest/deployment/instance/index.html
@@ -1005,6 +1005,8 @@
           
           
           
+          
+          
           <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
@@ -1123,8 +1125,6 @@
           
           
           
-          
-          
           <li><a href="/docs/latest/security/authorization/">Authentication and authorization in Pulsar</a></li>
           
           
diff --git a/content/docs/latest/getting-started/ConceptsAndArchitecture/index.html b/content/docs/latest/getting-started/ConceptsAndArchitecture/index.html
index c7b2dad..51203a8 100644
--- a/content/docs/latest/getting-started/ConceptsAndArchitecture/index.html
+++ b/content/docs/latest/getting-started/ConceptsAndArchitecture/index.html
@@ -1021,9 +1021,9 @@
           
           
           
-          <li><a href="/docs/latest/getting-started/ConceptsAndArchitecture/">Pulsar concepts and architecture</a></li>
           
           
+          <li><a href="/docs/latest/getting-started/ConceptsAndArchitecture/">Pulsar concepts and architecture</a></li>
           
           
           
@@ -1267,9 +1267,9 @@
           
           
           
-          <li><a href="/docs/latest/getting-started/ConceptsAndArchitecture/">Pulsar concepts and architecture</a></li>
           
           
+          <li><a href="/docs/latest/getting-started/ConceptsAndArchitecture/">Pulsar concepts and architecture</a></li>
           
           
           
diff --git a/content/docs/latest/getting-started/LocalCluster/index.html b/content/docs/latest/getting-started/LocalCluster/index.html
index dcceda6..564bdd5 100644
--- a/content/docs/latest/getting-started/LocalCluster/index.html
+++ b/content/docs/latest/getting-started/LocalCluster/index.html
@@ -1057,9 +1057,9 @@
           
           
           
-          <li><a href="/docs/latest/getting-started/LocalCluster/">Setting up a local standalone cluster</a></li>
           
           
+          <li><a href="/docs/latest/getting-started/LocalCluster/">Setting up a local standalone cluster</a></li>
           
           
           
@@ -1305,9 +1305,9 @@
           
           
           
-          <li><a href="/docs/latest/getting-started/LocalCluster/">Setting up a local standalone cluster</a></li>
           
           
+          <li><a href="/docs/latest/getting-started/LocalCluster/">Setting up a local standalone cluster</a></li>
           
           
           
diff --git a/content/docs/latest/getting-started/Pulsar-2.0/index.html b/content/docs/latest/getting-started/Pulsar-2.0/index.html
index 2018e47..45ec5ca 100644
--- a/content/docs/latest/getting-started/Pulsar-2.0/index.html
+++ b/content/docs/latest/getting-started/Pulsar-2.0/index.html
@@ -1563,9 +1563,9 @@
           
           
           
-          <li><a href="/docs/latest/cookbooks/PartitionedTopics/">Partitioned topics</a></li>
           
           
+          <li><a href="/docs/latest/cookbooks/PartitionedTopics/">Partitioned topics</a></li>
           
           
           
diff --git a/content/docs/latest/getting-started/docker/index.html b/content/docs/latest/getting-started/docker/index.html
index d67525e..9bd32cd 100644
--- a/content/docs/latest/getting-started/docker/index.html
+++ b/content/docs/latest/getting-started/docker/index.html
@@ -1057,9 +1057,9 @@
           
           
           
-          <li><a href="/docs/latest/getting-started/LocalCluster/">Setting up a local standalone cluster</a></li>
           
           
+          <li><a href="/docs/latest/getting-started/LocalCluster/">Setting up a local standalone cluster</a></li>
           
           
           
@@ -1305,9 +1305,9 @@
           
           
           
-          <li><a href="/docs/latest/getting-started/LocalCluster/">Setting up a local standalone cluster</a></li>
           
           
+          <li><a href="/docs/latest/getting-started/LocalCluster/">Setting up a local standalone cluster</a></li>
           
           
           
diff --git a/content/docs/latest/project/BinaryProtocol/index.html b/content/docs/latest/project/BinaryProtocol/index.html
index 5d74a12..3e28b29 100644
--- a/content/docs/latest/project/BinaryProtocol/index.html
+++ b/content/docs/latest/project/BinaryProtocol/index.html
@@ -1001,9 +1001,9 @@
           
           
           
-          <li><a href="/docs/latest/project/BinaryProtocol/">Pulsar binary protocol specification</a></li>
           
           
+          <li><a href="/docs/latest/project/BinaryProtocol/">Pulsar binary protocol specification</a></li>
           
           
           
@@ -1247,9 +1247,9 @@
           
           
           
-          <li><a href="/docs/latest/project/BinaryProtocol/">Pulsar binary protocol specification</a></li>
           
           
+          <li><a href="/docs/latest/project/BinaryProtocol/">Pulsar binary protocol specification</a></li>
           
           
           
diff --git a/content/docs/latest/project/CompileCpp/index.html b/content/docs/latest/project/CompileCpp/index.html
index 0b1376a..bd1db5f 100644
--- a/content/docs/latest/project/CompileCpp/index.html
+++ b/content/docs/latest/project/CompileCpp/index.html
@@ -1005,9 +1005,9 @@
           
           
           
-          <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
+          <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
           
@@ -1033,6 +1033,8 @@
           
           
           
+          
+          
           <li><a href="/docs/latest/clients/Cpp/">The Pulsar C++ client</a></li>
           
           
@@ -1155,8 +1157,6 @@
           
           
           
-          
-          
           <li><a href="/docs/latest/clients/go/">The Pulsar Go client</a></li>
           
           
@@ -1287,9 +1287,9 @@
           
           
           
-          <li><a href="/docs/latest/clients/Cpp/">The Pulsar C++ client</a></li>
           
           
+          <li><a href="/docs/latest/clients/Cpp/">The Pulsar C++ client</a></li>
           
           
           
diff --git a/content/docs/latest/project/SimulationTools/index.html b/content/docs/latest/project/SimulationTools/index.html
index 8857516..e601624 100644
--- a/content/docs/latest/project/SimulationTools/index.html
+++ b/content/docs/latest/project/SimulationTools/index.html
@@ -1099,9 +1099,9 @@
           
           
           
-          <li><a href="/docs/latest/project/SimulationTools/">Simulation tools</a></li>
           
           
+          <li><a href="/docs/latest/project/SimulationTools/">Simulation tools</a></li>
           
           
           
diff --git a/content/docs/latest/project/schema-storage/index.html b/content/docs/latest/project/schema-storage/index.html
index 9d6b5fd..333ed51 100644
--- a/content/docs/latest/project/schema-storage/index.html
+++ b/content/docs/latest/project/schema-storage/index.html
@@ -1045,9 +1045,9 @@
           
           
           
-          <li><a href="/docs/latest/clients/Java/">The Pulsar Java client</a></li>
           
           
+          <li><a href="/docs/latest/clients/Java/">The Pulsar Java client</a></li>
           
           
           
@@ -1293,9 +1293,9 @@
           
           
           
-          <li><a href="/docs/latest/clients/Java/">The Pulsar Java client</a></li>
           
           
+          <li><a href="/docs/latest/clients/Java/">The Pulsar Java client</a></li>
           
           
           
diff --git a/content/docs/latest/reference/CliTools/index.html b/content/docs/latest/reference/CliTools/index.html
index cba50c3..cc20bbd 100644
--- a/content/docs/latest/reference/CliTools/index.html
+++ b/content/docs/latest/reference/CliTools/index.html
@@ -1005,6 +1005,8 @@
           
           
           
+          
+          
           <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
@@ -1123,8 +1125,6 @@
           
           
           
-          
-          
           <li><a href="/docs/latest/security/authorization/">Authentication and authorization in Pulsar</a></li>
           
           
@@ -1271,9 +1271,9 @@
           
           
           
-          <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
+          <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
           
@@ -1519,9 +1519,9 @@
           
           
           
-          <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
+          <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
           
@@ -1547,6 +1547,8 @@
           
           
           
+          
+          
           <li><a href="/docs/latest/clients/Cpp/">The Pulsar C++ client</a></li>
           
           
@@ -1669,8 +1671,6 @@
           
           
           
-          
-          
           <li><a href="/docs/latest/clients/go/">The Pulsar Go client</a></li>
           
           
@@ -1775,9 +1775,9 @@
           
           
           
-          <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
+          <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
           
@@ -2021,9 +2021,9 @@
           
           
           
-          <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
+          <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
           
@@ -2267,9 +2267,9 @@
           
           
           
-          <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
+          <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
           
diff --git a/content/docs/latest/security/authorization/index.html b/content/docs/latest/security/authorization/index.html
index e03f92f..755417d 100644
--- a/content/docs/latest/security/authorization/index.html
+++ b/content/docs/latest/security/authorization/index.html
@@ -1005,6 +1005,8 @@
           
           
           
+          
+          
           <li><a href="/docs/latest/reference/CliTools/">Pulsar command-line tools</a></li>
           
           
@@ -1123,8 +1125,6 @@
           
           
           
-          
-          
           <li><a href="/docs/latest/security/authorization/">Authentication and authorization in Pulsar</a></li>
           
           
@@ -2299,6 +2299,8 @@
           
           
           
+          
+          
           <li><a href="/docs/latest/clients/Java/">The Pulsar Java client</a></li>
           
           
@@ -2377,8 +2379,6 @@
           
           
           
-          
-          
           <li><a href="/docs/latest/security/authorization/">Authentication and authorization in Pulsar</a></li>
           
           
@@ -2541,9 +2541,9 @@
           
           
           
-          <li><a href="/docs/latest/clients/Cpp/">The Pulsar C++ client</a></li>
           
           
+          <li><a href="/docs/latest/clients/Cpp/">The Pulsar C++ client</a></li>
           
           
           
diff --git a/content/docs/latest/security/encryption/index.html b/content/docs/latest/security/encryption/index.html
index a6132a3..18ca402 100644
--- a/content/docs/latest/security/encryption/index.html
+++ b/content/docs/latest/security/encryption/index.html
@@ -1567,9 +1567,9 @@
           
           
           
-          <li><a href="/docs/latest/cookbooks/PartitionedTopics/">Partitioned topics</a></li>
           
           
+          <li><a href="/docs/latest/cookbooks/PartitionedTopics/">Partitioned topics</a></li>
           
           
           
@@ -1823,9 +1823,9 @@
           
           
           
-          <li><a href="/docs/latest/cookbooks/PartitionedTopics/">Partitioned topics</a></li>
           
           
+          <li><a href="/docs/latest/cookbooks/PartitionedTopics/">Partitioned topics</a></li>
           
           
           
@@ -1851,9 +1851,9 @@
           
           
           
-          <li><a href="/docs/latest/cookbooks/RetentionExpiry/">Message retention and expiry</a></li>
           
           
+          <li><a href="/docs/latest/cookbooks/RetentionExpiry/">Message retention and expiry</a></li>
           
           
           
diff --git a/content/docs/zh-CN/2.1.0-incubating/admin-api-overview.html b/content/docs/zh-CN/2.1.0-incubating/admin-api-overview.html
index b6a402b..c46a8fd 100644
--- a/content/docs/zh-CN/2.1.0-incubating/admin-api-overview.html
+++ b/content/docs/zh-CN/2.1.0-incubating/admin-api-overview.html
@@ -70,7 +70,7 @@
 [`pulsar-admin&lt;0&gt;CLI工具,<a href="/api/admin">java管理API</a>,<a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
  API 中的每一种---需要一些特殊的设置,如果你在Pulsar <a href="reference-terminology.md#instance">实例</a>中开启了<a href="security-overview.md#authentication-providers">身份认证</a>。</p></p>
 <p><h3>pulsar-admin</h3></p>
-<p>如果启用了 <a href="security-overview.md#authentication-providers">身份验证</a>, 则需要提供一个授权配置以使用 <a href="reference-pulsar-admin.md"><code>pulsar-admin`](/docs/zh-CN/2.1.0-incubating/pulsar-admin) 工具。 默认情况下,`pulsar-admin`的配置文件在[`conf/client.conf`](/docs/zh-CN/2.1.0-incubating/reference-configuration#client)文件中。 以下是可用参数:
+<p>如果启用了 <a href="security-overview.md#authentication-providers">身份验证</a>, 则需要提供一个授权配置以使用 <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin"><code>pulsar-admin`](reference-pulsar-admin.md) 工具。 默认情况下,`pulsar-admin`的配置文件在[`conf/client.conf`](/docs/zh-CN/2.1.0-incubating/reference-configuration#client)文件中。 以下是可用参数:
 <table>
 <thead>
 <tr><th>Name</th><th>说明:</th><th>默认值</th></tr>
diff --git a/content/docs/zh-CN/2.1.0-incubating/admin-api-overview/index.html b/content/docs/zh-CN/2.1.0-incubating/admin-api-overview/index.html
index b6a402b..c46a8fd 100644
--- a/content/docs/zh-CN/2.1.0-incubating/admin-api-overview/index.html
+++ b/content/docs/zh-CN/2.1.0-incubating/admin-api-overview/index.html
@@ -70,7 +70,7 @@
 [`pulsar-admin&lt;0&gt;CLI工具,<a href="/api/admin">java管理API</a>,<a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
  API 中的每一种---需要一些特殊的设置,如果你在Pulsar <a href="reference-terminology.md#instance">实例</a>中开启了<a href="security-overview.md#authentication-providers">身份认证</a>。</p></p>
 <p><h3>pulsar-admin</h3></p>
-<p>如果启用了 <a href="security-overview.md#authentication-providers">身份验证</a>, 则需要提供一个授权配置以使用 <a href="reference-pulsar-admin.md"><code>pulsar-admin`](/docs/zh-CN/2.1.0-incubating/pulsar-admin) 工具。 默认情况下,`pulsar-admin`的配置文件在[`conf/client.conf`](/docs/zh-CN/2.1.0-incubating/reference-configuration#client)文件中。 以下是可用参数:
+<p>如果启用了 <a href="security-overview.md#authentication-providers">身份验证</a>, 则需要提供一个授权配置以使用 <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin"><code>pulsar-admin`](reference-pulsar-admin.md) 工具。 默认情况下,`pulsar-admin`的配置文件在[`conf/client.conf`](/docs/zh-CN/2.1.0-incubating/reference-configuration#client)文件中。 以下是可用参数:
 <table>
 <thead>
 <tr><th>Name</th><th>说明:</th><th>默认值</th></tr>
diff --git a/content/docs/zh-CN/2.1.0-incubating/client-libraries-java.html b/content/docs/zh-CN/2.1.0-incubating/client-libraries-java.html
index 124cc5e..f847ad1 100644
--- a/content/docs/zh-CN/2.1.0-incubating/client-libraries-java.html
+++ b/content/docs/zh-CN/2.1.0-incubating/client-libraries-java.html
@@ -154,9 +154,9 @@ client.close();</p>
     .create();
 </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>当使用分区主题时,当你使用生产者发布消息时你可以指定路由模式。 有关使用 Java 客户端指定路由模式的更多内容, 请参见 <a href="/docs/zh-CN/2.1.0-incubating/cookbooks-partitioned">分区主题</a> cookbook。</p>
+<p>当使用分区主题时,当你使用生产者发布消息时你可以指定路由模式。 有关使用 Java 客户端指定路由模式的更多内容, 请参见 <a href="cookbooks-partitioned.md">分区主题</a> cookbook。</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>你可以使用Java客户端<a href="/docs/zh-CN/2.1.0-incubating/concepts-messaging#send-modes">异步</a>发布消息。 使用异步发送,生产者将消息放入阻塞队列并立即返回。 然后,客户端将在后台将消息发送给broker。 如果队列已满(最大值可配置),则在调用API时,生产者可能会被阻塞或立即失败,具体取决于传递给生产者的参数。</p>
+<p>你可以使用Java客户端<a href="concepts-messaging.md#send-modes">异步</a>发布消息。 使用异步发送,生产者将消息放入阻塞队列并立即返回。 然后,客户端将在后台将消息发送给broker。 如果队列已满(最大值可配置),则在调用API时,生产者可能会被阻塞或立即失败,具体取决于传递给生产者的参数。</p>
 <p>以下是异步发送操作的示例:</p>
 <pre><code class="hljs css language-java">producer.sendAsync(<span class="hljs-string">"my-async-message"</span>.getBytes()).thenAccept(msgId -&gt; {
     System.out.printf(<span class="hljs-string">"Message with ID %s successfully sent"</span>, msgId);
@@ -175,9 +175,9 @@ client.close();</p>
 <p>对于前一种情况,也可以使用<code>sendAsync()</code>来终止构建器链,并获取future返回值。</p>
 <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>在Pulsar中,消费者订阅topic主题并处理生产者发布到这些主题的消息。 你可以首先实例化一个<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
-对象并传递给他一个borker(<a href="#client-configuration">如上所示</a>) URL来实例化一个<a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#consumer">消费者</a>。</p>
+对象并传递给他一个borker(<a href="#client-configuration">如上所示</a>) URL来实例化一个<a href="reference-terminology.md#consumer">消费者</a>。</p>
 <p>一旦实例化一个<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
- 对象,你可以指定一个<a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#topic">主题</a>和一个<a href="/docs/zh-CN/2.1.0-incubating/concepts-messaging#subscription-modes">订阅</a>来创建一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
+ 对象,你可以指定一个<a href="reference-terminology.md#topic">主题</a>和一个<a href="concepts-messaging.md#subscription-modes">订阅</a>来创建一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
 消费者。</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
@@ -207,13 +207,13 @@ client.close();</p>
         .subscribe();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="异步接收"></a><a href="#异步接收" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
-<p><code>receive</code>方法将异步接受消息(消费者处理器将被阻塞,直到有消息到达)。 你也可以使用<a href="/docs/zh-CN/2.1.0-incubating/concepts-messaging#receive-modes">异步接收方法</a>,这将在一个新消息到达时立即返回一个<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>对象。</p>
+<p><code>receive</code>方法将异步接受消息(消费者处理器将被阻塞,直到有消息到达)。 你也可以使用<a href="concepts-messaging.md#receive-modes">异步接收方法</a>,这将在一个新消息到达时立即返回一个<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>对象。</p>
 <p>Here's an example:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>异步接收操作返回一个包装在<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>中的{@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message}消息对象。</p>
 <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>消费者除了订阅单个Pulsar主题外,你还可以使用<a href="/docs/zh-CN/2.1.0-incubating/concepts-messaging#multi-topic-subscriptions">多主题订阅</a>订阅多个主题。 若要使用多主题订阅, 可以提供一个topic正则表达式 (regex) 或 主题<code>List</code> 。 如果通过 regex 选择主题, 则所有主题都必须位于同一Pulsar命名空间中。</p>
+<p>消费者除了订阅单个Pulsar主题外,你还可以使用<a href="concepts-messaging.md#multi-topic-subscriptions">多主题订阅</a>订阅多个主题。 若要使用多主题订阅, 可以提供一个topic正则表达式 (regex) 或 主题<code>List</code> 。 如果通过 regex 选择主题, 则所有主题都必须位于同一Pulsar命名空间中。</p>
 <p>下面是一些示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
@@ -274,7 +274,7 @@ consumerBuilder
         });
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="reader-接口-readers"></a><a href="#reader-接口-readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
-<p>使用 <a href="/docs/zh-CN/2.1.0-incubating/concepts-clients#reader-interface">reader 接口</a>, Pulsar客户可以在主题中“手动定位”自己,从指定的消息开始向前读取所有消息。 Pulsar Java API可以让你通过指定一个主题,一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
+<p>使用 <a href="concepts-clients.md#reader-interface">reader 接口</a>, Pulsar客户可以在主题中“手动定位”自己,从指定的消息开始向前读取所有消息。 Pulsar Java API可以让你通过指定一个主题,一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
 和 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 /api/ReaderConfiguration}来创建<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 。</p>
@@ -295,12 +295,12 @@ Reader reader = pulsarClient.newReader()
 <p>在上面的示例中,实例化一个<code>Reader</code>对象对指定的主题和消息(ID); reader将遍历主题中<code>msgIdBytes</code>(取值方式取决于应用程序) 之后的消息。</p>
 <p>上面的示例代码展示了<code>Reader</code>对象指向特定的消息(ID),但你也可以使用<code>MessageId.earliest</code>来指向topic上最早可用的消息,使用<code>MessageId.latest</code>指向最新的消息。</p>
 <h2><a class="anchor" aria-hidden="true" id="schema"></a><a href="#schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="/docs/zh-CN/2.1.0-incubating/concepts-schema-registry">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 Here's an example:</p>
+<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="concepts-schema-registry.md">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 Here's an example:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
 </code></pre>
-<p>上面的生产者相当于 <code>Producer&lt;byte[]&gt;</code> (实际上, 你应该 <em>总是</em> 显式指定类型)。 如果你想让产生者使用不同类型的数据,你需要指定一个<strong>schema</strong>来通知Pulsar 在<a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#topic">topic</a>上传输哪种类型的数据。</p>
+<p>上面的生产者相当于 <code>Producer&lt;byte[]&gt;</code> (实际上, 你应该 <em>总是</em> 显式指定类型)。 如果你想让产生者使用不同类型的数据,你需要指定一个<strong>schema</strong>来通知Pulsar 在<a href="reference-terminology.md#topic">topic</a>上传输哪种类型的数据。</p>
 <h3><a class="anchor" aria-hidden="true" id="schema实例"></a><a href="#schema实例" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <p>假设您有一个 <code>SensorReading</code> 类, 你想通过Pulsar主题进行传输:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SensorReading</span> </span>{
@@ -353,9 +353,9 @@ Producer&lt;MyPojo&gt; pojoProducer = client.newProducer(pojoSchema)
 </code></pre></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="authentication"></a><a href="#authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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目前支持两种身份验证方案:<a href="/docs/zh-CN/2.1.0-incubating/security-tls-authentication"> TLS </a>和<a href="/docs/zh-CN/2.1.0-incubating/security-athenz"> Athenz </a>。 Pulsar Java客户端中两者可以一起使用。</p>
+<p>Pulsar目前支持两种身份验证方案:<a href="security-tls-authentication.md"> TLS </a>和<a href="security-athenz.md"> Athenz </a>。 Pulsar Java客户端中两者可以一起使用。</p>
 <h3><a class="anchor" aria-hidden="true" id="tls-authentication"></a><a href="#tls-authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>要使用<a href="/docs/zh-CN/2.1.0-incubating/security-tls-authentication">TLS</a>,你需要使用<code>setUseTls</code>方法设置TLS为<code>true</code>,将您的Pulsar客户端指向TLS证书路径,并提供证书和密钥文件的路径。</p>
+<p>要使用<a href="security-tls-authentication.md">TLS</a>,你需要使用<code>setUseTls</code>方法设置TLS为<code>true</code>,将您的Pulsar客户端指向TLS证书路径,并提供证书和密钥文件的路径。</p>
 <p>这是一个示例配置:</p>
 <pre><code class="hljs css language-java">Map&lt;String, String&gt; authParams = <span class="hljs-keyword">new</span> HashMap&lt;&gt;();
 authParams.put(<span class="hljs-string">"tlsCertFile"</span>, <span class="hljs-string">"/path/to/client-cert.pem"</span>);
@@ -372,7 +372,7 @@ PulsarClient client = PulsarClient.builder()
         .build();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="athenz"></a><a href="#athenz" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 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>要使用<a href="/docs/zh-CN/2.1.0-incubating/security-athenz">Athenz</a>做为身份认证提供者,你需要<a href="#tls-authentication">use TLS</a>并且在hash提供如下四个参数的值:</p>
+<p>要使用<a href="security-athenz.md">Athenz</a>做为身份认证提供者,你需要<a href="#tls-authentication">use TLS</a>并且在hash提供如下四个参数的值:</p>
 <ul>
 <li><code>tenantDomain</code></li>
 <li><code>tenantService</code></li>
diff --git a/content/docs/zh-CN/2.1.0-incubating/client-libraries-java/index.html b/content/docs/zh-CN/2.1.0-incubating/client-libraries-java/index.html
index 124cc5e..f847ad1 100644
--- a/content/docs/zh-CN/2.1.0-incubating/client-libraries-java/index.html
+++ b/content/docs/zh-CN/2.1.0-incubating/client-libraries-java/index.html
@@ -154,9 +154,9 @@ client.close();</p>
     .create();
 </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>当使用分区主题时,当你使用生产者发布消息时你可以指定路由模式。 有关使用 Java 客户端指定路由模式的更多内容, 请参见 <a href="/docs/zh-CN/2.1.0-incubating/cookbooks-partitioned">分区主题</a> cookbook。</p>
+<p>当使用分区主题时,当你使用生产者发布消息时你可以指定路由模式。 有关使用 Java 客户端指定路由模式的更多内容, 请参见 <a href="cookbooks-partitioned.md">分区主题</a> cookbook。</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>你可以使用Java客户端<a href="/docs/zh-CN/2.1.0-incubating/concepts-messaging#send-modes">异步</a>发布消息。 使用异步发送,生产者将消息放入阻塞队列并立即返回。 然后,客户端将在后台将消息发送给broker。 如果队列已满(最大值可配置),则在调用API时,生产者可能会被阻塞或立即失败,具体取决于传递给生产者的参数。</p>
+<p>你可以使用Java客户端<a href="concepts-messaging.md#send-modes">异步</a>发布消息。 使用异步发送,生产者将消息放入阻塞队列并立即返回。 然后,客户端将在后台将消息发送给broker。 如果队列已满(最大值可配置),则在调用API时,生产者可能会被阻塞或立即失败,具体取决于传递给生产者的参数。</p>
 <p>以下是异步发送操作的示例:</p>
 <pre><code class="hljs css language-java">producer.sendAsync(<span class="hljs-string">"my-async-message"</span>.getBytes()).thenAccept(msgId -&gt; {
     System.out.printf(<span class="hljs-string">"Message with ID %s successfully sent"</span>, msgId);
@@ -175,9 +175,9 @@ client.close();</p>
 <p>对于前一种情况,也可以使用<code>sendAsync()</code>来终止构建器链,并获取future返回值。</p>
 <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>在Pulsar中,消费者订阅topic主题并处理生产者发布到这些主题的消息。 你可以首先实例化一个<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
-对象并传递给他一个borker(<a href="#client-configuration">如上所示</a>) URL来实例化一个<a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#consumer">消费者</a>。</p>
+对象并传递给他一个borker(<a href="#client-configuration">如上所示</a>) URL来实例化一个<a href="reference-terminology.md#consumer">消费者</a>。</p>
 <p>一旦实例化一个<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
- 对象,你可以指定一个<a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#topic">主题</a>和一个<a href="/docs/zh-CN/2.1.0-incubating/concepts-messaging#subscription-modes">订阅</a>来创建一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
+ 对象,你可以指定一个<a href="reference-terminology.md#topic">主题</a>和一个<a href="concepts-messaging.md#subscription-modes">订阅</a>来创建一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
 消费者。</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
@@ -207,13 +207,13 @@ client.close();</p>
         .subscribe();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="异步接收"></a><a href="#异步接收" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
-<p><code>receive</code>方法将异步接受消息(消费者处理器将被阻塞,直到有消息到达)。 你也可以使用<a href="/docs/zh-CN/2.1.0-incubating/concepts-messaging#receive-modes">异步接收方法</a>,这将在一个新消息到达时立即返回一个<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>对象。</p>
+<p><code>receive</code>方法将异步接受消息(消费者处理器将被阻塞,直到有消息到达)。 你也可以使用<a href="concepts-messaging.md#receive-modes">异步接收方法</a>,这将在一个新消息到达时立即返回一个<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>对象。</p>
 <p>Here's an example:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>异步接收操作返回一个包装在<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>中的{@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message}消息对象。</p>
 <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>消费者除了订阅单个Pulsar主题外,你还可以使用<a href="/docs/zh-CN/2.1.0-incubating/concepts-messaging#multi-topic-subscriptions">多主题订阅</a>订阅多个主题。 若要使用多主题订阅, 可以提供一个topic正则表达式 (regex) 或 主题<code>List</code> 。 如果通过 regex 选择主题, 则所有主题都必须位于同一Pulsar命名空间中。</p>
+<p>消费者除了订阅单个Pulsar主题外,你还可以使用<a href="concepts-messaging.md#multi-topic-subscriptions">多主题订阅</a>订阅多个主题。 若要使用多主题订阅, 可以提供一个topic正则表达式 (regex) 或 主题<code>List</code> 。 如果通过 regex 选择主题, 则所有主题都必须位于同一Pulsar命名空间中。</p>
 <p>下面是一些示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
@@ -274,7 +274,7 @@ consumerBuilder
         });
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="reader-接口-readers"></a><a href="#reader-接口-readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
-<p>使用 <a href="/docs/zh-CN/2.1.0-incubating/concepts-clients#reader-interface">reader 接口</a>, Pulsar客户可以在主题中“手动定位”自己,从指定的消息开始向前读取所有消息。 Pulsar Java API可以让你通过指定一个主题,一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
+<p>使用 <a href="concepts-clients.md#reader-interface">reader 接口</a>, Pulsar客户可以在主题中“手动定位”自己,从指定的消息开始向前读取所有消息。 Pulsar Java API可以让你通过指定一个主题,一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
 和 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 /api/ReaderConfiguration}来创建<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 。</p>
@@ -295,12 +295,12 @@ Reader reader = pulsarClient.newReader()
 <p>在上面的示例中,实例化一个<code>Reader</code>对象对指定的主题和消息(ID); reader将遍历主题中<code>msgIdBytes</code>(取值方式取决于应用程序) 之后的消息。</p>
 <p>上面的示例代码展示了<code>Reader</code>对象指向特定的消息(ID),但你也可以使用<code>MessageId.earliest</code>来指向topic上最早可用的消息,使用<code>MessageId.latest</code>指向最新的消息。</p>
 <h2><a class="anchor" aria-hidden="true" id="schema"></a><a href="#schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="/docs/zh-CN/2.1.0-incubating/concepts-schema-registry">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 Here's an example:</p>
+<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="concepts-schema-registry.md">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 Here's an example:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
 </code></pre>
-<p>上面的生产者相当于 <code>Producer&lt;byte[]&gt;</code> (实际上, 你应该 <em>总是</em> 显式指定类型)。 如果你想让产生者使用不同类型的数据,你需要指定一个<strong>schema</strong>来通知Pulsar 在<a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#topic">topic</a>上传输哪种类型的数据。</p>
+<p>上面的生产者相当于 <code>Producer&lt;byte[]&gt;</code> (实际上, 你应该 <em>总是</em> 显式指定类型)。 如果你想让产生者使用不同类型的数据,你需要指定一个<strong>schema</strong>来通知Pulsar 在<a href="reference-terminology.md#topic">topic</a>上传输哪种类型的数据。</p>
 <h3><a class="anchor" aria-hidden="true" id="schema实例"></a><a href="#schema实例" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <p>假设您有一个 <code>SensorReading</code> 类, 你想通过Pulsar主题进行传输:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SensorReading</span> </span>{
@@ -353,9 +353,9 @@ Producer&lt;MyPojo&gt; pojoProducer = client.newProducer(pojoSchema)
 </code></pre></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="authentication"></a><a href="#authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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目前支持两种身份验证方案:<a href="/docs/zh-CN/2.1.0-incubating/security-tls-authentication"> TLS </a>和<a href="/docs/zh-CN/2.1.0-incubating/security-athenz"> Athenz </a>。 Pulsar Java客户端中两者可以一起使用。</p>
+<p>Pulsar目前支持两种身份验证方案:<a href="security-tls-authentication.md"> TLS </a>和<a href="security-athenz.md"> Athenz </a>。 Pulsar Java客户端中两者可以一起使用。</p>
 <h3><a class="anchor" aria-hidden="true" id="tls-authentication"></a><a href="#tls-authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>要使用<a href="/docs/zh-CN/2.1.0-incubating/security-tls-authentication">TLS</a>,你需要使用<code>setUseTls</code>方法设置TLS为<code>true</code>,将您的Pulsar客户端指向TLS证书路径,并提供证书和密钥文件的路径。</p>
+<p>要使用<a href="security-tls-authentication.md">TLS</a>,你需要使用<code>setUseTls</code>方法设置TLS为<code>true</code>,将您的Pulsar客户端指向TLS证书路径,并提供证书和密钥文件的路径。</p>
 <p>这是一个示例配置:</p>
 <pre><code class="hljs css language-java">Map&lt;String, String&gt; authParams = <span class="hljs-keyword">new</span> HashMap&lt;&gt;();
 authParams.put(<span class="hljs-string">"tlsCertFile"</span>, <span class="hljs-string">"/path/to/client-cert.pem"</span>);
@@ -372,7 +372,7 @@ PulsarClient client = PulsarClient.builder()
         .build();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="athenz"></a><a href="#athenz" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 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>要使用<a href="/docs/zh-CN/2.1.0-incubating/security-athenz">Athenz</a>做为身份认证提供者,你需要<a href="#tls-authentication">use TLS</a>并且在hash提供如下四个参数的值:</p>
+<p>要使用<a href="security-athenz.md">Athenz</a>做为身份认证提供者,你需要<a href="#tls-authentication">use TLS</a>并且在hash提供如下四个参数的值:</p>
 <ul>
 <li><code>tenantDomain</code></li>
 <li><code>tenantService</code></li>
diff --git a/content/docs/zh-CN/2.1.0-incubating/concepts-messaging.html b/content/docs/zh-CN/2.1.0-incubating/concepts-messaging.html
index e21d678..102f832 100644
--- a/content/docs/zh-CN/2.1.0-incubating/concepts-messaging.html
+++ b/content/docs/zh-CN/2.1.0-incubating/concepts-messaging.html
@@ -118,7 +118,7 @@
 <pre><code class="hljs">
 | Topic名称组成                       | 说明:                                                                                                                                                                                                                                                                                                                   |
 |:------------------------------- |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| <span class="hljs-code">`persistent`</span> / <span class="hljs-code">`non-persistent`</span> | 定义了topic类型。 Pulsar支持两种不同topic:[<span class="hljs-string">持久</span>](<span class="hljs-link">/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview#persistent-storage</span>)和 [<span class="hljs-string">非持久</span>](<span class="hljs-link">#non-persistent-topics</span>)(默认是持久类型,如果你没有指明类型,topic将会是持久类型)。 持久topic的所有消息都会[<span class="hljs-string"></span>](<span class="hljs-link">/docs/zh-CN/2 [...]
+| <span class="hljs-code">`persistent`</span> / <span class="hljs-code">`non-persistent`</span> | 定义了topic类型。 Pulsar支持两种不同topic:[<span class="hljs-string">持久</span>](<span class="hljs-link">concepts-architecture-overview.md#persistent-storage</span>)和 [<span class="hljs-string">非持久</span>](<span class="hljs-link">#non-persistent-topics</span>)(默认是持久类型,如果你没有指明类型,topic将会是持久类型)。 持久topic的所有消息都会[<span class="hljs-string"></span>](<span class="hljs-link">concepts-architecture-overview.md#persi [...]
 | <span class="hljs-code">`tenant`</span>                        | 实例中topic的租户。tenant是Pulsar多租户的基本要素,可以被跨集群的传播。                                                                                                                                                                                                                                                                          |
 | <span class="hljs-code">`namespace`</span>                     | Topic的管理单元,充当关联topic组的管理机制。 大多数的topic配置在[<span class="hljs-string">namespace</span>](<span class="hljs-link">#namespaces</span>)层面生效。 每个tenant可以有多个namespace。                                                                                                                                                                                                                         |
 | <span class="hljs-code">`topic`</span>                         | 名称的最后组成部分,topic的命名很自由,没有什么特殊的含义。                                                                                                                                                                                                                                                                                      |
@@ -129,7 +129,7 @@
 
 <span class="hljs-section">## 命名空间</span>
 
-命名空间是租户内部逻辑上的命名术语。 一个租户可以通过[<span class="hljs-string">admin API</span>](<span class="hljs-link">/docs/zh-CN/2.1.0-incubating/admin-api-namespaces#create</span>)创建多个命名空间。 例如,一个对接多个应用的租户,可以为每个应用创建不同的namespace。 Namespace使得程序可以以层级的方式创建和管理topic Topic<span class="hljs-code">`my-tenant/app1`</span> ,它的namespace是<span class="hljs-code">`app1`</span>这个应用,对应的租户是 <span class="hljs-code">`my-tenant`</span>。 你可以在namespace下创建任意数量的[<span class="hljs-string">topic</span>](<span class="hljs-link">#topics [...]
+命名空间是租户内部逻辑上的命名术语。 一个租户可以通过[<span class="hljs-string">admin API</span>](<span class="hljs-link">admin-api-namespaces.md#create</span>)创建多个命名空间。 例如,一个对接多个应用的租户,可以为每个应用创建不同的namespace。 Namespace使得程序可以以层级的方式创建和管理topic Topic<span class="hljs-code">`my-tenant/app1`</span> ,它的namespace是<span class="hljs-code">`app1`</span>这个应用,对应的租户是 <span class="hljs-code">`my-tenant`</span>。 你可以在namespace下创建任意数量的[<span class="hljs-string">topic</span>](<span class="hljs-link">#topics</span>)。
 
 <span class="hljs-section">## 订阅模型</span>
 
@@ -204,7 +204,7 @@ Consumer someTopicsConsumer = pulsarClient.subscribe(someTopicsInNamespace, "sub
 </span></code></pre>
 <p>代码例子,请见:</p>
 <ul>
-<li><a href="/docs/zh-CN/2.1.0-incubating/client-libraries-java#multi-topic-subscriptions">Java</a></li>
+<li><a href="client-libraries-java.md#multi-topic-subscriptions">Java</a></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="partitioned-topics"></a><a href="#partitioned-topics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
 <p>通常一个topic仅被一个broker服务,这限制了topic的最大吞吐量。 <em>分区topic</em>是特殊的topic类型,他可以被多个broker处理,这让topic有更高的吞吐量。</p>
@@ -215,7 +215,7 @@ Consumer someTopicsConsumer = pulsarClient.subscribe(someTopicsInNamespace, "sub
 <p>这个topic的消息被广播给两个consumer。 <a href="#routing-modes">路由模式</a>决定哪个broker处理哪个partition,<a href="#subscription-modes">订阅模式</a>决定哪条消息送到哪个consumer。</p>
 <p>大多数境况下,路由和订阅模式可以分开制定。 通常来讲,吞吐能力的要求,决定了 分区/路由 的方式。订阅模式则应该由应用的语义来做决定。</p>
 <p>分区topic和普通topic,对于订阅模式如何工作,没有任何不同。分区只是决定了从生产者生产消息到消费者处理及确认消息过程中发生的事情。</p>
-<p>分区topic需要通过<a href="/docs/zh-CN/2.1.0-incubating/admin-api-overview">admin API</a>指定创建。创建的时候可以指明分区的数量。</p>
+<p>分区topic需要通过<a href="admin-api-overview.md">admin API</a>指定创建。创建的时候可以指明分区的数量。</p>
 <h3><a class="anchor" aria-hidden="true" id="路由模式"></a><a href="#路由模式" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <p>当发布消息到分区topic,你必须要指定<em>路由模式</em>。路由模式决定了每条消息被发布到的分区---其实是内部主题。</p>
 <p>下面是三种默认可用的路由模式:</p>
@@ -229,40 +229,40 @@ Consumer someTopicsConsumer = pulsarClient.subscribe(someTopicsInNamespace, "sub
 <tr><td style="text-align:left">Round robin分发</td><td style="text-align:left">如果没有key,所有的消息通过round-robin方式被路由到不同的分区,以达到最大的生产能力</td><td style="text-align:left">无</td></tr>
 </tbody>
 </table>
-<p>这些默认的模式之外,你还可以创建客制化的路由模式,如果你在使用<a href="/docs/zh-CN/2.1.0-incubating/client-libraries-java">Java client</a>,可以通过实现MessageRouter接口来做客制化。</p>
+<p>这些默认的模式之外,你还可以创建客制化的路由模式,如果你在使用<a href="client-libraries-java.md">Java client</a>,可以通过实现MessageRouter接口来做客制化。</p>
 <h2><a class="anchor" aria-hidden="true" id="非持久topic"></a><a href="#非持久topic" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
-<p>默认的,Pulsar保存<em>所有</em>没有确认的消息到多个<a href="/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview#persistent-storage">BookKeeper</a>的bookies中(存储节点)。持久topic的消息数据可以在broker重启或者订阅者出问题的情况下存活下来。 Data for messages on persistent topics can thus survive broker restarts and subscriber failover.</p>
+<p>默认的,Pulsar保存<em>所有</em>没有确认的消息到多个<a href="concepts-architecture-overview.md#persistent-storage">BookKeeper</a>的bookies中(存储节点)。持久topic的消息数据可以在broker重启或者订阅者出问题的情况下存活下来。 Data for messages on persistent topics can thus survive broker restarts and subscriber failover.</p>
 <p>Pulsar also, however, supports <strong>non-persistent topics</strong>, which are topics on which messages are <em>never</em> persisted to disk and live only in memory. Pulsar也提供了非持久topic。非持久topic的消息不会被保存在硬盘上,只存活于内存中。当使用非持久topic分发时,杀掉Pulsar的broker或者关闭订阅者,此topic( non-persistent))上所有的瞬时消息都会丢失,意味着客户端可能会遇到消息缺失。</p>
 <p>Non-persistent topics have names of this form (note the <code>non-persistent</code> in the name):</p>
 <pre><code class="hljs css language-http">non-persistent://tenant/namespace/topic
 </code></pre>
 <blockquote>
-<p>如何使用非持久topic的更多信息,请参考 <a href="/docs/zh-CN/2.1.0-incubating/cookbooks-non-persistent">Non-persistent messaging cookbook</a></p>
+<p>如何使用非持久topic的更多信息,请参考 <a href="cookbooks-non-persistent.md">Non-persistent messaging cookbook</a></p>
 </blockquote>
-<p>非持久topic中,broker会立即发布消息给所有连接的订阅者,而不会在<a href="/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview#persistent-storage">BookKeeper</a>中<em>存储</em>。 如果有一个订阅者断开连接,broker将无法重发这些瞬时消息,订阅者将永远也不能收到这些消息了。 去掉持久化存储的步骤,在某些情况下,使得非持久topic的消息比持久topic稍微变快。但是同时,Pulsar的一些核心优势也丧失掉了。</p>
+<p>非持久topic中,broker会立即发布消息给所有连接的订阅者,而不会在<a href="concepts-architecture-overview.md#persistent-storage">BookKeeper</a>中<em>存储</em>。 如果有一个订阅者断开连接,broker将无法重发这些瞬时消息,订阅者将永远也不能收到这些消息了。 去掉持久化存储的步骤,在某些情况下,使得非持久topic的消息比持久topic稍微变快。但是同时,Pulsar的一些核心优势也丧失掉了。</p>
 <blockquote>
 <p>非持久topic,消息数据仅存活在内存。 如果broker挂掉或者因其他情况不能从内存取到,你的消息数据就可能丢失。 只有在真的<em>确信</em>你的使用场景符合,并且你可以忍受时,才可去使用非持久topic。</p>
 </blockquote>
-<p>默认非持久topic在broker上是开启的。 你可以通过broker的<a href="/docs/zh-CN/2.1.0-incubating/reference-configuration#broker-enableNonPersistentTopics">配置</a>关闭。 你可以通过使用<a href="referencereference--pulsar-admin/#topics-1"><code>pulsar-admin-topics</code></a>接口管理非持久topic。</p>
+<p>默认非持久topic在broker上是开启的。 你可以通过broker的<a href="reference-configuration.md#broker-enableNonPersistentTopics">配置</a>关闭。 你可以通过使用<a href="referencereference--pulsar-admin/#topics-1"><code>pulsar-admin-topics</code></a>接口管理非持久topic。</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>非持久消息通常比持久消息更快,因为broker无须持久化消息,当消息被分发给所有订阅者时,会立即发送ack给producer。 非持久topic让producer有更低的发布延迟。</p>
 <h3><a class="anchor" aria-hidden="true" id="客户端api"></a><a href="#客户端api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 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>Producer和consumer以连接持久topic同样的方式连接到非持久topic。重要的区别是,topic的名称必须以<code>non-persistent</code>开头。 三种订阅模式--<a href="#exclusive">exclusive</a>,<a href="#shared">shared</a>,<a href="#failover">failover</a>对于非持久topic都是支持的。</p>
-<p>下面是一个非持久topic的<a href="/docs/zh-CN/2.1.0-incubating/client-libraries-java#consumers">java consumer</a>例子:</p>
+<p>下面是一个非持久topic的<a href="client-libraries-java.md#consumers">java consumer</a>例子:</p>
 <pre><code class="hljs css language-java">PulsarClient client = PulsarClient.create(<span class="hljs-string">"pulsar://localhost:6650"</span>);
 String npTopic = <span class="hljs-string">"non-persistent://public/default/my-topic"</span>;
 String subscriptionName = <span class="hljs-string">"my-subscription-name"</span>;
 
 Consumer consumer = client.subscribe(npTopic, subscriptionName);
 </code></pre>
-<p>这里还有一个非持久topic的<a href="/docs/zh-CN/2.1.0-incubating/client-libraries-java#producer">java producer</a>例子:</p>
+<p>这里还有一个非持久topic的<a href="client-libraries-java.md#producer">java producer</a>例子:</p>
 <pre><code class="hljs css language-java">Producer producer = client.createProducer(npTopic);
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="message-retention-and-expiry"></a><a href="#message-retention-and-expiry" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
 <p>Pulsar broker默认如下:</p>
 <ul>
 <li>立即删除<em>所有</em>已经被cunsumer确认过的的消息</li>
-<li>以消息backlog的形式,<a href="/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview#persistent-storage">持久保存</a>所有的未被确认消息</li>
+<li>以消息backlog的形式,<a href="concepts-architecture-overview.md#persistent-storage">持久保存</a>所有的未被确认消息</li>
 </ul>
 <p>Pulsar有两个特性,让你可以覆盖上面的默认行为。</p>
 <ul>
@@ -270,23 +270,23 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <li>消息<strong>过期</strong>让你可以给未被确认的消息设置存活时长(TTL)</li>
 </ul>
 <blockquote>
-<p>所有消息存留和过期在<a href="#namespaces">namespace</a>层面管理。具体操作请查看 <a href="/docs/zh-CN/2.1.0-incubating/cookbooks-retention-expiry">Message retention and expiry</a></p>
+<p>所有消息存留和过期在<a href="#namespaces">namespace</a>层面管理。具体操作请查看 <a href="cookbooks-retention-expiry.md">Message retention and expiry</a></p>
 </blockquote>
 <p>下图说明了这两种概念:</p>
 <p><img src="assets/retention-expiry.png" alt="Message retention and expiry"></p>
 <p>图中上面的是消息存留,<span style="color: #89b557;">存留规则</span>会被用于某namespace下所有的topic,指明哪些消息会被持久存储,即使已经被确认过。 没有被留存规则覆盖的消息将会被<span style="color: #bb3b3e;">删除</span>。 没有留存规则的话,<em>所有</em>被<span style="color: #19967d;">确认</span>的消息都会被删除。</p>
 <p>图中下面的是消息过期,有些消息即使还<span style="color: #337db6;">没有被确认</span>,也被<span style="color: #bb3b3e;">删除</span>掉了。因为根据设置在<span style="color: #e39441;">namespace上的TTL</span>,他们已经过期了。(例如,TTL为5分钟,过了十分钟消息还没被确认)</p>
 <h2><a class="anchor" aria-hidden="true" id="message-deduplication"></a><a href="#message-deduplication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
-<p>当消息被Pulsar<a href="/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview#persistent-storage">持久化</a>多于一次的时候,消息就会<strong>重复</strong>。 消息<strong><em>去重</em></strong>是Pulsar可选的特性,阻止不必要的消息重复,每条消息仅处理一次,<em>即使消息被接收多次</em></p>
+<p>当消息被Pulsar<a href="concepts-architecture-overview.md#persistent-storage">持久化</a>多于一次的时候,消息就会<strong>重复</strong>。 消息<strong><em>去重</em></strong>是Pulsar可选的特性,阻止不必要的消息重复,每条消息仅处理一次,<em>即使消息被接收多次</em></p>
 <p>下图展示了开启和关闭消息去重的场景:</p>
 <p><img src="assets/message-deduplication.png" alt="Pulsar消息去重"></p>
-<p>最上面的场景中,消息去重被关闭。 Producer发布消息1到一个topic,消息到达broker后,被<a href="/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview#persistent-storage">持久化</a>到BookKeeper。 然后producer又发送了消息1(可能因为某些重试逻辑),然后消息被接收后又持久化在BookKeeper,这意味着消息重复发生了。</p>
+<p>最上面的场景中,消息去重被关闭。 Producer发布消息1到一个topic,消息到达broker后,被<a href="concepts-architecture-overview.md#persistent-storage">持久化</a>到BookKeeper。 然后producer又发送了消息1(可能因为某些重试逻辑),然后消息被接收后又持久化在BookKeeper,这意味着消息重复发生了。</p>
 <p>在第二个场景中,producer发送了消息1,消息被broker接收然后持久化,和第一个场景是一样的。 当producer再次发送消息时,broker知道已经收到个消息1,所以不会再持久化消息1.</p>
 <blockquote>
-<p>消息去重在命名空间层面处理。更多介绍请参考 <a href="/docs/zh-CN/2.1.0-incubating/cookbooks-deduplication">message deduplication cookbook</a>.</p>
+<p>消息去重在命名空间层面处理。更多介绍请参考 <a href="cookbooks-deduplication.md">message deduplication cookbook</a>.</p>
 </blockquote>
 <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>消息去重的另外一种方法是确保每条消息<em>仅生产一次</em>。 这种方法通常被叫做<strong>生产者幂等</strong>。 这种方式的缺点是,把消息去重的工作推给了应用去做。 在Pulsar中,去重被<a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#broker">broker</a>处理的,这意味着你不需要修改你的客户端代码。 你只需要做一些管理上的变化(参考<a href="/docs/zh-CN/2.1.0-incubating/cookbooks-deduplication">Managing message deduplication</a> )</p>
+<p>消息去重的另外一种方法是确保每条消息<em>仅生产一次</em>。 这种方法通常被叫做<strong>生产者幂等</strong>。 这种方式的缺点是,把消息去重的工作推给了应用去做。 在Pulsar中,去重被<a href="reference-terminology.md#broker">broker</a>处理的,这意味着你不需要修改你的客户端代码。 你只需要做一些管理上的变化(参考<a href="cookbooks-deduplication.md">Managing message deduplication</a> )</p>
 <h3><a class="anchor" aria-hidden="true" id="去重和实际一次语义"></a><a href="#去重和实际一次语义" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
 <p>消息去重,使Pulsar成为与流处理引擎(SPE)或者其他寻求<a href="https://streaml.io/blog/exactly-once">实际一次</a>处理语义的系统连接的完美消息系统。 消息系统若不提供自动消息去重,则需要SPE或者其他系统保证去重。这意味着严格的消息顺序来自于让程序承担额外的去重工作。 使用Pulsar,严格的顺序保证不会带来任何应用层面的代价。</p>
 <blockquote>
diff --git a/content/docs/zh-CN/2.1.0-incubating/concepts-messaging/index.html b/content/docs/zh-CN/2.1.0-incubating/concepts-messaging/index.html
index e21d678..102f832 100644
--- a/content/docs/zh-CN/2.1.0-incubating/concepts-messaging/index.html
+++ b/content/docs/zh-CN/2.1.0-incubating/concepts-messaging/index.html
@@ -118,7 +118,7 @@
 <pre><code class="hljs">
 | Topic名称组成                       | 说明:                                                                                                                                                                                                                                                                                                                   |
 |:------------------------------- |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| <span class="hljs-code">`persistent`</span> / <span class="hljs-code">`non-persistent`</span> | 定义了topic类型。 Pulsar支持两种不同topic:[<span class="hljs-string">持久</span>](<span class="hljs-link">/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview#persistent-storage</span>)和 [<span class="hljs-string">非持久</span>](<span class="hljs-link">#non-persistent-topics</span>)(默认是持久类型,如果你没有指明类型,topic将会是持久类型)。 持久topic的所有消息都会[<span class="hljs-string"></span>](<span class="hljs-link">/docs/zh-CN/2 [...]
+| <span class="hljs-code">`persistent`</span> / <span class="hljs-code">`non-persistent`</span> | 定义了topic类型。 Pulsar支持两种不同topic:[<span class="hljs-string">持久</span>](<span class="hljs-link">concepts-architecture-overview.md#persistent-storage</span>)和 [<span class="hljs-string">非持久</span>](<span class="hljs-link">#non-persistent-topics</span>)(默认是持久类型,如果你没有指明类型,topic将会是持久类型)。 持久topic的所有消息都会[<span class="hljs-string"></span>](<span class="hljs-link">concepts-architecture-overview.md#persi [...]
 | <span class="hljs-code">`tenant`</span>                        | 实例中topic的租户。tenant是Pulsar多租户的基本要素,可以被跨集群的传播。                                                                                                                                                                                                                                                                          |
 | <span class="hljs-code">`namespace`</span>                     | Topic的管理单元,充当关联topic组的管理机制。 大多数的topic配置在[<span class="hljs-string">namespace</span>](<span class="hljs-link">#namespaces</span>)层面生效。 每个tenant可以有多个namespace。                                                                                                                                                                                                                         |
 | <span class="hljs-code">`topic`</span>                         | 名称的最后组成部分,topic的命名很自由,没有什么特殊的含义。                                                                                                                                                                                                                                                                                      |
@@ -129,7 +129,7 @@
 
 <span class="hljs-section">## 命名空间</span>
 
-命名空间是租户内部逻辑上的命名术语。 一个租户可以通过[<span class="hljs-string">admin API</span>](<span class="hljs-link">/docs/zh-CN/2.1.0-incubating/admin-api-namespaces#create</span>)创建多个命名空间。 例如,一个对接多个应用的租户,可以为每个应用创建不同的namespace。 Namespace使得程序可以以层级的方式创建和管理topic Topic<span class="hljs-code">`my-tenant/app1`</span> ,它的namespace是<span class="hljs-code">`app1`</span>这个应用,对应的租户是 <span class="hljs-code">`my-tenant`</span>。 你可以在namespace下创建任意数量的[<span class="hljs-string">topic</span>](<span class="hljs-link">#topics [...]
+命名空间是租户内部逻辑上的命名术语。 一个租户可以通过[<span class="hljs-string">admin API</span>](<span class="hljs-link">admin-api-namespaces.md#create</span>)创建多个命名空间。 例如,一个对接多个应用的租户,可以为每个应用创建不同的namespace。 Namespace使得程序可以以层级的方式创建和管理topic Topic<span class="hljs-code">`my-tenant/app1`</span> ,它的namespace是<span class="hljs-code">`app1`</span>这个应用,对应的租户是 <span class="hljs-code">`my-tenant`</span>。 你可以在namespace下创建任意数量的[<span class="hljs-string">topic</span>](<span class="hljs-link">#topics</span>)。
 
 <span class="hljs-section">## 订阅模型</span>
 
@@ -204,7 +204,7 @@ Consumer someTopicsConsumer = pulsarClient.subscribe(someTopicsInNamespace, "sub
 </span></code></pre>
 <p>代码例子,请见:</p>
 <ul>
-<li><a href="/docs/zh-CN/2.1.0-incubating/client-libraries-java#multi-topic-subscriptions">Java</a></li>
+<li><a href="client-libraries-java.md#multi-topic-subscriptions">Java</a></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="partitioned-topics"></a><a href="#partitioned-topics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
 <p>通常一个topic仅被一个broker服务,这限制了topic的最大吞吐量。 <em>分区topic</em>是特殊的topic类型,他可以被多个broker处理,这让topic有更高的吞吐量。</p>
@@ -215,7 +215,7 @@ Consumer someTopicsConsumer = pulsarClient.subscribe(someTopicsInNamespace, "sub
 <p>这个topic的消息被广播给两个consumer。 <a href="#routing-modes">路由模式</a>决定哪个broker处理哪个partition,<a href="#subscription-modes">订阅模式</a>决定哪条消息送到哪个consumer。</p>
 <p>大多数境况下,路由和订阅模式可以分开制定。 通常来讲,吞吐能力的要求,决定了 分区/路由 的方式。订阅模式则应该由应用的语义来做决定。</p>
 <p>分区topic和普通topic,对于订阅模式如何工作,没有任何不同。分区只是决定了从生产者生产消息到消费者处理及确认消息过程中发生的事情。</p>
-<p>分区topic需要通过<a href="/docs/zh-CN/2.1.0-incubating/admin-api-overview">admin API</a>指定创建。创建的时候可以指明分区的数量。</p>
+<p>分区topic需要通过<a href="admin-api-overview.md">admin API</a>指定创建。创建的时候可以指明分区的数量。</p>
 <h3><a class="anchor" aria-hidden="true" id="路由模式"></a><a href="#路由模式" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <p>当发布消息到分区topic,你必须要指定<em>路由模式</em>。路由模式决定了每条消息被发布到的分区---其实是内部主题。</p>
 <p>下面是三种默认可用的路由模式:</p>
@@ -229,40 +229,40 @@ Consumer someTopicsConsumer = pulsarClient.subscribe(someTopicsInNamespace, "sub
 <tr><td style="text-align:left">Round robin分发</td><td style="text-align:left">如果没有key,所有的消息通过round-robin方式被路由到不同的分区,以达到最大的生产能力</td><td style="text-align:left">无</td></tr>
 </tbody>
 </table>
-<p>这些默认的模式之外,你还可以创建客制化的路由模式,如果你在使用<a href="/docs/zh-CN/2.1.0-incubating/client-libraries-java">Java client</a>,可以通过实现MessageRouter接口来做客制化。</p>
+<p>这些默认的模式之外,你还可以创建客制化的路由模式,如果你在使用<a href="client-libraries-java.md">Java client</a>,可以通过实现MessageRouter接口来做客制化。</p>
 <h2><a class="anchor" aria-hidden="true" id="非持久topic"></a><a href="#非持久topic" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
-<p>默认的,Pulsar保存<em>所有</em>没有确认的消息到多个<a href="/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview#persistent-storage">BookKeeper</a>的bookies中(存储节点)。持久topic的消息数据可以在broker重启或者订阅者出问题的情况下存活下来。 Data for messages on persistent topics can thus survive broker restarts and subscriber failover.</p>
+<p>默认的,Pulsar保存<em>所有</em>没有确认的消息到多个<a href="concepts-architecture-overview.md#persistent-storage">BookKeeper</a>的bookies中(存储节点)。持久topic的消息数据可以在broker重启或者订阅者出问题的情况下存活下来。 Data for messages on persistent topics can thus survive broker restarts and subscriber failover.</p>
 <p>Pulsar also, however, supports <strong>non-persistent topics</strong>, which are topics on which messages are <em>never</em> persisted to disk and live only in memory. Pulsar也提供了非持久topic。非持久topic的消息不会被保存在硬盘上,只存活于内存中。当使用非持久topic分发时,杀掉Pulsar的broker或者关闭订阅者,此topic( non-persistent))上所有的瞬时消息都会丢失,意味着客户端可能会遇到消息缺失。</p>
 <p>Non-persistent topics have names of this form (note the <code>non-persistent</code> in the name):</p>
 <pre><code class="hljs css language-http">non-persistent://tenant/namespace/topic
 </code></pre>
 <blockquote>
-<p>如何使用非持久topic的更多信息,请参考 <a href="/docs/zh-CN/2.1.0-incubating/cookbooks-non-persistent">Non-persistent messaging cookbook</a></p>
+<p>如何使用非持久topic的更多信息,请参考 <a href="cookbooks-non-persistent.md">Non-persistent messaging cookbook</a></p>
 </blockquote>
-<p>非持久topic中,broker会立即发布消息给所有连接的订阅者,而不会在<a href="/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview#persistent-storage">BookKeeper</a>中<em>存储</em>。 如果有一个订阅者断开连接,broker将无法重发这些瞬时消息,订阅者将永远也不能收到这些消息了。 去掉持久化存储的步骤,在某些情况下,使得非持久topic的消息比持久topic稍微变快。但是同时,Pulsar的一些核心优势也丧失掉了。</p>
+<p>非持久topic中,broker会立即发布消息给所有连接的订阅者,而不会在<a href="concepts-architecture-overview.md#persistent-storage">BookKeeper</a>中<em>存储</em>。 如果有一个订阅者断开连接,broker将无法重发这些瞬时消息,订阅者将永远也不能收到这些消息了。 去掉持久化存储的步骤,在某些情况下,使得非持久topic的消息比持久topic稍微变快。但是同时,Pulsar的一些核心优势也丧失掉了。</p>
 <blockquote>
 <p>非持久topic,消息数据仅存活在内存。 如果broker挂掉或者因其他情况不能从内存取到,你的消息数据就可能丢失。 只有在真的<em>确信</em>你的使用场景符合,并且你可以忍受时,才可去使用非持久topic。</p>
 </blockquote>
-<p>默认非持久topic在broker上是开启的。 你可以通过broker的<a href="/docs/zh-CN/2.1.0-incubating/reference-configuration#broker-enableNonPersistentTopics">配置</a>关闭。 你可以通过使用<a href="referencereference--pulsar-admin/#topics-1"><code>pulsar-admin-topics</code></a>接口管理非持久topic。</p>
+<p>默认非持久topic在broker上是开启的。 你可以通过broker的<a href="reference-configuration.md#broker-enableNonPersistentTopics">配置</a>关闭。 你可以通过使用<a href="referencereference--pulsar-admin/#topics-1"><code>pulsar-admin-topics</code></a>接口管理非持久topic。</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>非持久消息通常比持久消息更快,因为broker无须持久化消息,当消息被分发给所有订阅者时,会立即发送ack给producer。 非持久topic让producer有更低的发布延迟。</p>
 <h3><a class="anchor" aria-hidden="true" id="客户端api"></a><a href="#客户端api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 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>Producer和consumer以连接持久topic同样的方式连接到非持久topic。重要的区别是,topic的名称必须以<code>non-persistent</code>开头。 三种订阅模式--<a href="#exclusive">exclusive</a>,<a href="#shared">shared</a>,<a href="#failover">failover</a>对于非持久topic都是支持的。</p>
-<p>下面是一个非持久topic的<a href="/docs/zh-CN/2.1.0-incubating/client-libraries-java#consumers">java consumer</a>例子:</p>
+<p>下面是一个非持久topic的<a href="client-libraries-java.md#consumers">java consumer</a>例子:</p>
 <pre><code class="hljs css language-java">PulsarClient client = PulsarClient.create(<span class="hljs-string">"pulsar://localhost:6650"</span>);
 String npTopic = <span class="hljs-string">"non-persistent://public/default/my-topic"</span>;
 String subscriptionName = <span class="hljs-string">"my-subscription-name"</span>;
 
 Consumer consumer = client.subscribe(npTopic, subscriptionName);
 </code></pre>
-<p>这里还有一个非持久topic的<a href="/docs/zh-CN/2.1.0-incubating/client-libraries-java#producer">java producer</a>例子:</p>
+<p>这里还有一个非持久topic的<a href="client-libraries-java.md#producer">java producer</a>例子:</p>
 <pre><code class="hljs css language-java">Producer producer = client.createProducer(npTopic);
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="message-retention-and-expiry"></a><a href="#message-retention-and-expiry" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
 <p>Pulsar broker默认如下:</p>
 <ul>
 <li>立即删除<em>所有</em>已经被cunsumer确认过的的消息</li>
-<li>以消息backlog的形式,<a href="/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview#persistent-storage">持久保存</a>所有的未被确认消息</li>
+<li>以消息backlog的形式,<a href="concepts-architecture-overview.md#persistent-storage">持久保存</a>所有的未被确认消息</li>
 </ul>
 <p>Pulsar有两个特性,让你可以覆盖上面的默认行为。</p>
 <ul>
@@ -270,23 +270,23 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <li>消息<strong>过期</strong>让你可以给未被确认的消息设置存活时长(TTL)</li>
 </ul>
 <blockquote>
-<p>所有消息存留和过期在<a href="#namespaces">namespace</a>层面管理。具体操作请查看 <a href="/docs/zh-CN/2.1.0-incubating/cookbooks-retention-expiry">Message retention and expiry</a></p>
+<p>所有消息存留和过期在<a href="#namespaces">namespace</a>层面管理。具体操作请查看 <a href="cookbooks-retention-expiry.md">Message retention and expiry</a></p>
 </blockquote>
 <p>下图说明了这两种概念:</p>
 <p><img src="assets/retention-expiry.png" alt="Message retention and expiry"></p>
 <p>图中上面的是消息存留,<span style="color: #89b557;">存留规则</span>会被用于某namespace下所有的topic,指明哪些消息会被持久存储,即使已经被确认过。 没有被留存规则覆盖的消息将会被<span style="color: #bb3b3e;">删除</span>。 没有留存规则的话,<em>所有</em>被<span style="color: #19967d;">确认</span>的消息都会被删除。</p>
 <p>图中下面的是消息过期,有些消息即使还<span style="color: #337db6;">没有被确认</span>,也被<span style="color: #bb3b3e;">删除</span>掉了。因为根据设置在<span style="color: #e39441;">namespace上的TTL</span>,他们已经过期了。(例如,TTL为5分钟,过了十分钟消息还没被确认)</p>
 <h2><a class="anchor" aria-hidden="true" id="message-deduplication"></a><a href="#message-deduplication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
-<p>当消息被Pulsar<a href="/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview#persistent-storage">持久化</a>多于一次的时候,消息就会<strong>重复</strong>。 消息<strong><em>去重</em></strong>是Pulsar可选的特性,阻止不必要的消息重复,每条消息仅处理一次,<em>即使消息被接收多次</em></p>
+<p>当消息被Pulsar<a href="concepts-architecture-overview.md#persistent-storage">持久化</a>多于一次的时候,消息就会<strong>重复</strong>。 消息<strong><em>去重</em></strong>是Pulsar可选的特性,阻止不必要的消息重复,每条消息仅处理一次,<em>即使消息被接收多次</em></p>
 <p>下图展示了开启和关闭消息去重的场景:</p>
 <p><img src="assets/message-deduplication.png" alt="Pulsar消息去重"></p>
-<p>最上面的场景中,消息去重被关闭。 Producer发布消息1到一个topic,消息到达broker后,被<a href="/docs/zh-CN/2.1.0-incubating/concepts-architecture-overview#persistent-storage">持久化</a>到BookKeeper。 然后producer又发送了消息1(可能因为某些重试逻辑),然后消息被接收后又持久化在BookKeeper,这意味着消息重复发生了。</p>
+<p>最上面的场景中,消息去重被关闭。 Producer发布消息1到一个topic,消息到达broker后,被<a href="concepts-architecture-overview.md#persistent-storage">持久化</a>到BookKeeper。 然后producer又发送了消息1(可能因为某些重试逻辑),然后消息被接收后又持久化在BookKeeper,这意味着消息重复发生了。</p>
 <p>在第二个场景中,producer发送了消息1,消息被broker接收然后持久化,和第一个场景是一样的。 当producer再次发送消息时,broker知道已经收到个消息1,所以不会再持久化消息1.</p>
 <blockquote>
-<p>消息去重在命名空间层面处理。更多介绍请参考 <a href="/docs/zh-CN/2.1.0-incubating/cookbooks-deduplication">message deduplication cookbook</a>.</p>
+<p>消息去重在命名空间层面处理。更多介绍请参考 <a href="cookbooks-deduplication.md">message deduplication cookbook</a>.</p>
 </blockquote>
 <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>消息去重的另外一种方法是确保每条消息<em>仅生产一次</em>。 这种方法通常被叫做<strong>生产者幂等</strong>。 这种方式的缺点是,把消息去重的工作推给了应用去做。 在Pulsar中,去重被<a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#broker">broker</a>处理的,这意味着你不需要修改你的客户端代码。 你只需要做一些管理上的变化(参考<a href="/docs/zh-CN/2.1.0-incubating/cookbooks-deduplication">Managing message deduplication</a> )</p>
+<p>消息去重的另外一种方法是确保每条消息<em>仅生产一次</em>。 这种方法通常被叫做<strong>生产者幂等</strong>。 这种方式的缺点是,把消息去重的工作推给了应用去做。 在Pulsar中,去重被<a href="reference-terminology.md#broker">broker</a>处理的,这意味着你不需要修改你的客户端代码。 你只需要做一些管理上的变化(参考<a href="cookbooks-deduplication.md">Managing message deduplication</a> )</p>
 <h3><a class="anchor" aria-hidden="true" id="去重和实际一次语义"></a><a href="#去重和实际一次语义" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
 <p>消息去重,使Pulsar成为与流处理引擎(SPE)或者其他寻求<a href="https://streaml.io/blog/exactly-once">实际一次</a>处理语义的系统连接的完美消息系统。 消息系统若不提供自动消息去重,则需要SPE或者其他系统保证去重。这意味着严格的消息顺序来自于让程序承担额外的去重工作。 使用Pulsar,严格的顺序保证不会带来任何应用层面的代价。</p>
 <blockquote>
diff --git a/content/docs/zh-CN/2.1.0-incubating/deploy-aws.html b/content/docs/zh-CN/2.1.0-incubating/deploy-aws.html
index 3246338..381a5c6 100644
--- a/content/docs/zh-CN/2.1.0-incubating/deploy-aws.html
+++ b/content/docs/zh-CN/2.1.0-incubating/deploy-aws.html
@@ -138,9 +138,9 @@ id_rsa               id_rsa.pub
 <li>9 total <a href="https://aws.amazon.com/ec2">Elastic Compute Cloud</a> (EC2) instances running the <a href="https://access.redhat.com/articles/3135091">ami-9fa343e7</a> Amazon Machine Image (AMI), which runs <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/7.4_release_notes/index">Red Hat Enterprise Linux (RHEL) 7.4</a>. By default, that includes:
 <ul>
 <li>3 small VMs for ZooKeeper (<a href="https://www.ec2instances.info/?selected=t2.small">t2.small</a> instances)</li>
-<li>3 larger VMs for BookKeeper <a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
-<li>2 larger VMs for Pulsar <a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
-<li>1 larger VMs for Pulsar <a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>3 larger VMs for BookKeeper <a href="reference-terminology.md#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
+<li>2 larger VMs for Pulsar <a href="reference-terminology.md#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>1 larger VMs for Pulsar <a href="reference-terminology.md#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
 </ul></li>
 <li>An EC2 <a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html">security group</a></li>
 <li>A <a href="https://aws.amazon.com/vpc/">virtual private cloud</a> (VPC) for security</li>
diff --git a/content/docs/zh-CN/2.1.0-incubating/deploy-aws/index.html b/content/docs/zh-CN/2.1.0-incubating/deploy-aws/index.html
index 3246338..381a5c6 100644
--- a/content/docs/zh-CN/2.1.0-incubating/deploy-aws/index.html
+++ b/content/docs/zh-CN/2.1.0-incubating/deploy-aws/index.html
@@ -138,9 +138,9 @@ id_rsa               id_rsa.pub
 <li>9 total <a href="https://aws.amazon.com/ec2">Elastic Compute Cloud</a> (EC2) instances running the <a href="https://access.redhat.com/articles/3135091">ami-9fa343e7</a> Amazon Machine Image (AMI), which runs <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/7.4_release_notes/index">Red Hat Enterprise Linux (RHEL) 7.4</a>. By default, that includes:
 <ul>
 <li>3 small VMs for ZooKeeper (<a href="https://www.ec2instances.info/?selected=t2.small">t2.small</a> instances)</li>
-<li>3 larger VMs for BookKeeper <a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
-<li>2 larger VMs for Pulsar <a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
-<li>1 larger VMs for Pulsar <a href="/docs/zh-CN/2.1.0-incubating/reference-terminology#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>3 larger VMs for BookKeeper <a href="reference-terminology.md#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
+<li>2 larger VMs for Pulsar <a href="reference-terminology.md#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>1 larger VMs for Pulsar <a href="reference-terminology.md#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
 </ul></li>
 <li>An EC2 <a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html">security group</a></li>
 <li>A <a href="https://aws.amazon.com/vpc/">virtual private cloud</a> (VPC) for security</li>
diff --git a/content/docs/zh-CN/2.1.0-incubating/deploy-bare-metal.html b/content/docs/zh-CN/2.1.0-incubating/deploy-bare-metal.html
index 671071f..c56c48b 100644
--- a/content/docs/zh-CN/2.1.0-incubating/deploy-bare-metal.html
+++ b/content/docs/zh-CN/2.1.0-incubating/deploy-bare-metal.html
@@ -223,7 +223,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <pre><code class="hljs">
 Once you've applied the desired configuration in <span class="hljs-code">`conf/bookkeeper.conf`</span>, you can start up a bookie on each of your BookKeeper hosts. You can start up each bookie either in the background, using [<span class="hljs-string">nohup</span>](<span class="hljs-link">https://en.wikipedia.org/wiki/Nohup</span>), or in the foreground.
 
-To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">/docs/zh-CN/2.1.0-incubating/reference-cli-tools#pulsar-daemon</span>) CLI tool:
+To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-daemon</span>) CLI tool:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-daemon start bookie
@@ -231,18 +231,18 @@ $ bin/pulsar-daemon start bookie
 <p>To start the bookie in the foreground:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper bookie
 </code></pre>
-<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="/docs/zh-CN/2.1.0-incubating/reference-cli-tools#shell">BookKeeper shell</a> on it:</p>
+<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on it:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell bookiesanity
 </code></pre>
 <p>This will create an ephemeral BookKeeper ledger on the local bookie, write a few entries, read them back, and finally delete the ledger.</p>
-<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="/docs/zh-CN/2.1.0-incubating/reference-cli-tools#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
+<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell simpletest --ensemble &lt;num-bookies&gt; --writeQuorum &lt;num-bookies&gt; --ackQuorum &lt;num-bookies&gt; --numEntries &lt;num-entries&gt;
 </code></pre>
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
 <h3><a class="anchor" aria-hidden="true" id="configuring-brokers"></a><a href="#configuring-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.2 [...]
-<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="/docs/zh-CN/2.1.0-incubating/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="/docs/zh-CN/2.1.0-incubating/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no con [...]
+<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
@@ -250,7 +250,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="enabling-pulsar-functions-optional"></a><a href="#enabling-pulsar-functions-optional" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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>If you want to enable <a href="/docs/zh-CN/2.1.0-incubating/functions-overview">Pulsar Functions</a>, you can follow the instructions as below:</p>
+<p>If you want to enable <a href="functions-overview.md">Pulsar Functions</a>, you can follow the instructions as below:</p>
 <ol>
 <li><p>Edit <code>conf/broker.conf</code> to enable function worker, by setting <code>functionsWorkerEnabled</code> to <code>true</code>.</p>
 <pre><code class="hljs css language-conf"><span class="hljs-attr">functionsWorkerEnabled</span>=<span class="hljs-literal">true</span>
@@ -262,17 +262,17 @@ $ bin/pulsar-daemon start bookie
 </code></pre></li>
 </ol>
 <h3><a class="anchor" aria-hidden="true" id="starting-brokers"></a><a href="#starting-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. [...]
-<p>You can then provide any other configuration changes that you'd like in the <a href="/docs/zh-CN/2.1.0-incubating/reference-configuration#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
-<p>You can start a broker in the foreground using the <a href="/docs/zh-CN/2.1.0-incubating/reference-cli-tools#pulsar-broker"><code>pulsar broker</code></a> command:</p>
+<p>You can then provide any other configuration changes that you'd like in the <a href="reference-configuration.md#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
+<p>You can start a broker in the foreground using the <a href="reference-cli-tools.md#pulsar-broker"><code>pulsar broker</code></a> command:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar broker
 </code></pre>
-<p>You can start a broker in the background using the <a href="/docs/zh-CN/2.1.0-incubating/reference-cli-tools#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
+<p>You can start a broker in the background using the <a href="reference-cli-tools.md#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-daemon start broker
 </code></pre>
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-cluster" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S1 [...]
-<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="/docs/zh-CN/2.1.0-incubating/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/zh-CN/2.1.0-incubating/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
+<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="reference-cli-tools.md#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -300,7 +300,7 @@ $ bin/pulsar-daemon start bookie
   --namespace default \
   --name exclamation
 </code></pre>
-<p>Check if the function is running as expected by <a href="/docs/zh-CN/2.1.0-incubating/functions-deploying#triggering-pulsar-functions">triggering</a> the function.</p>
+<p>Check if the function is running as expected by <a href="functions-deploying.md#triggering-pulsar-functions">triggering</a> the function.</p>
 <pre><code class="hljs css language-bash">bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger --name exclamation --triggerValue <span class="hljs-string">"hello world"</span>
 </code></pre>
 <p>You will see output as below:</p>
diff --git a/content/docs/zh-CN/2.1.0-incubating/deploy-bare-metal/index.html b/content/docs/zh-CN/2.1.0-incubating/deploy-bare-metal/index.html
index 671071f..c56c48b 100644
--- a/content/docs/zh-CN/2.1.0-incubating/deploy-bare-metal/index.html
+++ b/content/docs/zh-CN/2.1.0-incubating/deploy-bare-metal/index.html
@@ -223,7 +223,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <pre><code class="hljs">
 Once you've applied the desired configuration in <span class="hljs-code">`conf/bookkeeper.conf`</span>, you can start up a bookie on each of your BookKeeper hosts. You can start up each bookie either in the background, using [<span class="hljs-string">nohup</span>](<span class="hljs-link">https://en.wikipedia.org/wiki/Nohup</span>), or in the foreground.
 
-To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">/docs/zh-CN/2.1.0-incubating/reference-cli-tools#pulsar-daemon</span>) CLI tool:
+To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-daemon</span>) CLI tool:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-daemon start bookie
@@ -231,18 +231,18 @@ $ bin/pulsar-daemon start bookie
 <p>To start the bookie in the foreground:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper bookie
 </code></pre>
-<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="/docs/zh-CN/2.1.0-incubating/reference-cli-tools#shell">BookKeeper shell</a> on it:</p>
+<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on it:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell bookiesanity
 </code></pre>
 <p>This will create an ephemeral BookKeeper ledger on the local bookie, write a few entries, read them back, and finally delete the ledger.</p>
-<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="/docs/zh-CN/2.1.0-incubating/reference-cli-tools#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
+<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell simpletest --ensemble &lt;num-bookies&gt; --writeQuorum &lt;num-bookies&gt; --ackQuorum &lt;num-bookies&gt; --numEntries &lt;num-entries&gt;
 </code></pre>
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
 <h3><a class="anchor" aria-hidden="true" id="configuring-brokers"></a><a href="#configuring-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.2 [...]
-<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="/docs/zh-CN/2.1.0-incubating/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="/docs/zh-CN/2.1.0-incubating/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no con [...]
+<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
@@ -250,7 +250,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="enabling-pulsar-functions-optional"></a><a href="#enabling-pulsar-functions-optional" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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>If you want to enable <a href="/docs/zh-CN/2.1.0-incubating/functions-overview">Pulsar Functions</a>, you can follow the instructions as below:</p>
+<p>If you want to enable <a href="functions-overview.md">Pulsar Functions</a>, you can follow the instructions as below:</p>
 <ol>
 <li><p>Edit <code>conf/broker.conf</code> to enable function worker, by setting <code>functionsWorkerEnabled</code> to <code>true</code>.</p>
 <pre><code class="hljs css language-conf"><span class="hljs-attr">functionsWorkerEnabled</span>=<span class="hljs-literal">true</span>
@@ -262,17 +262,17 @@ $ bin/pulsar-daemon start bookie
 </code></pre></li>
 </ol>
 <h3><a class="anchor" aria-hidden="true" id="starting-brokers"></a><a href="#starting-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. [...]
-<p>You can then provide any other configuration changes that you'd like in the <a href="/docs/zh-CN/2.1.0-incubating/reference-configuration#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
-<p>You can start a broker in the foreground using the <a href="/docs/zh-CN/2.1.0-incubating/reference-cli-tools#pulsar-broker"><code>pulsar broker</code></a> command:</p>
+<p>You can then provide any other configuration changes that you'd like in the <a href="reference-configuration.md#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
+<p>You can start a broker in the foreground using the <a href="reference-cli-tools.md#pulsar-broker"><code>pulsar broker</code></a> command:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar broker
 </code></pre>
-<p>You can start a broker in the background using the <a href="/docs/zh-CN/2.1.0-incubating/reference-cli-tools#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
+<p>You can start a broker in the background using the <a href="reference-cli-tools.md#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-daemon start broker
 </code></pre>
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-cluster" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S1 [...]
-<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="/docs/zh-CN/2.1.0-incubating/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/zh-CN/2.1.0-incubating/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
+<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="reference-cli-tools.md#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -300,7 +300,7 @@ $ bin/pulsar-daemon start bookie
   --namespace default \
   --name exclamation
 </code></pre>
-<p>Check if the function is running as expected by <a href="/docs/zh-CN/2.1.0-incubating/functions-deploying#triggering-pulsar-functions">triggering</a> the function.</p>
+<p>Check if the function is running as expected by <a href="functions-deploying.md#triggering-pulsar-functions">triggering</a> the function.</p>
 <pre><code class="hljs css language-bash">bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger --name exclamation --triggerValue <span class="hljs-string">"hello world"</span>
 </code></pre>
 <p>You will see output as below:</p>
diff --git a/content/docs/zh-CN/2.1.0-incubating/functions-quickstart.html b/content/docs/zh-CN/2.1.0-incubating/functions-quickstart.html
index 3fe12fa..89bde61 100644
--- a/content/docs/zh-CN/2.1.0-incubating/functions-quickstart.html
+++ b/content/docs/zh-CN/2.1.0-incubating/functions-quickstart.html
@@ -90,7 +90,7 @@ $ bin/pulsar standalone \
 </blockquote>
 <p>--inputs topic1,topic2</p>
 <pre><code class="hljs">
-We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">/docs/zh-CN/2.1.0-incubating/reference-cli-tools#pulsar-client</span>) tool to listen for messages on the output topic:
+We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-client</span>) tool to listen for messages on the output topic:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-client consume persistent://public/default/exclamation-output \
@@ -117,7 +117,7 @@ Hello world!
 <li>If our exclamation function <em>hadn't</em> been running, Pulsar would have durably stored the message data published to the input topic in <a href="https://bookkeeper.apache.org">Apache BookKeeper</a> until a consumer consumed and acknowledged the message</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="run-a-pulsar-function-in-cluster-mode"></a><a href="#run-a-pulsar-function-in-cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 [...]
-<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
+<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="reference-pulsar-admin.md#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
 <p>This command, for example, would deploy the same exclamation function we ran locally above <em>in our Pulsar cluster</em> (rather than outside it):</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --jar examples/api-examples.jar \
@@ -201,7 +201,7 @@ Hello world!
 <p>If you see <code>Deleted successfully</code> in the output, then you've succesfully run, updated, and shut down a Pulsar Function running in cluster mode. Congrats! Now, let's go even further and run a brand new function in the next section.</p>
 <h2><a class="anchor" aria-hidden="true" id="writing-and-running-a-new-function"></a><a href="#writing-and-running-a-new-function" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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 [...]
 <blockquote>
-<p>In order to write and run the <a href="/docs/zh-CN/2.1.0-incubating/functions-api#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
+<p>In order to write and run the <a href="functions-api.md#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
 <pre><code class="hljs css language-bash"></code></pre>
 </blockquote>
 <p>$ pip install pulsar-client</p>
diff --git a/content/docs/zh-CN/2.1.0-incubating/functions-quickstart/index.html b/content/docs/zh-CN/2.1.0-incubating/functions-quickstart/index.html
index 3fe12fa..89bde61 100644
--- a/content/docs/zh-CN/2.1.0-incubating/functions-quickstart/index.html
+++ b/content/docs/zh-CN/2.1.0-incubating/functions-quickstart/index.html
@@ -90,7 +90,7 @@ $ bin/pulsar standalone \
 </blockquote>
 <p>--inputs topic1,topic2</p>
 <pre><code class="hljs">
-We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">/docs/zh-CN/2.1.0-incubating/reference-cli-tools#pulsar-client</span>) tool to listen for messages on the output topic:
+We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-client</span>) tool to listen for messages on the output topic:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-client consume persistent://public/default/exclamation-output \
@@ -117,7 +117,7 @@ Hello world!
 <li>If our exclamation function <em>hadn't</em> been running, Pulsar would have durably stored the message data published to the input topic in <a href="https://bookkeeper.apache.org">Apache BookKeeper</a> until a consumer consumed and acknowledged the message</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="run-a-pulsar-function-in-cluster-mode"></a><a href="#run-a-pulsar-function-in-cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 [...]
-<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="/docs/zh-CN/2.1.0-incubating/pulsar-admin#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
+<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="reference-pulsar-admin.md#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
 <p>This command, for example, would deploy the same exclamation function we ran locally above <em>in our Pulsar cluster</em> (rather than outside it):</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --jar examples/api-examples.jar \
@@ -201,7 +201,7 @@ Hello world!
 <p>If you see <code>Deleted successfully</code> in the output, then you've succesfully run, updated, and shut down a Pulsar Function running in cluster mode. Congrats! Now, let's go even further and run a brand new function in the next section.</p>
 <h2><a class="anchor" aria-hidden="true" id="writing-and-running-a-new-function"></a><a href="#writing-and-running-a-new-function" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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 [...]
 <blockquote>
-<p>In order to write and run the <a href="/docs/zh-CN/2.1.0-incubating/functions-api#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
+<p>In order to write and run the <a href="functions-api.md#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
 <pre><code class="hljs css language-bash"></code></pre>
 </blockquote>
 <p>$ pip install pulsar-client</p>
diff --git a/content/docs/zh-CN/2.1.1-incubating/admin-api-overview.html b/content/docs/zh-CN/2.1.1-incubating/admin-api-overview.html
index d4c18db..9ccf001 100644
--- a/content/docs/zh-CN/2.1.1-incubating/admin-api-overview.html
+++ b/content/docs/zh-CN/2.1.1-incubating/admin-api-overview.html
@@ -70,7 +70,7 @@
 [`pulsar-admin&lt;0&gt;CLI工具,<a href="/api/admin">java管理API</a>,<a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
  API 中的每一种---需要一些特殊的设置,如果你在Pulsar <a href="reference-terminology.md#instance">实例</a>中开启了<a href="security-overview.md#authentication-providers">身份认证</a>。</p></p>
 <p><h3>pulsar-admin</h3></p>
-<p>如果启用了 <a href="security-overview.md#authentication-providers">身份验证</a>, 则需要提供一个授权配置以使用 <a href="reference-pulsar-admin.md"><code>pulsar-admin`](/docs/zh-CN/2.1.1-incubating/pulsar-admin) 工具。 默认情况下,`pulsar-admin`的配置文件在[`conf/client.conf`](/docs/zh-CN/2.1.1-incubating/reference-configuration#client)文件中。 以下是可用参数:
+<p>如果启用了 <a href="security-overview.md#authentication-providers">身份验证</a>, 则需要提供一个授权配置以使用 <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin"><code>pulsar-admin`](reference-pulsar-admin.md) 工具。 默认情况下,`pulsar-admin`的配置文件在[`conf/client.conf`](/docs/zh-CN/2.1.1-incubating/reference-configuration#client)文件中。 以下是可用参数:
 <table>
 <thead>
 <tr><th>Name</th><th>说明:</th><th>默认值</th></tr>
diff --git a/content/docs/zh-CN/2.1.1-incubating/admin-api-overview/index.html b/content/docs/zh-CN/2.1.1-incubating/admin-api-overview/index.html
index d4c18db..9ccf001 100644
--- a/content/docs/zh-CN/2.1.1-incubating/admin-api-overview/index.html
+++ b/content/docs/zh-CN/2.1.1-incubating/admin-api-overview/index.html
@@ -70,7 +70,7 @@
 [`pulsar-admin&lt;0&gt;CLI工具,<a href="/api/admin">java管理API</a>,<a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
  API 中的每一种---需要一些特殊的设置,如果你在Pulsar <a href="reference-terminology.md#instance">实例</a>中开启了<a href="security-overview.md#authentication-providers">身份认证</a>。</p></p>
 <p><h3>pulsar-admin</h3></p>
-<p>如果启用了 <a href="security-overview.md#authentication-providers">身份验证</a>, 则需要提供一个授权配置以使用 <a href="reference-pulsar-admin.md"><code>pulsar-admin`](/docs/zh-CN/2.1.1-incubating/pulsar-admin) 工具。 默认情况下,`pulsar-admin`的配置文件在[`conf/client.conf`](/docs/zh-CN/2.1.1-incubating/reference-configuration#client)文件中。 以下是可用参数:
+<p>如果启用了 <a href="security-overview.md#authentication-providers">身份验证</a>, 则需要提供一个授权配置以使用 <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin"><code>pulsar-admin`](reference-pulsar-admin.md) 工具。 默认情况下,`pulsar-admin`的配置文件在[`conf/client.conf`](/docs/zh-CN/2.1.1-incubating/reference-configuration#client)文件中。 以下是可用参数:
 <table>
 <thead>
 <tr><th>Name</th><th>说明:</th><th>默认值</th></tr>
diff --git a/content/docs/zh-CN/2.1.1-incubating/client-libraries-java.html b/content/docs/zh-CN/2.1.1-incubating/client-libraries-java.html
index ccba2cf..adca592 100644
--- a/content/docs/zh-CN/2.1.1-incubating/client-libraries-java.html
+++ b/content/docs/zh-CN/2.1.1-incubating/client-libraries-java.html
@@ -154,9 +154,9 @@ client.close();</p>
     .create();
 </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>当使用分区主题时,当你使用生产者发布消息时你可以指定路由模式。 有关使用 Java 客户端指定路由模式的更多内容, 请参见 <a href="/docs/zh-CN/2.1.1-incubating/cookbooks-partitioned">分区主题</a> cookbook。</p>
+<p>当使用分区主题时,当你使用生产者发布消息时你可以指定路由模式。 有关使用 Java 客户端指定路由模式的更多内容, 请参见 <a href="cookbooks-partitioned.md">分区主题</a> cookbook。</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>你可以使用Java客户端<a href="/docs/zh-CN/2.1.1-incubating/concepts-messaging#send-modes">异步</a>发布消息。 使用异步发送,生产者将消息放入阻塞队列并立即返回。 然后,客户端将在后台将消息发送给broker。 如果队列已满(最大值可配置),则在调用API时,生产者可能会被阻塞或立即失败,具体取决于传递给生产者的参数。</p>
+<p>你可以使用Java客户端<a href="concepts-messaging.md#send-modes">异步</a>发布消息。 使用异步发送,生产者将消息放入阻塞队列并立即返回。 然后,客户端将在后台将消息发送给broker。 如果队列已满(最大值可配置),则在调用API时,生产者可能会被阻塞或立即失败,具体取决于传递给生产者的参数。</p>
 <p>以下是异步发送操作的示例:</p>
 <pre><code class="hljs css language-java">producer.sendAsync(<span class="hljs-string">"my-async-message"</span>.getBytes()).thenAccept(msgId -&gt; {
     System.out.printf(<span class="hljs-string">"Message with ID %s successfully sent"</span>, msgId);
@@ -175,9 +175,9 @@ client.close();</p>
 <p>对于前一种情况,也可以使用<code>sendAsync()</code>来终止构建器链,并获取future返回值。</p>
 <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>在Pulsar中,消费者订阅topic主题并处理生产者发布到这些主题的消息。 你可以首先实例化一个<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
-对象并传递给他一个borker(<a href="#client-configuration">如上所示</a>) URL来实例化一个<a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#consumer">消费者</a>。</p>
+对象并传递给他一个borker(<a href="#client-configuration">如上所示</a>) URL来实例化一个<a href="reference-terminology.md#consumer">消费者</a>。</p>
 <p>一旦实例化一个<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
- 对象,你可以指定一个<a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#topic">主题</a>和一个<a href="/docs/zh-CN/2.1.1-incubating/concepts-messaging#subscription-modes">订阅</a>来创建一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
+ 对象,你可以指定一个<a href="reference-terminology.md#topic">主题</a>和一个<a href="concepts-messaging.md#subscription-modes">订阅</a>来创建一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
 消费者。</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
@@ -207,13 +207,13 @@ client.close();</p>
         .subscribe();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="异步接收"></a><a href="#异步接收" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
-<p><code>receive</code>方法将异步接受消息(消费者处理器将被阻塞,直到有消息到达)。 你也可以使用<a href="/docs/zh-CN/2.1.1-incubating/concepts-messaging#receive-modes">异步接收方法</a>,这将在一个新消息到达时立即返回一个<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>对象。</p>
+<p><code>receive</code>方法将异步接受消息(消费者处理器将被阻塞,直到有消息到达)。 你也可以使用<a href="concepts-messaging.md#receive-modes">异步接收方法</a>,这将在一个新消息到达时立即返回一个<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>对象。</p>
 <p>Here's an example:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>异步接收操作返回一个包装在<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>中的{@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message}消息对象。</p>
 <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>消费者除了订阅单个Pulsar主题外,你还可以使用<a href="/docs/zh-CN/2.1.1-incubating/concepts-messaging#multi-topic-subscriptions">多主题订阅</a>订阅多个主题。 若要使用多主题订阅, 可以提供一个topic正则表达式 (regex) 或 主题<code>List</code> 。 如果通过 regex 选择主题, 则所有主题都必须位于同一Pulsar命名空间中。</p>
+<p>消费者除了订阅单个Pulsar主题外,你还可以使用<a href="concepts-messaging.md#multi-topic-subscriptions">多主题订阅</a>订阅多个主题。 若要使用多主题订阅, 可以提供一个topic正则表达式 (regex) 或 主题<code>List</code> 。 如果通过 regex 选择主题, 则所有主题都必须位于同一Pulsar命名空间中。</p>
 <p>下面是一些示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
@@ -274,7 +274,7 @@ consumerBuilder
         });
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="reader-接口-readers"></a><a href="#reader-接口-readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
-<p>使用 <a href="/docs/zh-CN/2.1.1-incubating/concepts-clients#reader-interface">reader 接口</a>, Pulsar客户可以在主题中“手动定位”自己,从指定的消息开始向前读取所有消息。 Pulsar Java API可以让你通过指定一个主题,一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
+<p>使用 <a href="concepts-clients.md#reader-interface">reader 接口</a>, Pulsar客户可以在主题中“手动定位”自己,从指定的消息开始向前读取所有消息。 Pulsar Java API可以让你通过指定一个主题,一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
 和 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 /api/ReaderConfiguration}来创建<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 。</p>
@@ -295,12 +295,12 @@ Reader reader = pulsarClient.newReader()
 <p>在上面的示例中,实例化一个<code>Reader</code>对象对指定的主题和消息(ID); reader将遍历主题中<code>msgIdBytes</code>(取值方式取决于应用程序) 之后的消息。</p>
 <p>上面的示例代码展示了<code>Reader</code>对象指向特定的消息(ID),但你也可以使用<code>MessageId.earliest</code>来指向topic上最早可用的消息,使用<code>MessageId.latest</code>指向最新的消息。</p>
 <h2><a class="anchor" aria-hidden="true" id="schema"></a><a href="#schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="/docs/zh-CN/2.1.1-incubating/concepts-schema-registry">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 Here's an example:</p>
+<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="concepts-schema-registry.md">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 Here's an example:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
 </code></pre>
-<p>上面的生产者相当于 <code>Producer&lt;byte[]&gt;</code> (实际上, 你应该 <em>总是</em> 显式指定类型)。 如果你想让产生者使用不同类型的数据,你需要指定一个<strong>schema</strong>来通知Pulsar 在<a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#topic">topic</a>上传输哪种类型的数据。</p>
+<p>上面的生产者相当于 <code>Producer&lt;byte[]&gt;</code> (实际上, 你应该 <em>总是</em> 显式指定类型)。 如果你想让产生者使用不同类型的数据,你需要指定一个<strong>schema</strong>来通知Pulsar 在<a href="reference-terminology.md#topic">topic</a>上传输哪种类型的数据。</p>
 <h3><a class="anchor" aria-hidden="true" id="schema实例"></a><a href="#schema实例" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <p>假设您有一个 <code>SensorReading</code> 类, 你想通过Pulsar主题进行传输:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SensorReading</span> </span>{
@@ -353,9 +353,9 @@ Producer&lt;MyPojo&gt; pojoProducer = client.newProducer(pojoSchema)
 </code></pre></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="authentication"></a><a href="#authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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目前支持两种身份验证方案:<a href="/docs/zh-CN/2.1.1-incubating/security-tls-authentication"> TLS </a>和<a href="/docs/zh-CN/2.1.1-incubating/security-athenz"> Athenz </a>。 Pulsar Java客户端中两者可以一起使用。</p>
+<p>Pulsar目前支持两种身份验证方案:<a href="security-tls-authentication.md"> TLS </a>和<a href="security-athenz.md"> Athenz </a>。 Pulsar Java客户端中两者可以一起使用。</p>
 <h3><a class="anchor" aria-hidden="true" id="tls-authentication"></a><a href="#tls-authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>要使用<a href="/docs/zh-CN/2.1.1-incubating/security-tls-authentication">TLS</a>,你需要使用<code>setUseTls</code>方法设置TLS为<code>true</code>,将您的Pulsar客户端指向TLS证书路径,并提供证书和密钥文件的路径。</p>
+<p>要使用<a href="security-tls-authentication.md">TLS</a>,你需要使用<code>setUseTls</code>方法设置TLS为<code>true</code>,将您的Pulsar客户端指向TLS证书路径,并提供证书和密钥文件的路径。</p>
 <p>这是一个示例配置:</p>
 <pre><code class="hljs css language-java">Map&lt;String, String&gt; authParams = <span class="hljs-keyword">new</span> HashMap&lt;&gt;();
 authParams.put(<span class="hljs-string">"tlsCertFile"</span>, <span class="hljs-string">"/path/to/client-cert.pem"</span>);
@@ -372,7 +372,7 @@ PulsarClient client = PulsarClient.builder()
         .build();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="athenz"></a><a href="#athenz" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 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>要使用<a href="/docs/zh-CN/2.1.1-incubating/security-athenz">Athenz</a>做为身份认证提供者,你需要<a href="#tls-authentication">use TLS</a>并且在hash提供如下四个参数的值:</p>
+<p>要使用<a href="security-athenz.md">Athenz</a>做为身份认证提供者,你需要<a href="#tls-authentication">use TLS</a>并且在hash提供如下四个参数的值:</p>
 <ul>
 <li><code>tenantDomain</code></li>
 <li><code>tenantService</code></li>
diff --git a/content/docs/zh-CN/2.1.1-incubating/client-libraries-java/index.html b/content/docs/zh-CN/2.1.1-incubating/client-libraries-java/index.html
index ccba2cf..adca592 100644
--- a/content/docs/zh-CN/2.1.1-incubating/client-libraries-java/index.html
+++ b/content/docs/zh-CN/2.1.1-incubating/client-libraries-java/index.html
@@ -154,9 +154,9 @@ client.close();</p>
     .create();
 </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>当使用分区主题时,当你使用生产者发布消息时你可以指定路由模式。 有关使用 Java 客户端指定路由模式的更多内容, 请参见 <a href="/docs/zh-CN/2.1.1-incubating/cookbooks-partitioned">分区主题</a> cookbook。</p>
+<p>当使用分区主题时,当你使用生产者发布消息时你可以指定路由模式。 有关使用 Java 客户端指定路由模式的更多内容, 请参见 <a href="cookbooks-partitioned.md">分区主题</a> cookbook。</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>你可以使用Java客户端<a href="/docs/zh-CN/2.1.1-incubating/concepts-messaging#send-modes">异步</a>发布消息。 使用异步发送,生产者将消息放入阻塞队列并立即返回。 然后,客户端将在后台将消息发送给broker。 如果队列已满(最大值可配置),则在调用API时,生产者可能会被阻塞或立即失败,具体取决于传递给生产者的参数。</p>
+<p>你可以使用Java客户端<a href="concepts-messaging.md#send-modes">异步</a>发布消息。 使用异步发送,生产者将消息放入阻塞队列并立即返回。 然后,客户端将在后台将消息发送给broker。 如果队列已满(最大值可配置),则在调用API时,生产者可能会被阻塞或立即失败,具体取决于传递给生产者的参数。</p>
 <p>以下是异步发送操作的示例:</p>
 <pre><code class="hljs css language-java">producer.sendAsync(<span class="hljs-string">"my-async-message"</span>.getBytes()).thenAccept(msgId -&gt; {
     System.out.printf(<span class="hljs-string">"Message with ID %s successfully sent"</span>, msgId);
@@ -175,9 +175,9 @@ client.close();</p>
 <p>对于前一种情况,也可以使用<code>sendAsync()</code>来终止构建器链,并获取future返回值。</p>
 <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>在Pulsar中,消费者订阅topic主题并处理生产者发布到这些主题的消息。 你可以首先实例化一个<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
-对象并传递给他一个borker(<a href="#client-configuration">如上所示</a>) URL来实例化一个<a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#consumer">消费者</a>。</p>
+对象并传递给他一个borker(<a href="#client-configuration">如上所示</a>) URL来实例化一个<a href="reference-terminology.md#consumer">消费者</a>。</p>
 <p>一旦实例化一个<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
- 对象,你可以指定一个<a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#topic">主题</a>和一个<a href="/docs/zh-CN/2.1.1-incubating/concepts-messaging#subscription-modes">订阅</a>来创建一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
+ 对象,你可以指定一个<a href="reference-terminology.md#topic">主题</a>和一个<a href="concepts-messaging.md#subscription-modes">订阅</a>来创建一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
 消费者。</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
@@ -207,13 +207,13 @@ client.close();</p>
         .subscribe();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="异步接收"></a><a href="#异步接收" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
-<p><code>receive</code>方法将异步接受消息(消费者处理器将被阻塞,直到有消息到达)。 你也可以使用<a href="/docs/zh-CN/2.1.1-incubating/concepts-messaging#receive-modes">异步接收方法</a>,这将在一个新消息到达时立即返回一个<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>对象。</p>
+<p><code>receive</code>方法将异步接受消息(消费者处理器将被阻塞,直到有消息到达)。 你也可以使用<a href="concepts-messaging.md#receive-modes">异步接收方法</a>,这将在一个新消息到达时立即返回一个<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>对象。</p>
 <p>Here's an example:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>异步接收操作返回一个包装在<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>中的{@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message}消息对象。</p>
 <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>消费者除了订阅单个Pulsar主题外,你还可以使用<a href="/docs/zh-CN/2.1.1-incubating/concepts-messaging#multi-topic-subscriptions">多主题订阅</a>订阅多个主题。 若要使用多主题订阅, 可以提供一个topic正则表达式 (regex) 或 主题<code>List</code> 。 如果通过 regex 选择主题, 则所有主题都必须位于同一Pulsar命名空间中。</p>
+<p>消费者除了订阅单个Pulsar主题外,你还可以使用<a href="concepts-messaging.md#multi-topic-subscriptions">多主题订阅</a>订阅多个主题。 若要使用多主题订阅, 可以提供一个topic正则表达式 (regex) 或 主题<code>List</code> 。 如果通过 regex 选择主题, 则所有主题都必须位于同一Pulsar命名空间中。</p>
 <p>下面是一些示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
@@ -274,7 +274,7 @@ consumerBuilder
         });
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="reader-接口-readers"></a><a href="#reader-接口-readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
-<p>使用 <a href="/docs/zh-CN/2.1.1-incubating/concepts-clients#reader-interface">reader 接口</a>, Pulsar客户可以在主题中“手动定位”自己,从指定的消息开始向前读取所有消息。 Pulsar Java API可以让你通过指定一个主题,一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
+<p>使用 <a href="concepts-clients.md#reader-interface">reader 接口</a>, Pulsar客户可以在主题中“手动定位”自己,从指定的消息开始向前读取所有消息。 Pulsar Java API可以让你通过指定一个主题,一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
 和 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 /api/ReaderConfiguration}来创建<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 。</p>
@@ -295,12 +295,12 @@ Reader reader = pulsarClient.newReader()
 <p>在上面的示例中,实例化一个<code>Reader</code>对象对指定的主题和消息(ID); reader将遍历主题中<code>msgIdBytes</code>(取值方式取决于应用程序) 之后的消息。</p>
 <p>上面的示例代码展示了<code>Reader</code>对象指向特定的消息(ID),但你也可以使用<code>MessageId.earliest</code>来指向topic上最早可用的消息,使用<code>MessageId.latest</code>指向最新的消息。</p>
 <h2><a class="anchor" aria-hidden="true" id="schema"></a><a href="#schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="/docs/zh-CN/2.1.1-incubating/concepts-schema-registry">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 Here's an example:</p>
+<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="concepts-schema-registry.md">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 Here's an example:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
 </code></pre>
-<p>上面的生产者相当于 <code>Producer&lt;byte[]&gt;</code> (实际上, 你应该 <em>总是</em> 显式指定类型)。 如果你想让产生者使用不同类型的数据,你需要指定一个<strong>schema</strong>来通知Pulsar 在<a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#topic">topic</a>上传输哪种类型的数据。</p>
+<p>上面的生产者相当于 <code>Producer&lt;byte[]&gt;</code> (实际上, 你应该 <em>总是</em> 显式指定类型)。 如果你想让产生者使用不同类型的数据,你需要指定一个<strong>schema</strong>来通知Pulsar 在<a href="reference-terminology.md#topic">topic</a>上传输哪种类型的数据。</p>
 <h3><a class="anchor" aria-hidden="true" id="schema实例"></a><a href="#schema实例" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <p>假设您有一个 <code>SensorReading</code> 类, 你想通过Pulsar主题进行传输:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SensorReading</span> </span>{
@@ -353,9 +353,9 @@ Producer&lt;MyPojo&gt; pojoProducer = client.newProducer(pojoSchema)
 </code></pre></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="authentication"></a><a href="#authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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目前支持两种身份验证方案:<a href="/docs/zh-CN/2.1.1-incubating/security-tls-authentication"> TLS </a>和<a href="/docs/zh-CN/2.1.1-incubating/security-athenz"> Athenz </a>。 Pulsar Java客户端中两者可以一起使用。</p>
+<p>Pulsar目前支持两种身份验证方案:<a href="security-tls-authentication.md"> TLS </a>和<a href="security-athenz.md"> Athenz </a>。 Pulsar Java客户端中两者可以一起使用。</p>
 <h3><a class="anchor" aria-hidden="true" id="tls-authentication"></a><a href="#tls-authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>要使用<a href="/docs/zh-CN/2.1.1-incubating/security-tls-authentication">TLS</a>,你需要使用<code>setUseTls</code>方法设置TLS为<code>true</code>,将您的Pulsar客户端指向TLS证书路径,并提供证书和密钥文件的路径。</p>
+<p>要使用<a href="security-tls-authentication.md">TLS</a>,你需要使用<code>setUseTls</code>方法设置TLS为<code>true</code>,将您的Pulsar客户端指向TLS证书路径,并提供证书和密钥文件的路径。</p>
 <p>这是一个示例配置:</p>
 <pre><code class="hljs css language-java">Map&lt;String, String&gt; authParams = <span class="hljs-keyword">new</span> HashMap&lt;&gt;();
 authParams.put(<span class="hljs-string">"tlsCertFile"</span>, <span class="hljs-string">"/path/to/client-cert.pem"</span>);
@@ -372,7 +372,7 @@ PulsarClient client = PulsarClient.builder()
         .build();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="athenz"></a><a href="#athenz" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 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>要使用<a href="/docs/zh-CN/2.1.1-incubating/security-athenz">Athenz</a>做为身份认证提供者,你需要<a href="#tls-authentication">use TLS</a>并且在hash提供如下四个参数的值:</p>
+<p>要使用<a href="security-athenz.md">Athenz</a>做为身份认证提供者,你需要<a href="#tls-authentication">use TLS</a>并且在hash提供如下四个参数的值:</p>
 <ul>
 <li><code>tenantDomain</code></li>
 <li><code>tenantService</code></li>
diff --git a/content/docs/zh-CN/2.1.1-incubating/concepts-messaging.html b/content/docs/zh-CN/2.1.1-incubating/concepts-messaging.html
index 02bf1a5..3ade607 100644
--- a/content/docs/zh-CN/2.1.1-incubating/concepts-messaging.html
+++ b/content/docs/zh-CN/2.1.1-incubating/concepts-messaging.html
@@ -118,7 +118,7 @@
 <pre><code class="hljs">
 | Topic名称组成                       | 说明:                                                                                                                                                                                                                                                                                                                   |
 |:------------------------------- |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| <span class="hljs-code">`persistent`</span> / <span class="hljs-code">`non-persistent`</span> | 定义了topic类型。 Pulsar支持两种不同topic:[<span class="hljs-string">持久</span>](<span class="hljs-link">/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview#persistent-storage</span>)和 [<span class="hljs-string">非持久</span>](<span class="hljs-link">#non-persistent-topics</span>)(默认是持久类型,如果你没有指明类型,topic将会是持久类型)。 持久topic的所有消息都会[<span class="hljs-string"></span>](<span class="hljs-link">/docs/zh-CN/2 [...]
+| <span class="hljs-code">`persistent`</span> / <span class="hljs-code">`non-persistent`</span> | 定义了topic类型。 Pulsar支持两种不同topic:[<span class="hljs-string">持久</span>](<span class="hljs-link">concepts-architecture-overview.md#persistent-storage</span>)和 [<span class="hljs-string">非持久</span>](<span class="hljs-link">#non-persistent-topics</span>)(默认是持久类型,如果你没有指明类型,topic将会是持久类型)。 持久topic的所有消息都会[<span class="hljs-string"></span>](<span class="hljs-link">concepts-architecture-overview.md#persi [...]
 | <span class="hljs-code">`tenant`</span>                        | 实例中topic的租户。tenant是Pulsar多租户的基本要素,可以被跨集群的传播。                                                                                                                                                                                                                                                                          |
 | <span class="hljs-code">`namespace`</span>                     | Topic的管理单元,充当关联topic组的管理机制。 大多数的topic配置在[<span class="hljs-string">namespace</span>](<span class="hljs-link">#namespaces</span>)层面生效。 每个tenant可以有多个namespace。                                                                                                                                                                                                                         |
 | <span class="hljs-code">`topic`</span>                         | 名称的最后组成部分,topic的命名很自由,没有什么特殊的含义。                                                                                                                                                                                                                                                                                      |
@@ -129,7 +129,7 @@
 
 <span class="hljs-section">## 命名空间</span>
 
-命名空间是租户内部逻辑上的命名术语。 一个租户可以通过[<span class="hljs-string">admin API</span>](<span class="hljs-link">/docs/zh-CN/2.1.1-incubating/admin-api-namespaces#create</span>)创建多个命名空间。 例如,一个对接多个应用的租户,可以为每个应用创建不同的namespace。 Namespace使得程序可以以层级的方式创建和管理topic Topic<span class="hljs-code">`my-tenant/app1`</span> ,它的namespace是<span class="hljs-code">`app1`</span>这个应用,对应的租户是 <span class="hljs-code">`my-tenant`</span>。 你可以在namespace下创建任意数量的[<span class="hljs-string">topic</span>](<span class="hljs-link">#topics [...]
+命名空间是租户内部逻辑上的命名术语。 一个租户可以通过[<span class="hljs-string">admin API</span>](<span class="hljs-link">admin-api-namespaces.md#create</span>)创建多个命名空间。 例如,一个对接多个应用的租户,可以为每个应用创建不同的namespace。 Namespace使得程序可以以层级的方式创建和管理topic Topic<span class="hljs-code">`my-tenant/app1`</span> ,它的namespace是<span class="hljs-code">`app1`</span>这个应用,对应的租户是 <span class="hljs-code">`my-tenant`</span>。 你可以在namespace下创建任意数量的[<span class="hljs-string">topic</span>](<span class="hljs-link">#topics</span>)。
 
 <span class="hljs-section">## 订阅模型</span>
 
@@ -204,7 +204,7 @@ Consumer someTopicsConsumer = pulsarClient.subscribe(someTopicsInNamespace, "sub
 </span></code></pre>
 <p>代码例子,请见:</p>
 <ul>
-<li><a href="/docs/zh-CN/2.1.1-incubating/client-libraries-java#multi-topic-subscriptions">Java</a></li>
+<li><a href="client-libraries-java.md#multi-topic-subscriptions">Java</a></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="partitioned-topics"></a><a href="#partitioned-topics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
 <p>通常一个topic仅被一个broker服务,这限制了topic的最大吞吐量。 <em>分区topic</em>是特殊的topic类型,他可以被多个broker处理,这让topic有更高的吞吐量。</p>
@@ -215,7 +215,7 @@ Consumer someTopicsConsumer = pulsarClient.subscribe(someTopicsInNamespace, "sub
 <p>这个topic的消息被广播给两个consumer。 <a href="#routing-modes">路由模式</a>决定哪个broker处理哪个partition,<a href="#subscription-modes">订阅模式</a>决定哪条消息送到哪个consumer。</p>
 <p>大多数境况下,路由和订阅模式可以分开制定。 通常来讲,吞吐能力的要求,决定了 分区/路由 的方式。订阅模式则应该由应用的语义来做决定。</p>
 <p>分区topic和普通topic,对于订阅模式如何工作,没有任何不同。分区只是决定了从生产者生产消息到消费者处理及确认消息过程中发生的事情。</p>
-<p>分区topic需要通过<a href="/docs/zh-CN/2.1.1-incubating/admin-api-overview">admin API</a>指定创建。创建的时候可以指明分区的数量。</p>
+<p>分区topic需要通过<a href="admin-api-overview.md">admin API</a>指定创建。创建的时候可以指明分区的数量。</p>
 <h3><a class="anchor" aria-hidden="true" id="路由模式"></a><a href="#路由模式" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <p>当发布消息到分区topic,你必须要指定<em>路由模式</em>。路由模式决定了每条消息被发布到的分区---其实是内部主题。</p>
 <p>下面是三种默认可用的路由模式:</p>
@@ -229,40 +229,40 @@ Consumer someTopicsConsumer = pulsarClient.subscribe(someTopicsInNamespace, "sub
 <tr><td style="text-align:left">Round robin分发</td><td style="text-align:left">如果没有key,所有的消息通过round-robin方式被路由到不同的分区,以达到最大的生产能力</td><td style="text-align:left">无</td></tr>
 </tbody>
 </table>
-<p>这些默认的模式之外,你还可以创建客制化的路由模式,如果你在使用<a href="/docs/zh-CN/2.1.1-incubating/client-libraries-java">Java client</a>,可以通过实现MessageRouter接口来做客制化。</p>
+<p>这些默认的模式之外,你还可以创建客制化的路由模式,如果你在使用<a href="client-libraries-java.md">Java client</a>,可以通过实现MessageRouter接口来做客制化。</p>
 <h2><a class="anchor" aria-hidden="true" id="非持久topic"></a><a href="#非持久topic" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
-<p>默认的,Pulsar保存<em>所有</em>没有确认的消息到多个<a href="/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview#persistent-storage">BookKeeper</a>的bookies中(存储节点)。持久topic的消息数据可以在broker重启或者订阅者出问题的情况下存活下来。 Data for messages on persistent topics can thus survive broker restarts and subscriber failover.</p>
+<p>默认的,Pulsar保存<em>所有</em>没有确认的消息到多个<a href="concepts-architecture-overview.md#persistent-storage">BookKeeper</a>的bookies中(存储节点)。持久topic的消息数据可以在broker重启或者订阅者出问题的情况下存活下来。 Data for messages on persistent topics can thus survive broker restarts and subscriber failover.</p>
 <p>Pulsar also, however, supports <strong>non-persistent topics</strong>, which are topics on which messages are <em>never</em> persisted to disk and live only in memory. Pulsar也提供了非持久topic。非持久topic的消息不会被保存在硬盘上,只存活于内存中。当使用非持久topic分发时,杀掉Pulsar的broker或者关闭订阅者,此topic( non-persistent))上所有的瞬时消息都会丢失,意味着客户端可能会遇到消息缺失。</p>
 <p>Non-persistent topics have names of this form (note the <code>non-persistent</code> in the name):</p>
 <pre><code class="hljs css language-http">non-persistent://tenant/namespace/topic
 </code></pre>
 <blockquote>
-<p>如何使用非持久topic的更多信息,请参考 <a href="/docs/zh-CN/2.1.1-incubating/cookbooks-non-persistent">Non-persistent messaging cookbook</a></p>
+<p>如何使用非持久topic的更多信息,请参考 <a href="cookbooks-non-persistent.md">Non-persistent messaging cookbook</a></p>
 </blockquote>
-<p>非持久topic中,broker会立即发布消息给所有连接的订阅者,而不会在<a href="/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview#persistent-storage">BookKeeper</a>中<em>存储</em>。 如果有一个订阅者断开连接,broker将无法重发这些瞬时消息,订阅者将永远也不能收到这些消息了。 去掉持久化存储的步骤,在某些情况下,使得非持久topic的消息比持久topic稍微变快。但是同时,Pulsar的一些核心优势也丧失掉了。</p>
+<p>非持久topic中,broker会立即发布消息给所有连接的订阅者,而不会在<a href="concepts-architecture-overview.md#persistent-storage">BookKeeper</a>中<em>存储</em>。 如果有一个订阅者断开连接,broker将无法重发这些瞬时消息,订阅者将永远也不能收到这些消息了。 去掉持久化存储的步骤,在某些情况下,使得非持久topic的消息比持久topic稍微变快。但是同时,Pulsar的一些核心优势也丧失掉了。</p>
 <blockquote>
 <p>非持久topic,消息数据仅存活在内存。 如果broker挂掉或者因其他情况不能从内存取到,你的消息数据就可能丢失。 只有在真的<em>确信</em>你的使用场景符合,并且你可以忍受时,才可去使用非持久topic。</p>
 </blockquote>
-<p>默认非持久topic在broker上是开启的。 你可以通过broker的<a href="/docs/zh-CN/2.1.1-incubating/reference-configuration#broker-enableNonPersistentTopics">配置</a>关闭。 你可以通过使用<a href="referencereference--pulsar-admin/#topics-1"><code>pulsar-admin-topics</code></a>接口管理非持久topic。</p>
+<p>默认非持久topic在broker上是开启的。 你可以通过broker的<a href="reference-configuration.md#broker-enableNonPersistentTopics">配置</a>关闭。 你可以通过使用<a href="referencereference--pulsar-admin/#topics-1"><code>pulsar-admin-topics</code></a>接口管理非持久topic。</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>非持久消息通常比持久消息更快,因为broker无须持久化消息,当消息被分发给所有订阅者时,会立即发送ack给producer。 非持久topic让producer有更低的发布延迟。</p>
 <h3><a class="anchor" aria-hidden="true" id="客户端api"></a><a href="#客户端api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 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>Producer和consumer以连接持久topic同样的方式连接到非持久topic。重要的区别是,topic的名称必须以<code>non-persistent</code>开头。 三种订阅模式--<a href="#exclusive">exclusive</a>,<a href="#shared">shared</a>,<a href="#failover">failover</a>对于非持久topic都是支持的。</p>
-<p>下面是一个非持久topic的<a href="/docs/zh-CN/2.1.1-incubating/client-libraries-java#consumers">java consumer</a>例子:</p>
+<p>下面是一个非持久topic的<a href="client-libraries-java.md#consumers">java consumer</a>例子:</p>
 <pre><code class="hljs css language-java">PulsarClient client = PulsarClient.create(<span class="hljs-string">"pulsar://localhost:6650"</span>);
 String npTopic = <span class="hljs-string">"non-persistent://public/default/my-topic"</span>;
 String subscriptionName = <span class="hljs-string">"my-subscription-name"</span>;
 
 Consumer consumer = client.subscribe(npTopic, subscriptionName);
 </code></pre>
-<p>这里还有一个非持久topic的<a href="/docs/zh-CN/2.1.1-incubating/client-libraries-java#producer">java producer</a>例子:</p>
+<p>这里还有一个非持久topic的<a href="client-libraries-java.md#producer">java producer</a>例子:</p>
 <pre><code class="hljs css language-java">Producer producer = client.createProducer(npTopic);
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="message-retention-and-expiry"></a><a href="#message-retention-and-expiry" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
 <p>Pulsar broker默认如下:</p>
 <ul>
 <li>立即删除<em>所有</em>已经被cunsumer确认过的的消息</li>
-<li>以消息backlog的形式,<a href="/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview#persistent-storage">持久保存</a>所有的未被确认消息</li>
+<li>以消息backlog的形式,<a href="concepts-architecture-overview.md#persistent-storage">持久保存</a>所有的未被确认消息</li>
 </ul>
 <p>Pulsar有两个特性,让你可以覆盖上面的默认行为。</p>
 <ul>
@@ -270,23 +270,23 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <li>消息<strong>过期</strong>让你可以给未被确认的消息设置存活时长(TTL)</li>
 </ul>
 <blockquote>
-<p>所有消息存留和过期在<a href="#namespaces">namespace</a>层面管理。具体操作请查看 <a href="/docs/zh-CN/2.1.1-incubating/cookbooks-retention-expiry">Message retention and expiry</a></p>
+<p>所有消息存留和过期在<a href="#namespaces">namespace</a>层面管理。具体操作请查看 <a href="cookbooks-retention-expiry.md">Message retention and expiry</a></p>
 </blockquote>
 <p>下图说明了这两种概念:</p>
 <p><img src="assets/retention-expiry.png" alt="Message retention and expiry"></p>
 <p>图中上面的是消息存留,<span style="color: #89b557;">存留规则</span>会被用于某namespace下所有的topic,指明哪些消息会被持久存储,即使已经被确认过。 没有被留存规则覆盖的消息将会被<span style="color: #bb3b3e;">删除</span>。 没有留存规则的话,<em>所有</em>被<span style="color: #19967d;">确认</span>的消息都会被删除。</p>
 <p>图中下面的是消息过期,有些消息即使还<span style="color: #337db6;">没有被确认</span>,也被<span style="color: #bb3b3e;">删除</span>掉了。因为根据设置在<span style="color: #e39441;">namespace上的TTL</span>,他们已经过期了。(例如,TTL为5分钟,过了十分钟消息还没被确认)</p>
 <h2><a class="anchor" aria-hidden="true" id="message-deduplication"></a><a href="#message-deduplication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
-<p>当消息被Pulsar<a href="/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview#persistent-storage">持久化</a>多于一次的时候,消息就会<strong>重复</strong>。 消息<strong><em>去重</em></strong>是Pulsar可选的特性,阻止不必要的消息重复,每条消息仅处理一次,<em>即使消息被接收多次</em></p>
+<p>当消息被Pulsar<a href="concepts-architecture-overview.md#persistent-storage">持久化</a>多于一次的时候,消息就会<strong>重复</strong>。 消息<strong><em>去重</em></strong>是Pulsar可选的特性,阻止不必要的消息重复,每条消息仅处理一次,<em>即使消息被接收多次</em></p>
 <p>下图展示了开启和关闭消息去重的场景:</p>
 <p><img src="assets/message-deduplication.png" alt="Pulsar消息去重"></p>
-<p>最上面的场景中,消息去重被关闭。 Producer发布消息1到一个topic,消息到达broker后,被<a href="/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview#persistent-storage">持久化</a>到BookKeeper。 然后producer又发送了消息1(可能因为某些重试逻辑),然后消息被接收后又持久化在BookKeeper,这意味着消息重复发生了。</p>
+<p>最上面的场景中,消息去重被关闭。 Producer发布消息1到一个topic,消息到达broker后,被<a href="concepts-architecture-overview.md#persistent-storage">持久化</a>到BookKeeper。 然后producer又发送了消息1(可能因为某些重试逻辑),然后消息被接收后又持久化在BookKeeper,这意味着消息重复发生了。</p>
 <p>在第二个场景中,producer发送了消息1,消息被broker接收然后持久化,和第一个场景是一样的。 当producer再次发送消息时,broker知道已经收到个消息1,所以不会再持久化消息1.</p>
 <blockquote>
-<p>消息去重在命名空间层面处理。更多介绍请参考 <a href="/docs/zh-CN/2.1.1-incubating/cookbooks-deduplication">message deduplication cookbook</a>.</p>
+<p>消息去重在命名空间层面处理。更多介绍请参考 <a href="cookbooks-deduplication.md">message deduplication cookbook</a>.</p>
 </blockquote>
 <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>消息去重的另外一种方法是确保每条消息<em>仅生产一次</em>。 这种方法通常被叫做<strong>生产者幂等</strong>。 这种方式的缺点是,把消息去重的工作推给了应用去做。 在Pulsar中,去重被<a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#broker">broker</a>处理的,这意味着你不需要修改你的客户端代码。 你只需要做一些管理上的变化(参考<a href="/docs/zh-CN/2.1.1-incubating/cookbooks-deduplication">Managing message deduplication</a> )</p>
+<p>消息去重的另外一种方法是确保每条消息<em>仅生产一次</em>。 这种方法通常被叫做<strong>生产者幂等</strong>。 这种方式的缺点是,把消息去重的工作推给了应用去做。 在Pulsar中,去重被<a href="reference-terminology.md#broker">broker</a>处理的,这意味着你不需要修改你的客户端代码。 你只需要做一些管理上的变化(参考<a href="cookbooks-deduplication.md">Managing message deduplication</a> )</p>
 <h3><a class="anchor" aria-hidden="true" id="去重和实际一次语义"></a><a href="#去重和实际一次语义" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
 <p>消息去重,使Pulsar成为与流处理引擎(SPE)或者其他寻求<a href="https://streaml.io/blog/exactly-once">实际一次</a>处理语义的系统连接的完美消息系统。 消息系统若不提供自动消息去重,则需要SPE或者其他系统保证去重。这意味着严格的消息顺序来自于让程序承担额外的去重工作。 使用Pulsar,严格的顺序保证不会带来任何应用层面的代价。</p>
 <blockquote>
diff --git a/content/docs/zh-CN/2.1.1-incubating/concepts-messaging/index.html b/content/docs/zh-CN/2.1.1-incubating/concepts-messaging/index.html
index 02bf1a5..3ade607 100644
--- a/content/docs/zh-CN/2.1.1-incubating/concepts-messaging/index.html
+++ b/content/docs/zh-CN/2.1.1-incubating/concepts-messaging/index.html
@@ -118,7 +118,7 @@
 <pre><code class="hljs">
 | Topic名称组成                       | 说明:                                                                                                                                                                                                                                                                                                                   |
 |:------------------------------- |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| <span class="hljs-code">`persistent`</span> / <span class="hljs-code">`non-persistent`</span> | 定义了topic类型。 Pulsar支持两种不同topic:[<span class="hljs-string">持久</span>](<span class="hljs-link">/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview#persistent-storage</span>)和 [<span class="hljs-string">非持久</span>](<span class="hljs-link">#non-persistent-topics</span>)(默认是持久类型,如果你没有指明类型,topic将会是持久类型)。 持久topic的所有消息都会[<span class="hljs-string"></span>](<span class="hljs-link">/docs/zh-CN/2 [...]
+| <span class="hljs-code">`persistent`</span> / <span class="hljs-code">`non-persistent`</span> | 定义了topic类型。 Pulsar支持两种不同topic:[<span class="hljs-string">持久</span>](<span class="hljs-link">concepts-architecture-overview.md#persistent-storage</span>)和 [<span class="hljs-string">非持久</span>](<span class="hljs-link">#non-persistent-topics</span>)(默认是持久类型,如果你没有指明类型,topic将会是持久类型)。 持久topic的所有消息都会[<span class="hljs-string"></span>](<span class="hljs-link">concepts-architecture-overview.md#persi [...]
 | <span class="hljs-code">`tenant`</span>                        | 实例中topic的租户。tenant是Pulsar多租户的基本要素,可以被跨集群的传播。                                                                                                                                                                                                                                                                          |
 | <span class="hljs-code">`namespace`</span>                     | Topic的管理单元,充当关联topic组的管理机制。 大多数的topic配置在[<span class="hljs-string">namespace</span>](<span class="hljs-link">#namespaces</span>)层面生效。 每个tenant可以有多个namespace。                                                                                                                                                                                                                         |
 | <span class="hljs-code">`topic`</span>                         | 名称的最后组成部分,topic的命名很自由,没有什么特殊的含义。                                                                                                                                                                                                                                                                                      |
@@ -129,7 +129,7 @@
 
 <span class="hljs-section">## 命名空间</span>
 
-命名空间是租户内部逻辑上的命名术语。 一个租户可以通过[<span class="hljs-string">admin API</span>](<span class="hljs-link">/docs/zh-CN/2.1.1-incubating/admin-api-namespaces#create</span>)创建多个命名空间。 例如,一个对接多个应用的租户,可以为每个应用创建不同的namespace。 Namespace使得程序可以以层级的方式创建和管理topic Topic<span class="hljs-code">`my-tenant/app1`</span> ,它的namespace是<span class="hljs-code">`app1`</span>这个应用,对应的租户是 <span class="hljs-code">`my-tenant`</span>。 你可以在namespace下创建任意数量的[<span class="hljs-string">topic</span>](<span class="hljs-link">#topics [...]
+命名空间是租户内部逻辑上的命名术语。 一个租户可以通过[<span class="hljs-string">admin API</span>](<span class="hljs-link">admin-api-namespaces.md#create</span>)创建多个命名空间。 例如,一个对接多个应用的租户,可以为每个应用创建不同的namespace。 Namespace使得程序可以以层级的方式创建和管理topic Topic<span class="hljs-code">`my-tenant/app1`</span> ,它的namespace是<span class="hljs-code">`app1`</span>这个应用,对应的租户是 <span class="hljs-code">`my-tenant`</span>。 你可以在namespace下创建任意数量的[<span class="hljs-string">topic</span>](<span class="hljs-link">#topics</span>)。
 
 <span class="hljs-section">## 订阅模型</span>
 
@@ -204,7 +204,7 @@ Consumer someTopicsConsumer = pulsarClient.subscribe(someTopicsInNamespace, "sub
 </span></code></pre>
 <p>代码例子,请见:</p>
 <ul>
-<li><a href="/docs/zh-CN/2.1.1-incubating/client-libraries-java#multi-topic-subscriptions">Java</a></li>
+<li><a href="client-libraries-java.md#multi-topic-subscriptions">Java</a></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="partitioned-topics"></a><a href="#partitioned-topics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
 <p>通常一个topic仅被一个broker服务,这限制了topic的最大吞吐量。 <em>分区topic</em>是特殊的topic类型,他可以被多个broker处理,这让topic有更高的吞吐量。</p>
@@ -215,7 +215,7 @@ Consumer someTopicsConsumer = pulsarClient.subscribe(someTopicsInNamespace, "sub
 <p>这个topic的消息被广播给两个consumer。 <a href="#routing-modes">路由模式</a>决定哪个broker处理哪个partition,<a href="#subscription-modes">订阅模式</a>决定哪条消息送到哪个consumer。</p>
 <p>大多数境况下,路由和订阅模式可以分开制定。 通常来讲,吞吐能力的要求,决定了 分区/路由 的方式。订阅模式则应该由应用的语义来做决定。</p>
 <p>分区topic和普通topic,对于订阅模式如何工作,没有任何不同。分区只是决定了从生产者生产消息到消费者处理及确认消息过程中发生的事情。</p>
-<p>分区topic需要通过<a href="/docs/zh-CN/2.1.1-incubating/admin-api-overview">admin API</a>指定创建。创建的时候可以指明分区的数量。</p>
+<p>分区topic需要通过<a href="admin-api-overview.md">admin API</a>指定创建。创建的时候可以指明分区的数量。</p>
 <h3><a class="anchor" aria-hidden="true" id="路由模式"></a><a href="#路由模式" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <p>当发布消息到分区topic,你必须要指定<em>路由模式</em>。路由模式决定了每条消息被发布到的分区---其实是内部主题。</p>
 <p>下面是三种默认可用的路由模式:</p>
@@ -229,40 +229,40 @@ Consumer someTopicsConsumer = pulsarClient.subscribe(someTopicsInNamespace, "sub
 <tr><td style="text-align:left">Round robin分发</td><td style="text-align:left">如果没有key,所有的消息通过round-robin方式被路由到不同的分区,以达到最大的生产能力</td><td style="text-align:left">无</td></tr>
 </tbody>
 </table>
-<p>这些默认的模式之外,你还可以创建客制化的路由模式,如果你在使用<a href="/docs/zh-CN/2.1.1-incubating/client-libraries-java">Java client</a>,可以通过实现MessageRouter接口来做客制化。</p>
+<p>这些默认的模式之外,你还可以创建客制化的路由模式,如果你在使用<a href="client-libraries-java.md">Java client</a>,可以通过实现MessageRouter接口来做客制化。</p>
 <h2><a class="anchor" aria-hidden="true" id="非持久topic"></a><a href="#非持久topic" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
-<p>默认的,Pulsar保存<em>所有</em>没有确认的消息到多个<a href="/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview#persistent-storage">BookKeeper</a>的bookies中(存储节点)。持久topic的消息数据可以在broker重启或者订阅者出问题的情况下存活下来。 Data for messages on persistent topics can thus survive broker restarts and subscriber failover.</p>
+<p>默认的,Pulsar保存<em>所有</em>没有确认的消息到多个<a href="concepts-architecture-overview.md#persistent-storage">BookKeeper</a>的bookies中(存储节点)。持久topic的消息数据可以在broker重启或者订阅者出问题的情况下存活下来。 Data for messages on persistent topics can thus survive broker restarts and subscriber failover.</p>
 <p>Pulsar also, however, supports <strong>non-persistent topics</strong>, which are topics on which messages are <em>never</em> persisted to disk and live only in memory. Pulsar也提供了非持久topic。非持久topic的消息不会被保存在硬盘上,只存活于内存中。当使用非持久topic分发时,杀掉Pulsar的broker或者关闭订阅者,此topic( non-persistent))上所有的瞬时消息都会丢失,意味着客户端可能会遇到消息缺失。</p>
 <p>Non-persistent topics have names of this form (note the <code>non-persistent</code> in the name):</p>
 <pre><code class="hljs css language-http">non-persistent://tenant/namespace/topic
 </code></pre>
 <blockquote>
-<p>如何使用非持久topic的更多信息,请参考 <a href="/docs/zh-CN/2.1.1-incubating/cookbooks-non-persistent">Non-persistent messaging cookbook</a></p>
+<p>如何使用非持久topic的更多信息,请参考 <a href="cookbooks-non-persistent.md">Non-persistent messaging cookbook</a></p>
 </blockquote>
-<p>非持久topic中,broker会立即发布消息给所有连接的订阅者,而不会在<a href="/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview#persistent-storage">BookKeeper</a>中<em>存储</em>。 如果有一个订阅者断开连接,broker将无法重发这些瞬时消息,订阅者将永远也不能收到这些消息了。 去掉持久化存储的步骤,在某些情况下,使得非持久topic的消息比持久topic稍微变快。但是同时,Pulsar的一些核心优势也丧失掉了。</p>
+<p>非持久topic中,broker会立即发布消息给所有连接的订阅者,而不会在<a href="concepts-architecture-overview.md#persistent-storage">BookKeeper</a>中<em>存储</em>。 如果有一个订阅者断开连接,broker将无法重发这些瞬时消息,订阅者将永远也不能收到这些消息了。 去掉持久化存储的步骤,在某些情况下,使得非持久topic的消息比持久topic稍微变快。但是同时,Pulsar的一些核心优势也丧失掉了。</p>
 <blockquote>
 <p>非持久topic,消息数据仅存活在内存。 如果broker挂掉或者因其他情况不能从内存取到,你的消息数据就可能丢失。 只有在真的<em>确信</em>你的使用场景符合,并且你可以忍受时,才可去使用非持久topic。</p>
 </blockquote>
-<p>默认非持久topic在broker上是开启的。 你可以通过broker的<a href="/docs/zh-CN/2.1.1-incubating/reference-configuration#broker-enableNonPersistentTopics">配置</a>关闭。 你可以通过使用<a href="referencereference--pulsar-admin/#topics-1"><code>pulsar-admin-topics</code></a>接口管理非持久topic。</p>
+<p>默认非持久topic在broker上是开启的。 你可以通过broker的<a href="reference-configuration.md#broker-enableNonPersistentTopics">配置</a>关闭。 你可以通过使用<a href="referencereference--pulsar-admin/#topics-1"><code>pulsar-admin-topics</code></a>接口管理非持久topic。</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>非持久消息通常比持久消息更快,因为broker无须持久化消息,当消息被分发给所有订阅者时,会立即发送ack给producer。 非持久topic让producer有更低的发布延迟。</p>
 <h3><a class="anchor" aria-hidden="true" id="客户端api"></a><a href="#客户端api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 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>Producer和consumer以连接持久topic同样的方式连接到非持久topic。重要的区别是,topic的名称必须以<code>non-persistent</code>开头。 三种订阅模式--<a href="#exclusive">exclusive</a>,<a href="#shared">shared</a>,<a href="#failover">failover</a>对于非持久topic都是支持的。</p>
-<p>下面是一个非持久topic的<a href="/docs/zh-CN/2.1.1-incubating/client-libraries-java#consumers">java consumer</a>例子:</p>
+<p>下面是一个非持久topic的<a href="client-libraries-java.md#consumers">java consumer</a>例子:</p>
 <pre><code class="hljs css language-java">PulsarClient client = PulsarClient.create(<span class="hljs-string">"pulsar://localhost:6650"</span>);
 String npTopic = <span class="hljs-string">"non-persistent://public/default/my-topic"</span>;
 String subscriptionName = <span class="hljs-string">"my-subscription-name"</span>;
 
 Consumer consumer = client.subscribe(npTopic, subscriptionName);
 </code></pre>
-<p>这里还有一个非持久topic的<a href="/docs/zh-CN/2.1.1-incubating/client-libraries-java#producer">java producer</a>例子:</p>
+<p>这里还有一个非持久topic的<a href="client-libraries-java.md#producer">java producer</a>例子:</p>
 <pre><code class="hljs css language-java">Producer producer = client.createProducer(npTopic);
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="message-retention-and-expiry"></a><a href="#message-retention-and-expiry" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
 <p>Pulsar broker默认如下:</p>
 <ul>
 <li>立即删除<em>所有</em>已经被cunsumer确认过的的消息</li>
-<li>以消息backlog的形式,<a href="/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview#persistent-storage">持久保存</a>所有的未被确认消息</li>
+<li>以消息backlog的形式,<a href="concepts-architecture-overview.md#persistent-storage">持久保存</a>所有的未被确认消息</li>
 </ul>
 <p>Pulsar有两个特性,让你可以覆盖上面的默认行为。</p>
 <ul>
@@ -270,23 +270,23 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <li>消息<strong>过期</strong>让你可以给未被确认的消息设置存活时长(TTL)</li>
 </ul>
 <blockquote>
-<p>所有消息存留和过期在<a href="#namespaces">namespace</a>层面管理。具体操作请查看 <a href="/docs/zh-CN/2.1.1-incubating/cookbooks-retention-expiry">Message retention and expiry</a></p>
+<p>所有消息存留和过期在<a href="#namespaces">namespace</a>层面管理。具体操作请查看 <a href="cookbooks-retention-expiry.md">Message retention and expiry</a></p>
 </blockquote>
 <p>下图说明了这两种概念:</p>
 <p><img src="assets/retention-expiry.png" alt="Message retention and expiry"></p>
 <p>图中上面的是消息存留,<span style="color: #89b557;">存留规则</span>会被用于某namespace下所有的topic,指明哪些消息会被持久存储,即使已经被确认过。 没有被留存规则覆盖的消息将会被<span style="color: #bb3b3e;">删除</span>。 没有留存规则的话,<em>所有</em>被<span style="color: #19967d;">确认</span>的消息都会被删除。</p>
 <p>图中下面的是消息过期,有些消息即使还<span style="color: #337db6;">没有被确认</span>,也被<span style="color: #bb3b3e;">删除</span>掉了。因为根据设置在<span style="color: #e39441;">namespace上的TTL</span>,他们已经过期了。(例如,TTL为5分钟,过了十分钟消息还没被确认)</p>
 <h2><a class="anchor" aria-hidden="true" id="message-deduplication"></a><a href="#message-deduplication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
-<p>当消息被Pulsar<a href="/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview#persistent-storage">持久化</a>多于一次的时候,消息就会<strong>重复</strong>。 消息<strong><em>去重</em></strong>是Pulsar可选的特性,阻止不必要的消息重复,每条消息仅处理一次,<em>即使消息被接收多次</em></p>
+<p>当消息被Pulsar<a href="concepts-architecture-overview.md#persistent-storage">持久化</a>多于一次的时候,消息就会<strong>重复</strong>。 消息<strong><em>去重</em></strong>是Pulsar可选的特性,阻止不必要的消息重复,每条消息仅处理一次,<em>即使消息被接收多次</em></p>
 <p>下图展示了开启和关闭消息去重的场景:</p>
 <p><img src="assets/message-deduplication.png" alt="Pulsar消息去重"></p>
-<p>最上面的场景中,消息去重被关闭。 Producer发布消息1到一个topic,消息到达broker后,被<a href="/docs/zh-CN/2.1.1-incubating/concepts-architecture-overview#persistent-storage">持久化</a>到BookKeeper。 然后producer又发送了消息1(可能因为某些重试逻辑),然后消息被接收后又持久化在BookKeeper,这意味着消息重复发生了。</p>
+<p>最上面的场景中,消息去重被关闭。 Producer发布消息1到一个topic,消息到达broker后,被<a href="concepts-architecture-overview.md#persistent-storage">持久化</a>到BookKeeper。 然后producer又发送了消息1(可能因为某些重试逻辑),然后消息被接收后又持久化在BookKeeper,这意味着消息重复发生了。</p>
 <p>在第二个场景中,producer发送了消息1,消息被broker接收然后持久化,和第一个场景是一样的。 当producer再次发送消息时,broker知道已经收到个消息1,所以不会再持久化消息1.</p>
 <blockquote>
-<p>消息去重在命名空间层面处理。更多介绍请参考 <a href="/docs/zh-CN/2.1.1-incubating/cookbooks-deduplication">message deduplication cookbook</a>.</p>
+<p>消息去重在命名空间层面处理。更多介绍请参考 <a href="cookbooks-deduplication.md">message deduplication cookbook</a>.</p>
 </blockquote>
 <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>消息去重的另外一种方法是确保每条消息<em>仅生产一次</em>。 这种方法通常被叫做<strong>生产者幂等</strong>。 这种方式的缺点是,把消息去重的工作推给了应用去做。 在Pulsar中,去重被<a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#broker">broker</a>处理的,这意味着你不需要修改你的客户端代码。 你只需要做一些管理上的变化(参考<a href="/docs/zh-CN/2.1.1-incubating/cookbooks-deduplication">Managing message deduplication</a> )</p>
+<p>消息去重的另外一种方法是确保每条消息<em>仅生产一次</em>。 这种方法通常被叫做<strong>生产者幂等</strong>。 这种方式的缺点是,把消息去重的工作推给了应用去做。 在Pulsar中,去重被<a href="reference-terminology.md#broker">broker</a>处理的,这意味着你不需要修改你的客户端代码。 你只需要做一些管理上的变化(参考<a href="cookbooks-deduplication.md">Managing message deduplication</a> )</p>
 <h3><a class="anchor" aria-hidden="true" id="去重和实际一次语义"></a><a href="#去重和实际一次语义" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
 <p>消息去重,使Pulsar成为与流处理引擎(SPE)或者其他寻求<a href="https://streaml.io/blog/exactly-once">实际一次</a>处理语义的系统连接的完美消息系统。 消息系统若不提供自动消息去重,则需要SPE或者其他系统保证去重。这意味着严格的消息顺序来自于让程序承担额外的去重工作。 使用Pulsar,严格的顺序保证不会带来任何应用层面的代价。</p>
 <blockquote>
diff --git a/content/docs/zh-CN/2.1.1-incubating/deploy-aws.html b/content/docs/zh-CN/2.1.1-incubating/deploy-aws.html
index 9afed92..0c2b9ae 100644
--- a/content/docs/zh-CN/2.1.1-incubating/deploy-aws.html
+++ b/content/docs/zh-CN/2.1.1-incubating/deploy-aws.html
@@ -138,9 +138,9 @@ id_rsa               id_rsa.pub
 <li>9 total <a href="https://aws.amazon.com/ec2">Elastic Compute Cloud</a> (EC2) instances running the <a href="https://access.redhat.com/articles/3135091">ami-9fa343e7</a> Amazon Machine Image (AMI), which runs <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/7.4_release_notes/index">Red Hat Enterprise Linux (RHEL) 7.4</a>. By default, that includes:
 <ul>
 <li>3 small VMs for ZooKeeper (<a href="https://www.ec2instances.info/?selected=t2.small">t2.small</a> instances)</li>
-<li>3 larger VMs for BookKeeper <a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
-<li>2 larger VMs for Pulsar <a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
-<li>1 larger VMs for Pulsar <a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>3 larger VMs for BookKeeper <a href="reference-terminology.md#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
+<li>2 larger VMs for Pulsar <a href="reference-terminology.md#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>1 larger VMs for Pulsar <a href="reference-terminology.md#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
 </ul></li>
 <li>An EC2 <a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html">security group</a></li>
 <li>A <a href="https://aws.amazon.com/vpc/">virtual private cloud</a> (VPC) for security</li>
diff --git a/content/docs/zh-CN/2.1.1-incubating/deploy-aws/index.html b/content/docs/zh-CN/2.1.1-incubating/deploy-aws/index.html
index 9afed92..0c2b9ae 100644
--- a/content/docs/zh-CN/2.1.1-incubating/deploy-aws/index.html
+++ b/content/docs/zh-CN/2.1.1-incubating/deploy-aws/index.html
@@ -138,9 +138,9 @@ id_rsa               id_rsa.pub
 <li>9 total <a href="https://aws.amazon.com/ec2">Elastic Compute Cloud</a> (EC2) instances running the <a href="https://access.redhat.com/articles/3135091">ami-9fa343e7</a> Amazon Machine Image (AMI), which runs <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/7.4_release_notes/index">Red Hat Enterprise Linux (RHEL) 7.4</a>. By default, that includes:
 <ul>
 <li>3 small VMs for ZooKeeper (<a href="https://www.ec2instances.info/?selected=t2.small">t2.small</a> instances)</li>
-<li>3 larger VMs for BookKeeper <a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
-<li>2 larger VMs for Pulsar <a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
-<li>1 larger VMs for Pulsar <a href="/docs/zh-CN/2.1.1-incubating/reference-terminology#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>3 larger VMs for BookKeeper <a href="reference-terminology.md#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
+<li>2 larger VMs for Pulsar <a href="reference-terminology.md#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>1 larger VMs for Pulsar <a href="reference-terminology.md#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
 </ul></li>
 <li>An EC2 <a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html">security group</a></li>
 <li>A <a href="https://aws.amazon.com/vpc/">virtual private cloud</a> (VPC) for security</li>
diff --git a/content/docs/zh-CN/2.1.1-incubating/deploy-bare-metal.html b/content/docs/zh-CN/2.1.1-incubating/deploy-bare-metal.html
index 800de67..b637b8b 100644
--- a/content/docs/zh-CN/2.1.1-incubating/deploy-bare-metal.html
+++ b/content/docs/zh-CN/2.1.1-incubating/deploy-bare-metal.html
@@ -223,7 +223,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <pre><code class="hljs">
 Once you've applied the desired configuration in <span class="hljs-code">`conf/bookkeeper.conf`</span>, you can start up a bookie on each of your BookKeeper hosts. You can start up each bookie either in the background, using [<span class="hljs-string">nohup</span>](<span class="hljs-link">https://en.wikipedia.org/wiki/Nohup</span>), or in the foreground.
 
-To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">/docs/zh-CN/2.1.1-incubating/reference-cli-tools#pulsar-daemon</span>) CLI tool:
+To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-daemon</span>) CLI tool:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-daemon start bookie
@@ -231,18 +231,18 @@ $ bin/pulsar-daemon start bookie
 <p>To start the bookie in the foreground:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper bookie
 </code></pre>
-<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="/docs/zh-CN/2.1.1-incubating/reference-cli-tools#shell">BookKeeper shell</a> on it:</p>
+<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on it:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell bookiesanity
 </code></pre>
 <p>This will create an ephemeral BookKeeper ledger on the local bookie, write a few entries, read them back, and finally delete the ledger.</p>
-<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="/docs/zh-CN/2.1.1-incubating/reference-cli-tools#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
+<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell simpletest --ensemble &lt;num-bookies&gt; --writeQuorum &lt;num-bookies&gt; --ackQuorum &lt;num-bookies&gt; --numEntries &lt;num-entries&gt;
 </code></pre>
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
 <h3><a class="anchor" aria-hidden="true" id="configuring-brokers"></a><a href="#configuring-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.2 [...]
-<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="/docs/zh-CN/2.1.1-incubating/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="/docs/zh-CN/2.1.1-incubating/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no con [...]
+<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
@@ -250,7 +250,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="enabling-pulsar-functions-optional"></a><a href="#enabling-pulsar-functions-optional" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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>If you want to enable <a href="/docs/zh-CN/2.1.1-incubating/functions-overview">Pulsar Functions</a>, you can follow the instructions as below:</p>
+<p>If you want to enable <a href="functions-overview.md">Pulsar Functions</a>, you can follow the instructions as below:</p>
 <ol>
 <li><p>Edit <code>conf/broker.conf</code> to enable function worker, by setting <code>functionsWorkerEnabled</code> to <code>true</code>.</p>
 <pre><code class="hljs css language-conf"><span class="hljs-attr">functionsWorkerEnabled</span>=<span class="hljs-literal">true</span>
@@ -262,17 +262,17 @@ $ bin/pulsar-daemon start bookie
 </code></pre></li>
 </ol>
 <h3><a class="anchor" aria-hidden="true" id="starting-brokers"></a><a href="#starting-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. [...]
-<p>You can then provide any other configuration changes that you'd like in the <a href="/docs/zh-CN/2.1.1-incubating/reference-configuration#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
-<p>You can start a broker in the foreground using the <a href="/docs/zh-CN/2.1.1-incubating/reference-cli-tools#pulsar-broker"><code>pulsar broker</code></a> command:</p>
+<p>You can then provide any other configuration changes that you'd like in the <a href="reference-configuration.md#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
+<p>You can start a broker in the foreground using the <a href="reference-cli-tools.md#pulsar-broker"><code>pulsar broker</code></a> command:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar broker
 </code></pre>
-<p>You can start a broker in the background using the <a href="/docs/zh-CN/2.1.1-incubating/reference-cli-tools#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
+<p>You can start a broker in the background using the <a href="reference-cli-tools.md#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-daemon start broker
 </code></pre>
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-cluster" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S1 [...]
-<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="/docs/zh-CN/2.1.1-incubating/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/zh-CN/2.1.1-incubating/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
+<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="reference-cli-tools.md#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -300,7 +300,7 @@ $ bin/pulsar-daemon start bookie
   --namespace default \
   --name exclamation
 </code></pre>
-<p>Check if the function is running as expected by <a href="/docs/zh-CN/2.1.1-incubating/functions-deploying#triggering-pulsar-functions">triggering</a> the function.</p>
+<p>Check if the function is running as expected by <a href="functions-deploying.md#triggering-pulsar-functions">triggering</a> the function.</p>
 <pre><code class="hljs css language-bash">bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger --name exclamation --triggerValue <span class="hljs-string">"hello world"</span>
 </code></pre>
 <p>You will see output as below:</p>
diff --git a/content/docs/zh-CN/2.1.1-incubating/deploy-bare-metal/index.html b/content/docs/zh-CN/2.1.1-incubating/deploy-bare-metal/index.html
index 800de67..b637b8b 100644
--- a/content/docs/zh-CN/2.1.1-incubating/deploy-bare-metal/index.html
+++ b/content/docs/zh-CN/2.1.1-incubating/deploy-bare-metal/index.html
@@ -223,7 +223,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <pre><code class="hljs">
 Once you've applied the desired configuration in <span class="hljs-code">`conf/bookkeeper.conf`</span>, you can start up a bookie on each of your BookKeeper hosts. You can start up each bookie either in the background, using [<span class="hljs-string">nohup</span>](<span class="hljs-link">https://en.wikipedia.org/wiki/Nohup</span>), or in the foreground.
 
-To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">/docs/zh-CN/2.1.1-incubating/reference-cli-tools#pulsar-daemon</span>) CLI tool:
+To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-daemon</span>) CLI tool:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-daemon start bookie
@@ -231,18 +231,18 @@ $ bin/pulsar-daemon start bookie
 <p>To start the bookie in the foreground:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper bookie
 </code></pre>
-<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="/docs/zh-CN/2.1.1-incubating/reference-cli-tools#shell">BookKeeper shell</a> on it:</p>
+<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on it:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell bookiesanity
 </code></pre>
 <p>This will create an ephemeral BookKeeper ledger on the local bookie, write a few entries, read them back, and finally delete the ledger.</p>
-<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="/docs/zh-CN/2.1.1-incubating/reference-cli-tools#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
+<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell simpletest --ensemble &lt;num-bookies&gt; --writeQuorum &lt;num-bookies&gt; --ackQuorum &lt;num-bookies&gt; --numEntries &lt;num-entries&gt;
 </code></pre>
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
 <h3><a class="anchor" aria-hidden="true" id="configuring-brokers"></a><a href="#configuring-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.2 [...]
-<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="/docs/zh-CN/2.1.1-incubating/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="/docs/zh-CN/2.1.1-incubating/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no con [...]
+<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
@@ -250,7 +250,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="enabling-pulsar-functions-optional"></a><a href="#enabling-pulsar-functions-optional" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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>If you want to enable <a href="/docs/zh-CN/2.1.1-incubating/functions-overview">Pulsar Functions</a>, you can follow the instructions as below:</p>
+<p>If you want to enable <a href="functions-overview.md">Pulsar Functions</a>, you can follow the instructions as below:</p>
 <ol>
 <li><p>Edit <code>conf/broker.conf</code> to enable function worker, by setting <code>functionsWorkerEnabled</code> to <code>true</code>.</p>
 <pre><code class="hljs css language-conf"><span class="hljs-attr">functionsWorkerEnabled</span>=<span class="hljs-literal">true</span>
@@ -262,17 +262,17 @@ $ bin/pulsar-daemon start bookie
 </code></pre></li>
 </ol>
 <h3><a class="anchor" aria-hidden="true" id="starting-brokers"></a><a href="#starting-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. [...]
-<p>You can then provide any other configuration changes that you'd like in the <a href="/docs/zh-CN/2.1.1-incubating/reference-configuration#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
-<p>You can start a broker in the foreground using the <a href="/docs/zh-CN/2.1.1-incubating/reference-cli-tools#pulsar-broker"><code>pulsar broker</code></a> command:</p>
+<p>You can then provide any other configuration changes that you'd like in the <a href="reference-configuration.md#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
+<p>You can start a broker in the foreground using the <a href="reference-cli-tools.md#pulsar-broker"><code>pulsar broker</code></a> command:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar broker
 </code></pre>
-<p>You can start a broker in the background using the <a href="/docs/zh-CN/2.1.1-incubating/reference-cli-tools#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
+<p>You can start a broker in the background using the <a href="reference-cli-tools.md#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-daemon start broker
 </code></pre>
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-cluster" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S1 [...]
-<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="/docs/zh-CN/2.1.1-incubating/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/zh-CN/2.1.1-incubating/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
+<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="reference-cli-tools.md#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -300,7 +300,7 @@ $ bin/pulsar-daemon start bookie
   --namespace default \
   --name exclamation
 </code></pre>
-<p>Check if the function is running as expected by <a href="/docs/zh-CN/2.1.1-incubating/functions-deploying#triggering-pulsar-functions">triggering</a> the function.</p>
+<p>Check if the function is running as expected by <a href="functions-deploying.md#triggering-pulsar-functions">triggering</a> the function.</p>
 <pre><code class="hljs css language-bash">bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger --name exclamation --triggerValue <span class="hljs-string">"hello world"</span>
 </code></pre>
 <p>You will see output as below:</p>
diff --git a/content/docs/zh-CN/2.1.1-incubating/functions-quickstart.html b/content/docs/zh-CN/2.1.1-incubating/functions-quickstart.html
index 2f93adf..f0fda72 100644
--- a/content/docs/zh-CN/2.1.1-incubating/functions-quickstart.html
+++ b/content/docs/zh-CN/2.1.1-incubating/functions-quickstart.html
@@ -90,7 +90,7 @@ $ bin/pulsar standalone \
 </blockquote>
 <p>--inputs topic1,topic2</p>
 <pre><code class="hljs">
-We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">/docs/zh-CN/2.1.1-incubating/reference-cli-tools#pulsar-client</span>) tool to listen for messages on the output topic:
+We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-client</span>) tool to listen for messages on the output topic:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-client consume persistent://public/default/exclamation-output \
@@ -117,7 +117,7 @@ Hello world!
 <li>If our exclamation function <em>hadn't</em> been running, Pulsar would have durably stored the message data published to the input topic in <a href="https://bookkeeper.apache.org">Apache BookKeeper</a> until a consumer consumed and acknowledged the message</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="run-a-pulsar-function-in-cluster-mode"></a><a href="#run-a-pulsar-function-in-cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 [...]
-<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
+<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="reference-pulsar-admin.md#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
 <p>This command, for example, would deploy the same exclamation function we ran locally above <em>in our Pulsar cluster</em> (rather than outside it):</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --jar examples/api-examples.jar \
@@ -201,7 +201,7 @@ Hello world!
 <p>If you see <code>Deleted successfully</code> in the output, then you've succesfully run, updated, and shut down a Pulsar Function running in cluster mode. Congrats! Now, let's go even further and run a brand new function in the next section.</p>
 <h2><a class="anchor" aria-hidden="true" id="writing-and-running-a-new-function"></a><a href="#writing-and-running-a-new-function" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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 [...]
 <blockquote>
-<p>In order to write and run the <a href="/docs/zh-CN/2.1.1-incubating/functions-api#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
+<p>In order to write and run the <a href="functions-api.md#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
 <pre><code class="hljs css language-bash"></code></pre>
 </blockquote>
 <p>$ pip install pulsar-client</p>
diff --git a/content/docs/zh-CN/2.1.1-incubating/functions-quickstart/index.html b/content/docs/zh-CN/2.1.1-incubating/functions-quickstart/index.html
index 2f93adf..f0fda72 100644
--- a/content/docs/zh-CN/2.1.1-incubating/functions-quickstart/index.html
+++ b/content/docs/zh-CN/2.1.1-incubating/functions-quickstart/index.html
@@ -90,7 +90,7 @@ $ bin/pulsar standalone \
 </blockquote>
 <p>--inputs topic1,topic2</p>
 <pre><code class="hljs">
-We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">/docs/zh-CN/2.1.1-incubating/reference-cli-tools#pulsar-client</span>) tool to listen for messages on the output topic:
+We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-client</span>) tool to listen for messages on the output topic:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-client consume persistent://public/default/exclamation-output \
@@ -117,7 +117,7 @@ Hello world!
 <li>If our exclamation function <em>hadn't</em> been running, Pulsar would have durably stored the message data published to the input topic in <a href="https://bookkeeper.apache.org">Apache BookKeeper</a> until a consumer consumed and acknowledged the message</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="run-a-pulsar-function-in-cluster-mode"></a><a href="#run-a-pulsar-function-in-cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 [...]
-<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="/docs/zh-CN/2.1.1-incubating/pulsar-admin#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
+<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="reference-pulsar-admin.md#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
 <p>This command, for example, would deploy the same exclamation function we ran locally above <em>in our Pulsar cluster</em> (rather than outside it):</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --jar examples/api-examples.jar \
@@ -201,7 +201,7 @@ Hello world!
 <p>If you see <code>Deleted successfully</code> in the output, then you've succesfully run, updated, and shut down a Pulsar Function running in cluster mode. Congrats! Now, let's go even further and run a brand new function in the next section.</p>
 <h2><a class="anchor" aria-hidden="true" id="writing-and-running-a-new-function"></a><a href="#writing-and-running-a-new-function" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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 [...]
 <blockquote>
-<p>In order to write and run the <a href="/docs/zh-CN/2.1.1-incubating/functions-api#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
+<p>In order to write and run the <a href="functions-api.md#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
 <pre><code class="hljs css language-bash"></code></pre>
 </blockquote>
 <p>$ pip install pulsar-client</p>
diff --git a/content/docs/zh-CN/admin-api-overview.html b/content/docs/zh-CN/admin-api-overview.html
index 5750c17..a2522d7 100644
--- a/content/docs/zh-CN/admin-api-overview.html
+++ b/content/docs/zh-CN/admin-api-overview.html
@@ -70,7 +70,7 @@
 [`pulsar-admin&lt;0&gt;CLI工具,<a href="/api/admin">java管理API</a>,<a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
  API 中的每一种---需要一些特殊的设置,如果你在Pulsar <a href="reference-terminology.md#instance">实例</a>中开启了<a href="security-overview.md#authentication-providers">身份认证</a>。</p></p>
 <p><h3>pulsar-admin</h3></p>
-<p>如果启用了 <a href="security-overview.md#authentication-providers">身份验证</a>, 则需要提供一个授权配置以使用 <a href="reference-pulsar-admin.md"><code>pulsar-admin`](/docs/zh-CN/pulsar-admin) 工具。 默认情况下,`pulsar-admin`的配置文件在[`conf/client.conf`](/docs/zh-CN/reference-configuration#client)文件中。 以下是可用参数:
+<p>如果启用了 <a href="security-overview.md#authentication-providers">身份验证</a>, 则需要提供一个授权配置以使用 <a href="/docs/zh-CN/pulsar-admin"><code>pulsar-admin`](reference-pulsar-admin.md) 工具。 默认情况下,`pulsar-admin`的配置文件在[`conf/client.conf`](/docs/zh-CN/reference-configuration#client)文件中。 以下是可用参数:
 <table>
 <thead>
 <tr><th>Name</th><th>说明:</th><th>默认值</th></tr>
diff --git a/content/docs/zh-CN/admin-api-overview/index.html b/content/docs/zh-CN/admin-api-overview/index.html
index 5750c17..a2522d7 100644
--- a/content/docs/zh-CN/admin-api-overview/index.html
+++ b/content/docs/zh-CN/admin-api-overview/index.html
@@ -70,7 +70,7 @@
 [`pulsar-admin&lt;0&gt;CLI工具,<a href="/api/admin">java管理API</a>,<a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
  API 中的每一种---需要一些特殊的设置,如果你在Pulsar <a href="reference-terminology.md#instance">实例</a>中开启了<a href="security-overview.md#authentication-providers">身份认证</a>。</p></p>
 <p><h3>pulsar-admin</h3></p>
-<p>如果启用了 <a href="security-overview.md#authentication-providers">身份验证</a>, 则需要提供一个授权配置以使用 <a href="reference-pulsar-admin.md"><code>pulsar-admin`](/docs/zh-CN/pulsar-admin) 工具。 默认情况下,`pulsar-admin`的配置文件在[`conf/client.conf`](/docs/zh-CN/reference-configuration#client)文件中。 以下是可用参数:
+<p>如果启用了 <a href="security-overview.md#authentication-providers">身份验证</a>, 则需要提供一个授权配置以使用 <a href="/docs/zh-CN/pulsar-admin"><code>pulsar-admin`](reference-pulsar-admin.md) 工具。 默认情况下,`pulsar-admin`的配置文件在[`conf/client.conf`](/docs/zh-CN/reference-configuration#client)文件中。 以下是可用参数:
 <table>
 <thead>
 <tr><th>Name</th><th>说明:</th><th>默认值</th></tr>
diff --git a/content/docs/zh-CN/client-libraries-java.html b/content/docs/zh-CN/client-libraries-java.html
index 0ccae01..2c874ab 100644
--- a/content/docs/zh-CN/client-libraries-java.html
+++ b/content/docs/zh-CN/client-libraries-java.html
@@ -154,9 +154,9 @@ client.close();</p>
     .create();
 </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>当使用分区主题时,当你使用生产者发布消息时你可以指定路由模式。 有关使用 Java 客户端指定路由模式的更多内容, 请参见 <a href="/docs/zh-CN/cookbooks-partitioned">分区主题</a> cookbook。</p>
+<p>当使用分区主题时,当你使用生产者发布消息时你可以指定路由模式。 有关使用 Java 客户端指定路由模式的更多内容, 请参见 <a href="cookbooks-partitioned.md">分区主题</a> cookbook。</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>你可以使用Java客户端<a href="/docs/zh-CN/concepts-messaging#send-modes">异步</a>发布消息。 使用异步发送,生产者将消息放入阻塞队列并立即返回。 然后,客户端将在后台将消息发送给broker。 如果队列已满(最大值可配置),则在调用API时,生产者可能会被阻塞或立即失败,具体取决于传递给生产者的参数。</p>
+<p>你可以使用Java客户端<a href="concepts-messaging.md#send-modes">异步</a>发布消息。 使用异步发送,生产者将消息放入阻塞队列并立即返回。 然后,客户端将在后台将消息发送给broker。 如果队列已满(最大值可配置),则在调用API时,生产者可能会被阻塞或立即失败,具体取决于传递给生产者的参数。</p>
 <p>以下是异步发送操作的示例:</p>
 <pre><code class="hljs css language-java">producer.sendAsync(<span class="hljs-string">"my-async-message"</span>.getBytes()).thenAccept(msgId -&gt; {
     System.out.printf(<span class="hljs-string">"Message with ID %s successfully sent"</span>, msgId);
@@ -175,9 +175,9 @@ client.close();</p>
 <p>对于前一种情况,也可以使用<code>sendAsync()</code>来终止构建器链,并获取future返回值。</p>
 <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>在Pulsar中,消费者订阅topic主题并处理生产者发布到这些主题的消息。 你可以首先实例化一个<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
-对象并传递给他一个borker(<a href="#client-configuration">如上所示</a>) URL来实例化一个<a href="/docs/zh-CN/reference-terminology#consumer">消费者</a>。</p>
+对象并传递给他一个borker(<a href="#client-configuration">如上所示</a>) URL来实例化一个<a href="reference-terminology.md#consumer">消费者</a>。</p>
 <p>一旦实例化一个<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
- 对象,你可以指定一个<a href="/docs/zh-CN/reference-terminology#topic">主题</a>和一个<a href="/docs/zh-CN/concepts-messaging#subscription-modes">订阅</a>来创建一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
+ 对象,你可以指定一个<a href="reference-terminology.md#topic">主题</a>和一个<a href="concepts-messaging.md#subscription-modes">订阅</a>来创建一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
 消费者。</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
@@ -207,13 +207,13 @@ client.close();</p>
         .subscribe();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="异步接收"></a><a href="#异步接收" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
-<p><code>receive</code>方法将异步接受消息(消费者处理器将被阻塞,直到有消息到达)。 你也可以使用<a href="/docs/zh-CN/concepts-messaging#receive-modes">异步接收方法</a>,这将在一个新消息到达时立即返回一个<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>对象。</p>
+<p><code>receive</code>方法将异步接受消息(消费者处理器将被阻塞,直到有消息到达)。 你也可以使用<a href="concepts-messaging.md#receive-modes">异步接收方法</a>,这将在一个新消息到达时立即返回一个<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>对象。</p>
 <p>Here's an example:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>异步接收操作返回一个包装在<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>中的{@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message}消息对象。</p>
 <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>消费者除了订阅单个Pulsar主题外,你还可以使用<a href="/docs/zh-CN/concepts-messaging#multi-topic-subscriptions">多主题订阅</a>订阅多个主题。 若要使用多主题订阅, 可以提供一个topic正则表达式 (regex) 或 主题<code>List</code> 。 如果通过 regex 选择主题, 则所有主题都必须位于同一Pulsar命名空间中。</p>
+<p>消费者除了订阅单个Pulsar主题外,你还可以使用<a href="concepts-messaging.md#multi-topic-subscriptions">多主题订阅</a>订阅多个主题。 若要使用多主题订阅, 可以提供一个topic正则表达式 (regex) 或 主题<code>List</code> 。 如果通过 regex 选择主题, 则所有主题都必须位于同一Pulsar命名空间中。</p>
 <p>下面是一些示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
@@ -274,7 +274,7 @@ consumerBuilder
         });
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="reader-接口-readers"></a><a href="#reader-接口-readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
-<p>使用 <a href="/docs/zh-CN/concepts-clients#reader-interface">reader 接口</a>, Pulsar客户可以在主题中“手动定位”自己,从指定的消息开始向前读取所有消息。 Pulsar Java API可以让你通过指定一个主题,一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
+<p>使用 <a href="concepts-clients.md#reader-interface">reader 接口</a>, Pulsar客户可以在主题中“手动定位”自己,从指定的消息开始向前读取所有消息。 Pulsar Java API可以让你通过指定一个主题,一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
 和 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 /api/ReaderConfiguration}来创建<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 。</p>
@@ -295,12 +295,12 @@ Reader reader = pulsarClient.newReader()
 <p>在上面的示例中,实例化一个<code>Reader</code>对象对指定的主题和消息(ID); reader将遍历主题中<code>msgIdBytes</code>(取值方式取决于应用程序) 之后的消息。</p>
 <p>上面的示例代码展示了<code>Reader</code>对象指向特定的消息(ID),但你也可以使用<code>MessageId.earliest</code>来指向topic上最早可用的消息,使用<code>MessageId.latest</code>指向最新的消息。</p>
 <h2><a class="anchor" aria-hidden="true" id="schema"></a><a href="#schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="/docs/zh-CN/concepts-schema-registry">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 Here's an example:</p>
+<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="concepts-schema-registry.md">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 Here's an example:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
 </code></pre>
-<p>上面的生产者相当于 <code>Producer&lt;byte[]&gt;</code> (实际上, 你应该 <em>总是</em> 显式指定类型)。 如果你想让产生者使用不同类型的数据,你需要指定一个<strong>schema</strong>来通知Pulsar 在<a href="/docs/zh-CN/reference-terminology#topic">topic</a>上传输哪种类型的数据。</p>
+<p>上面的生产者相当于 <code>Producer&lt;byte[]&gt;</code> (实际上, 你应该 <em>总是</em> 显式指定类型)。 如果你想让产生者使用不同类型的数据,你需要指定一个<strong>schema</strong>来通知Pulsar 在<a href="reference-terminology.md#topic">topic</a>上传输哪种类型的数据。</p>
 <h3><a class="anchor" aria-hidden="true" id="schema实例"></a><a href="#schema实例" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <p>假设您有一个 <code>SensorReading</code> 类, 你想通过Pulsar主题进行传输:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SensorReading</span> </span>{
@@ -353,9 +353,9 @@ Producer&lt;MyPojo&gt; pojoProducer = client.newProducer(pojoSchema)
 </code></pre></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="authentication"></a><a href="#authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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目前支持两种身份验证方案:<a href="/docs/zh-CN/security-tls-authentication"> TLS </a>和<a href="/docs/zh-CN/security-athenz"> Athenz </a>。 Pulsar Java客户端中两者可以一起使用。</p>
+<p>Pulsar目前支持两种身份验证方案:<a href="security-tls-authentication.md"> TLS </a>和<a href="security-athenz.md"> Athenz </a>。 Pulsar Java客户端中两者可以一起使用。</p>
 <h3><a class="anchor" aria-hidden="true" id="tls-authentication"></a><a href="#tls-authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>要使用<a href="/docs/zh-CN/security-tls-authentication">TLS</a>,你需要使用<code>setUseTls</code>方法设置TLS为<code>true</code>,将您的Pulsar客户端指向TLS证书路径,并提供证书和密钥文件的路径。</p>
+<p>要使用<a href="security-tls-authentication.md">TLS</a>,你需要使用<code>setUseTls</code>方法设置TLS为<code>true</code>,将您的Pulsar客户端指向TLS证书路径,并提供证书和密钥文件的路径。</p>
 <p>这是一个示例配置:</p>
 <pre><code class="hljs css language-java">Map&lt;String, String&gt; authParams = <span class="hljs-keyword">new</span> HashMap&lt;&gt;();
 authParams.put(<span class="hljs-string">"tlsCertFile"</span>, <span class="hljs-string">"/path/to/client-cert.pem"</span>);
@@ -372,7 +372,7 @@ PulsarClient client = PulsarClient.builder()
         .build();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="athenz"></a><a href="#athenz" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 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>要使用<a href="/docs/zh-CN/security-athenz">Athenz</a>做为身份认证提供者,你需要<a href="#tls-authentication">use TLS</a>并且在hash提供如下四个参数的值:</p>
+<p>要使用<a href="security-athenz.md">Athenz</a>做为身份认证提供者,你需要<a href="#tls-authentication">use TLS</a>并且在hash提供如下四个参数的值:</p>
 <ul>
 <li><code>tenantDomain</code></li>
 <li><code>tenantService</code></li>
diff --git a/content/docs/zh-CN/client-libraries-java/index.html b/content/docs/zh-CN/client-libraries-java/index.html
index 0ccae01..2c874ab 100644
--- a/content/docs/zh-CN/client-libraries-java/index.html
+++ b/content/docs/zh-CN/client-libraries-java/index.html
@@ -154,9 +154,9 @@ client.close();</p>
     .create();
 </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>当使用分区主题时,当你使用生产者发布消息时你可以指定路由模式。 有关使用 Java 客户端指定路由模式的更多内容, 请参见 <a href="/docs/zh-CN/cookbooks-partitioned">分区主题</a> cookbook。</p>
+<p>当使用分区主题时,当你使用生产者发布消息时你可以指定路由模式。 有关使用 Java 客户端指定路由模式的更多内容, 请参见 <a href="cookbooks-partitioned.md">分区主题</a> cookbook。</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>你可以使用Java客户端<a href="/docs/zh-CN/concepts-messaging#send-modes">异步</a>发布消息。 使用异步发送,生产者将消息放入阻塞队列并立即返回。 然后,客户端将在后台将消息发送给broker。 如果队列已满(最大值可配置),则在调用API时,生产者可能会被阻塞或立即失败,具体取决于传递给生产者的参数。</p>
+<p>你可以使用Java客户端<a href="concepts-messaging.md#send-modes">异步</a>发布消息。 使用异步发送,生产者将消息放入阻塞队列并立即返回。 然后,客户端将在后台将消息发送给broker。 如果队列已满(最大值可配置),则在调用API时,生产者可能会被阻塞或立即失败,具体取决于传递给生产者的参数。</p>
 <p>以下是异步发送操作的示例:</p>
 <pre><code class="hljs css language-java">producer.sendAsync(<span class="hljs-string">"my-async-message"</span>.getBytes()).thenAccept(msgId -&gt; {
     System.out.printf(<span class="hljs-string">"Message with ID %s successfully sent"</span>, msgId);
@@ -175,9 +175,9 @@ client.close();</p>
 <p>对于前一种情况,也可以使用<code>sendAsync()</code>来终止构建器链,并获取future返回值。</p>
 <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>在Pulsar中,消费者订阅topic主题并处理生产者发布到这些主题的消息。 你可以首先实例化一个<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
-对象并传递给他一个borker(<a href="#client-configuration">如上所示</a>) URL来实例化一个<a href="/docs/zh-CN/reference-terminology#consumer">消费者</a>。</p>
+对象并传递给他一个borker(<a href="#client-configuration">如上所示</a>) URL来实例化一个<a href="reference-terminology.md#consumer">消费者</a>。</p>
 <p>一旦实例化一个<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
- 对象,你可以指定一个<a href="/docs/zh-CN/reference-terminology#topic">主题</a>和一个<a href="/docs/zh-CN/concepts-messaging#subscription-modes">订阅</a>来创建一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
+ 对象,你可以指定一个<a href="reference-terminology.md#topic">主题</a>和一个<a href="concepts-messaging.md#subscription-modes">订阅</a>来创建一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
 消费者。</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
@@ -207,13 +207,13 @@ client.close();</p>
         .subscribe();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="异步接收"></a><a href="#异步接收" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
-<p><code>receive</code>方法将异步接受消息(消费者处理器将被阻塞,直到有消息到达)。 你也可以使用<a href="/docs/zh-CN/concepts-messaging#receive-modes">异步接收方法</a>,这将在一个新消息到达时立即返回一个<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>对象。</p>
+<p><code>receive</code>方法将异步接受消息(消费者处理器将被阻塞,直到有消息到达)。 你也可以使用<a href="concepts-messaging.md#receive-modes">异步接收方法</a>,这将在一个新消息到达时立即返回一个<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>对象。</p>
 <p>Here's an example:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>异步接收操作返回一个包装在<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>中的{@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message}消息对象。</p>
 <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>消费者除了订阅单个Pulsar主题外,你还可以使用<a href="/docs/zh-CN/concepts-messaging#multi-topic-subscriptions">多主题订阅</a>订阅多个主题。 若要使用多主题订阅, 可以提供一个topic正则表达式 (regex) 或 主题<code>List</code> 。 如果通过 regex 选择主题, 则所有主题都必须位于同一Pulsar命名空间中。</p>
+<p>消费者除了订阅单个Pulsar主题外,你还可以使用<a href="concepts-messaging.md#multi-topic-subscriptions">多主题订阅</a>订阅多个主题。 若要使用多主题订阅, 可以提供一个topic正则表达式 (regex) 或 主题<code>List</code> 。 如果通过 regex 选择主题, 则所有主题都必须位于同一Pulsar命名空间中。</p>
 <p>下面是一些示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
@@ -274,7 +274,7 @@ consumerBuilder
         });
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="reader-接口-readers"></a><a href="#reader-接口-readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
-<p>使用 <a href="/docs/zh-CN/concepts-clients#reader-interface">reader 接口</a>, Pulsar客户可以在主题中“手动定位”自己,从指定的消息开始向前读取所有消息。 Pulsar Java API可以让你通过指定一个主题,一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
+<p>使用 <a href="concepts-clients.md#reader-interface">reader 接口</a>, Pulsar客户可以在主题中“手动定位”自己,从指定的消息开始向前读取所有消息。 Pulsar Java API可以让你通过指定一个主题,一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
 和 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 /api/ReaderConfiguration}来创建<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 。</p>
@@ -295,12 +295,12 @@ Reader reader = pulsarClient.newReader()
 <p>在上面的示例中,实例化一个<code>Reader</code>对象对指定的主题和消息(ID); reader将遍历主题中<code>msgIdBytes</code>(取值方式取决于应用程序) 之后的消息。</p>
 <p>上面的示例代码展示了<code>Reader</code>对象指向特定的消息(ID),但你也可以使用<code>MessageId.earliest</code>来指向topic上最早可用的消息,使用<code>MessageId.latest</code>指向最新的消息。</p>
 <h2><a class="anchor" aria-hidden="true" id="schema"></a><a href="#schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="/docs/zh-CN/concepts-schema-registry">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 Here's an example:</p>
+<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="concepts-schema-registry.md">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 Here's an example:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
 </code></pre>
-<p>上面的生产者相当于 <code>Producer&lt;byte[]&gt;</code> (实际上, 你应该 <em>总是</em> 显式指定类型)。 如果你想让产生者使用不同类型的数据,你需要指定一个<strong>schema</strong>来通知Pulsar 在<a href="/docs/zh-CN/reference-terminology#topic">topic</a>上传输哪种类型的数据。</p>
+<p>上面的生产者相当于 <code>Producer&lt;byte[]&gt;</code> (实际上, 你应该 <em>总是</em> 显式指定类型)。 如果你想让产生者使用不同类型的数据,你需要指定一个<strong>schema</strong>来通知Pulsar 在<a href="reference-terminology.md#topic">topic</a>上传输哪种类型的数据。</p>
 <h3><a class="anchor" aria-hidden="true" id="schema实例"></a><a href="#schema实例" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <p>假设您有一个 <code>SensorReading</code> 类, 你想通过Pulsar主题进行传输:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SensorReading</span> </span>{
@@ -353,9 +353,9 @@ Producer&lt;MyPojo&gt; pojoProducer = client.newProducer(pojoSchema)
 </code></pre></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="authentication"></a><a href="#authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 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目前支持两种身份验证方案:<a href="/docs/zh-CN/security-tls-authentication"> TLS </a>和<a href="/docs/zh-CN/security-athenz"> Athenz </a>。 Pulsar Java客户端中两者可以一起使用。</p>
+<p>Pulsar目前支持两种身份验证方案:<a href="security-tls-authentication.md"> TLS </a>和<a href="security-athenz.md"> Athenz </a>。 Pulsar Java客户端中两者可以一起使用。</p>
 <h3><a class="anchor" aria-hidden="true" id="tls-authentication"></a><a href="#tls-authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>要使用<a href="/docs/zh-CN/security-tls-authentication">TLS</a>,你需要使用<code>setUseTls</code>方法设置TLS为<code>true</code>,将您的Pulsar客户端指向TLS证书路径,并提供证书和密钥文件的路径。</p>
+<p>要使用<a href="security-tls-authentication.md">TLS</a>,你需要使用<code>setUseTls</code>方法设置TLS为<code>true</code>,将您的Pulsar客户端指向TLS证书路径,并提供证书和密钥文件的路径。</p>
 <p>这是一个示例配置:</p>
 <pre><code class="hljs css language-java">Map&lt;String, String&gt; authParams = <span class="hljs-keyword">new</span> HashMap&lt;&gt;();
 authParams.put(<span class="hljs-string">"tlsCertFile"</span>, <span class="hljs-string">"/path/to/client-cert.pem"</span>);
@@ -372,7 +372,7 @@ PulsarClient client = PulsarClient.builder()
         .build();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="athenz"></a><a href="#athenz" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 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>要使用<a href="/docs/zh-CN/security-athenz">Athenz</a>做为身份认证提供者,你需要<a href="#tls-authentication">use TLS</a>并且在hash提供如下四个参数的值:</p>
+<p>要使用<a href="security-athenz.md">Athenz</a>做为身份认证提供者,你需要<a href="#tls-authentication">use TLS</a>并且在hash提供如下四个参数的值:</p>
 <ul>
 <li><code>tenantDomain</code></li>
 <li><code>tenantService</code></li>
diff --git a/content/docs/zh-CN/concepts-messaging.html b/content/docs/zh-CN/concepts-messaging.html
index 6112e7c..8aa6750 100644
--- a/content/docs/zh-CN/concepts-messaging.html
+++ b/content/docs/zh-CN/concepts-messaging.html
@@ -118,7 +118,7 @@
 <pre><code class="hljs">
 | Topic名称组成                       | 说明:                                                                                                                                                                                                                                                                                                                   |
 |:------------------------------- |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| <span class="hljs-code">`persistent`</span> / <span class="hljs-code">`non-persistent`</span> | 定义了topic类型。 Pulsar支持两种不同topic:[<span class="hljs-string">持久</span>](<span class="hljs-link">/docs/zh-CN/concepts-architecture-overview#persistent-storage</span>)和 [<span class="hljs-string">非持久</span>](<span class="hljs-link">#non-persistent-topics</span>)(默认是持久类型,如果你没有指明类型,topic将会是持久类型)。 持久topic的所有消息都会[<span class="hljs-string"></span>](<span class="hljs-link">/docs/zh-CN/concepts-architect [...]
+| <span class="hljs-code">`persistent`</span> / <span class="hljs-code">`non-persistent`</span> | 定义了topic类型。 Pulsar支持两种不同topic:[<span class="hljs-string">持久</span>](<span class="hljs-link">concepts-architecture-overview.md#persistent-storage</span>)和 [<span class="hljs-string">非持久</span>](<span class="hljs-link">#non-persistent-topics</span>)(默认是持久类型,如果你没有指明类型,topic将会是持久类型)。 持久topic的所有消息都会[<span class="hljs-string"></span>](<span class="hljs-link">concepts-architecture-overview.md#persi [...]
 | <span class="hljs-code">`tenant`</span>                        | 实例中topic的租户。tenant是Pulsar多租户的基本要素,可以被跨集群的传播。                                                                                                                                                                                                                                                                          |
 | <span class="hljs-code">`namespace`</span>                     | Topic的管理单元,充当关联topic组的管理机制。 大多数的topic配置在[<span class="hljs-string">namespace</span>](<span class="hljs-link">#namespaces</span>)层面生效。 每个tenant可以有多个namespace。                                                                                                                                                                                                                         |
 | <span class="hljs-code">`topic`</span>                         | 名称的最后组成部分,topic的命名很自由,没有什么特殊的含义。                                                                                                                                                                                                                                                                                      |
@@ -129,7 +129,7 @@
 
 <span class="hljs-section">## 命名空间</span>
 
-命名空间是租户内部逻辑上的命名术语。 一个租户可以通过[<span class="hljs-string">admin API</span>](<span class="hljs-link">/docs/zh-CN/admin-api-namespaces#create</span>)创建多个命名空间。 例如,一个对接多个应用的租户,可以为每个应用创建不同的namespace。 Namespace使得程序可以以层级的方式创建和管理topic Topic<span class="hljs-code">`my-tenant/app1`</span> ,它的namespace是<span class="hljs-code">`app1`</span>这个应用,对应的租户是 <span class="hljs-code">`my-tenant`</span>。 你可以在namespace下创建任意数量的[<span class="hljs-string">topic</span>](<span class="hljs-link">#topics</span>)。
+命名空间是租户内部逻辑上的命名术语。 一个租户可以通过[<span class="hljs-string">admin API</span>](<span class="hljs-link">admin-api-namespaces.md#create</span>)创建多个命名空间。 例如,一个对接多个应用的租户,可以为每个应用创建不同的namespace。 Namespace使得程序可以以层级的方式创建和管理topic Topic<span class="hljs-code">`my-tenant/app1`</span> ,它的namespace是<span class="hljs-code">`app1`</span>这个应用,对应的租户是 <span class="hljs-code">`my-tenant`</span>。 你可以在namespace下创建任意数量的[<span class="hljs-string">topic</span>](<span class="hljs-link">#topics</span>)。
 
 <span class="hljs-section">## 订阅模型</span>
 
@@ -204,7 +204,7 @@ Consumer someTopicsConsumer = pulsarClient.subscribe(someTopicsInNamespace, "sub
 </span></code></pre>
 <p>代码例子,请见:</p>
 <ul>
-<li><a href="/docs/zh-CN/client-libraries-java#multi-topic-subscriptions">Java</a></li>
+<li><a href="client-libraries-java.md#multi-topic-subscriptions">Java</a></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="partitioned-topics"></a><a href="#partitioned-topics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
 <p>通常一个topic仅被一个broker服务,这限制了topic的最大吞吐量。 <em>分区topic</em>是特殊的topic类型,他可以被多个broker处理,这让topic有更高的吞吐量。</p>
@@ -215,7 +215,7 @@ Consumer someTopicsConsumer = pulsarClient.subscribe(someTopicsInNamespace, "sub
 <p>这个topic的消息被广播给两个consumer。 <a href="#routing-modes">路由模式</a>决定哪个broker处理哪个partition,<a href="#subscription-modes">订阅模式</a>决定哪条消息送到哪个consumer。</p>
 <p>大多数境况下,路由和订阅模式可以分开制定。 通常来讲,吞吐能力的要求,决定了 分区/路由 的方式。订阅模式则应该由应用的语义来做决定。</p>
 <p>分区topic和普通topic,对于订阅模式如何工作,没有任何不同。分区只是决定了从生产者生产消息到消费者处理及确认消息过程中发生的事情。</p>
-<p>分区topic需要通过<a href="/docs/zh-CN/admin-api-overview">admin API</a>指定创建。创建的时候可以指明分区的数量。</p>
+<p>分区topic需要通过<a href="admin-api-overview.md">admin API</a>指定创建。创建的时候可以指明分区的数量。</p>
 <h3><a class="anchor" aria-hidden="true" id="路由模式"></a><a href="#路由模式" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <p>当发布消息到分区topic,你必须要指定<em>路由模式</em>。路由模式决定了每条消息被发布到的分区---其实是内部主题。</p>
 <p>下面是三种默认可用的路由模式:</p>
@@ -229,40 +229,40 @@ Consumer someTopicsConsumer = pulsarClient.subscribe(someTopicsInNamespace, "sub
 <tr><td style="text-align:left">Round robin分发</td><td style="text-align:left">如果没有key,所有的消息通过round-robin方式被路由到不同的分区,以达到最大的生产能力</td><td style="text-align:left">无</td></tr>
 </tbody>
 </table>
-<p>这些默认的模式之外,你还可以创建客制化的路由模式,如果你在使用<a href="/docs/zh-CN/client-libraries-java">Java client</a>,可以通过实现MessageRouter接口来做客制化。</p>
+<p>这些默认的模式之外,你还可以创建客制化的路由模式,如果你在使用<a href="client-libraries-java.md">Java client</a>,可以通过实现MessageRouter接口来做客制化。</p>
 <h2><a class="anchor" aria-hidden="true" id="非持久topic"></a><a href="#非持久topic" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
-<p>默认的,Pulsar保存<em>所有</em>没有确认的消息到多个<a href="/docs/zh-CN/concepts-architecture-overview#persistent-storage">BookKeeper</a>的bookies中(存储节点)。持久topic的消息数据可以在broker重启或者订阅者出问题的情况下存活下来。 Data for messages on persistent topics can thus survive broker restarts and subscriber failover.</p>
+<p>默认的,Pulsar保存<em>所有</em>没有确认的消息到多个<a href="concepts-architecture-overview.md#persistent-storage">BookKeeper</a>的bookies中(存储节点)。持久topic的消息数据可以在broker重启或者订阅者出问题的情况下存活下来。 Data for messages on persistent topics can thus survive broker restarts and subscriber failover.</p>
 <p>Pulsar also, however, supports <strong>non-persistent topics</strong>, which are topics on which messages are <em>never</em> persisted to disk and live only in memory. Pulsar也提供了非持久topic。非持久topic的消息不会被保存在硬盘上,只存活于内存中。当使用非持久topic分发时,杀掉Pulsar的broker或者关闭订阅者,此topic( non-persistent))上所有的瞬时消息都会丢失,意味着客户端可能会遇到消息缺失。</p>
 <p>Non-persistent topics have names of this form (note the <code>non-persistent</code> in the name):</p>
 <pre><code class="hljs css language-http">non-persistent://tenant/namespace/topic
 </code></pre>
 <blockquote>
-<p>如何使用非持久topic的更多信息,请参考 <a href="/docs/zh-CN/cookbooks-non-persistent">Non-persistent messaging cookbook</a></p>
+<p>如何使用非持久topic的更多信息,请参考 <a href="cookbooks-non-persistent.md">Non-persistent messaging cookbook</a></p>
 </blockquote>
-<p>非持久topic中,broker会立即发布消息给所有连接的订阅者,而不会在<a href="/docs/zh-CN/concepts-architecture-overview#persistent-storage">BookKeeper</a>中<em>存储</em>。 如果有一个订阅者断开连接,broker将无法重发这些瞬时消息,订阅者将永远也不能收到这些消息了。 去掉持久化存储的步骤,在某些情况下,使得非持久topic的消息比持久topic稍微变快。但是同时,Pulsar的一些核心优势也丧失掉了。</p>
+<p>非持久topic中,broker会立即发布消息给所有连接的订阅者,而不会在<a href="concepts-architecture-overview.md#persistent-storage">BookKeeper</a>中<em>存储</em>。 如果有一个订阅者断开连接,broker将无法重发这些瞬时消息,订阅者将永远也不能收到这些消息了。 去掉持久化存储的步骤,在某些情况下,使得非持久topic的消息比持久topic稍微变快。但是同时,Pulsar的一些核心优势也丧失掉了。</p>
 <blockquote>
 <p>非持久topic,消息数据仅存活在内存。 如果broker挂掉或者因其他情况不能从内存取到,你的消息数据就可能丢失。 只有在真的<em>确信</em>你的使用场景符合,并且你可以忍受时,才可去使用非持久topic。</p>
 </blockquote>
-<p>默认非持久topic在broker上是开启的。 你可以通过broker的<a href="/docs/zh-CN/reference-configuration#broker-enableNonPersistentTopics">配置</a>关闭。 你可以通过使用<a href="referencereference--pulsar-admin/#topics-1"><code>pulsar-admin-topics</code></a>接口管理非持久topic。</p>
+<p>默认非持久topic在broker上是开启的。 你可以通过broker的<a href="reference-configuration.md#broker-enableNonPersistentTopics">配置</a>关闭。 你可以通过使用<a href="referencereference--pulsar-admin/#topics-1"><code>pulsar-admin-topics</code></a>接口管理非持久topic。</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>非持久消息通常比持久消息更快,因为broker无须持久化消息,当消息被分发给所有订阅者时,会立即发送ack给producer。 非持久topic让producer有更低的发布延迟。</p>
 <h3><a class="anchor" aria-hidden="true" id="客户端api"></a><a href="#客户端api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 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>Producer和consumer以连接持久topic同样的方式连接到非持久topic。重要的区别是,topic的名称必须以<code>non-persistent</code>开头。 三种订阅模式--<a href="#exclusive">exclusive</a>,<a href="#shared">shared</a>,<a href="#failover">failover</a>对于非持久topic都是支持的。</p>
-<p>下面是一个非持久topic的<a href="/docs/zh-CN/client-libraries-java#consumers">java consumer</a>例子:</p>
+<p>下面是一个非持久topic的<a href="client-libraries-java.md#consumers">java consumer</a>例子:</p>
 <pre><code class="hljs css language-java">PulsarClient client = PulsarClient.create(<span class="hljs-string">"pulsar://localhost:6650"</span>);
 String npTopic = <span class="hljs-string">"non-persistent://public/default/my-topic"</span>;
 String subscriptionName = <span class="hljs-string">"my-subscription-name"</span>;
 
 Consumer consumer = client.subscribe(npTopic, subscriptionName);
 </code></pre>
-<p>这里还有一个非持久topic的<a href="/docs/zh-CN/client-libraries-java#producer">java producer</a>例子:</p>
+<p>这里还有一个非持久topic的<a href="client-libraries-java.md#producer">java producer</a>例子:</p>
 <pre><code class="hljs css language-java">Producer producer = client.createProducer(npTopic);
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="message-retention-and-expiry"></a><a href="#message-retention-and-expiry" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
 <p>Pulsar broker默认如下:</p>
 <ul>
 <li>立即删除<em>所有</em>已经被cunsumer确认过的的消息</li>
-<li>以消息backlog的形式,<a href="/docs/zh-CN/concepts-architecture-overview#persistent-storage">持久保存</a>所有的未被确认消息</li>
+<li>以消息backlog的形式,<a href="concepts-architecture-overview.md#persistent-storage">持久保存</a>所有的未被确认消息</li>
 </ul>
 <p>Pulsar有两个特性,让你可以覆盖上面的默认行为。</p>
 <ul>
@@ -270,23 +270,23 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <li>消息<strong>过期</strong>让你可以给未被确认的消息设置存活时长(TTL)</li>
 </ul>
 <blockquote>
-<p>所有消息存留和过期在<a href="#namespaces">namespace</a>层面管理。具体操作请查看 <a href="/docs/zh-CN/cookbooks-retention-expiry">Message retention and expiry</a></p>
+<p>所有消息存留和过期在<a href="#namespaces">namespace</a>层面管理。具体操作请查看 <a href="cookbooks-retention-expiry.md">Message retention and expiry</a></p>
 </blockquote>
 <p>下图说明了这两种概念:</p>
 <p><img src="assets/retention-expiry.png" alt="Message retention and expiry"></p>
 <p>图中上面的是消息存留,<span style="color: #89b557;">存留规则</span>会被用于某namespace下所有的topic,指明哪些消息会被持久存储,即使已经被确认过。 没有被留存规则覆盖的消息将会被<span style="color: #bb3b3e;">删除</span>。 没有留存规则的话,<em>所有</em>被<span style="color: #19967d;">确认</span>的消息都会被删除。</p>
 <p>图中下面的是消息过期,有些消息即使还<span style="color: #337db6;">没有被确认</span>,也被<span style="color: #bb3b3e;">删除</span>掉了。因为根据设置在<span style="color: #e39441;">namespace上的TTL</span>,他们已经过期了。(例如,TTL为5分钟,过了十分钟消息还没被确认)</p>
 <h2><a class="anchor" aria-hidden="true" id="message-deduplication"></a><a href="#message-deduplication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
-<p>当消息被Pulsar<a href="/docs/zh-CN/concepts-architecture-overview#persistent-storage">持久化</a>多于一次的时候,消息就会<strong>重复</strong>。 消息<strong><em>去重</em></strong>是Pulsar可选的特性,阻止不必要的消息重复,每条消息仅处理一次,<em>即使消息被接收多次</em></p>
+<p>当消息被Pulsar<a href="concepts-architecture-overview.md#persistent-storage">持久化</a>多于一次的时候,消息就会<strong>重复</strong>。 消息<strong><em>去重</em></strong>是Pulsar可选的特性,阻止不必要的消息重复,每条消息仅处理一次,<em>即使消息被接收多次</em></p>
 <p>下图展示了开启和关闭消息去重的场景:</p>
 <p><img src="assets/message-deduplication.png" alt="Pulsar消息去重"></p>
-<p>最上面的场景中,消息去重被关闭。 Producer发布消息1到一个topic,消息到达broker后,被<a href="/docs/zh-CN/concepts-architecture-overview#persistent-storage">持久化</a>到BookKeeper。 然后producer又发送了消息1(可能因为某些重试逻辑),然后消息被接收后又持久化在BookKeeper,这意味着消息重复发生了。</p>
+<p>最上面的场景中,消息去重被关闭。 Producer发布消息1到一个topic,消息到达broker后,被<a href="concepts-architecture-overview.md#persistent-storage">持久化</a>到BookKeeper。 然后producer又发送了消息1(可能因为某些重试逻辑),然后消息被接收后又持久化在BookKeeper,这意味着消息重复发生了。</p>
 <p>在第二个场景中,producer发送了消息1,消息被broker接收然后持久化,和第一个场景是一样的。 当producer再次发送消息时,broker知道已经收到个消息1,所以不会再持久化消息1.</p>
 <blockquote>
-<p>消息去重在命名空间层面处理。更多介绍请参考 <a href="/docs/zh-CN/cookbooks-deduplication">message deduplication cookbook</a>.</p>
+<p>消息去重在命名空间层面处理。更多介绍请参考 <a href="cookbooks-deduplication.md">message deduplication cookbook</a>.</p>
 </blockquote>
 <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>消息去重的另外一种方法是确保每条消息<em>仅生产一次</em>。 这种方法通常被叫做<strong>生产者幂等</strong>。 这种方式的缺点是,把消息去重的工作推给了应用去做。 在Pulsar中,去重被<a href="/docs/zh-CN/reference-terminology#broker">broker</a>处理的,这意味着你不需要修改你的客户端代码。 你只需要做一些管理上的变化(参考<a href="/docs/zh-CN/cookbooks-deduplication">Managing message deduplication</a> )</p>
+<p>消息去重的另外一种方法是确保每条消息<em>仅生产一次</em>。 这种方法通常被叫做<strong>生产者幂等</strong>。 这种方式的缺点是,把消息去重的工作推给了应用去做。 在Pulsar中,去重被<a href="reference-terminology.md#broker">broker</a>处理的,这意味着你不需要修改你的客户端代码。 你只需要做一些管理上的变化(参考<a href="cookbooks-deduplication.md">Managing message deduplication</a> )</p>
 <h3><a class="anchor" aria-hidden="true" id="去重和实际一次语义"></a><a href="#去重和实际一次语义" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
 <p>消息去重,使Pulsar成为与流处理引擎(SPE)或者其他寻求<a href="https://streaml.io/blog/exactly-once">实际一次</a>处理语义的系统连接的完美消息系统。 消息系统若不提供自动消息去重,则需要SPE或者其他系统保证去重。这意味着严格的消息顺序来自于让程序承担额外的去重工作。 使用Pulsar,严格的顺序保证不会带来任何应用层面的代价。</p>
 <blockquote>
diff --git a/content/docs/zh-CN/concepts-messaging/index.html b/content/docs/zh-CN/concepts-messaging/index.html
index 6112e7c..8aa6750 100644
--- a/content/docs/zh-CN/concepts-messaging/index.html
+++ b/content/docs/zh-CN/concepts-messaging/index.html
@@ -118,7 +118,7 @@
 <pre><code class="hljs">
 | Topic名称组成                       | 说明:                                                                                                                                                                                                                                                                                                                   |
 |:------------------------------- |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| <span class="hljs-code">`persistent`</span> / <span class="hljs-code">`non-persistent`</span> | 定义了topic类型。 Pulsar支持两种不同topic:[<span class="hljs-string">持久</span>](<span class="hljs-link">/docs/zh-CN/concepts-architecture-overview#persistent-storage</span>)和 [<span class="hljs-string">非持久</span>](<span class="hljs-link">#non-persistent-topics</span>)(默认是持久类型,如果你没有指明类型,topic将会是持久类型)。 持久topic的所有消息都会[<span class="hljs-string"></span>](<span class="hljs-link">/docs/zh-CN/concepts-architect [...]
+| <span class="hljs-code">`persistent`</span> / <span class="hljs-code">`non-persistent`</span> | 定义了topic类型。 Pulsar支持两种不同topic:[<span class="hljs-string">持久</span>](<span class="hljs-link">concepts-architecture-overview.md#persistent-storage</span>)和 [<span class="hljs-string">非持久</span>](<span class="hljs-link">#non-persistent-topics</span>)(默认是持久类型,如果你没有指明类型,topic将会是持久类型)。 持久topic的所有消息都会[<span class="hljs-string"></span>](<span class="hljs-link">concepts-architecture-overview.md#persi [...]
 | <span class="hljs-code">`tenant`</span>                        | 实例中topic的租户。tenant是Pulsar多租户的基本要素,可以被跨集群的传播。                                                                                                                                                                                                                                                                          |
 | <span class="hljs-code">`namespace`</span>                     | Topic的管理单元,充当关联topic组的管理机制。 大多数的topic配置在[<span class="hljs-string">namespace</span>](<span class="hljs-link">#namespaces</span>)层面生效。 每个tenant可以有多个namespace。                                                                                                                                                                                                                         |
 | <span class="hljs-code">`topic`</span>                         | 名称的最后组成部分,topic的命名很自由,没有什么特殊的含义。                                                                                                                                                                                                                                                                                      |
@@ -129,7 +129,7 @@
 
 <span class="hljs-section">## 命名空间</span>
 
-命名空间是租户内部逻辑上的命名术语。 一个租户可以通过[<span class="hljs-string">admin API</span>](<span class="hljs-link">/docs/zh-CN/admin-api-namespaces#create</span>)创建多个命名空间。 例如,一个对接多个应用的租户,可以为每个应用创建不同的namespace。 Namespace使得程序可以以层级的方式创建和管理topic Topic<span class="hljs-code">`my-tenant/app1`</span> ,它的namespace是<span class="hljs-code">`app1`</span>这个应用,对应的租户是 <span class="hljs-code">`my-tenant`</span>。 你可以在namespace下创建任意数量的[<span class="hljs-string">topic</span>](<span class="hljs-link">#topics</span>)。
+命名空间是租户内部逻辑上的命名术语。 一个租户可以通过[<span class="hljs-string">admin API</span>](<span class="hljs-link">admin-api-namespaces.md#create</span>)创建多个命名空间。 例如,一个对接多个应用的租户,可以为每个应用创建不同的namespace。 Namespace使得程序可以以层级的方式创建和管理topic Topic<span class="hljs-code">`my-tenant/app1`</span> ,它的namespace是<span class="hljs-code">`app1`</span>这个应用,对应的租户是 <span class="hljs-code">`my-tenant`</span>。 你可以在namespace下创建任意数量的[<span class="hljs-string">topic</span>](<span class="hljs-link">#topics</span>)。
 
 <span class="hljs-section">## 订阅模型</span>
 
@@ -204,7 +204,7 @@ Consumer someTopicsConsumer = pulsarClient.subscribe(someTopicsInNamespace, "sub
 </span></code></pre>
 <p>代码例子,请见:</p>
 <ul>
-<li><a href="/docs/zh-CN/client-libraries-java#multi-topic-subscriptions">Java</a></li>
+<li><a href="client-libraries-java.md#multi-topic-subscriptions">Java</a></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="partitioned-topics"></a><a href="#partitioned-topics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
 <p>通常一个topic仅被一个broker服务,这限制了topic的最大吞吐量。 <em>分区topic</em>是特殊的topic类型,他可以被多个broker处理,这让topic有更高的吞吐量。</p>
@@ -215,7 +215,7 @@ Consumer someTopicsConsumer = pulsarClient.subscribe(someTopicsInNamespace, "sub
 <p>这个topic的消息被广播给两个consumer。 <a href="#routing-modes">路由模式</a>决定哪个broker处理哪个partition,<a href="#subscription-modes">订阅模式</a>决定哪条消息送到哪个consumer。</p>
 <p>大多数境况下,路由和订阅模式可以分开制定。 通常来讲,吞吐能力的要求,决定了 分区/路由 的方式。订阅模式则应该由应用的语义来做决定。</p>
 <p>分区topic和普通topic,对于订阅模式如何工作,没有任何不同。分区只是决定了从生产者生产消息到消费者处理及确认消息过程中发生的事情。</p>
-<p>分区topic需要通过<a href="/docs/zh-CN/admin-api-overview">admin API</a>指定创建。创建的时候可以指明分区的数量。</p>
+<p>分区topic需要通过<a href="admin-api-overview.md">admin API</a>指定创建。创建的时候可以指明分区的数量。</p>
 <h3><a class="anchor" aria-hidden="true" id="路由模式"></a><a href="#路由模式" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <p>当发布消息到分区topic,你必须要指定<em>路由模式</em>。路由模式决定了每条消息被发布到的分区---其实是内部主题。</p>
 <p>下面是三种默认可用的路由模式:</p>
@@ -229,40 +229,40 @@ Consumer someTopicsConsumer = pulsarClient.subscribe(someTopicsInNamespace, "sub
 <tr><td style="text-align:left">Round robin分发</td><td style="text-align:left">如果没有key,所有的消息通过round-robin方式被路由到不同的分区,以达到最大的生产能力</td><td style="text-align:left">无</td></tr>
 </tbody>
 </table>
-<p>这些默认的模式之外,你还可以创建客制化的路由模式,如果你在使用<a href="/docs/zh-CN/client-libraries-java">Java client</a>,可以通过实现MessageRouter接口来做客制化。</p>
+<p>这些默认的模式之外,你还可以创建客制化的路由模式,如果你在使用<a href="client-libraries-java.md">Java client</a>,可以通过实现MessageRouter接口来做客制化。</p>
 <h2><a class="anchor" aria-hidden="true" id="非持久topic"></a><a href="#非持久topic" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
-<p>默认的,Pulsar保存<em>所有</em>没有确认的消息到多个<a href="/docs/zh-CN/concepts-architecture-overview#persistent-storage">BookKeeper</a>的bookies中(存储节点)。持久topic的消息数据可以在broker重启或者订阅者出问题的情况下存活下来。 Data for messages on persistent topics can thus survive broker restarts and subscriber failover.</p>
+<p>默认的,Pulsar保存<em>所有</em>没有确认的消息到多个<a href="concepts-architecture-overview.md#persistent-storage">BookKeeper</a>的bookies中(存储节点)。持久topic的消息数据可以在broker重启或者订阅者出问题的情况下存活下来。 Data for messages on persistent topics can thus survive broker restarts and subscriber failover.</p>
 <p>Pulsar also, however, supports <strong>non-persistent topics</strong>, which are topics on which messages are <em>never</em> persisted to disk and live only in memory. Pulsar也提供了非持久topic。非持久topic的消息不会被保存在硬盘上,只存活于内存中。当使用非持久topic分发时,杀掉Pulsar的broker或者关闭订阅者,此topic( non-persistent))上所有的瞬时消息都会丢失,意味着客户端可能会遇到消息缺失。</p>
 <p>Non-persistent topics have names of this form (note the <code>non-persistent</code> in the name):</p>
 <pre><code class="hljs css language-http">non-persistent://tenant/namespace/topic
 </code></pre>
 <blockquote>
-<p>如何使用非持久topic的更多信息,请参考 <a href="/docs/zh-CN/cookbooks-non-persistent">Non-persistent messaging cookbook</a></p>
+<p>如何使用非持久topic的更多信息,请参考 <a href="cookbooks-non-persistent.md">Non-persistent messaging cookbook</a></p>
 </blockquote>
-<p>非持久topic中,broker会立即发布消息给所有连接的订阅者,而不会在<a href="/docs/zh-CN/concepts-architecture-overview#persistent-storage">BookKeeper</a>中<em>存储</em>。 如果有一个订阅者断开连接,broker将无法重发这些瞬时消息,订阅者将永远也不能收到这些消息了。 去掉持久化存储的步骤,在某些情况下,使得非持久topic的消息比持久topic稍微变快。但是同时,Pulsar的一些核心优势也丧失掉了。</p>
+<p>非持久topic中,broker会立即发布消息给所有连接的订阅者,而不会在<a href="concepts-architecture-overview.md#persistent-storage">BookKeeper</a>中<em>存储</em>。 如果有一个订阅者断开连接,broker将无法重发这些瞬时消息,订阅者将永远也不能收到这些消息了。 去掉持久化存储的步骤,在某些情况下,使得非持久topic的消息比持久topic稍微变快。但是同时,Pulsar的一些核心优势也丧失掉了。</p>
 <blockquote>
 <p>非持久topic,消息数据仅存活在内存。 如果broker挂掉或者因其他情况不能从内存取到,你的消息数据就可能丢失。 只有在真的<em>确信</em>你的使用场景符合,并且你可以忍受时,才可去使用非持久topic。</p>
 </blockquote>
-<p>默认非持久topic在broker上是开启的。 你可以通过broker的<a href="/docs/zh-CN/reference-configuration#broker-enableNonPersistentTopics">配置</a>关闭。 你可以通过使用<a href="referencereference--pulsar-admin/#topics-1"><code>pulsar-admin-topics</code></a>接口管理非持久topic。</p>
+<p>默认非持久topic在broker上是开启的。 你可以通过broker的<a href="reference-configuration.md#broker-enableNonPersistentTopics">配置</a>关闭。 你可以通过使用<a href="referencereference--pulsar-admin/#topics-1"><code>pulsar-admin-topics</code></a>接口管理非持久topic。</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>非持久消息通常比持久消息更快,因为broker无须持久化消息,当消息被分发给所有订阅者时,会立即发送ack给producer。 非持久topic让producer有更低的发布延迟。</p>
 <h3><a class="anchor" aria-hidden="true" id="客户端api"></a><a href="#客户端api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 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>Producer和consumer以连接持久topic同样的方式连接到非持久topic。重要的区别是,topic的名称必须以<code>non-persistent</code>开头。 三种订阅模式--<a href="#exclusive">exclusive</a>,<a href="#shared">shared</a>,<a href="#failover">failover</a>对于非持久topic都是支持的。</p>
-<p>下面是一个非持久topic的<a href="/docs/zh-CN/client-libraries-java#consumers">java consumer</a>例子:</p>
+<p>下面是一个非持久topic的<a href="client-libraries-java.md#consumers">java consumer</a>例子:</p>
 <pre><code class="hljs css language-java">PulsarClient client = PulsarClient.create(<span class="hljs-string">"pulsar://localhost:6650"</span>);
 String npTopic = <span class="hljs-string">"non-persistent://public/default/my-topic"</span>;
 String subscriptionName = <span class="hljs-string">"my-subscription-name"</span>;
 
 Consumer consumer = client.subscribe(npTopic, subscriptionName);
 </code></pre>
-<p>这里还有一个非持久topic的<a href="/docs/zh-CN/client-libraries-java#producer">java producer</a>例子:</p>
+<p>这里还有一个非持久topic的<a href="client-libraries-java.md#producer">java producer</a>例子:</p>
 <pre><code class="hljs css language-java">Producer producer = client.createProducer(npTopic);
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="message-retention-and-expiry"></a><a href="#message-retention-and-expiry" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
 <p>Pulsar broker默认如下:</p>
 <ul>
 <li>立即删除<em>所有</em>已经被cunsumer确认过的的消息</li>
-<li>以消息backlog的形式,<a href="/docs/zh-CN/concepts-architecture-overview#persistent-storage">持久保存</a>所有的未被确认消息</li>
+<li>以消息backlog的形式,<a href="concepts-architecture-overview.md#persistent-storage">持久保存</a>所有的未被确认消息</li>
 </ul>
 <p>Pulsar有两个特性,让你可以覆盖上面的默认行为。</p>
 <ul>
@@ -270,23 +270,23 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <li>消息<strong>过期</strong>让你可以给未被确认的消息设置存活时长(TTL)</li>
 </ul>
 <blockquote>
-<p>所有消息存留和过期在<a href="#namespaces">namespace</a>层面管理。具体操作请查看 <a href="/docs/zh-CN/cookbooks-retention-expiry">Message retention and expiry</a></p>
+<p>所有消息存留和过期在<a href="#namespaces">namespace</a>层面管理。具体操作请查看 <a href="cookbooks-retention-expiry.md">Message retention and expiry</a></p>
 </blockquote>
 <p>下图说明了这两种概念:</p>
 <p><img src="assets/retention-expiry.png" alt="Message retention and expiry"></p>
 <p>图中上面的是消息存留,<span style="color: #89b557;">存留规则</span>会被用于某namespace下所有的topic,指明哪些消息会被持久存储,即使已经被确认过。 没有被留存规则覆盖的消息将会被<span style="color: #bb3b3e;">删除</span>。 没有留存规则的话,<em>所有</em>被<span style="color: #19967d;">确认</span>的消息都会被删除。</p>
 <p>图中下面的是消息过期,有些消息即使还<span style="color: #337db6;">没有被确认</span>,也被<span style="color: #bb3b3e;">删除</span>掉了。因为根据设置在<span style="color: #e39441;">namespace上的TTL</span>,他们已经过期了。(例如,TTL为5分钟,过了十分钟消息还没被确认)</p>
 <h2><a class="anchor" aria-hidden="true" id="message-deduplication"></a><a href="#message-deduplication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
-<p>当消息被Pulsar<a href="/docs/zh-CN/concepts-architecture-overview#persistent-storage">持久化</a>多于一次的时候,消息就会<strong>重复</strong>。 消息<strong><em>去重</em></strong>是Pulsar可选的特性,阻止不必要的消息重复,每条消息仅处理一次,<em>即使消息被接收多次</em></p>
+<p>当消息被Pulsar<a href="concepts-architecture-overview.md#persistent-storage">持久化</a>多于一次的时候,消息就会<strong>重复</strong>。 消息<strong><em>去重</em></strong>是Pulsar可选的特性,阻止不必要的消息重复,每条消息仅处理一次,<em>即使消息被接收多次</em></p>
 <p>下图展示了开启和关闭消息去重的场景:</p>
 <p><img src="assets/message-deduplication.png" alt="Pulsar消息去重"></p>
-<p>最上面的场景中,消息去重被关闭。 Producer发布消息1到一个topic,消息到达broker后,被<a href="/docs/zh-CN/concepts-architecture-overview#persistent-storage">持久化</a>到BookKeeper。 然后producer又发送了消息1(可能因为某些重试逻辑),然后消息被接收后又持久化在BookKeeper,这意味着消息重复发生了。</p>
+<p>最上面的场景中,消息去重被关闭。 Producer发布消息1到一个topic,消息到达broker后,被<a href="concepts-architecture-overview.md#persistent-storage">持久化</a>到BookKeeper。 然后producer又发送了消息1(可能因为某些重试逻辑),然后消息被接收后又持久化在BookKeeper,这意味着消息重复发生了。</p>
 <p>在第二个场景中,producer发送了消息1,消息被broker接收然后持久化,和第一个场景是一样的。 当producer再次发送消息时,broker知道已经收到个消息1,所以不会再持久化消息1.</p>
 <blockquote>
-<p>消息去重在命名空间层面处理。更多介绍请参考 <a href="/docs/zh-CN/cookbooks-deduplication">message deduplication cookbook</a>.</p>
+<p>消息去重在命名空间层面处理。更多介绍请参考 <a href="cookbooks-deduplication.md">message deduplication cookbook</a>.</p>
 </blockquote>
 <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>消息去重的另外一种方法是确保每条消息<em>仅生产一次</em>。 这种方法通常被叫做<strong>生产者幂等</strong>。 这种方式的缺点是,把消息去重的工作推给了应用去做。 在Pulsar中,去重被<a href="/docs/zh-CN/reference-terminology#broker">broker</a>处理的,这意味着你不需要修改你的客户端代码。 你只需要做一些管理上的变化(参考<a href="/docs/zh-CN/cookbooks-deduplication">Managing message deduplication</a> )</p>
+<p>消息去重的另外一种方法是确保每条消息<em>仅生产一次</em>。 这种方法通常被叫做<strong>生产者幂等</strong>。 这种方式的缺点是,把消息去重的工作推给了应用去做。 在Pulsar中,去重被<a href="reference-terminology.md#broker">broker</a>处理的,这意味着你不需要修改你的客户端代码。 你只需要做一些管理上的变化(参考<a href="cookbooks-deduplication.md">Managing message deduplication</a> )</p>
 <h3><a class="anchor" aria-hidden="true" id="去重和实际一次语义"></a><a href="#去重和实际一次语义" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
 <p>消息去重,使Pulsar成为与流处理引擎(SPE)或者其他寻求<a href="https://streaml.io/blog/exactly-once">实际一次</a>处理语义的系统连接的完美消息系统。 消息系统若不提供自动消息去重,则需要SPE或者其他系统保证去重。这意味着严格的消息顺序来自于让程序承担额外的去重工作。 使用Pulsar,严格的顺序保证不会带来任何应用层面的代价。</p>
 <blockquote>
diff --git a/content/docs/zh-CN/deploy-aws.html b/content/docs/zh-CN/deploy-aws.html
index cc5ad7f..abf1cbe 100644
--- a/content/docs/zh-CN/deploy-aws.html
+++ b/content/docs/zh-CN/deploy-aws.html
@@ -138,9 +138,9 @@ id_rsa               id_rsa.pub
 <li>9 total <a href="https://aws.amazon.com/ec2">Elastic Compute Cloud</a> (EC2) instances running the <a href="https://access.redhat.com/articles/3135091">ami-9fa343e7</a> Amazon Machine Image (AMI), which runs <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/7.4_release_notes/index">Red Hat Enterprise Linux (RHEL) 7.4</a>. By default, that includes:
 <ul>
 <li>3 small VMs for ZooKeeper (<a href="https://www.ec2instances.info/?selected=t2.small">t2.small</a> instances)</li>
-<li>3 larger VMs for BookKeeper <a href="/docs/zh-CN/reference-terminology#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
-<li>2 larger VMs for Pulsar <a href="/docs/zh-CN/reference-terminology#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
-<li>1 larger VMs for Pulsar <a href="/docs/zh-CN/reference-terminology#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>3 larger VMs for BookKeeper <a href="reference-terminology.md#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
+<li>2 larger VMs for Pulsar <a href="reference-terminology.md#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>1 larger VMs for Pulsar <a href="reference-terminology.md#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
 </ul></li>
 <li>An EC2 <a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html">security group</a></li>
 <li>A <a href="https://aws.amazon.com/vpc/">virtual private cloud</a> (VPC) for security</li>
diff --git a/content/docs/zh-CN/deploy-aws/index.html b/content/docs/zh-CN/deploy-aws/index.html
index cc5ad7f..abf1cbe 100644
--- a/content/docs/zh-CN/deploy-aws/index.html
+++ b/content/docs/zh-CN/deploy-aws/index.html
@@ -138,9 +138,9 @@ id_rsa               id_rsa.pub
 <li>9 total <a href="https://aws.amazon.com/ec2">Elastic Compute Cloud</a> (EC2) instances running the <a href="https://access.redhat.com/articles/3135091">ami-9fa343e7</a> Amazon Machine Image (AMI), which runs <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/7.4_release_notes/index">Red Hat Enterprise Linux (RHEL) 7.4</a>. By default, that includes:
 <ul>
 <li>3 small VMs for ZooKeeper (<a href="https://www.ec2instances.info/?selected=t2.small">t2.small</a> instances)</li>
-<li>3 larger VMs for BookKeeper <a href="/docs/zh-CN/reference-terminology#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
-<li>2 larger VMs for Pulsar <a href="/docs/zh-CN/reference-terminology#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
-<li>1 larger VMs for Pulsar <a href="/docs/zh-CN/reference-terminology#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>3 larger VMs for BookKeeper <a href="reference-terminology.md#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
+<li>2 larger VMs for Pulsar <a href="reference-terminology.md#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>1 larger VMs for Pulsar <a href="reference-terminology.md#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
 </ul></li>
 <li>An EC2 <a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html">security group</a></li>
 <li>A <a href="https://aws.amazon.com/vpc/">virtual private cloud</a> (VPC) for security</li>
diff --git a/content/docs/zh-CN/deploy-bare-metal.html b/content/docs/zh-CN/deploy-bare-metal.html
index ab9542d..24dac95 100644
--- a/content/docs/zh-CN/deploy-bare-metal.html
+++ b/content/docs/zh-CN/deploy-bare-metal.html
@@ -223,7 +223,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <pre><code class="hljs">
 Once you've applied the desired configuration in <span class="hljs-code">`conf/bookkeeper.conf`</span>, you can start up a bookie on each of your BookKeeper hosts. You can start up each bookie either in the background, using [<span class="hljs-string">nohup</span>](<span class="hljs-link">https://en.wikipedia.org/wiki/Nohup</span>), or in the foreground.
 
-To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">/docs/zh-CN/reference-cli-tools#pulsar-daemon</span>) CLI tool:
+To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-daemon</span>) CLI tool:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-daemon start bookie
@@ -231,18 +231,18 @@ $ bin/pulsar-daemon start bookie
 <p>To start the bookie in the foreground:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper bookie
 </code></pre>
-<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="/docs/zh-CN/reference-cli-tools#shell">BookKeeper shell</a> on it:</p>
+<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on it:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell bookiesanity
 </code></pre>
 <p>This will create an ephemeral BookKeeper ledger on the local bookie, write a few entries, read them back, and finally delete the ledger.</p>
-<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="/docs/zh-CN/reference-cli-tools#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
+<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell simpletest --ensemble &lt;num-bookies&gt; --writeQuorum &lt;num-bookies&gt; --ackQuorum &lt;num-bookies&gt; --numEntries &lt;num-entries&gt;
 </code></pre>
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
 <h3><a class="anchor" aria-hidden="true" id="configuring-brokers"></a><a href="#configuring-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.2 [...]
-<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="/docs/zh-CN/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="/docs/zh-CN/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code> [...]
+<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
@@ -250,7 +250,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="enabling-pulsar-functions-optional"></a><a href="#enabling-pulsar-functions-optional" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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>If you want to enable <a href="/docs/zh-CN/functions-overview">Pulsar Functions</a>, you can follow the instructions as below:</p>
+<p>If you want to enable <a href="functions-overview.md">Pulsar Functions</a>, you can follow the instructions as below:</p>
 <ol>
 <li><p>Edit <code>conf/broker.conf</code> to enable function worker, by setting <code>functionsWorkerEnabled</code> to <code>true</code>.</p>
 <pre><code class="hljs css language-conf"><span class="hljs-attr">functionsWorkerEnabled</span>=<span class="hljs-literal">true</span>
@@ -262,17 +262,17 @@ $ bin/pulsar-daemon start bookie
 </code></pre></li>
 </ol>
 <h3><a class="anchor" aria-hidden="true" id="starting-brokers"></a><a href="#starting-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. [...]
-<p>You can then provide any other configuration changes that you'd like in the <a href="/docs/zh-CN/reference-configuration#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
-<p>You can start a broker in the foreground using the <a href="/docs/zh-CN/reference-cli-tools#pulsar-broker"><code>pulsar broker</code></a> command:</p>
+<p>You can then provide any other configuration changes that you'd like in the <a href="reference-configuration.md#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
+<p>You can start a broker in the foreground using the <a href="reference-cli-tools.md#pulsar-broker"><code>pulsar broker</code></a> command:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar broker
 </code></pre>
-<p>You can start a broker in the background using the <a href="/docs/zh-CN/reference-cli-tools#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
+<p>You can start a broker in the background using the <a href="reference-cli-tools.md#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-daemon start broker
 </code></pre>
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-cluster" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S1 [...]
-<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="/docs/zh-CN/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/zh-CN/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
+<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="reference-cli-tools.md#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -300,7 +300,7 @@ $ bin/pulsar-daemon start bookie
   --namespace default \
   --name exclamation
 </code></pre>
-<p>Check if the function is running as expected by <a href="/docs/zh-CN/functions-deploying#triggering-pulsar-functions">triggering</a> the function.</p>
+<p>Check if the function is running as expected by <a href="functions-deploying.md#triggering-pulsar-functions">triggering</a> the function.</p>
 <pre><code class="hljs css language-bash">bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger --name exclamation --trigger-value <span class="hljs-string">"hello world"</span>
 </code></pre>
 <p>You will see output as below:</p>
diff --git a/content/docs/zh-CN/deploy-bare-metal/index.html b/content/docs/zh-CN/deploy-bare-metal/index.html
index ab9542d..24dac95 100644
--- a/content/docs/zh-CN/deploy-bare-metal/index.html
+++ b/content/docs/zh-CN/deploy-bare-metal/index.html
@@ -223,7 +223,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <pre><code class="hljs">
 Once you've applied the desired configuration in <span class="hljs-code">`conf/bookkeeper.conf`</span>, you can start up a bookie on each of your BookKeeper hosts. You can start up each bookie either in the background, using [<span class="hljs-string">nohup</span>](<span class="hljs-link">https://en.wikipedia.org/wiki/Nohup</span>), or in the foreground.
 
-To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">/docs/zh-CN/reference-cli-tools#pulsar-daemon</span>) CLI tool:
+To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-daemon</span>) CLI tool:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-daemon start bookie
@@ -231,18 +231,18 @@ $ bin/pulsar-daemon start bookie
 <p>To start the bookie in the foreground:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper bookie
 </code></pre>
-<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="/docs/zh-CN/reference-cli-tools#shell">BookKeeper shell</a> on it:</p>
+<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on it:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell bookiesanity
 </code></pre>
 <p>This will create an ephemeral BookKeeper ledger on the local bookie, write a few entries, read them back, and finally delete the ledger.</p>
-<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="/docs/zh-CN/reference-cli-tools#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
+<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell simpletest --ensemble &lt;num-bookies&gt; --writeQuorum &lt;num-bookies&gt; --ackQuorum &lt;num-bookies&gt; --numEntries &lt;num-entries&gt;
 </code></pre>
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
 <h3><a class="anchor" aria-hidden="true" id="configuring-brokers"></a><a href="#configuring-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.2 [...]
-<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="/docs/zh-CN/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="/docs/zh-CN/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code> [...]
+<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
@@ -250,7 +250,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="enabling-pulsar-functions-optional"></a><a href="#enabling-pulsar-functions-optional" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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>If you want to enable <a href="/docs/zh-CN/functions-overview">Pulsar Functions</a>, you can follow the instructions as below:</p>
+<p>If you want to enable <a href="functions-overview.md">Pulsar Functions</a>, you can follow the instructions as below:</p>
 <ol>
 <li><p>Edit <code>conf/broker.conf</code> to enable function worker, by setting <code>functionsWorkerEnabled</code> to <code>true</code>.</p>
 <pre><code class="hljs css language-conf"><span class="hljs-attr">functionsWorkerEnabled</span>=<span class="hljs-literal">true</span>
@@ -262,17 +262,17 @@ $ bin/pulsar-daemon start bookie
 </code></pre></li>
 </ol>
 <h3><a class="anchor" aria-hidden="true" id="starting-brokers"></a><a href="#starting-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. [...]
-<p>You can then provide any other configuration changes that you'd like in the <a href="/docs/zh-CN/reference-configuration#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
-<p>You can start a broker in the foreground using the <a href="/docs/zh-CN/reference-cli-tools#pulsar-broker"><code>pulsar broker</code></a> command:</p>
+<p>You can then provide any other configuration changes that you'd like in the <a href="reference-configuration.md#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
+<p>You can start a broker in the foreground using the <a href="reference-cli-tools.md#pulsar-broker"><code>pulsar broker</code></a> command:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar broker
 </code></pre>
-<p>You can start a broker in the background using the <a href="/docs/zh-CN/reference-cli-tools#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
+<p>You can start a broker in the background using the <a href="reference-cli-tools.md#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-daemon start broker
 </code></pre>
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-cluster" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S1 [...]
-<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="/docs/zh-CN/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/zh-CN/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
+<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="reference-cli-tools.md#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -300,7 +300,7 @@ $ bin/pulsar-daemon start bookie
   --namespace default \
   --name exclamation
 </code></pre>
-<p>Check if the function is running as expected by <a href="/docs/zh-CN/functions-deploying#triggering-pulsar-functions">triggering</a> the function.</p>
+<p>Check if the function is running as expected by <a href="functions-deploying.md#triggering-pulsar-functions">triggering</a> the function.</p>
 <pre><code class="hljs css language-bash">bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger --name exclamation --trigger-value <span class="hljs-string">"hello world"</span>
 </code></pre>
 <p>You will see output as below:</p>
diff --git a/content/docs/zh-CN/functions-quickstart.html b/content/docs/zh-CN/functions-quickstart.html
index c026a1e..e9837e1 100644
--- a/content/docs/zh-CN/functions-quickstart.html
+++ b/content/docs/zh-CN/functions-quickstart.html
@@ -90,7 +90,7 @@ $ bin/pulsar standalone \
 </blockquote>
 <p>--inputs topic1,topic2</p>
 <pre><code class="hljs">
-We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">/docs/zh-CN/reference-cli-tools#pulsar-client</span>) tool to listen for messages on the output topic:
+We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-client</span>) tool to listen for messages on the output topic:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-client consume persistent://public/default/exclamation-output \
@@ -117,7 +117,7 @@ Hello world!
 <li>If our exclamation function <em>hadn't</em> been running, Pulsar would have durably stored the message data published to the input topic in <a href="https://bookkeeper.apache.org">Apache BookKeeper</a> until a consumer consumed and acknowledged the message</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="run-a-pulsar-function-in-cluster-mode"></a><a href="#run-a-pulsar-function-in-cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 [...]
-<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="/docs/zh-CN/pulsar-admin#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
+<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="reference-pulsar-admin.md#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
 <p>This command, for example, would deploy the same exclamation function we ran locally above <em>in our Pulsar cluster</em> (rather than outside it):</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --jar examples/api-examples.jar \
@@ -201,7 +201,7 @@ Hello world!
 <p>If you see <code>Deleted successfully</code> in the output, then you've succesfully run, updated, and shut down a Pulsar Function running in cluster mode. Congrats! Now, let's go even further and run a brand new function in the next section.</p>
 <h2><a class="anchor" aria-hidden="true" id="writing-and-running-a-new-function"></a><a href="#writing-and-running-a-new-function" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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 [...]
 <blockquote>
-<p>In order to write and run the <a href="/docs/zh-CN/functions-api#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
+<p>In order to write and run the <a href="functions-api.md#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
 <pre><code class="hljs css language-bash"></code></pre>
 </blockquote>
 <p>$ pip install pulsar-client</p>
diff --git a/content/docs/zh-CN/functions-quickstart/index.html b/content/docs/zh-CN/functions-quickstart/index.html
index c026a1e..e9837e1 100644
--- a/content/docs/zh-CN/functions-quickstart/index.html
+++ b/content/docs/zh-CN/functions-quickstart/index.html
@@ -90,7 +90,7 @@ $ bin/pulsar standalone \
 </blockquote>
 <p>--inputs topic1,topic2</p>
 <pre><code class="hljs">
-We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">/docs/zh-CN/reference-cli-tools#pulsar-client</span>) tool to listen for messages on the output topic:
+We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-client</span>) tool to listen for messages on the output topic:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-client consume persistent://public/default/exclamation-output \
@@ -117,7 +117,7 @@ Hello world!
 <li>If our exclamation function <em>hadn't</em> been running, Pulsar would have durably stored the message data published to the input topic in <a href="https://bookkeeper.apache.org">Apache BookKeeper</a> until a consumer consumed and acknowledged the message</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="run-a-pulsar-function-in-cluster-mode"></a><a href="#run-a-pulsar-function-in-cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 [...]
-<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="/docs/zh-CN/pulsar-admin#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
+<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="reference-pulsar-admin.md#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
 <p>This command, for example, would deploy the same exclamation function we ran locally above <em>in our Pulsar cluster</em> (rather than outside it):</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --jar examples/api-examples.jar \
@@ -201,7 +201,7 @@ Hello world!
 <p>If you see <code>Deleted successfully</code> in the output, then you've succesfully run, updated, and shut down a Pulsar Function running in cluster mode. Congrats! Now, let's go even further and run a brand new function in the next section.</p>
 <h2><a class="anchor" aria-hidden="true" id="writing-and-running-a-new-function"></a><a href="#writing-and-running-a-new-function" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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 [...]
 <blockquote>
-<p>In order to write and run the <a href="/docs/zh-CN/functions-api#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
+<p>In order to write and run the <a href="functions-api.md#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
 <pre><code class="hljs css language-bash"></code></pre>
 </blockquote>
 <p>$ pip install pulsar-client</p>
diff --git a/content/docs/zh-CN/next/admin-api-overview.html b/content/docs/zh-CN/next/admin-api-overview.html
index 0fd53be..1072055 100644
--- a/content/docs/zh-CN/next/admin-api-overview.html
+++ b/content/docs/zh-CN/next/admin-api-overview.html
@@ -70,7 +70,7 @@
 [`pulsar-admin&lt;0&gt;CLI工具,<a href="/api/admin">java管理API</a>,<a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
  API 中的每一种---需要一些特殊的设置,如果你在Pulsar <a href="reference-terminology.md#instance">实例</a>中开启了<a href="security-overview.md#authentication-providers">身份认证</a>。</p></p>
 <p><h3>pulsar-admin</h3></p>
-<p>如果启用了 <a href="security-overview.md#authentication-providers">身份验证</a>, 则需要提供一个授权配置以使用 <a href="reference-pulsar-admin.md"><code>pulsar-admin`](/docs/zh-CN/next/pulsar-admin) 工具。 默认情况下,`pulsar-admin`的配置文件在[`conf/client.conf`](/docs/zh-CN/next/reference-configuration#client)文件中。 以下是可用参数:
+<p>如果启用了 <a href="security-overview.md#authentication-providers">身份验证</a>, 则需要提供一个授权配置以使用 <a href="/docs/zh-CN/next/pulsar-admin"><code>pulsar-admin`](reference-pulsar-admin.md) 工具。 默认情况下,`pulsar-admin`的配置文件在[`conf/client.conf`](/docs/zh-CN/next/reference-configuration#client)文件中。 以下是可用参数:
 <table>
 <thead>
 <tr><th>Name</th><th>说明:</th><th>默认值</th></tr>
diff --git a/content/docs/zh-CN/next/admin-api-overview/index.html b/content/docs/zh-CN/next/admin-api-overview/index.html
index 0fd53be..1072055 100644
--- a/content/docs/zh-CN/next/admin-api-overview/index.html
+++ b/content/docs/zh-CN/next/admin-api-overview/index.html
@@ -70,7 +70,7 @@
 [`pulsar-admin&lt;0&gt;CLI工具,<a href="/api/admin">java管理API</a>,<a href="https://pulsar.incubator.apache.org/en/admin-rest-api#/">REST</a>
  API 中的每一种---需要一些特殊的设置,如果你在Pulsar <a href="reference-terminology.md#instance">实例</a>中开启了<a href="security-overview.md#authentication-providers">身份认证</a>。</p></p>
 <p><h3>pulsar-admin</h3></p>
-<p>如果启用了 <a href="security-overview.md#authentication-providers">身份验证</a>, 则需要提供一个授权配置以使用 <a href="reference-pulsar-admin.md"><code>pulsar-admin`](/docs/zh-CN/next/pulsar-admin) 工具。 默认情况下,`pulsar-admin`的配置文件在[`conf/client.conf`](/docs/zh-CN/next/reference-configuration#client)文件中。 以下是可用参数:
+<p>如果启用了 <a href="security-overview.md#authentication-providers">身份验证</a>, 则需要提供一个授权配置以使用 <a href="/docs/zh-CN/next/pulsar-admin"><code>pulsar-admin`](reference-pulsar-admin.md) 工具。 默认情况下,`pulsar-admin`的配置文件在[`conf/client.conf`](/docs/zh-CN/next/reference-configuration#client)文件中。 以下是可用参数:
 <table>
 <thead>
 <tr><th>Name</th><th>说明:</th><th>默认值</th></tr>
diff --git a/content/docs/zh-CN/next/client-libraries-java.html b/content/docs/zh-CN/next/client-libraries-java.html
index 7f73884..09f731d 100644
--- a/content/docs/zh-CN/next/client-libraries-java.html
+++ b/content/docs/zh-CN/next/client-libraries-java.html
@@ -153,9 +153,9 @@ client.close();</p>
     .create();
 </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>当使用分区主题时,当你使用生产者发布消息时你可以指定路由模式。 有关使用 Java 客户端指定路由模式的更多内容, 请参见 <a href="/docs/zh-CN/next/cookbooks-partitioned">分区主题</a> cookbook。</p>
+<p>当使用分区主题时,当你使用生产者发布消息时你可以指定路由模式。 有关使用 Java 客户端指定路由模式的更多内容, 请参见 <a href="cookbooks-partitioned.md">分区主题</a> cookbook。</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>你可以使用Java客户端<a href="/docs/zh-CN/next/concepts-messaging#send-modes">异步</a>发布消息。 使用异步发送,生产者将消息放入阻塞队列并立即返回。 然后,客户端将在后台将消息发送给broker。 如果队列已满(最大值可配置),则在调用API时,生产者可能会被阻塞或立即失败,具体取决于传递给生产者的参数。</p>
+<p>你可以使用Java客户端<a href="concepts-messaging.md#send-modes">异步</a>发布消息。 使用异步发送,生产者将消息放入阻塞队列并立即返回。 然后,客户端将在后台将消息发送给broker。 如果队列已满(最大值可配置),则在调用API时,生产者可能会被阻塞或立即失败,具体取决于传递给生产者的参数。</p>
 <p>以下是异步发送操作的示例:</p>
 <pre><code class="hljs css language-java">producer.sendAsync(<span class="hljs-string">"my-async-message"</span>.getBytes()).thenAccept(msgId -&gt; {
     System.out.printf(<span class="hljs-string">"Message with ID %s successfully sent"</span>, msgId);
@@ -174,9 +174,9 @@ client.close();</p>
 <p>对于前一种情况,也可以使用<code>sendAsync()</code>来终止构建器链,并获取future返回值。</p>
 <h2><a class="anchor" aria-hidden="true" id="消费者"></a><a href="#消费者" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.2 [...]
 <p>在Pulsar中,消费者订阅topic主题并处理生产者发布到这些主题的消息。 你可以首先实例化一个<a href="https://pulsar.incubator.apache.org/api/client/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>
+对象并传递给他一个borker(<a href="#client-configuration">如上所示</a>) URL来实例化一个<a href="reference-terminology.md#consumer">消费者</a>。</p>
 <p>一旦实例化一个<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
- 对象,你可以指定一个<a href="/docs/zh-CN/next/reference-terminology#topic">主题</a>和一个<a href="/docs/zh-CN/next/concepts-messaging#subscription-modes">订阅</a>来创建一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
+ 对象,你可以指定一个<a href="reference-terminology.md#topic">主题</a>和一个<a href="concepts-messaging.md#subscription-modes">订阅</a>来创建一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
 消费者。</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
@@ -206,13 +206,13 @@ client.close();</p>
         .subscribe();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="异步接收"></a><a href="#异步接收" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
-<p><code>receive</code>方法将异步接受消息(消费者处理器将被阻塞,直到有消息到达)。 你也可以使用<a href="/docs/zh-CN/next/concepts-messaging#receive-modes">异步接收方法</a>,这将在一个新消息到达时立即返回一个<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>对象。</p>
+<p><code>receive</code>方法将异步接受消息(消费者处理器将被阻塞,直到有消息到达)。 你也可以使用<a href="concepts-messaging.md#receive-modes">异步接收方法</a>,这将在一个新消息到达时立即返回一个<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>对象。</p>
 <p>Here's an example:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>异步接收操作返回一个包装在<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>中的{@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message}消息对象。</p>
 <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>消费者除了订阅单个Pulsar主题外,你还可以使用<a href="/docs/zh-CN/next/concepts-messaging#multi-topic-subscriptions">多主题订阅</a>订阅多个主题。 若要使用多主题订阅, 可以提供一个topic正则表达式 (regex) 或 主题<code>List</code> 。 如果通过 regex 选择主题, 则所有主题都必须位于同一Pulsar命名空间中。</p>
+<p>消费者除了订阅单个Pulsar主题外,你还可以使用<a href="concepts-messaging.md#multi-topic-subscriptions">多主题订阅</a>订阅多个主题。 若要使用多主题订阅, 可以提供一个topic正则表达式 (regex) 或 主题<code>List</code> 。 如果通过 regex 选择主题, 则所有主题都必须位于同一Pulsar命名空间中。</p>
 <p>下面是一些示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
@@ -273,7 +273,7 @@ consumerBuilder
         });
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="reader-接口-readers"></a><a href="#reader-接口-readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
-<p>使用 <a href="/docs/zh-CN/next/concepts-clients#reader-interface">reader 接口</a>, Pulsar客户可以在主题中“手动定位”自己,从指定的消息开始向前读取所有消息。 Pulsar Java API可以让你通过指定一个主题,一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
+<p>使用 <a href="concepts-clients.md#reader-interface">reader 接口</a>, Pulsar客户可以在主题中“手动定位”自己,从指定的消息开始向前读取所有消息。 Pulsar Java API可以让你通过指定一个主题,一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
 和 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 /api/ReaderConfiguration}来创建<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 。</p>
@@ -294,12 +294,12 @@ Reader reader = pulsarClient.newReader()
 <p>在上面的示例中,实例化一个<code>Reader</code>对象对指定的主题和消息(ID); reader将遍历主题中<code>msgIdBytes</code>(取值方式取决于应用程序) 之后的消息。</p>
 <p>上面的示例代码展示了<code>Reader</code>对象指向特定的消息(ID),但你也可以使用<code>MessageId.earliest</code>来指向topic上最早可用的消息,使用<code>MessageId.latest</code>指向最新的消息。</p>
 <h2><a class="anchor" aria-hidden="true" id="schema"></a><a href="#schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="/docs/zh-CN/next/concepts-schema-registry">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 下面是一个示例:</p>
+<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="concepts-schema-registry.md">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 下面是一个示例:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
 </code></pre>
-<p>上面的生产者相当于 <code>Producer&lt;byte[]&gt;</code> (实际上, 你应该 <em>总是</em> 显式指定类型)。 如果你想让产生者使用不同类型的数据,你需要指定一个<strong>schema</strong>来通知Pulsar 在<a href="/docs/zh-CN/next/reference-terminology#topic">topic</a>上传输哪种类型的数据。</p>
+<p>上面的生产者相当于 <code>Producer&lt;byte[]&gt;</code> (实际上, 你应该 <em>总是</em> 显式指定类型)。 如果你想让产生者使用不同类型的数据,你需要指定一个<strong>schema</strong>来通知Pulsar 在<a href="reference-terminology.md#topic">topic</a>上传输哪种类型的数据。</p>
 <h3><a class="anchor" aria-hidden="true" id="schema实例"></a><a href="#schema实例" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <p>假设您有一个 <code>SensorReading</code> 类, 你想通过Pulsar主题进行传输:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SensorReading</span> </span>{
@@ -352,9 +352,9 @@ Producer&lt;MyPojo&gt; pojoProducer = client.newProducer(pojoSchema)
 </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 [...]
-<p>Pulsar目前支持两种身份验证方案:<a href="/docs/zh-CN/next/security-tls-authentication"> TLS </a>和<a href="/docs/zh-CN/next/security-athenz"> Athenz </a>。 Pulsar Java客户端中两者可以一起使用。</p>
+<p>Pulsar目前支持两种身份验证方案:<a href="security-tls-authentication.md"> TLS </a>和<a href="security-athenz.md"> Athenz </a>。 Pulsar Java客户端中两者可以一起使用。</p>
 <h3><a class="anchor" aria-hidden="true" id="tls-authentication"></a><a href="#tls-authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>要使用<a href="/docs/zh-CN/next/security-tls-authentication">TLS</a>,你需要使用<code>setUseTls</code>方法设置TLS为<code>true</code>,将您的Pulsar客户端指向TLS证书路径,并提供证书和密钥文件的路径。</p>
+<p>要使用<a href="security-tls-authentication.md">TLS</a>,你需要使用<code>setUseTls</code>方法设置TLS为<code>true</code>,将您的Pulsar客户端指向TLS证书路径,并提供证书和密钥文件的路径。</p>
 <p>这是一个示例配置:</p>
 <pre><code class="hljs css language-java">Map&lt;String, String&gt; authParams = <span class="hljs-keyword">new</span> HashMap&lt;&gt;();
 authParams.put(<span class="hljs-string">"tlsCertFile"</span>, <span class="hljs-string">"/path/to/client-cert.pem"</span>);
@@ -371,7 +371,7 @@ PulsarClient client = PulsarClient.builder()
         .build();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="athenz"></a><a href="#athenz" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 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>要使用<a href="/docs/zh-CN/next/security-athenz">Athenz</a>做为身份认证提供者,你需要<a href="#tls-authentication">use TLS</a>并且在hash提供如下四个参数的值:</p>
+<p>要使用<a href="security-athenz.md">Athenz</a>做为身份认证提供者,你需要<a href="#tls-authentication">use TLS</a>并且在hash提供如下四个参数的值:</p>
 <ul>
 <li><code>tenantDomain</code></li>
 <li><code>tenantService</code></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 7f73884..09f731d 100644
--- a/content/docs/zh-CN/next/client-libraries-java/index.html
+++ b/content/docs/zh-CN/next/client-libraries-java/index.html
@@ -153,9 +153,9 @@ client.close();</p>
     .create();
 </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>当使用分区主题时,当你使用生产者发布消息时你可以指定路由模式。 有关使用 Java 客户端指定路由模式的更多内容, 请参见 <a href="/docs/zh-CN/next/cookbooks-partitioned">分区主题</a> cookbook。</p>
+<p>当使用分区主题时,当你使用生产者发布消息时你可以指定路由模式。 有关使用 Java 客户端指定路由模式的更多内容, 请参见 <a href="cookbooks-partitioned.md">分区主题</a> cookbook。</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>你可以使用Java客户端<a href="/docs/zh-CN/next/concepts-messaging#send-modes">异步</a>发布消息。 使用异步发送,生产者将消息放入阻塞队列并立即返回。 然后,客户端将在后台将消息发送给broker。 如果队列已满(最大值可配置),则在调用API时,生产者可能会被阻塞或立即失败,具体取决于传递给生产者的参数。</p>
+<p>你可以使用Java客户端<a href="concepts-messaging.md#send-modes">异步</a>发布消息。 使用异步发送,生产者将消息放入阻塞队列并立即返回。 然后,客户端将在后台将消息发送给broker。 如果队列已满(最大值可配置),则在调用API时,生产者可能会被阻塞或立即失败,具体取决于传递给生产者的参数。</p>
 <p>以下是异步发送操作的示例:</p>
 <pre><code class="hljs css language-java">producer.sendAsync(<span class="hljs-string">"my-async-message"</span>.getBytes()).thenAccept(msgId -&gt; {
     System.out.printf(<span class="hljs-string">"Message with ID %s successfully sent"</span>, msgId);
@@ -174,9 +174,9 @@ client.close();</p>
 <p>对于前一种情况,也可以使用<code>sendAsync()</code>来终止构建器链,并获取future返回值。</p>
 <h2><a class="anchor" aria-hidden="true" id="消费者"></a><a href="#消费者" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.2 [...]
 <p>在Pulsar中,消费者订阅topic主题并处理生产者发布到这些主题的消息。 你可以首先实例化一个<a href="https://pulsar.incubator.apache.org/api/client/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>
+对象并传递给他一个borker(<a href="#client-configuration">如上所示</a>) URL来实例化一个<a href="reference-terminology.md#consumer">消费者</a>。</p>
 <p>一旦实例化一个<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/PulsarClient">PulsarClient</a>
- 对象,你可以指定一个<a href="/docs/zh-CN/next/reference-terminology#topic">主题</a>和一个<a href="/docs/zh-CN/next/concepts-messaging#subscription-modes">订阅</a>来创建一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
+ 对象,你可以指定一个<a href="reference-terminology.md#topic">主题</a>和一个<a href="concepts-messaging.md#subscription-modes">订阅</a>来创建一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Consumer">Consumer</a>
 消费者。</p>
 <pre><code class="hljs css language-java">Consumer consumer = client.newConsumer()
         .topic(<span class="hljs-string">"my-topic"</span>)
@@ -206,13 +206,13 @@ client.close();</p>
         .subscribe();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="异步接收"></a><a href="#异步接收" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
-<p><code>receive</code>方法将异步接受消息(消费者处理器将被阻塞,直到有消息到达)。 你也可以使用<a href="/docs/zh-CN/next/concepts-messaging#receive-modes">异步接收方法</a>,这将在一个新消息到达时立即返回一个<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>对象。</p>
+<p><code>receive</code>方法将异步接受消息(消费者处理器将被阻塞,直到有消息到达)。 你也可以使用<a href="concepts-messaging.md#receive-modes">异步接收方法</a>,这将在一个新消息到达时立即返回一个<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>对象。</p>
 <p>Here's an example:</p>
 <pre><code class="hljs css language-java">CompletableFuture&lt;Message&gt; asyncMessage = consumer.receiveAsync();
 </code></pre>
 <p>异步接收操作返回一个包装在<a href="http://www.baeldung.com/java-completablefuture"><code>CompletableFuture</code></a>中的{@inject javadoc:Message:/client/org/apache/pulsar/client/api/Message}消息对象。</p>
 <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>消费者除了订阅单个Pulsar主题外,你还可以使用<a href="/docs/zh-CN/next/concepts-messaging#multi-topic-subscriptions">多主题订阅</a>订阅多个主题。 若要使用多主题订阅, 可以提供一个topic正则表达式 (regex) 或 主题<code>List</code> 。 如果通过 regex 选择主题, 则所有主题都必须位于同一Pulsar命名空间中。</p>
+<p>消费者除了订阅单个Pulsar主题外,你还可以使用<a href="concepts-messaging.md#multi-topic-subscriptions">多主题订阅</a>订阅多个主题。 若要使用多主题订阅, 可以提供一个topic正则表达式 (regex) 或 主题<code>List</code> 。 如果通过 regex 选择主题, 则所有主题都必须位于同一Pulsar命名空间中。</p>
 <p>下面是一些示例:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">import</span> org.apache.pulsar.client.api.Consumer;
 <span class="hljs-keyword">import</span> org.apache.pulsar.client.api.PulsarClient;
@@ -273,7 +273,7 @@ consumerBuilder
         });
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="reader-接口-readers"></a><a href="#reader-接口-readers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
-<p>使用 <a href="/docs/zh-CN/next/concepts-clients#reader-interface">reader 接口</a>, Pulsar客户可以在主题中“手动定位”自己,从指定的消息开始向前读取所有消息。 Pulsar Java API可以让你通过指定一个主题,一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
+<p>使用 <a href="concepts-clients.md#reader-interface">reader 接口</a>, Pulsar客户可以在主题中“手动定位”自己,从指定的消息开始向前读取所有消息。 Pulsar Java API可以让你通过指定一个主题,一个 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/MessageId">MessageId</a>
 和 <a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 /api/ReaderConfiguration}来创建<a href="https://pulsar.incubator.apache.org/api/client/org/apache/pulsar/client/api/Reader">Reader</a>
 。</p>
@@ -294,12 +294,12 @@ Reader reader = pulsarClient.newReader()
 <p>在上面的示例中,实例化一个<code>Reader</code>对象对指定的主题和消息(ID); reader将遍历主题中<code>msgIdBytes</code>(取值方式取决于应用程序) 之后的消息。</p>
 <p>上面的示例代码展示了<code>Reader</code>对象指向特定的消息(ID),但你也可以使用<code>MessageId.earliest</code>来指向topic上最早可用的消息,使用<code>MessageId.latest</code>指向最新的消息。</p>
 <h2><a class="anchor" aria-hidden="true" id="schema"></a><a href="#schema" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="/docs/zh-CN/next/concepts-schema-registry">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 下面是一个示例:</p>
+<p>在Pulsar中,所有的消息数据都在字节数组中,<a href="concepts-schema-registry.md">消息schema</a>允许在构造和处理消息时使用其他类型的数据(从简单类型(如字符串)到更复杂的特定应用程序的类型)。 如果在不指定schema的情况下构造 <a href="#producers">生产者</a>,则生产者只能生成类型为 <code>byte[]</code>的消息。 下面是一个示例:</p>
 <pre><code class="hljs css language-java">Producer&lt;<span class="hljs-keyword">byte</span>[]&gt; producer = client.newProducer()
         .topic(topic)
         .create();
 </code></pre>
-<p>上面的生产者相当于 <code>Producer&lt;byte[]&gt;</code> (实际上, 你应该 <em>总是</em> 显式指定类型)。 如果你想让产生者使用不同类型的数据,你需要指定一个<strong>schema</strong>来通知Pulsar 在<a href="/docs/zh-CN/next/reference-terminology#topic">topic</a>上传输哪种类型的数据。</p>
+<p>上面的生产者相当于 <code>Producer&lt;byte[]&gt;</code> (实际上, 你应该 <em>总是</em> 显式指定类型)。 如果你想让产生者使用不同类型的数据,你需要指定一个<strong>schema</strong>来通知Pulsar 在<a href="reference-terminology.md#topic">topic</a>上传输哪种类型的数据。</p>
 <h3><a class="anchor" aria-hidden="true" id="schema实例"></a><a href="#schema实例" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <p>假设您有一个 <code>SensorReading</code> 类, 你想通过Pulsar主题进行传输:</p>
 <pre><code class="hljs css language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SensorReading</span> </span>{
@@ -352,9 +352,9 @@ Producer&lt;MyPojo&gt; pojoProducer = client.newProducer(pojoSchema)
 </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 [...]
-<p>Pulsar目前支持两种身份验证方案:<a href="/docs/zh-CN/next/security-tls-authentication"> TLS </a>和<a href="/docs/zh-CN/next/security-athenz"> Athenz </a>。 Pulsar Java客户端中两者可以一起使用。</p>
+<p>Pulsar目前支持两种身份验证方案:<a href="security-tls-authentication.md"> TLS </a>和<a href="security-athenz.md"> Athenz </a>。 Pulsar Java客户端中两者可以一起使用。</p>
 <h3><a class="anchor" aria-hidden="true" id="tls-authentication"></a><a href="#tls-authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-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>要使用<a href="/docs/zh-CN/next/security-tls-authentication">TLS</a>,你需要使用<code>setUseTls</code>方法设置TLS为<code>true</code>,将您的Pulsar客户端指向TLS证书路径,并提供证书和密钥文件的路径。</p>
+<p>要使用<a href="security-tls-authentication.md">TLS</a>,你需要使用<code>setUseTls</code>方法设置TLS为<code>true</code>,将您的Pulsar客户端指向TLS证书路径,并提供证书和密钥文件的路径。</p>
 <p>这是一个示例配置:</p>
 <pre><code class="hljs css language-java">Map&lt;String, String&gt; authParams = <span class="hljs-keyword">new</span> HashMap&lt;&gt;();
 authParams.put(<span class="hljs-string">"tlsCertFile"</span>, <span class="hljs-string">"/path/to/client-cert.pem"</span>);
@@ -371,7 +371,7 @@ PulsarClient client = PulsarClient.builder()
         .build();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="athenz"></a><a href="#athenz" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 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>要使用<a href="/docs/zh-CN/next/security-athenz">Athenz</a>做为身份认证提供者,你需要<a href="#tls-authentication">use TLS</a>并且在hash提供如下四个参数的值:</p>
+<p>要使用<a href="security-athenz.md">Athenz</a>做为身份认证提供者,你需要<a href="#tls-authentication">use TLS</a>并且在hash提供如下四个参数的值:</p>
 <ul>
 <li><code>tenantDomain</code></li>
 <li><code>tenantService</code></li>
diff --git a/content/docs/zh-CN/next/concepts-messaging.html b/content/docs/zh-CN/next/concepts-messaging.html
index 3587270..b6133c4 100644
--- a/content/docs/zh-CN/next/concepts-messaging.html
+++ b/content/docs/zh-CN/next/concepts-messaging.html
@@ -118,7 +118,7 @@
 <pre><code class="hljs">
 | Topic名称组成                       | 说明:                                                                                                                                                                                                                                                                                                                   |
 |:------------------------------- |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| <span class="hljs-code">`persistent`</span> / <span class="hljs-code">`non-persistent`</span> | 定义了topic类型。 Pulsar支持两种不同topic:[<span class="hljs-string">持久</span>](<span class="hljs-link">/docs/zh-CN/next/concepts-architecture-overview#persistent-storage</span>)和 [<span class="hljs-string">非持久</span>](<span class="hljs-link">#non-persistent-topics</span>)(默认是持久类型,如果你没有指明类型,topic将会是持久类型)。 持久topic的所有消息都会[<span class="hljs-string"></span>](<span class="hljs-link">/docs/zh-CN/next/concepts [...]
+| <span class="hljs-code">`persistent`</span> / <span class="hljs-code">`non-persistent`</span> | 定义了topic类型。 Pulsar支持两种不同topic:[<span class="hljs-string">持久</span>](<span class="hljs-link">concepts-architecture-overview.md#persistent-storage</span>)和 [<span class="hljs-string">非持久</span>](<span class="hljs-link">#non-persistent-topics</span>)(默认是持久类型,如果你没有指明类型,topic将会是持久类型)。 持久topic的所有消息都会[<span class="hljs-string"></span>](<span class="hljs-link">concepts-architecture-overview.md#persi [...]
 | <span class="hljs-code">`tenant`</span>                        | 实例中topic的租户。tenant是Pulsar多租户的基本要素,可以被跨集群的传播。                                                                                                                                                                                                                                                                          |
 | <span class="hljs-code">`namespace`</span>                     | Topic的管理单元,充当关联topic组的管理机制。 大多数的topic配置在[<span class="hljs-string">namespace</span>](<span class="hljs-link">#namespaces</span>)层面生效。 每个tenant可以有多个namespace。                                                                                                                                                                                                                         |
 | <span class="hljs-code">`topic`</span>                         | 名称的最后组成部分,topic的命名很自由,没有什么特殊的含义。                                                                                                                                                                                                                                                                                      |
@@ -129,7 +129,7 @@
 
 <span class="hljs-section">## 命名空间</span>
 
-命名空间是租户内部逻辑上的命名术语。 一个租户可以通过[<span class="hljs-string">admin API</span>](<span class="hljs-link">/docs/zh-CN/next/admin-api-namespaces#create</span>)创建多个命名空间。 例如,一个对接多个应用的租户,可以为每个应用创建不同的namespace。 Namespace使得程序可以以层级的方式创建和管理topic Topic<span class="hljs-code">`my-tenant/app1`</span> ,它的namespace是<span class="hljs-code">`app1`</span>这个应用,对应的租户是 <span class="hljs-code">`my-tenant`</span>。 你可以在namespace下创建任意数量的[<span class="hljs-string">topic</span>](<span class="hljs-link">#topics</span>)。
+命名空间是租户内部逻辑上的命名术语。 一个租户可以通过[<span class="hljs-string">admin API</span>](<span class="hljs-link">admin-api-namespaces.md#create</span>)创建多个命名空间。 例如,一个对接多个应用的租户,可以为每个应用创建不同的namespace。 Namespace使得程序可以以层级的方式创建和管理topic Topic<span class="hljs-code">`my-tenant/app1`</span> ,它的namespace是<span class="hljs-code">`app1`</span>这个应用,对应的租户是 <span class="hljs-code">`my-tenant`</span>。 你可以在namespace下创建任意数量的[<span class="hljs-string">topic</span>](<span class="hljs-link">#topics</span>)。
 
 <span class="hljs-section">## 订阅模型</span>
 
@@ -204,7 +204,7 @@ Consumer someTopicsConsumer = pulsarClient.subscribe(someTopicsInNamespace, "sub
 </span></code></pre>
 <p>代码例子,请见:</p>
 <ul>
-<li><a href="/docs/zh-CN/next/client-libraries-java#multi-topic-subscriptions">Java</a></li>
+<li><a href="client-libraries-java.md#multi-topic-subscriptions">Java</a></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="partitioned-topics"></a><a href="#partitioned-topics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
 <p>通常一个topic仅被一个broker服务,这限制了topic的最大吞吐量。 <em>分区topic</em>是特殊的topic类型,他可以被多个broker处理,这让topic有更高的吞吐量。</p>
@@ -215,7 +215,7 @@ Consumer someTopicsConsumer = pulsarClient.subscribe(someTopicsInNamespace, "sub
 <p>这个topic的消息被广播给两个consumer。 <a href="#routing-modes">路由模式</a>决定哪个broker处理哪个partition,<a href="#subscription-modes">订阅模式</a>决定哪条消息送到哪个consumer。</p>
 <p>大多数境况下,路由和订阅模式可以分开制定。 通常来讲,吞吐能力的要求,决定了 分区/路由 的方式。订阅模式则应该由应用的语义来做决定。</p>
 <p>分区topic和普通topic,对于订阅模式如何工作,没有任何不同。分区只是决定了从生产者生产消息到消费者处理及确认消息过程中发生的事情。</p>
-<p>分区topic需要通过<a href="/docs/zh-CN/next/admin-api-overview">admin API</a>指定创建。创建的时候可以指明分区的数量。</p>
+<p>分区topic需要通过<a href="admin-api-overview.md">admin API</a>指定创建。创建的时候可以指明分区的数量。</p>
 <h3><a class="anchor" aria-hidden="true" id="路由模式"></a><a href="#路由模式" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <p>当发布消息到分区topic,你必须要指定<em>路由模式</em>。路由模式决定了每条消息被发布到的分区---其实是内部主题。</p>
 <p>下面是三种默认可用的路由模式:</p>
@@ -229,40 +229,40 @@ Consumer someTopicsConsumer = pulsarClient.subscribe(someTopicsInNamespace, "sub
 <tr><td style="text-align:left">Round robin分发</td><td style="text-align:left">如果没有key,所有的消息通过round-robin方式被路由到不同的分区,以达到最大的生产能力</td><td style="text-align:left">无</td></tr>
 </tbody>
 </table>
-<p>这些默认的模式之外,你还可以创建客制化的路由模式,如果你在使用<a href="/docs/zh-CN/next/client-libraries-java">Java client</a>,可以通过实现MessageRouter接口来做客制化。</p>
+<p>这些默认的模式之外,你还可以创建客制化的路由模式,如果你在使用<a href="client-libraries-java.md">Java client</a>,可以通过实现MessageRouter接口来做客制化。</p>
 <h2><a class="anchor" aria-hidden="true" id="非持久topic"></a><a href="#非持久topic" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
-<p>默认的,Pulsar保存<em>所有</em>没有确认的消息到多个<a href="/docs/zh-CN/next/concepts-architecture-overview#persistent-storage">BookKeeper</a>的bookies中(存储节点)。持久topic的消息数据可以在broker重启或者订阅者出问题的情况下存活下来。 Data for messages on persistent topics can thus survive broker restarts and subscriber failover.</p>
+<p>默认的,Pulsar保存<em>所有</em>没有确认的消息到多个<a href="concepts-architecture-overview.md#persistent-storage">BookKeeper</a>的bookies中(存储节点)。持久topic的消息数据可以在broker重启或者订阅者出问题的情况下存活下来。 Data for messages on persistent topics can thus survive broker restarts and subscriber failover.</p>
 <p>Pulsar also, however, supports <strong>non-persistent topics</strong>, which are topics on which messages are <em>never</em> persisted to disk and live only in memory. Pulsar也提供了非持久topic。非持久topic的消息不会被保存在硬盘上,只存活于内存中。当使用非持久topic分发时,杀掉Pulsar的broker或者关闭订阅者,此topic( non-persistent))上所有的瞬时消息都会丢失,意味着客户端可能会遇到消息缺失。</p>
 <p>Non-persistent topics have names of this form (note the <code>non-persistent</code> in the name):</p>
 <pre><code class="hljs css language-http">non-persistent://tenant/namespace/topic
 </code></pre>
 <blockquote>
-<p>如何使用非持久topic的更多信息,请参考 <a href="/docs/zh-CN/next/cookbooks-non-persistent">Non-persistent messaging cookbook</a></p>
+<p>如何使用非持久topic的更多信息,请参考 <a href="cookbooks-non-persistent.md">Non-persistent messaging cookbook</a></p>
 </blockquote>
-<p>非持久topic中,broker会立即发布消息给所有连接的订阅者,而不会在<a href="/docs/zh-CN/next/concepts-architecture-overview#persistent-storage">BookKeeper</a>中<em>存储</em>。 如果有一个订阅者断开连接,broker将无法重发这些瞬时消息,订阅者将永远也不能收到这些消息了。 去掉持久化存储的步骤,在某些情况下,使得非持久topic的消息比持久topic稍微变快。但是同时,Pulsar的一些核心优势也丧失掉了。</p>
+<p>非持久topic中,broker会立即发布消息给所有连接的订阅者,而不会在<a href="concepts-architecture-overview.md#persistent-storage">BookKeeper</a>中<em>存储</em>。 如果有一个订阅者断开连接,broker将无法重发这些瞬时消息,订阅者将永远也不能收到这些消息了。 去掉持久化存储的步骤,在某些情况下,使得非持久topic的消息比持久topic稍微变快。但是同时,Pulsar的一些核心优势也丧失掉了。</p>
 <blockquote>
 <p>非持久topic,消息数据仅存活在内存。 如果broker挂掉或者因其他情况不能从内存取到,你的消息数据就可能丢失。 只有在真的<em>确信</em>你的使用场景符合,并且你可以忍受时,才可去使用非持久topic。</p>
 </blockquote>
-<p>默认非持久topic在broker上是开启的。 你可以通过broker的<a href="/docs/zh-CN/next/reference-configuration#broker-enableNonPersistentTopics">配置</a>关闭。 你可以通过使用<a href="referencereference--pulsar-admin/#topics-1"><code>pulsar-admin-topics</code></a>接口管理非持久topic。</p>
+<p>默认非持久topic在broker上是开启的。 你可以通过broker的<a href="reference-configuration.md#broker-enableNonPersistentTopics">配置</a>关闭。 你可以通过使用<a href="referencereference--pulsar-admin/#topics-1"><code>pulsar-admin-topics</code></a>接口管理非持久topic。</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>非持久消息通常比持久消息更快,因为broker无须持久化消息,当消息被分发给所有订阅者时,会立即发送ack给producer。 非持久topic让producer有更低的发布延迟。</p>
 <h3><a class="anchor" aria-hidden="true" id="客户端api"></a><a href="#客户端api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 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>Producer和consumer以连接持久topic同样的方式连接到非持久topic。重要的区别是,topic的名称必须以<code>non-persistent</code>开头。 三种订阅模式--<a href="#exclusive">exclusive</a>,<a href="#shared">shared</a>,<a href="#failover">failover</a>对于非持久topic都是支持的。</p>
-<p>下面是一个非持久topic的<a href="/docs/zh-CN/next/client-libraries-java#consumers">java consumer</a>例子:</p>
+<p>下面是一个非持久topic的<a href="client-libraries-java.md#consumers">java consumer</a>例子:</p>
 <pre><code class="hljs css language-java">PulsarClient client = PulsarClient.create(<span class="hljs-string">"pulsar://localhost:6650"</span>);
 String npTopic = <span class="hljs-string">"non-persistent://public/default/my-topic"</span>;
 String subscriptionName = <span class="hljs-string">"my-subscription-name"</span>;
 
 Consumer consumer = client.subscribe(npTopic, subscriptionName);
 </code></pre>
-<p>这里还有一个非持久topic的<a href="/docs/zh-CN/next/client-libraries-java#producer">java producer</a>例子:</p>
+<p>这里还有一个非持久topic的<a href="client-libraries-java.md#producer">java producer</a>例子:</p>
 <pre><code class="hljs css language-java">Producer producer = client.createProducer(npTopic);
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="message-retention-and-expiry"></a><a href="#message-retention-and-expiry" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
 <p>Pulsar broker默认如下:</p>
 <ul>
 <li>立即删除<em>所有</em>已经被cunsumer确认过的的消息</li>
-<li>以消息backlog的形式,<a href="/docs/zh-CN/next/concepts-architecture-overview#persistent-storage">持久保存</a>所有的未被确认消息</li>
+<li>以消息backlog的形式,<a href="concepts-architecture-overview.md#persistent-storage">持久保存</a>所有的未被确认消息</li>
 </ul>
 <p>Pulsar有两个特性,让你可以覆盖上面的默认行为。</p>
 <ul>
@@ -270,23 +270,23 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <li>消息<strong>过期</strong>让你可以给未被确认的消息设置存活时长(TTL)</li>
 </ul>
 <blockquote>
-<p>所有消息存留和过期在<a href="#namespaces">namespace</a>层面管理。具体操作请查看 <a href="/docs/zh-CN/next/cookbooks-retention-expiry">Message retention and expiry</a></p>
+<p>所有消息存留和过期在<a href="#namespaces">namespace</a>层面管理。具体操作请查看 <a href="cookbooks-retention-expiry.md">Message retention and expiry</a></p>
 </blockquote>
 <p>下图说明了这两种概念:</p>
 <p><img src="assets/retention-expiry.png" alt="Message retention and expiry"></p>
 <p>图中上面的是消息存留,<span style="color: #89b557;">存留规则</span>会被用于某namespace下所有的topic,指明哪些消息会被持久存储,即使已经被确认过。 没有被留存规则覆盖的消息将会被<span style="color: #bb3b3e;">删除</span>。 没有留存规则的话,<em>所有</em>被<span style="color: #19967d;">确认</span>的消息都会被删除。</p>
 <p>图中下面的是消息过期,有些消息即使还<span style="color: #337db6;">没有被确认</span>,也被<span style="color: #bb3b3e;">删除</span>掉了。因为根据设置在<span style="color: #e39441;">namespace上的TTL</span>,他们已经过期了。(例如,TTL为5分钟,过了十分钟消息还没被确认)</p>
 <h2><a class="anchor" aria-hidden="true" id="message-deduplication"></a><a href="#message-deduplication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
-<p>当消息被Pulsar<a href="/docs/zh-CN/next/concepts-architecture-overview#persistent-storage">持久化</a>多于一次的时候,消息就会<strong>重复</strong>。 消息<strong><em>去重</em></strong>是Pulsar可选的特性,阻止不必要的消息重复,每条消息仅处理一次,<em>即使消息被接收多次</em></p>
+<p>当消息被Pulsar<a href="concepts-architecture-overview.md#persistent-storage">持久化</a>多于一次的时候,消息就会<strong>重复</strong>。 消息<strong><em>去重</em></strong>是Pulsar可选的特性,阻止不必要的消息重复,每条消息仅处理一次,<em>即使消息被接收多次</em></p>
 <p>下图展示了开启和关闭消息去重的场景:</p>
 <p><img src="assets/message-deduplication.png" alt="Pulsar消息去重"></p>
-<p>最上面的场景中,消息去重被关闭。 Producer发布消息1到一个topic,消息到达broker后,被<a href="/docs/zh-CN/next/concepts-architecture-overview#persistent-storage">持久化</a>到BookKeeper。 然后producer又发送了消息1(可能因为某些重试逻辑),然后消息被接收后又持久化在BookKeeper,这意味着消息重复发生了。</p>
+<p>最上面的场景中,消息去重被关闭。 Producer发布消息1到一个topic,消息到达broker后,被<a href="concepts-architecture-overview.md#persistent-storage">持久化</a>到BookKeeper。 然后producer又发送了消息1(可能因为某些重试逻辑),然后消息被接收后又持久化在BookKeeper,这意味着消息重复发生了。</p>
 <p>在第二个场景中,producer发送了消息1,消息被broker接收然后持久化,和第一个场景是一样的。 当producer再次发送消息时,broker知道已经收到个消息1,所以不会再持久化消息1.</p>
 <blockquote>
-<p>消息去重在命名空间层面处理。更多介绍请参考 <a href="/docs/zh-CN/next/cookbooks-deduplication">message deduplication cookbook</a>.</p>
+<p>消息去重在命名空间层面处理。更多介绍请参考 <a href="cookbooks-deduplication.md">message deduplication cookbook</a>.</p>
 </blockquote>
 <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>消息去重的另外一种方法是确保每条消息<em>仅生产一次</em>。 这种方法通常被叫做<strong>生产者幂等</strong>。 这种方式的缺点是,把消息去重的工作推给了应用去做。 在Pulsar中,去重被<a href="/docs/zh-CN/next/reference-terminology#broker">broker</a>处理的,这意味着你不需要修改你的客户端代码。 你只需要做一些管理上的变化(参考<a href="/docs/zh-CN/next/cookbooks-deduplication">Managing message deduplication</a> )</p>
+<p>消息去重的另外一种方法是确保每条消息<em>仅生产一次</em>。 这种方法通常被叫做<strong>生产者幂等</strong>。 这种方式的缺点是,把消息去重的工作推给了应用去做。 在Pulsar中,去重被<a href="reference-terminology.md#broker">broker</a>处理的,这意味着你不需要修改你的客户端代码。 你只需要做一些管理上的变化(参考<a href="cookbooks-deduplication.md">Managing message deduplication</a> )</p>
 <h3><a class="anchor" aria-hidden="true" id="去重和实际一次语义"></a><a href="#去重和实际一次语义" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
 <p>消息去重,使Pulsar成为与流处理引擎(SPE)或者其他寻求<a href="https://streaml.io/blog/exactly-once">实际一次</a>处理语义的系统连接的完美消息系统。 消息系统若不提供自动消息去重,则需要SPE或者其他系统保证去重。这意味着严格的消息顺序来自于让程序承担额外的去重工作。 使用Pulsar,严格的顺序保证不会带来任何应用层面的代价。</p>
 <blockquote>
diff --git a/content/docs/zh-CN/next/concepts-messaging/index.html b/content/docs/zh-CN/next/concepts-messaging/index.html
index 3587270..b6133c4 100644
--- a/content/docs/zh-CN/next/concepts-messaging/index.html
+++ b/content/docs/zh-CN/next/concepts-messaging/index.html
@@ -118,7 +118,7 @@
 <pre><code class="hljs">
 | Topic名称组成                       | 说明:                                                                                                                                                                                                                                                                                                                   |
 |:------------------------------- |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| <span class="hljs-code">`persistent`</span> / <span class="hljs-code">`non-persistent`</span> | 定义了topic类型。 Pulsar支持两种不同topic:[<span class="hljs-string">持久</span>](<span class="hljs-link">/docs/zh-CN/next/concepts-architecture-overview#persistent-storage</span>)和 [<span class="hljs-string">非持久</span>](<span class="hljs-link">#non-persistent-topics</span>)(默认是持久类型,如果你没有指明类型,topic将会是持久类型)。 持久topic的所有消息都会[<span class="hljs-string"></span>](<span class="hljs-link">/docs/zh-CN/next/concepts [...]
+| <span class="hljs-code">`persistent`</span> / <span class="hljs-code">`non-persistent`</span> | 定义了topic类型。 Pulsar支持两种不同topic:[<span class="hljs-string">持久</span>](<span class="hljs-link">concepts-architecture-overview.md#persistent-storage</span>)和 [<span class="hljs-string">非持久</span>](<span class="hljs-link">#non-persistent-topics</span>)(默认是持久类型,如果你没有指明类型,topic将会是持久类型)。 持久topic的所有消息都会[<span class="hljs-string"></span>](<span class="hljs-link">concepts-architecture-overview.md#persi [...]
 | <span class="hljs-code">`tenant`</span>                        | 实例中topic的租户。tenant是Pulsar多租户的基本要素,可以被跨集群的传播。                                                                                                                                                                                                                                                                          |
 | <span class="hljs-code">`namespace`</span>                     | Topic的管理单元,充当关联topic组的管理机制。 大多数的topic配置在[<span class="hljs-string">namespace</span>](<span class="hljs-link">#namespaces</span>)层面生效。 每个tenant可以有多个namespace。                                                                                                                                                                                                                         |
 | <span class="hljs-code">`topic`</span>                         | 名称的最后组成部分,topic的命名很自由,没有什么特殊的含义。                                                                                                                                                                                                                                                                                      |
@@ -129,7 +129,7 @@
 
 <span class="hljs-section">## 命名空间</span>
 
-命名空间是租户内部逻辑上的命名术语。 一个租户可以通过[<span class="hljs-string">admin API</span>](<span class="hljs-link">/docs/zh-CN/next/admin-api-namespaces#create</span>)创建多个命名空间。 例如,一个对接多个应用的租户,可以为每个应用创建不同的namespace。 Namespace使得程序可以以层级的方式创建和管理topic Topic<span class="hljs-code">`my-tenant/app1`</span> ,它的namespace是<span class="hljs-code">`app1`</span>这个应用,对应的租户是 <span class="hljs-code">`my-tenant`</span>。 你可以在namespace下创建任意数量的[<span class="hljs-string">topic</span>](<span class="hljs-link">#topics</span>)。
+命名空间是租户内部逻辑上的命名术语。 一个租户可以通过[<span class="hljs-string">admin API</span>](<span class="hljs-link">admin-api-namespaces.md#create</span>)创建多个命名空间。 例如,一个对接多个应用的租户,可以为每个应用创建不同的namespace。 Namespace使得程序可以以层级的方式创建和管理topic Topic<span class="hljs-code">`my-tenant/app1`</span> ,它的namespace是<span class="hljs-code">`app1`</span>这个应用,对应的租户是 <span class="hljs-code">`my-tenant`</span>。 你可以在namespace下创建任意数量的[<span class="hljs-string">topic</span>](<span class="hljs-link">#topics</span>)。
 
 <span class="hljs-section">## 订阅模型</span>
 
@@ -204,7 +204,7 @@ Consumer someTopicsConsumer = pulsarClient.subscribe(someTopicsInNamespace, "sub
 </span></code></pre>
 <p>代码例子,请见:</p>
 <ul>
-<li><a href="/docs/zh-CN/next/client-libraries-java#multi-topic-subscriptions">Java</a></li>
+<li><a href="client-libraries-java.md#multi-topic-subscriptions">Java</a></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="partitioned-topics"></a><a href="#partitioned-topics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
 <p>通常一个topic仅被一个broker服务,这限制了topic的最大吞吐量。 <em>分区topic</em>是特殊的topic类型,他可以被多个broker处理,这让topic有更高的吞吐量。</p>
@@ -215,7 +215,7 @@ Consumer someTopicsConsumer = pulsarClient.subscribe(someTopicsInNamespace, "sub
 <p>这个topic的消息被广播给两个consumer。 <a href="#routing-modes">路由模式</a>决定哪个broker处理哪个partition,<a href="#subscription-modes">订阅模式</a>决定哪条消息送到哪个consumer。</p>
 <p>大多数境况下,路由和订阅模式可以分开制定。 通常来讲,吞吐能力的要求,决定了 分区/路由 的方式。订阅模式则应该由应用的语义来做决定。</p>
 <p>分区topic和普通topic,对于订阅模式如何工作,没有任何不同。分区只是决定了从生产者生产消息到消费者处理及确认消息过程中发生的事情。</p>
-<p>分区topic需要通过<a href="/docs/zh-CN/next/admin-api-overview">admin API</a>指定创建。创建的时候可以指明分区的数量。</p>
+<p>分区topic需要通过<a href="admin-api-overview.md">admin API</a>指定创建。创建的时候可以指明分区的数量。</p>
 <h3><a class="anchor" aria-hidden="true" id="路由模式"></a><a href="#路由模式" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <p>当发布消息到分区topic,你必须要指定<em>路由模式</em>。路由模式决定了每条消息被发布到的分区---其实是内部主题。</p>
 <p>下面是三种默认可用的路由模式:</p>
@@ -229,40 +229,40 @@ Consumer someTopicsConsumer = pulsarClient.subscribe(someTopicsInNamespace, "sub
 <tr><td style="text-align:left">Round robin分发</td><td style="text-align:left">如果没有key,所有的消息通过round-robin方式被路由到不同的分区,以达到最大的生产能力</td><td style="text-align:left">无</td></tr>
 </tbody>
 </table>
-<p>这些默认的模式之外,你还可以创建客制化的路由模式,如果你在使用<a href="/docs/zh-CN/next/client-libraries-java">Java client</a>,可以通过实现MessageRouter接口来做客制化。</p>
+<p>这些默认的模式之外,你还可以创建客制化的路由模式,如果你在使用<a href="client-libraries-java.md">Java client</a>,可以通过实现MessageRouter接口来做客制化。</p>
 <h2><a class="anchor" aria-hidden="true" id="非持久topic"></a><a href="#非持久topic" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
-<p>默认的,Pulsar保存<em>所有</em>没有确认的消息到多个<a href="/docs/zh-CN/next/concepts-architecture-overview#persistent-storage">BookKeeper</a>的bookies中(存储节点)。持久topic的消息数据可以在broker重启或者订阅者出问题的情况下存活下来。 Data for messages on persistent topics can thus survive broker restarts and subscriber failover.</p>
+<p>默认的,Pulsar保存<em>所有</em>没有确认的消息到多个<a href="concepts-architecture-overview.md#persistent-storage">BookKeeper</a>的bookies中(存储节点)。持久topic的消息数据可以在broker重启或者订阅者出问题的情况下存活下来。 Data for messages on persistent topics can thus survive broker restarts and subscriber failover.</p>
 <p>Pulsar also, however, supports <strong>non-persistent topics</strong>, which are topics on which messages are <em>never</em> persisted to disk and live only in memory. Pulsar也提供了非持久topic。非持久topic的消息不会被保存在硬盘上,只存活于内存中。当使用非持久topic分发时,杀掉Pulsar的broker或者关闭订阅者,此topic( non-persistent))上所有的瞬时消息都会丢失,意味着客户端可能会遇到消息缺失。</p>
 <p>Non-persistent topics have names of this form (note the <code>non-persistent</code> in the name):</p>
 <pre><code class="hljs css language-http">non-persistent://tenant/namespace/topic
 </code></pre>
 <blockquote>
-<p>如何使用非持久topic的更多信息,请参考 <a href="/docs/zh-CN/next/cookbooks-non-persistent">Non-persistent messaging cookbook</a></p>
+<p>如何使用非持久topic的更多信息,请参考 <a href="cookbooks-non-persistent.md">Non-persistent messaging cookbook</a></p>
 </blockquote>
-<p>非持久topic中,broker会立即发布消息给所有连接的订阅者,而不会在<a href="/docs/zh-CN/next/concepts-architecture-overview#persistent-storage">BookKeeper</a>中<em>存储</em>。 如果有一个订阅者断开连接,broker将无法重发这些瞬时消息,订阅者将永远也不能收到这些消息了。 去掉持久化存储的步骤,在某些情况下,使得非持久topic的消息比持久topic稍微变快。但是同时,Pulsar的一些核心优势也丧失掉了。</p>
+<p>非持久topic中,broker会立即发布消息给所有连接的订阅者,而不会在<a href="concepts-architecture-overview.md#persistent-storage">BookKeeper</a>中<em>存储</em>。 如果有一个订阅者断开连接,broker将无法重发这些瞬时消息,订阅者将永远也不能收到这些消息了。 去掉持久化存储的步骤,在某些情况下,使得非持久topic的消息比持久topic稍微变快。但是同时,Pulsar的一些核心优势也丧失掉了。</p>
 <blockquote>
 <p>非持久topic,消息数据仅存活在内存。 如果broker挂掉或者因其他情况不能从内存取到,你的消息数据就可能丢失。 只有在真的<em>确信</em>你的使用场景符合,并且你可以忍受时,才可去使用非持久topic。</p>
 </blockquote>
-<p>默认非持久topic在broker上是开启的。 你可以通过broker的<a href="/docs/zh-CN/next/reference-configuration#broker-enableNonPersistentTopics">配置</a>关闭。 你可以通过使用<a href="referencereference--pulsar-admin/#topics-1"><code>pulsar-admin-topics</code></a>接口管理非持久topic。</p>
+<p>默认非持久topic在broker上是开启的。 你可以通过broker的<a href="reference-configuration.md#broker-enableNonPersistentTopics">配置</a>关闭。 你可以通过使用<a href="referencereference--pulsar-admin/#topics-1"><code>pulsar-admin-topics</code></a>接口管理非持久topic。</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>非持久消息通常比持久消息更快,因为broker无须持久化消息,当消息被分发给所有订阅者时,会立即发送ack给producer。 非持久topic让producer有更低的发布延迟。</p>
 <h3><a class="anchor" aria-hidden="true" id="客户端api"></a><a href="#客户端api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 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>Producer和consumer以连接持久topic同样的方式连接到非持久topic。重要的区别是,topic的名称必须以<code>non-persistent</code>开头。 三种订阅模式--<a href="#exclusive">exclusive</a>,<a href="#shared">shared</a>,<a href="#failover">failover</a>对于非持久topic都是支持的。</p>
-<p>下面是一个非持久topic的<a href="/docs/zh-CN/next/client-libraries-java#consumers">java consumer</a>例子:</p>
+<p>下面是一个非持久topic的<a href="client-libraries-java.md#consumers">java consumer</a>例子:</p>
 <pre><code class="hljs css language-java">PulsarClient client = PulsarClient.create(<span class="hljs-string">"pulsar://localhost:6650"</span>);
 String npTopic = <span class="hljs-string">"non-persistent://public/default/my-topic"</span>;
 String subscriptionName = <span class="hljs-string">"my-subscription-name"</span>;
 
 Consumer consumer = client.subscribe(npTopic, subscriptionName);
 </code></pre>
-<p>这里还有一个非持久topic的<a href="/docs/zh-CN/next/client-libraries-java#producer">java producer</a>例子:</p>
+<p>这里还有一个非持久topic的<a href="client-libraries-java.md#producer">java producer</a>例子:</p>
 <pre><code class="hljs css language-java">Producer producer = client.createProducer(npTopic);
 </code></pre>
 <h2><a class="anchor" aria-hidden="true" id="message-retention-and-expiry"></a><a href="#message-retention-and-expiry" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
 <p>Pulsar broker默认如下:</p>
 <ul>
 <li>立即删除<em>所有</em>已经被cunsumer确认过的的消息</li>
-<li>以消息backlog的形式,<a href="/docs/zh-CN/next/concepts-architecture-overview#persistent-storage">持久保存</a>所有的未被确认消息</li>
+<li>以消息backlog的形式,<a href="concepts-architecture-overview.md#persistent-storage">持久保存</a>所有的未被确认消息</li>
 </ul>
 <p>Pulsar有两个特性,让你可以覆盖上面的默认行为。</p>
 <ul>
@@ -270,23 +270,23 @@ Consumer consumer = client.subscribe(npTopic, subscriptionName);
 <li>消息<strong>过期</strong>让你可以给未被确认的消息设置存活时长(TTL)</li>
 </ul>
 <blockquote>
-<p>所有消息存留和过期在<a href="#namespaces">namespace</a>层面管理。具体操作请查看 <a href="/docs/zh-CN/next/cookbooks-retention-expiry">Message retention and expiry</a></p>
+<p>所有消息存留和过期在<a href="#namespaces">namespace</a>层面管理。具体操作请查看 <a href="cookbooks-retention-expiry.md">Message retention and expiry</a></p>
 </blockquote>
 <p>下图说明了这两种概念:</p>
 <p><img src="assets/retention-expiry.png" alt="Message retention and expiry"></p>
 <p>图中上面的是消息存留,<span style="color: #89b557;">存留规则</span>会被用于某namespace下所有的topic,指明哪些消息会被持久存储,即使已经被确认过。 没有被留存规则覆盖的消息将会被<span style="color: #bb3b3e;">删除</span>。 没有留存规则的话,<em>所有</em>被<span style="color: #19967d;">确认</span>的消息都会被删除。</p>
 <p>图中下面的是消息过期,有些消息即使还<span style="color: #337db6;">没有被确认</span>,也被<span style="color: #bb3b3e;">删除</span>掉了。因为根据设置在<span style="color: #e39441;">namespace上的TTL</span>,他们已经过期了。(例如,TTL为5分钟,过了十分钟消息还没被确认)</p>
 <h2><a class="anchor" aria-hidden="true" id="message-deduplication"></a><a href="#message-deduplication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
-<p>当消息被Pulsar<a href="/docs/zh-CN/next/concepts-architecture-overview#persistent-storage">持久化</a>多于一次的时候,消息就会<strong>重复</strong>。 消息<strong><em>去重</em></strong>是Pulsar可选的特性,阻止不必要的消息重复,每条消息仅处理一次,<em>即使消息被接收多次</em></p>
+<p>当消息被Pulsar<a href="concepts-architecture-overview.md#persistent-storage">持久化</a>多于一次的时候,消息就会<strong>重复</strong>。 消息<strong><em>去重</em></strong>是Pulsar可选的特性,阻止不必要的消息重复,每条消息仅处理一次,<em>即使消息被接收多次</em></p>
 <p>下图展示了开启和关闭消息去重的场景:</p>
 <p><img src="assets/message-deduplication.png" alt="Pulsar消息去重"></p>
-<p>最上面的场景中,消息去重被关闭。 Producer发布消息1到一个topic,消息到达broker后,被<a href="/docs/zh-CN/next/concepts-architecture-overview#persistent-storage">持久化</a>到BookKeeper。 然后producer又发送了消息1(可能因为某些重试逻辑),然后消息被接收后又持久化在BookKeeper,这意味着消息重复发生了。</p>
+<p>最上面的场景中,消息去重被关闭。 Producer发布消息1到一个topic,消息到达broker后,被<a href="concepts-architecture-overview.md#persistent-storage">持久化</a>到BookKeeper。 然后producer又发送了消息1(可能因为某些重试逻辑),然后消息被接收后又持久化在BookKeeper,这意味着消息重复发生了。</p>
 <p>在第二个场景中,producer发送了消息1,消息被broker接收然后持久化,和第一个场景是一样的。 当producer再次发送消息时,broker知道已经收到个消息1,所以不会再持久化消息1.</p>
 <blockquote>
-<p>消息去重在命名空间层面处理。更多介绍请参考 <a href="/docs/zh-CN/next/cookbooks-deduplication">message deduplication cookbook</a>.</p>
+<p>消息去重在命名空间层面处理。更多介绍请参考 <a href="cookbooks-deduplication.md">message deduplication cookbook</a>.</p>
 </blockquote>
 <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>消息去重的另外一种方法是确保每条消息<em>仅生产一次</em>。 这种方法通常被叫做<strong>生产者幂等</strong>。 这种方式的缺点是,把消息去重的工作推给了应用去做。 在Pulsar中,去重被<a href="/docs/zh-CN/next/reference-terminology#broker">broker</a>处理的,这意味着你不需要修改你的客户端代码。 你只需要做一些管理上的变化(参考<a href="/docs/zh-CN/next/cookbooks-deduplication">Managing message deduplication</a> )</p>
+<p>消息去重的另外一种方法是确保每条消息<em>仅生产一次</em>。 这种方法通常被叫做<strong>生产者幂等</strong>。 这种方式的缺点是,把消息去重的工作推给了应用去做。 在Pulsar中,去重被<a href="reference-terminology.md#broker">broker</a>处理的,这意味着你不需要修改你的客户端代码。 你只需要做一些管理上的变化(参考<a href="cookbooks-deduplication.md">Managing message deduplication</a> )</p>
 <h3><a class="anchor" aria-hidden="true" id="去重和实际一次语义"></a><a href="#去重和实际一次语义" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
 <p>消息去重,使Pulsar成为与流处理引擎(SPE)或者其他寻求<a href="https://streaml.io/blog/exactly-once">实际一次</a>处理语义的系统连接的完美消息系统。 消息系统若不提供自动消息去重,则需要SPE或者其他系统保证去重。这意味着严格的消息顺序来自于让程序承担额外的去重工作。 使用Pulsar,严格的顺序保证不会带来任何应用层面的代价。</p>
 <blockquote>
diff --git a/content/docs/zh-CN/next/deploy-aws.html b/content/docs/zh-CN/next/deploy-aws.html
index b3cdb7a..45f8f41 100644
--- a/content/docs/zh-CN/next/deploy-aws.html
+++ b/content/docs/zh-CN/next/deploy-aws.html
@@ -138,9 +138,9 @@ id_rsa               id_rsa.pub
 <li>9 total <a href="https://aws.amazon.com/ec2">Elastic Compute Cloud</a> (EC2) instances running the <a href="https://access.redhat.com/articles/3135091">ami-9fa343e7</a> Amazon Machine Image (AMI), which runs <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/7.4_release_notes/index">Red Hat Enterprise Linux (RHEL) 7.4</a>. By default, that includes:
 <ul>
 <li>3 small VMs for ZooKeeper (<a href="https://www.ec2instances.info/?selected=t2.small">t2.small</a> instances)</li>
-<li>3 larger VMs for BookKeeper <a href="/docs/zh-CN/next/reference-terminology#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
-<li>2 larger VMs for Pulsar <a href="/docs/zh-CN/next/reference-terminology#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
-<li>1 larger VMs for Pulsar <a href="/docs/zh-CN/next/reference-terminology#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>3 larger VMs for BookKeeper <a href="reference-terminology.md#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
+<li>2 larger VMs for Pulsar <a href="reference-terminology.md#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>1 larger VMs for Pulsar <a href="reference-terminology.md#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
 </ul></li>
 <li>An EC2 <a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html">security group</a></li>
 <li>A <a href="https://aws.amazon.com/vpc/">virtual private cloud</a> (VPC) for security</li>
diff --git a/content/docs/zh-CN/next/deploy-aws/index.html b/content/docs/zh-CN/next/deploy-aws/index.html
index b3cdb7a..45f8f41 100644
--- a/content/docs/zh-CN/next/deploy-aws/index.html
+++ b/content/docs/zh-CN/next/deploy-aws/index.html
@@ -138,9 +138,9 @@ id_rsa               id_rsa.pub
 <li>9 total <a href="https://aws.amazon.com/ec2">Elastic Compute Cloud</a> (EC2) instances running the <a href="https://access.redhat.com/articles/3135091">ami-9fa343e7</a> Amazon Machine Image (AMI), which runs <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/7.4_release_notes/index">Red Hat Enterprise Linux (RHEL) 7.4</a>. By default, that includes:
 <ul>
 <li>3 small VMs for ZooKeeper (<a href="https://www.ec2instances.info/?selected=t2.small">t2.small</a> instances)</li>
-<li>3 larger VMs for BookKeeper <a href="/docs/zh-CN/next/reference-terminology#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
-<li>2 larger VMs for Pulsar <a href="/docs/zh-CN/next/reference-terminology#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
-<li>1 larger VMs for Pulsar <a href="/docs/zh-CN/next/reference-terminology#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>3 larger VMs for BookKeeper <a href="reference-terminology.md#bookie">bookies</a> (<a href="https://www.ec2instances.info/?selected=i3.xlarge">i3.xlarge</a> instances)</li>
+<li>2 larger VMs for Pulsar <a href="reference-terminology.md#broker">brokers</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
+<li>1 larger VMs for Pulsar <a href="reference-terminology.md#proxy">proxy</a> (<a href="https://www.ec2instances.info/?selected=c5.2xlarge">c5.2xlarge</a> instances)</li>
 </ul></li>
 <li>An EC2 <a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html">security group</a></li>
 <li>A <a href="https://aws.amazon.com/vpc/">virtual private cloud</a> (VPC) for security</li>
diff --git a/content/docs/zh-CN/next/deploy-bare-metal.html b/content/docs/zh-CN/next/deploy-bare-metal.html
index 253da54..0f71c33 100644
--- a/content/docs/zh-CN/next/deploy-bare-metal.html
+++ b/content/docs/zh-CN/next/deploy-bare-metal.html
@@ -223,7 +223,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <pre><code class="hljs">
 Once you've applied the desired configuration in <span class="hljs-code">`conf/bookkeeper.conf`</span>, you can start up a bookie on each of your BookKeeper hosts. You can start up each bookie either in the background, using [<span class="hljs-string">nohup</span>](<span class="hljs-link">https://en.wikipedia.org/wiki/Nohup</span>), or in the foreground.
 
-To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">/docs/zh-CN/next/reference-cli-tools#pulsar-daemon</span>) CLI tool:
+To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-daemon</span>) CLI tool:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-daemon start bookie
@@ -231,18 +231,18 @@ $ bin/pulsar-daemon start bookie
 <p>To start the bookie in the foreground:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper bookie
 </code></pre>
-<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="/docs/zh-CN/next/reference-cli-tools#shell">BookKeeper shell</a> on it:</p>
+<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on it:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell bookiesanity
 </code></pre>
 <p>This will create an ephemeral BookKeeper ledger on the local bookie, write a few entries, read them back, and finally delete the ledger.</p>
-<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="/docs/zh-CN/next/reference-cli-tools#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
+<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell simpletest --ensemble &lt;num-bookies&gt; --writeQuorum &lt;num-bookies&gt; --ackQuorum &lt;num-bookies&gt; --numEntries &lt;num-entries&gt;
 </code></pre>
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
 <h3><a class="anchor" aria-hidden="true" id="configuring-brokers"></a><a href="#configuring-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.2 [...]
-<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="/docs/zh-CN/next/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="/docs/zh-CN/next/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup,  [...]
+<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
@@ -250,7 +250,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="enabling-pulsar-functions-optional"></a><a href="#enabling-pulsar-functions-optional" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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>If you want to enable <a href="/docs/zh-CN/next/functions-overview">Pulsar Functions</a>, you can follow the instructions as below:</p>
+<p>If you want to enable <a href="functions-overview.md">Pulsar Functions</a>, you can follow the instructions as below:</p>
 <ol>
 <li><p>Edit <code>conf/broker.conf</code> to enable function worker, by setting <code>functionsWorkerEnabled</code> to <code>true</code>.</p>
 <pre><code class="hljs css language-conf"><span class="hljs-attr">functionsWorkerEnabled</span>=<span class="hljs-literal">true</span>
@@ -262,17 +262,17 @@ $ bin/pulsar-daemon start bookie
 </code></pre></li>
 </ol>
 <h3><a class="anchor" aria-hidden="true" id="starting-brokers"></a><a href="#starting-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. [...]
-<p>You can then provide any other configuration changes that you'd like in the <a href="/docs/zh-CN/next/reference-configuration#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
-<p>You can start a broker in the foreground using the <a href="/docs/zh-CN/next/reference-cli-tools#pulsar-broker"><code>pulsar broker</code></a> command:</p>
+<p>You can then provide any other configuration changes that you'd like in the <a href="reference-configuration.md#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
+<p>You can start a broker in the foreground using the <a href="reference-cli-tools.md#pulsar-broker"><code>pulsar broker</code></a> command:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar broker
 </code></pre>
-<p>You can start a broker in the background using the <a href="/docs/zh-CN/next/reference-cli-tools#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
+<p>You can start a broker in the background using the <a href="reference-cli-tools.md#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-daemon start broker
 </code></pre>
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-cluster" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S1 [...]
-<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="/docs/zh-CN/next/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/zh-CN/next/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
+<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="reference-cli-tools.md#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -300,7 +300,7 @@ $ bin/pulsar-daemon start bookie
   --namespace default \
   --name exclamation
 </code></pre>
-<p>Check if the function is running as expected by <a href="/docs/zh-CN/next/functions-deploying#triggering-pulsar-functions">triggering</a> the function.</p>
+<p>Check if the function is running as expected by <a href="functions-deploying.md#triggering-pulsar-functions">triggering</a> the function.</p>
 <pre><code class="hljs css language-bash">bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger --name exclamation --trigger-value <span class="hljs-string">"hello world"</span>
 </code></pre>
 <p>You will see output as below:</p>
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 253da54..0f71c33 100644
--- a/content/docs/zh-CN/next/deploy-bare-metal/index.html
+++ b/content/docs/zh-CN/next/deploy-bare-metal/index.html
@@ -223,7 +223,7 @@ $ <span class="hljs-built_in">echo</span> 1 &gt; data/zookeeper/myid
 <pre><code class="hljs">
 Once you've applied the desired configuration in <span class="hljs-code">`conf/bookkeeper.conf`</span>, you can start up a bookie on each of your BookKeeper hosts. You can start up each bookie either in the background, using [<span class="hljs-string">nohup</span>](<span class="hljs-link">https://en.wikipedia.org/wiki/Nohup</span>), or in the foreground.
 
-To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">/docs/zh-CN/next/reference-cli-tools#pulsar-daemon</span>) CLI tool:
+To start the bookie in the background, use the [<span class="hljs-string">`pulsar-daemon`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-daemon</span>) CLI tool:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-daemon start bookie
@@ -231,18 +231,18 @@ $ bin/pulsar-daemon start bookie
 <p>To start the bookie in the foreground:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper bookie
 </code></pre>
-<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="/docs/zh-CN/next/reference-cli-tools#shell">BookKeeper shell</a> on it:</p>
+<p>You can verify that a bookie is working properly by running the <code>bookiesanity</code> command for the <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on it:</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell bookiesanity
 </code></pre>
 <p>This will create an ephemeral BookKeeper ledger on the local bookie, write a few entries, read them back, and finally delete the ledger.</p>
-<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="/docs/zh-CN/next/reference-cli-tools#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
+<p>After you have started all the bookies, you can use <code>simpletest</code> command for <a href="reference-cli-tools.md#shell">BookKeeper shell</a> on any bookie node, to verify all the bookies in the cluster are up running.</p>
 <pre><code class="hljs css language-bash">$ bin/bookkeeper shell simpletest --ensemble &lt;num-bookies&gt; --writeQuorum &lt;num-bookies&gt; --ackQuorum &lt;num-bookies&gt; --numEntries &lt;num-entries&gt;
 </code></pre>
 <p>This command will create a <code>num-bookies</code> sized ledger on the cluster, write a few entries, and finally delete the ledger.</p>
 <h2><a class="anchor" aria-hidden="true" id="deploying-pulsar-brokers"></a><a href="#deploying-pulsar-brokers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Pulsar brokers are the last thing you need to deploy in your Pulsar cluster. Brokers handle Pulsar messages and provide Pulsar's administrative interface. We recommend running <strong>3 brokers</strong>, one for each machine that's already running a BookKeeper bookie.</p>
 <h3><a class="anchor" aria-hidden="true" id="configuring-brokers"></a><a href="#configuring-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.2 [...]
-<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="/docs/zh-CN/next/reference-configuration#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="/docs/zh-CN/next/reference-configuration#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup,  [...]
+<p>The most important element of broker configuration is ensuring that that each broker is aware of the ZooKeeper cluster that you've deployed. Make sure that the <a href="reference-configuration.md#broker-zookeeperServers"><code>zookeeperServers</code></a> and <a href="reference-configuration.md#broker-configurationStoreServers"><code>configurationStoreServers</code></a> parameters. In this case, since we only have 1 cluster and no configuration store setup, the <code>configurationStore [...]
 <pre><code class="hljs css language-properties"><span class="hljs-attr">zookeeperServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 <span class="hljs-attr">configurationStoreServers</span>=<span class="hljs-string">zk1.us-west.example.com:2181,zk2.us-west.example.com:2181,zk3.us-west.example.com:2181</span>
 </code></pre>
@@ -250,7 +250,7 @@ $ bin/pulsar-daemon start bookie
 <pre><code class="hljs css language-properties"><span class="hljs-attr">clusterName</span>=<span class="hljs-string">pulsar-cluster-1</span>
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="enabling-pulsar-functions-optional"></a><a href="#enabling-pulsar-functions-optional" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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>If you want to enable <a href="/docs/zh-CN/next/functions-overview">Pulsar Functions</a>, you can follow the instructions as below:</p>
+<p>If you want to enable <a href="functions-overview.md">Pulsar Functions</a>, you can follow the instructions as below:</p>
 <ol>
 <li><p>Edit <code>conf/broker.conf</code> to enable function worker, by setting <code>functionsWorkerEnabled</code> to <code>true</code>.</p>
 <pre><code class="hljs css language-conf"><span class="hljs-attr">functionsWorkerEnabled</span>=<span class="hljs-literal">true</span>
@@ -262,17 +262,17 @@ $ bin/pulsar-daemon start bookie
 </code></pre></li>
 </ol>
 <h3><a class="anchor" aria-hidden="true" id="starting-brokers"></a><a href="#starting-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. [...]
-<p>You can then provide any other configuration changes that you'd like in the <a href="/docs/zh-CN/next/reference-configuration#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
-<p>You can start a broker in the foreground using the <a href="/docs/zh-CN/next/reference-cli-tools#pulsar-broker"><code>pulsar broker</code></a> command:</p>
+<p>You can then provide any other configuration changes that you'd like in the <a href="reference-configuration.md#broker"><code>conf/broker.conf</code></a> file. Once you've decided on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, brokers can be started either in the foreground or in the background, using nohup.</p>
+<p>You can start a broker in the foreground using the <a href="reference-cli-tools.md#pulsar-broker"><code>pulsar broker</code></a> command:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar broker
 </code></pre>
-<p>You can start a broker in the background using the <a href="/docs/zh-CN/next/reference-cli-tools#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
+<p>You can start a broker in the background using the <a href="reference-cli-tools.md#pulsar-daemon"><code>pulsar-daemon</code></a> CLI tool:</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-daemon start broker
 </code></pre>
 <p>Once you've succesfully started up all the brokers you intend to use, your Pulsar cluster should be ready to go!</p>
 <h2><a class="anchor" aria-hidden="true" id="connecting-to-the-running-cluster"></a><a href="#connecting-to-the-running-cluster" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S1 [...]
-<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="/docs/zh-CN/next/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
-<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="/docs/zh-CN/next/reference-configuration#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
+<p>Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the <a href="reference-cli-tools.md#pulsar-client"><code>pulsar-client</code></a> tool, which is included with the Pulsar binary package. The <code>pulsar-client</code> tool can publish messages to and consume messages from Pulsar topics and thus provides a simple way to make sure that your cluster is runnning properly.</p>
+<p>To use the <code>pulsar-client</code> tool, first modify the client configuration file in <a href="reference-configuration.md#client"><code>conf/client.conf</code></a> in your binary package. You'll need to change the values for <code>webServiceUrl</code> and <code>brokerServiceUrl</code>, substituting <code>localhost</code> (which is the default), with the DNS name that you've assigned to your broker/bookie hosts. Here's an example:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-attr">webServiceUrl</span>=<span class="hljs-string">http://us-west.example.com:8080/</span>
 <span class="hljs-attr">brokerServiceurl</span>=<span class="hljs-string">pulsar://us-west.example.com:6650/</span>
 </code></pre>
@@ -300,7 +300,7 @@ $ bin/pulsar-daemon start bookie
   --namespace default \
   --name exclamation
 </code></pre>
-<p>Check if the function is running as expected by <a href="/docs/zh-CN/next/functions-deploying#triggering-pulsar-functions">triggering</a> the function.</p>
+<p>Check if the function is running as expected by <a href="functions-deploying.md#triggering-pulsar-functions">triggering</a> the function.</p>
 <pre><code class="hljs css language-bash">bin/pulsar-admin <span class="hljs-built_in">functions</span> trigger --name exclamation --trigger-value <span class="hljs-string">"hello world"</span>
 </code></pre>
 <p>You will see output as below:</p>
diff --git a/content/docs/zh-CN/next/functions-quickstart.html b/content/docs/zh-CN/next/functions-quickstart.html
index 68c15c1..53fc04f 100644
--- a/content/docs/zh-CN/next/functions-quickstart.html
+++ b/content/docs/zh-CN/next/functions-quickstart.html
@@ -90,7 +90,7 @@ $ bin/pulsar standalone \
 </blockquote>
 <p>--inputs topic1,topic2</p>
 <pre><code class="hljs">
-We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">/docs/zh-CN/next/reference-cli-tools#pulsar-client</span>) tool to listen for messages on the output topic:
+We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-client</span>) tool to listen for messages on the output topic:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-client consume persistent://public/default/exclamation-output \
@@ -117,7 +117,7 @@ Hello world!
 <li>If our exclamation function <em>hadn't</em> been running, Pulsar would have durably stored the message data published to the input topic in <a href="https://bookkeeper.apache.org">Apache BookKeeper</a> until a consumer consumed and acknowledged the message</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="run-a-pulsar-function-in-cluster-mode"></a><a href="#run-a-pulsar-function-in-cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 [...]
-<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="/docs/zh-CN/next/pulsar-admin#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
+<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="reference-pulsar-admin.md#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
 <p>This command, for example, would deploy the same exclamation function we ran locally above <em>in our Pulsar cluster</em> (rather than outside it):</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --jar examples/api-examples.jar \
@@ -201,7 +201,7 @@ Hello world!
 <p>If you see <code>Deleted successfully</code> in the output, then you've succesfully run, updated, and shut down a Pulsar Function running in cluster mode. Congrats! Now, let's go even further and run a brand new function in the next section.</p>
 <h2><a class="anchor" aria-hidden="true" id="writing-and-running-a-new-function"></a><a href="#writing-and-running-a-new-function" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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 [...]
 <blockquote>
-<p>In order to write and run the <a href="/docs/zh-CN/next/functions-api#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
+<p>In order to write and run the <a href="functions-api.md#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
 <pre><code class="hljs css language-bash"></code></pre>
 </blockquote>
 <p>$ pip install pulsar-client</p>
diff --git a/content/docs/zh-CN/next/functions-quickstart/index.html b/content/docs/zh-CN/next/functions-quickstart/index.html
index 68c15c1..53fc04f 100644
--- a/content/docs/zh-CN/next/functions-quickstart/index.html
+++ b/content/docs/zh-CN/next/functions-quickstart/index.html
@@ -90,7 +90,7 @@ $ bin/pulsar standalone \
 </blockquote>
 <p>--inputs topic1,topic2</p>
 <pre><code class="hljs">
-We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">/docs/zh-CN/next/reference-cli-tools#pulsar-client</span>) tool to listen for messages on the output topic:
+We can open up another shell and use the [<span class="hljs-string">`pulsar-client`</span>](<span class="hljs-link">reference-cli-tools.md#pulsar-client</span>) tool to listen for messages on the output topic:
 
 <span class="hljs-code">```bash
 $ bin/pulsar-client consume persistent://public/default/exclamation-output \
@@ -117,7 +117,7 @@ Hello world!
 <li>If our exclamation function <em>hadn't</em> been running, Pulsar would have durably stored the message data published to the input topic in <a href="https://bookkeeper.apache.org">Apache BookKeeper</a> until a consumer consumed and acknowledged the message</li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="run-a-pulsar-function-in-cluster-mode"></a><a href="#run-a-pulsar-function-in-cluster-mode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 [...]
-<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="/docs/zh-CN/next/pulsar-admin#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
+<p><a href="#run-a-pulsar-function-in-local-run-mode">Local run mode</a> is useful for development and experimentation, but if you want to use Pulsar Functions in a real Pulsar deployment, you'll want to run them in <strong>cluster mode</strong>. In this mode, Pulsar Functions run <em>inside</em> your Pulsar cluster and are managed using the same <a href="reference-pulsar-admin.md#functions"><code>pulsar-admin functions</code></a> interface that we've been using thus far.</p>
 <p>This command, for example, would deploy the same exclamation function we ran locally above <em>in our Pulsar cluster</em> (rather than outside it):</p>
 <pre><code class="hljs css language-bash">$ bin/pulsar-admin <span class="hljs-built_in">functions</span> create \
   --jar examples/api-examples.jar \
@@ -201,7 +201,7 @@ Hello world!
 <p>If you see <code>Deleted successfully</code> in the output, then you've succesfully run, updated, and shut down a Pulsar Function running in cluster mode. Congrats! Now, let's go even further and run a brand new function in the next section.</p>
 <h2><a class="anchor" aria-hidden="true" id="writing-and-running-a-new-function"></a><a href="#writing-and-running-a-new-function" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 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 [...]
 <blockquote>
-<p>In order to write and run the <a href="/docs/zh-CN/next/functions-api#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
+<p>In order to write and run the <a href="functions-api.md#functions-for-python">Python</a> function below, you'll need to install a few dependencies:</p>
 <pre><code class="hljs css language-bash"></code></pre>
 </blockquote>
 <p>$ pip install pulsar-client</p>
diff --git a/content/docs/zh-CN/next/security-token-admin.html b/content/docs/zh-CN/next/security-token-admin.html
index 1b1fc10..4db2449 100644
--- a/content/docs/zh-CN/next/security-token-admin.html
+++ b/content/docs/zh-CN/next/security-token-admin.html
@@ -62,7 +62,7 @@ will need one.
 &gt; #### Always use TLS transport encryption
 &gt; Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 &gt; always use TLS encryption when talking to the Pulsar service. See
-&gt; [Transport Encryption using TLS](/docs/zh-CN/next/security-tls-transport)
+&gt; [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/content/docs/zh-CN/next/security-token-admin/index.html b/content/docs/zh-CN/next/security-token-admin/index.html
index 1b1fc10..4db2449 100644
--- a/content/docs/zh-CN/next/security-token-admin/index.html
+++ b/content/docs/zh-CN/next/security-token-admin/index.html
@@ -62,7 +62,7 @@ will need one.
 &gt; #### Always use TLS transport encryption
 &gt; Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 &gt; always use TLS encryption when talking to the Pulsar service. See
-&gt; [Transport Encryption using TLS](/docs/zh-CN/next/security-tls-transport)
+&gt; [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/content/docs/zh-CN/next/security-token-client.html b/content/docs/zh-CN/next/security-token-client.html
index 4be164b..cc6d6a6 100644
--- a/content/docs/zh-CN/next/security-token-client.html
+++ b/content/docs/zh-CN/next/security-token-client.html
@@ -59,12 +59,12 @@ Application will specify the token when creating the client instance. An alterna
 a &quot;token supplier&quot;, that is to say a function that returns the token when the client library
 will need one.
 
-See [Token authentication admin](/docs/zh-CN/next/security-token-admin) for a reference on how to enable token
+See [Token authentication admin](security-token-admin.md) for a reference on how to enable token
 authentication on a Pulsar cluster.
 
 ### CLI tools
 
-[Command-line tools](/docs/zh-CN/next/reference-cli-tools) like [`pulsar-admin`](/docs/zh-CN/next/pulsar-admin), [`pulsar-perf`](/docs/zh-CN/next/reference-cli-tools#pulsar-perf), and [`pulsar-client`](/docs/zh-CN/next/reference-cli-tools#pulsar-client) use the `conf/client.conf` config file in a Pulsar installation.
+[Command-line tools](reference-cli-tools.md) like [`pulsar-admin`](reference-pulsar-admin.md), [`pulsar-perf`](reference-cli-tools.md#pulsar-perf), and [`pulsar-client`](reference-cli-tools.md#pulsar-client) use the `conf/client.conf` config file in a Pulsar installation.
 
 You'll need to add the following parameters to that file to use the token authentication with
 Pulsar's CLI tools:
diff --git a/content/docs/zh-CN/next/security-token-client/index.html b/content/docs/zh-CN/next/security-token-client/index.html
index 4be164b..cc6d6a6 100644
--- a/content/docs/zh-CN/next/security-token-client/index.html
+++ b/content/docs/zh-CN/next/security-token-client/index.html
@@ -59,12 +59,12 @@ Application will specify the token when creating the client instance. An alterna
 a &quot;token supplier&quot;, that is to say a function that returns the token when the client library
 will need one.
 
-See [Token authentication admin](/docs/zh-CN/next/security-token-admin) for a reference on how to enable token
+See [Token authentication admin](security-token-admin.md) for a reference on how to enable token
 authentication on a Pulsar cluster.
 
 ### CLI tools
 
-[Command-line tools](/docs/zh-CN/next/reference-cli-tools) like [`pulsar-admin`](/docs/zh-CN/next/pulsar-admin), [`pulsar-perf`](/docs/zh-CN/next/reference-cli-tools#pulsar-perf), and [`pulsar-client`](/docs/zh-CN/next/reference-cli-tools#pulsar-client) use the `conf/client.conf` config file in a Pulsar installation.
+[Command-line tools](reference-cli-tools.md) like [`pulsar-admin`](reference-pulsar-admin.md), [`pulsar-perf`](reference-cli-tools.md#pulsar-perf), and [`pulsar-client`](reference-cli-tools.md#pulsar-client) use the `conf/client.conf` config file in a Pulsar installation.
 
 You'll need to add the following parameters to that file to use the token authentication with
 Pulsar's CLI tools:
diff --git a/content/ja/adaptors/PulsarSpark/index.html b/content/ja/adaptors/PulsarSpark/index.html
index 51c3895..34dd969 100644
--- a/content/ja/adaptors/PulsarSpark/index.html
+++ b/content/ja/adaptors/PulsarSpark/index.html
@@ -762,9 +762,9 @@
           
           
           
+          <li><a href="/ja/adaptors/PulsarSpark/">Spark Streaming Pulsar Receiver</a></li>
           
           
-          <li><a href="/ja/adaptors/PulsarSpark/">Spark Streaming Pulsar Receiver</a></li>
           
           
           
@@ -1008,9 +1008,9 @@
           
           
           
+          <li><a href="/ja/adaptors/PulsarSpark/">Spark Streaming Pulsar Receiver</a></li>
           
           
-          <li><a href="/ja/adaptors/PulsarSpark/">Spark Streaming Pulsar Receiver</a></li>
           
           
           
@@ -1224,8 +1224,6 @@
           
           
           
-          
-          
           <li><a href="/ja/clients/Java/">Pulsar Javaクライアント</a></li>
           
           
@@ -1387,6 +1385,8 @@
           
           
           
+          
+          
         </ul>
       </div>
     </div>
diff --git a/content/ja/adaptors/PulsarStorm/index.html b/content/ja/adaptors/PulsarStorm/index.html
index 8d8ca73..d24d155 100644
--- a/content/ja/adaptors/PulsarStorm/index.html
+++ b/content/ja/adaptors/PulsarStorm/index.html
@@ -766,9 +766,9 @@
           
           
           
+          <li><a href="/ja/adaptors/PulsarStorm/">Apache StormのためのPulsarアダプタ</a></li>
           
           
-          <li><a href="/ja/adaptors/PulsarStorm/">Apache StormのためのPulsarアダプタ</a></li>
           
           
           
@@ -978,8 +978,6 @@
           
           
           
-          
-          
           <li><a href="/ja/clients/Java/">Pulsar Javaクライアント</a></li>
           
           
@@ -1141,6 +1139,8 @@
           
           
           
+          
+          
         </ul>
       </div>
     </div>
diff --git a/content/ja/admin/AdminInterface/index.html b/content/ja/admin/AdminInterface/index.html
index 9a1d3fa..5a8fbe4 100644
--- a/content/ja/admin/AdminInterface/index.html
+++ b/content/ja/admin/AdminInterface/index.html
@@ -692,9 +692,9 @@
           
           
           
+          <li><a href="/ja/reference/CliTools/">Pulsarコマンドラインツール</a></li>
           
           
-          <li><a href="/ja/reference/CliTools/">Pulsarコマンドラインツール</a></li>
           
           
           
@@ -762,9 +762,9 @@
           
           
           
+          <li><a href="/ja/advanced/PartitionedTopics/">パーティションドトピック</a></li>
           
           
-          <li><a href="/ja/advanced/PartitionedTopics/">パーティションドトピック</a></li>
           
           
           
@@ -792,9 +792,9 @@
           
           
           
+          <li><a href="/ja/advanced/RetentionExpiry/">メッセージの保存と有効期限</a></li>
           
           
-          <li><a href="/ja/advanced/RetentionExpiry/">メッセージの保存と有効期限</a></li>
           
           
           
@@ -950,9 +950,9 @@
           
           
           
+          <li><a href="/ja/reference/CliTools/">Pulsarコマンドラインツール</a></li>
           
           
-          <li><a href="/ja/reference/CliTools/">Pulsarコマンドラインツール</a></li>
           
           
           
@@ -1486,8 +1486,6 @@
           
           
           
-          
-          
           <li><a href="/ja/clients/Java/">Pulsar Javaクライアント</a></li>
           
           
@@ -1649,6 +1647,8 @@
           
           
           
+          
+          
         </ul>
       </div>
     </div>
diff --git a/content/ja/admin/Authz/index.html b/content/ja/admin/Authz/index.html
index f31d19b..910e23f 100644
--- a/content/ja/admin/Authz/index.html
+++ b/content/ja/admin/Authz/index.html
@@ -692,9 +692,9 @@
           
           
           
+          <li><a href="/ja/reference/CliTools/">Pulsarコマンドラインツール</a></li>
           
           
-          <li><a href="/ja/reference/CliTools/">Pulsarコマンドラインツール</a></li>
           
           
           
@@ -762,9 +762,9 @@
           
           
           
+          <li><a href="/ja/advanced/PartitionedTopics/">パーティションドトピック</a></li>
           
           
-          <li><a href="/ja/advanced/PartitionedTopics/">パーティションドトピック</a></li>
           
           
           
@@ -792,9 +792,9 @@
           
           
           
+          <li><a href="/ja/advanced/RetentionExpiry/">メッセージの保存と有効期限</a></li>
           
           
-          <li><a href="/ja/advanced/RetentionExpiry/">メッセージの保存と有効期限</a></li>
           
           
           
@@ -1976,8 +1976,6 @@
           
           
           
-          
-          
           <li><a href="/ja/clients/Java/">Pulsar Javaクライアント</a></li>
           
           
@@ -2139,6 +2137,8 @@
           
           
           
+          
+          
         </ul>
       </div>
     </div>
@@ -2212,9 +2212,9 @@
           
           
           
+          <li><a href="/ja/clients/Cpp/">Pulsar C++クライアント</a></li>
           
           
-          <li><a href="/ja/clients/Cpp/">Pulsar C++クライアント</a></li>
           
           
           
diff --git a/content/ja/admin/ClustersBrokers/index.html b/content/ja/admin/ClustersBrokers/index.html
index 0c37b98..ad4bdb4 100644
--- a/content/ja/admin/ClustersBrokers/index.html
+++ b/content/ja/admin/ClustersBrokers/index.html
@@ -692,9 +692,9 @@
           
           
           
+          <li><a href="/ja/reference/CliTools/">Pulsarコマンドラインツール</a></li>
           
           
-          <li><a href="/ja/reference/CliTools/">Pulsarコマンドラインツール</a></li>
           
           
           
@@ -762,9 +762,9 @@
           
           
           
+          <li><a href="/ja/advanced/PartitionedTopics/">パーティションドトピック</a></li>
           
           
-          <li><a href="/ja/advanced/PartitionedTopics/">パーティションドトピック</a></li>
           
           
           
@@ -792,9 +792,9 @@
           
           
           
+          <li><a href="/ja/advanced/RetentionExpiry/">メッセージの保存と有効期限</a></li>
           
           
-          <li><a href="/ja/advanced/RetentionExpiry/">メッセージの保存と有効期限</a></li>
           
           
           
diff --git a/content/ja/admin/PropertiesNamespaces/index.html b/content/ja/admin/PropertiesNamespaces/index.html
index 050393b..807551e 100644
--- a/content/ja/admin/PropertiesNamespaces/index.html
+++ b/content/ja/admin/PropertiesNamespaces/index.html
@@ -1184,9 +1184,9 @@
           
           
           
+          <li><a href="/ja/reference/CliTools/">Pulsarコマンドラインツール</a></li>
           
           
-          <li><a href="/ja/reference/CliTools/">Pulsarコマンドラインツール</a></li>
           
           
           
@@ -1254,9 +1254,9 @@
           
           
           
+          <li><a href="/ja/advanced/PartitionedTopics/">パーティションドトピック</a></li>
           
           
-          <li><a href="/ja/advanced/PartitionedTopics/">パーティションドトピック</a></li>
           
           
           
@@ -1284,9 +1284,9 @@
           
           
           
+          <li><a href="/ja/advanced/RetentionExpiry/">メッセージの保存と有効期限</a></li>
           
           
-          <li><a href="/ja/advanced/RetentionExpiry/">メッセージの保存と有効期限</a></li>
           
           
           
diff --git a/content/ja/advanced/PartitionedTopics/index.html b/content/ja/advanced/PartitionedTopics/index.html
index 3ab5407..4297a12 100644
--- a/content/ja/advanced/PartitionedTopics/index.html
+++ b/content/ja/advanced/PartitionedTopics/index.html
@@ -752,9 +752,9 @@
           
           
           
+          <li><a href="/ja/advanced/PartitionedTopics/">パーティションドトピック</a></li>
           
           
-          <li><a href="/ja/advanced/PartitionedTopics/">パーティションドトピック</a></li>
           
           
           
@@ -998,9 +998,9 @@
           
           
           
+          <li><a href="/ja/advanced/PartitionedTopics/">パーティションドトピック</a></li>
           
           
-          <li><a href="/ja/advanced/PartitionedTopics/">パーティションドトピック</a></li>
           
           
           
@@ -1184,9 +1184,9 @@
           
           
           
+          <li><a href="/ja/reference/CliTools/">Pulsarコマンドラインツール</a></li>
           
           
-          <li><a href="/ja/reference/CliTools/">Pulsarコマンドラインツール</a></li>
           
           
           
@@ -1254,9 +1254,9 @@
           
           
           
+          <li><a href="/ja/advanced/PartitionedTopics/">パーティションドトピック</a></li>
           
           
-          <li><a href="/ja/advanced/PartitionedTopics/">パーティションドトピック</a></li>
           
           
           
@@ -1284,9 +1284,9 @@
           
           
           
+          <li><a href="/ja/advanced/RetentionExpiry/">メッセージの保存と有効期限</a></li>
           
           
-          <li><a href="/ja/advanced/RetentionExpiry/">メッセージの保存と有効期限</a></li>
           
           
           
@@ -1504,9 +1504,9 @@
           
           
           
+          <li><a href="/ja/advanced/PartitionedTopics/">パーティションドトピック</a></li>
           
           
-          <li><a href="/ja/advanced/PartitionedTopics/">パーティションドトピック</a></li>
           
           
           
diff --git a/content/ja/advanced/RetentionExpiry/index.html b/content/ja/advanced/RetentionExpiry/index.html
index eb7d4b0..fd6137c 100644
--- a/content/ja/advanced/RetentionExpiry/index.html
+++ b/content/ja/advanced/RetentionExpiry/index.html
@@ -692,9 +692,9 @@
           
           
           
+          <li><a href="/ja/reference/CliTools/">Pulsarコマンドラインツール</a></li>
           
           
-          <li><a href="/ja/reference/CliTools/">Pulsarコマンドラインツール</a></li>
           
           
           
@@ -762,9 +762,9 @@
           
           
           
+          <li><a href="/ja/advanced/PartitionedTopics/">パーティションドトピック</a></li>
           
           
-          <li><a href="/ja/advanced/PartitionedTopics/">パーティションドトピック</a></li>
           
           
           
@@ -792,9 +792,9 @@
           
           
           
+          <li><a href="/ja/advanced/RetentionExpiry/">メッセージの保存と有効期限</a></li>
           
           
-          <li><a href="/ja/advanced/RetentionExpiry/">メッセージの保存と有効期限</a></li>
           
           
           
@@ -1038,9 +1038,9 @@
           
           
           
+          <li><a href="/ja/advanced/RetentionExpiry/">メッセージの保存と有効期限</a></li>
           
           
-          <li><a href="/ja/advanced/RetentionExpiry/">メッセージの保存と有効期限</a></li>
           
           
           
@@ -1284,9 +1284,9 @@
           
           
           
+          <li><a href="/ja/advanced/RetentionExpiry/">メッセージの保存と有効期限</a></li>
           
           
-          <li><a href="/ja/advanced/RetentionExpiry/">メッセージの保存と有効期限</a></li>
           
           
           
@@ -1530,9 +1530,9 @@
           
           
           
+          <li><a href="/ja/advanced/RetentionExpiry/">メッセージの保存と有効期限</a></li>
           
           
-          <li><a href="/ja/advanced/RetentionExpiry/">メッセージの保存と有効期限</a></li>
           
           
           
diff --git a/content/ja/clients/Cpp/index.html b/content/ja/clients/Cpp/index.html
index e51d5eb..e6411a1 100644
--- a/content/ja/clients/Cpp/index.html
+++ b/content/ja/clients/Cpp/index.html
@@ -688,8 +688,6 @@
           
           
           
-          
-          
           <li><a href="/ja/reference/CliTools/">Pulsarコマンドラインツール</a></li>
           
           
@@ -893,6 +891,8 @@
           
           
           
+          
+          
         </ul>
       </div>
     </div>
@@ -966,9 +966,9 @@
           
           
           
+          <li><a href="/ja/clients/Cpp/">Pulsar C++クライアント</a></li>
           
           
-          <li><a href="/ja/clients/Cpp/">Pulsar C++クライアント</a></li>
           
           
           
diff --git a/content/ja/clients/Java/index.html b/content/ja/clients/Java/index.html
index 2a626c7..e543182 100644
--- a/content/ja/clients/Java/index.html
+++ b/content/ja/clients/Java/index.html
@@ -688,8 +688,6 @@
           
           
           
-          
-          
           <li><a href="/ja/reference/CliTools/">Pulsarコマンドラインツール</a></li>
           
           
@@ -893,6 +891,8 @@
           
           
           
+          
+          
         </ul>
       </div>
     </div>
@@ -984,8 +984,6 @@
           
           
           
-          
-          
           <li><a href="/ja/clients/Java/">Pulsar Javaクライアント</a></li>
           
           
@@ -1147,6 +1145,8 @@
           
           
           
+          
+          
         </ul>
       </div>
     </div>
diff --git a/content/ja/clients/Python/index.html b/content/ja/clients/Python/index.html
index b937ecf..ed49516 100644
--- a/content/ja/clients/Python/index.html
+++ b/content/ja/clients/Python/index.html
@@ -688,8 +688,6 @@
           
           
           
-          
-          
           <li><a href="/ja/reference/CliTools/">Pulsarコマンドラインツール</a></li>
           
           
@@ -893,6 +891,8 @@
           
           
           
+          
+          
         </ul>
       </div>
     </div>
@@ -1022,8 +1022,6 @@
           
           
           
-          
-          
           <li><a href="/ja/clients/Python/">Pulsar Pythonクライアント</a></li>
           
           
@@ -1141,6 +1139,8 @@
           
           
           
+          
+          
         </ul>
       </div>
     </div>
diff --git a/content/ja/clients/WebSocket/index.html b/content/ja/clients/WebSocket/index.html
index ee0d865..b7b7730 100644
--- a/content/ja/clients/WebSocket/index.html
+++ b/content/ja/clients/WebSocket/index.html
@@ -790,9 +790,9 @@
           
           
           
+          <li><a href="/ja/clients/WebSocket/">PulsarにおけるWebSocket API</a></li>
           
           
-          <li><a href="/ja/clients/WebSocket/">PulsarにおけるWebSocket API</a></li>
           
           
           
@@ -1036,9 +1036,9 @@
           
           
           
+          <li><a href="/ja/clients/WebSocket/">PulsarにおけるWebSocket API</a></li>
           
           
-          <li><a href="/ja/clients/WebSocket/">PulsarにおけるWebSocket API</a></li>
           
           
           
@@ -1262,8 +1262,6 @@
           
           
           
-          
-          
           <li><a href="/ja/clients/Python/">Pulsar Pythonクライアント</a></li>
           
           
@@ -1381,6 +1379,8 @@
           
           
           
+          
+          
         </ul>
       </div>
     </div>
diff --git a/content/ja/deployment/InstanceSetup/index.html b/content/ja/deployment/InstanceSetup/index.html
index d12999b..6499654 100644
--- a/content/ja/deployment/InstanceSetup/index.html
+++ b/content/ja/deployment/InstanceSetup/index.html
@@ -692,9 +692,9 @@
           
           
           
+          <li><a href="/ja/reference/CliTools/">Pulsarコマンドラインツール</a></li>
           
           
-          <li><a href="/ja/reference/CliTools/">Pulsarコマンドラインツール</a></li>
           
           
           
@@ -762,9 +762,9 @@
           
           
           
+          <li><a href="/ja/advanced/PartitionedTopics/">パーティションドトピック</a></li>
           
           
-          <li><a href="/ja/advanced/PartitionedTopics/">パーティションドトピック</a></li>
           
           
           
@@ -792,9 +792,9 @@
           
           
           
+          <li><a href="/ja/advanced/RetentionExpiry/">メッセージの保存と有効期限</a></li>
           
           
-          <li><a href="/ja/advanced/RetentionExpiry/">メッセージの保存と有効期限</a></li>
           
           
           
diff --git a/content/ja/deployment/Kubernetes/index.html b/content/ja/deployment/Kubernetes/index.html
index 4dd17d9..dd736d4 100644
--- a/content/ja/deployment/Kubernetes/index.html
+++ b/content/ja/deployment/Kubernetes/index.html
@@ -734,9 +734,9 @@
           
           
           
+          <li><a href="/ja/deployment/Kubernetes/">Kubernetes上でのPulsarのデプロイ</a></li>
           
           
-          <li><a href="/ja/deployment/Kubernetes/">Kubernetes上でのPulsarのデプロイ</a></li>
           
           
           
@@ -980,9 +980,9 @@
           
           
           
+          <li><a href="/ja/deployment/Kubernetes/">Kubernetes上でのPulsarのデプロイ</a></li>
           
           
-          <li><a href="/ja/deployment/Kubernetes/">Kubernetes上でのPulsarのデプロイ</a></li>
           
           
           
diff --git a/content/ja/getting-started/ConceptsAndArchitecture/index.html b/content/ja/getting-started/ConceptsAndArchitecture/index.html
index 0efaab5..6c57f6a 100644
--- a/content/ja/getting-started/ConceptsAndArchitecture/index.html
+++ b/content/ja/getting-started/ConceptsAndArchitecture/index.html
@@ -704,9 +704,9 @@
           
           
           
+          <li><a href="/ja/getting-started/ConceptsAndArchitecture/">Pulsarのコンセプトとアーキテクチャ</a></li>
           
           
-          <li><a href="/ja/getting-started/ConceptsAndArchitecture/">Pulsarのコンセプトとアーキテクチャ</a></li>
           
           
           
diff --git a/content/ja/getting-started/LocalCluster/index.html b/content/ja/getting-started/LocalCluster/index.html
index bcf9413..f3a8dca 100644
--- a/content/ja/getting-started/LocalCluster/index.html
+++ b/content/ja/getting-started/LocalCluster/index.html
@@ -740,9 +740,9 @@
           
           
           
+          <li><a href="/ja/getting-started/LocalCluster/">ローカルスタンドアローンクラスタのセットアップ</a></li>
           
           
-          <li><a href="/ja/getting-started/LocalCluster/">ローカルスタンドアローンクラスタのセットアップ</a></li>
           
           
           
@@ -986,9 +986,9 @@
           
           
           
+          <li><a href="/ja/getting-started/LocalCluster/">ローカルスタンドアローンクラスタのセットアップ</a></li>
           
           
-          <li><a href="/ja/getting-started/LocalCluster/">ローカルスタンドアローンクラスタのセットアップ</a></li>
           
           
           
diff --git a/content/ja/project/BinaryProtocol/index.html b/content/ja/project/BinaryProtocol/index.html
index f595218..642f8fd 100644
--- a/content/ja/project/BinaryProtocol/index.html
+++ b/content/ja/project/BinaryProtocol/index.html
@@ -684,9 +684,9 @@
           
           
           
+          <li><a href="/ja/project/BinaryProtocol/">Pulsarのバイナリプロトコルの仕様</a></li>
           
           
-          <li><a href="/ja/project/BinaryProtocol/">Pulsarのバイナリプロトコルの仕様</a></li>
           
           
           
@@ -930,9 +930,9 @@
           
           
           
+          <li><a href="/ja/project/BinaryProtocol/">Pulsarのバイナリプロトコルの仕様</a></li>
           
           
-          <li><a href="/ja/project/BinaryProtocol/">Pulsarのバイナリプロトコルの仕様</a></li>
           
           
           
diff --git a/content/ja/project/SimulationTools/index.html b/content/ja/project/SimulationTools/index.html
index b9b8152..e5a28bb 100644
--- a/content/ja/project/SimulationTools/index.html
+++ b/content/ja/project/SimulationTools/index.html
@@ -782,9 +782,9 @@
           
           
           
+          <li><a href="/ja/project/SimulationTools/">シミュレーションツール</a></li>
           
           
-          <li><a href="/ja/project/SimulationTools/">シミュレーションツール</a></li>
           
           
           
diff --git a/content/ja/reference/CliTools/index.html b/content/ja/reference/CliTools/index.html
index 97c8e05..eb25626 100644
--- a/content/ja/reference/CliTools/index.html
+++ b/content/ja/reference/CliTools/index.html
@@ -692,9 +692,9 @@
           
           
           
+          <li><a href="/ja/reference/CliTools/">Pulsarコマンドラインツール</a></li>
           
           
-          <li><a href="/ja/reference/CliTools/">Pulsarコマンドラインツール</a></li>
           
           
           
@@ -762,9 +762,9 @@
           
           
           
+          <li><a href="/ja/advanced/PartitionedTopics/">パーティションドトピック</a></li>
           
           
-          <li><a href="/ja/advanced/PartitionedTopics/">パーティションドトピック</a></li>
           
           
           
@@ -792,9 +792,9 @@
           
           
           
+          <li><a href="/ja/advanced/RetentionExpiry/">メッセージの保存と有効期限</a></li>
           
           
-          <li><a href="/ja/advanced/RetentionExpiry/">メッセージの保存と有効期限</a></li>
           
           
           
@@ -950,9 +950,9 @@
           
           
           
+          <li><a href="/ja/reference/CliTools/">Pulsarコマンドラインツール</a></li>
           
           
-          <li><a href="/ja/reference/CliTools/">Pulsarコマンドラインツール</a></li>
           
           
           
@@ -1196,8 +1196,6 @@
           
           
           
-          
-          
           <li><a href="/ja/reference/CliTools/">Pulsarコマンドラインツール</a></li>
           
           
@@ -1401,6 +1399,8 @@
           
           
           
+          
+          
         </ul>
       </div>
     </div>
@@ -1448,9 +1448,9 @@
           
           
           
+          <li><a href="/ja/reference/CliTools/">Pulsarコマンドラインツール</a></li>
           
           
-          <li><a href="/ja/reference/CliTools/">Pulsarコマンドラインツール</a></li>
           
           
           
@@ -1694,9 +1694,9 @@
           
           
           
+          <li><a href="/ja/reference/CliTools/">Pulsarコマンドラインツール</a></li>
           
           
-          <li><a href="/ja/reference/CliTools/">Pulsarコマンドラインツール</a></li>
           
           
           
@@ -1940,9 +1940,9 @@
           
           
           
+          <li><a href="/ja/reference/CliTools/">Pulsarコマンドラインツール</a></li>
           
           
-          <li><a href="/ja/reference/CliTools/">Pulsarコマンドラインツール</a></li>
           
           
           
diff --git a/content/swagger/swagger.json b/content/swagger/swagger.json
index b3a9ded..30ed71e 100644
--- a/content/swagger/swagger.json
+++ b/content/swagger/swagger.json
@@ -6882,8 +6882,14 @@
           "type" : "number",
           "format" : "double"
         },
-        "cpu" : {
-          "$ref" : "#/definitions/ResourceUsage"
+        "underLoaded" : {
+          "type" : "boolean"
+        },
+        "overLoaded" : {
+          "type" : "boolean"
+        },
+        "loadReportType" : {
+          "type" : "string"
         },
         "memory" : {
           "$ref" : "#/definitions/ResourceUsage"
@@ -6909,14 +6915,8 @@
           "type" : "number",
           "format" : "double"
         },
-        "underLoaded" : {
-          "type" : "boolean"
-        },
-        "overLoaded" : {
-          "type" : "boolean"
-        },
-        "loadReportType" : {
-          "type" : "string"
+        "cpu" : {
+          "$ref" : "#/definitions/ResourceUsage"
         }
       }
     },
@@ -7898,11 +7898,11 @@
     "ResourceUnit" : {
       "type" : "object",
       "properties" : {
-        "resourceId" : {
-          "type" : "string"
-        },
         "availableResource" : {
           "$ref" : "#/definitions/ResourceDescription"
+        },
+        "resourceId" : {
+          "type" : "string"
         }
       }
     },