You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by li...@apache.org on 2022/10/25 02:30:22 UTC

[pulsar] branch master updated: [fix][doc] fix many anchor errors

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

liuyu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git


The following commit(s) were added to refs/heads/master by this push:
     new 91562d223b9 [fix][doc] fix many anchor errors
91562d223b9 is described below

commit 91562d223b99a6f12f18bb4eedd96d806c88cef1
Author: labuladong <la...@foxmail.com>
AuthorDate: Tue Oct 25 10:30:15 2022 +0800

    [fix][doc] fix many anchor errors
---
 site2/docs/admin-api-brokers.md                   |  2 +-
 site2/docs/admin-api-clusters.md                  |  4 ++--
 site2/docs/admin-api-permissions.md               |  2 +-
 site2/docs/administration-geo.md                  |  4 ++--
 site2/docs/administration-isolation-bookie.md     |  2 +-
 site2/docs/administration-isolation-broker.md     |  2 +-
 site2/docs/administration-isolation.md            |  6 +++---
 site2/docs/administration-load-balance.md         |  2 +-
 site2/docs/administration-zk-bk.md                | 12 ++++++------
 site2/docs/client-libraries-go.md                 |  2 +-
 site2/docs/client-libraries-websocket.md          |  2 +-
 site2/docs/concepts-messaging.md                  |  6 +++---
 site2/docs/concepts-replication.md                |  4 ++--
 site2/docs/cookbooks-compaction.md                |  4 ++--
 site2/docs/cookbooks-deduplication.md             |  6 +++---
 site2/docs/cookbooks-non-persistent.md            |  8 ++++----
 site2/docs/cookbooks-retention-expiry.md          |  2 +-
 site2/docs/deploy-aws.md                          |  4 ++--
 site2/docs/deploy-bare-metal-multi-cluster.md     | 22 +++++++++++-----------
 site2/docs/deploy-bare-metal.md                   | 22 +++++++++++-----------
 site2/docs/deploy-dcos.md                         |  2 +-
 site2/docs/develop-load-manager.md                |  2 +-
 site2/docs/functions-cli.md                       |  4 ++--
 site2/docs/functions-deploy-cluster-encryption.md |  2 +-
 site2/docs/functions-deploy-trigger.md            |  4 ++--
 site2/docs/functions-develop-metrics.md           |  2 +-
 site2/docs/functions-develop-security.md          |  2 +-
 site2/docs/functions-develop.md                   |  2 +-
 site2/docs/functions-worker-run-separately.md     |  4 ++--
 site2/docs/getting-started-pulsar.md              |  4 ++--
 site2/docs/getting-started-standalone.md          |  4 ++--
 site2/docs/helm-deploy.md                         |  2 +-
 site2/docs/helm-prepare.md                        |  2 +-
 site2/docs/io-cassandra-sink.md                   |  2 +-
 site2/docs/io-connectors.md                       | 10 +++++-----
 site2/docs/io-debug.md                            |  6 +++---
 site2/docs/io-overview.md                         |  8 ++++----
 site2/docs/io-use.md                              |  2 +-
 site2/docs/performance-pulsar-perf.md             |  4 ++--
 site2/docs/reference-metrics.md                   |  2 +-
 site2/docs/schema-evolution-compatibility.md      |  2 +-
 site2/docs/schema-understand.md                   |  2 +-
 site2/docs/security-athenz.md                     |  6 +++---
 site2/docs/security-jwt.md                        |  2 +-
 site2/docs/security-oauth2.md                     |  2 +-
 site2/docs/security-overview.md                   |  2 +-
 site2/docs/security-tls-authentication.md         |  2 +-
 site2/docs/security-tls-transport.md              |  2 +-
 site2/docs/tiered-storage-aliyun.md               |  2 +-
 site2/docs/tiered-storage-aws.md                  |  2 +-
 site2/docs/tiered-storage-azure.md                |  2 +-
 site2/docs/tiered-storage-filesystem.md           |  4 ++--
 site2/docs/tiered-storage-gcs.md                  |  2 +-
 site2/docs/tiered-storage-s3.md                   |  2 +-
 54 files changed, 111 insertions(+), 111 deletions(-)

diff --git a/site2/docs/admin-api-brokers.md b/site2/docs/admin-api-brokers.md
index 9d20b06a5c5..dec95a900fc 100644
--- a/site2/docs/admin-api-brokers.md
+++ b/site2/docs/admin-api-brokers.md
@@ -147,7 +147,7 @@ admin.brokers().getOwnedNamespaces(cluster,brokerUrl);
 
 ### Dynamic broker configuration
 
-One way to configure a Pulsar [broker](reference-terminology.md#broker) is to supply a [configuration](reference-configuration.md#broker) when the broker is [started up](reference-cli-tools.md#pulsar-broker).
+One way to configure a Pulsar [broker](reference-terminology.md#broker) is to supply a [configuration](reference-configuration.md#broker) when the broker is [started up](reference-cli-tools.md).
 
 But since all broker configuration in Pulsar is stored in ZooKeeper, configuration values can also be dynamically updated *while the broker is running*. When you update broker configuration dynamically, ZooKeeper will notify the broker of the change and the broker will then override any existing configuration values.
 
diff --git a/site2/docs/admin-api-clusters.md b/site2/docs/admin-api-clusters.md
index 97faab5f20c..1c73f642bf8 100644
--- a/site2/docs/admin-api-clusters.md
+++ b/site2/docs/admin-api-clusters.md
@@ -96,8 +96,8 @@ You must initialize cluster metadata *before* starting up any [brokers](admin-ap
 >
 > Unlike most other admin functions in Pulsar, cluster metadata initialization cannot be performed via the admin REST API
 > or the admin Java client, as metadata initialization involves communicating with ZooKeeper directly.
-> Instead, you can use the [`pulsar`](reference-cli-tools.md#pulsar) CLI tool, in particular
-> the [`initialize-cluster-metadata`](reference-cli-tools.md#pulsar-initialize-cluster-metadata) command.
+> Instead, you can use the [`pulsar`](reference-cli-tools.md) CLI tool, in particular
+> the [`initialize-cluster-metadata`](reference-cli-tools.md) command.
 
 Here's an example cluster metadata initialization command:
 
diff --git a/site2/docs/admin-api-permissions.md b/site2/docs/admin-api-permissions.md
index d1b58ef67a0..b4d95fc2d1d 100644
--- a/site2/docs/admin-api-permissions.md
+++ b/site2/docs/admin-api-permissions.md
@@ -28,7 +28,7 @@ Pulsar allows you to grant namespace-level or topic-level permission to users.
 
 - If you grant topic-level permission to a user, then the user can access only the topic.
 
-The chapters below demonstrate how to grant namespace-level permissions to users. For how to grant topic-level permissions to users, see [manage topics](admin-api-topics.md/#grant-permission).
+The chapters below demonstrate how to grant namespace-level permissions to users. For how to grant topic-level permissions to users, see [manage topics](admin-api-topics.md#grant-permission).
 
 ## Grant permissions
 
diff --git a/site2/docs/administration-geo.md b/site2/docs/administration-geo.md
index 2044b665603..cce2e607b3d 100644
--- a/site2/docs/administration-geo.md
+++ b/site2/docs/administration-geo.md
@@ -19,7 +19,7 @@ Geo-replication is managed at the namespace level, which means you only need to
 Complete the following tasks to enable geo-replication for a namespace:
 
 * [Enable a geo-replication namespace](#enable-geo-replication-at-namespace-level)
-* [Configure that namespace to replicate across two or more provisioned clusters](admin-api-namespaces.md/#configure-replication-clusters)
+* [Configure that namespace to replicate across two or more provisioned clusters](admin-api-namespaces.md#configure-replication-clusters)
 
 Any message published on *any* topic in that namespace is replicated to all clusters in the specified set.
 
@@ -238,7 +238,7 @@ Consumer<String> consumer = client.newConsumer(Schema.STRING)
 
 ## Migrate data between clusters using geo-replication
 
-Using geo-replication to migrate data between clusters is a special use case of the [active-active replication pattern](concepts-replication.md/#active-active-replication) when you don't have a large amount of data.
+Using geo-replication to migrate data between clusters is a special use case of the [active-active replication pattern](concepts-replication.md#active-active-replication) when you don't have a large amount of data.
 
 1. Create your new cluster.
 2. Add the new cluster to your old cluster.
diff --git a/site2/docs/administration-isolation-bookie.md b/site2/docs/administration-isolation-bookie.md
index 4ebbe576921..9351c4d4146 100644
--- a/site2/docs/administration-isolation-bookie.md
+++ b/site2/docs/administration-isolation-bookie.md
@@ -19,7 +19,7 @@ Bookie isolation is controlled by BookKeeper clients. For Pulsar, there are two
    * The bookie replication worker writes ledger replicas to target bookies according to the configured isolation policy.
 
 To isolate bookies, you need to complete the following tasks.
-1. Select a [data isolation policy](#understand-bookie-data-isolation-policies) based on your requirements.
+1. Select a [data isolation policy](#understand-bookie-data-isolation-policy) based on your requirements.
 2. [Enable the policy on BookKeeper clients](#enable-bookie-data-placement-policy).
 3. [Configure the policy on bookie instances](#configure-data-placement-policy-on-bookie-instances).
 
diff --git a/site2/docs/administration-isolation-broker.md b/site2/docs/administration-isolation-broker.md
index b23e2f9754a..3a868e6dd8b 100644
--- a/site2/docs/administration-isolation-broker.md
+++ b/site2/docs/administration-isolation-broker.md
@@ -55,6 +55,6 @@ For how to set namespace isolation policy using Java admin API, see [code](https
 
 :::tip
 
-To guarantee all the data that belongs to a namespace is stored in desired bookies, you can isolate the data of the namespace into user-defined groups of bookies. See [configure bookie affinity groups](#configure-bookie-affinity-groups) for more details.
+To guarantee all the data that belongs to a namespace is stored in desired bookies, you can isolate the data of the namespace into user-defined groups of bookies. See [configure bookie affinity groups](administration-isolation-bookie.md#configure-bookie-affinity-groups) for more details.
 
 :::
\ No newline at end of file
diff --git a/site2/docs/administration-isolation.md b/site2/docs/administration-isolation.md
index cb4ecd19986..4e78fe8095c 100644
--- a/site2/docs/administration-isolation.md
+++ b/site2/docs/administration-isolation.md
@@ -34,10 +34,10 @@ The following illustration demonstrates the deployment of separate Pulsar cluste
 ![Deployment of separate Pulsar clusters](/assets/isolation-1.png)
 
 Here are some key points for understanding how it works:
-- Separate Pulsar clusters use a shared [configuration store](concepts-architecture-overview.md/#configuration-store).
+- Separate Pulsar clusters use a shared [configuration store](concepts-architecture-overview.md#configuration-store).
 - Each cluster exposes its service through a DNS entry point and makes sure a client can access the cluster through the DNS entry point. Clients can use one or multiple Pulsar URLs that the Pulsar cluster exposes as the service URL.
 - Each Pulsar cluster has one or multiple brokers and bookies.
-- Each Pulsar cluster has one metadata store, which can be separated into [Pulsar metadata store](concepts-architecture-overview.md/#metadata-store) and [BookKeeper metadata store](https://bookkeeper.apache.org/docs/latest/getting-started/concepts/#metadata-storage). 
+- Each Pulsar cluster has one metadata store, which can be separated into [Pulsar metadata store](concepts-architecture-overview.md#metadata-store) and [BookKeeper metadata store](https://bookkeeper.apache.org/docs/latest/getting-started/concepts/#metadata-storage). 
 
 :::note
 
@@ -52,7 +52,7 @@ The following illustration demonstrates the deployment of shared BookKeeper clus
 ![Deployment of shared BookKeeper cluster](/assets/isolation-2.png)
 
 Here are some key points for understanding how it works:
-- Separate Pulsar clusters share a BookKeeper cluster and a [configuration store](concepts-architecture-overview.md/#configuration-store).
+- Separate Pulsar clusters share a BookKeeper cluster and a [configuration store](concepts-architecture-overview.md#configuration-store).
 - Each cluster exposes its service through a DNS entry point and makes sure a client can access the cluster through the DNS entry point. Clients can use one or multiple Pulsar URLs that the Pulsar cluster exposes as the service URL.
 - Each Pulsar cluster has one or multiple brokers.
 - Each Pulsar cluster has one metadata store. 
diff --git a/site2/docs/administration-load-balance.md b/site2/docs/administration-load-balance.md
index c3d887335bc..99542a0f534 100644
--- a/site2/docs/administration-load-balance.md
+++ b/site2/docs/administration-load-balance.md
@@ -120,7 +120,7 @@ Pulsar supports the following types of automatic load shedding strategies.
 :::note
 
 * From Pulsar 2.10, the **default** shedding strategy is `ThresholdShedder`.
-* You need to restart brokers if the shedding strategy is [dynamically updated](admin-api-brokers.md/#dynamic-broker-configuration).
+* You need to restart brokers if the shedding strategy is [dynamically updated](admin-api-brokers.md#dynamic-broker-configuration).
 
 :::
 
diff --git a/site2/docs/administration-zk-bk.md b/site2/docs/administration-zk-bk.md
index 03cc889d676..a4be8cfdce0 100644
--- a/site2/docs/administration-zk-bk.md
+++ b/site2/docs/administration-zk-bk.md
@@ -52,7 +52,7 @@ echo 1 > data/zookeeper/myid
 
 On `zk2.us-west.example.com` the command is `echo 2 > data/zookeeper/myid` and so on.
 
-Once you add each server to the `zookeeper.conf` configuration and each server has the appropriate `myid` entry, you can start ZooKeeper on all hosts (in the background, using nohup) with the [`pulsar-daemon`](reference-cli-tools.md#pulsar-daemon) CLI tool:
+Once you add each server to the `zookeeper.conf` configuration and each server has the appropriate `myid` entry, you can start ZooKeeper on all hosts (in the background, using nohup) with the [`pulsar-daemon`](reference-cli-tools.md) CLI tool:
 
 ```shell
 bin/pulsar-daemon start zookeeper
@@ -68,7 +68,7 @@ If you deploy a [single-cluster](#single-cluster-pulsar-instance) instance, you
 
 If your Pulsar instance consists of just one cluster, then you can deploy a configuration store on the same machines as the local ZooKeeper quorum but run on different TCP ports.
 
-To deploy a ZooKeeper configuration store in a single-cluster instance, add the same ZooKeeper servers that the local quorum uses to the configuration file in [`conf/global_zookeeper.conf`](reference-configuration.md#configuration-store) using the same method for [local ZooKeeper](#local-zookeeper), but make sure to use a different port (2181 is the default for ZooKeeper). The following is an example that uses port 2184 for a three-node ZooKeeper cluster:
+To deploy a ZooKeeper configuration store in a single-cluster instance, add the same ZooKeeper servers that the local quorum uses to the configuration file in [`conf/global_zookeeper.conf`](reference-configuration.md#configuration-store) using the same method for [local ZooKeeper](#deploy-local-zookeeper), but make sure to use a different port (2181 is the default for ZooKeeper). The following is an example that uses port 2184 for a three-node ZooKeeper cluster:
 
 ```properties
 clientPort=2184
@@ -122,7 +122,7 @@ peerType=observer
 
 ##### Start the service
 
-Once your configuration store configuration is in place, you can start up the service using [`pulsar-daemon`](reference-cli-tools.md#pulsar-daemon)
+Once your configuration store configuration is in place, you can start up the service using [`pulsar-daemon`](reference-cli-tools.md)
 
 ```shell
 bin/pulsar-daemon start configuration-store
@@ -201,19 +201,19 @@ BookKeeper provides [persistent message storage](concepts-architecture-overview.
 
 You can start a bookie in the foreground or as a background daemon.
 
-To start a bookie in the foreground, use the [`bookkeeper`](reference-cli-tools.md#bookkeeper) CLI tool:
+To start a bookie in the foreground, use the [`bookkeeper`](reference-cli-tools.md) CLI tool:
 
 ```bash
 bin/bookkeeper bookie
 ```
 
-To start a bookie in the background, use the [`pulsar-daemon`](reference-cli-tools.md#pulsar-daemon) CLI tool:
+To start a bookie in the background, use the [`pulsar-daemon`](reference-cli-tools.md) CLI tool:
 
 ```bash
 bin/pulsar-daemon start bookie
 ```
 
-You can verify whether the bookie works properly with the `bookiesanity` command for the [BookKeeper shell](reference-cli-tools.md#bookkeeper-shell):
+You can verify whether the bookie works properly with the `bookiesanity` command for the [BookKeeper shell](reference-cli-tools.md):
 
 ```shell
 bin/bookkeeper shell bookiesanity
diff --git a/site2/docs/client-libraries-go.md b/site2/docs/client-libraries-go.md
index 7ab2b416aab..8ca9f269f5e 100644
--- a/site2/docs/client-libraries-go.md
+++ b/site2/docs/client-libraries-go.md
@@ -65,7 +65,7 @@ pulsar+ssl://pulsar.us-west.example.com:6651
 
 ## Create a client
 
-To interact with Pulsar, you need a [`Client`](https://pkg.go.dev/github.com/apache/pulsar-client-go/pulsar#Client) object first. You can create a client object using the [`NewClient`](https://pkg.go.dev/github.com/apache/pulsar-client-go/pulsar#NewClient) function, passing in a [`ClientOptions`](https://pkg.go.dev/github.com/apache/pulsar-client-go/pulsar#ClientOptions) object (more on configuration [below](#client-configuration)). Here's an example:
+To interact with Pulsar, you need a [`Client`](https://pkg.go.dev/github.com/apache/pulsar-client-go/pulsar#Client) object first. You can create a client object using the [`NewClient`](https://pkg.go.dev/github.com/apache/pulsar-client-go/pulsar#NewClient) function, passing in a [`ClientOptions`](https://pkg.go.dev/github.com/apache/pulsar-client-go/pulsar#ClientOptions) object. Here's an example:
 
 ```go
 import (
diff --git a/site2/docs/client-libraries-websocket.md b/site2/docs/client-libraries-websocket.md
index c154961be06..ac45e6444d0 100644
--- a/site2/docs/client-libraries-websocket.md
+++ b/site2/docs/client-libraries-websocket.md
@@ -62,7 +62,7 @@ cryptoKeyReaderFactoryClassName=org.apache.pulsar.MyCryptoKeyReaderFactoryClassI
 
 ### Starting the broker
 
-When the configuration is set, you can start the service using the [`pulsar-daemon`](reference-cli-tools.md#pulsar-daemon) tool:
+When the configuration is set, you can start the service using the [`pulsar-daemon`](reference-cli-tools.md) tool:
 
 ```shell
 bin/pulsar-daemon start websocket
diff --git a/site2/docs/concepts-messaging.md b/site2/docs/concepts-messaging.md
index 617982393ac..a115b96ce0e 100644
--- a/site2/docs/concepts-messaging.md
+++ b/site2/docs/concepts-messaging.md
@@ -525,7 +525,7 @@ If no tenant or namespace is specified when a client creates a topic, the topic
 
 ## Namespaces
 
-A namespace is a logical nomenclature within a tenant. A tenant creates namespaces via the [admin API](admin-api-namespaces.md#create). For instance, a tenant with different applications can create a separate namespace for each application. A namespace allows the application to create and manage a hierarchy of topics. The topic `my-tenant/app1` is a namespace for the application `app1` for `my-tenant`. You can create any number of [topics](#topics) under the namespace.
+A namespace is a logical nomenclature within a tenant. A tenant creates namespaces via the [admin API](admin-api-namespaces.md#create-namespaces). For instance, a tenant with different applications can create a separate namespace for each application. A namespace allows the application to create and manage a hierarchy of topics. The topic `my-tenant/app1` is a namespace for the application `app1` for `my-tenant`. You can create any number of [topics](#topics) under the namespace.
 
 ## Subscriptions
 
@@ -712,7 +712,7 @@ After a consumer is created, the default subscription mode of the consumer is `D
 </Tabs>
 ````
 
-For how to create, check, or delete a durable subscription, see [manage subscriptions](admin-api-topics.md/#manage-subscriptions).
+For how to create, check, or delete a durable subscription, see [manage subscriptions](admin-api-topics.md#manage-subscriptions).
 
 ## Multi-topic subscriptions
 
@@ -846,7 +846,7 @@ Non-persistent messaging is usually faster than persistent messaging because bro
 
 Producers and consumers can connect to non-persistent topics in the same way as persistent topics, with the crucial difference that the topic name must start with `non-persistent`. All the subscription types---[exclusive](#exclusive), [shared](#shared), [key-shared](#key_shared) and [failover](#failover)---are supported for non-persistent topics.
 
-Here's an example [Java consumer](client-libraries-java.md#consumers) for a non-persistent topic:
+Here's an example [Java consumer](client-libraries-java.md#consumer) for a non-persistent topic:
 
 ```java
 PulsarClient client = PulsarClient.builder()
diff --git a/site2/docs/concepts-replication.md b/site2/docs/concepts-replication.md
index a47cd6038dc..64120d73e1e 100644
--- a/site2/docs/concepts-replication.md
+++ b/site2/docs/concepts-replication.md
@@ -43,7 +43,7 @@ Pulsar provides a great degree of flexibility for customizing your replication s
 
 ### Full-mesh replication
 
-Using full-mesh replication and applying the [selective message replication](administration-geo.md/#selective-replication), you can customize your replication strategies and topologies between any number of data centers.
+Using full-mesh replication and applying the [selective message replication](administration-geo.md#selective-replication), you can customize your replication strategies and topologies between any number of data centers.
 
 ![An example of a full-mesh replication pattern](/assets/full-mesh-replication.svg)
 
@@ -53,7 +53,7 @@ Active-active replication is a variation of full-mesh replication, with only two
 
 ![An example of an active-active replication pattern](/assets/active-active-replication.svg)
 
-For how to use active-active replication to migrate data between clusters, refer to [here](administration-geo.md/#migrate-data-between-clusters-using-geo-replication).
+For how to use active-active replication to migrate data between clusters, refer to [here](administration-geo.md#migrate-data-between-clusters-using-geo-replication).
 
 ### Aggregation replication
 
diff --git a/site2/docs/cookbooks-compaction.md b/site2/docs/cookbooks-compaction.md
index 95403af461d..561acd59bd8 100644
--- a/site2/docs/cookbooks-compaction.md
+++ b/site2/docs/cookbooks-compaction.md
@@ -4,7 +4,7 @@ title: Topic compaction
 sidebar_label: "Topic compaction"
 ---
 
-Pulsar's [topic compaction](concepts-topic-compaction.md#compaction) feature enables you to create **compacted** topics in which older, "obscured" entries are pruned from the topic, allowing for faster reads through the topic's history (which messages are deemed obscured/outdated/irrelevant will depend on your use case).
+Pulsar's [topic compaction](concepts-topic-compaction.md#topic-compaction-example-the-stock-ticker) feature enables you to create **compacted** topics in which older, "obscured" entries are pruned from the topic, allowing for faster reads through the topic's history (which messages are deemed obscured/outdated/irrelevant will depend on your use case).
 
 To use compaction:
 
@@ -49,7 +49,7 @@ bin/pulsar-admin topics compact \
 persistent://my-tenant/my-namespace/my-topic
 ```
 
-The `pulsar-admin` tool runs compaction via the Pulsar {@inject: rest:REST:/} API. To run compaction in its own dedicated process, i.e. *not* through the REST API, you can use the [`pulsar compact-topic`](reference-cli-tools.md#pulsar-compact-topic) command. Here's an example:
+The `pulsar-admin` tool runs compaction via the Pulsar {@inject: rest:REST:/} API. To run compaction in its own dedicated process, i.e. *not* through the REST API, you can use the [`pulsar compact-topic`](reference-cli-tools.md) command. Here's an example:
 
 ```bash
 bin/pulsar compact-topic \
diff --git a/site2/docs/cookbooks-deduplication.md b/site2/docs/cookbooks-deduplication.md
index 976670e87aa..4cf14141e63 100644
--- a/site2/docs/cookbooks-deduplication.md
+++ b/site2/docs/cookbooks-deduplication.md
@@ -84,7 +84,7 @@ The instructions for Java, Python, and C++ clients are different.
   values={[{"label":"Java clients","value":"Java clients"},{"label":"Python clients","value":"Python clients"},{"label":"C++ clients","value":"C++ clients"}]}>
 <TabItem value="Java clients">
 
-To ensure the guarantee order on a [Java producer](client-libraries-java.md#producers) sending to a topic with message deduplication enabled, set the producer name using the `producerName` setter, and set the timeout to `0` using the `sendTimeout` setter. 
+To ensure the guarantee order on a [Java producer](client-libraries-java.md#producer) sending to a topic with message deduplication enabled, set the producer name using the `producerName` setter, and set the timeout to `0` using the `sendTimeout` setter. 
 
 ```java
 import org.apache.pulsar.client.api.Producer;
@@ -104,7 +104,7 @@ Producer producer = pulsarClient.newProducer()
 </TabItem>
 <TabItem value="Python clients">
 
-Not to break the guarantee order on a [Python producer](client-libraries-python.md#producers) sending to a topic with message deduplication active, set the producer name using `producer_name`, and set the timeout to `0` using `send_timeout_millis`. 
+Not to break the guarantee order on a [Python producer](client-libraries-python.md) sending to a topic with message deduplication active, set the producer name using `producer_name`, and set the timeout to `0` using `send_timeout_millis`. 
 
 ```python
 import pulsar
@@ -118,7 +118,7 @@ producer = client.create_producer(
 
 </TabItem>
 <TabItem value="C++ clients">
-Not to break the guarantee order on a [C++ producer](client-libraries-cpp.md#producer) sending to a topic with message deduplication active, set the producer name using `producer_name`, and set the timeout to `0` using `send_timeout_millis`. 
+Not to break the guarantee order on a [C++ producer](client-libraries-cpp.md#create-a-producer) sending to a topic with message deduplication active, set the producer name using `producer_name`, and set the timeout to `0` using `send_timeout_millis`. 
 
 ```cpp
 #include <pulsar/Client.h>
diff --git a/site2/docs/cookbooks-non-persistent.md b/site2/docs/cookbooks-non-persistent.md
index ca8b4b76db8..9e1de5652c6 100644
--- a/site2/docs/cookbooks-non-persistent.md
+++ b/site2/docs/cookbooks-non-persistent.md
@@ -7,12 +7,12 @@ sidebar_label: "Non-persistent messaging"
 **Non-persistent topics** are Pulsar topics in which message data is *never* [persistently stored](concepts-architecture-overview.md#persistent-storage) and kept only in memory. This cookbook provides:
 
 * A basic [conceptual overview](#overview) of non-persistent topics
-* Information about [configurable parameters](#configuration) related to non-persistent topics
-* A guide to the [CLI interface](#cli) for managing non-persistent topics
+* Information about [configurable parameters](#configuration-for-standalone-mode) related to non-persistent topics
+* A guide to the [CLI interface](#manage-with-cli) for managing non-persistent topics
 
 ## Overview
 
-By default, Pulsar persistently stores *all* unacknowledged messages on multiple [BookKeeper](#persistent-storage) bookies (storage nodes). Data for messages on persistent topics can thus survive broker restarts and subscriber failover.
+By default, Pulsar persistently stores *all* unacknowledged messages on multiple bookies (storage nodes). Data for messages on persistent topics can thus survive broker restarts and subscriber failover.
 
 Pulsar also, however, supports **non-persistent topics**, which are topics on which messages are *never* persisted to disk and live only in memory. When using non-persistent delivery, killing a Pulsar [broker](reference-terminology.md#broker) or disconnecting a subscriber to a topic means that all in-transit messages are lost on that (non-persistent) topic, meaning that clients may see message loss.
 
@@ -26,7 +26,7 @@ non-persistent://tenant/namespace/topic
 
 ## Use
 
-To use non-persistent topics, you need to [enable](#enable) them in your Pulsar broker configuration and differentiate them by name when interacting with them. This [`pulsar-client produce`](reference-cli-tools.md#pulsar-client-produce) command, for example, would produce one message on a non-persistent topic in a standalone cluster:
+To use non-persistent topics, you need to [enable](#enable) them in your Pulsar broker configuration and differentiate them by name when interacting with them. This [`pulsar-client produce`](reference-cli-tools.md) command, for example, would produce one message on a non-persistent topic in a standalone cluster:
 
 ```bash
 bin/pulsar-client produce non-persistent://public/default/example-np-topic \
diff --git a/site2/docs/cookbooks-retention-expiry.md b/site2/docs/cookbooks-retention-expiry.md
index e50beb0fb39..5d75fb58c72 100644
--- a/site2/docs/cookbooks-retention-expiry.md
+++ b/site2/docs/cookbooks-retention-expiry.md
@@ -21,7 +21,7 @@ In Pulsar, you can modify this behavior, with namespace granularity, in two ways
 * You can persistently store messages that are not within a backlog (because they've been acknowledged by every existing subscription, or because there are no subscriptions) by setting [retention policies](#retention-policies).
 * Messages that are not acknowledged within a specified timeframe can be automatically acknowledged, by specifying the [time to live](#time-to-live-ttl) (TTL).
 
-Pulsar's [admin interface](admin-api-overview.md) enables you to manage both retention policies and TTL with namespace granularity (and thus within a specific tenant and either on a specific cluster or in the [`global`](concepts-architecture-overview.md#global-cluster) cluster).
+Pulsar's [admin interface](admin-api-overview.md) enables you to manage both retention policies and TTL with namespace granularity (and thus within a specific tenant and either on a specific cluster or in the [`global`](concepts-architecture-overview.md#clusters) cluster).
 
 
 > #### Retention and TTL solve two different problems
diff --git a/site2/docs/deploy-aws.md b/site2/docs/deploy-aws.md
index b4045b99695..80b598a57c5 100644
--- a/site2/docs/deploy-aws.md
+++ b/site2/docs/deploy-aws.md
@@ -126,7 +126,7 @@ When you run the Ansible playbook, the following AWS resources are used:
   * 3 small VMs for ZooKeeper ([t3.small](https://www.ec2instances.info/?selected=t3.small) instances)
   * 3 larger VMs for BookKeeper [bookies](reference-terminology.md#bookie) ([i3.xlarge](https://www.ec2instances.info/?selected=i3.xlarge) instances)
   * 2 larger VMs for Pulsar [brokers](reference-terminology.md#broker) ([c5.2xlarge](https://www.ec2instances.info/?selected=c5.2xlarge) instances)
-  * 1 larger VMs for Pulsar [proxy](reference-terminology.md#proxy) ([c5.2xlarge](https://www.ec2instances.info/?selected=c5.2xlarge) instances)
+  * 1 larger VMs for Pulsar [proxy](reference-terminology.md) ([c5.2xlarge](https://www.ec2instances.info/?selected=c5.2xlarge) instances)
 * An EC2 [security group](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html)
 * A [virtual private cloud](https://aws.amazon.com/vpc/) (VPC) for security
 * An [API Gateway](https://aws.amazon.com/api-gateway/) for connections from the outside world
@@ -200,7 +200,7 @@ ansible-playbook \
 
 ## Access the cluster
 
-You can now access your running Pulsar using the unique Pulsar connection URL for your cluster, which you can obtain following the instructions [above](#fetching-your-pulsar-connection-url).
+You can now access your running Pulsar using the unique Pulsar connection URL for your cluster, which you can obtain following the instructions [above](#fetch-your-pulsar-connection-url).
 
 For a quick demonstration of accessing the cluster, we can use the Python client for Pulsar and the Python shell. First, install the Pulsar Python module using pip:
 
diff --git a/site2/docs/deploy-bare-metal-multi-cluster.md b/site2/docs/deploy-bare-metal-multi-cluster.md
index 5ea4f035cf3..ac4add4a0ab 100644
--- a/site2/docs/deploy-bare-metal-multi-cluster.md
+++ b/site2/docs/deploy-bare-metal-multi-cluster.md
@@ -61,7 +61,7 @@ The Pulsar binary package initially contains the following directories:
 
 Directory | Contains
 :---------|:--------
-`bin` | [Command-line tools](reference-cli-tools.md) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](/tools/pulsar-admin/)
+`bin` | [Command-line tools](reference-cli-tools.md) of Pulsar, such as [`pulsar`](reference-cli-tools.md) and [`pulsar-admin`](/tools/pulsar-admin/)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
 `examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses 
@@ -117,7 +117,7 @@ echo 1 > data/zookeeper/myid
 
 On `zk2.us-west.example.com` the command looks like `echo 2 > data/zookeeper/myid` and so on.
 
-Once you add each server to the `zookeeper.conf` configuration and each server has the appropriate `myid` entry, you can start ZooKeeper on all hosts (in the background, using nohup) with the [`pulsar-daemon`](reference-cli-tools.md#pulsar-daemon) CLI tool:
+Once you add each server to the `zookeeper.conf` configuration and each server has the appropriate `myid` entry, you can start ZooKeeper on all hosts (in the background, using nohup) with the [`pulsar-daemon`](reference-cli-tools.md) CLI tool:
 
 ```shell
 bin/pulsar-daemon start zookeeper
@@ -133,7 +133,7 @@ If you deploy a single-cluster instance, you do not need a separate cluster for
 
 If your Pulsar instance consists of just one cluster, then you can deploy a configuration store on the same machines as the local ZooKeeper quorum but run on different TCP ports.
 
-To deploy a ZooKeeper configuration store in a single-cluster instance, add the same ZooKeeper servers to the local quorum. You need to use the configuration file in [`conf/global_zookeeper.conf`](reference-configuration.md#configuration-store) using the same method for [local ZooKeeper](#local-zookeeper), but make sure to use a different port (2181 is the default for ZooKeeper). The following is an example that uses port 2184 for a three-node ZooKeeper cluster:
+To deploy a ZooKeeper configuration store in a single-cluster instance, add the same ZooKeeper servers to the local quorum. You need to use the configuration file in [`conf/global_zookeeper.conf`](reference-configuration.md#configuration-store) using the same method for [local ZooKeeper](#deploy-local-zookeeper), but make sure to use a different port (2181 is the default for ZooKeeper). The following is an example that uses port 2184 for a three-node ZooKeeper cluster:
 
 ```properties
 clientPort=2184
@@ -191,7 +191,7 @@ peerType=observer
 
 ##### Start the service
 
-Once your configuration store configuration is in place, you can start up the service using [`pulsar-daemon`](reference-cli-tools.md#pulsar-daemon)
+Once your configuration store configuration is in place, you can start up the service using [`pulsar-daemon`](reference-cli-tools.md)
 
 ```shell
 bin/pulsar-daemon start configuration-store
@@ -201,7 +201,7 @@ bin/pulsar-daemon start configuration-store
 
 Once you set up the cluster-specific ZooKeeper and configuration store quorums for your instance, you need to write some metadata to ZooKeeper for each cluster in your instance. **you only need to write these metadata once**.
 
-You can initialize this metadata using the [`initialize-cluster-metadata`](reference-cli-tools.md#pulsar-initialize-cluster-metadata) command of the [`pulsar`](reference-cli-tools.md#pulsar) CLI tool. The following is an example:
+You can initialize this metadata using the [`initialize-cluster-metadata`](reference-cli-tools.md) command of the [`pulsar`](reference-cli-tools.md) CLI tool. The following is an example:
 
 ```shell
 bin/pulsar initialize-cluster-metadata \
@@ -240,13 +240,13 @@ You can configure BookKeeper bookies using the [`conf/bookkeeper.conf`](referenc
 
 You can start a bookie in two ways: in the foreground or as a background daemon.
 
-To start a bookie in the background, use the [`pulsar-daemon`](reference-cli-tools.md#pulsar-daemon) CLI tool:
+To start a bookie in the background, use the [`pulsar-daemon`](reference-cli-tools.md) CLI tool:
 
 ```bash
 bin/pulsar-daemon start bookie
 ```
 
-You can verify that the bookie works properly using the `bookiesanity` command for the [BookKeeper shell](reference-cli-tools.md#bookkeeper-shell):
+You can verify that the bookie works properly using the `bookiesanity` command for the [BookKeeper shell](reference-cli-tools.md):
 
 ```bash
 bin/bookkeeper shell bookiesanity
@@ -254,7 +254,7 @@ bin/bookkeeper shell bookiesanity
 
 This command creates a new ledger on the local bookie, writes a few entries, reads them back and finally deletes the ledger.
 
-After you have started all bookies, you can use the `simpletest` command for [BookKeeper shell](reference-cli-tools.md#shell) on any bookie node, to verify that all bookies in the cluster are running.
+After you have started all bookies, you can use the `simpletest` command for [BookKeeper shell](reference-cli-tools.md) on any bookie node, to verify that all bookies in the cluster are running.
 
 ```bash
 bin/bookkeeper shell simpletest --ensemble <num-bookies> --writeQuorum <num-bookies> --ackQuorum <num-bookies> --numEntries <num-entries>
@@ -315,13 +315,13 @@ Pulsar brokers do not require any special hardware since they do not use the loc
 
 ### Start the broker service
 
-You can start a broker in the background by using [nohup](https://en.wikipedia.org/wiki/Nohup) with the [`pulsar-daemon`](reference-cli-tools.md#pulsar-daemon) CLI tool:
+You can start a broker in the background by using [nohup](https://en.wikipedia.org/wiki/Nohup) with the [`pulsar-daemon`](reference-cli-tools.md) CLI tool:
 
 ```shell
 bin/pulsar-daemon start broker
 ```
 
-You can also start brokers in the foreground by using [`pulsar broker`](reference-cli-tools.md#broker):
+You can also start brokers in the foreground by using [`pulsar broker`](reference-cli-tools.md):
 
 ```shell
 bin/pulsar broker
@@ -373,7 +373,7 @@ bin/pulsar-admin namespaces create test-tenant/ns1
 ##### Test producer and consumer
 
 
-Everything is now ready to send and receive messages. The quickest way to test the system is through the [`pulsar-perf`](reference-cli-tools.md#pulsar-perf) client tool.
+Everything is now ready to send and receive messages. The quickest way to test the system is through the [`pulsar-perf`](reference-cli-tools.md) client tool.
 
 
 You can use a topic in the namespace that you have just created. Topics are automatically created the first time when a producer or a consumer tries to use them.
diff --git a/site2/docs/deploy-bare-metal.md b/site2/docs/deploy-bare-metal.md
index 1abab936213..15b5949e73a 100644
--- a/site2/docs/deploy-bare-metal.md
+++ b/site2/docs/deploy-bare-metal.md
@@ -118,13 +118,13 @@ The extracted directory contains the following subdirectories:
 
 Directory | Contains
 :---------|:--------
-`bin` |[command-line tools](reference-cli-tools.md) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](/tools/pulsar-admin/)
+`bin` |[command-line tools](reference-cli-tools.md) of Pulsar, such as [`pulsar`](reference-cli-tools.md) and [`pulsar-admin`](/tools/pulsar-admin/)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
 `data` | The data storage directory that ZooKeeper and BookKeeper use
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses
 `logs` | Logs that the installation creates
 
-## [Install Built-in Connectors (optional)](/standalone.md#install-built-in-connectors-optional)
+## Install Built-in Connectors (optional)
 
 > Since Pulsar release `2.1.0-incubating`, Pulsar provides a separate binary distribution, containing all the `built-in` connectors.
 > To enable the `built-in` connectors (optional), you can follow the instructions below.
@@ -155,7 +155,7 @@ pulsar-io-aerospike-@pulsar:version@.nar
 ...
 ```
 
-## [Install Tiered Storage Offloaders (optional)](/standalone.md#install-tiered-storage-offloaders-optional)
+## Install Tiered Storage Offloaders (optional)
 
 > Since Pulsar release `2.2.0`, Pulsar releases a separate binary distribution, containing the tiered storage offloaders.
 > If you want to enable tiered storage feature, you can follow the instructions as below; otherwise you can
@@ -231,7 +231,7 @@ echo 1 > data/zookeeper/myid
 
 On `zk2.us-west.example.com`, the command is `echo 2 > data/zookeeper/myid` and so on.
 
-Once you add each server to the `zookeeper.conf` configuration and have the appropriate `myid` entry, you can start ZooKeeper on all hosts (in the background, using nohup) with the [`pulsar-daemon`](reference-cli-tools.md#pulsar-daemon) CLI tool:
+Once you add each server to the `zookeeper.conf` configuration and have the appropriate `myid` entry, you can start ZooKeeper on all hosts (in the background, using nohup) with the [`pulsar-daemon`](reference-cli-tools.md) CLI tool:
 
 ```bash
 bin/pulsar-daemon start zookeeper
@@ -244,7 +244,7 @@ bin/pulsar-daemon start zookeeper
 
 Once you deploy ZooKeeper for your cluster, you need to write some metadata to ZooKeeper. You only need to write this data **once**.
 
-You can initialize this metadata using the [`initialize-cluster-metadata`](reference-cli-tools.md#pulsar-initialize-cluster-metadata) command of the [`pulsar`](reference-cli-tools.md#pulsar) CLI tool. This command can be run on any machine in your Pulsar cluster, so the metadata can be initialized from a ZooKeeper, broker, or bookie machine. The following is an example:
+You can initialize this metadata using the [`initialize-cluster-metadata`](reference-cli-tools.md) command of the [`pulsar`](reference-cli-tools.md) CLI tool. This command can be run on any machine in your Pulsar cluster, so the metadata can be initialized from a ZooKeeper, broker, or bookie machine. The following is an example:
 
 ```shell
 bin/pulsar initialize-cluster-metadata \
@@ -305,7 +305,7 @@ Once you appropriately modify the `zkServers` parameter, you can make any other
 
 Once you apply the desired configuration in `conf/bookkeeper.conf`, you can start up a bookie on each of your BookKeeper hosts. You can start up each bookie either in the background, using [nohup](https://en.wikipedia.org/wiki/Nohup), or in the foreground.
 
-To start the bookie in the background, use the [`pulsar-daemon`](reference-cli-tools.md#pulsar-daemon) CLI tool:
+To start the bookie in the background, use the [`pulsar-daemon`](reference-cli-tools.md) CLI tool:
 
 ```bash
 bin/pulsar-daemon start bookie
@@ -317,7 +317,7 @@ To start the bookie in the foreground:
 bin/pulsar bookie
 ```
 
-You can verify that a bookie works properly by running the `bookiesanity` command on the [BookKeeper shell](reference-cli-tools.md#shell):
+You can verify that a bookie works properly by running the `bookiesanity` command on the [BookKeeper shell](reference-cli-tools.md):
 
 ```bash
 bin/bookkeeper shell bookiesanity
@@ -325,7 +325,7 @@ bin/bookkeeper shell bookiesanity
 
 This command creates an ephemeral BookKeeper ledger on the local bookie, writes a few entries, reads them back, and finally deletes the ledger.
 
-After you start all the bookies, you can use `simpletest` command for [BookKeeper shell](reference-cli-tools.md#shell) on any bookie node, to verify all the bookies in the cluster are up running.
+After you start all the bookies, you can use `simpletest` command for [BookKeeper shell](reference-cli-tools.md) on any bookie node, to verify all the bookies in the cluster are up running.
 
 ```bash
 bin/bookkeeper shell simpletest --ensemble <num-bookies> --writeQuorum <num-bookies> --ackQuorum <num-bookies> --numEntries <num-entries>
@@ -398,13 +398,13 @@ If you want to learn more options about deploying the functions worker, check ou
 
 You can then provide any other configuration changes that you want in the [`conf/broker.conf`](reference-configuration.md#broker) file. Once you decide on a configuration, you can start up the brokers for your Pulsar cluster. Like ZooKeeper and BookKeeper, you can start brokers either in the foreground or in the background, using nohup.
 
-You can start a broker in the foreground using the [`pulsar broker`](reference-cli-tools.md#pulsar-broker) command:
+You can start a broker in the foreground using the [`pulsar broker`](reference-cli-tools.md) command:
 
 ```bash
 bin/pulsar broker
 ```
 
-You can start a broker in the background using the [`pulsar-daemon`](reference-cli-tools.md#pulsar-daemon) CLI tool:
+You can start a broker in the background using the [`pulsar-daemon`](reference-cli-tools.md) CLI tool:
 
 ```bash
 bin/pulsar-daemon start broker
@@ -414,7 +414,7 @@ Once you successfully start up all the brokers that you intend to use, your Puls
 
 ## Connect to the running cluster
 
-Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the [`pulsar-client`](reference-cli-tools.md#pulsar-client) tool, which is included with the Pulsar binary package. The `pulsar-client` tool can publish messages to and consume messages from Pulsar topics and thus provide a simple way to make sure that your cluster runs properly.
+Once your Pulsar cluster is up and running, you should be able to connect with it using Pulsar clients. One such client is the [`pulsar-client`](reference-cli-tools.md) tool, which is included with the Pulsar binary package. The `pulsar-client` tool can publish messages to and consume messages from Pulsar topics and thus provide a simple way to make sure that your cluster runs properly.
 
 To use the `pulsar-client` tool, first modify the client configuration file in [`conf/client.conf`](reference-configuration.md#client) in your binary package. You need to change the values for `webServiceUrl` and `brokerServiceUrl`, substituting `localhost` (which is the default), with the DNS name that you assign to your broker/bookie hosts. The following is an example:
 
diff --git a/site2/docs/deploy-dcos.md b/site2/docs/deploy-dcos.md
index 650d29b594d..6186523a5f1 100644
--- a/site2/docs/deploy-dcos.md
+++ b/site2/docs/deploy-dcos.md
@@ -6,7 +6,7 @@ sidebar_label: "DC/OS"
 
 :::tip
 
-To enable all built-in [Pulsar IO](io-overview.md) connectors in your Pulsar deployment, we recommend you use `apachepulsar/pulsar-all` image instead of `apachepulsar/pulsar` image; the former has already bundled [all built-in connectors](io-overview.md#working-with-connectors).
+To enable all built-in [Pulsar IO](io-overview.md) connectors in your Pulsar deployment, we recommend you use `apachepulsar/pulsar-all` image instead of `apachepulsar/pulsar` image; the former has already bundled [all built-in connectors](io-overview.md#work-with-connector).
 
 :::
 
diff --git a/site2/docs/develop-load-manager.md b/site2/docs/develop-load-manager.md
index 244296c4dba..2d8f4ecb1e1 100644
--- a/site2/docs/develop-load-manager.md
+++ b/site2/docs/develop-load-manager.md
@@ -89,7 +89,7 @@ There are a few different ways to determine which load manager is being used:
    }
    ```
 
-3. The command-line [broker monitor](reference-cli-tools.md#monitor-brokers) will have a different output format depending on which load manager implementation is being used.
+3. The command-line [broker monitor](reference-cli-tools.md) will have a different output format depending on which load manager implementation is being used.
 
    Here is an example from the modular load manager:
 
diff --git a/site2/docs/functions-cli.md b/site2/docs/functions-cli.md
index 42bd38dc310..f99ba32b8b3 100644
--- a/site2/docs/functions-cli.md
+++ b/site2/docs/functions-cli.md
@@ -34,7 +34,7 @@ You can configure a function by using a predefined YAML file. The following tabl
 | customSchemaOutputs  | Map`<String,String>`         | `--custom-schema-outputs`  | The mapping from output topics to schema properties.|
 | inputSpecs           | Map`<String,`[ConsumerConfig](#consumerconfig)`>` | `--input-specs` | The mapping from inputs to custom configurations.|
 | output               | String                     | `-o`, `--output`           | The output topic of a function. If none is specified, no output is written.  |
-| producerConfig       | [ProducerConfig](#produceconfig)  | `--producer-config` | The custom configurations for producers.  |
+| producerConfig       | [ProducerConfig](#producerconfig)  | `--producer-config` | The custom configurations for producers.  |
 | outputSchemaType     | String                     | `-st`, `--schema-type`     | The built-in schema type or custom schema class name used for message outputs.   |
 | outputSerdeClassName | String                     | `--output-serde-classname` | The SerDe class used for message outputs. |
 | logTopic             | String                     | `--log-topic`              | The topic that the logs of a function are produced to.  |
@@ -80,7 +80,7 @@ The following table outlines the nested fields and related arguments under the `
 | cryptoConfig         | [CryptoConfig](#cryptoconfig)   | N/A                   |Refer to [code](https://github.com/apache/pulsar/blob/master/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/functions/CryptoConfig.java). |
 | poolMessages         | Boolean                    | N/A                        | N/A |
 
-###### ProducerConfig
+##### ProducerConfig
 
 The following table outlines the nested fields and related arguments under the `producerConfig` field.
 
diff --git a/site2/docs/functions-deploy-cluster-encryption.md b/site2/docs/functions-deploy-cluster-encryption.md
index 7f3fc4cf7ac..e7b72a0314b 100644
--- a/site2/docs/functions-deploy-cluster-encryption.md
+++ b/site2/docs/functions-deploy-cluster-encryption.md
@@ -23,4 +23,4 @@ public class CryptoConfig {
 - `producerCryptoFailureAction` defines the action that a producer takes if it fails to encrypt the data. Available options are `FAIL` or `SEND`.
 - `consumerCryptoFailureAction` defines the action that a consumer takes if it fails to decrypt the recieved data. Available options are `FAIL`, `DISCARD`, or `CONSUME`.
 
-For more information about these options, refer to [producer configurations](client-libraries-java.md#configure-producer.md) and [consumer configurations](client-libraries-java.md#configure-consumer).
+For more information about these options, refer to [producer configurations](client-libraries-java.md#configure-producer) and [consumer configurations](client-libraries-java.md#configure-consumer).
diff --git a/site2/docs/functions-deploy-trigger.md b/site2/docs/functions-deploy-trigger.md
index 6b1c7405f7a..4ea09998107 100644
--- a/site2/docs/functions-deploy-trigger.md
+++ b/site2/docs/functions-deploy-trigger.md
@@ -8,7 +8,7 @@ Triggering a function means that you invoke a function by producing a message to
 
 :::tip
 
-With the [`pulsar-admin`](/tools/pulsar-admin/) CLI, you can send messages to functions without using the [`pulsar-client`](reference-cli-tools.md#pulsar-client) tool or a language-specific client library.
+With the [`pulsar-admin`](/tools/pulsar-admin/) CLI, you can send messages to functions without using the [`pulsar-client`](reference-cli-tools.md) tool or a language-specific client library.
 
 :::
 
@@ -33,7 +33,7 @@ def process(input):
     --output persistent://public/default/out
   ```
 
-2. Assign a consumer to listen on the output topic for messages from the `myfunc` function with the [`pulsar-client consume`](reference-cli-tools.md#consume) command.
+2. Assign a consumer to listen on the output topic for messages from the `myfunc` function with the [`pulsar-client consume`](reference-cli-tools.md) command.
 
   ```bash
   bin/pulsar-client consume persistent://public/default/out \
diff --git a/site2/docs/functions-develop-metrics.md b/site2/docs/functions-develop-metrics.md
index 11b88fdba5f..d6a35a6f5a5 100644
--- a/site2/docs/functions-develop-metrics.md
+++ b/site2/docs/functions-develop-metrics.md
@@ -19,7 +19,7 @@ Using the language-native interface for Java or Python is **not** able to publis
 
 You can use both built-in metrics and customized metrics to monitor functions.
 - Use the built-in [function metrics](reference-metrics.md#pulsar-functions).
-  Pulsar Functions expose the metrics that can be collected and used for monitoring the health of Java, Python, and Go functions. You can check the metrics by following the [monitoring](deploy-monitoring.md/#function-and-connector-stats) guide. 
+  Pulsar Functions expose the metrics that can be collected and used for monitoring the health of Java, Python, and Go functions. You can check the metrics by following the [monitoring](deploy-monitoring.md#function-and-connector-stats) guide. 
 - Set your customized metrics.
   In addition to the built-in metrics, Pulsar allows you to customize metrics for Java and Python functions. Function workers collect user-defined metrics to Prometheus automatically and you can check them in Grafana.
 
diff --git a/site2/docs/functions-develop-security.md b/site2/docs/functions-develop-security.md
index 3ef9556925e..8807d826e36 100644
--- a/site2/docs/functions-develop-security.md
+++ b/site2/docs/functions-develop-security.md
@@ -11,7 +11,7 @@ import TabItem from '@theme/TabItem';
 
 ## Prerequisites
 
-If you want to enable security on functions, you need to [enable security settings](functions-worker.md#enable-security-settings) on function workers first.
+If you want to enable security on functions, you need to [enable security settings](functions-worker.md) on function workers first.
 
 
 ## Configure function workers
diff --git a/site2/docs/functions-develop.md b/site2/docs/functions-develop.md
index e17d6356678..2b183e205ec 100644
--- a/site2/docs/functions-develop.md
+++ b/site2/docs/functions-develop.md
@@ -8,7 +8,7 @@ sidebar_label: "How to develop"
 
 Develop functions in Java, Python, or Go. 
 * For supported Java versions, refer to [Pulsar runtime Java version recommendation](https://github.com/apache/pulsar#pulsar-runtime-java-version-recommendation) for more details.
-* For supported Python versions, refer to [Python client](client-libraries-python.md#optional-dependencies) for more details.
+* For supported Python versions, refer to [Python client](client-libraries-python.md) for more details.
 
 :::
 
diff --git a/site2/docs/functions-worker-run-separately.md b/site2/docs/functions-worker-run-separately.md
index 2c9f8410604..1f7a4a9c062 100644
--- a/site2/docs/functions-worker-run-separately.md
+++ b/site2/docs/functions-worker-run-separately.md
@@ -92,7 +92,7 @@ properties:
 ```
 
 You can enable the following security settings on function workers.
-- [Enable TLS encryption](#enable-tls-transport-encryption)
+- [Enable TLS encryption](#enable-tls-encryption)
 - [Enable authentication providers](#enable-authentication-providers)
 - [Enable authorization providers](#enable-authorization-providers)
 - [Enable end-to-end encryption](functions-deploy-cluster-encryption.md)
@@ -197,7 +197,7 @@ Before starting function workers, make sure [function runtime](functions-runtime
 
 :::
 
-* You can start a function worker in the background by using [nohup](https://en.wikipedia.org/wiki/Nohup) with the [`pulsar-daemon`](reference-cli-tools.md#pulsar-daemon) CLI tool:
+* You can start a function worker in the background by using [nohup](https://en.wikipedia.org/wiki/Nohup) with the [`pulsar-daemon`](reference-cli-tools.md) CLI tool:
 
   ```bash
   bin/pulsar-daemon start functions-worker
diff --git a/site2/docs/getting-started-pulsar.md b/site2/docs/getting-started-pulsar.md
index a46e5945dd7..64f7b55932d 100644
--- a/site2/docs/getting-started-pulsar.md
+++ b/site2/docs/getting-started-pulsar.md
@@ -30,8 +30,8 @@ Prior to version 2.0, *all* Pulsar topics had the following form:
 
 Two important changes have been made in Pulsar 2.0:
 
-* There is no longer a [cluster component](#no-cluster)
-* Properties have been [renamed to tenants](#tenants)
+* There is no longer a [cluster component](#no-cluster-component)
+* Properties have been [renamed to tenants](#properties-versus-tenants)
 * You can use a [flexible](#flexible-topic-naming) naming system to shorten many topic names
 * `/` is not allowed in topic name
 
diff --git a/site2/docs/getting-started-standalone.md b/site2/docs/getting-started-standalone.md
index 30f687a7d17..3f2dc2b4ea9 100644
--- a/site2/docs/getting-started-standalone.md
+++ b/site2/docs/getting-started-standalone.md
@@ -46,7 +46,7 @@ The following directories are created:
 
 | Directory     | Description                                                                                         |
 | ------------- | --------------------------------------------------------------------------------------------------- |
-| **bin**       | The [`pulsar`](reference-cli-tools.md#pulsar) entry point script, and many other command-line tools |
+| **bin**       | The [`pulsar`](reference-cli-tools.md) entry point script, and many other command-line tools |
 | **conf**      | Configuration files, including `broker.conf`                                                        |
 | **lib**       | JARs used by Pulsar                                                                                 |
 | **examples**  | [Pulsar Functions](functions-overview.md) examples                                                  |
@@ -69,7 +69,7 @@ When the Pulsar cluster starts, the following directories are created:
 
 :::tip
 
-* To run the service as a background process, you can use the `bin/pulsar-daemon start standalone` command. For more information, see [pulsar-daemon](reference-cli-tools.md#pulsar-daemon).
+* To run the service as a background process, you can use the `bin/pulsar-daemon start standalone` command. For more information, see [pulsar-daemon](reference-cli-tools.md).
 * The `public/default` namespace is created when you start a Pulsar cluster. This namespace is for development purposes. All Pulsar topics are managed within namespaces. For more information, see [Namespaces](concepts-messaging.md#namespaces) and [Topics](concepts-messaging.md#topics).
 
 :::
diff --git a/site2/docs/helm-deploy.md b/site2/docs/helm-deploy.md
index 8e8985d0d0c..de1dd112923 100644
--- a/site2/docs/helm-deploy.md
+++ b/site2/docs/helm-deploy.md
@@ -262,7 +262,7 @@ auth:
     client: "admin"
 ```
 
-To enable authentication, you can run [prepare helm release](#prepare-the-helm-release) to generate token secret keys and tokens for three super users specified in the `auth.superUsers` field. The generated token keys and super user tokens are uploaded and stored as Kubernetes secrets prefixed with `<pulsar-release-name>-token-`. You can use the following command to find those secrets.
+To enable authentication, you can run [prepare helm release](#prepare-helm-release) to generate token secret keys and tokens for three super users specified in the `auth.superUsers` field. The generated token keys and super user tokens are uploaded and stored as Kubernetes secrets prefixed with `<pulsar-release-name>-token-`. You can use the following command to find those secrets.
 
 ```bash
 kubectl get secrets -n <k8s-namespace>
diff --git a/site2/docs/helm-prepare.md b/site2/docs/helm-prepare.md
index 15f07c994fa..01b3e90316c 100644
--- a/site2/docs/helm-prepare.md
+++ b/site2/docs/helm-prepare.md
@@ -29,7 +29,7 @@ The script can:
 2. Allow the cluster to modify DNS (Domain Name Server) records.
 3. Set up `kubectl`, and connect it to the cluster.
 
-Google Cloud SDK is a dependency of this script, so ensure it is [set up correctly](helm-tools.md#connect-to-a-gke-cluster) for the script to work.
+Google Cloud SDK is a dependency of this script, so ensure it is [set up correctly](helm-tools.md) for the script to work.
 
 The script reads various parameters from environment variables and an argument `up` or `down` for bootstrap and clean-up respectively.
 
diff --git a/site2/docs/io-cassandra-sink.md b/site2/docs/io-cassandra-sink.md
index f9df7d8c2c2..59eafdf4cf8 100644
--- a/site2/docs/io-cassandra-sink.md
+++ b/site2/docs/io-cassandra-sink.md
@@ -51,4 +51,4 @@ Before using the Cassandra sink connector, you need to create a configuration fi
 
 ## Usage
 
-For more information about **how to connect Pulsar with Cassandra**, see [here](io-quickstart.md#connect-pulsar-to-apache-cassandra).
+For more information about **how to connect Pulsar with Cassandra**, see [here](io-quickstart.md#connect-pulsar-to-cassandra).
diff --git a/site2/docs/io-connectors.md b/site2/docs/io-connectors.md
index 1b6f9e85bc2..c23aca27b63 100644
--- a/site2/docs/io-connectors.md
+++ b/site2/docs/io-connectors.md
@@ -188,7 +188,7 @@ Pulsar has various sink connectors, which are sorted alphabetically as below.
 
 * [Configuration](io-jdbc-sink.md#configuration)
   
-* [Example](io-jdbc-sink.md#example-for-clickhouse)
+* [Example](io-jdbc-sink.md#example-of-clickhouse)
   
 * [Java class](https://github.com/apache/pulsar/blob/master/pulsar-io/jdbc/clickhouse/src/main/java/org/apache/pulsar/io/jdbc/ClickHouseJdbcAutoSchemaSink.java)
 
@@ -196,7 +196,7 @@ Pulsar has various sink connectors, which are sorted alphabetically as below.
 
 * [Configuration](io-jdbc-sink.md#configuration)
   
-* [Example](io-jdbc-sink.md#example-for-mariadb)
+* [Example](io-jdbc-sink.md#example-of-mariadb)
   
 * [Java class](https://github.com/apache/pulsar/blob/master/pulsar-io/jdbc/mariadb/src/main/java/org/apache/pulsar/io/jdbc/MariadbJdbcAutoSchemaSink.java)
 
@@ -204,7 +204,7 @@ Pulsar has various sink connectors, which are sorted alphabetically as below.
 
 * [Configuration](io-jdbc-sink.md#configuration)
 
-* [Example](io-jdbc-sink.md#example-for-openmldb)
+* [Example](io-jdbc-sink.md#example-of-openmldb)
 
 * [Java class](https://github.com/apache/pulsar/blob/master/pulsar-io/jdbc/openmldb/src/main/java/org/apache/pulsar/io/jdbc/OpenMLDBJdbcAutoSchemaSink.java)
 
@@ -212,7 +212,7 @@ Pulsar has various sink connectors, which are sorted alphabetically as below.
 
 * [Configuration](io-jdbc-sink.md#configuration)
   
-* [Example](io-jdbc-sink.md#example-for-postgresql)
+* [Example](io-jdbc-sink.md#example-of-postgresql)
   
 * [Java class](https://github.com/apache/pulsar/blob/master/pulsar-io/jdbc/postgres/src/main/java/org/apache/pulsar/io/jdbc/PostgresJdbcAutoSchemaSink.java)
   
@@ -220,7 +220,7 @@ Pulsar has various sink connectors, which are sorted alphabetically as below.
 
 * [Configuration](io-jdbc-sink.md#configuration)
   
-* [Example](io-jdbc-sink.md#example-for-sqlite)
+* [Example](io-jdbc-sink.md#example-of-sqlite)
   
 * [Java class](https://github.com/apache/pulsar/blob/master/pulsar-io/jdbc/sqlite/src/main/java/org/apache/pulsar/io/jdbc/SqliteJdbcAutoSchemaSink.java)
   
diff --git a/site2/docs/io-debug.md b/site2/docs/io-debug.md
index 0ef98bfd96e..45a0907b34e 100644
--- a/site2/docs/io-debug.md
+++ b/site2/docs/io-debug.md
@@ -58,7 +58,7 @@ Start the Mongo sink in localrun mode using the `localrun` command.
 
 :::tip
 
-For more information about the `localrun` command, see [`localrun`](reference-connector-admin.md/#localrun-1).
+For more information about the `localrun` command, see [`localrun`](reference-connector-admin.md).
 
 :::
 
@@ -255,7 +255,7 @@ Use the `get` command to get the basic information about the Mongo sink connecto
 
 :::tip
 
-For more information about the `get` command, see [`get`](reference-connector-admin.md/#get-1).
+For more information about the `get` command, see [`get`](reference-connector-admin.md).
 
 :::
 
@@ -291,7 +291,7 @@ Use the `status` command to get the current status about the Mongo sink connecto
 
 :::tip
 
-For more information about the `status` command, see [`status`](reference-connector-admin.md/#stauts-1).
+For more information about the `status` command, see [`status`](reference-connector-admin.md).
 If there are multiple connectors running on a worker, `workerId` can locate the worker on which the specified connector is running.
 
 :::
diff --git a/site2/docs/io-overview.md b/site2/docs/io-overview.md
index 765cacbae01..ed6b6dc95fb 100644
--- a/site2/docs/io-overview.md
+++ b/site2/docs/io-overview.md
@@ -85,7 +85,7 @@ bin/pulsar-admin sources create \
 # Other source configs
 ```
 
-For more information about the options of `pulsar-admin sources create`, see [here](reference-connector-admin.md#create).
+For more information about the options of `pulsar-admin sources create`, see [here](reference-connector-admin.md).
 
 </TabItem>
 <TabItem value="Sink">
@@ -96,7 +96,7 @@ bin/pulsar-admin sinks create \
 # Other sink configs
 ```
 
-For more information about the options of `pulsar-admin sinks create`, see [here](reference-connector-admin.md#create-1).
+For more information about the options of `pulsar-admin sinks create`, see [here](reference-connector-admin.md).
 
 </TabItem>
 
@@ -128,7 +128,7 @@ bin/pulsar-admin sources update \
 # Other source configs
 ```
 
-For more information about the options of `pulsar-admin sources update`, see [here](reference-connector-admin.md#update).
+For more information about the options of `pulsar-admin sources update`, see [here](reference-connector-admin.md).
 
 </TabItem>
 <TabItem value="Sink">
@@ -139,7 +139,7 @@ bin/pulsar-admin sinks update \
 # Other sink configs
 ```
 
-For more information about the options of `pulsar-admin sinks update`, see [here](reference-connector-admin.md#update-1).
+For more information about the options of `pulsar-admin sinks update`, see [here](reference-connector-admin.md).
 
 </TabItem>
 
diff --git a/site2/docs/io-use.md b/site2/docs/io-use.md
index d0d09651757..99dbe54beba 100644
--- a/site2/docs/io-use.md
+++ b/site2/docs/io-use.md
@@ -32,7 +32,7 @@ You can configure the following information:
 
 * [Configure a default storage location for a connector](#configure-a-default-storage-location-for-a-connector)
 
-* [Configure a connector with a YAML file](#configure-a-connector-with-yaml-file)
+* [Configure a connector with a YAML file](#configure-a-connector-with-a-yaml-file)
 
 ### Configure a default storage location for a connector
 
diff --git a/site2/docs/performance-pulsar-perf.md b/site2/docs/performance-pulsar-perf.md
index da715b4a12f..42cbed8fad0 100644
--- a/site2/docs/performance-pulsar-perf.md
+++ b/site2/docs/performance-pulsar-perf.md
@@ -10,7 +10,7 @@ The Pulsar Perf is a built-in performance test tool for Apache Pulsar. You can u
 
 :::tip
 
-For the latest and complete information about `pulsar-perf`, including commands, flags, descriptions, and more, see [`pulsar-perf`](/tools/pulsar-perf/) or [here](reference-cli-tools.md#pulsar-perf).
+For the latest and complete information about `pulsar-perf`, including commands, flags, descriptions, and more, see [`pulsar-perf`](/tools/pulsar-perf/) or [here](reference-cli-tools.md).
 
 :::
 
@@ -68,7 +68,7 @@ For the latest and complete information about `pulsar-perf`, including commands,
 
 :::tip
 
-For the latest and complete information about `pulsar-perf`, including commands, flags, descriptions, and more, see [`pulsar-perf`](/tools/pulsar-perf/) or [here](reference-cli-tools.md#pulsar-perf).
+For the latest and complete information about `pulsar-perf`, including commands, flags, descriptions, and more, see [`pulsar-perf`](/tools/pulsar-perf/) or [here](reference-cli-tools.md).
 
 :::
 
diff --git a/site2/docs/reference-metrics.md b/site2/docs/reference-metrics.md
index 959e58a4d02..0415f78ed92 100644
--- a/site2/docs/reference-metrics.md
+++ b/site2/docs/reference-metrics.md
@@ -25,7 +25,7 @@ The following types of metrics are available:
 
 ## ZooKeeper
 
-The ZooKeeper metrics are exposed under "/metrics" at port `8000`. You can use a different port by configuring the `metricsProvider.httpPort` in conf/zookeeper.conf.
+The ZooKeeper metrics are exposed under "/metrics" at port `8000`. You can use a different port by configuring the `metricsProvider.httpPort` in `conf/zookeeper.conf`.
 
 ZooKeeper provides a New Metrics System since 3.6.0. For more detailed metrics, refer to the [ZooKeeper Monitor Guide](https://zookeeper.apache.org/doc/r3.7.0/zookeeperMonitor.html).
 
diff --git a/site2/docs/schema-evolution-compatibility.md b/site2/docs/schema-evolution-compatibility.md
index 7e9d48f381d..ad3432ba779 100644
--- a/site2/docs/schema-evolution-compatibility.md
+++ b/site2/docs/schema-evolution-compatibility.md
@@ -46,7 +46,7 @@ The process of how Pulsar supports schema evolution is described as follows.
 
    :::
 
-3. Brokers use the schema compatibility checker to check if the `SchemaInfo` is compatible with the latest schema of the topic by applying its [compatibility check strategy](#compatibility-check-strategy). Currently, the compatibility check strategy is configured at the namespace level and applied to all the topics within that namespace.
+3. Brokers use the schema compatibility checker to check if the `SchemaInfo` is compatible with the latest schema of the topic by applying its [compatibility check strategy](#schema-compatibility-check-strategy). Currently, the compatibility check strategy is configured at the namespace level and applied to all the topics within that namespace.
 
 For more details, see [`schemaRegistryCompatibilityCheckers`](https://github.com/apache/pulsar/blob/bf194b557c48e2d3246e44f1fc28876932d8ecb8/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/ServiceConfiguration.java).
 
diff --git a/site2/docs/schema-understand.md b/site2/docs/schema-understand.md
index ed65c619ecd..434b26c9893 100644
--- a/site2/docs/schema-understand.md
+++ b/site2/docs/schema-understand.md
@@ -496,7 +496,7 @@ This diagram illustrates how does schema work on the Producer side.
 
 `isAllowAutoUpdateSchema` can be set via **Pulsar admin API** or **REST API.** 
 
-For how to set `isAllowAutoUpdateSchema` via Pulsar admin API, see [Manage AutoUpdate Strategy](schema-manage.md/#manage-autoupdate-strategy). 
+For how to set `isAllowAutoUpdateSchema` via Pulsar admin API, see [Manage AutoUpdate Strategy](schema-manage.md#manage-autoupdate-strategy). 
 
 :::
 
diff --git a/site2/docs/security-athenz.md b/site2/docs/security-athenz.md
index 86c67d3180c..60849db06ab 100644
--- a/site2/docs/security-athenz.md
+++ b/site2/docs/security-athenz.md
@@ -20,7 +20,7 @@ On the [tenant](reference-terminology.md#tenant) side, you need to do the follow
 2. Generate a private/public key pair
 3. Create a service, such as `some_app`, on the domain with the public key
 
-Note that you need to specify the private key generated in step 2 when the Pulsar client connects to the [broker](reference-terminology.md#broker) (see client configuration examples for [Java](client-libraries-java.md#tls-authentication) and [C++](client-libraries-cpp.md#tls-authentication)).
+Note that you need to specify the private key generated in step 2 when the Pulsar client connects to the [broker](reference-terminology.md#broker) (see client configuration examples for [Java](client-libraries-java.md) and [C++](client-libraries-cpp.md)).
 
 For more specific steps involving the Athenz UI, refer to [Example Service Access Control Setup](https://github.com/AthenZ/athenz/blob/master/docs/example_service_athenz_setup.md#client-tenant-domain).
 
@@ -67,7 +67,7 @@ brokerClientAuthenticationParameters={"tenantDomain":"shopping","tenantService":
 
 ## Configure Athenz authentication in Pulsar clients
 
-To use Athenz as an authentication provider, you need to [use TLS](#tls-authentication.md) and provide values for four parameters in a hash:
+To use Athenz as an authentication provider, you need to [use TLS](#tls-encryption) and provide values for four parameters in a hash:
 * `tenantDomain`
 * `tenantService`
 * `providerDomain`
@@ -101,7 +101,7 @@ The `privateKey` parameter supports the following three pattern formats:
 
 ## Configure Athenz authentication in CLI tools
 
-[Command-line tools](reference-cli-tools.md) like [`pulsar-admin`](/tools/pulsar-admin/), [`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.
+[Command-line tools](reference-cli-tools.md) like [`pulsar-admin`](/tools/pulsar-admin/), [`pulsar-perf`](reference-cli-tools.md), and [`pulsar-client`](reference-cli-tools.md) use the `conf/client.conf` config file in a Pulsar installation.
 
 You need to add the following authentication parameters to the `conf/client.conf` config file to use Athenz with CLI tools of Pulsar:
 
diff --git a/site2/docs/security-jwt.md b/site2/docs/security-jwt.md
index 374324a8d90..1764887827e 100644
--- a/site2/docs/security-jwt.md
+++ b/site2/docs/security-jwt.md
@@ -166,7 +166,7 @@ The proxy uses its own token when connecting to brokers. You need to configure t
 
 ### Configure JWT authentication in CLI Tools
 
-[Command-line tools](reference-cli-tools.md) like [`pulsar-admin`](/tools/pulsar-admin/), [`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.
+[Command-line tools](reference-cli-tools.md) like [`pulsar-admin`](/tools/pulsar-admin/), [`pulsar-perf`](reference-cli-tools.md), and [`pulsar-client`](reference-cli-tools.md) use the `conf/client.conf` config file in a Pulsar installation.
 
 You need to add the following parameters to that file to use the token authentication with CLI tools of Pulsar:
 
diff --git a/site2/docs/security-oauth2.md b/site2/docs/security-oauth2.md
index 88b1506398d..ddb7bb4fc07 100644
--- a/site2/docs/security-oauth2.md
+++ b/site2/docs/security-oauth2.md
@@ -6,7 +6,7 @@ sidebar_label: "Authentication using OAuth 2.0 access tokens"
 
 Pulsar supports authenticating clients using OAuth 2.0 access tokens. You can use OAuth 2.0 access tokens to identify a Pulsar client and associate the Pulsar client with some "principal" (or "role"), which is permitted to do some actions, such as publishing messages to a topic or consuming messages from a topic.
 
-This module is used to support the [Pulsar client authentication plugin](security-extending.md/#client-authentication-plugin) for OAuth 2.0. After communicating with the OAuth 2.0 server, the Pulsar client gets an `access token` from the OAuth 2.0 server, and passes this `access token` to the Pulsar broker to do the authentication. The broker can use the `org.apache.pulsar.broker.authentication.AuthenticationProviderToken`. Or, you can add your own `AuthenticationProvider` to make it wit [...]
+This module is used to support the [Pulsar client authentication plugin](security-extending.md#client-authentication-plugin) for OAuth 2.0. After communicating with the OAuth 2.0 server, the Pulsar client gets an `access token` from the OAuth 2.0 server, and passes this `access token` to the Pulsar broker to do the authentication. The broker can use the `org.apache.pulsar.broker.authentication.AuthenticationProviderToken`. Or, you can add your own `AuthenticationProvider` to make it with [...]
 
 ## Authentication provider configuration
 
diff --git a/site2/docs/security-overview.md b/site2/docs/security-overview.md
index 3008e065f98..37d96d65b01 100644
--- a/site2/docs/security-overview.md
+++ b/site2/docs/security-overview.md
@@ -13,7 +13,7 @@ Pulsar security is based on the following core pillars.
 
 By default, Pulsar configures no encryption, authentication, or authorization. Any clients can communicate to Pulsar via plain text service URLs. So you must ensure that Pulsar accessing via these plain text service URLs is restricted to trusted clients only. In such cases, you can use network segmentation and/or authorization ACLs to restrict access to trusted IPs. If you use neither, the state of the cluster is wide open and anyone can access the cluster.
 
-Apache Pulsar uses an [Authentication Provider](#authentication) or an [Authentication Provider Chain](security-extending.md/#proxybroker-authentication-plugin) to establish the identity of a client and then assign a *role token* (a string like `admin` or `app1`) to that client. This role token can represent a single client or multiple clients and is then used for [Authorization](security-authorization.md) to determine what the client is authorized to do. You can use roles to control per [...]
+Apache Pulsar uses an [Authentication Provider](#authentication) or an [Authentication Provider Chain](security-extending.md#proxybroker-authentication-plugin) to establish the identity of a client and then assign a *role token* (a string like `admin` or `app1`) to that client. This role token can represent a single client or multiple clients and is then used for [Authorization](security-authorization.md) to determine what the client is authorized to do. You can use roles to control perm [...]
 
 ## Encryption
 
diff --git a/site2/docs/security-tls-authentication.md b/site2/docs/security-tls-authentication.md
index ad8aa2f50c9..4f907933abe 100644
--- a/site2/docs/security-tls-authentication.md
+++ b/site2/docs/security-tls-authentication.md
@@ -188,7 +188,7 @@ var client = PulsarClient.Builder()
 
 ## Configure TLS authentication in CLI tools
 
-[Command-line tools](reference-cli-tools.md) like [`pulsar-admin`](/tools/pulsar-admin/), [`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.
+[Command-line tools](reference-cli-tools.md) like [`pulsar-admin`](/tools/pulsar-admin/), [`pulsar-perf`](reference-cli-tools.md), and [`pulsar-client`](reference-cli-tools.md) use the `conf/client.conf` config file in a Pulsar installation.
 
 To use TLS authentication with the CLI tools of Pulsar, you need to add the following parameters to the `conf/client.conf` file, alongside [the configuration to enable TLS encryption](security-tls-transport.md#configure-tls-encryption-in-cli-tools):
 
diff --git a/site2/docs/security-tls-transport.md b/site2/docs/security-tls-transport.md
index 57e0dcaa96d..87749959f3e 100644
--- a/site2/docs/security-tls-transport.md
+++ b/site2/docs/security-tls-transport.md
@@ -377,7 +377,7 @@ asyncio.run(test())
 
 ### Configure CLI tools
 
-[Command-line tools](reference-cli-tools.md) like [`pulsar-admin`](reference-cli-tools.md#pulsar-admin), [`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.
+[Command-line tools](reference-cli-tools.md) like [`pulsar-admin`](reference-cli-tools.md), [`pulsar-perf`](reference-cli-tools.md), and [`pulsar-client`](reference-cli-tools.md) use the `conf/client.conf` config file in a Pulsar installation.
 
 To use TLS encryption with Pulsar CLI tools, you need to add the following parameters to the `conf/client.conf` file.
 
diff --git a/site2/docs/tiered-storage-aliyun.md b/site2/docs/tiered-storage-aliyun.md
index c14ef0e93b9..8a18c28a5b9 100644
--- a/site2/docs/tiered-storage-aliyun.md
+++ b/site2/docs/tiered-storage-aliyun.md
@@ -16,7 +16,7 @@ Follow the steps below to install the Aliyun OSS offloader.
 
 ### Steps
 
-1. [Download the Pulsar tarball](getting-started-standalone.md#step-1-download-pulsar-distribution).
+1. [Download the Pulsar tarball](getting-started-standalone.md#download-pulsar-distribution).
 2. Download and untar the Pulsar offloaders package, then copy the Pulsar offloaders as `offloaders` in the Pulsar directory. See [Install tiered storage offloaders](tiered-storage-overview.md#how-to-install-tiered-storage-offloaders).
 
 ## Configuration
diff --git a/site2/docs/tiered-storage-aws.md b/site2/docs/tiered-storage-aws.md
index f13248bf8ac..919e66f0082 100644
--- a/site2/docs/tiered-storage-aws.md
+++ b/site2/docs/tiered-storage-aws.md
@@ -16,7 +16,7 @@ Follow the steps below to install the AWS S3 offloader.
 
 ### Steps
 
-1. [Download the Pulsar tarball](getting-started-standalone.md#step-1-download-pulsar-distribution).
+1. [Download the Pulsar tarball](getting-started-standalone.md#download-pulsar-distribution).
 2. Download and untar the Pulsar offloaders package, then copy the Pulsar offloaders as `offloaders` in the Pulsar directory. See [Install tiered storage offloaders](tiered-storage-overview.md#how-to-install-tiered-storage-offloaders).
 
 ## Configuration
diff --git a/site2/docs/tiered-storage-azure.md b/site2/docs/tiered-storage-azure.md
index 8c68a24a314..9d57abcb12f 100644
--- a/site2/docs/tiered-storage-azure.md
+++ b/site2/docs/tiered-storage-azure.md
@@ -16,7 +16,7 @@ Follow the steps below to install the Azure BlobStore offloader.
 
 ### Steps
 
-1. [Download the Pulsar tarball](getting-started-standalone.md#step-1-download-pulsar-distribution).
+1. [Download the Pulsar tarball](getting-started-standalone.md#download-pulsar-distribution).
 2. Download and untar the Pulsar offloaders package, then copy the Pulsar offloaders as `offloaders` in the Pulsar directory. See [Install tiered storage offloaders](tiered-storage-overview.md#how-to-install-tiered-storage-offloaders).
 
 ## Configuration
diff --git a/site2/docs/tiered-storage-filesystem.md b/site2/docs/tiered-storage-filesystem.md
index 56fadd90368..1a332e7a0b8 100644
--- a/site2/docs/tiered-storage-filesystem.md
+++ b/site2/docs/tiered-storage-filesystem.md
@@ -22,7 +22,7 @@ This section describes how to install the filesystem offloader.
 
 ### Steps
 
-1. [Download the Pulsar tarball](getting-started-standalone.md#step-1-download-pulsar-distribution).
+1. [Download the Pulsar tarball](getting-started-standalone.md#download-pulsar-distribution).
 2. Download and untar the Pulsar offloaders package, then copy the Pulsar offloaders as `offloaders` in the Pulsar directory. See [Install tiered storage offloaders](tiered-storage-overview.md#how-to-install-tiered-storage-offloaders).
 
 ## Configuration
@@ -301,7 +301,7 @@ Execute the following commands in the repository where you download Pulsar tarba
    bin/pulsar standalone -a 127.0.0.1
    ```
 
-2. To ensure the data generated is not deleted immediately, it is recommended to set the [retention policy](cookbooks-retention-expiry.md/#retention-policies), which can be either a **size** limit or a **time** limit. The larger value you set for the retention policy, the longer the data can be retained.
+2. To ensure the data generated is not deleted immediately, it is recommended to set the [retention policy](cookbooks-retention-expiry.md#retention-policies), which can be either a **size** limit or a **time** limit. The larger value you set for the retention policy, the longer the data can be retained.
 
    ```shell
    bin/pulsar-admin namespaces set-retention public/default --size 100M --time 2d
diff --git a/site2/docs/tiered-storage-gcs.md b/site2/docs/tiered-storage-gcs.md
index bcc59a1f7e9..9783b9bc239 100644
--- a/site2/docs/tiered-storage-gcs.md
+++ b/site2/docs/tiered-storage-gcs.md
@@ -16,7 +16,7 @@ Follow the steps below to install the GCS offloader.
 
 ### Steps
 
-1. [Download the Pulsar tarball](getting-started-standalone.md#step-1-download-pulsar-distribution).
+1. [Download the Pulsar tarball](getting-started-standalone.md#download-pulsar-distribution).
 2. Download and untar the Pulsar offloaders package, then copy the Pulsar offloaders as `offloaders` in the Pulsar directory. See [Install tiered storage offloaders](tiered-storage-overview.md#how-to-install-tiered-storage-offloaders).
 
 ## Configuration
diff --git a/site2/docs/tiered-storage-s3.md b/site2/docs/tiered-storage-s3.md
index 5f8c675960e..43b55367dfe 100644
--- a/site2/docs/tiered-storage-s3.md
+++ b/site2/docs/tiered-storage-s3.md
@@ -18,7 +18,7 @@ Follow the steps below to install the S3 offloader.
 
 ### Steps
 
-1. [Download the Pulsar tarball](getting-started-standalone.md#step-1-download-pulsar-distribution).
+1. [Download the Pulsar tarball](getting-started-standalone.md#download-pulsar-distribution).
 2. Download and untar the Pulsar offloaders package, then copy the Pulsar offloaders as `offloaders` in the Pulsar directory. See [Install tiered storage offloaders](tiered-storage-overview.md#how-to-install-tiered-storage-offloaders).
 
 ## Configuration