You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by mm...@apache.org on 2019/03/05 08:54:32 UTC

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

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 0116ec6  Updated site at revision 07cebb1
0116ec6 is described below

commit 0116ec612a9ca9bbcff472d386e53df10b636f4a
Author: jenkins <bu...@apache.org>
AuthorDate: Tue Mar 5 08:54:23 2019 +0000

    Updated site at revision 07cebb1
---
 .../2.1.0-incubating/client-libraries-python.html  |   4 +-
 .../client-libraries-python/index.html             |   4 +-
 .../client-libraries-websocket.html                |   4 +-
 .../client-libraries-websocket/index.html          |   4 +-
 .../docs/en/2.1.0-incubating/functions-api.html    |   2 +-
 .../en/2.1.0-incubating/functions-api/index.html   |   2 +-
 .../en/2.1.0-incubating/reference-cli-tools.html   |   2 +-
 .../reference-cli-tools/index.html                 |   2 +-
 .../security-tls-authentication.html               |   2 +-
 .../security-tls-authentication/index.html         |   2 +-
 .../2.1.0-incubating/security-tls-transport.html   |   2 +-
 .../security-tls-transport/index.html              |   2 +-
 .../en/2.1.0-incubating/standalone-docker.html     |   2 +-
 .../2.1.0-incubating/standalone-docker/index.html  |   2 +-
 .../2.1.1-incubating/client-libraries-python.html  |   4 +-
 .../client-libraries-python/index.html             |   4 +-
 .../client-libraries-websocket.html                |   4 +-
 .../client-libraries-websocket/index.html          |   4 +-
 .../docs/en/2.1.1-incubating/functions-api.html    |   2 +-
 .../en/2.1.1-incubating/functions-api/index.html   |   2 +-
 .../en/2.1.1-incubating/reference-cli-tools.html   |   2 +-
 .../reference-cli-tools/index.html                 |   2 +-
 .../security-tls-authentication.html               |   2 +-
 .../security-tls-authentication/index.html         |   2 +-
 .../2.1.1-incubating/security-tls-transport.html   |   2 +-
 .../security-tls-transport/index.html              |   2 +-
 .../en/2.1.1-incubating/standalone-docker.html     |   2 +-
 .../2.1.1-incubating/standalone-docker/index.html  |   2 +-
 content/docs/en/2.2.0/client-libraries-python.html |   4 +-
 .../en/2.2.0/client-libraries-python/index.html    |   4 +-
 .../docs/en/2.2.0/client-libraries-websocket.html  |   4 +-
 .../en/2.2.0/client-libraries-websocket/index.html |   4 +-
 content/docs/en/2.2.0/functions-api.html           |   2 +-
 content/docs/en/2.2.0/functions-api/index.html     |   2 +-
 content/docs/en/2.2.0/reference-cli-tools.html     |   2 +-
 .../docs/en/2.2.0/reference-cli-tools/index.html   |   2 +-
 .../docs/en/2.2.0/security-tls-authentication.html |   2 +-
 .../2.2.0/security-tls-authentication/index.html   |   2 +-
 content/docs/en/2.2.0/security-tls-transport.html  |   2 +-
 .../en/2.2.0/security-tls-transport/index.html     |   2 +-
 content/docs/en/2.2.0/standalone-docker.html       |   2 +-
 content/docs/en/2.2.0/standalone-docker/index.html |   2 +-
 content/docs/en/2.2.1/client-libraries-python.html |   4 +-
 .../en/2.2.1/client-libraries-python/index.html    |   4 +-
 .../docs/en/2.2.1/client-libraries-websocket.html  |   4 +-
 .../en/2.2.1/client-libraries-websocket/index.html |   4 +-
 content/docs/en/2.2.1/functions-api.html           |   2 +-
 content/docs/en/2.2.1/functions-api/index.html     |   2 +-
 content/docs/en/2.2.1/reference-cli-tools.html     |   2 +-
 .../docs/en/2.2.1/reference-cli-tools/index.html   |   2 +-
 .../docs/en/2.2.1/security-tls-authentication.html |   2 +-
 .../2.2.1/security-tls-authentication/index.html   |   2 +-
 content/docs/en/2.2.1/security-tls-transport.html  |   2 +-
 .../en/2.2.1/security-tls-transport/index.html     |   2 +-
 content/docs/en/2.2.1/standalone-docker.html       |   2 +-
 content/docs/en/2.2.1/standalone-docker/index.html |   2 +-
 content/docs/en/client-libraries-python.html       |   6 +-
 content/docs/en/client-libraries-python/index.html |   6 +-
 content/docs/en/client-libraries-websocket.html    |   4 +-
 .../docs/en/client-libraries-websocket/index.html  |   4 +-
 content/docs/en/functions-api.html                 |   2 +-
 content/docs/en/functions-api/index.html           |   2 +-
 content/docs/en/io-cdc-canal.html                  | 242 +++++++++++++++++++++
 content/docs/en/io-cdc-canal/index.html            | 242 +++++++++++++++++++++
 .../docs/en/{io-cdc.html => io-cdc-debezium.html}  |  65 +-----
 .../docs/en/{io-cdc => io-cdc-debezium}/index.html |  65 +-----
 content/docs/en/io-cdc.html                        | 132 +----------
 content/docs/en/io-cdc/index.html                  | 132 +----------
 content/docs/en/io-connectors.html                 |   2 +-
 content/docs/en/io-connectors/index.html           |   2 +-
 .../docs/en/next/admin-api-partitioned-topics.html |  54 +++--
 .../next/admin-api-partitioned-topics/index.html   |  54 +++--
 content/docs/en/next/client-libraries-python.html  |   6 +-
 .../en/next/client-libraries-python/index.html     |   6 +-
 .../docs/en/next/client-libraries-websocket.html   |   4 +-
 .../en/next/client-libraries-websocket/index.html  |   4 +-
 content/docs/en/next/functions-api.html            |   2 +-
 content/docs/en/next/functions-api/index.html      |   2 +-
 content/docs/en/next/io-cdc-canal.html             | 242 +++++++++++++++++++++
 content/docs/en/next/io-cdc-canal/index.html       | 242 +++++++++++++++++++++
 .../en/{io-cdc.html => next/io-cdc-debezium.html}  |  67 +-----
 .../en/{io-cdc => next/io-cdc-debezium}/index.html |  67 +-----
 content/docs/en/next/io-cdc.html                   | 132 +----------
 content/docs/en/next/io-cdc/index.html             | 132 +----------
 content/docs/en/next/pulsar-admin.html             |  10 +-
 content/docs/en/next/pulsar-admin/index.html       |  10 +-
 content/docs/en/next/reference-cli-tools.html      |   2 +-
 .../docs/en/next/reference-cli-tools/index.html    |   2 +-
 .../docs/en/next/security-tls-authentication.html  |   2 +-
 .../en/next/security-tls-authentication/index.html |   2 +-
 content/docs/en/next/security-tls-transport.html   |   2 +-
 .../docs/en/next/security-tls-transport/index.html |   2 +-
 content/docs/en/next/standalone-docker.html        |   2 +-
 content/docs/en/next/standalone-docker/index.html  |   2 +-
 content/docs/en/security-tls-authentication.html   |   2 +-
 .../docs/en/security-tls-authentication/index.html |   2 +-
 content/docs/en/security-tls-transport.html        |   2 +-
 content/docs/en/security-tls-transport/index.html  |   2 +-
 content/docs/en/standalone-docker.html             |   2 +-
 content/docs/en/standalone-docker/index.html       |   2 +-
 content/docs/en/standalone.html                    |  10 +-
 content/docs/en/standalone/index.html              |  10 +-
 .../2.1.0-incubating/client-libraries-python.html  |   4 +-
 .../client-libraries-python/index.html             |   4 +-
 .../client-libraries-websocket.html                |   4 +-
 .../client-libraries-websocket/index.html          |   4 +-
 .../docs/fr/2.1.0-incubating/functions-api.html    |   2 +-
 .../fr/2.1.0-incubating/functions-api/index.html   |   2 +-
 .../fr/2.1.0-incubating/reference-cli-tools.html   |   2 +-
 .../reference-cli-tools/index.html                 |   2 +-
 .../security-tls-authentication.html               |   2 +-
 .../security-tls-authentication/index.html         |   2 +-
 .../2.1.0-incubating/security-tls-transport.html   |   2 +-
 .../security-tls-transport/index.html              |   2 +-
 .../fr/2.1.0-incubating/standalone-docker.html     |   2 +-
 .../2.1.0-incubating/standalone-docker/index.html  |   2 +-
 .../2.1.1-incubating/client-libraries-python.html  |   4 +-
 .../client-libraries-python/index.html             |   4 +-
 .../client-libraries-websocket.html                |   4 +-
 .../client-libraries-websocket/index.html          |   4 +-
 .../docs/fr/2.1.1-incubating/functions-api.html    |   2 +-
 .../fr/2.1.1-incubating/functions-api/index.html   |   2 +-
 .../fr/2.1.1-incubating/reference-cli-tools.html   |   2 +-
 .../reference-cli-tools/index.html                 |   2 +-
 .../security-tls-authentication.html               |   2 +-
 .../security-tls-authentication/index.html         |   2 +-
 .../2.1.1-incubating/security-tls-transport.html   |   2 +-
 .../security-tls-transport/index.html              |   2 +-
 .../fr/2.1.1-incubating/standalone-docker.html     |   2 +-
 .../2.1.1-incubating/standalone-docker/index.html  |   2 +-
 content/docs/fr/2.2.0/client-libraries-python.html |   4 +-
 .../fr/2.2.0/client-libraries-python/index.html    |   4 +-
 .../docs/fr/2.2.0/client-libraries-websocket.html  |   4 +-
 .../fr/2.2.0/client-libraries-websocket/index.html |   4 +-
 content/docs/fr/2.2.0/functions-api.html           |   2 +-
 content/docs/fr/2.2.0/functions-api/index.html     |   2 +-
 content/docs/fr/2.2.0/reference-cli-tools.html     |   2 +-
 .../docs/fr/2.2.0/reference-cli-tools/index.html   |   2 +-
 .../docs/fr/2.2.0/security-tls-authentication.html |   2 +-
 .../2.2.0/security-tls-authentication/index.html   |   2 +-
 content/docs/fr/2.2.0/security-tls-transport.html  |   2 +-
 .../fr/2.2.0/security-tls-transport/index.html     |   2 +-
 content/docs/fr/2.2.0/standalone-docker.html       |   2 +-
 content/docs/fr/2.2.0/standalone-docker/index.html |   2 +-
 content/docs/fr/2.2.1/client-libraries-python.html |   4 +-
 .../fr/2.2.1/client-libraries-python/index.html    |   4 +-
 .../docs/fr/2.2.1/client-libraries-websocket.html  |   4 +-
 .../fr/2.2.1/client-libraries-websocket/index.html |   4 +-
 content/docs/fr/2.2.1/functions-api.html           |   2 +-
 content/docs/fr/2.2.1/functions-api/index.html     |   2 +-
 content/docs/fr/2.2.1/reference-cli-tools.html     |   2 +-
 .../docs/fr/2.2.1/reference-cli-tools/index.html   |   2 +-
 .../docs/fr/2.2.1/security-tls-authentication.html |   2 +-
 .../2.2.1/security-tls-authentication/index.html   |   2 +-
 content/docs/fr/2.2.1/security-tls-transport.html  |   2 +-
 .../fr/2.2.1/security-tls-transport/index.html     |   2 +-
 content/docs/fr/2.2.1/standalone-docker.html       |   2 +-
 content/docs/fr/2.2.1/standalone-docker/index.html |   2 +-
 content/docs/fr/client-libraries-python.html       |   6 +-
 content/docs/fr/client-libraries-python/index.html |   6 +-
 content/docs/fr/client-libraries-websocket.html    |   4 +-
 .../docs/fr/client-libraries-websocket/index.html  |   4 +-
 content/docs/fr/functions-api.html                 |   2 +-
 content/docs/fr/functions-api/index.html           |   2 +-
 content/docs/fr/io-cdc-canal.html                  | 206 ++++++++++++++++++
 content/docs/fr/io-cdc-canal/index.html            | 206 ++++++++++++++++++
 content/docs/fr/io-cdc-debezium.html               | 184 ++++++++++++++++
 content/docs/fr/io-cdc-debezium/index.html         | 184 ++++++++++++++++
 content/docs/fr/io-cdc.html                        | 105 +--------
 content/docs/fr/io-cdc/index.html                  | 105 +--------
 content/docs/fr/io-connectors.html                 |   2 +-
 content/docs/fr/io-connectors/index.html           |   2 +-
 .../docs/fr/next/admin-api-partitioned-topics.html |  52 +++--
 .../next/admin-api-partitioned-topics/index.html   |  52 +++--
 content/docs/fr/next/client-libraries-python.html  |   6 +-
 .../fr/next/client-libraries-python/index.html     |   6 +-
 .../docs/fr/next/client-libraries-websocket.html   |   4 +-
 .../fr/next/client-libraries-websocket/index.html  |   4 +-
 content/docs/fr/next/functions-api.html            |   2 +-
 content/docs/fr/next/functions-api/index.html      |   2 +-
 content/docs/fr/next/io-cdc-canal.html             | 206 ++++++++++++++++++
 content/docs/fr/next/io-cdc-canal/index.html       | 206 ++++++++++++++++++
 content/docs/fr/next/io-cdc-debezium.html          | 184 ++++++++++++++++
 content/docs/fr/next/io-cdc-debezium/index.html    | 184 ++++++++++++++++
 content/docs/fr/next/io-cdc.html                   | 105 +--------
 content/docs/fr/next/io-cdc/index.html             | 105 +--------
 content/docs/fr/next/pulsar-admin.html             |  11 +-
 content/docs/fr/next/pulsar-admin/index.html       |  11 +-
 content/docs/fr/next/reference-cli-tools.html      |   2 +-
 .../docs/fr/next/reference-cli-tools/index.html    |   2 +-
 .../docs/fr/next/security-tls-authentication.html  |   2 +-
 .../fr/next/security-tls-authentication/index.html |   2 +-
 content/docs/fr/next/security-tls-transport.html   |   2 +-
 .../docs/fr/next/security-tls-transport/index.html |   2 +-
 content/docs/fr/next/standalone-docker.html        |   2 +-
 content/docs/fr/next/standalone-docker/index.html  |   2 +-
 content/docs/fr/security-tls-authentication.html   |   2 +-
 .../docs/fr/security-tls-authentication/index.html |   2 +-
 content/docs/fr/security-tls-transport.html        |   2 +-
 content/docs/fr/security-tls-transport/index.html  |   2 +-
 content/docs/fr/standalone-docker.html             |   2 +-
 content/docs/fr/standalone-docker/index.html       |   2 +-
 content/docs/fr/standalone.html                    |  10 +-
 content/docs/fr/standalone/index.html              |  10 +-
 content/docs/io-cdc-canal.html                     |  13 ++
 content/docs/io-cdc-canal/index.html               |  13 ++
 content/docs/io-cdc-debezium.html                  |  13 ++
 content/docs/io-cdc-debezium/index.html            |  13 ++
 .../2.1.0-incubating/client-libraries-python.html  |   4 +-
 .../client-libraries-python/index.html             |   4 +-
 .../client-libraries-websocket.html                |   4 +-
 .../client-libraries-websocket/index.html          |   4 +-
 .../docs/ja/2.1.0-incubating/functions-api.html    |   2 +-
 .../ja/2.1.0-incubating/functions-api/index.html   |   2 +-
 .../ja/2.1.0-incubating/reference-cli-tools.html   |   2 +-
 .../reference-cli-tools/index.html                 |   2 +-
 .../security-tls-authentication.html               |   2 +-
 .../security-tls-authentication/index.html         |   2 +-
 .../2.1.0-incubating/security-tls-transport.html   |   2 +-
 .../security-tls-transport/index.html              |   2 +-
 .../ja/2.1.0-incubating/standalone-docker.html     |   2 +-
 .../2.1.0-incubating/standalone-docker/index.html  |   2 +-
 .../2.1.1-incubating/client-libraries-python.html  |   4 +-
 .../client-libraries-python/index.html             |   4 +-
 .../client-libraries-websocket.html                |   4 +-
 .../client-libraries-websocket/index.html          |   4 +-
 .../docs/ja/2.1.1-incubating/functions-api.html    |   2 +-
 .../ja/2.1.1-incubating/functions-api/index.html   |   2 +-
 .../ja/2.1.1-incubating/reference-cli-tools.html   |   2 +-
 .../reference-cli-tools/index.html                 |   2 +-
 .../security-tls-authentication.html               |   2 +-
 .../security-tls-authentication/index.html         |   2 +-
 .../2.1.1-incubating/security-tls-transport.html   |   2 +-
 .../security-tls-transport/index.html              |   2 +-
 .../ja/2.1.1-incubating/standalone-docker.html     |   2 +-
 .../2.1.1-incubating/standalone-docker/index.html  |   2 +-
 content/docs/ja/2.2.0/client-libraries-python.html |   4 +-
 .../ja/2.2.0/client-libraries-python/index.html    |   4 +-
 .../docs/ja/2.2.0/client-libraries-websocket.html  |   4 +-
 .../ja/2.2.0/client-libraries-websocket/index.html |   4 +-
 content/docs/ja/2.2.0/functions-api.html           |   2 +-
 content/docs/ja/2.2.0/functions-api/index.html     |   2 +-
 content/docs/ja/2.2.0/reference-cli-tools.html     |   2 +-
 .../docs/ja/2.2.0/reference-cli-tools/index.html   |   2 +-
 .../docs/ja/2.2.0/security-tls-authentication.html |   2 +-
 .../2.2.0/security-tls-authentication/index.html   |   2 +-
 content/docs/ja/2.2.0/security-tls-transport.html  |   2 +-
 .../ja/2.2.0/security-tls-transport/index.html     |   2 +-
 content/docs/ja/2.2.0/standalone-docker.html       |   2 +-
 content/docs/ja/2.2.0/standalone-docker/index.html |   2 +-
 content/docs/ja/2.2.1/client-libraries-python.html |   4 +-
 .../ja/2.2.1/client-libraries-python/index.html    |   4 +-
 .../docs/ja/2.2.1/client-libraries-websocket.html  |   4 +-
 .../ja/2.2.1/client-libraries-websocket/index.html |   4 +-
 content/docs/ja/2.2.1/functions-api.html           |   2 +-
 content/docs/ja/2.2.1/functions-api/index.html     |   2 +-
 content/docs/ja/2.2.1/reference-cli-tools.html     |   2 +-
 .../docs/ja/2.2.1/reference-cli-tools/index.html   |   2 +-
 .../docs/ja/2.2.1/security-tls-authentication.html |   2 +-
 .../2.2.1/security-tls-authentication/index.html   |   2 +-
 content/docs/ja/2.2.1/security-tls-transport.html  |   2 +-
 .../ja/2.2.1/security-tls-transport/index.html     |   2 +-
 content/docs/ja/2.2.1/standalone-docker.html       |   2 +-
 content/docs/ja/2.2.1/standalone-docker/index.html |   2 +-
 content/docs/ja/client-libraries-python.html       |   6 +-
 content/docs/ja/client-libraries-python/index.html |   6 +-
 content/docs/ja/client-libraries-websocket.html    |   4 +-
 .../docs/ja/client-libraries-websocket/index.html  |   4 +-
 content/docs/ja/functions-api.html                 |   2 +-
 content/docs/ja/functions-api/index.html           |   2 +-
 content/docs/ja/io-cdc-canal.html                  | 206 ++++++++++++++++++
 content/docs/ja/io-cdc-canal/index.html            | 206 ++++++++++++++++++
 content/docs/ja/io-cdc-debezium.html               | 184 ++++++++++++++++
 content/docs/ja/io-cdc-debezium/index.html         | 184 ++++++++++++++++
 content/docs/ja/io-cdc.html                        | 105 +--------
 content/docs/ja/io-cdc/index.html                  | 105 +--------
 content/docs/ja/io-connectors.html                 |   2 +-
 content/docs/ja/io-connectors/index.html           |   2 +-
 .../docs/ja/next/admin-api-partitioned-topics.html |  52 +++--
 .../next/admin-api-partitioned-topics/index.html   |  52 +++--
 content/docs/ja/next/client-libraries-python.html  |   6 +-
 .../ja/next/client-libraries-python/index.html     |   6 +-
 .../docs/ja/next/client-libraries-websocket.html   |   4 +-
 .../ja/next/client-libraries-websocket/index.html  |   4 +-
 content/docs/ja/next/functions-api.html            |   2 +-
 content/docs/ja/next/functions-api/index.html      |   2 +-
 content/docs/ja/next/io-cdc-canal.html             | 206 ++++++++++++++++++
 content/docs/ja/next/io-cdc-canal/index.html       | 206 ++++++++++++++++++
 content/docs/ja/next/io-cdc-debezium.html          | 184 ++++++++++++++++
 content/docs/ja/next/io-cdc-debezium/index.html    | 184 ++++++++++++++++
 content/docs/ja/next/io-cdc.html                   | 105 +--------
 content/docs/ja/next/io-cdc/index.html             | 105 +--------
 content/docs/ja/next/pulsar-admin.html             |  11 +-
 content/docs/ja/next/pulsar-admin/index.html       |  11 +-
 content/docs/ja/next/reference-cli-tools.html      |   2 +-
 .../docs/ja/next/reference-cli-tools/index.html    |   2 +-
 .../docs/ja/next/security-tls-authentication.html  |   2 +-
 .../ja/next/security-tls-authentication/index.html |   2 +-
 content/docs/ja/next/security-tls-transport.html   |   2 +-
 .../docs/ja/next/security-tls-transport/index.html |   2 +-
 content/docs/ja/next/standalone-docker.html        |   2 +-
 content/docs/ja/next/standalone-docker/index.html  |   2 +-
 content/docs/ja/security-tls-authentication.html   |   2 +-
 .../docs/ja/security-tls-authentication/index.html |   2 +-
 content/docs/ja/security-tls-transport.html        |   2 +-
 content/docs/ja/security-tls-transport/index.html  |   2 +-
 content/docs/ja/standalone-docker.html             |   2 +-
 content/docs/ja/standalone-docker/index.html       |   2 +-
 content/docs/ja/standalone.html                    |  10 +-
 content/docs/ja/standalone/index.html              |  10 +-
 content/docs/next/io-cdc-canal.html                |  13 ++
 content/docs/next/io-cdc-canal/index.html          |  13 ++
 content/docs/next/io-cdc-debezium.html             |  13 ++
 content/docs/next/io-cdc-debezium/index.html       |  13 ++
 .../2.1.0-incubating/client-libraries-python.html  |   4 +-
 .../client-libraries-python/index.html             |   4 +-
 .../client-libraries-websocket.html                |   4 +-
 .../client-libraries-websocket/index.html          |   4 +-
 .../docs/zh-CN/2.1.0-incubating/functions-api.html |   2 +-
 .../2.1.0-incubating/functions-api/index.html      |   2 +-
 .../2.1.0-incubating/functions-deploying.html      |  14 +-
 .../functions-deploying/index.html                 |  14 +-
 .../2.1.0-incubating/functions-guarantees.html     |   6 +-
 .../functions-guarantees/index.html                |   6 +-
 .../zh-CN/2.1.0-incubating/functions-overview.html | 164 +++++++-------
 .../2.1.0-incubating/functions-overview/index.html | 164 +++++++-------
 .../docs/zh-CN/2.1.0-incubating/pulsar-admin.html  |  10 +-
 .../zh-CN/2.1.0-incubating/pulsar-admin/index.html |  10 +-
 .../2.1.0-incubating/reference-cli-tools.html      |   2 +-
 .../reference-cli-tools/index.html                 |   2 +-
 .../security-tls-authentication.html               |   2 +-
 .../security-tls-authentication/index.html         |   2 +-
 .../2.1.0-incubating/security-tls-transport.html   |   2 +-
 .../security-tls-transport/index.html              |   2 +-
 .../zh-CN/2.1.0-incubating/standalone-docker.html  |   2 +-
 .../2.1.0-incubating/standalone-docker/index.html  |   2 +-
 .../2.1.1-incubating/client-libraries-python.html  |   4 +-
 .../client-libraries-python/index.html             |   4 +-
 .../client-libraries-websocket.html                |   4 +-
 .../client-libraries-websocket/index.html          |   4 +-
 .../docs/zh-CN/2.1.1-incubating/functions-api.html |   2 +-
 .../2.1.1-incubating/functions-api/index.html      |   2 +-
 .../2.1.1-incubating/functions-deploying.html      |  14 +-
 .../functions-deploying/index.html                 |  14 +-
 .../2.1.1-incubating/functions-guarantees.html     |   6 +-
 .../functions-guarantees/index.html                |   6 +-
 .../zh-CN/2.1.1-incubating/functions-overview.html | 164 +++++++-------
 .../2.1.1-incubating/functions-overview/index.html | 164 +++++++-------
 .../docs/zh-CN/2.1.1-incubating/pulsar-admin.html  |  10 +-
 .../zh-CN/2.1.1-incubating/pulsar-admin/index.html |  10 +-
 .../2.1.1-incubating/reference-cli-tools.html      |   2 +-
 .../reference-cli-tools/index.html                 |   2 +-
 .../security-tls-authentication.html               |   2 +-
 .../security-tls-authentication/index.html         |   2 +-
 .../2.1.1-incubating/security-tls-transport.html   |   2 +-
 .../security-tls-transport/index.html              |   2 +-
 .../zh-CN/2.1.1-incubating/standalone-docker.html  |   2 +-
 .../2.1.1-incubating/standalone-docker/index.html  |   2 +-
 .../docs/zh-CN/2.2.0/client-libraries-python.html  |   4 +-
 .../zh-CN/2.2.0/client-libraries-python/index.html |   4 +-
 .../zh-CN/2.2.0/client-libraries-websocket.html    |   4 +-
 .../2.2.0/client-libraries-websocket/index.html    |   4 +-
 content/docs/zh-CN/2.2.0/functions-api.html        |   2 +-
 content/docs/zh-CN/2.2.0/functions-api/index.html  |   2 +-
 content/docs/zh-CN/2.2.0/functions-deploying.html  |  14 +-
 .../zh-CN/2.2.0/functions-deploying/index.html     |  14 +-
 content/docs/zh-CN/2.2.0/functions-guarantees.html |   6 +-
 .../zh-CN/2.2.0/functions-guarantees/index.html    |   6 +-
 content/docs/zh-CN/2.2.0/functions-overview.html   | 164 +++++++-------
 .../docs/zh-CN/2.2.0/functions-overview/index.html | 164 +++++++-------
 content/docs/zh-CN/2.2.0/pulsar-admin.html         |  14 +-
 content/docs/zh-CN/2.2.0/pulsar-admin/index.html   |  14 +-
 content/docs/zh-CN/2.2.0/reference-cli-tools.html  |   2 +-
 .../zh-CN/2.2.0/reference-cli-tools/index.html     |   2 +-
 .../zh-CN/2.2.0/security-tls-authentication.html   |   2 +-
 .../2.2.0/security-tls-authentication/index.html   |   2 +-
 .../docs/zh-CN/2.2.0/security-tls-transport.html   |   2 +-
 .../zh-CN/2.2.0/security-tls-transport/index.html  |   2 +-
 content/docs/zh-CN/2.2.0/standalone-docker.html    |   2 +-
 .../docs/zh-CN/2.2.0/standalone-docker/index.html  |   2 +-
 .../docs/zh-CN/2.2.1/client-libraries-python.html  |   4 +-
 .../zh-CN/2.2.1/client-libraries-python/index.html |   4 +-
 .../zh-CN/2.2.1/client-libraries-websocket.html    |   4 +-
 .../2.2.1/client-libraries-websocket/index.html    |   4 +-
 content/docs/zh-CN/2.2.1/functions-api.html        |   2 +-
 content/docs/zh-CN/2.2.1/functions-api/index.html  |   2 +-
 content/docs/zh-CN/2.2.1/functions-deploying.html  |  14 +-
 .../zh-CN/2.2.1/functions-deploying/index.html     |  14 +-
 content/docs/zh-CN/2.2.1/functions-guarantees.html |   6 +-
 .../zh-CN/2.2.1/functions-guarantees/index.html    |   6 +-
 content/docs/zh-CN/2.2.1/functions-overview.html   | 152 ++++++-------
 .../docs/zh-CN/2.2.1/functions-overview/index.html | 152 ++++++-------
 content/docs/zh-CN/2.2.1/pulsar-admin.html         |  14 +-
 content/docs/zh-CN/2.2.1/pulsar-admin/index.html   |  14 +-
 content/docs/zh-CN/2.2.1/reference-cli-tools.html  |   2 +-
 .../zh-CN/2.2.1/reference-cli-tools/index.html     |   2 +-
 .../zh-CN/2.2.1/security-tls-authentication.html   |   2 +-
 .../2.2.1/security-tls-authentication/index.html   |   2 +-
 .../docs/zh-CN/2.2.1/security-tls-transport.html   |   2 +-
 .../zh-CN/2.2.1/security-tls-transport/index.html  |   2 +-
 content/docs/zh-CN/2.2.1/standalone-docker.html    |   2 +-
 .../docs/zh-CN/2.2.1/standalone-docker/index.html  |   2 +-
 content/docs/zh-CN/client-libraries-python.html    |   6 +-
 .../docs/zh-CN/client-libraries-python/index.html  |   6 +-
 content/docs/zh-CN/client-libraries-websocket.html |   4 +-
 .../zh-CN/client-libraries-websocket/index.html    |   4 +-
 content/docs/zh-CN/functions-api.html              |   2 +-
 content/docs/zh-CN/functions-api/index.html        |   2 +-
 content/docs/zh-CN/functions-deploying.html        |  12 +-
 content/docs/zh-CN/functions-deploying/index.html  |  12 +-
 content/docs/zh-CN/functions-guarantees.html       |   6 +-
 content/docs/zh-CN/functions-guarantees/index.html |   6 +-
 content/docs/zh-CN/functions-overview.html         | 152 ++++++-------
 content/docs/zh-CN/functions-overview/index.html   | 152 ++++++-------
 content/docs/zh-CN/io-cdc-canal.html               | 206 ++++++++++++++++++
 content/docs/zh-CN/io-cdc-canal/index.html         | 206 ++++++++++++++++++
 content/docs/zh-CN/io-cdc-debezium.html            | 184 ++++++++++++++++
 content/docs/zh-CN/io-cdc-debezium/index.html      | 184 ++++++++++++++++
 content/docs/zh-CN/io-cdc.html                     | 105 +--------
 content/docs/zh-CN/io-cdc/index.html               | 105 +--------
 content/docs/zh-CN/io-connectors.html              |   2 +-
 content/docs/zh-CN/io-connectors/index.html        |   2 +-
 .../zh-CN/next/admin-api-partitioned-topics.html   |  52 +++--
 .../next/admin-api-partitioned-topics/index.html   |  52 +++--
 .../docs/zh-CN/next/client-libraries-python.html   |   6 +-
 .../zh-CN/next/client-libraries-python/index.html  |   6 +-
 .../zh-CN/next/client-libraries-websocket.html     |   4 +-
 .../next/client-libraries-websocket/index.html     |   4 +-
 content/docs/zh-CN/next/functions-api.html         |   2 +-
 content/docs/zh-CN/next/functions-api/index.html   |   2 +-
 content/docs/zh-CN/next/functions-deploying.html   |  14 +-
 .../docs/zh-CN/next/functions-deploying/index.html |  14 +-
 content/docs/zh-CN/next/functions-guarantees.html  |   6 +-
 .../zh-CN/next/functions-guarantees/index.html     |   6 +-
 content/docs/zh-CN/next/functions-overview.html    | 166 +++++++-------
 .../docs/zh-CN/next/functions-overview/index.html  | 166 +++++++-------
 content/docs/zh-CN/next/io-cdc-canal.html          | 206 ++++++++++++++++++
 content/docs/zh-CN/next/io-cdc-canal/index.html    | 206 ++++++++++++++++++
 content/docs/zh-CN/next/io-cdc-debezium.html       | 184 ++++++++++++++++
 content/docs/zh-CN/next/io-cdc-debezium/index.html | 184 ++++++++++++++++
 content/docs/zh-CN/next/io-cdc.html                | 105 +--------
 content/docs/zh-CN/next/io-cdc/index.html          | 105 +--------
 content/docs/zh-CN/next/pulsar-admin.html          |  25 ++-
 content/docs/zh-CN/next/pulsar-admin/index.html    |  25 ++-
 content/docs/zh-CN/next/reference-cli-tools.html   |   2 +-
 .../docs/zh-CN/next/reference-cli-tools/index.html |   2 +-
 .../zh-CN/next/security-tls-authentication.html    |   2 +-
 .../next/security-tls-authentication/index.html    |   2 +-
 .../docs/zh-CN/next/security-tls-transport.html    |   2 +-
 .../zh-CN/next/security-tls-transport/index.html   |   2 +-
 content/docs/zh-CN/next/standalone-docker.html     |   2 +-
 .../docs/zh-CN/next/standalone-docker/index.html   |   2 +-
 content/docs/zh-CN/pulsar-admin.html               |  14 +-
 content/docs/zh-CN/pulsar-admin/index.html         |  14 +-
 .../docs/zh-CN/security-tls-authentication.html    |   2 +-
 .../zh-CN/security-tls-authentication/index.html   |   2 +-
 content/docs/zh-CN/security-tls-transport.html     |   2 +-
 .../docs/zh-CN/security-tls-transport/index.html   |   2 +-
 content/docs/zh-CN/standalone-docker.html          |   2 +-
 content/docs/zh-CN/standalone-docker/index.html    |   2 +-
 content/docs/zh-CN/standalone.html                 |  10 +-
 content/docs/zh-CN/standalone/index.html           |  10 +-
 content/download.html                              |   2 +-
 content/download/index.html                        |   2 +-
 content/en/download.html                           |   2 +-
 content/en/download/index.html                     |   2 +-
 content/fr/download.html                           |   2 +-
 content/fr/download/index.html                     |   2 +-
 content/ja/download.html                           |   2 +-
 content/ja/download/index.html                     |   2 +-
 content/sitemap.xml                                |   4 +
 content/swagger/swagger.json                       | 132 +++++++++--
 content/zh-CN/download.html                        |   2 +-
 content/zh-CN/download/index.html                  |   2 +-
 474 files changed, 8013 insertions(+), 3741 deletions(-)

diff --git a/content/docs/en/2.1.0-incubating/client-libraries-python.html b/content/docs/en/2.1.0-incubating/client-libraries-python.html
index 9924ade..84c5557 100644
--- a/content/docs/en/2.1.0-incubating/client-libraries-python.html
+++ b/content/docs/en/2.1.0-incubating/client-libraries-python.html
@@ -115,7 +115,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -129,7 +129,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
diff --git a/content/docs/en/2.1.0-incubating/client-libraries-python/index.html b/content/docs/en/2.1.0-incubating/client-libraries-python/index.html
index 9924ade..84c5557 100644
--- a/content/docs/en/2.1.0-incubating/client-libraries-python/index.html
+++ b/content/docs/en/2.1.0-incubating/client-libraries-python/index.html
@@ -115,7 +115,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -129,7 +129,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
diff --git a/content/docs/en/2.1.0-incubating/client-libraries-websocket.html b/content/docs/en/2.1.0-incubating/client-libraries-websocket.html
index a871154..de69d8e 100644
--- a/content/docs/en/2.1.0-incubating/client-libraries-websocket.html
+++ b/content/docs/en/2.1.0-incubating/client-libraries-websocket.html
@@ -335,7 +335,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -354,7 +354,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/en/2.1.0-incubating/client-libraries-websocket/index.html b/content/docs/en/2.1.0-incubating/client-libraries-websocket/index.html
index a871154..de69d8e 100644
--- a/content/docs/en/2.1.0-incubating/client-libraries-websocket/index.html
+++ b/content/docs/en/2.1.0-incubating/client-libraries-websocket/index.html
@@ -335,7 +335,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -354,7 +354,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/en/2.1.0-incubating/functions-api.html b/content/docs/en/2.1.0-incubating/functions-api.html
index eec0340..f698846 100644
--- a/content/docs/en/2.1.0-incubating/functions-api.html
+++ b/content/docs/en/2.1.0-incubating/functions-api.html
@@ -646,7 +646,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/en/2.1.0-incubating/functions-api/index.html b/content/docs/en/2.1.0-incubating/functions-api/index.html
index eec0340..f698846 100644
--- a/content/docs/en/2.1.0-incubating/functions-api/index.html
+++ b/content/docs/en/2.1.0-incubating/functions-api/index.html
@@ -646,7 +646,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/en/2.1.0-incubating/reference-cli-tools.html b/content/docs/en/2.1.0-incubating/reference-cli-tools.html
index db69de0..f4255df 100644
--- a/content/docs/en/2.1.0-incubating/reference-cli-tools.html
+++ b/content/docs/en/2.1.0-incubating/reference-cli-tools.html
@@ -310,7 +310,7 @@
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--auth-params</code></td><td>Authentication parameters, for example key1:val1,key2:val2</td><td></td></tr>
+<tr><td><code>--auth-params</code></td><td>Authentication parameters, whose format is determined by the implementation of method <code>configure</code> in authentication plugin class, for example &quot;key1:val1,key2:val2&quot; or &quot;{&quot;key1&quot;:&quot;val1&quot;,&quot;key2&quot;:&quot;val2&quot;}&quot;</td><td></td></tr>
 <tr><td><code>--auth-plugin</code></td><td>Authentication plugin class name</td><td></td></tr>
 <tr><td><code>--url</code></td><td>Broker URL to which to connect</td><td><a href="pulsar://localhost:6650/">pulsar://localhost:6650/</a></td></tr>
 </tbody>
diff --git a/content/docs/en/2.1.0-incubating/reference-cli-tools/index.html b/content/docs/en/2.1.0-incubating/reference-cli-tools/index.html
index db69de0..f4255df 100644
--- a/content/docs/en/2.1.0-incubating/reference-cli-tools/index.html
+++ b/content/docs/en/2.1.0-incubating/reference-cli-tools/index.html
@@ -310,7 +310,7 @@
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--auth-params</code></td><td>Authentication parameters, for example key1:val1,key2:val2</td><td></td></tr>
+<tr><td><code>--auth-params</code></td><td>Authentication parameters, whose format is determined by the implementation of method <code>configure</code> in authentication plugin class, for example &quot;key1:val1,key2:val2&quot; or &quot;{&quot;key1&quot;:&quot;val1&quot;,&quot;key2&quot;:&quot;val2&quot;}&quot;</td><td></td></tr>
 <tr><td><code>--auth-plugin</code></td><td>Authentication plugin class name</td><td></td></tr>
 <tr><td><code>--url</code></td><td>Broker URL to which to connect</td><td><a href="pulsar://localhost:6650/">pulsar://localhost:6650/</a></td></tr>
 </tbody>
diff --git a/content/docs/en/2.1.0-incubating/security-tls-authentication.html b/content/docs/en/2.1.0-incubating/security-tls-authentication.html
index 7f43fcf..fd998a2 100644
--- a/content/docs/en/2.1.0-incubating/security-tls-authentication.html
+++ b/content/docs/en/2.1.0-incubating/security-tls-authentication.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/en/2.1.0-incubating/security-tls-authentication/index.html b/content/docs/en/2.1.0-incubating/security-tls-authentication/index.html
index 7f43fcf..fd998a2 100644
--- a/content/docs/en/2.1.0-incubating/security-tls-authentication/index.html
+++ b/content/docs/en/2.1.0-incubating/security-tls-authentication/index.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/en/2.1.0-incubating/security-tls-transport.html b/content/docs/en/2.1.0-incubating/security-tls-transport.html
index 1bdc35d..f4bd94c 100644
--- a/content/docs/en/2.1.0-incubating/security-tls-transport.html
+++ b/content/docs/en/2.1.0-incubating/security-tls-transport.html
@@ -189,7 +189,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>)
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/en/2.1.0-incubating/security-tls-transport/index.html b/content/docs/en/2.1.0-incubating/security-tls-transport/index.html
index 1bdc35d..f4bd94c 100644
--- a/content/docs/en/2.1.0-incubating/security-tls-transport/index.html
+++ b/content/docs/en/2.1.0-incubating/security-tls-transport/index.html
@@ -189,7 +189,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>)
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/en/2.1.0-incubating/standalone-docker.html b/content/docs/en/2.1.0-incubating/standalone-docker.html
index 19328d8..cec0159 100644
--- a/content/docs/en/2.1.0-incubating/standalone-docker.html
+++ b/content/docs/en/2.1.0-incubating/standalone-docker.html
@@ -128,7 +128,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/en/2.1.0-incubating/standalone-docker/index.html b/content/docs/en/2.1.0-incubating/standalone-docker/index.html
index 19328d8..cec0159 100644
--- a/content/docs/en/2.1.0-incubating/standalone-docker/index.html
+++ b/content/docs/en/2.1.0-incubating/standalone-docker/index.html
@@ -128,7 +128,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/en/2.1.1-incubating/client-libraries-python.html b/content/docs/en/2.1.1-incubating/client-libraries-python.html
index bb9ad3c..5c5c4da 100644
--- a/content/docs/en/2.1.1-incubating/client-libraries-python.html
+++ b/content/docs/en/2.1.1-incubating/client-libraries-python.html
@@ -115,7 +115,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -129,7 +129,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
diff --git a/content/docs/en/2.1.1-incubating/client-libraries-python/index.html b/content/docs/en/2.1.1-incubating/client-libraries-python/index.html
index bb9ad3c..5c5c4da 100644
--- a/content/docs/en/2.1.1-incubating/client-libraries-python/index.html
+++ b/content/docs/en/2.1.1-incubating/client-libraries-python/index.html
@@ -115,7 +115,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -129,7 +129,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
diff --git a/content/docs/en/2.1.1-incubating/client-libraries-websocket.html b/content/docs/en/2.1.1-incubating/client-libraries-websocket.html
index 5c4cc67..8b0462e 100644
--- a/content/docs/en/2.1.1-incubating/client-libraries-websocket.html
+++ b/content/docs/en/2.1.1-incubating/client-libraries-websocket.html
@@ -335,7 +335,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -354,7 +354,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/en/2.1.1-incubating/client-libraries-websocket/index.html b/content/docs/en/2.1.1-incubating/client-libraries-websocket/index.html
index 5c4cc67..8b0462e 100644
--- a/content/docs/en/2.1.1-incubating/client-libraries-websocket/index.html
+++ b/content/docs/en/2.1.1-incubating/client-libraries-websocket/index.html
@@ -335,7 +335,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -354,7 +354,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/en/2.1.1-incubating/functions-api.html b/content/docs/en/2.1.1-incubating/functions-api.html
index 585626b..b9d9d40 100644
--- a/content/docs/en/2.1.1-incubating/functions-api.html
+++ b/content/docs/en/2.1.1-incubating/functions-api.html
@@ -639,7 +639,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/en/2.1.1-incubating/functions-api/index.html b/content/docs/en/2.1.1-incubating/functions-api/index.html
index 585626b..b9d9d40 100644
--- a/content/docs/en/2.1.1-incubating/functions-api/index.html
+++ b/content/docs/en/2.1.1-incubating/functions-api/index.html
@@ -639,7 +639,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/en/2.1.1-incubating/reference-cli-tools.html b/content/docs/en/2.1.1-incubating/reference-cli-tools.html
index 1c9d464..e4b40e0 100644
--- a/content/docs/en/2.1.1-incubating/reference-cli-tools.html
+++ b/content/docs/en/2.1.1-incubating/reference-cli-tools.html
@@ -310,7 +310,7 @@
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--auth-params</code></td><td>Authentication parameters, for example key1:val1,key2:val2</td><td></td></tr>
+<tr><td><code>--auth-params</code></td><td>Authentication parameters, whose format is determined by the implementation of method <code>configure</code> in authentication plugin class, for example &quot;key1:val1,key2:val2&quot; or &quot;{&quot;key1&quot;:&quot;val1&quot;,&quot;key2&quot;:&quot;val2&quot;}&quot;</td><td></td></tr>
 <tr><td><code>--auth-plugin</code></td><td>Authentication plugin class name</td><td></td></tr>
 <tr><td><code>--url</code></td><td>Broker URL to which to connect</td><td><a href="pulsar://localhost:6650/">pulsar://localhost:6650/</a></td></tr>
 </tbody>
diff --git a/content/docs/en/2.1.1-incubating/reference-cli-tools/index.html b/content/docs/en/2.1.1-incubating/reference-cli-tools/index.html
index 1c9d464..e4b40e0 100644
--- a/content/docs/en/2.1.1-incubating/reference-cli-tools/index.html
+++ b/content/docs/en/2.1.1-incubating/reference-cli-tools/index.html
@@ -310,7 +310,7 @@
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--auth-params</code></td><td>Authentication parameters, for example key1:val1,key2:val2</td><td></td></tr>
+<tr><td><code>--auth-params</code></td><td>Authentication parameters, whose format is determined by the implementation of method <code>configure</code> in authentication plugin class, for example &quot;key1:val1,key2:val2&quot; or &quot;{&quot;key1&quot;:&quot;val1&quot;,&quot;key2&quot;:&quot;val2&quot;}&quot;</td><td></td></tr>
 <tr><td><code>--auth-plugin</code></td><td>Authentication plugin class name</td><td></td></tr>
 <tr><td><code>--url</code></td><td>Broker URL to which to connect</td><td><a href="pulsar://localhost:6650/">pulsar://localhost:6650/</a></td></tr>
 </tbody>
diff --git a/content/docs/en/2.1.1-incubating/security-tls-authentication.html b/content/docs/en/2.1.1-incubating/security-tls-authentication.html
index fd170c4..89f43ec 100644
--- a/content/docs/en/2.1.1-incubating/security-tls-authentication.html
+++ b/content/docs/en/2.1.1-incubating/security-tls-authentication.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/en/2.1.1-incubating/security-tls-authentication/index.html b/content/docs/en/2.1.1-incubating/security-tls-authentication/index.html
index fd170c4..89f43ec 100644
--- a/content/docs/en/2.1.1-incubating/security-tls-authentication/index.html
+++ b/content/docs/en/2.1.1-incubating/security-tls-authentication/index.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/en/2.1.1-incubating/security-tls-transport.html b/content/docs/en/2.1.1-incubating/security-tls-transport.html
index cdf0ef3..2ad9268 100644
--- a/content/docs/en/2.1.1-incubating/security-tls-transport.html
+++ b/content/docs/en/2.1.1-incubating/security-tls-transport.html
@@ -189,7 +189,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>)
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/en/2.1.1-incubating/security-tls-transport/index.html b/content/docs/en/2.1.1-incubating/security-tls-transport/index.html
index cdf0ef3..2ad9268 100644
--- a/content/docs/en/2.1.1-incubating/security-tls-transport/index.html
+++ b/content/docs/en/2.1.1-incubating/security-tls-transport/index.html
@@ -189,7 +189,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>)
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/en/2.1.1-incubating/standalone-docker.html b/content/docs/en/2.1.1-incubating/standalone-docker.html
index 240eb9a..d94d249 100644
--- a/content/docs/en/2.1.1-incubating/standalone-docker.html
+++ b/content/docs/en/2.1.1-incubating/standalone-docker.html
@@ -128,7 +128,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/en/2.1.1-incubating/standalone-docker/index.html b/content/docs/en/2.1.1-incubating/standalone-docker/index.html
index 240eb9a..d94d249 100644
--- a/content/docs/en/2.1.1-incubating/standalone-docker/index.html
+++ b/content/docs/en/2.1.1-incubating/standalone-docker/index.html
@@ -128,7 +128,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/en/2.2.0/client-libraries-python.html b/content/docs/en/2.2.0/client-libraries-python.html
index 0bbd4b7..0162c78 100644
--- a/content/docs/en/2.2.0/client-libraries-python.html
+++ b/content/docs/en/2.2.0/client-libraries-python.html
@@ -115,7 +115,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -129,7 +129,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
diff --git a/content/docs/en/2.2.0/client-libraries-python/index.html b/content/docs/en/2.2.0/client-libraries-python/index.html
index 0bbd4b7..0162c78 100644
--- a/content/docs/en/2.2.0/client-libraries-python/index.html
+++ b/content/docs/en/2.2.0/client-libraries-python/index.html
@@ -115,7 +115,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -129,7 +129,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
diff --git a/content/docs/en/2.2.0/client-libraries-websocket.html b/content/docs/en/2.2.0/client-libraries-websocket.html
index 5e8f4f2..66f3508 100644
--- a/content/docs/en/2.2.0/client-libraries-websocket.html
+++ b/content/docs/en/2.2.0/client-libraries-websocket.html
@@ -335,7 +335,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -354,7 +354,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/en/2.2.0/client-libraries-websocket/index.html b/content/docs/en/2.2.0/client-libraries-websocket/index.html
index 5e8f4f2..66f3508 100644
--- a/content/docs/en/2.2.0/client-libraries-websocket/index.html
+++ b/content/docs/en/2.2.0/client-libraries-websocket/index.html
@@ -335,7 +335,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -354,7 +354,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/en/2.2.0/functions-api.html b/content/docs/en/2.2.0/functions-api.html
index 1daa18a..72b3fb7 100644
--- a/content/docs/en/2.2.0/functions-api.html
+++ b/content/docs/en/2.2.0/functions-api.html
@@ -651,7 +651,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/en/2.2.0/functions-api/index.html b/content/docs/en/2.2.0/functions-api/index.html
index 1daa18a..72b3fb7 100644
--- a/content/docs/en/2.2.0/functions-api/index.html
+++ b/content/docs/en/2.2.0/functions-api/index.html
@@ -651,7 +651,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/en/2.2.0/reference-cli-tools.html b/content/docs/en/2.2.0/reference-cli-tools.html
index f5cac46..787f32c 100644
--- a/content/docs/en/2.2.0/reference-cli-tools.html
+++ b/content/docs/en/2.2.0/reference-cli-tools.html
@@ -310,7 +310,7 @@
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--auth-params</code></td><td>Authentication parameters, for example key1:val1,key2:val2</td><td></td></tr>
+<tr><td><code>--auth-params</code></td><td>Authentication parameters, whose format is determined by the implementation of method <code>configure</code> in authentication plugin class, for example &quot;key1:val1,key2:val2&quot; or &quot;{&quot;key1&quot;:&quot;val1&quot;,&quot;key2&quot;:&quot;val2&quot;}&quot;</td><td></td></tr>
 <tr><td><code>--auth-plugin</code></td><td>Authentication plugin class name</td><td></td></tr>
 <tr><td><code>--url</code></td><td>Broker URL to which to connect</td><td><a href="pulsar://localhost:6650/">pulsar://localhost:6650/</a></td></tr>
 </tbody>
diff --git a/content/docs/en/2.2.0/reference-cli-tools/index.html b/content/docs/en/2.2.0/reference-cli-tools/index.html
index f5cac46..787f32c 100644
--- a/content/docs/en/2.2.0/reference-cli-tools/index.html
+++ b/content/docs/en/2.2.0/reference-cli-tools/index.html
@@ -310,7 +310,7 @@
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--auth-params</code></td><td>Authentication parameters, for example key1:val1,key2:val2</td><td></td></tr>
+<tr><td><code>--auth-params</code></td><td>Authentication parameters, whose format is determined by the implementation of method <code>configure</code> in authentication plugin class, for example &quot;key1:val1,key2:val2&quot; or &quot;{&quot;key1&quot;:&quot;val1&quot;,&quot;key2&quot;:&quot;val2&quot;}&quot;</td><td></td></tr>
 <tr><td><code>--auth-plugin</code></td><td>Authentication plugin class name</td><td></td></tr>
 <tr><td><code>--url</code></td><td>Broker URL to which to connect</td><td><a href="pulsar://localhost:6650/">pulsar://localhost:6650/</a></td></tr>
 </tbody>
diff --git a/content/docs/en/2.2.0/security-tls-authentication.html b/content/docs/en/2.2.0/security-tls-authentication.html
index 33834af..079c22b 100644
--- a/content/docs/en/2.2.0/security-tls-authentication.html
+++ b/content/docs/en/2.2.0/security-tls-authentication.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/en/2.2.0/security-tls-authentication/index.html b/content/docs/en/2.2.0/security-tls-authentication/index.html
index 33834af..079c22b 100644
--- a/content/docs/en/2.2.0/security-tls-authentication/index.html
+++ b/content/docs/en/2.2.0/security-tls-authentication/index.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/en/2.2.0/security-tls-transport.html b/content/docs/en/2.2.0/security-tls-transport.html
index 9adab6f..930ba9e 100644
--- a/content/docs/en/2.2.0/security-tls-transport.html
+++ b/content/docs/en/2.2.0/security-tls-transport.html
@@ -198,7 +198,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/en/2.2.0/security-tls-transport/index.html b/content/docs/en/2.2.0/security-tls-transport/index.html
index 9adab6f..930ba9e 100644
--- a/content/docs/en/2.2.0/security-tls-transport/index.html
+++ b/content/docs/en/2.2.0/security-tls-transport/index.html
@@ -198,7 +198,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/en/2.2.0/standalone-docker.html b/content/docs/en/2.2.0/standalone-docker.html
index 469d06f..a2c3e2a 100644
--- a/content/docs/en/2.2.0/standalone-docker.html
+++ b/content/docs/en/2.2.0/standalone-docker.html
@@ -128,7 +128,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/en/2.2.0/standalone-docker/index.html b/content/docs/en/2.2.0/standalone-docker/index.html
index 469d06f..a2c3e2a 100644
--- a/content/docs/en/2.2.0/standalone-docker/index.html
+++ b/content/docs/en/2.2.0/standalone-docker/index.html
@@ -128,7 +128,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/en/2.2.1/client-libraries-python.html b/content/docs/en/2.2.1/client-libraries-python.html
index f521840..0a998e6 100644
--- a/content/docs/en/2.2.1/client-libraries-python.html
+++ b/content/docs/en/2.2.1/client-libraries-python.html
@@ -115,7 +115,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -129,7 +129,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
diff --git a/content/docs/en/2.2.1/client-libraries-python/index.html b/content/docs/en/2.2.1/client-libraries-python/index.html
index f521840..0a998e6 100644
--- a/content/docs/en/2.2.1/client-libraries-python/index.html
+++ b/content/docs/en/2.2.1/client-libraries-python/index.html
@@ -115,7 +115,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -129,7 +129,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
diff --git a/content/docs/en/2.2.1/client-libraries-websocket.html b/content/docs/en/2.2.1/client-libraries-websocket.html
index d547d53..37a728d 100644
--- a/content/docs/en/2.2.1/client-libraries-websocket.html
+++ b/content/docs/en/2.2.1/client-libraries-websocket.html
@@ -365,7 +365,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -384,7 +384,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/en/2.2.1/client-libraries-websocket/index.html b/content/docs/en/2.2.1/client-libraries-websocket/index.html
index d547d53..37a728d 100644
--- a/content/docs/en/2.2.1/client-libraries-websocket/index.html
+++ b/content/docs/en/2.2.1/client-libraries-websocket/index.html
@@ -365,7 +365,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -384,7 +384,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/en/2.2.1/functions-api.html b/content/docs/en/2.2.1/functions-api.html
index 94b9072..264607b 100644
--- a/content/docs/en/2.2.1/functions-api.html
+++ b/content/docs/en/2.2.1/functions-api.html
@@ -651,7 +651,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/en/2.2.1/functions-api/index.html b/content/docs/en/2.2.1/functions-api/index.html
index 94b9072..264607b 100644
--- a/content/docs/en/2.2.1/functions-api/index.html
+++ b/content/docs/en/2.2.1/functions-api/index.html
@@ -651,7 +651,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/en/2.2.1/reference-cli-tools.html b/content/docs/en/2.2.1/reference-cli-tools.html
index a3f40ab..de5e2fa 100644
--- a/content/docs/en/2.2.1/reference-cli-tools.html
+++ b/content/docs/en/2.2.1/reference-cli-tools.html
@@ -310,7 +310,7 @@
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--auth-params</code></td><td>Authentication parameters, for example key1:val1,key2:val2</td><td></td></tr>
+<tr><td><code>--auth-params</code></td><td>Authentication parameters, whose format is determined by the implementation of method <code>configure</code> in authentication plugin class, for example &quot;key1:val1,key2:val2&quot; or &quot;{&quot;key1&quot;:&quot;val1&quot;,&quot;key2&quot;:&quot;val2&quot;}&quot;</td><td></td></tr>
 <tr><td><code>--auth-plugin</code></td><td>Authentication plugin class name</td><td></td></tr>
 <tr><td><code>--url</code></td><td>Broker URL to which to connect</td><td><a href="pulsar://localhost:6650/">pulsar://localhost:6650/</a></td></tr>
 </tbody>
diff --git a/content/docs/en/2.2.1/reference-cli-tools/index.html b/content/docs/en/2.2.1/reference-cli-tools/index.html
index a3f40ab..de5e2fa 100644
--- a/content/docs/en/2.2.1/reference-cli-tools/index.html
+++ b/content/docs/en/2.2.1/reference-cli-tools/index.html
@@ -310,7 +310,7 @@
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--auth-params</code></td><td>Authentication parameters, for example key1:val1,key2:val2</td><td></td></tr>
+<tr><td><code>--auth-params</code></td><td>Authentication parameters, whose format is determined by the implementation of method <code>configure</code> in authentication plugin class, for example &quot;key1:val1,key2:val2&quot; or &quot;{&quot;key1&quot;:&quot;val1&quot;,&quot;key2&quot;:&quot;val2&quot;}&quot;</td><td></td></tr>
 <tr><td><code>--auth-plugin</code></td><td>Authentication plugin class name</td><td></td></tr>
 <tr><td><code>--url</code></td><td>Broker URL to which to connect</td><td><a href="pulsar://localhost:6650/">pulsar://localhost:6650/</a></td></tr>
 </tbody>
diff --git a/content/docs/en/2.2.1/security-tls-authentication.html b/content/docs/en/2.2.1/security-tls-authentication.html
index 0737721..df54514 100644
--- a/content/docs/en/2.2.1/security-tls-authentication.html
+++ b/content/docs/en/2.2.1/security-tls-authentication.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/en/2.2.1/security-tls-authentication/index.html b/content/docs/en/2.2.1/security-tls-authentication/index.html
index 0737721..df54514 100644
--- a/content/docs/en/2.2.1/security-tls-authentication/index.html
+++ b/content/docs/en/2.2.1/security-tls-authentication/index.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/en/2.2.1/security-tls-transport.html b/content/docs/en/2.2.1/security-tls-transport.html
index e0e1617..813224c 100644
--- a/content/docs/en/2.2.1/security-tls-transport.html
+++ b/content/docs/en/2.2.1/security-tls-transport.html
@@ -210,7 +210,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/en/2.2.1/security-tls-transport/index.html b/content/docs/en/2.2.1/security-tls-transport/index.html
index e0e1617..813224c 100644
--- a/content/docs/en/2.2.1/security-tls-transport/index.html
+++ b/content/docs/en/2.2.1/security-tls-transport/index.html
@@ -210,7 +210,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/en/2.2.1/standalone-docker.html b/content/docs/en/2.2.1/standalone-docker.html
index 58c88e4..9655f97 100644
--- a/content/docs/en/2.2.1/standalone-docker.html
+++ b/content/docs/en/2.2.1/standalone-docker.html
@@ -128,7 +128,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/en/2.2.1/standalone-docker/index.html b/content/docs/en/2.2.1/standalone-docker/index.html
index 58c88e4..9655f97 100644
--- a/content/docs/en/2.2.1/standalone-docker/index.html
+++ b/content/docs/en/2.2.1/standalone-docker/index.html
@@ -128,7 +128,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/en/client-libraries-python.html b/content/docs/en/client-libraries-python.html
index a5c8ca3..b1b25d9 100644
--- a/content/docs/en/client-libraries-python.html
+++ b/content/docs/en/client-libraries-python.html
@@ -115,7 +115,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -129,7 +129,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
@@ -171,7 +171,7 @@ bytes:</p>
                   subscription_name=<span class="hljs-string">'my-subscription'</span>,
                   schema=AvroSchema(Example) )
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     ex = msg.value()
     print(<span class="hljs-string">"Received message a={} b={} c={}"</span>.format(ex.a, ex.b, ex.c))
diff --git a/content/docs/en/client-libraries-python/index.html b/content/docs/en/client-libraries-python/index.html
index a5c8ca3..b1b25d9 100644
--- a/content/docs/en/client-libraries-python/index.html
+++ b/content/docs/en/client-libraries-python/index.html
@@ -115,7 +115,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -129,7 +129,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
@@ -171,7 +171,7 @@ bytes:</p>
                   subscription_name=<span class="hljs-string">'my-subscription'</span>,
                   schema=AvroSchema(Example) )
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     ex = msg.value()
     print(<span class="hljs-string">"Received message a={} b={} c={}"</span>.format(ex.a, ex.b, ex.c))
diff --git a/content/docs/en/client-libraries-websocket.html b/content/docs/en/client-libraries-websocket.html
index 5ddf568..3a5524c 100644
--- a/content/docs/en/client-libraries-websocket.html
+++ b/content/docs/en/client-libraries-websocket.html
@@ -365,7 +365,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -384,7 +384,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/en/client-libraries-websocket/index.html b/content/docs/en/client-libraries-websocket/index.html
index 5ddf568..3a5524c 100644
--- a/content/docs/en/client-libraries-websocket/index.html
+++ b/content/docs/en/client-libraries-websocket/index.html
@@ -365,7 +365,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -384,7 +384,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/en/functions-api.html b/content/docs/en/functions-api.html
index 0420765..230612b 100644
--- a/content/docs/en/functions-api.html
+++ b/content/docs/en/functions-api.html
@@ -651,7 +651,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/en/functions-api/index.html b/content/docs/en/functions-api/index.html
index 0420765..230612b 100644
--- a/content/docs/en/functions-api/index.html
+++ b/content/docs/en/functions-api/index.html
@@ -651,7 +651,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/en/io-cdc-canal.html b/content/docs/en/io-cdc-canal.html
new file mode 100644
index 0000000..93fef91
--- /dev/null
+++ b/content/docs/en/io-cdc-canal.html
@@ -0,0 +1,242 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>CDC Canal Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-configuration-options&quot; aria-hidden=&quot [...]
+"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="CDC Canal Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-con [...]
+"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
+              (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+              (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+              m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+              })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+              ga('create', 'UA-102219959-1', 'auto');
+              ga('send', 'pageview');
+            </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div clas [...]
+        const languagesMenuItem = document.getElementById("languages-menu");
+        const languagesDropDown = document.getElementById("languages-dropdown");
+        languagesMenuItem.addEventListener("click", function(event) {
+          event.preventDefault();
+
+          if (languagesDropDown.className == "hide") {
+            languagesDropDown.className = "visible";
+          } else {
+            languagesDropDown.className = "hide";
+          }
+        });
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/incubator-pulsar/edit/master/site2/docs/io-cdc-canal.md" target="_bla [...]
+<p>The Configuration is mostly related to Canal task config.</p>
+<table>
+<thead>
+<tr><th>Name</th><th>Required</th><th>Default</th><th>Description</th></tr>
+</thead>
+<tbody>
+<tr><td><code>zkServers</code></td><td><code>false</code></td><td><code>127.0.0.1:2181</code></td><td><code>The address and port of the zookeeper . if canal server configured to cluster mode</code></td></tr>
+<tr><td><code>batchSize</code></td><td><code>true</code></td><td><code>5120</code></td><td><code>Take 5120 records from the canal server in batches</code></td></tr>
+<tr><td><code>username</code></td><td><code>false</code></td><td>``</td><td><code>Canal server account, not MySQL</code></td></tr>
+<tr><td><code>password</code></td><td><code>false</code></td><td>``</td><td><code>Canal server password, not MySQL</code></td></tr>
+<tr><td><code>cluster</code></td><td><code>false</code></td><td><code>false</code></td><td><code>Decide whether to open cluster mode based on canal server configuration, true: cluster mode, false: standalone mode</code></td></tr>
+<tr><td><code>singleHostname</code></td><td><code>false</code></td><td><code>127.0.0.1</code></td><td><code>The address of canal server</code></td></tr>
+<tr><td><code>singlePort</code></td><td><code>false</code></td><td><code>11111</code></td><td><code>The port of canal server</code></td></tr>
+</tbody>
+</table>
+<h3><a class="anchor" aria-hidden="true" id="configuration-example"></a><a href="#configuration-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 [...]
+<p>Here is a configuration Json example:</p>
+<pre><code class="hljs css language-$json">{
+    <span class="hljs-attr">"zkServers"</span>: <span class="hljs-string">"127.0.0.1:2181"</span>,
+    <span class="hljs-attr">"batchSize"</span>: <span class="hljs-string">"5120"</span>,
+    <span class="hljs-attr">"destination"</span>: <span class="hljs-string">"example"</span>,
+    <span class="hljs-attr">"username"</span>: <span class="hljs-string">""</span>,
+    <span class="hljs-attr">"password"</span>: <span class="hljs-string">""</span>,
+    <span class="hljs-attr">"cluster"</span>: <span class="hljs-literal">false</span>,
+    <span class="hljs-attr">"singleHostname"</span>: <span class="hljs-string">"127.0.0.1"</span>,
+    <span class="hljs-attr">"singlePort"</span>: <span class="hljs-string">"11111"</span>,
+}
+</code></pre>
+<p>You could also find the yaml example in this <a href="https://github.com/apache/pulsar/blob/master/pulsar-io/canal/src/main/resources/canal-mysql-source-config.yaml">file</a>, which has similar content below:</p>
+<pre><code class="hljs css language-$yaml"><span class="hljs-symbol">configs:</span>
+<span class="hljs-symbol">    zkServers:</span> <span class="hljs-string">"127.0.0.1:2181"</span>
+<span class="hljs-symbol">    batchSize:</span> <span class="hljs-string">"5120"</span>
+<span class="hljs-symbol">    destination:</span> <span class="hljs-string">"example"</span>
+<span class="hljs-symbol">    username:</span> <span class="hljs-string">""</span>
+<span class="hljs-symbol">    password:</span> <span class="hljs-string">""</span>
+<span class="hljs-symbol">    cluster:</span> false
+<span class="hljs-symbol">    singleHostname:</span> <span class="hljs-string">"127.0.0.1"</span>
+<span class="hljs-symbol">    singlePort:</span> <span class="hljs-string">"11111"</span>
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="usage-example"></a><a href="#usage-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-.8 [...]
+<p>Here is a simple example to store MySQL change data using above example config.</p>
+<ul>
+<li>Start a MySQL server</li>
+</ul>
+<pre><code class="hljs css language-$bash">docker pull mysql:5.7
+docker <span class="hljs-builtin-name">run</span> -d -it --rm --name pulsar-mysql -p 3306:3306 -e <span class="hljs-attribute">MYSQL_ROOT_PASSWORD</span>=canal -e <span class="hljs-attribute">MYSQL_USER</span>=mysqluser -e <span class="hljs-attribute">MYSQL_PASSWORD</span>=mysqlpw mysql:5.7
+</code></pre>
+<ul>
+<li>Modify configuration files mysqld.cnf</li>
+</ul>
+<pre><code class="hljs"><span class="hljs-section">[mysqld]</span>
+<span class="hljs-attr">pid-file</span>    = /var/run/mysqld/mysqld.pid
+<span class="hljs-attr">socket</span>      = /var/run/mysqld/mysqld.sock
+<span class="hljs-attr">datadir</span>     = /var/lib/mysql
+<span class="hljs-comment">#log-error  = /var/log/mysql/error.log</span>
+<span class="hljs-comment"># By default we only accept connections from localhost</span>
+<span class="hljs-comment">#bind-address   = 127.0.0.1</span>
+<span class="hljs-comment"># Disabling symbolic-links is recommended to prevent assorted security risks</span>
+<span class="hljs-attr">symbolic-links</span>=<span class="hljs-number">0</span>
+<span class="hljs-attr">log-bin</span>=mysql-bin
+<span class="hljs-attr">binlog-format</span>=ROW
+<span class="hljs-attr">server_id</span>=<span class="hljs-number">1</span>
+</code></pre>
+<ul>
+<li>Copy file to mysql server from local and restart mysql server</li>
+</ul>
+<pre><code class="hljs css language-$bash">docker cp mysqld<span class="hljs-selector-class">.cnf</span> pulsar-mysql:/etc/mysql/mysql<span class="hljs-selector-class">.conf</span><span class="hljs-selector-class">.d</span>/
+docker restart pulsar-mysql
+</code></pre>
+<ul>
+<li>Create test database in mysql server</li>
+</ul>
+<pre><code class="hljs css language-$bash">docker exec -it pulsar-mysql /bin/bash
+mysql -h 127.0.0.1 -uroot -pcanal -e '<span class="hljs-keyword">create</span> <span class="hljs-keyword">database</span> <span class="hljs-keyword">test</span>;'
+</code></pre>
+<ul>
+<li>Start canal server and connect mysql server</li>
+</ul>
+<pre><code class="hljs">docker pull canal/canal-server:v1.<span class="hljs-number">1.2</span>
+docker run -d -it --link pulsar-mysql -e canal<span class="hljs-selector-class">.auto</span><span class="hljs-selector-class">.scan</span>=false -e canal.destinations=test -e canal<span class="hljs-selector-class">.instance</span><span class="hljs-selector-class">.master</span><span class="hljs-selector-class">.address</span>=pulsar-mysql:<span class="hljs-number">3306</span> -e canal<span class="hljs-selector-class">.instance</span><span class="hljs-selector-class">.dbUsername</span>=ro [...]
+</code></pre>
+<ul>
+<li>Start pulsar standalone</li>
+</ul>
+<pre><code class="hljs css language-$bash">docker pull apachepulsar/pulsar:<span class="hljs-number">2.3</span><span class="hljs-number">.0</span>
+docker run -d -it --link pulsar-canal-server -p <span class="hljs-number">6650</span>:<span class="hljs-number">6650</span> -p <span class="hljs-number">8080</span>:<span class="hljs-number">8080</span> -v $PWD/data:/pulsar/data --name pulsar-standalone apachepulsar/pulsar:<span class="hljs-number">2.3</span><span class="hljs-number">.0</span> bin/pulsar standalone
+</code></pre>
+<ul>
+<li><p>Start pulsar-io in standalone</p></li>
+<li><p>Config file canal-mysql-source-config.yaml</p></li>
+</ul>
+<pre><code class="hljs css language-$yaml"><span class="hljs-symbol">configs:</span>
+<span class="hljs-symbol">    zkServers:</span> <span class="hljs-string">""</span>
+<span class="hljs-symbol">    batchSize:</span> <span class="hljs-string">"5120"</span>
+<span class="hljs-symbol">    destination:</span> <span class="hljs-string">"test"</span>
+<span class="hljs-symbol">    username:</span> <span class="hljs-string">""</span>
+<span class="hljs-symbol">    password:</span> <span class="hljs-string">""</span>
+<span class="hljs-symbol">    cluster:</span> false
+<span class="hljs-symbol">    singleHostname:</span> <span class="hljs-string">"pulsar-canal-server"</span>
+<span class="hljs-symbol">    singlePort:</span> <span class="hljs-string">"11111"</span>
+</code></pre>
+<ul>
+<li>Consumer file pulsar-client.py for test</li>
+</ul>
+<pre><code class="hljs"><span class="hljs-keyword">import</span> pulsar
+
+client = pulsar.<span class="hljs-built_in">Client</span>(<span class="hljs-string">'pulsar://localhost:6650'</span>)
+consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
+                            subscription_name=<span class="hljs-string">'my-sub'</span>)
+
+<span class="hljs-built_in">while</span> True:
+    msg = consumer.receive()
+    <span class="hljs-built_in">print</span>(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
+    consumer.acknowledge(msg)
+
+client.<span class="hljs-built_in">close</span>()
+</code></pre>
+<ul>
+<li>Copy config file and test file to pulsar server</li>
+</ul>
+<pre><code class="hljs css language-$bash">docker <span class="hljs-keyword">cp</span> canal-mysql-<span class="hljs-keyword">source</span>-config.yaml pulsar-standalone:/pulsar/<span class="hljs-keyword">conf</span>/
+docker <span class="hljs-keyword">cp</span> pulsar-client.<span class="hljs-keyword">py</span> pulsar-standalone:/pulsar/
+</code></pre>
+<ul>
+<li>Download canal connector and start canal connector</li>
+</ul>
+<pre><code class="hljs css language-$bash">docker exec -it pulsar-standalone <span class="hljs-string">/bin/bash</span>
+wget http:<span class="hljs-string">//apache.01link.hk/pulsar/pulsar-2.3.0/connectors/pulsar-io-canal-2.3.0.nar</span> -P connectors
+<span class="hljs-string">./bin/pulsar-admin</span> source localrun <span class="hljs-params">--archive</span> <span class="hljs-string">./connectors/pulsar-io-canal-2.3.0.nar</span> <span class="hljs-params">--classname</span> org.apache.pulsar.io.canal.CanalStringSource <span class="hljs-params">--tenant</span> public <span class="hljs-params">--namespace</span> default <span class="hljs-params">--name</span> canal <span class="hljs-params">--destination-topic-name</span> my-topic <spa [...]
+</code></pre>
+<ul>
+<li>Consumption data</li>
+</ul>
+<pre><code class="hljs css language-$bash"><span class="hljs-symbol">docker</span> exec -<span class="hljs-keyword">it </span>pulsar-standalone /<span class="hljs-keyword">bin/bash
+</span><span class="hljs-symbol">python</span> pulsar-client.py
+</code></pre>
+<ul>
+<li>Open another window for login mysql server</li>
+</ul>
+<pre><code class="hljs css language-$bash">docker exec -it pulsar-mysql /bin/bash
+mysql -h <span class="hljs-number">127.0</span><span class="hljs-number">.0</span><span class="hljs-number">.1</span> -uroot -pcanal
+</code></pre>
+<ul>
+<li>Create table and insert, delete, update data in mysql server</li>
+</ul>
+<pre><code class="hljs">mysql&gt; use test;
+mysql&gt; show tables;
+mysql&gt; <span class="hljs-keyword">CREATE</span> TABLE <span class="hljs-keyword">IF</span> <span class="hljs-keyword">NOT</span> <span class="hljs-keyword">EXISTS</span> <span class="hljs-symbol">`test_table`</span>(<span class="hljs-symbol">`test_id`</span> INT UNSIGNED AUTO_INCREMENT,<span class="hljs-symbol">`test_title`</span> VARCHAR(<span class="hljs-number">100</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,
+<span class="hljs-symbol">`test_author`</span> VARCHAR(<span class="hljs-number">40</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,
+<span class="hljs-symbol">`test_date`</span> DATE,<span class="hljs-keyword">PRIMARY</span> <span class="hljs-keyword">KEY</span> ( <span class="hljs-symbol">`test_id`</span> ))ENGINE=InnoDB DEFAULT CHARSET=utf8;
+mysql&gt; <span class="hljs-keyword">INSERT</span> <span class="hljs-keyword">INTO</span> test_table (test_title, test_author, test_date) <span class="hljs-keyword">VALUES</span>(<span class="hljs-string">"a"</span>, <span class="hljs-string">"b"</span>, NOW());
+mysql&gt; <span class="hljs-keyword">UPDATE</span> test_table <span class="hljs-keyword">SET</span> test_title=<span class="hljs-string">'c'</span> <span class="hljs-keyword">WHERE</span> test_title=<span class="hljs-string">'a'</span>;
+mysql&gt; <span class="hljs-keyword">DELETE</span> <span class="hljs-keyword">FROM</span> test_table <span class="hljs-keyword">WHERE</span> test_title=<span class="hljs-string">'c'</span>;
+</code></pre>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apache Software Foundation.</section><span><script>
+      const community = document.querySelector("a[href='#community']").parentNode;
+      const communityMenu =
+        '<li>' +
+        '<a id="community-menu" href="#">Community <span style="font-size: 0.75em">&nbsp;▼</span></a>' +
+        '<div id="community-dropdown" class="hide">' +
+          '<ul id="community-dropdown-items">' +
+            '<li><a href="/en/contact">Contact</a></li>' +
+            '<li><a href="/en/contributing">Contributing</a></li>' +
+            '<li><a href="/en/events">Events</a></li>' +
+            '<li><a href="https://twitter.com/Apache_Pulsar" target="_blank">Twitter &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/wiki" target="_blank">Wiki &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/issues" target="_blank">Issue tracking &#x2750</a></li>' +
+            '<li>&nbsp;</li>' +
+            '<li><a href="/en/resources">Resources</a></li>' +
+            '<li><a href="/en/team">Team</a></li>' +
+          '</ul>' +
+        '</div>' +
+        '</li>';
+
+      community.innerHTML = communityMenu;
+
+      const communityMenuItem = document.getElementById("community-menu");
+      const communityDropDown = document.getElementById("community-dropdown");
+      communityMenuItem.addEventListener("click", function(event) {
+        event.preventDefault();
+
+        if (communityDropDown.className == 'hide') {
+          communityDropDown.className = 'visible';
+        } else {
+          communityDropDown.className = 'hide';
+        }
+      });
+    </script></span><span><script src="/js/pjax-api.min.js"></script><script>window.navfoo = new Pjax({
+            areas: [
+              // try to use the first query.
+              '.mainContainer, .docsNavContainer .toc .navWrapper, .onPageNav',
+              // fallback
+              'body'
+            ],
+            link: '.docsNavContainer:not(.docsSliderActive) a',
+            update: {
+              script: false,
+            }
+          });
+        </script></span></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</scri [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: 'd226a455cecdd4bc18a554c1b47e5b52',
+                indexName: 'apache_pulsar',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:2.3.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/en/io-cdc-canal/index.html b/content/docs/en/io-cdc-canal/index.html
new file mode 100644
index 0000000..93fef91
--- /dev/null
+++ b/content/docs/en/io-cdc-canal/index.html
@@ -0,0 +1,242 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>CDC Canal Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-configuration-options&quot; aria-hidden=&quot [...]
+"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="CDC Canal Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-con [...]
+"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
+              (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+              (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+              m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+              })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+              ga('create', 'UA-102219959-1', 'auto');
+              ga('send', 'pageview');
+            </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div clas [...]
+        const languagesMenuItem = document.getElementById("languages-menu");
+        const languagesDropDown = document.getElementById("languages-dropdown");
+        languagesMenuItem.addEventListener("click", function(event) {
+          event.preventDefault();
+
+          if (languagesDropDown.className == "hide") {
+            languagesDropDown.className = "visible";
+          } else {
+            languagesDropDown.className = "hide";
+          }
+        });
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/incubator-pulsar/edit/master/site2/docs/io-cdc-canal.md" target="_bla [...]
+<p>The Configuration is mostly related to Canal task config.</p>
+<table>
+<thead>
+<tr><th>Name</th><th>Required</th><th>Default</th><th>Description</th></tr>
+</thead>
+<tbody>
+<tr><td><code>zkServers</code></td><td><code>false</code></td><td><code>127.0.0.1:2181</code></td><td><code>The address and port of the zookeeper . if canal server configured to cluster mode</code></td></tr>
+<tr><td><code>batchSize</code></td><td><code>true</code></td><td><code>5120</code></td><td><code>Take 5120 records from the canal server in batches</code></td></tr>
+<tr><td><code>username</code></td><td><code>false</code></td><td>``</td><td><code>Canal server account, not MySQL</code></td></tr>
+<tr><td><code>password</code></td><td><code>false</code></td><td>``</td><td><code>Canal server password, not MySQL</code></td></tr>
+<tr><td><code>cluster</code></td><td><code>false</code></td><td><code>false</code></td><td><code>Decide whether to open cluster mode based on canal server configuration, true: cluster mode, false: standalone mode</code></td></tr>
+<tr><td><code>singleHostname</code></td><td><code>false</code></td><td><code>127.0.0.1</code></td><td><code>The address of canal server</code></td></tr>
+<tr><td><code>singlePort</code></td><td><code>false</code></td><td><code>11111</code></td><td><code>The port of canal server</code></td></tr>
+</tbody>
+</table>
+<h3><a class="anchor" aria-hidden="true" id="configuration-example"></a><a href="#configuration-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 [...]
+<p>Here is a configuration Json example:</p>
+<pre><code class="hljs css language-$json">{
+    <span class="hljs-attr">"zkServers"</span>: <span class="hljs-string">"127.0.0.1:2181"</span>,
+    <span class="hljs-attr">"batchSize"</span>: <span class="hljs-string">"5120"</span>,
+    <span class="hljs-attr">"destination"</span>: <span class="hljs-string">"example"</span>,
+    <span class="hljs-attr">"username"</span>: <span class="hljs-string">""</span>,
+    <span class="hljs-attr">"password"</span>: <span class="hljs-string">""</span>,
+    <span class="hljs-attr">"cluster"</span>: <span class="hljs-literal">false</span>,
+    <span class="hljs-attr">"singleHostname"</span>: <span class="hljs-string">"127.0.0.1"</span>,
+    <span class="hljs-attr">"singlePort"</span>: <span class="hljs-string">"11111"</span>,
+}
+</code></pre>
+<p>You could also find the yaml example in this <a href="https://github.com/apache/pulsar/blob/master/pulsar-io/canal/src/main/resources/canal-mysql-source-config.yaml">file</a>, which has similar content below:</p>
+<pre><code class="hljs css language-$yaml"><span class="hljs-symbol">configs:</span>
+<span class="hljs-symbol">    zkServers:</span> <span class="hljs-string">"127.0.0.1:2181"</span>
+<span class="hljs-symbol">    batchSize:</span> <span class="hljs-string">"5120"</span>
+<span class="hljs-symbol">    destination:</span> <span class="hljs-string">"example"</span>
+<span class="hljs-symbol">    username:</span> <span class="hljs-string">""</span>
+<span class="hljs-symbol">    password:</span> <span class="hljs-string">""</span>
+<span class="hljs-symbol">    cluster:</span> false
+<span class="hljs-symbol">    singleHostname:</span> <span class="hljs-string">"127.0.0.1"</span>
+<span class="hljs-symbol">    singlePort:</span> <span class="hljs-string">"11111"</span>
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="usage-example"></a><a href="#usage-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-.8 [...]
+<p>Here is a simple example to store MySQL change data using above example config.</p>
+<ul>
+<li>Start a MySQL server</li>
+</ul>
+<pre><code class="hljs css language-$bash">docker pull mysql:5.7
+docker <span class="hljs-builtin-name">run</span> -d -it --rm --name pulsar-mysql -p 3306:3306 -e <span class="hljs-attribute">MYSQL_ROOT_PASSWORD</span>=canal -e <span class="hljs-attribute">MYSQL_USER</span>=mysqluser -e <span class="hljs-attribute">MYSQL_PASSWORD</span>=mysqlpw mysql:5.7
+</code></pre>
+<ul>
+<li>Modify configuration files mysqld.cnf</li>
+</ul>
+<pre><code class="hljs"><span class="hljs-section">[mysqld]</span>
+<span class="hljs-attr">pid-file</span>    = /var/run/mysqld/mysqld.pid
+<span class="hljs-attr">socket</span>      = /var/run/mysqld/mysqld.sock
+<span class="hljs-attr">datadir</span>     = /var/lib/mysql
+<span class="hljs-comment">#log-error  = /var/log/mysql/error.log</span>
+<span class="hljs-comment"># By default we only accept connections from localhost</span>
+<span class="hljs-comment">#bind-address   = 127.0.0.1</span>
+<span class="hljs-comment"># Disabling symbolic-links is recommended to prevent assorted security risks</span>
+<span class="hljs-attr">symbolic-links</span>=<span class="hljs-number">0</span>
+<span class="hljs-attr">log-bin</span>=mysql-bin
+<span class="hljs-attr">binlog-format</span>=ROW
+<span class="hljs-attr">server_id</span>=<span class="hljs-number">1</span>
+</code></pre>
+<ul>
+<li>Copy file to mysql server from local and restart mysql server</li>
+</ul>
+<pre><code class="hljs css language-$bash">docker cp mysqld<span class="hljs-selector-class">.cnf</span> pulsar-mysql:/etc/mysql/mysql<span class="hljs-selector-class">.conf</span><span class="hljs-selector-class">.d</span>/
+docker restart pulsar-mysql
+</code></pre>
+<ul>
+<li>Create test database in mysql server</li>
+</ul>
+<pre><code class="hljs css language-$bash">docker exec -it pulsar-mysql /bin/bash
+mysql -h 127.0.0.1 -uroot -pcanal -e '<span class="hljs-keyword">create</span> <span class="hljs-keyword">database</span> <span class="hljs-keyword">test</span>;'
+</code></pre>
+<ul>
+<li>Start canal server and connect mysql server</li>
+</ul>
+<pre><code class="hljs">docker pull canal/canal-server:v1.<span class="hljs-number">1.2</span>
+docker run -d -it --link pulsar-mysql -e canal<span class="hljs-selector-class">.auto</span><span class="hljs-selector-class">.scan</span>=false -e canal.destinations=test -e canal<span class="hljs-selector-class">.instance</span><span class="hljs-selector-class">.master</span><span class="hljs-selector-class">.address</span>=pulsar-mysql:<span class="hljs-number">3306</span> -e canal<span class="hljs-selector-class">.instance</span><span class="hljs-selector-class">.dbUsername</span>=ro [...]
+</code></pre>
+<ul>
+<li>Start pulsar standalone</li>
+</ul>
+<pre><code class="hljs css language-$bash">docker pull apachepulsar/pulsar:<span class="hljs-number">2.3</span><span class="hljs-number">.0</span>
+docker run -d -it --link pulsar-canal-server -p <span class="hljs-number">6650</span>:<span class="hljs-number">6650</span> -p <span class="hljs-number">8080</span>:<span class="hljs-number">8080</span> -v $PWD/data:/pulsar/data --name pulsar-standalone apachepulsar/pulsar:<span class="hljs-number">2.3</span><span class="hljs-number">.0</span> bin/pulsar standalone
+</code></pre>
+<ul>
+<li><p>Start pulsar-io in standalone</p></li>
+<li><p>Config file canal-mysql-source-config.yaml</p></li>
+</ul>
+<pre><code class="hljs css language-$yaml"><span class="hljs-symbol">configs:</span>
+<span class="hljs-symbol">    zkServers:</span> <span class="hljs-string">""</span>
+<span class="hljs-symbol">    batchSize:</span> <span class="hljs-string">"5120"</span>
+<span class="hljs-symbol">    destination:</span> <span class="hljs-string">"test"</span>
+<span class="hljs-symbol">    username:</span> <span class="hljs-string">""</span>
+<span class="hljs-symbol">    password:</span> <span class="hljs-string">""</span>
+<span class="hljs-symbol">    cluster:</span> false
+<span class="hljs-symbol">    singleHostname:</span> <span class="hljs-string">"pulsar-canal-server"</span>
+<span class="hljs-symbol">    singlePort:</span> <span class="hljs-string">"11111"</span>
+</code></pre>
+<ul>
+<li>Consumer file pulsar-client.py for test</li>
+</ul>
+<pre><code class="hljs"><span class="hljs-keyword">import</span> pulsar
+
+client = pulsar.<span class="hljs-built_in">Client</span>(<span class="hljs-string">'pulsar://localhost:6650'</span>)
+consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
+                            subscription_name=<span class="hljs-string">'my-sub'</span>)
+
+<span class="hljs-built_in">while</span> True:
+    msg = consumer.receive()
+    <span class="hljs-built_in">print</span>(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
+    consumer.acknowledge(msg)
+
+client.<span class="hljs-built_in">close</span>()
+</code></pre>
+<ul>
+<li>Copy config file and test file to pulsar server</li>
+</ul>
+<pre><code class="hljs css language-$bash">docker <span class="hljs-keyword">cp</span> canal-mysql-<span class="hljs-keyword">source</span>-config.yaml pulsar-standalone:/pulsar/<span class="hljs-keyword">conf</span>/
+docker <span class="hljs-keyword">cp</span> pulsar-client.<span class="hljs-keyword">py</span> pulsar-standalone:/pulsar/
+</code></pre>
+<ul>
+<li>Download canal connector and start canal connector</li>
+</ul>
+<pre><code class="hljs css language-$bash">docker exec -it pulsar-standalone <span class="hljs-string">/bin/bash</span>
+wget http:<span class="hljs-string">//apache.01link.hk/pulsar/pulsar-2.3.0/connectors/pulsar-io-canal-2.3.0.nar</span> -P connectors
+<span class="hljs-string">./bin/pulsar-admin</span> source localrun <span class="hljs-params">--archive</span> <span class="hljs-string">./connectors/pulsar-io-canal-2.3.0.nar</span> <span class="hljs-params">--classname</span> org.apache.pulsar.io.canal.CanalStringSource <span class="hljs-params">--tenant</span> public <span class="hljs-params">--namespace</span> default <span class="hljs-params">--name</span> canal <span class="hljs-params">--destination-topic-name</span> my-topic <spa [...]
+</code></pre>
+<ul>
+<li>Consumption data</li>
+</ul>
+<pre><code class="hljs css language-$bash"><span class="hljs-symbol">docker</span> exec -<span class="hljs-keyword">it </span>pulsar-standalone /<span class="hljs-keyword">bin/bash
+</span><span class="hljs-symbol">python</span> pulsar-client.py
+</code></pre>
+<ul>
+<li>Open another window for login mysql server</li>
+</ul>
+<pre><code class="hljs css language-$bash">docker exec -it pulsar-mysql /bin/bash
+mysql -h <span class="hljs-number">127.0</span><span class="hljs-number">.0</span><span class="hljs-number">.1</span> -uroot -pcanal
+</code></pre>
+<ul>
+<li>Create table and insert, delete, update data in mysql server</li>
+</ul>
+<pre><code class="hljs">mysql&gt; use test;
+mysql&gt; show tables;
+mysql&gt; <span class="hljs-keyword">CREATE</span> TABLE <span class="hljs-keyword">IF</span> <span class="hljs-keyword">NOT</span> <span class="hljs-keyword">EXISTS</span> <span class="hljs-symbol">`test_table`</span>(<span class="hljs-symbol">`test_id`</span> INT UNSIGNED AUTO_INCREMENT,<span class="hljs-symbol">`test_title`</span> VARCHAR(<span class="hljs-number">100</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,
+<span class="hljs-symbol">`test_author`</span> VARCHAR(<span class="hljs-number">40</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,
+<span class="hljs-symbol">`test_date`</span> DATE,<span class="hljs-keyword">PRIMARY</span> <span class="hljs-keyword">KEY</span> ( <span class="hljs-symbol">`test_id`</span> ))ENGINE=InnoDB DEFAULT CHARSET=utf8;
+mysql&gt; <span class="hljs-keyword">INSERT</span> <span class="hljs-keyword">INTO</span> test_table (test_title, test_author, test_date) <span class="hljs-keyword">VALUES</span>(<span class="hljs-string">"a"</span>, <span class="hljs-string">"b"</span>, NOW());
+mysql&gt; <span class="hljs-keyword">UPDATE</span> test_table <span class="hljs-keyword">SET</span> test_title=<span class="hljs-string">'c'</span> <span class="hljs-keyword">WHERE</span> test_title=<span class="hljs-string">'a'</span>;
+mysql&gt; <span class="hljs-keyword">DELETE</span> <span class="hljs-keyword">FROM</span> test_table <span class="hljs-keyword">WHERE</span> test_title=<span class="hljs-string">'c'</span>;
+</code></pre>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apache Software Foundation.</section><span><script>
+      const community = document.querySelector("a[href='#community']").parentNode;
+      const communityMenu =
+        '<li>' +
+        '<a id="community-menu" href="#">Community <span style="font-size: 0.75em">&nbsp;▼</span></a>' +
+        '<div id="community-dropdown" class="hide">' +
+          '<ul id="community-dropdown-items">' +
+            '<li><a href="/en/contact">Contact</a></li>' +
+            '<li><a href="/en/contributing">Contributing</a></li>' +
+            '<li><a href="/en/events">Events</a></li>' +
+            '<li><a href="https://twitter.com/Apache_Pulsar" target="_blank">Twitter &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/wiki" target="_blank">Wiki &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/issues" target="_blank">Issue tracking &#x2750</a></li>' +
+            '<li>&nbsp;</li>' +
+            '<li><a href="/en/resources">Resources</a></li>' +
+            '<li><a href="/en/team">Team</a></li>' +
+          '</ul>' +
+        '</div>' +
+        '</li>';
+
+      community.innerHTML = communityMenu;
+
+      const communityMenuItem = document.getElementById("community-menu");
+      const communityDropDown = document.getElementById("community-dropdown");
+      communityMenuItem.addEventListener("click", function(event) {
+        event.preventDefault();
+
+        if (communityDropDown.className == 'hide') {
+          communityDropDown.className = 'visible';
+        } else {
+          communityDropDown.className = 'hide';
+        }
+      });
+    </script></span><span><script src="/js/pjax-api.min.js"></script><script>window.navfoo = new Pjax({
+            areas: [
+              // try to use the first query.
+              '.mainContainer, .docsNavContainer .toc .navWrapper, .onPageNav',
+              // fallback
+              'body'
+            ],
+            link: '.docsNavContainer:not(.docsSliderActive) a',
+            update: {
+              script: false,
+            }
+          });
+        </script></span></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</scri [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: 'd226a455cecdd4bc18a554c1b47e5b52',
+                indexName: 'apache_pulsar',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:2.3.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/en/io-cdc.html b/content/docs/en/io-cdc-debezium.html
similarity index 50%
copy from content/docs/en/io-cdc.html
copy to content/docs/en/io-cdc-debezium.html
index 100a19b..fe111cd 100644
--- a/content/docs/en/io-cdc.html
+++ b/content/docs/en/io-cdc-debezium.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>CDC Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link&quot;&gt;&lt;svg [...]
-"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="CDC Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source&quot; aria-hidden=&quot;true&qu [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>CDC Debezium Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-configuration-options&quot; aria-hidden=&q [...]
+"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="CDC Debezium Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source- [...]
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -8,7 +8,7 @@
 
               ga('create', 'UA-102219959-1', 'auto');
               ga('send', 'pageview');
-            </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div clas [...]
+            </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div clas [...]
         const languagesMenuItem = document.getElementById("languages-menu");
         const languagesDropDown = document.getElementById("languages-dropdown");
         languagesMenuItem.addEventListener("click", function(event) {
@@ -20,62 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              const headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                if (event.target.tagName === 'A') {
-                  document.body.classList.remove('tocActive');
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/incubator-pulsar/edit/master/site2/docs/io-cdc.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 class="postHeaderTitle">CDC Connector</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="source"></a><a href="#source" aria-hidden="true" class="hash-link"><svg cl [...]
-<p>The CDC Source connector is used to capture change log of existing databases like MySQL, MongoDB, PostgreSQL into Pulsar.</p>
-<p>The CDC Source connector is built on top of <a href="https://debezium.io/">Debezium</a>. This connector stores all data into Pulsar Cluster in a persistent, replicated and partitioned way.
-This CDC Source are tested by using MySQL, and you could get more information regarding how it works at <a href="https://debezium.io/docs/connectors/mysql/">this link</a>.
-Regarding how Debezium works, please reference to <a href="https://debezium.io/docs/tutorial/">Debezium tutorial</a>. It is recommended that you go through this tutorial first.</p>
-<h3><a class="anchor" aria-hidden="true" id="source-configuration-options"></a><a href="#source-configuration-options" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/incubator-pulsar/edit/master/site2/docs/io-cdc-debezium.md" target="_ [...]
 <p>The Configuration is mostly related to Debezium task config, besides this we should provides the service URL of Pulsar cluster, and topic names that used to store offset and history.</p>
 <table>
 <thead>
@@ -199,7 +144,7 @@ mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-ke
 <ul>
 <li>In above subscribe topic terminal tab, we could find that 2 changes has been kept into products topic.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/io-develop"><span class="arrow-prev">← </span><span>Developing Connectors</span></a><a class="docs-next button" href="/docs/en/sql-overview"><span>Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#source">Source</a><ul class="toc-headings"><li><a href="#source-configuration-options">Source Configuration Optio [...]
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apache Software Foundation.</section><span><script>
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/io-cdc/index.html b/content/docs/en/io-cdc-debezium/index.html
similarity index 50%
copy from content/docs/en/io-cdc/index.html
copy to content/docs/en/io-cdc-debezium/index.html
index 100a19b..fe111cd 100644
--- a/content/docs/en/io-cdc/index.html
+++ b/content/docs/en/io-cdc-debezium/index.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>CDC Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link&quot;&gt;&lt;svg [...]
-"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="CDC Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source&quot; aria-hidden=&quot;true&qu [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>CDC Debezium Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-configuration-options&quot; aria-hidden=&q [...]
+"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="CDC Debezium Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source- [...]
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -8,7 +8,7 @@
 
               ga('create', 'UA-102219959-1', 'auto');
               ga('send', 'pageview');
-            </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div clas [...]
+            </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div clas [...]
         const languagesMenuItem = document.getElementById("languages-menu");
         const languagesDropDown = document.getElementById("languages-dropdown");
         languagesMenuItem.addEventListener("click", function(event) {
@@ -20,62 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              const headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                if (event.target.tagName === 'A') {
-                  document.body.classList.remove('tocActive');
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/incubator-pulsar/edit/master/site2/docs/io-cdc.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 class="postHeaderTitle">CDC Connector</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="source"></a><a href="#source" aria-hidden="true" class="hash-link"><svg cl [...]
-<p>The CDC Source connector is used to capture change log of existing databases like MySQL, MongoDB, PostgreSQL into Pulsar.</p>
-<p>The CDC Source connector is built on top of <a href="https://debezium.io/">Debezium</a>. This connector stores all data into Pulsar Cluster in a persistent, replicated and partitioned way.
-This CDC Source are tested by using MySQL, and you could get more information regarding how it works at <a href="https://debezium.io/docs/connectors/mysql/">this link</a>.
-Regarding how Debezium works, please reference to <a href="https://debezium.io/docs/tutorial/">Debezium tutorial</a>. It is recommended that you go through this tutorial first.</p>
-<h3><a class="anchor" aria-hidden="true" id="source-configuration-options"></a><a href="#source-configuration-options" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/incubator-pulsar/edit/master/site2/docs/io-cdc-debezium.md" target="_ [...]
 <p>The Configuration is mostly related to Debezium task config, besides this we should provides the service URL of Pulsar cluster, and topic names that used to store offset and history.</p>
 <table>
 <thead>
@@ -199,7 +144,7 @@ mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-ke
 <ul>
 <li>In above subscribe topic terminal tab, we could find that 2 changes has been kept into products topic.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/io-develop"><span class="arrow-prev">← </span><span>Developing Connectors</span></a><a class="docs-next button" href="/docs/en/sql-overview"><span>Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#source">Source</a><ul class="toc-headings"><li><a href="#source-configuration-options">Source Configuration Optio [...]
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apache Software Foundation.</section><span><script>
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/io-cdc.html b/content/docs/en/io-cdc.html
index 100a19b..2a2f838 100644
--- a/content/docs/en/io-cdc.html
+++ b/content/docs/en/io-cdc.html
@@ -72,134 +72,14 @@
             });
         </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/incubator-pulsar/edit/master/site2/docs/io-cdc.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 class="postHeaderTitle">CDC Connector</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="source"></a><a href="#source" aria-hidden="true" class="hash-link"><svg cl [...]
 <p>The CDC Source connector is used to capture change log of existing databases like MySQL, MongoDB, PostgreSQL into Pulsar.</p>
-<p>The CDC Source connector is built on top of <a href="https://debezium.io/">Debezium</a>. This connector stores all data into Pulsar Cluster in a persistent, replicated and partitioned way.
-This CDC Source are tested by using MySQL, and you could get more information regarding how it works at <a href="https://debezium.io/docs/connectors/mysql/">this link</a>.
-Regarding how Debezium works, please reference to <a href="https://debezium.io/docs/tutorial/">Debezium tutorial</a>. It is recommended that you go through this tutorial first.</p>
-<h3><a class="anchor" aria-hidden="true" id="source-configuration-options"></a><a href="#source-configuration-options" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 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>The Configuration is mostly related to Debezium task config, besides this we should provides the service URL of Pulsar cluster, and topic names that used to store offset and history.</p>
-<table>
-<thead>
-<tr><th>Name</th><th>Required</th><th>Default</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>task.class</code></td><td><code>true</code></td><td><code>null</code></td><td>A source task class that implemented in Debezium.</td></tr>
-<tr><td><code>database.hostname</code></td><td><code>true</code></td><td><code>null</code></td><td>The address of the Database server.</td></tr>
-<tr><td><code>database.port</code></td><td><code>true</code></td><td><code>null</code></td><td>The port number of the Database server..</td></tr>
-<tr><td><code>database.user</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the Database user that has the required privileges.</td></tr>
-<tr><td><code>database.password</code></td><td><code>true</code></td><td><code>null</code></td><td>The password for the Database user that has the required privileges.</td></tr>
-<tr><td><code>database.server.id</code></td><td><code>true</code></td><td><code>null</code></td><td>The connector’s identifier that must be unique within the Database cluster and similar to Database’s server-id configuration property.</td></tr>
-<tr><td><code>database.server.name</code></td><td><code>true</code></td><td><code>null</code></td><td>The logical name of the Database server/cluster, which forms a namespace and is used in all the names of the Kafka topics to which the connector writes, the Kafka Connect schema names, and the namespaces of the corresponding Avro schema when the Avro Connector is used.</td></tr>
-<tr><td><code>database.whitelist</code></td><td><code>false</code></td><td><code>null</code></td><td>A list of all databases hosted by this server that this connector will monitor. This is optional, and there are other properties for listing the databases and tables to include or exclude from monitoring.</td></tr>
-<tr><td><code>key.converter</code></td><td><code>true</code></td><td><code>null</code></td><td>The converter provided by Kafka Connect to convert record key.</td></tr>
-<tr><td><code>value.converter</code></td><td><code>true</code></td><td><code>null</code></td><td>The converter provided by Kafka Connect to convert record value.</td></tr>
-<tr><td><code>database.history</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the database history class name.</td></tr>
-<tr><td><code>database.history.pulsar.topic</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the database history topic where the connector will write and recover DDL statements. This topic is for internal use only and should not be used by consumers.</td></tr>
-<tr><td><code>database.history.pulsar.service.url</code></td><td><code>true</code></td><td><code>null</code></td><td>Pulsar cluster service url for history topic.</td></tr>
-<tr><td><code>pulsar.service.url</code></td><td><code>true</code></td><td><code>null</code></td><td>Pulsar cluster service url.</td></tr>
-<tr><td><code>offset.storage.topic</code></td><td><code>true</code></td><td><code>null</code></td><td>Record the last committed offsets that the connector successfully completed.</td></tr>
-</tbody>
-</table>
-<h3><a class="anchor" aria-hidden="true" id="configuration-example"></a><a href="#configuration-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 [...]
-<p>Here is a configuration Json example:</p>
-<pre><code class="hljs css language-$json">{
-    <span class="hljs-attr">"tenant"</span>: <span class="hljs-string">"public"</span>,
-    <span class="hljs-attr">"namespace"</span>: <span class="hljs-string">"default"</span>,
-    <span class="hljs-attr">"name"</span>: <span class="hljs-string">"debezium-kafka-source"</span>,
-    <span class="hljs-attr">"className"</span>: <span class="hljs-string">"org.apache.pulsar.io.kafka.connect.KafkaConnectSource"</span> ,
-    <span class="hljs-attr">"topicName"</span>: <span class="hljs-string">"kafka-connect-topic"</span>,
-    <span class="hljs-attr">"configs"</span>:
-    {
-        <span class="hljs-attr">"task.class"</span>: <span class="hljs-string">"io.debezium.connector.mysql.MySqlConnectorTask"</span>,
-        <span class="hljs-attr">"database.hostname"</span>: <span class="hljs-string">"localhost"</span>,
-        <span class="hljs-attr">"database.port"</span>: <span class="hljs-string">"3306"</span>,
-        <span class="hljs-attr">"database.user"</span>: <span class="hljs-string">"debezium"</span>,
-        <span class="hljs-attr">"database.password"</span>: <span class="hljs-string">"dbz"</span>,
-        <span class="hljs-attr">"database.server.id"</span>: <span class="hljs-string">"184054"</span>,
-        <span class="hljs-attr">"database.server.name"</span>: <span class="hljs-string">"dbserver1"</span>,
-        <span class="hljs-attr">"database.whitelist"</span>: <span class="hljs-string">"inventory"</span>,
-        <span class="hljs-attr">"database.history"</span>: <span class="hljs-string">"org.apache.pulsar.io.debezium.PulsarDatabaseHistory"</span>,
-        <span class="hljs-attr">"database.history.pulsar.topic"</span>: <span class="hljs-string">"history-topic"</span>,
-        <span class="hljs-attr">"database.history.pulsar.service.url"</span>: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>,
-        <span class="hljs-attr">"key.converter"</span>: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>,
-        <span class="hljs-attr">"value.converter"</span>: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>,
-        <span class="hljs-attr">"pulsar.service.url"</span>: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>,
-        <span class="hljs-attr">"offset.storage.topic"</span>: <span class="hljs-string">"offset-topic"</span>
-    },
-    <span class="hljs-attr">"archive"</span>: <span class="hljs-string">"connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar"</span>
-}
-</code></pre>
-<p>You could also find the yaml example in this <a href="https://github.com/apache/pulsar/blob/master/pulsar-io/kafka-connect-adaptor/src/main/resources/debezium-mysql-source-config.yaml">file</a>, which has similar content below:</p>
-<pre><code class="hljs css language-$yaml"><span class="hljs-attribute">tenant</span>: <span class="hljs-string">"public"</span>
-<span class="hljs-attribute">namespace</span>: <span class="hljs-string">"default"</span>
-<span class="hljs-attribute">name</span>: <span class="hljs-string">"debezium-kafka-source"</span>
-<span class="hljs-attribute">topicName</span>: <span class="hljs-string">"kafka-connect-topic"</span>
-<span class="hljs-attribute">archive</span>: <span class="hljs-string">"connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar"</span>
-
-##<span class="hljs-attribute">autoAck</span>: true
-<span class="hljs-attribute">parallelism</span>: <span class="hljs-number">1</span>
-
-<span class="hljs-attribute">configs</span>:
-  ## sourceTask
-  task.<span class="hljs-attribute">class</span>: <span class="hljs-string">"io.debezium.connector.mysql.MySqlConnectorTask"</span>
-
-  ## config for mysql, docker <span class="hljs-attribute">image</span>: debezium/<span class="hljs-attribute">example-mysql</span>:<span class="hljs-number">0.8</span>
-  database.<span class="hljs-attribute">hostname</span>: <span class="hljs-string">"localhost"</span>
-  database.<span class="hljs-attribute">port</span>: <span class="hljs-string">"3306"</span>
-  database.<span class="hljs-attribute">user</span>: <span class="hljs-string">"debezium"</span>
-  database.<span class="hljs-attribute">password</span>: <span class="hljs-string">"dbz"</span>
-  database.server.<span class="hljs-attribute">id</span>: <span class="hljs-string">"184054"</span>
-  database.server.<span class="hljs-attribute">name</span>: <span class="hljs-string">"dbserver1"</span>
-  database.<span class="hljs-attribute">whitelist</span>: <span class="hljs-string">"inventory"</span>
-
-  database.<span class="hljs-attribute">history</span>: <span class="hljs-string">"org.apache.pulsar.io.debezium.PulsarDatabaseHistory"</span>
-  database.history.pulsar.<span class="hljs-attribute">topic</span>: <span class="hljs-string">"history-topic"</span>
-  database.history.pulsar.service.<span class="hljs-attribute">url</span>: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>
-  ## KEY_CONVERTER_CLASS_CONFIG, VALUE_CONVERTER_CLASS_CONFIG
-  key.<span class="hljs-attribute">converter</span>: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>
-  value.<span class="hljs-attribute">converter</span>: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>
-  ## PULSAR_SERVICE_URL_CONFIG
-  pulsar.service.<span class="hljs-attribute">url</span>: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>
-  ## OFFSET_STORAGE_TOPIC_CONFIG
-  offset.storage.<span class="hljs-attribute">topic</span>: <span class="hljs-string">"offset-topic"</span>
-</code></pre>
-<h3><a class="anchor" aria-hidden="true" id="usage-example"></a><a href="#usage-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-.8 [...]
-<p>Here is a simple example to store MySQL change data using above example config.</p>
-<ul>
-<li>Start a MySQL server with an example database, from which Debezium can capture changes.</li>
-</ul>
-<pre><code class="hljs css language-$bash"> docker <span class="hljs-builtin-name">run</span> -it --rm --name mysql -p 3306:3306 -e <span class="hljs-attribute">MYSQL_ROOT_PASSWORD</span>=debezium -e <span class="hljs-attribute">MYSQL_USER</span>=mysqluser -e <span class="hljs-attribute">MYSQL_PASSWORD</span>=mysqlpw debezium/example-mysql:0.8
-</code></pre>
-<ul>
-<li>Start a Pulsar service locally in standalone mode.</li>
-</ul>
-<pre><code class="hljs css language-$bash"> <span class="hljs-keyword">bin/pulsar </span>standalone
-</code></pre>
-<ul>
-<li>Start pulsar debezium connector, with local run mode, and using above yaml config file. Please make sure that the nar file is available as configured in path <code>connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar</code>.</li>
-</ul>
-<pre><code class="hljs css language-$bash"> bin/pulsar-admin <span class="hljs-keyword">source</span> localrun  --sourceConfigFile debezium-mysql-<span class="hljs-keyword">source</span>-config.yaml
-</code></pre>
-<ul>
-<li>Subscribe the topic for table <code>inventory.products</code>.</li>
-</ul>
-<pre><code class="hljs"> bin/pulsar-<span class="hljs-keyword">client</span> consume -s <span class="hljs-string">"sub-products"</span> <span class="hljs-keyword">public</span>/<span class="hljs-keyword">default</span>/dbserver1.inventory.products -n <span class="hljs-number">0</span>
-</code></pre>
-<ul>
-<li>start a MySQL cli docker connector, and use it we could change to the table <code>products</code> in MySQL server.</li>
-</ul>
-<pre><code class="hljs css language-$bash"><span class="hljs-variable">$docker</span> <span class="hljs-keyword">run</span> -it --<span class="hljs-keyword">rm</span> --name mysqlterm --link mysql --<span class="hljs-keyword">rm</span> mysql:5.7 <span class="hljs-keyword">sh</span> -c 'exec mysql -<span class="hljs-keyword">h</span><span class="hljs-string">"$MYSQL_PORT_3306_TCP_ADDR"</span> -P<span class="hljs-string">"$MYSQL_PORT_3306_TCP_PORT"</span> -uroot -p<span class="hljs-string" [...]
-</code></pre>
-<p>This command will pop out MySQL cli, in this cli, we could do a change in table products, use commands below to change the name of 2 items in table products:</p>
-<pre><code class="hljs">mysql&gt; use inventory;
-mysql&gt; <span class="hljs-keyword">show</span> <span class="hljs-keyword">tables</span>;
-mysql&gt; <span class="hljs-keyword">SELECT</span> * <span class="hljs-keyword">FROM</span>  products ;
-mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-keyword">SET</span> <span class="hljs-type">name</span>=<span class="hljs-string">'1111111111'</span> <span class="hljs-keyword">WHERE</span> id=<span class="hljs-number">101</span>;
-mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-keyword">SET</span> <span class="hljs-type">name</span>=<span class="hljs-string">'1111111111'</span> <span class="hljs-keyword">WHERE</span> id=<span class="hljs-number">107</span>;
-</code></pre>
+<p>The CDC Source connector is built on top of <a href="https://debezium.io/">Debezium</a> and <a href="https://github.com/alibaba/canal">Canal</a>. This connector stores all data into Pulsar Cluster in a persistent, replicated and partitioned way.
+This CDC Source are tested by using MySQL, and you could get more information regarding how it works at <a href="https://debezium.io/docs/connectors/mysql/">this debezium link</a> or <a href="https://github.com/alibaba/canal/wiki">this canal link</a>.
+Regarding how Debezium works, please reference to <a href="https://debezium.io/docs/tutorial/">Debezium tutorial</a>. Regarding how Canal works, please reference to <a href="https://github.com/alibaba/canal/wiki">Canal tutorial</a>. It is recommended that you go through this tutorial first.</p>
 <ul>
-<li>In above subscribe topic terminal tab, we could find that 2 changes has been kept into products topic.</li>
+<li><a href="/docs/en/io-cdc-debezium">Debezium Connector</a></li>
+<li><a href="/docs/en/io-cdc-canal">Alibaba Canal Connector</a></li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/io-develop"><span class="arrow-prev">← </span><span>Developing Connectors</span></a><a class="docs-next button" href="/docs/en/sql-overview"><span>Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#source">Source</a><ul class="toc-headings"><li><a href="#source-configuration-options">Source Configuration Optio [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/io-develop"><span class="arrow-prev">← </span><span>Developing Connectors</span></a><a class="docs-next button" href="/docs/en/sql-overview"><span>Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#source">Source</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyrig [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/io-cdc/index.html b/content/docs/en/io-cdc/index.html
index 100a19b..2a2f838 100644
--- a/content/docs/en/io-cdc/index.html
+++ b/content/docs/en/io-cdc/index.html
@@ -72,134 +72,14 @@
             });
         </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/incubator-pulsar/edit/master/site2/docs/io-cdc.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 class="postHeaderTitle">CDC Connector</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="source"></a><a href="#source" aria-hidden="true" class="hash-link"><svg cl [...]
 <p>The CDC Source connector is used to capture change log of existing databases like MySQL, MongoDB, PostgreSQL into Pulsar.</p>
-<p>The CDC Source connector is built on top of <a href="https://debezium.io/">Debezium</a>. This connector stores all data into Pulsar Cluster in a persistent, replicated and partitioned way.
-This CDC Source are tested by using MySQL, and you could get more information regarding how it works at <a href="https://debezium.io/docs/connectors/mysql/">this link</a>.
-Regarding how Debezium works, please reference to <a href="https://debezium.io/docs/tutorial/">Debezium tutorial</a>. It is recommended that you go through this tutorial first.</p>
-<h3><a class="anchor" aria-hidden="true" id="source-configuration-options"></a><a href="#source-configuration-options" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 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>The Configuration is mostly related to Debezium task config, besides this we should provides the service URL of Pulsar cluster, and topic names that used to store offset and history.</p>
-<table>
-<thead>
-<tr><th>Name</th><th>Required</th><th>Default</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>task.class</code></td><td><code>true</code></td><td><code>null</code></td><td>A source task class that implemented in Debezium.</td></tr>
-<tr><td><code>database.hostname</code></td><td><code>true</code></td><td><code>null</code></td><td>The address of the Database server.</td></tr>
-<tr><td><code>database.port</code></td><td><code>true</code></td><td><code>null</code></td><td>The port number of the Database server..</td></tr>
-<tr><td><code>database.user</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the Database user that has the required privileges.</td></tr>
-<tr><td><code>database.password</code></td><td><code>true</code></td><td><code>null</code></td><td>The password for the Database user that has the required privileges.</td></tr>
-<tr><td><code>database.server.id</code></td><td><code>true</code></td><td><code>null</code></td><td>The connector’s identifier that must be unique within the Database cluster and similar to Database’s server-id configuration property.</td></tr>
-<tr><td><code>database.server.name</code></td><td><code>true</code></td><td><code>null</code></td><td>The logical name of the Database server/cluster, which forms a namespace and is used in all the names of the Kafka topics to which the connector writes, the Kafka Connect schema names, and the namespaces of the corresponding Avro schema when the Avro Connector is used.</td></tr>
-<tr><td><code>database.whitelist</code></td><td><code>false</code></td><td><code>null</code></td><td>A list of all databases hosted by this server that this connector will monitor. This is optional, and there are other properties for listing the databases and tables to include or exclude from monitoring.</td></tr>
-<tr><td><code>key.converter</code></td><td><code>true</code></td><td><code>null</code></td><td>The converter provided by Kafka Connect to convert record key.</td></tr>
-<tr><td><code>value.converter</code></td><td><code>true</code></td><td><code>null</code></td><td>The converter provided by Kafka Connect to convert record value.</td></tr>
-<tr><td><code>database.history</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the database history class name.</td></tr>
-<tr><td><code>database.history.pulsar.topic</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the database history topic where the connector will write and recover DDL statements. This topic is for internal use only and should not be used by consumers.</td></tr>
-<tr><td><code>database.history.pulsar.service.url</code></td><td><code>true</code></td><td><code>null</code></td><td>Pulsar cluster service url for history topic.</td></tr>
-<tr><td><code>pulsar.service.url</code></td><td><code>true</code></td><td><code>null</code></td><td>Pulsar cluster service url.</td></tr>
-<tr><td><code>offset.storage.topic</code></td><td><code>true</code></td><td><code>null</code></td><td>Record the last committed offsets that the connector successfully completed.</td></tr>
-</tbody>
-</table>
-<h3><a class="anchor" aria-hidden="true" id="configuration-example"></a><a href="#configuration-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 [...]
-<p>Here is a configuration Json example:</p>
-<pre><code class="hljs css language-$json">{
-    <span class="hljs-attr">"tenant"</span>: <span class="hljs-string">"public"</span>,
-    <span class="hljs-attr">"namespace"</span>: <span class="hljs-string">"default"</span>,
-    <span class="hljs-attr">"name"</span>: <span class="hljs-string">"debezium-kafka-source"</span>,
-    <span class="hljs-attr">"className"</span>: <span class="hljs-string">"org.apache.pulsar.io.kafka.connect.KafkaConnectSource"</span> ,
-    <span class="hljs-attr">"topicName"</span>: <span class="hljs-string">"kafka-connect-topic"</span>,
-    <span class="hljs-attr">"configs"</span>:
-    {
-        <span class="hljs-attr">"task.class"</span>: <span class="hljs-string">"io.debezium.connector.mysql.MySqlConnectorTask"</span>,
-        <span class="hljs-attr">"database.hostname"</span>: <span class="hljs-string">"localhost"</span>,
-        <span class="hljs-attr">"database.port"</span>: <span class="hljs-string">"3306"</span>,
-        <span class="hljs-attr">"database.user"</span>: <span class="hljs-string">"debezium"</span>,
-        <span class="hljs-attr">"database.password"</span>: <span class="hljs-string">"dbz"</span>,
-        <span class="hljs-attr">"database.server.id"</span>: <span class="hljs-string">"184054"</span>,
-        <span class="hljs-attr">"database.server.name"</span>: <span class="hljs-string">"dbserver1"</span>,
-        <span class="hljs-attr">"database.whitelist"</span>: <span class="hljs-string">"inventory"</span>,
-        <span class="hljs-attr">"database.history"</span>: <span class="hljs-string">"org.apache.pulsar.io.debezium.PulsarDatabaseHistory"</span>,
-        <span class="hljs-attr">"database.history.pulsar.topic"</span>: <span class="hljs-string">"history-topic"</span>,
-        <span class="hljs-attr">"database.history.pulsar.service.url"</span>: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>,
-        <span class="hljs-attr">"key.converter"</span>: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>,
-        <span class="hljs-attr">"value.converter"</span>: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>,
-        <span class="hljs-attr">"pulsar.service.url"</span>: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>,
-        <span class="hljs-attr">"offset.storage.topic"</span>: <span class="hljs-string">"offset-topic"</span>
-    },
-    <span class="hljs-attr">"archive"</span>: <span class="hljs-string">"connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar"</span>
-}
-</code></pre>
-<p>You could also find the yaml example in this <a href="https://github.com/apache/pulsar/blob/master/pulsar-io/kafka-connect-adaptor/src/main/resources/debezium-mysql-source-config.yaml">file</a>, which has similar content below:</p>
-<pre><code class="hljs css language-$yaml"><span class="hljs-attribute">tenant</span>: <span class="hljs-string">"public"</span>
-<span class="hljs-attribute">namespace</span>: <span class="hljs-string">"default"</span>
-<span class="hljs-attribute">name</span>: <span class="hljs-string">"debezium-kafka-source"</span>
-<span class="hljs-attribute">topicName</span>: <span class="hljs-string">"kafka-connect-topic"</span>
-<span class="hljs-attribute">archive</span>: <span class="hljs-string">"connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar"</span>
-
-##<span class="hljs-attribute">autoAck</span>: true
-<span class="hljs-attribute">parallelism</span>: <span class="hljs-number">1</span>
-
-<span class="hljs-attribute">configs</span>:
-  ## sourceTask
-  task.<span class="hljs-attribute">class</span>: <span class="hljs-string">"io.debezium.connector.mysql.MySqlConnectorTask"</span>
-
-  ## config for mysql, docker <span class="hljs-attribute">image</span>: debezium/<span class="hljs-attribute">example-mysql</span>:<span class="hljs-number">0.8</span>
-  database.<span class="hljs-attribute">hostname</span>: <span class="hljs-string">"localhost"</span>
-  database.<span class="hljs-attribute">port</span>: <span class="hljs-string">"3306"</span>
-  database.<span class="hljs-attribute">user</span>: <span class="hljs-string">"debezium"</span>
-  database.<span class="hljs-attribute">password</span>: <span class="hljs-string">"dbz"</span>
-  database.server.<span class="hljs-attribute">id</span>: <span class="hljs-string">"184054"</span>
-  database.server.<span class="hljs-attribute">name</span>: <span class="hljs-string">"dbserver1"</span>
-  database.<span class="hljs-attribute">whitelist</span>: <span class="hljs-string">"inventory"</span>
-
-  database.<span class="hljs-attribute">history</span>: <span class="hljs-string">"org.apache.pulsar.io.debezium.PulsarDatabaseHistory"</span>
-  database.history.pulsar.<span class="hljs-attribute">topic</span>: <span class="hljs-string">"history-topic"</span>
-  database.history.pulsar.service.<span class="hljs-attribute">url</span>: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>
-  ## KEY_CONVERTER_CLASS_CONFIG, VALUE_CONVERTER_CLASS_CONFIG
-  key.<span class="hljs-attribute">converter</span>: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>
-  value.<span class="hljs-attribute">converter</span>: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>
-  ## PULSAR_SERVICE_URL_CONFIG
-  pulsar.service.<span class="hljs-attribute">url</span>: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>
-  ## OFFSET_STORAGE_TOPIC_CONFIG
-  offset.storage.<span class="hljs-attribute">topic</span>: <span class="hljs-string">"offset-topic"</span>
-</code></pre>
-<h3><a class="anchor" aria-hidden="true" id="usage-example"></a><a href="#usage-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-.8 [...]
-<p>Here is a simple example to store MySQL change data using above example config.</p>
-<ul>
-<li>Start a MySQL server with an example database, from which Debezium can capture changes.</li>
-</ul>
-<pre><code class="hljs css language-$bash"> docker <span class="hljs-builtin-name">run</span> -it --rm --name mysql -p 3306:3306 -e <span class="hljs-attribute">MYSQL_ROOT_PASSWORD</span>=debezium -e <span class="hljs-attribute">MYSQL_USER</span>=mysqluser -e <span class="hljs-attribute">MYSQL_PASSWORD</span>=mysqlpw debezium/example-mysql:0.8
-</code></pre>
-<ul>
-<li>Start a Pulsar service locally in standalone mode.</li>
-</ul>
-<pre><code class="hljs css language-$bash"> <span class="hljs-keyword">bin/pulsar </span>standalone
-</code></pre>
-<ul>
-<li>Start pulsar debezium connector, with local run mode, and using above yaml config file. Please make sure that the nar file is available as configured in path <code>connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar</code>.</li>
-</ul>
-<pre><code class="hljs css language-$bash"> bin/pulsar-admin <span class="hljs-keyword">source</span> localrun  --sourceConfigFile debezium-mysql-<span class="hljs-keyword">source</span>-config.yaml
-</code></pre>
-<ul>
-<li>Subscribe the topic for table <code>inventory.products</code>.</li>
-</ul>
-<pre><code class="hljs"> bin/pulsar-<span class="hljs-keyword">client</span> consume -s <span class="hljs-string">"sub-products"</span> <span class="hljs-keyword">public</span>/<span class="hljs-keyword">default</span>/dbserver1.inventory.products -n <span class="hljs-number">0</span>
-</code></pre>
-<ul>
-<li>start a MySQL cli docker connector, and use it we could change to the table <code>products</code> in MySQL server.</li>
-</ul>
-<pre><code class="hljs css language-$bash"><span class="hljs-variable">$docker</span> <span class="hljs-keyword">run</span> -it --<span class="hljs-keyword">rm</span> --name mysqlterm --link mysql --<span class="hljs-keyword">rm</span> mysql:5.7 <span class="hljs-keyword">sh</span> -c 'exec mysql -<span class="hljs-keyword">h</span><span class="hljs-string">"$MYSQL_PORT_3306_TCP_ADDR"</span> -P<span class="hljs-string">"$MYSQL_PORT_3306_TCP_PORT"</span> -uroot -p<span class="hljs-string" [...]
-</code></pre>
-<p>This command will pop out MySQL cli, in this cli, we could do a change in table products, use commands below to change the name of 2 items in table products:</p>
-<pre><code class="hljs">mysql&gt; use inventory;
-mysql&gt; <span class="hljs-keyword">show</span> <span class="hljs-keyword">tables</span>;
-mysql&gt; <span class="hljs-keyword">SELECT</span> * <span class="hljs-keyword">FROM</span>  products ;
-mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-keyword">SET</span> <span class="hljs-type">name</span>=<span class="hljs-string">'1111111111'</span> <span class="hljs-keyword">WHERE</span> id=<span class="hljs-number">101</span>;
-mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-keyword">SET</span> <span class="hljs-type">name</span>=<span class="hljs-string">'1111111111'</span> <span class="hljs-keyword">WHERE</span> id=<span class="hljs-number">107</span>;
-</code></pre>
+<p>The CDC Source connector is built on top of <a href="https://debezium.io/">Debezium</a> and <a href="https://github.com/alibaba/canal">Canal</a>. This connector stores all data into Pulsar Cluster in a persistent, replicated and partitioned way.
+This CDC Source are tested by using MySQL, and you could get more information regarding how it works at <a href="https://debezium.io/docs/connectors/mysql/">this debezium link</a> or <a href="https://github.com/alibaba/canal/wiki">this canal link</a>.
+Regarding how Debezium works, please reference to <a href="https://debezium.io/docs/tutorial/">Debezium tutorial</a>. Regarding how Canal works, please reference to <a href="https://github.com/alibaba/canal/wiki">Canal tutorial</a>. It is recommended that you go through this tutorial first.</p>
 <ul>
-<li>In above subscribe topic terminal tab, we could find that 2 changes has been kept into products topic.</li>
+<li><a href="/docs/en/io-cdc-debezium">Debezium Connector</a></li>
+<li><a href="/docs/en/io-cdc-canal">Alibaba Canal Connector</a></li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/io-develop"><span class="arrow-prev">← </span><span>Developing Connectors</span></a><a class="docs-next button" href="/docs/en/sql-overview"><span>Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#source">Source</a><ul class="toc-headings"><li><a href="#source-configuration-options">Source Configuration Optio [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/io-develop"><span class="arrow-prev">← </span><span>Developing Connectors</span></a><a class="docs-next button" href="/docs/en/sql-overview"><span>Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#source">Source</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyrig [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/io-connectors.html b/content/docs/en/io-connectors.html
index b6cd63a..2526b8b 100644
--- a/content/docs/en/io-connectors.html
+++ b/content/docs/en/io-connectors.html
@@ -82,7 +82,7 @@ Pulsar Functions cluster.</p>
 <li><a href="/docs/en/io-kinesis#sink">Kinesis Sink Connector</a></li>
 <li><a href="/docs/en/io-rabbitmq#source">RabbitMQ Source Connector</a></li>
 <li><a href="/docs/en/io-twitter">Twitter Firehose Source Connector</a></li>
-<li><a href="/docs/en/io-cdc">CDC Source Connector based on Debezium</a></li>
+<li><a href="/docs/en/io-cdc">CDC Source Connector based on Debezium and Canal</a></li>
 <li><a href="/docs/en/io-netty#source">Netty Source Connector</a></li>
 <li><a href="/docs/en/io-hbase#sink">Hbase Sink Connector</a></li>
 </ul>
diff --git a/content/docs/en/io-connectors/index.html b/content/docs/en/io-connectors/index.html
index b6cd63a..2526b8b 100644
--- a/content/docs/en/io-connectors/index.html
+++ b/content/docs/en/io-connectors/index.html
@@ -82,7 +82,7 @@ Pulsar Functions cluster.</p>
 <li><a href="/docs/en/io-kinesis#sink">Kinesis Sink Connector</a></li>
 <li><a href="/docs/en/io-rabbitmq#source">RabbitMQ Source Connector</a></li>
 <li><a href="/docs/en/io-twitter">Twitter Firehose Source Connector</a></li>
-<li><a href="/docs/en/io-cdc">CDC Source Connector based on Debezium</a></li>
+<li><a href="/docs/en/io-cdc">CDC Source Connector based on Debezium and Canal</a></li>
 <li><a href="/docs/en/io-netty#source">Netty Source Connector</a></li>
 <li><a href="/docs/en/io-hbase#sink">Hbase Sink Connector</a></li>
 </ul>
diff --git a/content/docs/en/next/admin-api-partitioned-topics.html b/content/docs/en/next/admin-api-partitioned-topics.html
index 674e646..2ddd3df 100644
--- a/content/docs/en/next/admin-api-partitioned-topics.html
+++ b/content/docs/en/next/admin-api-partitioned-topics.html
@@ -94,6 +94,22 @@ Here's an example:</p>
 <span class="hljs-keyword">int</span> numPartitions = <span class="hljs-number">4</span>;
 admin.persistentTopics().createPartitionedTopic(topicName, numPartitions);
 </code></pre>
+<h2><a class="anchor" aria-hidden="true" id="nonpartitioned-topics-resources"></a><a href="#nonpartitioned-topics-resources" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 [...]
+<h3><a class="anchor" aria-hidden="true" id="create-1"></a><a href="#create-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<p>Nonpartitioned topics in Pulsar must be explicitly created if allowAutoTopicCreation or createIfMissing is disabled.
+When creating a non-partitioned topic, you need to provide a topic name.</p>
+<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-1"></a><a href="#pulsar-admin-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p>You can create non-partitioned topics using the <a href="/docs/en/next/pulsar-admin#create"><code>create</code></a>
+command and specifying the topic name as an argument. This is an example command:</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin topics create persistent://my-tenant/my-namespace/my-topic</span>
+</code></pre>
+<h4><a class="anchor" aria-hidden="true" id="rest-api-1"></a><a href="#rest-api-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<p><a href="https://pulsar.incubator.apache.org/en/admin-rest-api#operation/createNonPartitionedTopic"><b>PUT</b> <i>admin/v2/persistent/:tenant/:namespace/:topic</i></a>
+</p>
+<h4><a class="anchor" aria-hidden="true" id="java-1"></a><a href="#java-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<pre><code class="hljs css language-java">String topicName = <span class="hljs-string">"persistent://my-tenant/my-namespace/my-topic"</span>;
+admin.topics().createNonPartitionedTopic(topicName);
+</code></pre>
 <h3><a class="anchor" aria-hidden="true" id="get-metadata"></a><a href="#get-metadata" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <p>Partitioned topics have metadata associated with them that you can fetch as a JSON object.
 The following metadata fields are currently available:</p>
@@ -105,7 +121,7 @@ The following metadata fields are currently available:</p>
 <tr><td style="text-align:left"><code>partitions</code></td><td style="text-align:left">The number of partitions into which the topic is divided</td></tr>
 </tbody>
 </table>
-<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-1"></a><a href="#pulsar-admin-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-2"></a><a href="#pulsar-admin-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
 <p>You can see the number of partitions in a partitioned topic using the
 <a href="/docs/en/next/pulsar-admin#get-partitioned-topic-metadata"><code>get-partitioned-topic-metadata</code></a>
 subcommand. Here's an example:</p>
@@ -115,10 +131,10 @@ subcommand. Here's an example:</p>
   "partitions": 4
 }
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="rest-api-1"></a><a href="#rest-api-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h4><a class="anchor" aria-hidden="true" id="rest-api-2"></a><a href="#rest-api-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
 <p><a href="https://pulsar.incubator.apache.org/en/admin-rest-api#operation/getPartitionedMetadata"><b>GET</b> <i>/admin/v2/persistent/:tenant/:namespace/:topic/partitions</i></a>
 </p>
-<h4><a class="anchor" aria-hidden="true" id="java-1"></a><a href="#java-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<h4><a class="anchor" aria-hidden="true" id="java-2"></a><a href="#java-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <pre><code class="hljs css language-java">String topicName = <span class="hljs-string">"persistent://my-tenant/my-namespace/my-topic"</span>;
 admin.persistentTopics().getPartitionedTopicMetadata(topicName);
 </code></pre>
@@ -131,43 +147,43 @@ than the existing number.</p>
 it requires to recreate them at application so, newly created producers and consumers can connect
 to newly added partitions as well. Therefore, it can violate partition ordering at producers until
 all producers are restarted at application.</p>
-<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-2"></a><a href="#pulsar-admin-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-3"></a><a href="#pulsar-admin-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
 <p>Partitioned topics can be updated using the
 <a href="/docs/en/next/pulsar-admin#update-partitioned-topic"><code>update-partitioned-topic</code></a> command.</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics update-partitioned-topic \</span>
   persistent://my-tenant/my-namespace/my-topic \
   --partitions 8
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="rest-api-2"></a><a href="#rest-api-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h4><a class="anchor" aria-hidden="true" id="rest-api-3"></a><a href="#rest-api-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
 <p><a href="https://pulsar.incubator.apache.org/en/admin-rest-api#operation/updatePartitionedTopic"><b>POST</b> <i>/admin/v2/persistent/:tenant/:cluster/:namespace/:destination/partitions</i></a>
 </p>
-<h4><a class="anchor" aria-hidden="true" id="java-2"></a><a href="#java-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<h4><a class="anchor" aria-hidden="true" id="java-3"></a><a href="#java-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <pre><code class="hljs css language-java">admin.persistentTopics().updatePartitionedTopic(persistentTopic, numPartitions);
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="delete"></a><a href="#delete" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-3"></a><a href="#pulsar-admin-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-4"></a><a href="#pulsar-admin-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
 <p>Partitioned topics can be deleted using the
 <a href="/docs/en/next/pulsar-admin#delete-partitioned-topic"><code>delete-partitioned-topic</code></a> command, specifying the topic by name:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin topics delete-partitioned-topic \</span>
   persistent://my-tenant/my-namespace/my-topic
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="rest-api-3"></a><a href="#rest-api-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h4><a class="anchor" aria-hidden="true" id="rest-api-4"></a><a href="#rest-api-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
 <p><a href="https://pulsar.incubator.apache.org/en/admin-rest-api#operation/deletePartitionedTopic"><b>DELETE</b> <i>/admin/v2/persistent/:topic/:namespace/:destination/partitions</i></a>
 </p>
-<h4><a class="anchor" aria-hidden="true" id="java-3"></a><a href="#java-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<h4><a class="anchor" aria-hidden="true" id="java-4"></a><a href="#java-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <pre><code class="hljs css language-java">admin.persistentTopics().delete(persistentTopic);
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="list"></a><a href="#list" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 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>It provides a list of persistent topics existing under a given namespace.</p>
-<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-4"></a><a href="#pulsar-admin-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-5"></a><a href="#pulsar-admin-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics list tenant/namespace</span>
 persistent://tenant/namespace/topic1
 persistent://tenant/namespace/topic2
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="rest-api-4"></a><a href="#rest-api-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h4><a class="anchor" aria-hidden="true" id="rest-api-5"></a><a href="#rest-api-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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><a href="https://pulsar.incubator.apache.org/en/admin-rest-api#operation/getPartitionedTopicList"><b>GET</b> <i>/admin/v2/persistent/:tenant/:namespace</i></a>
 </p>
-<h4><a class="anchor" aria-hidden="true" id="java-4"></a><a href="#java-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<h4><a class="anchor" aria-hidden="true" id="java-5"></a><a href="#java-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <pre><code class="hljs css language-java">admin.persistentTopics().getList(namespace);
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="stats"></a><a href="#stats" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
@@ -236,17 +252,17 @@ persistent://tenant/namespace/topic2
 <tr><td>inboundConnectedSince</td><td>The TCP connection being used to publish messages to the remote cluster. If there are no local publishers connected, this connection is automatically closed after a minute.</td></tr>
 </tbody>
 </table>
-<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-5"></a><a href="#pulsar-admin-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-6"></a><a href="#pulsar-admin-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
 <p>The stats for the partitioned topic and its connected producers and consumers can be fetched by using the
 <a href="/docs/en/next/pulsar-admin#partitioned-stats"><code>partitioned-stats</code></a> command, specifying the topic by name:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics partitioned-stats \</span>
   persistent://test-tenant/namespace/topic \
   --per-partition        
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="rest-api-5"></a><a href="#rest-api-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h4><a class="anchor" aria-hidden="true" id="rest-api-6"></a><a href="#rest-api-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
 <p><a href="https://pulsar.incubator.apache.org/en/admin-rest-api#operation/getPartitionedStats"><b>GET</b> <i>/admin/v2/persistent/:tenant/:namespace/:topic/partitioned-stats</i></a>
 </p>
-<h4><a class="anchor" aria-hidden="true" id="java-5"></a><a href="#java-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<h4><a class="anchor" aria-hidden="true" id="java-6"></a><a href="#java-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <pre><code class="hljs css language-java">admin.persistentTopics().getStats(persistentTopic);
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="internal-stats"></a><a href="#internal-stats" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
@@ -315,19 +331,19 @@ persistent://tenant/namespace/topic2
   }
 }
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-6"></a><a href="#pulsar-admin-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-7"></a><a href="#pulsar-admin-7" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
 <p>The internal stats for the partitioned topic can be fetched by using the
 <a href="/docs/en/next/pulsar-admin#stats-internal"><code>stats-internal</code></a> command, specifying the topic by name:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics stats-internal \</span>
   persistent://test-tenant/namespace/topic
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="rest-api-6"></a><a href="#rest-api-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h4><a class="anchor" aria-hidden="true" id="rest-api-7"></a><a href="#rest-api-7" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
 <p><a href="https://pulsar.incubator.apache.org/en/admin-rest-api#operation/getInternalStats"><b>GET</b> <i>/admin/v2/persistent/:tenant/:namespace/:topic/internalStats</i></a>
 </p>
-<h4><a class="anchor" aria-hidden="true" id="java-6"></a><a href="#java-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<h4><a class="anchor" aria-hidden="true" id="java-7"></a><a href="#java-7" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <pre><code class="hljs css language-java">admin.persistentTopics().getInternalStats(persistentTopic);
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/admin-api-non-persistent-topics"><span class="arrow-prev">← </span><span>Non-Persistent topics</span></a><a class="docs-next button" href="/docs/en/next/admin-api-schemas"><span>Schemas</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#partitioned-topics-resources">Partitioned topics resources</a><ul class="toc-h [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/admin-api-non-persistent-topics"><span class="arrow-prev">← </span><span>Non-Persistent topics</span></a><a class="docs-next button" href="/docs/en/next/admin-api-schemas"><span>Schemas</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#partitioned-topics-resources">Partitioned topics resources</a><ul class="toc-h [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/next/admin-api-partitioned-topics/index.html b/content/docs/en/next/admin-api-partitioned-topics/index.html
index 674e646..2ddd3df 100644
--- a/content/docs/en/next/admin-api-partitioned-topics/index.html
+++ b/content/docs/en/next/admin-api-partitioned-topics/index.html
@@ -94,6 +94,22 @@ Here's an example:</p>
 <span class="hljs-keyword">int</span> numPartitions = <span class="hljs-number">4</span>;
 admin.persistentTopics().createPartitionedTopic(topicName, numPartitions);
 </code></pre>
+<h2><a class="anchor" aria-hidden="true" id="nonpartitioned-topics-resources"></a><a href="#nonpartitioned-topics-resources" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 [...]
+<h3><a class="anchor" aria-hidden="true" id="create-1"></a><a href="#create-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<p>Nonpartitioned topics in Pulsar must be explicitly created if allowAutoTopicCreation or createIfMissing is disabled.
+When creating a non-partitioned topic, you need to provide a topic name.</p>
+<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-1"></a><a href="#pulsar-admin-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p>You can create non-partitioned topics using the <a href="/docs/en/next/pulsar-admin#create"><code>create</code></a>
+command and specifying the topic name as an argument. This is an example command:</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin topics create persistent://my-tenant/my-namespace/my-topic</span>
+</code></pre>
+<h4><a class="anchor" aria-hidden="true" id="rest-api-1"></a><a href="#rest-api-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<p><a href="https://pulsar.incubator.apache.org/en/admin-rest-api#operation/createNonPartitionedTopic"><b>PUT</b> <i>admin/v2/persistent/:tenant/:namespace/:topic</i></a>
+</p>
+<h4><a class="anchor" aria-hidden="true" id="java-1"></a><a href="#java-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<pre><code class="hljs css language-java">String topicName = <span class="hljs-string">"persistent://my-tenant/my-namespace/my-topic"</span>;
+admin.topics().createNonPartitionedTopic(topicName);
+</code></pre>
 <h3><a class="anchor" aria-hidden="true" id="get-metadata"></a><a href="#get-metadata" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <p>Partitioned topics have metadata associated with them that you can fetch as a JSON object.
 The following metadata fields are currently available:</p>
@@ -105,7 +121,7 @@ The following metadata fields are currently available:</p>
 <tr><td style="text-align:left"><code>partitions</code></td><td style="text-align:left">The number of partitions into which the topic is divided</td></tr>
 </tbody>
 </table>
-<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-1"></a><a href="#pulsar-admin-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-2"></a><a href="#pulsar-admin-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
 <p>You can see the number of partitions in a partitioned topic using the
 <a href="/docs/en/next/pulsar-admin#get-partitioned-topic-metadata"><code>get-partitioned-topic-metadata</code></a>
 subcommand. Here's an example:</p>
@@ -115,10 +131,10 @@ subcommand. Here's an example:</p>
   "partitions": 4
 }
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="rest-api-1"></a><a href="#rest-api-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h4><a class="anchor" aria-hidden="true" id="rest-api-2"></a><a href="#rest-api-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
 <p><a href="https://pulsar.incubator.apache.org/en/admin-rest-api#operation/getPartitionedMetadata"><b>GET</b> <i>/admin/v2/persistent/:tenant/:namespace/:topic/partitions</i></a>
 </p>
-<h4><a class="anchor" aria-hidden="true" id="java-1"></a><a href="#java-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<h4><a class="anchor" aria-hidden="true" id="java-2"></a><a href="#java-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <pre><code class="hljs css language-java">String topicName = <span class="hljs-string">"persistent://my-tenant/my-namespace/my-topic"</span>;
 admin.persistentTopics().getPartitionedTopicMetadata(topicName);
 </code></pre>
@@ -131,43 +147,43 @@ than the existing number.</p>
 it requires to recreate them at application so, newly created producers and consumers can connect
 to newly added partitions as well. Therefore, it can violate partition ordering at producers until
 all producers are restarted at application.</p>
-<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-2"></a><a href="#pulsar-admin-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-3"></a><a href="#pulsar-admin-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
 <p>Partitioned topics can be updated using the
 <a href="/docs/en/next/pulsar-admin#update-partitioned-topic"><code>update-partitioned-topic</code></a> command.</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics update-partitioned-topic \</span>
   persistent://my-tenant/my-namespace/my-topic \
   --partitions 8
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="rest-api-2"></a><a href="#rest-api-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h4><a class="anchor" aria-hidden="true" id="rest-api-3"></a><a href="#rest-api-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
 <p><a href="https://pulsar.incubator.apache.org/en/admin-rest-api#operation/updatePartitionedTopic"><b>POST</b> <i>/admin/v2/persistent/:tenant/:cluster/:namespace/:destination/partitions</i></a>
 </p>
-<h4><a class="anchor" aria-hidden="true" id="java-2"></a><a href="#java-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<h4><a class="anchor" aria-hidden="true" id="java-3"></a><a href="#java-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <pre><code class="hljs css language-java">admin.persistentTopics().updatePartitionedTopic(persistentTopic, numPartitions);
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="delete"></a><a href="#delete" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-3"></a><a href="#pulsar-admin-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-4"></a><a href="#pulsar-admin-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
 <p>Partitioned topics can be deleted using the
 <a href="/docs/en/next/pulsar-admin#delete-partitioned-topic"><code>delete-partitioned-topic</code></a> command, specifying the topic by name:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin topics delete-partitioned-topic \</span>
   persistent://my-tenant/my-namespace/my-topic
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="rest-api-3"></a><a href="#rest-api-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h4><a class="anchor" aria-hidden="true" id="rest-api-4"></a><a href="#rest-api-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
 <p><a href="https://pulsar.incubator.apache.org/en/admin-rest-api#operation/deletePartitionedTopic"><b>DELETE</b> <i>/admin/v2/persistent/:topic/:namespace/:destination/partitions</i></a>
 </p>
-<h4><a class="anchor" aria-hidden="true" id="java-3"></a><a href="#java-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<h4><a class="anchor" aria-hidden="true" id="java-4"></a><a href="#java-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <pre><code class="hljs css language-java">admin.persistentTopics().delete(persistentTopic);
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="list"></a><a href="#list" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 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>It provides a list of persistent topics existing under a given namespace.</p>
-<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-4"></a><a href="#pulsar-admin-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-5"></a><a href="#pulsar-admin-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics list tenant/namespace</span>
 persistent://tenant/namespace/topic1
 persistent://tenant/namespace/topic2
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="rest-api-4"></a><a href="#rest-api-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h4><a class="anchor" aria-hidden="true" id="rest-api-5"></a><a href="#rest-api-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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><a href="https://pulsar.incubator.apache.org/en/admin-rest-api#operation/getPartitionedTopicList"><b>GET</b> <i>/admin/v2/persistent/:tenant/:namespace</i></a>
 </p>
-<h4><a class="anchor" aria-hidden="true" id="java-4"></a><a href="#java-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<h4><a class="anchor" aria-hidden="true" id="java-5"></a><a href="#java-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <pre><code class="hljs css language-java">admin.persistentTopics().getList(namespace);
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="stats"></a><a href="#stats" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
@@ -236,17 +252,17 @@ persistent://tenant/namespace/topic2
 <tr><td>inboundConnectedSince</td><td>The TCP connection being used to publish messages to the remote cluster. If there are no local publishers connected, this connection is automatically closed after a minute.</td></tr>
 </tbody>
 </table>
-<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-5"></a><a href="#pulsar-admin-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-6"></a><a href="#pulsar-admin-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
 <p>The stats for the partitioned topic and its connected producers and consumers can be fetched by using the
 <a href="/docs/en/next/pulsar-admin#partitioned-stats"><code>partitioned-stats</code></a> command, specifying the topic by name:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics partitioned-stats \</span>
   persistent://test-tenant/namespace/topic \
   --per-partition        
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="rest-api-5"></a><a href="#rest-api-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h4><a class="anchor" aria-hidden="true" id="rest-api-6"></a><a href="#rest-api-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
 <p><a href="https://pulsar.incubator.apache.org/en/admin-rest-api#operation/getPartitionedStats"><b>GET</b> <i>/admin/v2/persistent/:tenant/:namespace/:topic/partitioned-stats</i></a>
 </p>
-<h4><a class="anchor" aria-hidden="true" id="java-5"></a><a href="#java-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<h4><a class="anchor" aria-hidden="true" id="java-6"></a><a href="#java-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <pre><code class="hljs css language-java">admin.persistentTopics().getStats(persistentTopic);
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="internal-stats"></a><a href="#internal-stats" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
@@ -315,19 +331,19 @@ persistent://tenant/namespace/topic2
   }
 }
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-6"></a><a href="#pulsar-admin-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-7"></a><a href="#pulsar-admin-7" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
 <p>The internal stats for the partitioned topic can be fetched by using the
 <a href="/docs/en/next/pulsar-admin#stats-internal"><code>stats-internal</code></a> command, specifying the topic by name:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics stats-internal \</span>
   persistent://test-tenant/namespace/topic
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="rest-api-6"></a><a href="#rest-api-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h4><a class="anchor" aria-hidden="true" id="rest-api-7"></a><a href="#rest-api-7" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
 <p><a href="https://pulsar.incubator.apache.org/en/admin-rest-api#operation/getInternalStats"><b>GET</b> <i>/admin/v2/persistent/:tenant/:namespace/:topic/internalStats</i></a>
 </p>
-<h4><a class="anchor" aria-hidden="true" id="java-6"></a><a href="#java-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<h4><a class="anchor" aria-hidden="true" id="java-7"></a><a href="#java-7" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <pre><code class="hljs css language-java">admin.persistentTopics().getInternalStats(persistentTopic);
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/admin-api-non-persistent-topics"><span class="arrow-prev">← </span><span>Non-Persistent topics</span></a><a class="docs-next button" href="/docs/en/next/admin-api-schemas"><span>Schemas</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#partitioned-topics-resources">Partitioned topics resources</a><ul class="toc-h [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/admin-api-non-persistent-topics"><span class="arrow-prev">← </span><span>Non-Persistent topics</span></a><a class="docs-next button" href="/docs/en/next/admin-api-schemas"><span>Schemas</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#partitioned-topics-resources">Partitioned topics resources</a><ul class="toc-h [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/next/client-libraries-python.html b/content/docs/en/next/client-libraries-python.html
index 5481d51..d7ad759 100644
--- a/content/docs/en/next/client-libraries-python.html
+++ b/content/docs/en/next/client-libraries-python.html
@@ -115,7 +115,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -129,7 +129,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
@@ -171,7 +171,7 @@ bytes:</p>
                   subscription_name=<span class="hljs-string">'my-subscription'</span>,
                   schema=AvroSchema(Example) )
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     ex = msg.value()
     print(<span class="hljs-string">"Received message a={} b={} c={}"</span>.format(ex.a, ex.b, ex.c))
diff --git a/content/docs/en/next/client-libraries-python/index.html b/content/docs/en/next/client-libraries-python/index.html
index 5481d51..d7ad759 100644
--- a/content/docs/en/next/client-libraries-python/index.html
+++ b/content/docs/en/next/client-libraries-python/index.html
@@ -115,7 +115,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -129,7 +129,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
@@ -171,7 +171,7 @@ bytes:</p>
                   subscription_name=<span class="hljs-string">'my-subscription'</span>,
                   schema=AvroSchema(Example) )
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     ex = msg.value()
     print(<span class="hljs-string">"Received message a={} b={} c={}"</span>.format(ex.a, ex.b, ex.c))
diff --git a/content/docs/en/next/client-libraries-websocket.html b/content/docs/en/next/client-libraries-websocket.html
index 8d17a15..eef65c9 100644
--- a/content/docs/en/next/client-libraries-websocket.html
+++ b/content/docs/en/next/client-libraries-websocket.html
@@ -365,7 +365,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -384,7 +384,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/en/next/client-libraries-websocket/index.html b/content/docs/en/next/client-libraries-websocket/index.html
index 8d17a15..eef65c9 100644
--- a/content/docs/en/next/client-libraries-websocket/index.html
+++ b/content/docs/en/next/client-libraries-websocket/index.html
@@ -365,7 +365,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -384,7 +384,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/en/next/functions-api.html b/content/docs/en/next/functions-api.html
index da0e535..3fcf9e6 100644
--- a/content/docs/en/next/functions-api.html
+++ b/content/docs/en/next/functions-api.html
@@ -651,7 +651,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/en/next/functions-api/index.html b/content/docs/en/next/functions-api/index.html
index da0e535..3fcf9e6 100644
--- a/content/docs/en/next/functions-api/index.html
+++ b/content/docs/en/next/functions-api/index.html
@@ -651,7 +651,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/en/next/io-cdc-canal.html b/content/docs/en/next/io-cdc-canal.html
new file mode 100644
index 0000000..4a49f7a
--- /dev/null
+++ b/content/docs/en/next/io-cdc-canal.html
@@ -0,0 +1,242 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>CDC Canal Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-configuration-options&quot; aria-hidden=&quot [...]
+"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="CDC Canal Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-conf [...]
+"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
+              (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+              (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+              m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+              })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+              ga('create', 'UA-102219959-1', 'auto');
+              ga('send', 'pageview');
+            </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div clas [...]
+        const languagesMenuItem = document.getElementById("languages-menu");
+        const languagesDropDown = document.getElementById("languages-dropdown");
+        languagesMenuItem.addEventListener("click", function(event) {
+          event.preventDefault();
+
+          if (languagesDropDown.className == "hide") {
+            languagesDropDown.className = "visible";
+          } else {
+            languagesDropDown.className = "hide";
+          }
+        });
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/incubator-pulsar/edit/master/site2/docs/io-cdc-canal.md" target="_bla [...]
+<p>The Configuration is mostly related to Canal task config.</p>
+<table>
+<thead>
+<tr><th>Name</th><th>Required</th><th>Default</th><th>Description</th></tr>
+</thead>
+<tbody>
+<tr><td><code>zkServers</code></td><td><code>false</code></td><td><code>127.0.0.1:2181</code></td><td><code>The address and port of the zookeeper . if canal server configured to cluster mode</code></td></tr>
+<tr><td><code>batchSize</code></td><td><code>true</code></td><td><code>5120</code></td><td><code>Take 5120 records from the canal server in batches</code></td></tr>
+<tr><td><code>username</code></td><td><code>false</code></td><td>``</td><td><code>Canal server account, not MySQL</code></td></tr>
+<tr><td><code>password</code></td><td><code>false</code></td><td>``</td><td><code>Canal server password, not MySQL</code></td></tr>
+<tr><td><code>cluster</code></td><td><code>false</code></td><td><code>false</code></td><td><code>Decide whether to open cluster mode based on canal server configuration, true: cluster mode, false: standalone mode</code></td></tr>
+<tr><td><code>singleHostname</code></td><td><code>false</code></td><td><code>127.0.0.1</code></td><td><code>The address of canal server</code></td></tr>
+<tr><td><code>singlePort</code></td><td><code>false</code></td><td><code>11111</code></td><td><code>The port of canal server</code></td></tr>
+</tbody>
+</table>
+<h3><a class="anchor" aria-hidden="true" id="configuration-example"></a><a href="#configuration-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 [...]
+<p>Here is a configuration Json example:</p>
+<pre><code class="hljs css language-$json">{
+    <span class="hljs-attr">"zkServers"</span>: <span class="hljs-string">"127.0.0.1:2181"</span>,
+    <span class="hljs-attr">"batchSize"</span>: <span class="hljs-string">"5120"</span>,
+    <span class="hljs-attr">"destination"</span>: <span class="hljs-string">"example"</span>,
+    <span class="hljs-attr">"username"</span>: <span class="hljs-string">""</span>,
+    <span class="hljs-attr">"password"</span>: <span class="hljs-string">""</span>,
+    <span class="hljs-attr">"cluster"</span>: <span class="hljs-literal">false</span>,
+    <span class="hljs-attr">"singleHostname"</span>: <span class="hljs-string">"127.0.0.1"</span>,
+    <span class="hljs-attr">"singlePort"</span>: <span class="hljs-string">"11111"</span>,
+}
+</code></pre>
+<p>You could also find the yaml example in this <a href="https://github.com/apache/pulsar/blob/master/pulsar-io/canal/src/main/resources/canal-mysql-source-config.yaml">file</a>, which has similar content below:</p>
+<pre><code class="hljs css language-$yaml"><span class="hljs-symbol">configs:</span>
+<span class="hljs-symbol">    zkServers:</span> <span class="hljs-string">"127.0.0.1:2181"</span>
+<span class="hljs-symbol">    batchSize:</span> <span class="hljs-string">"5120"</span>
+<span class="hljs-symbol">    destination:</span> <span class="hljs-string">"example"</span>
+<span class="hljs-symbol">    username:</span> <span class="hljs-string">""</span>
+<span class="hljs-symbol">    password:</span> <span class="hljs-string">""</span>
+<span class="hljs-symbol">    cluster:</span> false
+<span class="hljs-symbol">    singleHostname:</span> <span class="hljs-string">"127.0.0.1"</span>
+<span class="hljs-symbol">    singlePort:</span> <span class="hljs-string">"11111"</span>
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="usage-example"></a><a href="#usage-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-.8 [...]
+<p>Here is a simple example to store MySQL change data using above example config.</p>
+<ul>
+<li>Start a MySQL server</li>
+</ul>
+<pre><code class="hljs css language-$bash">docker pull mysql:5.7
+docker <span class="hljs-builtin-name">run</span> -d -it --rm --name pulsar-mysql -p 3306:3306 -e <span class="hljs-attribute">MYSQL_ROOT_PASSWORD</span>=canal -e <span class="hljs-attribute">MYSQL_USER</span>=mysqluser -e <span class="hljs-attribute">MYSQL_PASSWORD</span>=mysqlpw mysql:5.7
+</code></pre>
+<ul>
+<li>Modify configuration files mysqld.cnf</li>
+</ul>
+<pre><code class="hljs"><span class="hljs-section">[mysqld]</span>
+<span class="hljs-attr">pid-file</span>    = /var/run/mysqld/mysqld.pid
+<span class="hljs-attr">socket</span>      = /var/run/mysqld/mysqld.sock
+<span class="hljs-attr">datadir</span>     = /var/lib/mysql
+<span class="hljs-comment">#log-error  = /var/log/mysql/error.log</span>
+<span class="hljs-comment"># By default we only accept connections from localhost</span>
+<span class="hljs-comment">#bind-address   = 127.0.0.1</span>
+<span class="hljs-comment"># Disabling symbolic-links is recommended to prevent assorted security risks</span>
+<span class="hljs-attr">symbolic-links</span>=<span class="hljs-number">0</span>
+<span class="hljs-attr">log-bin</span>=mysql-bin
+<span class="hljs-attr">binlog-format</span>=ROW
+<span class="hljs-attr">server_id</span>=<span class="hljs-number">1</span>
+</code></pre>
+<ul>
+<li>Copy file to mysql server from local and restart mysql server</li>
+</ul>
+<pre><code class="hljs css language-$bash">docker cp mysqld<span class="hljs-selector-class">.cnf</span> pulsar-mysql:/etc/mysql/mysql<span class="hljs-selector-class">.conf</span><span class="hljs-selector-class">.d</span>/
+docker restart pulsar-mysql
+</code></pre>
+<ul>
+<li>Create test database in mysql server</li>
+</ul>
+<pre><code class="hljs css language-$bash">docker exec -it pulsar-mysql /bin/bash
+mysql -h 127.0.0.1 -uroot -pcanal -e '<span class="hljs-keyword">create</span> <span class="hljs-keyword">database</span> <span class="hljs-keyword">test</span>;'
+</code></pre>
+<ul>
+<li>Start canal server and connect mysql server</li>
+</ul>
+<pre><code class="hljs">docker pull canal/canal-server:v1.<span class="hljs-number">1.2</span>
+docker run -d -it --link pulsar-mysql -e canal<span class="hljs-selector-class">.auto</span><span class="hljs-selector-class">.scan</span>=false -e canal.destinations=test -e canal<span class="hljs-selector-class">.instance</span><span class="hljs-selector-class">.master</span><span class="hljs-selector-class">.address</span>=pulsar-mysql:<span class="hljs-number">3306</span> -e canal<span class="hljs-selector-class">.instance</span><span class="hljs-selector-class">.dbUsername</span>=ro [...]
+</code></pre>
+<ul>
+<li>Start pulsar standalone</li>
+</ul>
+<pre><code class="hljs css language-$bash">docker pull apachepulsar/pulsar:<span class="hljs-number">2.3</span><span class="hljs-number">.0</span>
+docker run -d -it --link pulsar-canal-server -p <span class="hljs-number">6650</span>:<span class="hljs-number">6650</span> -p <span class="hljs-number">8080</span>:<span class="hljs-number">8080</span> -v $PWD/data:/pulsar/data --name pulsar-standalone apachepulsar/pulsar:<span class="hljs-number">2.3</span><span class="hljs-number">.0</span> bin/pulsar standalone
+</code></pre>
+<ul>
+<li><p>Start pulsar-io in standalone</p></li>
+<li><p>Config file canal-mysql-source-config.yaml</p></li>
+</ul>
+<pre><code class="hljs css language-$yaml"><span class="hljs-symbol">configs:</span>
+<span class="hljs-symbol">    zkServers:</span> <span class="hljs-string">""</span>
+<span class="hljs-symbol">    batchSize:</span> <span class="hljs-string">"5120"</span>
+<span class="hljs-symbol">    destination:</span> <span class="hljs-string">"test"</span>
+<span class="hljs-symbol">    username:</span> <span class="hljs-string">""</span>
+<span class="hljs-symbol">    password:</span> <span class="hljs-string">""</span>
+<span class="hljs-symbol">    cluster:</span> false
+<span class="hljs-symbol">    singleHostname:</span> <span class="hljs-string">"pulsar-canal-server"</span>
+<span class="hljs-symbol">    singlePort:</span> <span class="hljs-string">"11111"</span>
+</code></pre>
+<ul>
+<li>Consumer file pulsar-client.py for test</li>
+</ul>
+<pre><code class="hljs"><span class="hljs-keyword">import</span> pulsar
+
+client = pulsar.<span class="hljs-built_in">Client</span>(<span class="hljs-string">'pulsar://localhost:6650'</span>)
+consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
+                            subscription_name=<span class="hljs-string">'my-sub'</span>)
+
+<span class="hljs-built_in">while</span> True:
+    msg = consumer.receive()
+    <span class="hljs-built_in">print</span>(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
+    consumer.acknowledge(msg)
+
+client.<span class="hljs-built_in">close</span>()
+</code></pre>
+<ul>
+<li>Copy config file and test file to pulsar server</li>
+</ul>
+<pre><code class="hljs css language-$bash">docker <span class="hljs-keyword">cp</span> canal-mysql-<span class="hljs-keyword">source</span>-config.yaml pulsar-standalone:/pulsar/<span class="hljs-keyword">conf</span>/
+docker <span class="hljs-keyword">cp</span> pulsar-client.<span class="hljs-keyword">py</span> pulsar-standalone:/pulsar/
+</code></pre>
+<ul>
+<li>Download canal connector and start canal connector</li>
+</ul>
+<pre><code class="hljs css language-$bash">docker exec -it pulsar-standalone <span class="hljs-string">/bin/bash</span>
+wget http:<span class="hljs-string">//apache.01link.hk/pulsar/pulsar-2.3.0/connectors/pulsar-io-canal-2.3.0.nar</span> -P connectors
+<span class="hljs-string">./bin/pulsar-admin</span> source localrun <span class="hljs-params">--archive</span> <span class="hljs-string">./connectors/pulsar-io-canal-2.3.0.nar</span> <span class="hljs-params">--classname</span> org.apache.pulsar.io.canal.CanalStringSource <span class="hljs-params">--tenant</span> public <span class="hljs-params">--namespace</span> default <span class="hljs-params">--name</span> canal <span class="hljs-params">--destination-topic-name</span> my-topic <spa [...]
+</code></pre>
+<ul>
+<li>Consumption data</li>
+</ul>
+<pre><code class="hljs css language-$bash"><span class="hljs-symbol">docker</span> exec -<span class="hljs-keyword">it </span>pulsar-standalone /<span class="hljs-keyword">bin/bash
+</span><span class="hljs-symbol">python</span> pulsar-client.py
+</code></pre>
+<ul>
+<li>Open another window for login mysql server</li>
+</ul>
+<pre><code class="hljs css language-$bash">docker exec -it pulsar-mysql /bin/bash
+mysql -h <span class="hljs-number">127.0</span><span class="hljs-number">.0</span><span class="hljs-number">.1</span> -uroot -pcanal
+</code></pre>
+<ul>
+<li>Create table and insert, delete, update data in mysql server</li>
+</ul>
+<pre><code class="hljs">mysql&gt; use test;
+mysql&gt; show tables;
+mysql&gt; <span class="hljs-keyword">CREATE</span> TABLE <span class="hljs-keyword">IF</span> <span class="hljs-keyword">NOT</span> <span class="hljs-keyword">EXISTS</span> <span class="hljs-symbol">`test_table`</span>(<span class="hljs-symbol">`test_id`</span> INT UNSIGNED AUTO_INCREMENT,<span class="hljs-symbol">`test_title`</span> VARCHAR(<span class="hljs-number">100</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,
+<span class="hljs-symbol">`test_author`</span> VARCHAR(<span class="hljs-number">40</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,
+<span class="hljs-symbol">`test_date`</span> DATE,<span class="hljs-keyword">PRIMARY</span> <span class="hljs-keyword">KEY</span> ( <span class="hljs-symbol">`test_id`</span> ))ENGINE=InnoDB DEFAULT CHARSET=utf8;
+mysql&gt; <span class="hljs-keyword">INSERT</span> <span class="hljs-keyword">INTO</span> test_table (test_title, test_author, test_date) <span class="hljs-keyword">VALUES</span>(<span class="hljs-string">"a"</span>, <span class="hljs-string">"b"</span>, NOW());
+mysql&gt; <span class="hljs-keyword">UPDATE</span> test_table <span class="hljs-keyword">SET</span> test_title=<span class="hljs-string">'c'</span> <span class="hljs-keyword">WHERE</span> test_title=<span class="hljs-string">'a'</span>;
+mysql&gt; <span class="hljs-keyword">DELETE</span> <span class="hljs-keyword">FROM</span> test_table <span class="hljs-keyword">WHERE</span> test_title=<span class="hljs-string">'c'</span>;
+</code></pre>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apache Software Foundation.</section><span><script>
+      const community = document.querySelector("a[href='#community']").parentNode;
+      const communityMenu =
+        '<li>' +
+        '<a id="community-menu" href="#">Community <span style="font-size: 0.75em">&nbsp;▼</span></a>' +
+        '<div id="community-dropdown" class="hide">' +
+          '<ul id="community-dropdown-items">' +
+            '<li><a href="/en/contact">Contact</a></li>' +
+            '<li><a href="/en/contributing">Contributing</a></li>' +
+            '<li><a href="/en/events">Events</a></li>' +
+            '<li><a href="https://twitter.com/Apache_Pulsar" target="_blank">Twitter &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/wiki" target="_blank">Wiki &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/issues" target="_blank">Issue tracking &#x2750</a></li>' +
+            '<li>&nbsp;</li>' +
+            '<li><a href="/en/resources">Resources</a></li>' +
+            '<li><a href="/en/team">Team</a></li>' +
+          '</ul>' +
+        '</div>' +
+        '</li>';
+
+      community.innerHTML = communityMenu;
+
+      const communityMenuItem = document.getElementById("community-menu");
+      const communityDropDown = document.getElementById("community-dropdown");
+      communityMenuItem.addEventListener("click", function(event) {
+        event.preventDefault();
+
+        if (communityDropDown.className == 'hide') {
+          communityDropDown.className = 'visible';
+        } else {
+          communityDropDown.className = 'hide';
+        }
+      });
+    </script></span><span><script src="/js/pjax-api.min.js"></script><script>window.navfoo = new Pjax({
+            areas: [
+              // try to use the first query.
+              '.mainContainer, .docsNavContainer .toc .navWrapper, .onPageNav',
+              // fallback
+              'body'
+            ],
+            link: '.docsNavContainer:not(.docsSliderActive) a',
+            update: {
+              script: false,
+            }
+          });
+        </script></span></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</scri [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: 'd226a455cecdd4bc18a554c1b47e5b52',
+                indexName: 'apache_pulsar',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:next"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/en/next/io-cdc-canal/index.html b/content/docs/en/next/io-cdc-canal/index.html
new file mode 100644
index 0000000..4a49f7a
--- /dev/null
+++ b/content/docs/en/next/io-cdc-canal/index.html
@@ -0,0 +1,242 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>CDC Canal Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-configuration-options&quot; aria-hidden=&quot [...]
+"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="CDC Canal Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-conf [...]
+"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
+              (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+              (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+              m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+              })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+              ga('create', 'UA-102219959-1', 'auto');
+              ga('send', 'pageview');
+            </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div clas [...]
+        const languagesMenuItem = document.getElementById("languages-menu");
+        const languagesDropDown = document.getElementById("languages-dropdown");
+        languagesMenuItem.addEventListener("click", function(event) {
+          event.preventDefault();
+
+          if (languagesDropDown.className == "hide") {
+            languagesDropDown.className = "visible";
+          } else {
+            languagesDropDown.className = "hide";
+          }
+        });
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/incubator-pulsar/edit/master/site2/docs/io-cdc-canal.md" target="_bla [...]
+<p>The Configuration is mostly related to Canal task config.</p>
+<table>
+<thead>
+<tr><th>Name</th><th>Required</th><th>Default</th><th>Description</th></tr>
+</thead>
+<tbody>
+<tr><td><code>zkServers</code></td><td><code>false</code></td><td><code>127.0.0.1:2181</code></td><td><code>The address and port of the zookeeper . if canal server configured to cluster mode</code></td></tr>
+<tr><td><code>batchSize</code></td><td><code>true</code></td><td><code>5120</code></td><td><code>Take 5120 records from the canal server in batches</code></td></tr>
+<tr><td><code>username</code></td><td><code>false</code></td><td>``</td><td><code>Canal server account, not MySQL</code></td></tr>
+<tr><td><code>password</code></td><td><code>false</code></td><td>``</td><td><code>Canal server password, not MySQL</code></td></tr>
+<tr><td><code>cluster</code></td><td><code>false</code></td><td><code>false</code></td><td><code>Decide whether to open cluster mode based on canal server configuration, true: cluster mode, false: standalone mode</code></td></tr>
+<tr><td><code>singleHostname</code></td><td><code>false</code></td><td><code>127.0.0.1</code></td><td><code>The address of canal server</code></td></tr>
+<tr><td><code>singlePort</code></td><td><code>false</code></td><td><code>11111</code></td><td><code>The port of canal server</code></td></tr>
+</tbody>
+</table>
+<h3><a class="anchor" aria-hidden="true" id="configuration-example"></a><a href="#configuration-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 [...]
+<p>Here is a configuration Json example:</p>
+<pre><code class="hljs css language-$json">{
+    <span class="hljs-attr">"zkServers"</span>: <span class="hljs-string">"127.0.0.1:2181"</span>,
+    <span class="hljs-attr">"batchSize"</span>: <span class="hljs-string">"5120"</span>,
+    <span class="hljs-attr">"destination"</span>: <span class="hljs-string">"example"</span>,
+    <span class="hljs-attr">"username"</span>: <span class="hljs-string">""</span>,
+    <span class="hljs-attr">"password"</span>: <span class="hljs-string">""</span>,
+    <span class="hljs-attr">"cluster"</span>: <span class="hljs-literal">false</span>,
+    <span class="hljs-attr">"singleHostname"</span>: <span class="hljs-string">"127.0.0.1"</span>,
+    <span class="hljs-attr">"singlePort"</span>: <span class="hljs-string">"11111"</span>,
+}
+</code></pre>
+<p>You could also find the yaml example in this <a href="https://github.com/apache/pulsar/blob/master/pulsar-io/canal/src/main/resources/canal-mysql-source-config.yaml">file</a>, which has similar content below:</p>
+<pre><code class="hljs css language-$yaml"><span class="hljs-symbol">configs:</span>
+<span class="hljs-symbol">    zkServers:</span> <span class="hljs-string">"127.0.0.1:2181"</span>
+<span class="hljs-symbol">    batchSize:</span> <span class="hljs-string">"5120"</span>
+<span class="hljs-symbol">    destination:</span> <span class="hljs-string">"example"</span>
+<span class="hljs-symbol">    username:</span> <span class="hljs-string">""</span>
+<span class="hljs-symbol">    password:</span> <span class="hljs-string">""</span>
+<span class="hljs-symbol">    cluster:</span> false
+<span class="hljs-symbol">    singleHostname:</span> <span class="hljs-string">"127.0.0.1"</span>
+<span class="hljs-symbol">    singlePort:</span> <span class="hljs-string">"11111"</span>
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="usage-example"></a><a href="#usage-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-.8 [...]
+<p>Here is a simple example to store MySQL change data using above example config.</p>
+<ul>
+<li>Start a MySQL server</li>
+</ul>
+<pre><code class="hljs css language-$bash">docker pull mysql:5.7
+docker <span class="hljs-builtin-name">run</span> -d -it --rm --name pulsar-mysql -p 3306:3306 -e <span class="hljs-attribute">MYSQL_ROOT_PASSWORD</span>=canal -e <span class="hljs-attribute">MYSQL_USER</span>=mysqluser -e <span class="hljs-attribute">MYSQL_PASSWORD</span>=mysqlpw mysql:5.7
+</code></pre>
+<ul>
+<li>Modify configuration files mysqld.cnf</li>
+</ul>
+<pre><code class="hljs"><span class="hljs-section">[mysqld]</span>
+<span class="hljs-attr">pid-file</span>    = /var/run/mysqld/mysqld.pid
+<span class="hljs-attr">socket</span>      = /var/run/mysqld/mysqld.sock
+<span class="hljs-attr">datadir</span>     = /var/lib/mysql
+<span class="hljs-comment">#log-error  = /var/log/mysql/error.log</span>
+<span class="hljs-comment"># By default we only accept connections from localhost</span>
+<span class="hljs-comment">#bind-address   = 127.0.0.1</span>
+<span class="hljs-comment"># Disabling symbolic-links is recommended to prevent assorted security risks</span>
+<span class="hljs-attr">symbolic-links</span>=<span class="hljs-number">0</span>
+<span class="hljs-attr">log-bin</span>=mysql-bin
+<span class="hljs-attr">binlog-format</span>=ROW
+<span class="hljs-attr">server_id</span>=<span class="hljs-number">1</span>
+</code></pre>
+<ul>
+<li>Copy file to mysql server from local and restart mysql server</li>
+</ul>
+<pre><code class="hljs css language-$bash">docker cp mysqld<span class="hljs-selector-class">.cnf</span> pulsar-mysql:/etc/mysql/mysql<span class="hljs-selector-class">.conf</span><span class="hljs-selector-class">.d</span>/
+docker restart pulsar-mysql
+</code></pre>
+<ul>
+<li>Create test database in mysql server</li>
+</ul>
+<pre><code class="hljs css language-$bash">docker exec -it pulsar-mysql /bin/bash
+mysql -h 127.0.0.1 -uroot -pcanal -e '<span class="hljs-keyword">create</span> <span class="hljs-keyword">database</span> <span class="hljs-keyword">test</span>;'
+</code></pre>
+<ul>
+<li>Start canal server and connect mysql server</li>
+</ul>
+<pre><code class="hljs">docker pull canal/canal-server:v1.<span class="hljs-number">1.2</span>
+docker run -d -it --link pulsar-mysql -e canal<span class="hljs-selector-class">.auto</span><span class="hljs-selector-class">.scan</span>=false -e canal.destinations=test -e canal<span class="hljs-selector-class">.instance</span><span class="hljs-selector-class">.master</span><span class="hljs-selector-class">.address</span>=pulsar-mysql:<span class="hljs-number">3306</span> -e canal<span class="hljs-selector-class">.instance</span><span class="hljs-selector-class">.dbUsername</span>=ro [...]
+</code></pre>
+<ul>
+<li>Start pulsar standalone</li>
+</ul>
+<pre><code class="hljs css language-$bash">docker pull apachepulsar/pulsar:<span class="hljs-number">2.3</span><span class="hljs-number">.0</span>
+docker run -d -it --link pulsar-canal-server -p <span class="hljs-number">6650</span>:<span class="hljs-number">6650</span> -p <span class="hljs-number">8080</span>:<span class="hljs-number">8080</span> -v $PWD/data:/pulsar/data --name pulsar-standalone apachepulsar/pulsar:<span class="hljs-number">2.3</span><span class="hljs-number">.0</span> bin/pulsar standalone
+</code></pre>
+<ul>
+<li><p>Start pulsar-io in standalone</p></li>
+<li><p>Config file canal-mysql-source-config.yaml</p></li>
+</ul>
+<pre><code class="hljs css language-$yaml"><span class="hljs-symbol">configs:</span>
+<span class="hljs-symbol">    zkServers:</span> <span class="hljs-string">""</span>
+<span class="hljs-symbol">    batchSize:</span> <span class="hljs-string">"5120"</span>
+<span class="hljs-symbol">    destination:</span> <span class="hljs-string">"test"</span>
+<span class="hljs-symbol">    username:</span> <span class="hljs-string">""</span>
+<span class="hljs-symbol">    password:</span> <span class="hljs-string">""</span>
+<span class="hljs-symbol">    cluster:</span> false
+<span class="hljs-symbol">    singleHostname:</span> <span class="hljs-string">"pulsar-canal-server"</span>
+<span class="hljs-symbol">    singlePort:</span> <span class="hljs-string">"11111"</span>
+</code></pre>
+<ul>
+<li>Consumer file pulsar-client.py for test</li>
+</ul>
+<pre><code class="hljs"><span class="hljs-keyword">import</span> pulsar
+
+client = pulsar.<span class="hljs-built_in">Client</span>(<span class="hljs-string">'pulsar://localhost:6650'</span>)
+consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
+                            subscription_name=<span class="hljs-string">'my-sub'</span>)
+
+<span class="hljs-built_in">while</span> True:
+    msg = consumer.receive()
+    <span class="hljs-built_in">print</span>(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
+    consumer.acknowledge(msg)
+
+client.<span class="hljs-built_in">close</span>()
+</code></pre>
+<ul>
+<li>Copy config file and test file to pulsar server</li>
+</ul>
+<pre><code class="hljs css language-$bash">docker <span class="hljs-keyword">cp</span> canal-mysql-<span class="hljs-keyword">source</span>-config.yaml pulsar-standalone:/pulsar/<span class="hljs-keyword">conf</span>/
+docker <span class="hljs-keyword">cp</span> pulsar-client.<span class="hljs-keyword">py</span> pulsar-standalone:/pulsar/
+</code></pre>
+<ul>
+<li>Download canal connector and start canal connector</li>
+</ul>
+<pre><code class="hljs css language-$bash">docker exec -it pulsar-standalone <span class="hljs-string">/bin/bash</span>
+wget http:<span class="hljs-string">//apache.01link.hk/pulsar/pulsar-2.3.0/connectors/pulsar-io-canal-2.3.0.nar</span> -P connectors
+<span class="hljs-string">./bin/pulsar-admin</span> source localrun <span class="hljs-params">--archive</span> <span class="hljs-string">./connectors/pulsar-io-canal-2.3.0.nar</span> <span class="hljs-params">--classname</span> org.apache.pulsar.io.canal.CanalStringSource <span class="hljs-params">--tenant</span> public <span class="hljs-params">--namespace</span> default <span class="hljs-params">--name</span> canal <span class="hljs-params">--destination-topic-name</span> my-topic <spa [...]
+</code></pre>
+<ul>
+<li>Consumption data</li>
+</ul>
+<pre><code class="hljs css language-$bash"><span class="hljs-symbol">docker</span> exec -<span class="hljs-keyword">it </span>pulsar-standalone /<span class="hljs-keyword">bin/bash
+</span><span class="hljs-symbol">python</span> pulsar-client.py
+</code></pre>
+<ul>
+<li>Open another window for login mysql server</li>
+</ul>
+<pre><code class="hljs css language-$bash">docker exec -it pulsar-mysql /bin/bash
+mysql -h <span class="hljs-number">127.0</span><span class="hljs-number">.0</span><span class="hljs-number">.1</span> -uroot -pcanal
+</code></pre>
+<ul>
+<li>Create table and insert, delete, update data in mysql server</li>
+</ul>
+<pre><code class="hljs">mysql&gt; use test;
+mysql&gt; show tables;
+mysql&gt; <span class="hljs-keyword">CREATE</span> TABLE <span class="hljs-keyword">IF</span> <span class="hljs-keyword">NOT</span> <span class="hljs-keyword">EXISTS</span> <span class="hljs-symbol">`test_table`</span>(<span class="hljs-symbol">`test_id`</span> INT UNSIGNED AUTO_INCREMENT,<span class="hljs-symbol">`test_title`</span> VARCHAR(<span class="hljs-number">100</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,
+<span class="hljs-symbol">`test_author`</span> VARCHAR(<span class="hljs-number">40</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,
+<span class="hljs-symbol">`test_date`</span> DATE,<span class="hljs-keyword">PRIMARY</span> <span class="hljs-keyword">KEY</span> ( <span class="hljs-symbol">`test_id`</span> ))ENGINE=InnoDB DEFAULT CHARSET=utf8;
+mysql&gt; <span class="hljs-keyword">INSERT</span> <span class="hljs-keyword">INTO</span> test_table (test_title, test_author, test_date) <span class="hljs-keyword">VALUES</span>(<span class="hljs-string">"a"</span>, <span class="hljs-string">"b"</span>, NOW());
+mysql&gt; <span class="hljs-keyword">UPDATE</span> test_table <span class="hljs-keyword">SET</span> test_title=<span class="hljs-string">'c'</span> <span class="hljs-keyword">WHERE</span> test_title=<span class="hljs-string">'a'</span>;
+mysql&gt; <span class="hljs-keyword">DELETE</span> <span class="hljs-keyword">FROM</span> test_table <span class="hljs-keyword">WHERE</span> test_title=<span class="hljs-string">'c'</span>;
+</code></pre>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apache Software Foundation.</section><span><script>
+      const community = document.querySelector("a[href='#community']").parentNode;
+      const communityMenu =
+        '<li>' +
+        '<a id="community-menu" href="#">Community <span style="font-size: 0.75em">&nbsp;▼</span></a>' +
+        '<div id="community-dropdown" class="hide">' +
+          '<ul id="community-dropdown-items">' +
+            '<li><a href="/en/contact">Contact</a></li>' +
+            '<li><a href="/en/contributing">Contributing</a></li>' +
+            '<li><a href="/en/events">Events</a></li>' +
+            '<li><a href="https://twitter.com/Apache_Pulsar" target="_blank">Twitter &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/wiki" target="_blank">Wiki &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/issues" target="_blank">Issue tracking &#x2750</a></li>' +
+            '<li>&nbsp;</li>' +
+            '<li><a href="/en/resources">Resources</a></li>' +
+            '<li><a href="/en/team">Team</a></li>' +
+          '</ul>' +
+        '</div>' +
+        '</li>';
+
+      community.innerHTML = communityMenu;
+
+      const communityMenuItem = document.getElementById("community-menu");
+      const communityDropDown = document.getElementById("community-dropdown");
+      communityMenuItem.addEventListener("click", function(event) {
+        event.preventDefault();
+
+        if (communityDropDown.className == 'hide') {
+          communityDropDown.className = 'visible';
+        } else {
+          communityDropDown.className = 'hide';
+        }
+      });
+    </script></span><span><script src="/js/pjax-api.min.js"></script><script>window.navfoo = new Pjax({
+            areas: [
+              // try to use the first query.
+              '.mainContainer, .docsNavContainer .toc .navWrapper, .onPageNav',
+              // fallback
+              'body'
+            ],
+            link: '.docsNavContainer:not(.docsSliderActive) a',
+            update: {
+              script: false,
+            }
+          });
+        </script></span></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</scri [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: 'd226a455cecdd4bc18a554c1b47e5b52',
+                indexName: 'apache_pulsar',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:next"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/en/io-cdc.html b/content/docs/en/next/io-cdc-debezium.html
similarity index 50%
copy from content/docs/en/io-cdc.html
copy to content/docs/en/next/io-cdc-debezium.html
index 100a19b..5840c01 100644
--- a/content/docs/en/io-cdc.html
+++ b/content/docs/en/next/io-cdc-debezium.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>CDC Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link&quot;&gt;&lt;svg [...]
-"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="CDC Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source&quot; aria-hidden=&quot;true&qu [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>CDC Debezium Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-configuration-options&quot; aria-hidden=&q [...]
+"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="CDC Debezium Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-c [...]
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -8,7 +8,7 @@
 
               ga('create', 'UA-102219959-1', 'auto');
               ga('send', 'pageview');
-            </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div clas [...]
+            </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div clas [...]
         const languagesMenuItem = document.getElementById("languages-menu");
         const languagesDropDown = document.getElementById("languages-dropdown");
         languagesMenuItem.addEventListener("click", function(event) {
@@ -20,62 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              const headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                if (event.target.tagName === 'A') {
-                  document.body.classList.remove('tocActive');
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/incubator-pulsar/edit/master/site2/docs/io-cdc.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 class="postHeaderTitle">CDC Connector</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="source"></a><a href="#source" aria-hidden="true" class="hash-link"><svg cl [...]
-<p>The CDC Source connector is used to capture change log of existing databases like MySQL, MongoDB, PostgreSQL into Pulsar.</p>
-<p>The CDC Source connector is built on top of <a href="https://debezium.io/">Debezium</a>. This connector stores all data into Pulsar Cluster in a persistent, replicated and partitioned way.
-This CDC Source are tested by using MySQL, and you could get more information regarding how it works at <a href="https://debezium.io/docs/connectors/mysql/">this link</a>.
-Regarding how Debezium works, please reference to <a href="https://debezium.io/docs/tutorial/">Debezium tutorial</a>. It is recommended that you go through this tutorial first.</p>
-<h3><a class="anchor" aria-hidden="true" id="source-configuration-options"></a><a href="#source-configuration-options" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/incubator-pulsar/edit/master/site2/docs/io-cdc-debezium.md" target="_ [...]
 <p>The Configuration is mostly related to Debezium task config, besides this we should provides the service URL of Pulsar cluster, and topic names that used to store offset and history.</p>
 <table>
 <thead>
@@ -199,7 +144,7 @@ mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-ke
 <ul>
 <li>In above subscribe topic terminal tab, we could find that 2 changes has been kept into products topic.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/io-develop"><span class="arrow-prev">← </span><span>Developing Connectors</span></a><a class="docs-next button" href="/docs/en/sql-overview"><span>Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#source">Source</a><ul class="toc-headings"><li><a href="#source-configuration-options">Source Configuration Optio [...]
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apache Software Foundation.</section><span><script>
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
@@ -261,6 +206,6 @@ mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-ke
                 apiKey: 'd226a455cecdd4bc18a554c1b47e5b52',
                 indexName: 'apache_pulsar',
                 inputSelector: '#search_input_react',
-                algoliaOptions: {"facetFilters":["language:en","version:2.3.0"]}
+                algoliaOptions: {"facetFilters":["language:en","version:next"]}
               });
             </script></body></html>
\ No newline at end of file
diff --git a/content/docs/en/io-cdc/index.html b/content/docs/en/next/io-cdc-debezium/index.html
similarity index 50%
copy from content/docs/en/io-cdc/index.html
copy to content/docs/en/next/io-cdc-debezium/index.html
index 100a19b..5840c01 100644
--- a/content/docs/en/io-cdc/index.html
+++ b/content/docs/en/next/io-cdc-debezium/index.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>CDC Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source&quot; aria-hidden=&quot;true&quot; class=&quot;hash-link&quot;&gt;&lt;svg [...]
-"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="CDC Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" content="&lt;h2&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source&quot; aria-hidden=&quot;true&qu [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>CDC Debezium Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-configuration-options&quot; aria-hidden=&q [...]
+"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="CDC Debezium Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-c [...]
 "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@@ -8,7 +8,7 @@
 
               ga('create', 'UA-102219959-1', 'auto');
               ga('send', 'pageview');
-            </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div clas [...]
+            </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div clas [...]
         const languagesMenuItem = document.getElementById("languages-menu");
         const languagesDropDown = document.getElementById("languages-dropdown");
         languagesMenuItem.addEventListener("click", function(event) {
@@ -20,62 +20,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><i></i></div><h2><i>›</i><span>Pul [...]
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
-
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
-
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
-
-              const headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                if (event.target.tagName === 'A') {
-                  document.body.classList.remove('tocActive');
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/incubator-pulsar/edit/master/site2/docs/io-cdc.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 class="postHeaderTitle">CDC Connector</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="source"></a><a href="#source" aria-hidden="true" class="hash-link"><svg cl [...]
-<p>The CDC Source connector is used to capture change log of existing databases like MySQL, MongoDB, PostgreSQL into Pulsar.</p>
-<p>The CDC Source connector is built on top of <a href="https://debezium.io/">Debezium</a>. This connector stores all data into Pulsar Cluster in a persistent, replicated and partitioned way.
-This CDC Source are tested by using MySQL, and you could get more information regarding how it works at <a href="https://debezium.io/docs/connectors/mysql/">this link</a>.
-Regarding how Debezium works, please reference to <a href="https://debezium.io/docs/tutorial/">Debezium tutorial</a>. It is recommended that you go through this tutorial first.</p>
-<h3><a class="anchor" aria-hidden="true" id="source-configuration-options"></a><a href="#source-configuration-options" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/incubator-pulsar/edit/master/site2/docs/io-cdc-debezium.md" target="_ [...]
 <p>The Configuration is mostly related to Debezium task config, besides this we should provides the service URL of Pulsar cluster, and topic names that used to store offset and history.</p>
 <table>
 <thead>
@@ -199,7 +144,7 @@ mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-ke
 <ul>
 <li>In above subscribe topic terminal tab, we could find that 2 changes has been kept into products topic.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/io-develop"><span class="arrow-prev">← </span><span>Developing Connectors</span></a><a class="docs-next button" href="/docs/en/sql-overview"><span>Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#source">Source</a><ul class="toc-headings"><li><a href="#source-configuration-options">Source Configuration Optio [...]
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apache Software Foundation.</section><span><script>
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
@@ -261,6 +206,6 @@ mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-ke
                 apiKey: 'd226a455cecdd4bc18a554c1b47e5b52',
                 indexName: 'apache_pulsar',
                 inputSelector: '#search_input_react',
-                algoliaOptions: {"facetFilters":["language:en","version:2.3.0"]}
+                algoliaOptions: {"facetFilters":["language:en","version:next"]}
               });
             </script></body></html>
\ No newline at end of file
diff --git a/content/docs/en/next/io-cdc.html b/content/docs/en/next/io-cdc.html
index 5c1ee5d..f3fe164 100644
--- a/content/docs/en/next/io-cdc.html
+++ b/content/docs/en/next/io-cdc.html
@@ -72,134 +72,14 @@
             });
         </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/incubator-pulsar/edit/master/site2/docs/io-cdc.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 class="postHeaderTitle">CDC Connector</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="source"></a><a href="#source" aria-hidden="true" class="hash-link"><svg cl [...]
 <p>The CDC Source connector is used to capture change log of existing databases like MySQL, MongoDB, PostgreSQL into Pulsar.</p>
-<p>The CDC Source connector is built on top of <a href="https://debezium.io/">Debezium</a>. This connector stores all data into Pulsar Cluster in a persistent, replicated and partitioned way.
-This CDC Source are tested by using MySQL, and you could get more information regarding how it works at <a href="https://debezium.io/docs/connectors/mysql/">this link</a>.
-Regarding how Debezium works, please reference to <a href="https://debezium.io/docs/tutorial/">Debezium tutorial</a>. It is recommended that you go through this tutorial first.</p>
-<h3><a class="anchor" aria-hidden="true" id="source-configuration-options"></a><a href="#source-configuration-options" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 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>The Configuration is mostly related to Debezium task config, besides this we should provides the service URL of Pulsar cluster, and topic names that used to store offset and history.</p>
-<table>
-<thead>
-<tr><th>Name</th><th>Required</th><th>Default</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>task.class</code></td><td><code>true</code></td><td><code>null</code></td><td>A source task class that implemented in Debezium.</td></tr>
-<tr><td><code>database.hostname</code></td><td><code>true</code></td><td><code>null</code></td><td>The address of the Database server.</td></tr>
-<tr><td><code>database.port</code></td><td><code>true</code></td><td><code>null</code></td><td>The port number of the Database server..</td></tr>
-<tr><td><code>database.user</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the Database user that has the required privileges.</td></tr>
-<tr><td><code>database.password</code></td><td><code>true</code></td><td><code>null</code></td><td>The password for the Database user that has the required privileges.</td></tr>
-<tr><td><code>database.server.id</code></td><td><code>true</code></td><td><code>null</code></td><td>The connector’s identifier that must be unique within the Database cluster and similar to Database’s server-id configuration property.</td></tr>
-<tr><td><code>database.server.name</code></td><td><code>true</code></td><td><code>null</code></td><td>The logical name of the Database server/cluster, which forms a namespace and is used in all the names of the Kafka topics to which the connector writes, the Kafka Connect schema names, and the namespaces of the corresponding Avro schema when the Avro Connector is used.</td></tr>
-<tr><td><code>database.whitelist</code></td><td><code>false</code></td><td><code>null</code></td><td>A list of all databases hosted by this server that this connector will monitor. This is optional, and there are other properties for listing the databases and tables to include or exclude from monitoring.</td></tr>
-<tr><td><code>key.converter</code></td><td><code>true</code></td><td><code>null</code></td><td>The converter provided by Kafka Connect to convert record key.</td></tr>
-<tr><td><code>value.converter</code></td><td><code>true</code></td><td><code>null</code></td><td>The converter provided by Kafka Connect to convert record value.</td></tr>
-<tr><td><code>database.history</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the database history class name.</td></tr>
-<tr><td><code>database.history.pulsar.topic</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the database history topic where the connector will write and recover DDL statements. This topic is for internal use only and should not be used by consumers.</td></tr>
-<tr><td><code>database.history.pulsar.service.url</code></td><td><code>true</code></td><td><code>null</code></td><td>Pulsar cluster service url for history topic.</td></tr>
-<tr><td><code>pulsar.service.url</code></td><td><code>true</code></td><td><code>null</code></td><td>Pulsar cluster service url.</td></tr>
-<tr><td><code>offset.storage.topic</code></td><td><code>true</code></td><td><code>null</code></td><td>Record the last committed offsets that the connector successfully completed.</td></tr>
-</tbody>
-</table>
-<h3><a class="anchor" aria-hidden="true" id="configuration-example"></a><a href="#configuration-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 [...]
-<p>Here is a configuration Json example:</p>
-<pre><code class="hljs css language-$json">{
-    <span class="hljs-attr">"tenant"</span>: <span class="hljs-string">"public"</span>,
-    <span class="hljs-attr">"namespace"</span>: <span class="hljs-string">"default"</span>,
-    <span class="hljs-attr">"name"</span>: <span class="hljs-string">"debezium-kafka-source"</span>,
-    <span class="hljs-attr">"className"</span>: <span class="hljs-string">"org.apache.pulsar.io.kafka.connect.KafkaConnectSource"</span> ,
-    <span class="hljs-attr">"topicName"</span>: <span class="hljs-string">"kafka-connect-topic"</span>,
-    <span class="hljs-attr">"configs"</span>:
-    {
-        <span class="hljs-attr">"task.class"</span>: <span class="hljs-string">"io.debezium.connector.mysql.MySqlConnectorTask"</span>,
-        <span class="hljs-attr">"database.hostname"</span>: <span class="hljs-string">"localhost"</span>,
-        <span class="hljs-attr">"database.port"</span>: <span class="hljs-string">"3306"</span>,
-        <span class="hljs-attr">"database.user"</span>: <span class="hljs-string">"debezium"</span>,
-        <span class="hljs-attr">"database.password"</span>: <span class="hljs-string">"dbz"</span>,
-        <span class="hljs-attr">"database.server.id"</span>: <span class="hljs-string">"184054"</span>,
-        <span class="hljs-attr">"database.server.name"</span>: <span class="hljs-string">"dbserver1"</span>,
-        <span class="hljs-attr">"database.whitelist"</span>: <span class="hljs-string">"inventory"</span>,
-        <span class="hljs-attr">"database.history"</span>: <span class="hljs-string">"org.apache.pulsar.io.debezium.PulsarDatabaseHistory"</span>,
-        <span class="hljs-attr">"database.history.pulsar.topic"</span>: <span class="hljs-string">"history-topic"</span>,
-        <span class="hljs-attr">"database.history.pulsar.service.url"</span>: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>,
-        <span class="hljs-attr">"key.converter"</span>: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>,
-        <span class="hljs-attr">"value.converter"</span>: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>,
-        <span class="hljs-attr">"pulsar.service.url"</span>: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>,
-        <span class="hljs-attr">"offset.storage.topic"</span>: <span class="hljs-string">"offset-topic"</span>
-    },
-    <span class="hljs-attr">"archive"</span>: <span class="hljs-string">"connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar"</span>
-}
-</code></pre>
-<p>You could also find the yaml example in this <a href="https://github.com/apache/pulsar/blob/master/pulsar-io/kafka-connect-adaptor/src/main/resources/debezium-mysql-source-config.yaml">file</a>, which has similar content below:</p>
-<pre><code class="hljs css language-$yaml"><span class="hljs-attribute">tenant</span>: <span class="hljs-string">"public"</span>
-<span class="hljs-attribute">namespace</span>: <span class="hljs-string">"default"</span>
-<span class="hljs-attribute">name</span>: <span class="hljs-string">"debezium-kafka-source"</span>
-<span class="hljs-attribute">topicName</span>: <span class="hljs-string">"kafka-connect-topic"</span>
-<span class="hljs-attribute">archive</span>: <span class="hljs-string">"connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar"</span>
-
-##<span class="hljs-attribute">autoAck</span>: true
-<span class="hljs-attribute">parallelism</span>: <span class="hljs-number">1</span>
-
-<span class="hljs-attribute">configs</span>:
-  ## sourceTask
-  task.<span class="hljs-attribute">class</span>: <span class="hljs-string">"io.debezium.connector.mysql.MySqlConnectorTask"</span>
-
-  ## config for mysql, docker <span class="hljs-attribute">image</span>: debezium/<span class="hljs-attribute">example-mysql</span>:<span class="hljs-number">0.8</span>
-  database.<span class="hljs-attribute">hostname</span>: <span class="hljs-string">"localhost"</span>
-  database.<span class="hljs-attribute">port</span>: <span class="hljs-string">"3306"</span>
-  database.<span class="hljs-attribute">user</span>: <span class="hljs-string">"debezium"</span>
-  database.<span class="hljs-attribute">password</span>: <span class="hljs-string">"dbz"</span>
-  database.server.<span class="hljs-attribute">id</span>: <span class="hljs-string">"184054"</span>
-  database.server.<span class="hljs-attribute">name</span>: <span class="hljs-string">"dbserver1"</span>
-  database.<span class="hljs-attribute">whitelist</span>: <span class="hljs-string">"inventory"</span>
-
-  database.<span class="hljs-attribute">history</span>: <span class="hljs-string">"org.apache.pulsar.io.debezium.PulsarDatabaseHistory"</span>
-  database.history.pulsar.<span class="hljs-attribute">topic</span>: <span class="hljs-string">"history-topic"</span>
-  database.history.pulsar.service.<span class="hljs-attribute">url</span>: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>
-  ## KEY_CONVERTER_CLASS_CONFIG, VALUE_CONVERTER_CLASS_CONFIG
-  key.<span class="hljs-attribute">converter</span>: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>
-  value.<span class="hljs-attribute">converter</span>: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>
-  ## PULSAR_SERVICE_URL_CONFIG
-  pulsar.service.<span class="hljs-attribute">url</span>: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>
-  ## OFFSET_STORAGE_TOPIC_CONFIG
-  offset.storage.<span class="hljs-attribute">topic</span>: <span class="hljs-string">"offset-topic"</span>
-</code></pre>
-<h3><a class="anchor" aria-hidden="true" id="usage-example"></a><a href="#usage-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-.8 [...]
-<p>Here is a simple example to store MySQL change data using above example config.</p>
-<ul>
-<li>Start a MySQL server with an example database, from which Debezium can capture changes.</li>
-</ul>
-<pre><code class="hljs css language-$bash"> docker <span class="hljs-builtin-name">run</span> -it --rm --name mysql -p 3306:3306 -e <span class="hljs-attribute">MYSQL_ROOT_PASSWORD</span>=debezium -e <span class="hljs-attribute">MYSQL_USER</span>=mysqluser -e <span class="hljs-attribute">MYSQL_PASSWORD</span>=mysqlpw debezium/example-mysql:0.8
-</code></pre>
-<ul>
-<li>Start a Pulsar service locally in standalone mode.</li>
-</ul>
-<pre><code class="hljs css language-$bash"> <span class="hljs-keyword">bin/pulsar </span>standalone
-</code></pre>
-<ul>
-<li>Start pulsar debezium connector, with local run mode, and using above yaml config file. Please make sure that the nar file is available as configured in path <code>connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar</code>.</li>
-</ul>
-<pre><code class="hljs css language-$bash"> bin/pulsar-admin <span class="hljs-keyword">source</span> localrun  --sourceConfigFile debezium-mysql-<span class="hljs-keyword">source</span>-config.yaml
-</code></pre>
-<ul>
-<li>Subscribe the topic for table <code>inventory.products</code>.</li>
-</ul>
-<pre><code class="hljs"> bin/pulsar-<span class="hljs-keyword">client</span> consume -s <span class="hljs-string">"sub-products"</span> <span class="hljs-keyword">public</span>/<span class="hljs-keyword">default</span>/dbserver1.inventory.products -n <span class="hljs-number">0</span>
-</code></pre>
-<ul>
-<li>start a MySQL cli docker connector, and use it we could change to the table <code>products</code> in MySQL server.</li>
-</ul>
-<pre><code class="hljs css language-$bash"><span class="hljs-variable">$docker</span> <span class="hljs-keyword">run</span> -it --<span class="hljs-keyword">rm</span> --name mysqlterm --link mysql --<span class="hljs-keyword">rm</span> mysql:5.7 <span class="hljs-keyword">sh</span> -c 'exec mysql -<span class="hljs-keyword">h</span><span class="hljs-string">"$MYSQL_PORT_3306_TCP_ADDR"</span> -P<span class="hljs-string">"$MYSQL_PORT_3306_TCP_PORT"</span> -uroot -p<span class="hljs-string" [...]
-</code></pre>
-<p>This command will pop out MySQL cli, in this cli, we could do a change in table products, use commands below to change the name of 2 items in table products:</p>
-<pre><code class="hljs">mysql&gt; use inventory;
-mysql&gt; <span class="hljs-keyword">show</span> <span class="hljs-keyword">tables</span>;
-mysql&gt; <span class="hljs-keyword">SELECT</span> * <span class="hljs-keyword">FROM</span>  products ;
-mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-keyword">SET</span> <span class="hljs-type">name</span>=<span class="hljs-string">'1111111111'</span> <span class="hljs-keyword">WHERE</span> id=<span class="hljs-number">101</span>;
-mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-keyword">SET</span> <span class="hljs-type">name</span>=<span class="hljs-string">'1111111111'</span> <span class="hljs-keyword">WHERE</span> id=<span class="hljs-number">107</span>;
-</code></pre>
+<p>The CDC Source connector is built on top of <a href="https://debezium.io/">Debezium</a> and <a href="https://github.com/alibaba/canal">Canal</a>. This connector stores all data into Pulsar Cluster in a persistent, replicated and partitioned way.
+This CDC Source are tested by using MySQL, and you could get more information regarding how it works at <a href="https://debezium.io/docs/connectors/mysql/">this debezium link</a> or <a href="https://github.com/alibaba/canal/wiki">this canal link</a>.
+Regarding how Debezium works, please reference to <a href="https://debezium.io/docs/tutorial/">Debezium tutorial</a>. Regarding how Canal works, please reference to <a href="https://github.com/alibaba/canal/wiki">Canal tutorial</a>. It is recommended that you go through this tutorial first.</p>
 <ul>
-<li>In above subscribe topic terminal tab, we could find that 2 changes has been kept into products topic.</li>
+<li><a href="/docs/en/next/io-cdc-debezium">Debezium Connector</a></li>
+<li><a href="/docs/en/next/io-cdc-canal">Alibaba Canal Connector</a></li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/io-develop"><span class="arrow-prev">← </span><span>Developing Connectors</span></a><a class="docs-next button" href="/docs/en/next/sql-overview"><span>Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#source">Source</a><ul class="toc-headings"><li><a href="#source-configuration-options">Source Configura [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/io-develop"><span class="arrow-prev">← </span><span>Developing Connectors</span></a><a class="docs-next button" href="/docs/en/next/sql-overview"><span>Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#source">Source</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="copyrigh [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/next/io-cdc/index.html b/content/docs/en/next/io-cdc/index.html
index 5c1ee5d..f3fe164 100644
--- a/content/docs/en/next/io-cdc/index.html
+++ b/content/docs/en/next/io-cdc/index.html
@@ -72,134 +72,14 @@
             });
         </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/incubator-pulsar/edit/master/site2/docs/io-cdc.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 class="postHeaderTitle">CDC Connector</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="source"></a><a href="#source" aria-hidden="true" class="hash-link"><svg cl [...]
 <p>The CDC Source connector is used to capture change log of existing databases like MySQL, MongoDB, PostgreSQL into Pulsar.</p>
-<p>The CDC Source connector is built on top of <a href="https://debezium.io/">Debezium</a>. This connector stores all data into Pulsar Cluster in a persistent, replicated and partitioned way.
-This CDC Source are tested by using MySQL, and you could get more information regarding how it works at <a href="https://debezium.io/docs/connectors/mysql/">this link</a>.
-Regarding how Debezium works, please reference to <a href="https://debezium.io/docs/tutorial/">Debezium tutorial</a>. It is recommended that you go through this tutorial first.</p>
-<h3><a class="anchor" aria-hidden="true" id="source-configuration-options"></a><a href="#source-configuration-options" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 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>The Configuration is mostly related to Debezium task config, besides this we should provides the service URL of Pulsar cluster, and topic names that used to store offset and history.</p>
-<table>
-<thead>
-<tr><th>Name</th><th>Required</th><th>Default</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>task.class</code></td><td><code>true</code></td><td><code>null</code></td><td>A source task class that implemented in Debezium.</td></tr>
-<tr><td><code>database.hostname</code></td><td><code>true</code></td><td><code>null</code></td><td>The address of the Database server.</td></tr>
-<tr><td><code>database.port</code></td><td><code>true</code></td><td><code>null</code></td><td>The port number of the Database server..</td></tr>
-<tr><td><code>database.user</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the Database user that has the required privileges.</td></tr>
-<tr><td><code>database.password</code></td><td><code>true</code></td><td><code>null</code></td><td>The password for the Database user that has the required privileges.</td></tr>
-<tr><td><code>database.server.id</code></td><td><code>true</code></td><td><code>null</code></td><td>The connector’s identifier that must be unique within the Database cluster and similar to Database’s server-id configuration property.</td></tr>
-<tr><td><code>database.server.name</code></td><td><code>true</code></td><td><code>null</code></td><td>The logical name of the Database server/cluster, which forms a namespace and is used in all the names of the Kafka topics to which the connector writes, the Kafka Connect schema names, and the namespaces of the corresponding Avro schema when the Avro Connector is used.</td></tr>
-<tr><td><code>database.whitelist</code></td><td><code>false</code></td><td><code>null</code></td><td>A list of all databases hosted by this server that this connector will monitor. This is optional, and there are other properties for listing the databases and tables to include or exclude from monitoring.</td></tr>
-<tr><td><code>key.converter</code></td><td><code>true</code></td><td><code>null</code></td><td>The converter provided by Kafka Connect to convert record key.</td></tr>
-<tr><td><code>value.converter</code></td><td><code>true</code></td><td><code>null</code></td><td>The converter provided by Kafka Connect to convert record value.</td></tr>
-<tr><td><code>database.history</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the database history class name.</td></tr>
-<tr><td><code>database.history.pulsar.topic</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the database history topic where the connector will write and recover DDL statements. This topic is for internal use only and should not be used by consumers.</td></tr>
-<tr><td><code>database.history.pulsar.service.url</code></td><td><code>true</code></td><td><code>null</code></td><td>Pulsar cluster service url for history topic.</td></tr>
-<tr><td><code>pulsar.service.url</code></td><td><code>true</code></td><td><code>null</code></td><td>Pulsar cluster service url.</td></tr>
-<tr><td><code>offset.storage.topic</code></td><td><code>true</code></td><td><code>null</code></td><td>Record the last committed offsets that the connector successfully completed.</td></tr>
-</tbody>
-</table>
-<h3><a class="anchor" aria-hidden="true" id="configuration-example"></a><a href="#configuration-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 [...]
-<p>Here is a configuration Json example:</p>
-<pre><code class="hljs css language-$json">{
-    <span class="hljs-attr">"tenant"</span>: <span class="hljs-string">"public"</span>,
-    <span class="hljs-attr">"namespace"</span>: <span class="hljs-string">"default"</span>,
-    <span class="hljs-attr">"name"</span>: <span class="hljs-string">"debezium-kafka-source"</span>,
-    <span class="hljs-attr">"className"</span>: <span class="hljs-string">"org.apache.pulsar.io.kafka.connect.KafkaConnectSource"</span> ,
-    <span class="hljs-attr">"topicName"</span>: <span class="hljs-string">"kafka-connect-topic"</span>,
-    <span class="hljs-attr">"configs"</span>:
-    {
-        <span class="hljs-attr">"task.class"</span>: <span class="hljs-string">"io.debezium.connector.mysql.MySqlConnectorTask"</span>,
-        <span class="hljs-attr">"database.hostname"</span>: <span class="hljs-string">"localhost"</span>,
-        <span class="hljs-attr">"database.port"</span>: <span class="hljs-string">"3306"</span>,
-        <span class="hljs-attr">"database.user"</span>: <span class="hljs-string">"debezium"</span>,
-        <span class="hljs-attr">"database.password"</span>: <span class="hljs-string">"dbz"</span>,
-        <span class="hljs-attr">"database.server.id"</span>: <span class="hljs-string">"184054"</span>,
-        <span class="hljs-attr">"database.server.name"</span>: <span class="hljs-string">"dbserver1"</span>,
-        <span class="hljs-attr">"database.whitelist"</span>: <span class="hljs-string">"inventory"</span>,
-        <span class="hljs-attr">"database.history"</span>: <span class="hljs-string">"org.apache.pulsar.io.debezium.PulsarDatabaseHistory"</span>,
-        <span class="hljs-attr">"database.history.pulsar.topic"</span>: <span class="hljs-string">"history-topic"</span>,
-        <span class="hljs-attr">"database.history.pulsar.service.url"</span>: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>,
-        <span class="hljs-attr">"key.converter"</span>: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>,
-        <span class="hljs-attr">"value.converter"</span>: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>,
-        <span class="hljs-attr">"pulsar.service.url"</span>: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>,
-        <span class="hljs-attr">"offset.storage.topic"</span>: <span class="hljs-string">"offset-topic"</span>
-    },
-    <span class="hljs-attr">"archive"</span>: <span class="hljs-string">"connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar"</span>
-}
-</code></pre>
-<p>You could also find the yaml example in this <a href="https://github.com/apache/pulsar/blob/master/pulsar-io/kafka-connect-adaptor/src/main/resources/debezium-mysql-source-config.yaml">file</a>, which has similar content below:</p>
-<pre><code class="hljs css language-$yaml"><span class="hljs-attribute">tenant</span>: <span class="hljs-string">"public"</span>
-<span class="hljs-attribute">namespace</span>: <span class="hljs-string">"default"</span>
-<span class="hljs-attribute">name</span>: <span class="hljs-string">"debezium-kafka-source"</span>
-<span class="hljs-attribute">topicName</span>: <span class="hljs-string">"kafka-connect-topic"</span>
-<span class="hljs-attribute">archive</span>: <span class="hljs-string">"connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar"</span>
-
-##<span class="hljs-attribute">autoAck</span>: true
-<span class="hljs-attribute">parallelism</span>: <span class="hljs-number">1</span>
-
-<span class="hljs-attribute">configs</span>:
-  ## sourceTask
-  task.<span class="hljs-attribute">class</span>: <span class="hljs-string">"io.debezium.connector.mysql.MySqlConnectorTask"</span>
-
-  ## config for mysql, docker <span class="hljs-attribute">image</span>: debezium/<span class="hljs-attribute">example-mysql</span>:<span class="hljs-number">0.8</span>
-  database.<span class="hljs-attribute">hostname</span>: <span class="hljs-string">"localhost"</span>
-  database.<span class="hljs-attribute">port</span>: <span class="hljs-string">"3306"</span>
-  database.<span class="hljs-attribute">user</span>: <span class="hljs-string">"debezium"</span>
-  database.<span class="hljs-attribute">password</span>: <span class="hljs-string">"dbz"</span>
-  database.server.<span class="hljs-attribute">id</span>: <span class="hljs-string">"184054"</span>
-  database.server.<span class="hljs-attribute">name</span>: <span class="hljs-string">"dbserver1"</span>
-  database.<span class="hljs-attribute">whitelist</span>: <span class="hljs-string">"inventory"</span>
-
-  database.<span class="hljs-attribute">history</span>: <span class="hljs-string">"org.apache.pulsar.io.debezium.PulsarDatabaseHistory"</span>
-  database.history.pulsar.<span class="hljs-attribute">topic</span>: <span class="hljs-string">"history-topic"</span>
-  database.history.pulsar.service.<span class="hljs-attribute">url</span>: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>
-  ## KEY_CONVERTER_CLASS_CONFIG, VALUE_CONVERTER_CLASS_CONFIG
-  key.<span class="hljs-attribute">converter</span>: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>
-  value.<span class="hljs-attribute">converter</span>: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>
-  ## PULSAR_SERVICE_URL_CONFIG
-  pulsar.service.<span class="hljs-attribute">url</span>: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>
-  ## OFFSET_STORAGE_TOPIC_CONFIG
-  offset.storage.<span class="hljs-attribute">topic</span>: <span class="hljs-string">"offset-topic"</span>
-</code></pre>
-<h3><a class="anchor" aria-hidden="true" id="usage-example"></a><a href="#usage-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-.8 [...]
-<p>Here is a simple example to store MySQL change data using above example config.</p>
-<ul>
-<li>Start a MySQL server with an example database, from which Debezium can capture changes.</li>
-</ul>
-<pre><code class="hljs css language-$bash"> docker <span class="hljs-builtin-name">run</span> -it --rm --name mysql -p 3306:3306 -e <span class="hljs-attribute">MYSQL_ROOT_PASSWORD</span>=debezium -e <span class="hljs-attribute">MYSQL_USER</span>=mysqluser -e <span class="hljs-attribute">MYSQL_PASSWORD</span>=mysqlpw debezium/example-mysql:0.8
-</code></pre>
-<ul>
-<li>Start a Pulsar service locally in standalone mode.</li>
-</ul>
-<pre><code class="hljs css language-$bash"> <span class="hljs-keyword">bin/pulsar </span>standalone
-</code></pre>
-<ul>
-<li>Start pulsar debezium connector, with local run mode, and using above yaml config file. Please make sure that the nar file is available as configured in path <code>connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar</code>.</li>
-</ul>
-<pre><code class="hljs css language-$bash"> bin/pulsar-admin <span class="hljs-keyword">source</span> localrun  --sourceConfigFile debezium-mysql-<span class="hljs-keyword">source</span>-config.yaml
-</code></pre>
-<ul>
-<li>Subscribe the topic for table <code>inventory.products</code>.</li>
-</ul>
-<pre><code class="hljs"> bin/pulsar-<span class="hljs-keyword">client</span> consume -s <span class="hljs-string">"sub-products"</span> <span class="hljs-keyword">public</span>/<span class="hljs-keyword">default</span>/dbserver1.inventory.products -n <span class="hljs-number">0</span>
-</code></pre>
-<ul>
-<li>start a MySQL cli docker connector, and use it we could change to the table <code>products</code> in MySQL server.</li>
-</ul>
-<pre><code class="hljs css language-$bash"><span class="hljs-variable">$docker</span> <span class="hljs-keyword">run</span> -it --<span class="hljs-keyword">rm</span> --name mysqlterm --link mysql --<span class="hljs-keyword">rm</span> mysql:5.7 <span class="hljs-keyword">sh</span> -c 'exec mysql -<span class="hljs-keyword">h</span><span class="hljs-string">"$MYSQL_PORT_3306_TCP_ADDR"</span> -P<span class="hljs-string">"$MYSQL_PORT_3306_TCP_PORT"</span> -uroot -p<span class="hljs-string" [...]
-</code></pre>
-<p>This command will pop out MySQL cli, in this cli, we could do a change in table products, use commands below to change the name of 2 items in table products:</p>
-<pre><code class="hljs">mysql&gt; use inventory;
-mysql&gt; <span class="hljs-keyword">show</span> <span class="hljs-keyword">tables</span>;
-mysql&gt; <span class="hljs-keyword">SELECT</span> * <span class="hljs-keyword">FROM</span>  products ;
-mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-keyword">SET</span> <span class="hljs-type">name</span>=<span class="hljs-string">'1111111111'</span> <span class="hljs-keyword">WHERE</span> id=<span class="hljs-number">101</span>;
-mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-keyword">SET</span> <span class="hljs-type">name</span>=<span class="hljs-string">'1111111111'</span> <span class="hljs-keyword">WHERE</span> id=<span class="hljs-number">107</span>;
-</code></pre>
+<p>The CDC Source connector is built on top of <a href="https://debezium.io/">Debezium</a> and <a href="https://github.com/alibaba/canal">Canal</a>. This connector stores all data into Pulsar Cluster in a persistent, replicated and partitioned way.
+This CDC Source are tested by using MySQL, and you could get more information regarding how it works at <a href="https://debezium.io/docs/connectors/mysql/">this debezium link</a> or <a href="https://github.com/alibaba/canal/wiki">this canal link</a>.
+Regarding how Debezium works, please reference to <a href="https://debezium.io/docs/tutorial/">Debezium tutorial</a>. Regarding how Canal works, please reference to <a href="https://github.com/alibaba/canal/wiki">Canal tutorial</a>. It is recommended that you go through this tutorial first.</p>
 <ul>
-<li>In above subscribe topic terminal tab, we could find that 2 changes has been kept into products topic.</li>
+<li><a href="/docs/en/next/io-cdc-debezium">Debezium Connector</a></li>
+<li><a href="/docs/en/next/io-cdc-canal">Alibaba Canal Connector</a></li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/io-develop"><span class="arrow-prev">← </span><span>Developing Connectors</span></a><a class="docs-next button" href="/docs/en/next/sql-overview"><span>Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#source">Source</a><ul class="toc-headings"><li><a href="#source-configuration-options">Source Configura [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/io-develop"><span class="arrow-prev">← </span><span>Developing Connectors</span></a><a class="docs-next button" href="/docs/en/next/sql-overview"><span>Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#source">Source</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="copyrigh [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/next/pulsar-admin.html b/content/docs/en/next/pulsar-admin.html
index 9f69f3c..2643e42 100644
--- a/content/docs/en/next/pulsar-admin.html
+++ b/content/docs/en/next/pulsar-admin.html
@@ -1601,6 +1601,7 @@
 <li><code>offload-status</code></li>
 <li><code>create-partitioned-topic</code></li>
 <li><code>delete-partitioned-topic</code></li>
+<li><code>create</code></li>
 <li><code>get-partitioned-topic-metadata</code></li>
 <li><code>update-partitioned-topic</code></li>
 <li><code>list</code></li>
@@ -1692,6 +1693,11 @@
 <p>Usage</p>
 <pre><code class="hljs css language-bash">$ pulsar-admin topics delete-partitioned-topic {persistent|non-persistent}
 </code></pre>
+<h3><a class="anchor" aria-hidden="true" id="create-5"></a><a href="#create-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 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>Creates a non-partitioned topic. A non-partitioned topic must explicitly be created by the user if allowAutoTopicCreation or createIfMissing is disabled.</p>
+<p>Usage</p>
+<pre><code class="hljs css language-bash">$ pulsar-admin topics create {persistent|non-persistent}://tenant/namespace/topic
+</code></pre>
 <h3><a class="anchor" aria-hidden="true" id="get-partitioned-topic-metadata"></a><a href="#get-partitioned-topic-metadata" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 1 [...]
 <p>Get the partitioned topic metadata. If the topic is not created or is a non-partitioned topic, this will return an empty topic with zero partitions.</p>
 <p>Usage</p>
@@ -1939,7 +1945,7 @@
 <p>Usage</p>
 <pre><code class="hljs css language-bash">$ pulsar-admin tenants get tenant-name
 </code></pre>
-<h3><a class="anchor" aria-hidden="true" id="create-5"></a><a href="#create-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<h3><a class="anchor" aria-hidden="true" id="create-6"></a><a href="#create-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <p>Creates a new tenant</p>
 <p>Usage</p>
 <pre><code class="hljs css language-bash">$ pulsar-admin tenants create tenant-name options
@@ -2097,7 +2103,7 @@
 <tr><td><code>-t</code>, <code>--type</code></td><td>The type of the schema (avro or json)</td><td></td></tr>
 </tbody>
 </table>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/reference-cli-tools"><span class="arrow-prev">← </span><span>Pulsar CLI tools</span></a><a class="docs-next button" href="/docs/en/next/reference-configuration"><span>Pulsar configuration</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#broker-stats"><code>broker-stats</code></a><ul class="toc-headings"><li><a h [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/reference-cli-tools"><span class="arrow-prev">← </span><span>Pulsar CLI tools</span></a><a class="docs-next button" href="/docs/en/next/reference-configuration"><span>Pulsar configuration</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#broker-stats"><code>broker-stats</code></a><ul class="toc-headings"><li><a h [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/next/pulsar-admin/index.html b/content/docs/en/next/pulsar-admin/index.html
index 9f69f3c..2643e42 100644
--- a/content/docs/en/next/pulsar-admin/index.html
+++ b/content/docs/en/next/pulsar-admin/index.html
@@ -1601,6 +1601,7 @@
 <li><code>offload-status</code></li>
 <li><code>create-partitioned-topic</code></li>
 <li><code>delete-partitioned-topic</code></li>
+<li><code>create</code></li>
 <li><code>get-partitioned-topic-metadata</code></li>
 <li><code>update-partitioned-topic</code></li>
 <li><code>list</code></li>
@@ -1692,6 +1693,11 @@
 <p>Usage</p>
 <pre><code class="hljs css language-bash">$ pulsar-admin topics delete-partitioned-topic {persistent|non-persistent}
 </code></pre>
+<h3><a class="anchor" aria-hidden="true" id="create-5"></a><a href="#create-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 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>Creates a non-partitioned topic. A non-partitioned topic must explicitly be created by the user if allowAutoTopicCreation or createIfMissing is disabled.</p>
+<p>Usage</p>
+<pre><code class="hljs css language-bash">$ pulsar-admin topics create {persistent|non-persistent}://tenant/namespace/topic
+</code></pre>
 <h3><a class="anchor" aria-hidden="true" id="get-partitioned-topic-metadata"></a><a href="#get-partitioned-topic-metadata" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 1 [...]
 <p>Get the partitioned topic metadata. If the topic is not created or is a non-partitioned topic, this will return an empty topic with zero partitions.</p>
 <p>Usage</p>
@@ -1939,7 +1945,7 @@
 <p>Usage</p>
 <pre><code class="hljs css language-bash">$ pulsar-admin tenants get tenant-name
 </code></pre>
-<h3><a class="anchor" aria-hidden="true" id="create-5"></a><a href="#create-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<h3><a class="anchor" aria-hidden="true" id="create-6"></a><a href="#create-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <p>Creates a new tenant</p>
 <p>Usage</p>
 <pre><code class="hljs css language-bash">$ pulsar-admin tenants create tenant-name options
@@ -2097,7 +2103,7 @@
 <tr><td><code>-t</code>, <code>--type</code></td><td>The type of the schema (avro or json)</td><td></td></tr>
 </tbody>
 </table>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/reference-cli-tools"><span class="arrow-prev">← </span><span>Pulsar CLI tools</span></a><a class="docs-next button" href="/docs/en/next/reference-configuration"><span>Pulsar configuration</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#broker-stats"><code>broker-stats</code></a><ul class="toc-headings"><li><a h [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/reference-cli-tools"><span class="arrow-prev">← </span><span>Pulsar CLI tools</span></a><a class="docs-next button" href="/docs/en/next/reference-configuration"><span>Pulsar configuration</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#broker-stats"><code>broker-stats</code></a><ul class="toc-headings"><li><a h [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/next/reference-cli-tools.html b/content/docs/en/next/reference-cli-tools.html
index f69b889..3c03cbd 100644
--- a/content/docs/en/next/reference-cli-tools.html
+++ b/content/docs/en/next/reference-cli-tools.html
@@ -310,7 +310,7 @@
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--auth-params</code></td><td>Authentication parameters, for example key1:val1,key2:val2</td><td></td></tr>
+<tr><td><code>--auth-params</code></td><td>Authentication parameters, whose format is determined by the implementation of method <code>configure</code> in authentication plugin class, for example &quot;key1:val1,key2:val2&quot; or &quot;{&quot;key1&quot;:&quot;val1&quot;,&quot;key2&quot;:&quot;val2&quot;}&quot;</td><td></td></tr>
 <tr><td><code>--auth-plugin</code></td><td>Authentication plugin class name</td><td></td></tr>
 <tr><td><code>--url</code></td><td>Broker URL to which to connect</td><td><a href="pulsar://localhost:6650/">pulsar://localhost:6650/</a></td></tr>
 </tbody>
diff --git a/content/docs/en/next/reference-cli-tools/index.html b/content/docs/en/next/reference-cli-tools/index.html
index f69b889..3c03cbd 100644
--- a/content/docs/en/next/reference-cli-tools/index.html
+++ b/content/docs/en/next/reference-cli-tools/index.html
@@ -310,7 +310,7 @@
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--auth-params</code></td><td>Authentication parameters, for example key1:val1,key2:val2</td><td></td></tr>
+<tr><td><code>--auth-params</code></td><td>Authentication parameters, whose format is determined by the implementation of method <code>configure</code> in authentication plugin class, for example &quot;key1:val1,key2:val2&quot; or &quot;{&quot;key1&quot;:&quot;val1&quot;,&quot;key2&quot;:&quot;val2&quot;}&quot;</td><td></td></tr>
 <tr><td><code>--auth-plugin</code></td><td>Authentication plugin class name</td><td></td></tr>
 <tr><td><code>--url</code></td><td>Broker URL to which to connect</td><td><a href="pulsar://localhost:6650/">pulsar://localhost:6650/</a></td></tr>
 </tbody>
diff --git a/content/docs/en/next/security-tls-authentication.html b/content/docs/en/next/security-tls-authentication.html
index 38aa201..05347dc 100644
--- a/content/docs/en/next/security-tls-authentication.html
+++ b/content/docs/en/next/security-tls-authentication.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/en/next/security-tls-authentication/index.html b/content/docs/en/next/security-tls-authentication/index.html
index 38aa201..05347dc 100644
--- a/content/docs/en/next/security-tls-authentication/index.html
+++ b/content/docs/en/next/security-tls-authentication/index.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/en/next/security-tls-transport.html b/content/docs/en/next/security-tls-transport.html
index 2dfa3a3..c87312f 100644
--- a/content/docs/en/next/security-tls-transport.html
+++ b/content/docs/en/next/security-tls-transport.html
@@ -210,7 +210,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/en/next/security-tls-transport/index.html b/content/docs/en/next/security-tls-transport/index.html
index 2dfa3a3..c87312f 100644
--- a/content/docs/en/next/security-tls-transport/index.html
+++ b/content/docs/en/next/security-tls-transport/index.html
@@ -210,7 +210,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/en/next/standalone-docker.html b/content/docs/en/next/standalone-docker.html
index f02a6f4..fc3ed3b 100644
--- a/content/docs/en/next/standalone-docker.html
+++ b/content/docs/en/next/standalone-docker.html
@@ -128,7 +128,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/en/next/standalone-docker/index.html b/content/docs/en/next/standalone-docker/index.html
index f02a6f4..fc3ed3b 100644
--- a/content/docs/en/next/standalone-docker/index.html
+++ b/content/docs/en/next/standalone-docker/index.html
@@ -128,7 +128,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/en/security-tls-authentication.html b/content/docs/en/security-tls-authentication.html
index 6b87a45..d55e0c6 100644
--- a/content/docs/en/security-tls-authentication.html
+++ b/content/docs/en/security-tls-authentication.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/en/security-tls-authentication/index.html b/content/docs/en/security-tls-authentication/index.html
index 6b87a45..d55e0c6 100644
--- a/content/docs/en/security-tls-authentication/index.html
+++ b/content/docs/en/security-tls-authentication/index.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/en/security-tls-transport.html b/content/docs/en/security-tls-transport.html
index a205cb9..972c739 100644
--- a/content/docs/en/security-tls-transport.html
+++ b/content/docs/en/security-tls-transport.html
@@ -210,7 +210,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/en/security-tls-transport/index.html b/content/docs/en/security-tls-transport/index.html
index a205cb9..972c739 100644
--- a/content/docs/en/security-tls-transport/index.html
+++ b/content/docs/en/security-tls-transport/index.html
@@ -210,7 +210,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/en/standalone-docker.html b/content/docs/en/standalone-docker.html
index 7c61e8e..735ca27 100644
--- a/content/docs/en/standalone-docker.html
+++ b/content/docs/en/standalone-docker.html
@@ -128,7 +128,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/en/standalone-docker/index.html b/content/docs/en/standalone-docker/index.html
index 7c61e8e..735ca27 100644
--- a/content/docs/en/standalone-docker/index.html
+++ b/content/docs/en/standalone-docker/index.html
@@ -128,7 +128,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/en/standalone.html b/content/docs/en/standalone.html
index b8812b5..96c3af5 100644
--- a/content/docs/en/standalone.html
+++ b/content/docs/en/standalone.html
@@ -232,6 +232,14 @@ you can use <code>apachepulsar/pulsar-all</code> image instead of <code>apachepu
 <h4><a class="anchor" aria-hidden="true" id="no-need-to-explicitly-create-new-topics"></a><a href="#no-need-to-explicitly-create-new-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  [...]
 <p>You may have noticed that we did not explicitly create the <code>my-topic</code> topic to which we sent the <code>hello-pulsar</code> message. If you attempt to write a message to a topic that does not yet exist, Pulsar will automatically create that topic for you.</p>
 </blockquote>
+<h2><a class="anchor" aria-hidden="true" id="using-cli-pulsar-clients"></a><a href="#using-cli-pulsar-clients" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
+<p>Pulsar provides a CLI tool called <a href="/docs/en/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> that enables you to do things like receive messages from a Pulsar topic in a running cluster. This command will receive a simple message saying <code>hello-pulsar</code> to the <code>my-topic</code> topic:</p>
+<pre><code class="hljs css language-bash">$ bin/pulsar-client consume my-topic -t Shared -s demo-sub -n 0
+</code></pre>
+<p>If the message has been successfully published to the topic as above, you should see a confirmation like this in the <code>pulsar-client</code> logs:</p>
+<pre><code class="hljs"><span class="hljs-literal">-</span><span class="hljs-literal">-</span><span class="hljs-literal">-</span><span class="hljs-literal">-</span><span class="hljs-literal">-</span> <span class="hljs-comment">got</span> <span class="hljs-comment">message</span> <span class="hljs-literal">-</span><span class="hljs-literal">-</span><span class="hljs-literal">-</span><span class="hljs-literal">-</span><span class="hljs-literal">-</span>
+<span class="hljs-comment">hello</span><span class="hljs-literal">-</span><span class="hljs-comment">pulsar</span>
+</code></pre>
 <h2><a class="anchor" aria-hidden="true" id="using-pulsar-clients-locally"></a><a href="#using-pulsar-clients-locally" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 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 currently offers client libraries for <a href="/docs/en/client-libraries-java">Java</a>,  <a href="/docs/en/client-libraries-go">Go</a>, <a href="/docs/en/client-libraries-python">Python</a> and <a href="/docs/en/client-libraries-cpp">C++</a>. If you're running a local standalone cluster, you can use one of these root URLs for interacting with your cluster:</p>
 <ul>
@@ -259,7 +267,7 @@ Result result = client.createProducer(<span class="hljs-string">"my-topic"</span
     <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
 }
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/pulsar-2.0"><span class="arrow-prev">← </span><span>Pulsar 2.0</span></a><a class="docs-next button" href="/docs/en/standalone-docker"><span>Pulsar in Docker</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#run-pulsar-standalone-manually">Run Pulsar Standalone Manually</a><ul class="toc-headings"><li><a href="#system [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/pulsar-2.0"><span class="arrow-prev">← </span><span>Pulsar 2.0</span></a><a class="docs-next button" href="/docs/en/standalone-docker"><span>Pulsar in Docker</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#run-pulsar-standalone-manually">Run Pulsar Standalone Manually</a><ul class="toc-headings"><li><a href="#system [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/standalone/index.html b/content/docs/en/standalone/index.html
index b8812b5..96c3af5 100644
--- a/content/docs/en/standalone/index.html
+++ b/content/docs/en/standalone/index.html
@@ -232,6 +232,14 @@ you can use <code>apachepulsar/pulsar-all</code> image instead of <code>apachepu
 <h4><a class="anchor" aria-hidden="true" id="no-need-to-explicitly-create-new-topics"></a><a href="#no-need-to-explicitly-create-new-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  [...]
 <p>You may have noticed that we did not explicitly create the <code>my-topic</code> topic to which we sent the <code>hello-pulsar</code> message. If you attempt to write a message to a topic that does not yet exist, Pulsar will automatically create that topic for you.</p>
 </blockquote>
+<h2><a class="anchor" aria-hidden="true" id="using-cli-pulsar-clients"></a><a href="#using-cli-pulsar-clients" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
+<p>Pulsar provides a CLI tool called <a href="/docs/en/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> that enables you to do things like receive messages from a Pulsar topic in a running cluster. This command will receive a simple message saying <code>hello-pulsar</code> to the <code>my-topic</code> topic:</p>
+<pre><code class="hljs css language-bash">$ bin/pulsar-client consume my-topic -t Shared -s demo-sub -n 0
+</code></pre>
+<p>If the message has been successfully published to the topic as above, you should see a confirmation like this in the <code>pulsar-client</code> logs:</p>
+<pre><code class="hljs"><span class="hljs-literal">-</span><span class="hljs-literal">-</span><span class="hljs-literal">-</span><span class="hljs-literal">-</span><span class="hljs-literal">-</span> <span class="hljs-comment">got</span> <span class="hljs-comment">message</span> <span class="hljs-literal">-</span><span class="hljs-literal">-</span><span class="hljs-literal">-</span><span class="hljs-literal">-</span><span class="hljs-literal">-</span>
+<span class="hljs-comment">hello</span><span class="hljs-literal">-</span><span class="hljs-comment">pulsar</span>
+</code></pre>
 <h2><a class="anchor" aria-hidden="true" id="using-pulsar-clients-locally"></a><a href="#using-pulsar-clients-locally" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 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 currently offers client libraries for <a href="/docs/en/client-libraries-java">Java</a>,  <a href="/docs/en/client-libraries-go">Go</a>, <a href="/docs/en/client-libraries-python">Python</a> and <a href="/docs/en/client-libraries-cpp">C++</a>. If you're running a local standalone cluster, you can use one of these root URLs for interacting with your cluster:</p>
 <ul>
@@ -259,7 +267,7 @@ Result result = client.createProducer(<span class="hljs-string">"my-topic"</span
     <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
 }
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/pulsar-2.0"><span class="arrow-prev">← </span><span>Pulsar 2.0</span></a><a class="docs-next button" href="/docs/en/standalone-docker"><span>Pulsar in Docker</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#run-pulsar-standalone-manually">Run Pulsar Standalone Manually</a><ul class="toc-headings"><li><a href="#system [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/pulsar-2.0"><span class="arrow-prev">← </span><span>Pulsar 2.0</span></a><a class="docs-next button" href="/docs/en/standalone-docker"><span>Pulsar in Docker</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#run-pulsar-standalone-manually">Run Pulsar Standalone Manually</a><ul class="toc-headings"><li><a href="#system [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/fr/2.1.0-incubating/client-libraries-python.html b/content/docs/fr/2.1.0-incubating/client-libraries-python.html
index b429f81..8a07bc2 100644
--- a/content/docs/fr/2.1.0-incubating/client-libraries-python.html
+++ b/content/docs/fr/2.1.0-incubating/client-libraries-python.html
@@ -115,7 +115,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -129,7 +129,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
diff --git a/content/docs/fr/2.1.0-incubating/client-libraries-python/index.html b/content/docs/fr/2.1.0-incubating/client-libraries-python/index.html
index b429f81..8a07bc2 100644
--- a/content/docs/fr/2.1.0-incubating/client-libraries-python/index.html
+++ b/content/docs/fr/2.1.0-incubating/client-libraries-python/index.html
@@ -115,7 +115,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -129,7 +129,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
diff --git a/content/docs/fr/2.1.0-incubating/client-libraries-websocket.html b/content/docs/fr/2.1.0-incubating/client-libraries-websocket.html
index 7279316..f0f209c 100644
--- a/content/docs/fr/2.1.0-incubating/client-libraries-websocket.html
+++ b/content/docs/fr/2.1.0-incubating/client-libraries-websocket.html
@@ -331,7 +331,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -350,7 +350,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/fr/2.1.0-incubating/client-libraries-websocket/index.html b/content/docs/fr/2.1.0-incubating/client-libraries-websocket/index.html
index 7279316..f0f209c 100644
--- a/content/docs/fr/2.1.0-incubating/client-libraries-websocket/index.html
+++ b/content/docs/fr/2.1.0-incubating/client-libraries-websocket/index.html
@@ -331,7 +331,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -350,7 +350,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/fr/2.1.0-incubating/functions-api.html b/content/docs/fr/2.1.0-incubating/functions-api.html
index 2972317..3e2197b 100644
--- a/content/docs/fr/2.1.0-incubating/functions-api.html
+++ b/content/docs/fr/2.1.0-incubating/functions-api.html
@@ -646,7 +646,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/fr/2.1.0-incubating/functions-api/index.html b/content/docs/fr/2.1.0-incubating/functions-api/index.html
index 2972317..3e2197b 100644
--- a/content/docs/fr/2.1.0-incubating/functions-api/index.html
+++ b/content/docs/fr/2.1.0-incubating/functions-api/index.html
@@ -646,7 +646,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/fr/2.1.0-incubating/reference-cli-tools.html b/content/docs/fr/2.1.0-incubating/reference-cli-tools.html
index 9c49c34..a6ad8f9 100644
--- a/content/docs/fr/2.1.0-incubating/reference-cli-tools.html
+++ b/content/docs/fr/2.1.0-incubating/reference-cli-tools.html
@@ -299,7 +299,7 @@ $ pulsar command
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--auth-params</code></td><td>Authentication parameters, for example key1:val1,key2:val2</td><td></td></tr>
+<tr><td><code>--auth-params</code></td><td>Authentication parameters, whose format is determined by the implementation of method <code>configure</code> in authentication plugin class, for example &quot;key1:val1,key2:val2&quot; or &quot;{&quot;key1&quot;:&quot;val1&quot;,&quot;key2&quot;:&quot;val2&quot;}&quot;</td><td></td></tr>
 <tr><td><code>--auth-plugin</code></td><td>Authentication plugin class name</td><td></td></tr>
 <tr><td><code>--url</code></td><td>Broker URL to which to connect</td><td><a href="pulsar://localhost:6650/">pulsar://localhost:6650/</a></td></tr>
 </tbody>
diff --git a/content/docs/fr/2.1.0-incubating/reference-cli-tools/index.html b/content/docs/fr/2.1.0-incubating/reference-cli-tools/index.html
index 9c49c34..a6ad8f9 100644
--- a/content/docs/fr/2.1.0-incubating/reference-cli-tools/index.html
+++ b/content/docs/fr/2.1.0-incubating/reference-cli-tools/index.html
@@ -299,7 +299,7 @@ $ pulsar command
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--auth-params</code></td><td>Authentication parameters, for example key1:val1,key2:val2</td><td></td></tr>
+<tr><td><code>--auth-params</code></td><td>Authentication parameters, whose format is determined by the implementation of method <code>configure</code> in authentication plugin class, for example &quot;key1:val1,key2:val2&quot; or &quot;{&quot;key1&quot;:&quot;val1&quot;,&quot;key2&quot;:&quot;val2&quot;}&quot;</td><td></td></tr>
 <tr><td><code>--auth-plugin</code></td><td>Authentication plugin class name</td><td></td></tr>
 <tr><td><code>--url</code></td><td>Broker URL to which to connect</td><td><a href="pulsar://localhost:6650/">pulsar://localhost:6650/</a></td></tr>
 </tbody>
diff --git a/content/docs/fr/2.1.0-incubating/security-tls-authentication.html b/content/docs/fr/2.1.0-incubating/security-tls-authentication.html
index 8137400..9c5c3a8 100644
--- a/content/docs/fr/2.1.0-incubating/security-tls-authentication.html
+++ b/content/docs/fr/2.1.0-incubating/security-tls-authentication.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/fr/2.1.0-incubating/security-tls-authentication/index.html b/content/docs/fr/2.1.0-incubating/security-tls-authentication/index.html
index 8137400..9c5c3a8 100644
--- a/content/docs/fr/2.1.0-incubating/security-tls-authentication/index.html
+++ b/content/docs/fr/2.1.0-incubating/security-tls-authentication/index.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/fr/2.1.0-incubating/security-tls-transport.html b/content/docs/fr/2.1.0-incubating/security-tls-transport.html
index 2c2fb56..f08348c 100644
--- a/content/docs/fr/2.1.0-incubating/security-tls-transport.html
+++ b/content/docs/fr/2.1.0-incubating/security-tls-transport.html
@@ -185,7 +185,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>)
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/fr/2.1.0-incubating/security-tls-transport/index.html b/content/docs/fr/2.1.0-incubating/security-tls-transport/index.html
index 2c2fb56..f08348c 100644
--- a/content/docs/fr/2.1.0-incubating/security-tls-transport/index.html
+++ b/content/docs/fr/2.1.0-incubating/security-tls-transport/index.html
@@ -185,7 +185,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>)
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/fr/2.1.0-incubating/standalone-docker.html b/content/docs/fr/2.1.0-incubating/standalone-docker.html
index 5b8cde3..c5eb853 100644
--- a/content/docs/fr/2.1.0-incubating/standalone-docker.html
+++ b/content/docs/fr/2.1.0-incubating/standalone-docker.html
@@ -115,7 +115,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/fr/2.1.0-incubating/standalone-docker/index.html b/content/docs/fr/2.1.0-incubating/standalone-docker/index.html
index 5b8cde3..c5eb853 100644
--- a/content/docs/fr/2.1.0-incubating/standalone-docker/index.html
+++ b/content/docs/fr/2.1.0-incubating/standalone-docker/index.html
@@ -115,7 +115,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/fr/2.1.1-incubating/client-libraries-python.html b/content/docs/fr/2.1.1-incubating/client-libraries-python.html
index 5f142f2..34e1770 100644
--- a/content/docs/fr/2.1.1-incubating/client-libraries-python.html
+++ b/content/docs/fr/2.1.1-incubating/client-libraries-python.html
@@ -116,7 +116,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -130,7 +130,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
diff --git a/content/docs/fr/2.1.1-incubating/client-libraries-python/index.html b/content/docs/fr/2.1.1-incubating/client-libraries-python/index.html
index 5f142f2..34e1770 100644
--- a/content/docs/fr/2.1.1-incubating/client-libraries-python/index.html
+++ b/content/docs/fr/2.1.1-incubating/client-libraries-python/index.html
@@ -116,7 +116,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -130,7 +130,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
diff --git a/content/docs/fr/2.1.1-incubating/client-libraries-websocket.html b/content/docs/fr/2.1.1-incubating/client-libraries-websocket.html
index a2e8c18..1a66956 100644
--- a/content/docs/fr/2.1.1-incubating/client-libraries-websocket.html
+++ b/content/docs/fr/2.1.1-incubating/client-libraries-websocket.html
@@ -331,7 +331,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -350,7 +350,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/fr/2.1.1-incubating/client-libraries-websocket/index.html b/content/docs/fr/2.1.1-incubating/client-libraries-websocket/index.html
index a2e8c18..1a66956 100644
--- a/content/docs/fr/2.1.1-incubating/client-libraries-websocket/index.html
+++ b/content/docs/fr/2.1.1-incubating/client-libraries-websocket/index.html
@@ -331,7 +331,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -350,7 +350,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/fr/2.1.1-incubating/functions-api.html b/content/docs/fr/2.1.1-incubating/functions-api.html
index cf864b7..33895a1 100644
--- a/content/docs/fr/2.1.1-incubating/functions-api.html
+++ b/content/docs/fr/2.1.1-incubating/functions-api.html
@@ -639,7 +639,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/fr/2.1.1-incubating/functions-api/index.html b/content/docs/fr/2.1.1-incubating/functions-api/index.html
index cf864b7..33895a1 100644
--- a/content/docs/fr/2.1.1-incubating/functions-api/index.html
+++ b/content/docs/fr/2.1.1-incubating/functions-api/index.html
@@ -639,7 +639,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/fr/2.1.1-incubating/reference-cli-tools.html b/content/docs/fr/2.1.1-incubating/reference-cli-tools.html
index 4ed3004..1f2c9de 100644
--- a/content/docs/fr/2.1.1-incubating/reference-cli-tools.html
+++ b/content/docs/fr/2.1.1-incubating/reference-cli-tools.html
@@ -299,7 +299,7 @@ $ pulsar command
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--auth-params</code></td><td>Authentication parameters, for example key1:val1,key2:val2</td><td></td></tr>
+<tr><td><code>--auth-params</code></td><td>Authentication parameters, whose format is determined by the implementation of method <code>configure</code> in authentication plugin class, for example &quot;key1:val1,key2:val2&quot; or &quot;{&quot;key1&quot;:&quot;val1&quot;,&quot;key2&quot;:&quot;val2&quot;}&quot;</td><td></td></tr>
 <tr><td><code>--auth-plugin</code></td><td>Authentication plugin class name</td><td></td></tr>
 <tr><td><code>--url</code></td><td>Broker URL to which to connect</td><td><a href="pulsar://localhost:6650/">pulsar://localhost:6650/</a></td></tr>
 </tbody>
diff --git a/content/docs/fr/2.1.1-incubating/reference-cli-tools/index.html b/content/docs/fr/2.1.1-incubating/reference-cli-tools/index.html
index 4ed3004..1f2c9de 100644
--- a/content/docs/fr/2.1.1-incubating/reference-cli-tools/index.html
+++ b/content/docs/fr/2.1.1-incubating/reference-cli-tools/index.html
@@ -299,7 +299,7 @@ $ pulsar command
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--auth-params</code></td><td>Authentication parameters, for example key1:val1,key2:val2</td><td></td></tr>
+<tr><td><code>--auth-params</code></td><td>Authentication parameters, whose format is determined by the implementation of method <code>configure</code> in authentication plugin class, for example &quot;key1:val1,key2:val2&quot; or &quot;{&quot;key1&quot;:&quot;val1&quot;,&quot;key2&quot;:&quot;val2&quot;}&quot;</td><td></td></tr>
 <tr><td><code>--auth-plugin</code></td><td>Authentication plugin class name</td><td></td></tr>
 <tr><td><code>--url</code></td><td>Broker URL to which to connect</td><td><a href="pulsar://localhost:6650/">pulsar://localhost:6650/</a></td></tr>
 </tbody>
diff --git a/content/docs/fr/2.1.1-incubating/security-tls-authentication.html b/content/docs/fr/2.1.1-incubating/security-tls-authentication.html
index 6d41b92..f3d3916 100644
--- a/content/docs/fr/2.1.1-incubating/security-tls-authentication.html
+++ b/content/docs/fr/2.1.1-incubating/security-tls-authentication.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/fr/2.1.1-incubating/security-tls-authentication/index.html b/content/docs/fr/2.1.1-incubating/security-tls-authentication/index.html
index 6d41b92..f3d3916 100644
--- a/content/docs/fr/2.1.1-incubating/security-tls-authentication/index.html
+++ b/content/docs/fr/2.1.1-incubating/security-tls-authentication/index.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/fr/2.1.1-incubating/security-tls-transport.html b/content/docs/fr/2.1.1-incubating/security-tls-transport.html
index f313457..a253f26 100644
--- a/content/docs/fr/2.1.1-incubating/security-tls-transport.html
+++ b/content/docs/fr/2.1.1-incubating/security-tls-transport.html
@@ -185,7 +185,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>)
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/fr/2.1.1-incubating/security-tls-transport/index.html b/content/docs/fr/2.1.1-incubating/security-tls-transport/index.html
index f313457..a253f26 100644
--- a/content/docs/fr/2.1.1-incubating/security-tls-transport/index.html
+++ b/content/docs/fr/2.1.1-incubating/security-tls-transport/index.html
@@ -185,7 +185,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>)
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/fr/2.1.1-incubating/standalone-docker.html b/content/docs/fr/2.1.1-incubating/standalone-docker.html
index fd0a994..a0c8bad 100644
--- a/content/docs/fr/2.1.1-incubating/standalone-docker.html
+++ b/content/docs/fr/2.1.1-incubating/standalone-docker.html
@@ -115,7 +115,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/fr/2.1.1-incubating/standalone-docker/index.html b/content/docs/fr/2.1.1-incubating/standalone-docker/index.html
index fd0a994..a0c8bad 100644
--- a/content/docs/fr/2.1.1-incubating/standalone-docker/index.html
+++ b/content/docs/fr/2.1.1-incubating/standalone-docker/index.html
@@ -115,7 +115,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/fr/2.2.0/client-libraries-python.html b/content/docs/fr/2.2.0/client-libraries-python.html
index 72db2b6..3564f4f 100644
--- a/content/docs/fr/2.2.0/client-libraries-python.html
+++ b/content/docs/fr/2.2.0/client-libraries-python.html
@@ -116,7 +116,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -130,7 +130,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
diff --git a/content/docs/fr/2.2.0/client-libraries-python/index.html b/content/docs/fr/2.2.0/client-libraries-python/index.html
index 72db2b6..3564f4f 100644
--- a/content/docs/fr/2.2.0/client-libraries-python/index.html
+++ b/content/docs/fr/2.2.0/client-libraries-python/index.html
@@ -116,7 +116,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -130,7 +130,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
diff --git a/content/docs/fr/2.2.0/client-libraries-websocket.html b/content/docs/fr/2.2.0/client-libraries-websocket.html
index 54df809..8361258 100644
--- a/content/docs/fr/2.2.0/client-libraries-websocket.html
+++ b/content/docs/fr/2.2.0/client-libraries-websocket.html
@@ -331,7 +331,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -350,7 +350,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/fr/2.2.0/client-libraries-websocket/index.html b/content/docs/fr/2.2.0/client-libraries-websocket/index.html
index 54df809..8361258 100644
--- a/content/docs/fr/2.2.0/client-libraries-websocket/index.html
+++ b/content/docs/fr/2.2.0/client-libraries-websocket/index.html
@@ -331,7 +331,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -350,7 +350,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/fr/2.2.0/functions-api.html b/content/docs/fr/2.2.0/functions-api.html
index 54c8b33..713176d 100644
--- a/content/docs/fr/2.2.0/functions-api.html
+++ b/content/docs/fr/2.2.0/functions-api.html
@@ -647,7 +647,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/fr/2.2.0/functions-api/index.html b/content/docs/fr/2.2.0/functions-api/index.html
index 54c8b33..713176d 100644
--- a/content/docs/fr/2.2.0/functions-api/index.html
+++ b/content/docs/fr/2.2.0/functions-api/index.html
@@ -647,7 +647,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/fr/2.2.0/reference-cli-tools.html b/content/docs/fr/2.2.0/reference-cli-tools.html
index 51cade5..5958a9f 100644
--- a/content/docs/fr/2.2.0/reference-cli-tools.html
+++ b/content/docs/fr/2.2.0/reference-cli-tools.html
@@ -299,7 +299,7 @@ $ pulsar command
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--auth-params</code></td><td>Authentication parameters, for example key1:val1,key2:val2</td><td></td></tr>
+<tr><td><code>--auth-params</code></td><td>Authentication parameters, whose format is determined by the implementation of method <code>configure</code> in authentication plugin class, for example &quot;key1:val1,key2:val2&quot; or &quot;{&quot;key1&quot;:&quot;val1&quot;,&quot;key2&quot;:&quot;val2&quot;}&quot;</td><td></td></tr>
 <tr><td><code>--auth-plugin</code></td><td>Authentication plugin class name</td><td></td></tr>
 <tr><td><code>--url</code></td><td>Broker URL to which to connect</td><td><a href="pulsar://localhost:6650/">pulsar://localhost:6650/</a></td></tr>
 </tbody>
diff --git a/content/docs/fr/2.2.0/reference-cli-tools/index.html b/content/docs/fr/2.2.0/reference-cli-tools/index.html
index 51cade5..5958a9f 100644
--- a/content/docs/fr/2.2.0/reference-cli-tools/index.html
+++ b/content/docs/fr/2.2.0/reference-cli-tools/index.html
@@ -299,7 +299,7 @@ $ pulsar command
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--auth-params</code></td><td>Authentication parameters, for example key1:val1,key2:val2</td><td></td></tr>
+<tr><td><code>--auth-params</code></td><td>Authentication parameters, whose format is determined by the implementation of method <code>configure</code> in authentication plugin class, for example &quot;key1:val1,key2:val2&quot; or &quot;{&quot;key1&quot;:&quot;val1&quot;,&quot;key2&quot;:&quot;val2&quot;}&quot;</td><td></td></tr>
 <tr><td><code>--auth-plugin</code></td><td>Authentication plugin class name</td><td></td></tr>
 <tr><td><code>--url</code></td><td>Broker URL to which to connect</td><td><a href="pulsar://localhost:6650/">pulsar://localhost:6650/</a></td></tr>
 </tbody>
diff --git a/content/docs/fr/2.2.0/security-tls-authentication.html b/content/docs/fr/2.2.0/security-tls-authentication.html
index 9ba1f63..c47ea2f 100644
--- a/content/docs/fr/2.2.0/security-tls-authentication.html
+++ b/content/docs/fr/2.2.0/security-tls-authentication.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/fr/2.2.0/security-tls-authentication/index.html b/content/docs/fr/2.2.0/security-tls-authentication/index.html
index 9ba1f63..c47ea2f 100644
--- a/content/docs/fr/2.2.0/security-tls-authentication/index.html
+++ b/content/docs/fr/2.2.0/security-tls-authentication/index.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/fr/2.2.0/security-tls-transport.html b/content/docs/fr/2.2.0/security-tls-transport.html
index fe6e127..b01e6cb 100644
--- a/content/docs/fr/2.2.0/security-tls-transport.html
+++ b/content/docs/fr/2.2.0/security-tls-transport.html
@@ -193,7 +193,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/fr/2.2.0/security-tls-transport/index.html b/content/docs/fr/2.2.0/security-tls-transport/index.html
index fe6e127..b01e6cb 100644
--- a/content/docs/fr/2.2.0/security-tls-transport/index.html
+++ b/content/docs/fr/2.2.0/security-tls-transport/index.html
@@ -193,7 +193,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/fr/2.2.0/standalone-docker.html b/content/docs/fr/2.2.0/standalone-docker.html
index a930ac6..c0d54d6 100644
--- a/content/docs/fr/2.2.0/standalone-docker.html
+++ b/content/docs/fr/2.2.0/standalone-docker.html
@@ -115,7 +115,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/fr/2.2.0/standalone-docker/index.html b/content/docs/fr/2.2.0/standalone-docker/index.html
index a930ac6..c0d54d6 100644
--- a/content/docs/fr/2.2.0/standalone-docker/index.html
+++ b/content/docs/fr/2.2.0/standalone-docker/index.html
@@ -115,7 +115,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/fr/2.2.1/client-libraries-python.html b/content/docs/fr/2.2.1/client-libraries-python.html
index 018c72c..080b279 100644
--- a/content/docs/fr/2.2.1/client-libraries-python.html
+++ b/content/docs/fr/2.2.1/client-libraries-python.html
@@ -116,7 +116,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -130,7 +130,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
diff --git a/content/docs/fr/2.2.1/client-libraries-python/index.html b/content/docs/fr/2.2.1/client-libraries-python/index.html
index 018c72c..080b279 100644
--- a/content/docs/fr/2.2.1/client-libraries-python/index.html
+++ b/content/docs/fr/2.2.1/client-libraries-python/index.html
@@ -116,7 +116,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -130,7 +130,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
diff --git a/content/docs/fr/2.2.1/client-libraries-websocket.html b/content/docs/fr/2.2.1/client-libraries-websocket.html
index 63e0a78..e22f4bc 100644
--- a/content/docs/fr/2.2.1/client-libraries-websocket.html
+++ b/content/docs/fr/2.2.1/client-libraries-websocket.html
@@ -355,7 +355,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -374,7 +374,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/fr/2.2.1/client-libraries-websocket/index.html b/content/docs/fr/2.2.1/client-libraries-websocket/index.html
index 63e0a78..e22f4bc 100644
--- a/content/docs/fr/2.2.1/client-libraries-websocket/index.html
+++ b/content/docs/fr/2.2.1/client-libraries-websocket/index.html
@@ -355,7 +355,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -374,7 +374,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/fr/2.2.1/functions-api.html b/content/docs/fr/2.2.1/functions-api.html
index 0906d85..75f664a 100644
--- a/content/docs/fr/2.2.1/functions-api.html
+++ b/content/docs/fr/2.2.1/functions-api.html
@@ -647,7 +647,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/fr/2.2.1/functions-api/index.html b/content/docs/fr/2.2.1/functions-api/index.html
index 0906d85..75f664a 100644
--- a/content/docs/fr/2.2.1/functions-api/index.html
+++ b/content/docs/fr/2.2.1/functions-api/index.html
@@ -647,7 +647,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/fr/2.2.1/reference-cli-tools.html b/content/docs/fr/2.2.1/reference-cli-tools.html
index 8fff6ae..4f730bf 100644
--- a/content/docs/fr/2.2.1/reference-cli-tools.html
+++ b/content/docs/fr/2.2.1/reference-cli-tools.html
@@ -299,7 +299,7 @@ $ pulsar command
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--auth-params</code></td><td>Authentication parameters, for example key1:val1,key2:val2</td><td></td></tr>
+<tr><td><code>--auth-params</code></td><td>Authentication parameters, whose format is determined by the implementation of method <code>configure</code> in authentication plugin class, for example &quot;key1:val1,key2:val2&quot; or &quot;{&quot;key1&quot;:&quot;val1&quot;,&quot;key2&quot;:&quot;val2&quot;}&quot;</td><td></td></tr>
 <tr><td><code>--auth-plugin</code></td><td>Authentication plugin class name</td><td></td></tr>
 <tr><td><code>--url</code></td><td>Broker URL to which to connect</td><td><a href="pulsar://localhost:6650/">pulsar://localhost:6650/</a></td></tr>
 </tbody>
diff --git a/content/docs/fr/2.2.1/reference-cli-tools/index.html b/content/docs/fr/2.2.1/reference-cli-tools/index.html
index 8fff6ae..4f730bf 100644
--- a/content/docs/fr/2.2.1/reference-cli-tools/index.html
+++ b/content/docs/fr/2.2.1/reference-cli-tools/index.html
@@ -299,7 +299,7 @@ $ pulsar command
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--auth-params</code></td><td>Authentication parameters, for example key1:val1,key2:val2</td><td></td></tr>
+<tr><td><code>--auth-params</code></td><td>Authentication parameters, whose format is determined by the implementation of method <code>configure</code> in authentication plugin class, for example &quot;key1:val1,key2:val2&quot; or &quot;{&quot;key1&quot;:&quot;val1&quot;,&quot;key2&quot;:&quot;val2&quot;}&quot;</td><td></td></tr>
 <tr><td><code>--auth-plugin</code></td><td>Authentication plugin class name</td><td></td></tr>
 <tr><td><code>--url</code></td><td>Broker URL to which to connect</td><td><a href="pulsar://localhost:6650/">pulsar://localhost:6650/</a></td></tr>
 </tbody>
diff --git a/content/docs/fr/2.2.1/security-tls-authentication.html b/content/docs/fr/2.2.1/security-tls-authentication.html
index ce5bbcd..33d0176 100644
--- a/content/docs/fr/2.2.1/security-tls-authentication.html
+++ b/content/docs/fr/2.2.1/security-tls-authentication.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/fr/2.2.1/security-tls-authentication/index.html b/content/docs/fr/2.2.1/security-tls-authentication/index.html
index ce5bbcd..33d0176 100644
--- a/content/docs/fr/2.2.1/security-tls-authentication/index.html
+++ b/content/docs/fr/2.2.1/security-tls-authentication/index.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/fr/2.2.1/security-tls-transport.html b/content/docs/fr/2.2.1/security-tls-transport.html
index facde5b..a71ce25 100644
--- a/content/docs/fr/2.2.1/security-tls-transport.html
+++ b/content/docs/fr/2.2.1/security-tls-transport.html
@@ -201,7 +201,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/fr/2.2.1/security-tls-transport/index.html b/content/docs/fr/2.2.1/security-tls-transport/index.html
index facde5b..a71ce25 100644
--- a/content/docs/fr/2.2.1/security-tls-transport/index.html
+++ b/content/docs/fr/2.2.1/security-tls-transport/index.html
@@ -201,7 +201,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/fr/2.2.1/standalone-docker.html b/content/docs/fr/2.2.1/standalone-docker.html
index 7f184f2..cea073e 100644
--- a/content/docs/fr/2.2.1/standalone-docker.html
+++ b/content/docs/fr/2.2.1/standalone-docker.html
@@ -115,7 +115,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/fr/2.2.1/standalone-docker/index.html b/content/docs/fr/2.2.1/standalone-docker/index.html
index 7f184f2..cea073e 100644
--- a/content/docs/fr/2.2.1/standalone-docker/index.html
+++ b/content/docs/fr/2.2.1/standalone-docker/index.html
@@ -115,7 +115,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/fr/client-libraries-python.html b/content/docs/fr/client-libraries-python.html
index fad874c..aff12ae 100644
--- a/content/docs/fr/client-libraries-python.html
+++ b/content/docs/fr/client-libraries-python.html
@@ -117,7 +117,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -131,7 +131,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
@@ -162,7 +162,7 @@ producer.send(Example(a=<span class="hljs-string">'Hello'</span>, b=<span class=
                   subscription_name=<span class="hljs-string">'my-subscription'</span>,
                   schema=AvroSchema(Example) )
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     ex = msg.value()
     print(<span class="hljs-string">"Received message a={} b={} c={}"</span>.format(ex.a, ex.b, ex.c))
diff --git a/content/docs/fr/client-libraries-python/index.html b/content/docs/fr/client-libraries-python/index.html
index fad874c..aff12ae 100644
--- a/content/docs/fr/client-libraries-python/index.html
+++ b/content/docs/fr/client-libraries-python/index.html
@@ -117,7 +117,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -131,7 +131,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
@@ -162,7 +162,7 @@ producer.send(Example(a=<span class="hljs-string">'Hello'</span>, b=<span class=
                   subscription_name=<span class="hljs-string">'my-subscription'</span>,
                   schema=AvroSchema(Example) )
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     ex = msg.value()
     print(<span class="hljs-string">"Received message a={} b={} c={}"</span>.format(ex.a, ex.b, ex.c))
diff --git a/content/docs/fr/client-libraries-websocket.html b/content/docs/fr/client-libraries-websocket.html
index 408c3ab..1916d93 100644
--- a/content/docs/fr/client-libraries-websocket.html
+++ b/content/docs/fr/client-libraries-websocket.html
@@ -355,7 +355,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -374,7 +374,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/fr/client-libraries-websocket/index.html b/content/docs/fr/client-libraries-websocket/index.html
index 408c3ab..1916d93 100644
--- a/content/docs/fr/client-libraries-websocket/index.html
+++ b/content/docs/fr/client-libraries-websocket/index.html
@@ -355,7 +355,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -374,7 +374,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/fr/functions-api.html b/content/docs/fr/functions-api.html
index 35e88f4..2e268d4 100644
--- a/content/docs/fr/functions-api.html
+++ b/content/docs/fr/functions-api.html
@@ -647,7 +647,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/fr/functions-api/index.html b/content/docs/fr/functions-api/index.html
index 35e88f4..2e268d4 100644
--- a/content/docs/fr/functions-api/index.html
+++ b/content/docs/fr/functions-api/index.html
@@ -647,7 +647,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/fr/io-cdc-canal.html b/content/docs/fr/io-cdc-canal.html
new file mode 100644
index 0000000..781cebd
--- /dev/null
+++ b/content/docs/fr/io-cdc-canal.html
@@ -0,0 +1,206 @@
+<!DOCTYPE html><html lang="fr"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>CDC Canal Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-configuration-options&quot; aria-hidden=&quot [...]
+"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="fr"/><meta property="og:title" content="CDC Canal Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-con [...]
+"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
+              (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+              (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+              m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+              })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+              ga('create', 'UA-102219959-1', 'auto');
+              ga('send', 'pageview');
+            </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div clas [...]
+        const languagesMenuItem = document.getElementById("languages-menu");
+        const languagesDropDown = document.getElementById("languages-dropdown");
+        languagesMenuItem.addEventListener("click", function(event) {
+          event.preventDefault();
+
+          if (languagesDropDown.className == "hide") {
+            languagesDropDown.className = "visible";
+          } else {
+            languagesDropDown.className = "hide";
+          }
+        });
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/fr" target="_blank" rel="noreferrer noopener">Transla [...]
+<p>The Configuration is mostly related to Canal task config.</p>
+<table>
+<thead>
+<tr><th>Name</th><th>Required</th><th>Default</th><th>Description</th></tr>
+</thead>
+<tbody>
+<tr><td><code>zkServers</code></td><td><code>false</code></td><td><code>127.0.0.1:2181</code></td><td><code>The address and port of the zookeeper . if canal server configured to cluster mode</code></td></tr>
+<tr><td><code>batchSize</code></td><td><code>true</code></td><td><code>5120</code></td><td><code>Take 5120 records from the canal server in batches</code></td></tr>
+<tr><td><code>username</code></td><td><code>false</code></td><td>``</td><td><code>Canal server account, not MySQL</code></td></tr>
+<tr><td><code>password</code></td><td><code>false</code></td><td>``</td><td><code>Canal server password, not MySQL</code></td></tr>
+<tr><td><code>cluster</code></td><td><code>false</code></td><td><code>false</code></td><td><code>Decide whether to open cluster mode based on canal server configuration, true: cluster mode, false: standalone mode</code></td></tr>
+<tr><td><code>singleHostname</code></td><td><code>false</code></td><td><code>127.0.0.1</code></td><td><code>The address of canal server</code></td></tr>
+<tr><td><code>singlePort</code></td><td><code>false</code></td><td><code>11111</code></td><td><code>The port of canal server</code></td></tr>
+</tbody>
+</table>
+<h3><a class="anchor" aria-hidden="true" id="configuration-example"></a><a href="#configuration-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 [...]
+<p>Here is a configuration Json example:</p>
+<pre><code class="hljs css language-$json { &quot;zkServers&quot;: &quot;127.0.0.1:2181&quot;, &quot;batchSize&quot;: &quot;5120&quot;, &quot;destination&quot;: &quot;example&quot;, &quot;username&quot;: &quot;&quot;, &quot;password&quot;: &quot;&quot;, &quot;cluster&quot;: false, &quot;singleHostname&quot;: &quot;127.0.0.1&quot;, &quot;singlePort&quot;: &quot;11111&quot;, }">
+    You could also find the yaml example <span class="hljs-keyword">in</span> this [<span class="hljs-keyword">file</span>](https:<span class="hljs-comment">//github.com/apache/pulsar/blob/master/pulsar-io/canal/src/main/resources/canal-mysql-source-config.yaml), which has similar content below:</span>
+    
+    ```<span class="hljs-variable">$yaml</span>
+    configs:
+        zkServers: <span class="hljs-string">"127.0.0.1:2181"</span>
+        batchSize: <span class="hljs-string">"5120"</span>
+        destination: <span class="hljs-string">"example"</span>
+        username: <span class="hljs-string">""</span>
+        password: <span class="hljs-string">""</span>
+        <span class="hljs-keyword">cluster</span>: false
+        singleHostname: <span class="hljs-string">"127.0.0.1"</span>
+        singlePort: <span class="hljs-string">"11111"</span>
+    
+
+### Usage example
+
+Here is a simple example to store MySQL change data using above example config.
+
+- Start a MySQL server
+
+```<span class="hljs-variable">$bash</span> docker pull mysql:5.7 docker <span class="hljs-keyword">run</span> -<span class="hljs-keyword">d</span> -it --<span class="hljs-keyword">rm</span> --name pulsar-mysql -p 3306:3306 -<span class="hljs-keyword">e</span> MYSQL_ROOT_PASSWORD=canal -<span class="hljs-keyword">e</span> MYSQL_USER=mysqluser -<span class="hljs-keyword">e</span> MYSQL_PASSWORD=mysqlpw mysql:5.7
+
+    - Modify configuration files mysqld.cnf
+    
+    
+
+[mysqld] pid-<span class="hljs-keyword">file</span> = /<span class="hljs-keyword">var</span>/<span class="hljs-keyword">run</span>/mysqld/mysqld.pid socket = /<span class="hljs-keyword">var</span>/<span class="hljs-keyword">run</span>/mysqld/mysqld.sock datadir = /<span class="hljs-keyword">var</span>/lib/mysql
+
+# <span class="hljs-keyword">log</span>-<span class="hljs-keyword">error</span> = /<span class="hljs-keyword">var</span>/<span class="hljs-keyword">log</span>/mysql/<span class="hljs-keyword">error</span>.<span class="hljs-built_in">log</span>
+
+# <span class="hljs-keyword">By</span> default we only accept connections from localhost
+
+# bind-address = 127.0.0.1
+
+# Disabling symbolic-links is recommended to prevent assorted security risks
+
+symbolic-links=0 <span class="hljs-keyword">log</span>-bin=mysql-bin binlog-<span class="hljs-keyword">format</span>=ROW server_id=1
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- <span class="hljs-keyword">Copy</span> <span class="hljs-keyword">file</span> to mysql server from <span class="hljs-keyword">local</span> and restart mysql server
+    ```<span class="hljs-variable">$bash</span>
+    docker cp mysqld.cnf pulsar-mysql:/etc/mysql/mysql.<span class="hljs-keyword">conf</span>.<span class="hljs-keyword">d</span>/
+    docker restart pulsar-mysql
+    
+
+- Create <span class="hljs-keyword">test</span> database <span class="hljs-keyword">in</span> mysql server ```<span class="hljs-variable">$bash</span> docker exec -it pulsar-mysql /bin/bash mysql -<span class="hljs-keyword">h</span> 127.0.0.1 -uroot -pcanal -<span class="hljs-keyword">e</span> 'create database <span class="hljs-keyword">test</span>;'
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- Start canal server and connect mysql server
+    
+    
+
+docker pull canal/canal-server:v1.1.2 docker <span class="hljs-keyword">run</span> -<span class="hljs-keyword">d</span> -it --link pulsar-mysql -<span class="hljs-keyword">e</span> canal.auto.scan=false -<span class="hljs-keyword">e</span> canal.destinations=<span class="hljs-keyword">test</span> -<span class="hljs-keyword">e</span> canal.instance.master.address=pulsar-mysql:3306 -<span class="hljs-keyword">e</span> canal.instance.dbUsername=root -<span class="hljs-keyword">e</span> cana [...]
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- Start pulsar standalone
+    
+    ```<span class="hljs-variable">$bash</span>
+    docker pull apachepulsar/pulsar:2.3.0
+    docker <span class="hljs-keyword">run</span> -<span class="hljs-keyword">d</span> -it --link pulsar-canal-server -p 6650:6650 -p 8080:8080 -v <span class="hljs-variable">$PWD</span>/data:/pulsar/data --name pulsar-standalone apachepulsar/pulsar:2.3.0 bin/pulsar standalone
+    
+
+- Start pulsar-io <span class="hljs-keyword">in</span> standalone
+
+- Config <span class="hljs-keyword">file</span> canal-mysql-source-config.yaml
+
+```<span class="hljs-variable">$yaml</span> configs: zkServers: <span class="hljs-string">""</span> batchSize: <span class="hljs-string">"5120"</span> destination: <span class="hljs-string">"test"</span> username: <span class="hljs-string">""</span> password: <span class="hljs-string">""</span> <span class="hljs-keyword">cluster</span>: false singleHostname: <span class="hljs-string">"pulsar-canal-server"</span> singlePort: <span class="hljs-string">"11111"</span>
+
+    - Consumer <span class="hljs-keyword">file</span> pulsar-client.py <span class="hljs-keyword">for</span> <span class="hljs-keyword">test</span>
+    
+
+import pulsar
+
+client = pulsar.Client('pulsar:<span class="hljs-comment">//localhost:6650') consumer = client.subscribe('my-topic', subscription_name='my-sub')</span>
+
+<span class="hljs-keyword">while</span> True: msg = consumer.receive() <span class="hljs-keyword">print</span>(<span class="hljs-string">"Received message: '%s'"</span> % msg.data()) consumer.acknowledge(msg)
+
+client.<span class="hljs-keyword">close</span>()
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- <span class="hljs-keyword">Copy</span> config <span class="hljs-keyword">file</span> and <span class="hljs-keyword">test</span> <span class="hljs-keyword">file</span> to pulsar server
+    
+    ```<span class="hljs-variable">$bash</span>
+    docker cp canal-mysql-source-config.yaml pulsar-standalone:/pulsar/<span class="hljs-keyword">conf</span>/
+    docker cp pulsar-client.py pulsar-standalone:/pulsar/
+    
+
+- Download canal connector and start canal connector ```<span class="hljs-variable">$bash</span> docker exec -it pulsar-standalone /bin/bash wget http:<span class="hljs-comment">//apache.01link.hk/pulsar/pulsar-2.3.0/connectors/pulsar-io-canal-2.3.0.nar -P connectors ./bin/pulsar-admin source localrun --archive ./connectors/pulsar-io-canal-2.3.0.nar --classname org.apache.pulsar.io.canal.CanalStringSource --tenant public --namespace default --name canal --destination-topic-name my-topic  [...]
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- Consumption data 
+    
+    ```<span class="hljs-variable">$bash</span>
+    docker exec -it pulsar-standalone /bin/bash
+    python pulsar-client.py
+    
+
+- <span class="hljs-keyword">Open</span> another <span class="hljs-keyword">window</span> <span class="hljs-keyword">for</span> login mysql server
+
+```<span class="hljs-variable">$bash</span> docker exec -it pulsar-mysql /bin/bash mysql -<span class="hljs-keyword">h</span> 127.0.0.1 -uroot -pcanal
+
+    - Create <span class="hljs-keyword">table</span> and insert, delete, <span class="hljs-keyword">update</span> data <span class="hljs-keyword">in</span> mysql server
+    
+
+mysql&gt; <span class="hljs-keyword">use</span> <span class="hljs-keyword">test</span>; mysql&gt; show tables; mysql&gt; CREATE <span class="hljs-keyword">TABLE</span> <span class="hljs-keyword">IF</span> NOT EXISTS `test_table`(`test_id` INT UNSIGNED AUTO_INCREMENT,`test_title` VARCHAR(100) NOT NULL, `test_author` VARCHAR(40) NOT NULL, `test_date` DATE,PRIMARY KEY ( `test_id` ))ENGINE=InnoDB DEFAULT CHARSET=utf8; mysql&gt; INSERT INTO test_table (test_title, test_author, test_date) VALU [...]
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apache Software Foundation.</section><span><script>
+      const community = document.querySelector("a[href='#community']").parentNode;
+      const communityMenu =
+        '<li>' +
+        '<a id="community-menu" href="#">Community <span style="font-size: 0.75em">&nbsp;▼</span></a>' +
+        '<div id="community-dropdown" class="hide">' +
+          '<ul id="community-dropdown-items">' +
+            '<li><a href="/fr/contact">Contact</a></li>' +
+            '<li><a href="/fr/contributing">Contributing</a></li>' +
+            '<li><a href="/fr/events">Events</a></li>' +
+            '<li><a href="https://twitter.com/Apache_Pulsar" target="_blank">Twitter &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/wiki" target="_blank">Wiki &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/issues" target="_blank">Issue tracking &#x2750</a></li>' +
+            '<li>&nbsp;</li>' +
+            '<li><a href="/fr/resources">Resources</a></li>' +
+            '<li><a href="/fr/team">Team</a></li>' +
+          '</ul>' +
+        '</div>' +
+        '</li>';
+
+      community.innerHTML = communityMenu;
+
+      const communityMenuItem = document.getElementById("community-menu");
+      const communityDropDown = document.getElementById("community-dropdown");
+      communityMenuItem.addEventListener("click", function(event) {
+        event.preventDefault();
+
+        if (communityDropDown.className == 'hide') {
+          communityDropDown.className = 'visible';
+        } else {
+          communityDropDown.className = 'hide';
+        }
+      });
+    </script></span><span><script src="/js/pjax-api.min.js"></script><script>window.navfoo = new Pjax({
+            areas: [
+              // try to use the first query.
+              '.mainContainer, .docsNavContainer .toc .navWrapper, .onPageNav',
+              // fallback
+              'body'
+            ],
+            link: '.docsNavContainer:not(.docsSliderActive) a',
+            update: {
+              script: false,
+            }
+          });
+        </script></span></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</scri [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: 'd226a455cecdd4bc18a554c1b47e5b52',
+                indexName: 'apache_pulsar',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:fr","version:2.3.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/fr/io-cdc-canal/index.html b/content/docs/fr/io-cdc-canal/index.html
new file mode 100644
index 0000000..781cebd
--- /dev/null
+++ b/content/docs/fr/io-cdc-canal/index.html
@@ -0,0 +1,206 @@
+<!DOCTYPE html><html lang="fr"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>CDC Canal Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-configuration-options&quot; aria-hidden=&quot [...]
+"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="fr"/><meta property="og:title" content="CDC Canal Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-con [...]
+"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
+              (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+              (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+              m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+              })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+              ga('create', 'UA-102219959-1', 'auto');
+              ga('send', 'pageview');
+            </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div clas [...]
+        const languagesMenuItem = document.getElementById("languages-menu");
+        const languagesDropDown = document.getElementById("languages-dropdown");
+        languagesMenuItem.addEventListener("click", function(event) {
+          event.preventDefault();
+
+          if (languagesDropDown.className == "hide") {
+            languagesDropDown.className = "visible";
+          } else {
+            languagesDropDown.className = "hide";
+          }
+        });
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/fr" target="_blank" rel="noreferrer noopener">Transla [...]
+<p>The Configuration is mostly related to Canal task config.</p>
+<table>
+<thead>
+<tr><th>Name</th><th>Required</th><th>Default</th><th>Description</th></tr>
+</thead>
+<tbody>
+<tr><td><code>zkServers</code></td><td><code>false</code></td><td><code>127.0.0.1:2181</code></td><td><code>The address and port of the zookeeper . if canal server configured to cluster mode</code></td></tr>
+<tr><td><code>batchSize</code></td><td><code>true</code></td><td><code>5120</code></td><td><code>Take 5120 records from the canal server in batches</code></td></tr>
+<tr><td><code>username</code></td><td><code>false</code></td><td>``</td><td><code>Canal server account, not MySQL</code></td></tr>
+<tr><td><code>password</code></td><td><code>false</code></td><td>``</td><td><code>Canal server password, not MySQL</code></td></tr>
+<tr><td><code>cluster</code></td><td><code>false</code></td><td><code>false</code></td><td><code>Decide whether to open cluster mode based on canal server configuration, true: cluster mode, false: standalone mode</code></td></tr>
+<tr><td><code>singleHostname</code></td><td><code>false</code></td><td><code>127.0.0.1</code></td><td><code>The address of canal server</code></td></tr>
+<tr><td><code>singlePort</code></td><td><code>false</code></td><td><code>11111</code></td><td><code>The port of canal server</code></td></tr>
+</tbody>
+</table>
+<h3><a class="anchor" aria-hidden="true" id="configuration-example"></a><a href="#configuration-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 [...]
+<p>Here is a configuration Json example:</p>
+<pre><code class="hljs css language-$json { &quot;zkServers&quot;: &quot;127.0.0.1:2181&quot;, &quot;batchSize&quot;: &quot;5120&quot;, &quot;destination&quot;: &quot;example&quot;, &quot;username&quot;: &quot;&quot;, &quot;password&quot;: &quot;&quot;, &quot;cluster&quot;: false, &quot;singleHostname&quot;: &quot;127.0.0.1&quot;, &quot;singlePort&quot;: &quot;11111&quot;, }">
+    You could also find the yaml example <span class="hljs-keyword">in</span> this [<span class="hljs-keyword">file</span>](https:<span class="hljs-comment">//github.com/apache/pulsar/blob/master/pulsar-io/canal/src/main/resources/canal-mysql-source-config.yaml), which has similar content below:</span>
+    
+    ```<span class="hljs-variable">$yaml</span>
+    configs:
+        zkServers: <span class="hljs-string">"127.0.0.1:2181"</span>
+        batchSize: <span class="hljs-string">"5120"</span>
+        destination: <span class="hljs-string">"example"</span>
+        username: <span class="hljs-string">""</span>
+        password: <span class="hljs-string">""</span>
+        <span class="hljs-keyword">cluster</span>: false
+        singleHostname: <span class="hljs-string">"127.0.0.1"</span>
+        singlePort: <span class="hljs-string">"11111"</span>
+    
+
+### Usage example
+
+Here is a simple example to store MySQL change data using above example config.
+
+- Start a MySQL server
+
+```<span class="hljs-variable">$bash</span> docker pull mysql:5.7 docker <span class="hljs-keyword">run</span> -<span class="hljs-keyword">d</span> -it --<span class="hljs-keyword">rm</span> --name pulsar-mysql -p 3306:3306 -<span class="hljs-keyword">e</span> MYSQL_ROOT_PASSWORD=canal -<span class="hljs-keyword">e</span> MYSQL_USER=mysqluser -<span class="hljs-keyword">e</span> MYSQL_PASSWORD=mysqlpw mysql:5.7
+
+    - Modify configuration files mysqld.cnf
+    
+    
+
+[mysqld] pid-<span class="hljs-keyword">file</span> = /<span class="hljs-keyword">var</span>/<span class="hljs-keyword">run</span>/mysqld/mysqld.pid socket = /<span class="hljs-keyword">var</span>/<span class="hljs-keyword">run</span>/mysqld/mysqld.sock datadir = /<span class="hljs-keyword">var</span>/lib/mysql
+
+# <span class="hljs-keyword">log</span>-<span class="hljs-keyword">error</span> = /<span class="hljs-keyword">var</span>/<span class="hljs-keyword">log</span>/mysql/<span class="hljs-keyword">error</span>.<span class="hljs-built_in">log</span>
+
+# <span class="hljs-keyword">By</span> default we only accept connections from localhost
+
+# bind-address = 127.0.0.1
+
+# Disabling symbolic-links is recommended to prevent assorted security risks
+
+symbolic-links=0 <span class="hljs-keyword">log</span>-bin=mysql-bin binlog-<span class="hljs-keyword">format</span>=ROW server_id=1
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- <span class="hljs-keyword">Copy</span> <span class="hljs-keyword">file</span> to mysql server from <span class="hljs-keyword">local</span> and restart mysql server
+    ```<span class="hljs-variable">$bash</span>
+    docker cp mysqld.cnf pulsar-mysql:/etc/mysql/mysql.<span class="hljs-keyword">conf</span>.<span class="hljs-keyword">d</span>/
+    docker restart pulsar-mysql
+    
+
+- Create <span class="hljs-keyword">test</span> database <span class="hljs-keyword">in</span> mysql server ```<span class="hljs-variable">$bash</span> docker exec -it pulsar-mysql /bin/bash mysql -<span class="hljs-keyword">h</span> 127.0.0.1 -uroot -pcanal -<span class="hljs-keyword">e</span> 'create database <span class="hljs-keyword">test</span>;'
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- Start canal server and connect mysql server
+    
+    
+
+docker pull canal/canal-server:v1.1.2 docker <span class="hljs-keyword">run</span> -<span class="hljs-keyword">d</span> -it --link pulsar-mysql -<span class="hljs-keyword">e</span> canal.auto.scan=false -<span class="hljs-keyword">e</span> canal.destinations=<span class="hljs-keyword">test</span> -<span class="hljs-keyword">e</span> canal.instance.master.address=pulsar-mysql:3306 -<span class="hljs-keyword">e</span> canal.instance.dbUsername=root -<span class="hljs-keyword">e</span> cana [...]
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- Start pulsar standalone
+    
+    ```<span class="hljs-variable">$bash</span>
+    docker pull apachepulsar/pulsar:2.3.0
+    docker <span class="hljs-keyword">run</span> -<span class="hljs-keyword">d</span> -it --link pulsar-canal-server -p 6650:6650 -p 8080:8080 -v <span class="hljs-variable">$PWD</span>/data:/pulsar/data --name pulsar-standalone apachepulsar/pulsar:2.3.0 bin/pulsar standalone
+    
+
+- Start pulsar-io <span class="hljs-keyword">in</span> standalone
+
+- Config <span class="hljs-keyword">file</span> canal-mysql-source-config.yaml
+
+```<span class="hljs-variable">$yaml</span> configs: zkServers: <span class="hljs-string">""</span> batchSize: <span class="hljs-string">"5120"</span> destination: <span class="hljs-string">"test"</span> username: <span class="hljs-string">""</span> password: <span class="hljs-string">""</span> <span class="hljs-keyword">cluster</span>: false singleHostname: <span class="hljs-string">"pulsar-canal-server"</span> singlePort: <span class="hljs-string">"11111"</span>
+
+    - Consumer <span class="hljs-keyword">file</span> pulsar-client.py <span class="hljs-keyword">for</span> <span class="hljs-keyword">test</span>
+    
+
+import pulsar
+
+client = pulsar.Client('pulsar:<span class="hljs-comment">//localhost:6650') consumer = client.subscribe('my-topic', subscription_name='my-sub')</span>
+
+<span class="hljs-keyword">while</span> True: msg = consumer.receive() <span class="hljs-keyword">print</span>(<span class="hljs-string">"Received message: '%s'"</span> % msg.data()) consumer.acknowledge(msg)
+
+client.<span class="hljs-keyword">close</span>()
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- <span class="hljs-keyword">Copy</span> config <span class="hljs-keyword">file</span> and <span class="hljs-keyword">test</span> <span class="hljs-keyword">file</span> to pulsar server
+    
+    ```<span class="hljs-variable">$bash</span>
+    docker cp canal-mysql-source-config.yaml pulsar-standalone:/pulsar/<span class="hljs-keyword">conf</span>/
+    docker cp pulsar-client.py pulsar-standalone:/pulsar/
+    
+
+- Download canal connector and start canal connector ```<span class="hljs-variable">$bash</span> docker exec -it pulsar-standalone /bin/bash wget http:<span class="hljs-comment">//apache.01link.hk/pulsar/pulsar-2.3.0/connectors/pulsar-io-canal-2.3.0.nar -P connectors ./bin/pulsar-admin source localrun --archive ./connectors/pulsar-io-canal-2.3.0.nar --classname org.apache.pulsar.io.canal.CanalStringSource --tenant public --namespace default --name canal --destination-topic-name my-topic  [...]
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- Consumption data 
+    
+    ```<span class="hljs-variable">$bash</span>
+    docker exec -it pulsar-standalone /bin/bash
+    python pulsar-client.py
+    
+
+- <span class="hljs-keyword">Open</span> another <span class="hljs-keyword">window</span> <span class="hljs-keyword">for</span> login mysql server
+
+```<span class="hljs-variable">$bash</span> docker exec -it pulsar-mysql /bin/bash mysql -<span class="hljs-keyword">h</span> 127.0.0.1 -uroot -pcanal
+
+    - Create <span class="hljs-keyword">table</span> and insert, delete, <span class="hljs-keyword">update</span> data <span class="hljs-keyword">in</span> mysql server
+    
+
+mysql&gt; <span class="hljs-keyword">use</span> <span class="hljs-keyword">test</span>; mysql&gt; show tables; mysql&gt; CREATE <span class="hljs-keyword">TABLE</span> <span class="hljs-keyword">IF</span> NOT EXISTS `test_table`(`test_id` INT UNSIGNED AUTO_INCREMENT,`test_title` VARCHAR(100) NOT NULL, `test_author` VARCHAR(40) NOT NULL, `test_date` DATE,PRIMARY KEY ( `test_id` ))ENGINE=InnoDB DEFAULT CHARSET=utf8; mysql&gt; INSERT INTO test_table (test_title, test_author, test_date) VALU [...]
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apache Software Foundation.</section><span><script>
+      const community = document.querySelector("a[href='#community']").parentNode;
+      const communityMenu =
+        '<li>' +
+        '<a id="community-menu" href="#">Community <span style="font-size: 0.75em">&nbsp;▼</span></a>' +
+        '<div id="community-dropdown" class="hide">' +
+          '<ul id="community-dropdown-items">' +
+            '<li><a href="/fr/contact">Contact</a></li>' +
+            '<li><a href="/fr/contributing">Contributing</a></li>' +
+            '<li><a href="/fr/events">Events</a></li>' +
+            '<li><a href="https://twitter.com/Apache_Pulsar" target="_blank">Twitter &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/wiki" target="_blank">Wiki &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/issues" target="_blank">Issue tracking &#x2750</a></li>' +
+            '<li>&nbsp;</li>' +
+            '<li><a href="/fr/resources">Resources</a></li>' +
+            '<li><a href="/fr/team">Team</a></li>' +
+          '</ul>' +
+        '</div>' +
+        '</li>';
+
+      community.innerHTML = communityMenu;
+
+      const communityMenuItem = document.getElementById("community-menu");
+      const communityDropDown = document.getElementById("community-dropdown");
+      communityMenuItem.addEventListener("click", function(event) {
+        event.preventDefault();
+
+        if (communityDropDown.className == 'hide') {
+          communityDropDown.className = 'visible';
+        } else {
+          communityDropDown.className = 'hide';
+        }
+      });
+    </script></span><span><script src="/js/pjax-api.min.js"></script><script>window.navfoo = new Pjax({
+            areas: [
+              // try to use the first query.
+              '.mainContainer, .docsNavContainer .toc .navWrapper, .onPageNav',
+              // fallback
+              'body'
+            ],
+            link: '.docsNavContainer:not(.docsSliderActive) a',
+            update: {
+              script: false,
+            }
+          });
+        </script></span></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</scri [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: 'd226a455cecdd4bc18a554c1b47e5b52',
+                indexName: 'apache_pulsar',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:fr","version:2.3.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/fr/io-cdc-debezium.html b/content/docs/fr/io-cdc-debezium.html
new file mode 100644
index 0000000..56dc73c
--- /dev/null
+++ b/content/docs/fr/io-cdc-debezium.html
@@ -0,0 +1,184 @@
+<!DOCTYPE html><html lang="fr"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>CDC Debezium Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-configuration-options&quot; aria-hidden=&q [...]
+"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="fr"/><meta property="og:title" content="CDC Debezium Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source- [...]
+"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
+              (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+              (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+              m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+              })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+              ga('create', 'UA-102219959-1', 'auto');
+              ga('send', 'pageview');
+            </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div clas [...]
+        const languagesMenuItem = document.getElementById("languages-menu");
+        const languagesDropDown = document.getElementById("languages-dropdown");
+        languagesMenuItem.addEventListener("click", function(event) {
+          event.preventDefault();
+
+          if (languagesDropDown.className == "hide") {
+            languagesDropDown.className = "visible";
+          } else {
+            languagesDropDown.className = "hide";
+          }
+        });
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/fr" target="_blank" rel="noreferrer noopener">Transla [...]
+<p>The Configuration is mostly related to Debezium task config, besides this we should provides the service URL of Pulsar cluster, and topic names that used to store offset and history.</p>
+<table>
+<thead>
+<tr><th>Name</th><th>Required</th><th>Default</th><th>Description</th></tr>
+</thead>
+<tbody>
+<tr><td><code>task.class</code></td><td><code>true</code></td><td><code>null</code></td><td>A source task class that implemented in Debezium.</td></tr>
+<tr><td><code>database.hostname</code></td><td><code>true</code></td><td><code>null</code></td><td>The address of the Database server.</td></tr>
+<tr><td><code>database.port</code></td><td><code>true</code></td><td><code>null</code></td><td>The port number of the Database server..</td></tr>
+<tr><td><code>database.user</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the Database user that has the required privileges.</td></tr>
+<tr><td><code>database.password</code></td><td><code>true</code></td><td><code>null</code></td><td>The password for the Database user that has the required privileges.</td></tr>
+<tr><td><code>database.server.id</code></td><td><code>true</code></td><td><code>null</code></td><td>The connector’s identifier that must be unique within the Database cluster and similar to Database’s server-id configuration property.</td></tr>
+<tr><td><code>database.server.name</code></td><td><code>true</code></td><td><code>null</code></td><td>The logical name of the Database server/cluster, which forms a namespace and is used in all the names of the Kafka topics to which the connector writes, the Kafka Connect schema names, and the namespaces of the corresponding Avro schema when the Avro Connector is used.</td></tr>
+<tr><td><code>database.whitelist</code></td><td><code>false</code></td><td><code>null</code></td><td>A list of all databases hosted by this server that this connector will monitor. This is optional, and there are other properties for listing the databases and tables to include or exclude from monitoring.</td></tr>
+<tr><td><code>key.converter</code></td><td><code>true</code></td><td><code>null</code></td><td>The converter provided by Kafka Connect to convert record key.</td></tr>
+<tr><td><code>value.converter</code></td><td><code>true</code></td><td><code>null</code></td><td>The converter provided by Kafka Connect to convert record value.</td></tr>
+<tr><td><code>database.history</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the database history class name.</td></tr>
+<tr><td><code>database.history.pulsar.topic</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the database history topic where the connector will write and recover DDL statements. This topic is for internal use only and should not be used by consumers.</td></tr>
+<tr><td><code>database.history.pulsar.service.url</code></td><td><code>true</code></td><td><code>null</code></td><td>Pulsar cluster service url for history topic.</td></tr>
+<tr><td><code>pulsar.service.url</code></td><td><code>true</code></td><td><code>null</code></td><td>Pulsar cluster service url.</td></tr>
+<tr><td><code>offset.storage.topic</code></td><td><code>true</code></td><td><code>null</code></td><td>Record the last committed offsets that the connector successfully completed.</td></tr>
+</tbody>
+</table>
+<h3><a class="anchor" aria-hidden="true" id="configuration-example"></a><a href="#configuration-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 [...]
+<p>Here is a configuration Json example:</p>
+<pre><code class="hljs css language-$json { &quot;tenant&quot;: &quot;public&quot;, &quot;namespace&quot;: &quot;default&quot;, &quot;name&quot;: &quot;debezium-kafka-source&quot;, &quot;className&quot;: &quot;org.apache.pulsar.io.kafka.connect.KafkaConnectSource&quot; , &quot;topicName&quot;: &quot;kafka-connect-topic&quot;, &quot;configs&quot;: { &quot;task.class&quot;: &quot;io.debezium.connector.mysql.MySqlConnectorTask&quot;, &quot;database.hostname&quot;: &quot;localhost&quot;, &qu [...]
+    &lt;<span class="hljs-keyword">br</span> /&gt;You could also find the yaml example <span class="hljs-keyword">in</span> this [<span class="hljs-keyword">file</span>](https:<span class="hljs-comment">//github.com/apache/pulsar/blob/master/pulsar-io/kafka-connect-adaptor/src/main/resources/debezium-mysql-source-config.yaml), which has similar content below:</span>
+    
+    ```<span class="hljs-variable">$yaml</span>
+    tenant: <span class="hljs-string">"public"</span>
+    namespace: <span class="hljs-string">"default"</span>
+    name: <span class="hljs-string">"debezium-kafka-source"</span>
+    topicName: <span class="hljs-string">"kafka-connect-topic"</span>
+    archive: <span class="hljs-string">"connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar"</span>
+    
+    ##autoAck: true
+    parallelism: 1
+    
+    configs:
+      ## sourceTask
+      task.<span class="hljs-keyword">class</span>: <span class="hljs-string">"io.debezium.connector.mysql.MySqlConnectorTask"</span>
+    
+      ## config <span class="hljs-keyword">for</span> mysql, docker image: debezium/example-mysql:0.8
+      database.hostname: <span class="hljs-string">"localhost"</span>
+      database.port: <span class="hljs-string">"3306"</span>
+      database.user: <span class="hljs-string">"debezium"</span>
+      database.password: <span class="hljs-string">"dbz"</span>
+      database.server.id: <span class="hljs-string">"184054"</span>
+      database.server.name: <span class="hljs-string">"dbserver1"</span>
+      database.whitelist: <span class="hljs-string">"inventory"</span>
+    
+      database.history: <span class="hljs-string">"org.apache.pulsar.io.debezium.PulsarDatabaseHistory"</span>
+      database.history.pulsar.topic: <span class="hljs-string">"history-topic"</span>
+      database.history.pulsar.service.url: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>
+      ## KEY_CONVERTER_CLASS_CONFIG, VALUE_CONVERTER_CLASS_CONFIG
+      key.converter: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>
+      value.converter: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>
+      ## PULSAR_SERVICE_URL_CONFIG
+      pulsar.service.url: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>
+      ## OFFSET_STORAGE_TOPIC_CONFIG
+      offset.storage.topic: <span class="hljs-string">"offset-topic"</span>
+    
+
+### Usage example
+
+Here is a simple example to store MySQL change data using above example config.
+
+- Start a MySQL server with <span class="hljs-keyword">an</span> example database, from <span class="hljs-keyword">which</span> Debezium can <span class="hljs-keyword">capture</span> changes. ```<span class="hljs-variable">$bash</span> docker <span class="hljs-keyword">run</span> -it --<span class="hljs-keyword">rm</span> --name mysql -p 3306:3306 -<span class="hljs-keyword">e</span> MYSQL_ROOT_PASSWORD=debezium -<span class="hljs-keyword">e</span> MYSQL_USER=mysqluser -<span class="hljs [...]
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- Start a Pulsar service locally <span class="hljs-keyword">in</span> standalone mode.
+    ```<span class="hljs-variable">$bash</span>
+     bin/pulsar standalone
+    
+
+- Start pulsar debezium connector, with <span class="hljs-keyword">local</span> <span class="hljs-keyword">run</span> mode, and using above yaml config <span class="hljs-keyword">file</span>. Please make sure that the nar <span class="hljs-keyword">file</span> is available <span class="hljs-keyword">as</span> configured <span class="hljs-keyword">in</span> path `connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar`. ```<span class="hljs-variable">$bash</span> bin/pulsar-admin so [...]
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- Subscribe the topic <span class="hljs-keyword">for</span> <span class="hljs-keyword">table</span> `inventory.products`.
+    
+
+bin/pulsar-client consume -s <span class="hljs-string">"sub-products"</span> public/default/dbserver1.inventory.products -<span class="hljs-keyword">n</span> 0
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- start a MySQL <span class="hljs-keyword">cli</span> docker connector, and <span class="hljs-keyword">use</span> it we could change to the <span class="hljs-keyword">table</span> `products` <span class="hljs-keyword">in</span> MySQL server.
+    ```<span class="hljs-variable">$bash</span>
+    <span class="hljs-variable">$docker</span> <span class="hljs-keyword">run</span> -it --<span class="hljs-keyword">rm</span> --name mysqlterm --link mysql --<span class="hljs-keyword">rm</span> mysql:5.7 <span class="hljs-keyword">sh</span> -c 'exec mysql -<span class="hljs-keyword">h</span><span class="hljs-string">"$MYSQL_PORT_3306_TCP_ADDR"</span> -P<span class="hljs-string">"$MYSQL_PORT_3306_TCP_PORT"</span> -uroot -p<span class="hljs-string">"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"</span>'
+    
+
+This command will pop <span class="hljs-keyword">out</span> MySQL <span class="hljs-keyword">cli</span>, <span class="hljs-keyword">in</span> this <span class="hljs-keyword">cli</span>, we could <span class="hljs-keyword">do</span> a change <span class="hljs-keyword">in</span> <span class="hljs-keyword">table</span> products, <span class="hljs-keyword">use</span> commands below to change the name of 2 items <span class="hljs-keyword">in</span> <span class="hljs-keyword">table</span> products:
+
+    mysql&gt; <span class="hljs-keyword">use</span> inventory;
+    mysql&gt; show tables;
+    mysql&gt; SELECT * FROM  products ;
+    mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-keyword">SET</span> name='1111111111' WHERE id=101;
+    mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-keyword">SET</span> name='1111111111' WHERE id=107;
+    
+
+- <span class="hljs-keyword">In</span> above subscribe topic terminal <span class="hljs-keyword">tab</span>, we could find that 2 changes has been kept into products topic.</code></pre>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apache Software Foundation.</section><span><script>
+      const community = document.querySelector("a[href='#community']").parentNode;
+      const communityMenu =
+        '<li>' +
+        '<a id="community-menu" href="#">Community <span style="font-size: 0.75em">&nbsp;▼</span></a>' +
+        '<div id="community-dropdown" class="hide">' +
+          '<ul id="community-dropdown-items">' +
+            '<li><a href="/fr/contact">Contact</a></li>' +
+            '<li><a href="/fr/contributing">Contributing</a></li>' +
+            '<li><a href="/fr/events">Events</a></li>' +
+            '<li><a href="https://twitter.com/Apache_Pulsar" target="_blank">Twitter &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/wiki" target="_blank">Wiki &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/issues" target="_blank">Issue tracking &#x2750</a></li>' +
+            '<li>&nbsp;</li>' +
+            '<li><a href="/fr/resources">Resources</a></li>' +
+            '<li><a href="/fr/team">Team</a></li>' +
+          '</ul>' +
+        '</div>' +
+        '</li>';
+
+      community.innerHTML = communityMenu;
+
+      const communityMenuItem = document.getElementById("community-menu");
+      const communityDropDown = document.getElementById("community-dropdown");
+      communityMenuItem.addEventListener("click", function(event) {
+        event.preventDefault();
+
+        if (communityDropDown.className == 'hide') {
+          communityDropDown.className = 'visible';
+        } else {
+          communityDropDown.className = 'hide';
+        }
+      });
+    </script></span><span><script src="/js/pjax-api.min.js"></script><script>window.navfoo = new Pjax({
+            areas: [
+              // try to use the first query.
+              '.mainContainer, .docsNavContainer .toc .navWrapper, .onPageNav',
+              // fallback
+              'body'
+            ],
+            link: '.docsNavContainer:not(.docsSliderActive) a',
+            update: {
+              script: false,
+            }
+          });
+        </script></span></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</scri [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: 'd226a455cecdd4bc18a554c1b47e5b52',
+                indexName: 'apache_pulsar',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:fr","version:2.3.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/fr/io-cdc-debezium/index.html b/content/docs/fr/io-cdc-debezium/index.html
new file mode 100644
index 0000000..56dc73c
--- /dev/null
+++ b/content/docs/fr/io-cdc-debezium/index.html
@@ -0,0 +1,184 @@
+<!DOCTYPE html><html lang="fr"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>CDC Debezium Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-configuration-options&quot; aria-hidden=&q [...]
+"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="fr"/><meta property="og:title" content="CDC Debezium Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source- [...]
+"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
+              (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+              (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+              m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+              })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+              ga('create', 'UA-102219959-1', 'auto');
+              ga('send', 'pageview');
+            </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div clas [...]
+        const languagesMenuItem = document.getElementById("languages-menu");
+        const languagesDropDown = document.getElementById("languages-dropdown");
+        languagesMenuItem.addEventListener("click", function(event) {
+          event.preventDefault();
+
+          if (languagesDropDown.className == "hide") {
+            languagesDropDown.className = "visible";
+          } else {
+            languagesDropDown.className = "hide";
+          }
+        });
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/fr" target="_blank" rel="noreferrer noopener">Transla [...]
+<p>The Configuration is mostly related to Debezium task config, besides this we should provides the service URL of Pulsar cluster, and topic names that used to store offset and history.</p>
+<table>
+<thead>
+<tr><th>Name</th><th>Required</th><th>Default</th><th>Description</th></tr>
+</thead>
+<tbody>
+<tr><td><code>task.class</code></td><td><code>true</code></td><td><code>null</code></td><td>A source task class that implemented in Debezium.</td></tr>
+<tr><td><code>database.hostname</code></td><td><code>true</code></td><td><code>null</code></td><td>The address of the Database server.</td></tr>
+<tr><td><code>database.port</code></td><td><code>true</code></td><td><code>null</code></td><td>The port number of the Database server..</td></tr>
+<tr><td><code>database.user</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the Database user that has the required privileges.</td></tr>
+<tr><td><code>database.password</code></td><td><code>true</code></td><td><code>null</code></td><td>The password for the Database user that has the required privileges.</td></tr>
+<tr><td><code>database.server.id</code></td><td><code>true</code></td><td><code>null</code></td><td>The connector’s identifier that must be unique within the Database cluster and similar to Database’s server-id configuration property.</td></tr>
+<tr><td><code>database.server.name</code></td><td><code>true</code></td><td><code>null</code></td><td>The logical name of the Database server/cluster, which forms a namespace and is used in all the names of the Kafka topics to which the connector writes, the Kafka Connect schema names, and the namespaces of the corresponding Avro schema when the Avro Connector is used.</td></tr>
+<tr><td><code>database.whitelist</code></td><td><code>false</code></td><td><code>null</code></td><td>A list of all databases hosted by this server that this connector will monitor. This is optional, and there are other properties for listing the databases and tables to include or exclude from monitoring.</td></tr>
+<tr><td><code>key.converter</code></td><td><code>true</code></td><td><code>null</code></td><td>The converter provided by Kafka Connect to convert record key.</td></tr>
+<tr><td><code>value.converter</code></td><td><code>true</code></td><td><code>null</code></td><td>The converter provided by Kafka Connect to convert record value.</td></tr>
+<tr><td><code>database.history</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the database history class name.</td></tr>
+<tr><td><code>database.history.pulsar.topic</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the database history topic where the connector will write and recover DDL statements. This topic is for internal use only and should not be used by consumers.</td></tr>
+<tr><td><code>database.history.pulsar.service.url</code></td><td><code>true</code></td><td><code>null</code></td><td>Pulsar cluster service url for history topic.</td></tr>
+<tr><td><code>pulsar.service.url</code></td><td><code>true</code></td><td><code>null</code></td><td>Pulsar cluster service url.</td></tr>
+<tr><td><code>offset.storage.topic</code></td><td><code>true</code></td><td><code>null</code></td><td>Record the last committed offsets that the connector successfully completed.</td></tr>
+</tbody>
+</table>
+<h3><a class="anchor" aria-hidden="true" id="configuration-example"></a><a href="#configuration-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 [...]
+<p>Here is a configuration Json example:</p>
+<pre><code class="hljs css language-$json { &quot;tenant&quot;: &quot;public&quot;, &quot;namespace&quot;: &quot;default&quot;, &quot;name&quot;: &quot;debezium-kafka-source&quot;, &quot;className&quot;: &quot;org.apache.pulsar.io.kafka.connect.KafkaConnectSource&quot; , &quot;topicName&quot;: &quot;kafka-connect-topic&quot;, &quot;configs&quot;: { &quot;task.class&quot;: &quot;io.debezium.connector.mysql.MySqlConnectorTask&quot;, &quot;database.hostname&quot;: &quot;localhost&quot;, &qu [...]
+    &lt;<span class="hljs-keyword">br</span> /&gt;You could also find the yaml example <span class="hljs-keyword">in</span> this [<span class="hljs-keyword">file</span>](https:<span class="hljs-comment">//github.com/apache/pulsar/blob/master/pulsar-io/kafka-connect-adaptor/src/main/resources/debezium-mysql-source-config.yaml), which has similar content below:</span>
+    
+    ```<span class="hljs-variable">$yaml</span>
+    tenant: <span class="hljs-string">"public"</span>
+    namespace: <span class="hljs-string">"default"</span>
+    name: <span class="hljs-string">"debezium-kafka-source"</span>
+    topicName: <span class="hljs-string">"kafka-connect-topic"</span>
+    archive: <span class="hljs-string">"connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar"</span>
+    
+    ##autoAck: true
+    parallelism: 1
+    
+    configs:
+      ## sourceTask
+      task.<span class="hljs-keyword">class</span>: <span class="hljs-string">"io.debezium.connector.mysql.MySqlConnectorTask"</span>
+    
+      ## config <span class="hljs-keyword">for</span> mysql, docker image: debezium/example-mysql:0.8
+      database.hostname: <span class="hljs-string">"localhost"</span>
+      database.port: <span class="hljs-string">"3306"</span>
+      database.user: <span class="hljs-string">"debezium"</span>
+      database.password: <span class="hljs-string">"dbz"</span>
+      database.server.id: <span class="hljs-string">"184054"</span>
+      database.server.name: <span class="hljs-string">"dbserver1"</span>
+      database.whitelist: <span class="hljs-string">"inventory"</span>
+    
+      database.history: <span class="hljs-string">"org.apache.pulsar.io.debezium.PulsarDatabaseHistory"</span>
+      database.history.pulsar.topic: <span class="hljs-string">"history-topic"</span>
+      database.history.pulsar.service.url: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>
+      ## KEY_CONVERTER_CLASS_CONFIG, VALUE_CONVERTER_CLASS_CONFIG
+      key.converter: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>
+      value.converter: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>
+      ## PULSAR_SERVICE_URL_CONFIG
+      pulsar.service.url: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>
+      ## OFFSET_STORAGE_TOPIC_CONFIG
+      offset.storage.topic: <span class="hljs-string">"offset-topic"</span>
+    
+
+### Usage example
+
+Here is a simple example to store MySQL change data using above example config.
+
+- Start a MySQL server with <span class="hljs-keyword">an</span> example database, from <span class="hljs-keyword">which</span> Debezium can <span class="hljs-keyword">capture</span> changes. ```<span class="hljs-variable">$bash</span> docker <span class="hljs-keyword">run</span> -it --<span class="hljs-keyword">rm</span> --name mysql -p 3306:3306 -<span class="hljs-keyword">e</span> MYSQL_ROOT_PASSWORD=debezium -<span class="hljs-keyword">e</span> MYSQL_USER=mysqluser -<span class="hljs [...]
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- Start a Pulsar service locally <span class="hljs-keyword">in</span> standalone mode.
+    ```<span class="hljs-variable">$bash</span>
+     bin/pulsar standalone
+    
+
+- Start pulsar debezium connector, with <span class="hljs-keyword">local</span> <span class="hljs-keyword">run</span> mode, and using above yaml config <span class="hljs-keyword">file</span>. Please make sure that the nar <span class="hljs-keyword">file</span> is available <span class="hljs-keyword">as</span> configured <span class="hljs-keyword">in</span> path `connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar`. ```<span class="hljs-variable">$bash</span> bin/pulsar-admin so [...]
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- Subscribe the topic <span class="hljs-keyword">for</span> <span class="hljs-keyword">table</span> `inventory.products`.
+    
+
+bin/pulsar-client consume -s <span class="hljs-string">"sub-products"</span> public/default/dbserver1.inventory.products -<span class="hljs-keyword">n</span> 0
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- start a MySQL <span class="hljs-keyword">cli</span> docker connector, and <span class="hljs-keyword">use</span> it we could change to the <span class="hljs-keyword">table</span> `products` <span class="hljs-keyword">in</span> MySQL server.
+    ```<span class="hljs-variable">$bash</span>
+    <span class="hljs-variable">$docker</span> <span class="hljs-keyword">run</span> -it --<span class="hljs-keyword">rm</span> --name mysqlterm --link mysql --<span class="hljs-keyword">rm</span> mysql:5.7 <span class="hljs-keyword">sh</span> -c 'exec mysql -<span class="hljs-keyword">h</span><span class="hljs-string">"$MYSQL_PORT_3306_TCP_ADDR"</span> -P<span class="hljs-string">"$MYSQL_PORT_3306_TCP_PORT"</span> -uroot -p<span class="hljs-string">"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"</span>'
+    
+
+This command will pop <span class="hljs-keyword">out</span> MySQL <span class="hljs-keyword">cli</span>, <span class="hljs-keyword">in</span> this <span class="hljs-keyword">cli</span>, we could <span class="hljs-keyword">do</span> a change <span class="hljs-keyword">in</span> <span class="hljs-keyword">table</span> products, <span class="hljs-keyword">use</span> commands below to change the name of 2 items <span class="hljs-keyword">in</span> <span class="hljs-keyword">table</span> products:
+
+    mysql&gt; <span class="hljs-keyword">use</span> inventory;
+    mysql&gt; show tables;
+    mysql&gt; SELECT * FROM  products ;
+    mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-keyword">SET</span> name='1111111111' WHERE id=101;
+    mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-keyword">SET</span> name='1111111111' WHERE id=107;
+    
+
+- <span class="hljs-keyword">In</span> above subscribe topic terminal <span class="hljs-keyword">tab</span>, we could find that 2 changes has been kept into products topic.</code></pre>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apache Software Foundation.</section><span><script>
+      const community = document.querySelector("a[href='#community']").parentNode;
+      const communityMenu =
+        '<li>' +
+        '<a id="community-menu" href="#">Community <span style="font-size: 0.75em">&nbsp;▼</span></a>' +
+        '<div id="community-dropdown" class="hide">' +
+          '<ul id="community-dropdown-items">' +
+            '<li><a href="/fr/contact">Contact</a></li>' +
+            '<li><a href="/fr/contributing">Contributing</a></li>' +
+            '<li><a href="/fr/events">Events</a></li>' +
+            '<li><a href="https://twitter.com/Apache_Pulsar" target="_blank">Twitter &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/wiki" target="_blank">Wiki &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/issues" target="_blank">Issue tracking &#x2750</a></li>' +
+            '<li>&nbsp;</li>' +
+            '<li><a href="/fr/resources">Resources</a></li>' +
+            '<li><a href="/fr/team">Team</a></li>' +
+          '</ul>' +
+        '</div>' +
+        '</li>';
+
+      community.innerHTML = communityMenu;
+
+      const communityMenuItem = document.getElementById("community-menu");
+      const communityDropDown = document.getElementById("community-dropdown");
+      communityMenuItem.addEventListener("click", function(event) {
+        event.preventDefault();
+
+        if (communityDropDown.className == 'hide') {
+          communityDropDown.className = 'visible';
+        } else {
+          communityDropDown.className = 'hide';
+        }
+      });
+    </script></span><span><script src="/js/pjax-api.min.js"></script><script>window.navfoo = new Pjax({
+            areas: [
+              // try to use the first query.
+              '.mainContainer, .docsNavContainer .toc .navWrapper, .onPageNav',
+              // fallback
+              'body'
+            ],
+            link: '.docsNavContainer:not(.docsSliderActive) a',
+            update: {
+              script: false,
+            }
+          });
+        </script></span></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</scri [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: 'd226a455cecdd4bc18a554c1b47e5b52',
+                indexName: 'apache_pulsar',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:fr","version:2.3.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/fr/io-cdc.html b/content/docs/fr/io-cdc.html
index b0a3a6f..02ca842 100644
--- a/content/docs/fr/io-cdc.html
+++ b/content/docs/fr/io-cdc.html
@@ -72,105 +72,12 @@
             });
         </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/fr" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">CDC Connector</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="source"></a><a href="#source" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria- [...]
 <p>The CDC Source connector is used to capture change log of existing databases like MySQL, MongoDB, PostgreSQL into Pulsar.</p>
-<p>The CDC Source connector is built on top of <a href="https://debezium.io/">Debezium</a>. This connector stores all data into Pulsar Cluster in a persistent, replicated and partitioned way. This CDC Source are tested by using MySQL, and you could get more information regarding how it works at <a href="https://debezium.io/docs/connectors/mysql/">this link</a>. Regarding how Debezium works, please reference to <a href="https://debezium.io/docs/tutorial/">Debezium tutorial</a>. It is reco [...]
-<h3><a class="anchor" aria-hidden="true" id="source-configuration-options"></a><a href="#source-configuration-options" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 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>The Configuration is mostly related to Debezium task config, besides this we should provides the service URL of Pulsar cluster, and topic names that used to store offset and history.</p>
-<table>
-<thead>
-<tr><th>Name</th><th>Required</th><th>Default</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>task.class</code></td><td><code>true</code></td><td><code>null</code></td><td>A source task class that implemented in Debezium.</td></tr>
-<tr><td><code>database.hostname</code></td><td><code>true</code></td><td><code>null</code></td><td>The address of the Database server.</td></tr>
-<tr><td><code>database.port</code></td><td><code>true</code></td><td><code>null</code></td><td>The port number of the Database server..</td></tr>
-<tr><td><code>database.user</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the Database user that has the required privileges.</td></tr>
-<tr><td><code>database.password</code></td><td><code>true</code></td><td><code>null</code></td><td>The password for the Database user that has the required privileges.</td></tr>
-<tr><td><code>database.server.id</code></td><td><code>true</code></td><td><code>null</code></td><td>The connector’s identifier that must be unique within the Database cluster and similar to Database’s server-id configuration property.</td></tr>
-<tr><td><code>database.server.name</code></td><td><code>true</code></td><td><code>null</code></td><td>The logical name of the Database server/cluster, which forms a namespace and is used in all the names of the Kafka topics to which the connector writes, the Kafka Connect schema names, and the namespaces of the corresponding Avro schema when the Avro Connector is used.</td></tr>
-<tr><td><code>database.whitelist</code></td><td><code>false</code></td><td><code>null</code></td><td>A list of all databases hosted by this server that this connector will monitor. This is optional, and there are other properties for listing the databases and tables to include or exclude from monitoring.</td></tr>
-<tr><td><code>key.converter</code></td><td><code>true</code></td><td><code>null</code></td><td>The converter provided by Kafka Connect to convert record key.</td></tr>
-<tr><td><code>value.converter</code></td><td><code>true</code></td><td><code>null</code></td><td>The converter provided by Kafka Connect to convert record value.</td></tr>
-<tr><td><code>database.history</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the database history class name.</td></tr>
-<tr><td><code>database.history.pulsar.topic</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the database history topic where the connector will write and recover DDL statements. This topic is for internal use only and should not be used by consumers.</td></tr>
-<tr><td><code>database.history.pulsar.service.url</code></td><td><code>true</code></td><td><code>null</code></td><td>Pulsar cluster service url for history topic.</td></tr>
-<tr><td><code>pulsar.service.url</code></td><td><code>true</code></td><td><code>null</code></td><td>Pulsar cluster service url.</td></tr>
-<tr><td><code>offset.storage.topic</code></td><td><code>true</code></td><td><code>null</code></td><td>Record the last committed offsets that the connector successfully completed.</td></tr>
-</tbody>
-</table>
-<h3><a class="anchor" aria-hidden="true" id="configuration-example"></a><a href="#configuration-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 [...]
-<p>Here is a configuration Json example:</p>
-<pre><code class="hljs css language-$json { &quot;tenant&quot;: &quot;public&quot;, &quot;namespace&quot;: &quot;default&quot;, &quot;name&quot;: &quot;debezium-kafka-source&quot;, &quot;className&quot;: &quot;org.apache.pulsar.io.kafka.connect.KafkaConnectSource&quot; , &quot;topicName&quot;: &quot;kafka-connect-topic&quot;, &quot;configs&quot;: { &quot;task.class&quot;: &quot;io.debezium.connector.mysql.MySqlConnectorTask&quot;, &quot;database.hostname&quot;: &quot;localhost&quot;, &qu [...]
-    &lt;<span class="hljs-keyword">br</span> /&gt;You could also find the yaml example <span class="hljs-keyword">in</span> this [<span class="hljs-keyword">file</span>](https:<span class="hljs-comment">//github.com/apache/pulsar/blob/master/pulsar-io/kafka-connect-adaptor/src/main/resources/debezium-mysql-source-config.yaml), which has similar content below:</span>
-    
-    ```<span class="hljs-variable">$yaml</span>
-    tenant: <span class="hljs-string">"public"</span>
-    namespace: <span class="hljs-string">"default"</span>
-    name: <span class="hljs-string">"debezium-kafka-source"</span>
-    topicName: <span class="hljs-string">"kafka-connect-topic"</span>
-    archive: <span class="hljs-string">"connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar"</span>
-    
-    ##autoAck: true
-    parallelism: 1
-    
-    configs:
-      ## sourceTask
-      task.<span class="hljs-keyword">class</span>: <span class="hljs-string">"io.debezium.connector.mysql.MySqlConnectorTask"</span>
-    
-      ## config <span class="hljs-keyword">for</span> mysql, docker image: debezium/example-mysql:0.8
-      database.hostname: <span class="hljs-string">"localhost"</span>
-      database.port: <span class="hljs-string">"3306"</span>
-      database.user: <span class="hljs-string">"debezium"</span>
-      database.password: <span class="hljs-string">"dbz"</span>
-      database.server.id: <span class="hljs-string">"184054"</span>
-      database.server.name: <span class="hljs-string">"dbserver1"</span>
-      database.whitelist: <span class="hljs-string">"inventory"</span>
-    
-      database.history: <span class="hljs-string">"org.apache.pulsar.io.debezium.PulsarDatabaseHistory"</span>
-      database.history.pulsar.topic: <span class="hljs-string">"history-topic"</span>
-      database.history.pulsar.service.url: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>
-      ## KEY_CONVERTER_CLASS_CONFIG, VALUE_CONVERTER_CLASS_CONFIG
-      key.converter: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>
-      value.converter: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>
-      ## PULSAR_SERVICE_URL_CONFIG
-      pulsar.service.url: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>
-      ## OFFSET_STORAGE_TOPIC_CONFIG
-      offset.storage.topic: <span class="hljs-string">"offset-topic"</span>
-    
-
-### Usage example
-
-Here is a simple example to store MySQL change data using above example config.
-
-- Start a MySQL server with <span class="hljs-keyword">an</span> example database, from <span class="hljs-keyword">which</span> Debezium can <span class="hljs-keyword">capture</span> changes. ```<span class="hljs-variable">$bash</span> docker <span class="hljs-keyword">run</span> -it --<span class="hljs-keyword">rm</span> --name mysql -p 3306:3306 -<span class="hljs-keyword">e</span> MYSQL_ROOT_PASSWORD=debezium -<span class="hljs-keyword">e</span> MYSQL_USER=mysqluser -<span class="hljs [...]
-
-    &lt;<span class="hljs-keyword">br</span> /&gt;- Start a Pulsar service locally <span class="hljs-keyword">in</span> standalone mode.
-    ```<span class="hljs-variable">$bash</span>
-     bin/pulsar standalone
-    
-
-- Start pulsar debezium connector, with <span class="hljs-keyword">local</span> <span class="hljs-keyword">run</span> mode, and using above yaml config <span class="hljs-keyword">file</span>. Please make sure that the nar <span class="hljs-keyword">file</span> is available <span class="hljs-keyword">as</span> configured <span class="hljs-keyword">in</span> path `connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar`. ```<span class="hljs-variable">$bash</span> bin/pulsar-admin so [...]
-
-    &lt;<span class="hljs-keyword">br</span> /&gt;- Subscribe the topic <span class="hljs-keyword">for</span> <span class="hljs-keyword">table</span> `inventory.products`.
-    
-
-bin/pulsar-client consume -s <span class="hljs-string">"sub-products"</span> public/default/dbserver1.inventory.products -<span class="hljs-keyword">n</span> 0
-
-    &lt;<span class="hljs-keyword">br</span> /&gt;- start a MySQL <span class="hljs-keyword">cli</span> docker connector, and <span class="hljs-keyword">use</span> it we could change to the <span class="hljs-keyword">table</span> `products` <span class="hljs-keyword">in</span> MySQL server.
-    ```<span class="hljs-variable">$bash</span>
-    <span class="hljs-variable">$docker</span> <span class="hljs-keyword">run</span> -it --<span class="hljs-keyword">rm</span> --name mysqlterm --link mysql --<span class="hljs-keyword">rm</span> mysql:5.7 <span class="hljs-keyword">sh</span> -c 'exec mysql -<span class="hljs-keyword">h</span><span class="hljs-string">"$MYSQL_PORT_3306_TCP_ADDR"</span> -P<span class="hljs-string">"$MYSQL_PORT_3306_TCP_PORT"</span> -uroot -p<span class="hljs-string">"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"</span>'
-    
-
-This command will pop <span class="hljs-keyword">out</span> MySQL <span class="hljs-keyword">cli</span>, <span class="hljs-keyword">in</span> this <span class="hljs-keyword">cli</span>, we could <span class="hljs-keyword">do</span> a change <span class="hljs-keyword">in</span> <span class="hljs-keyword">table</span> products, <span class="hljs-keyword">use</span> commands below to change the name of 2 items <span class="hljs-keyword">in</span> <span class="hljs-keyword">table</span> products:
-
-    mysql&gt; <span class="hljs-keyword">use</span> inventory;
-    mysql&gt; show tables;
-    mysql&gt; SELECT * FROM  products ;
-    mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-keyword">SET</span> name='1111111111' WHERE id=101;
-    mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-keyword">SET</span> name='1111111111' WHERE id=107;
-    
-
-- <span class="hljs-keyword">In</span> above subscribe topic terminal <span class="hljs-keyword">tab</span>, we could find that 2 changes has been kept into products topic.</code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/io-develop"><span class="arrow-prev">← </span><span>Developing Connectors</span></a><a class="docs-next button" href="/docs/fr/sql-overview"><span>Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#source">Source</a><ul class="toc-headings"><li><a href="#source-configuration-options">Source Configuration Optio [...]
+<p>The CDC Source connector is built on top of <a href="https://debezium.io/">Debezium</a> and <a href="https://github.com/alibaba/canal">Canal</a>. This connector stores all data into Pulsar Cluster in a persistent, replicated and partitioned way. This CDC Source are tested by using MySQL, and you could get more information regarding how it works at <a href="https://debezium.io/docs/connectors/mysql/">this debezium link</a> or <a href="https://github.com/alibaba/canal/wiki">this canal l [...]
+<ul>
+<li><a href="/docs/fr/io-cdc-debezium">Debezium Connector</a></li>
+<li><a href="/docs/fr/io-cdc-canal">Alibaba Canal Connector</a></li>
+</ul>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/io-develop"><span class="arrow-prev">← </span><span>Developing Connectors</span></a><a class="docs-next button" href="/docs/fr/sql-overview"><span>Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#source">Source</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyrig [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/fr/io-cdc/index.html b/content/docs/fr/io-cdc/index.html
index b0a3a6f..02ca842 100644
--- a/content/docs/fr/io-cdc/index.html
+++ b/content/docs/fr/io-cdc/index.html
@@ -72,105 +72,12 @@
             });
         </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/fr" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">CDC Connector</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="source"></a><a href="#source" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria- [...]
 <p>The CDC Source connector is used to capture change log of existing databases like MySQL, MongoDB, PostgreSQL into Pulsar.</p>
-<p>The CDC Source connector is built on top of <a href="https://debezium.io/">Debezium</a>. This connector stores all data into Pulsar Cluster in a persistent, replicated and partitioned way. This CDC Source are tested by using MySQL, and you could get more information regarding how it works at <a href="https://debezium.io/docs/connectors/mysql/">this link</a>. Regarding how Debezium works, please reference to <a href="https://debezium.io/docs/tutorial/">Debezium tutorial</a>. It is reco [...]
-<h3><a class="anchor" aria-hidden="true" id="source-configuration-options"></a><a href="#source-configuration-options" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 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>The Configuration is mostly related to Debezium task config, besides this we should provides the service URL of Pulsar cluster, and topic names that used to store offset and history.</p>
-<table>
-<thead>
-<tr><th>Name</th><th>Required</th><th>Default</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>task.class</code></td><td><code>true</code></td><td><code>null</code></td><td>A source task class that implemented in Debezium.</td></tr>
-<tr><td><code>database.hostname</code></td><td><code>true</code></td><td><code>null</code></td><td>The address of the Database server.</td></tr>
-<tr><td><code>database.port</code></td><td><code>true</code></td><td><code>null</code></td><td>The port number of the Database server..</td></tr>
-<tr><td><code>database.user</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the Database user that has the required privileges.</td></tr>
-<tr><td><code>database.password</code></td><td><code>true</code></td><td><code>null</code></td><td>The password for the Database user that has the required privileges.</td></tr>
-<tr><td><code>database.server.id</code></td><td><code>true</code></td><td><code>null</code></td><td>The connector’s identifier that must be unique within the Database cluster and similar to Database’s server-id configuration property.</td></tr>
-<tr><td><code>database.server.name</code></td><td><code>true</code></td><td><code>null</code></td><td>The logical name of the Database server/cluster, which forms a namespace and is used in all the names of the Kafka topics to which the connector writes, the Kafka Connect schema names, and the namespaces of the corresponding Avro schema when the Avro Connector is used.</td></tr>
-<tr><td><code>database.whitelist</code></td><td><code>false</code></td><td><code>null</code></td><td>A list of all databases hosted by this server that this connector will monitor. This is optional, and there are other properties for listing the databases and tables to include or exclude from monitoring.</td></tr>
-<tr><td><code>key.converter</code></td><td><code>true</code></td><td><code>null</code></td><td>The converter provided by Kafka Connect to convert record key.</td></tr>
-<tr><td><code>value.converter</code></td><td><code>true</code></td><td><code>null</code></td><td>The converter provided by Kafka Connect to convert record value.</td></tr>
-<tr><td><code>database.history</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the database history class name.</td></tr>
-<tr><td><code>database.history.pulsar.topic</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the database history topic where the connector will write and recover DDL statements. This topic is for internal use only and should not be used by consumers.</td></tr>
-<tr><td><code>database.history.pulsar.service.url</code></td><td><code>true</code></td><td><code>null</code></td><td>Pulsar cluster service url for history topic.</td></tr>
-<tr><td><code>pulsar.service.url</code></td><td><code>true</code></td><td><code>null</code></td><td>Pulsar cluster service url.</td></tr>
-<tr><td><code>offset.storage.topic</code></td><td><code>true</code></td><td><code>null</code></td><td>Record the last committed offsets that the connector successfully completed.</td></tr>
-</tbody>
-</table>
-<h3><a class="anchor" aria-hidden="true" id="configuration-example"></a><a href="#configuration-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 [...]
-<p>Here is a configuration Json example:</p>
-<pre><code class="hljs css language-$json { &quot;tenant&quot;: &quot;public&quot;, &quot;namespace&quot;: &quot;default&quot;, &quot;name&quot;: &quot;debezium-kafka-source&quot;, &quot;className&quot;: &quot;org.apache.pulsar.io.kafka.connect.KafkaConnectSource&quot; , &quot;topicName&quot;: &quot;kafka-connect-topic&quot;, &quot;configs&quot;: { &quot;task.class&quot;: &quot;io.debezium.connector.mysql.MySqlConnectorTask&quot;, &quot;database.hostname&quot;: &quot;localhost&quot;, &qu [...]
-    &lt;<span class="hljs-keyword">br</span> /&gt;You could also find the yaml example <span class="hljs-keyword">in</span> this [<span class="hljs-keyword">file</span>](https:<span class="hljs-comment">//github.com/apache/pulsar/blob/master/pulsar-io/kafka-connect-adaptor/src/main/resources/debezium-mysql-source-config.yaml), which has similar content below:</span>
-    
-    ```<span class="hljs-variable">$yaml</span>
-    tenant: <span class="hljs-string">"public"</span>
-    namespace: <span class="hljs-string">"default"</span>
-    name: <span class="hljs-string">"debezium-kafka-source"</span>
-    topicName: <span class="hljs-string">"kafka-connect-topic"</span>
-    archive: <span class="hljs-string">"connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar"</span>
-    
-    ##autoAck: true
-    parallelism: 1
-    
-    configs:
-      ## sourceTask
-      task.<span class="hljs-keyword">class</span>: <span class="hljs-string">"io.debezium.connector.mysql.MySqlConnectorTask"</span>
-    
-      ## config <span class="hljs-keyword">for</span> mysql, docker image: debezium/example-mysql:0.8
-      database.hostname: <span class="hljs-string">"localhost"</span>
-      database.port: <span class="hljs-string">"3306"</span>
-      database.user: <span class="hljs-string">"debezium"</span>
-      database.password: <span class="hljs-string">"dbz"</span>
-      database.server.id: <span class="hljs-string">"184054"</span>
-      database.server.name: <span class="hljs-string">"dbserver1"</span>
-      database.whitelist: <span class="hljs-string">"inventory"</span>
-    
-      database.history: <span class="hljs-string">"org.apache.pulsar.io.debezium.PulsarDatabaseHistory"</span>
-      database.history.pulsar.topic: <span class="hljs-string">"history-topic"</span>
-      database.history.pulsar.service.url: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>
-      ## KEY_CONVERTER_CLASS_CONFIG, VALUE_CONVERTER_CLASS_CONFIG
-      key.converter: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>
-      value.converter: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>
-      ## PULSAR_SERVICE_URL_CONFIG
-      pulsar.service.url: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>
-      ## OFFSET_STORAGE_TOPIC_CONFIG
-      offset.storage.topic: <span class="hljs-string">"offset-topic"</span>
-    
-
-### Usage example
-
-Here is a simple example to store MySQL change data using above example config.
-
-- Start a MySQL server with <span class="hljs-keyword">an</span> example database, from <span class="hljs-keyword">which</span> Debezium can <span class="hljs-keyword">capture</span> changes. ```<span class="hljs-variable">$bash</span> docker <span class="hljs-keyword">run</span> -it --<span class="hljs-keyword">rm</span> --name mysql -p 3306:3306 -<span class="hljs-keyword">e</span> MYSQL_ROOT_PASSWORD=debezium -<span class="hljs-keyword">e</span> MYSQL_USER=mysqluser -<span class="hljs [...]
-
-    &lt;<span class="hljs-keyword">br</span> /&gt;- Start a Pulsar service locally <span class="hljs-keyword">in</span> standalone mode.
-    ```<span class="hljs-variable">$bash</span>
-     bin/pulsar standalone
-    
-
-- Start pulsar debezium connector, with <span class="hljs-keyword">local</span> <span class="hljs-keyword">run</span> mode, and using above yaml config <span class="hljs-keyword">file</span>. Please make sure that the nar <span class="hljs-keyword">file</span> is available <span class="hljs-keyword">as</span> configured <span class="hljs-keyword">in</span> path `connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar`. ```<span class="hljs-variable">$bash</span> bin/pulsar-admin so [...]
-
-    &lt;<span class="hljs-keyword">br</span> /&gt;- Subscribe the topic <span class="hljs-keyword">for</span> <span class="hljs-keyword">table</span> `inventory.products`.
-    
-
-bin/pulsar-client consume -s <span class="hljs-string">"sub-products"</span> public/default/dbserver1.inventory.products -<span class="hljs-keyword">n</span> 0
-
-    &lt;<span class="hljs-keyword">br</span> /&gt;- start a MySQL <span class="hljs-keyword">cli</span> docker connector, and <span class="hljs-keyword">use</span> it we could change to the <span class="hljs-keyword">table</span> `products` <span class="hljs-keyword">in</span> MySQL server.
-    ```<span class="hljs-variable">$bash</span>
-    <span class="hljs-variable">$docker</span> <span class="hljs-keyword">run</span> -it --<span class="hljs-keyword">rm</span> --name mysqlterm --link mysql --<span class="hljs-keyword">rm</span> mysql:5.7 <span class="hljs-keyword">sh</span> -c 'exec mysql -<span class="hljs-keyword">h</span><span class="hljs-string">"$MYSQL_PORT_3306_TCP_ADDR"</span> -P<span class="hljs-string">"$MYSQL_PORT_3306_TCP_PORT"</span> -uroot -p<span class="hljs-string">"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"</span>'
-    
-
-This command will pop <span class="hljs-keyword">out</span> MySQL <span class="hljs-keyword">cli</span>, <span class="hljs-keyword">in</span> this <span class="hljs-keyword">cli</span>, we could <span class="hljs-keyword">do</span> a change <span class="hljs-keyword">in</span> <span class="hljs-keyword">table</span> products, <span class="hljs-keyword">use</span> commands below to change the name of 2 items <span class="hljs-keyword">in</span> <span class="hljs-keyword">table</span> products:
-
-    mysql&gt; <span class="hljs-keyword">use</span> inventory;
-    mysql&gt; show tables;
-    mysql&gt; SELECT * FROM  products ;
-    mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-keyword">SET</span> name='1111111111' WHERE id=101;
-    mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-keyword">SET</span> name='1111111111' WHERE id=107;
-    
-
-- <span class="hljs-keyword">In</span> above subscribe topic terminal <span class="hljs-keyword">tab</span>, we could find that 2 changes has been kept into products topic.</code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/io-develop"><span class="arrow-prev">← </span><span>Developing Connectors</span></a><a class="docs-next button" href="/docs/fr/sql-overview"><span>Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#source">Source</a><ul class="toc-headings"><li><a href="#source-configuration-options">Source Configuration Optio [...]
+<p>The CDC Source connector is built on top of <a href="https://debezium.io/">Debezium</a> and <a href="https://github.com/alibaba/canal">Canal</a>. This connector stores all data into Pulsar Cluster in a persistent, replicated and partitioned way. This CDC Source are tested by using MySQL, and you could get more information regarding how it works at <a href="https://debezium.io/docs/connectors/mysql/">this debezium link</a> or <a href="https://github.com/alibaba/canal/wiki">this canal l [...]
+<ul>
+<li><a href="/docs/fr/io-cdc-debezium">Debezium Connector</a></li>
+<li><a href="/docs/fr/io-cdc-canal">Alibaba Canal Connector</a></li>
+</ul>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/io-develop"><span class="arrow-prev">← </span><span>Developing Connectors</span></a><a class="docs-next button" href="/docs/fr/sql-overview"><span>Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#source">Source</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyrig [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/fr/io-connectors.html b/content/docs/fr/io-connectors.html
index 5d9d0e0..91b50a8 100644
--- a/content/docs/fr/io-connectors.html
+++ b/content/docs/fr/io-connectors.html
@@ -79,7 +79,7 @@
 <li><a href="/docs/fr/io-kinesis#sink">Kinesis Sink Connector</a></li>
 <li><a href="/docs/fr/io-rabbitmq#source">RabbitMQ Source Connector</a></li>
 <li><a href="/docs/fr/io-twitter">Twitter Firehose Source Connector</a></li>
-<li><a href="/docs/fr/io-cdc">CDC Source Connector based on Debezium</a></li>
+<li><a href="/docs/fr/io-cdc">CDC Source Connector based on Debezium and Canal</a></li>
 <li><a href="/docs/fr/io-netty#source">Netty Source Connector</a></li>
 <li><a href="/docs/fr/io-hbase#sink">Hbase Sink Connector</a></li>
 </ul>
diff --git a/content/docs/fr/io-connectors/index.html b/content/docs/fr/io-connectors/index.html
index 5d9d0e0..91b50a8 100644
--- a/content/docs/fr/io-connectors/index.html
+++ b/content/docs/fr/io-connectors/index.html
@@ -79,7 +79,7 @@
 <li><a href="/docs/fr/io-kinesis#sink">Kinesis Sink Connector</a></li>
 <li><a href="/docs/fr/io-rabbitmq#source">RabbitMQ Source Connector</a></li>
 <li><a href="/docs/fr/io-twitter">Twitter Firehose Source Connector</a></li>
-<li><a href="/docs/fr/io-cdc">CDC Source Connector based on Debezium</a></li>
+<li><a href="/docs/fr/io-cdc">CDC Source Connector based on Debezium and Canal</a></li>
 <li><a href="/docs/fr/io-netty#source">Netty Source Connector</a></li>
 <li><a href="/docs/fr/io-hbase#sink">Hbase Sink Connector</a></li>
 </ul>
diff --git a/content/docs/fr/next/admin-api-partitioned-topics.html b/content/docs/fr/next/admin-api-partitioned-topics.html
index 7097b2a..86c51d2 100644
--- a/content/docs/fr/next/admin-api-partitioned-topics.html
+++ b/content/docs/fr/next/admin-api-partitioned-topics.html
@@ -91,6 +91,20 @@
 <span class="hljs-keyword">int</span> numPartitions = <span class="hljs-number">4</span>;
 admin.persistentTopics().createPartitionedTopic(topicName, numPartitions);
 </code></pre>
+<h2><a class="anchor" aria-hidden="true" id="nonpartitioned-topics-resources"></a><a href="#nonpartitioned-topics-resources" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 [...]
+<h3><a class="anchor" aria-hidden="true" id="create-1"></a><a href="#create-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<p>Nonpartitioned topics in Pulsar must be explicitly created if allowAutoTopicCreation or createIfMissing is disabled. When creating a non-partitioned topic, you need to provide a topic name.</p>
+<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-1"></a><a href="#pulsar-admin-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p>You can create non-partitioned topics using the <a href="/docs/fr/next/pulsar-admin#create"><code>create</code></a> command and specifying the topic name as an argument. This is an example command:</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin topics create persistent://my-tenant/my-namespace/my-topic</span>
+</code></pre>
+<h4><a class="anchor" aria-hidden="true" id="rest-api-1"></a><a href="#rest-api-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<p><a href="https://pulsar.incubator.apache.org/en/admin-rest-api#operation/createNonPartitionedTopic"><b>PUT</b> <i>admin/v2/persistent/:tenant/:namespace/:topic</i></a>
+</p>
+<h4><a class="anchor" aria-hidden="true" id="java-1"></a><a href="#java-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<pre><code class="hljs css language-java">String topicName = <span class="hljs-string">"persistent://my-tenant/my-namespace/my-topic"</span>;
+admin.topics().createNonPartitionedTopic(topicName);
+</code></pre>
 <h3><a class="anchor" aria-hidden="true" id="get-metadata"></a><a href="#get-metadata" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <p>Partitioned topics have metadata associated with them that you can fetch as a JSON object. The following metadata fields are currently available:</p>
 <table>
@@ -101,7 +115,7 @@ admin.persistentTopics().createPartitionedTopic(topicName, numPartitions);
 <tr><td style="text-align:left"><code>partitions</code></td><td style="text-align:left">The number of partitions into which the topic is divided</td></tr>
 </tbody>
 </table>
-<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-1"></a><a href="#pulsar-admin-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-2"></a><a href="#pulsar-admin-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
 <p>You can see the number of partitions in a partitioned topic using the <a href="/docs/fr/next/pulsar-admin#get-partitioned-topic-metadata"><code>get-partitioned-topic-metadata</code></a> subcommand. Here's an example:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics get-partitioned-topic-metadata \</span>
   persistent://my-tenant/my-namespace/my-topic
@@ -109,10 +123,10 @@ admin.persistentTopics().createPartitionedTopic(topicName, numPartitions);
   "partitions": 4
 }
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="rest-api-1"></a><a href="#rest-api-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h4><a class="anchor" aria-hidden="true" id="rest-api-2"></a><a href="#rest-api-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
 <p><a href="https://pulsar.incubator.apache.org/en/admin-rest-api#operation/getPartitionedMetadata"><b>GET</b> <i>/admin/v2/persistent/:tenant/:namespace/:topic/partitions</i></a>
 </p>
-<h4><a class="anchor" aria-hidden="true" id="java-1"></a><a href="#java-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<h4><a class="anchor" aria-hidden="true" id="java-2"></a><a href="#java-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <pre><code class="hljs css language-java">String topicName = <span class="hljs-string">"persistent://my-tenant/my-namespace/my-topic"</span>;
 admin.persistentTopics().getPartitionedTopicMetadata(topicName);
 </code></pre>
@@ -120,41 +134,41 @@ admin.persistentTopics().getPartitionedTopicMetadata(topicName);
 <p>You can update the number of partitions on an existing partitioned topic <em>if</em> the topic is non-global. To update, the new number of partitions must be greater than the existing number.</p>
 <p>Decrementing the number of partitions would deleting the topic, which is not supported in Pulsar.</p>
 <p>Already created partitioned producers and consumers can’t see newly created partitions and it requires to recreate them at application so, newly created producers and consumers can connect to newly added partitions as well. Therefore, it can violate partition ordering at producers until all producers are restarted at application.</p>
-<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-2"></a><a href="#pulsar-admin-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-3"></a><a href="#pulsar-admin-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
 <p>Partitioned topics can be updated using the <a href="/docs/fr/next/pulsar-admin#update-partitioned-topic"><code>update-partitioned-topic</code></a> command.</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics update-partitioned-topic \</span>
   persistent://my-tenant/my-namespace/my-topic \
   --partitions 8
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="rest-api-2"></a><a href="#rest-api-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h4><a class="anchor" aria-hidden="true" id="rest-api-3"></a><a href="#rest-api-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
 <p><a href="https://pulsar.incubator.apache.org/en/admin-rest-api#operation/updatePartitionedTopic"><b>POST</b> <i>/admin/v2/persistent/:tenant/:cluster/:namespace/:destination/partitions</i></a>
 </p>
-<h4><a class="anchor" aria-hidden="true" id="java-2"></a><a href="#java-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<h4><a class="anchor" aria-hidden="true" id="java-3"></a><a href="#java-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <pre><code class="hljs css language-java">admin.persistentTopics().updatePartitionedTopic(persistentTopic, numPartitions);
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="delete"></a><a href="#delete" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-3"></a><a href="#pulsar-admin-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-4"></a><a href="#pulsar-admin-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
 <p>Partitioned topics can be deleted using the <a href="/docs/fr/next/pulsar-admin#delete-partitioned-topic"><code>delete-partitioned-topic</code></a> command, specifying the topic by name:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin topics delete-partitioned-topic \</span>
   persistent://my-tenant/my-namespace/my-topic
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="rest-api-3"></a><a href="#rest-api-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h4><a class="anchor" aria-hidden="true" id="rest-api-4"></a><a href="#rest-api-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
 <p><a href="https://pulsar.incubator.apache.org/en/admin-rest-api#operation/deletePartitionedTopic"><b>DELETE</b> <i>/admin/v2/persistent/:topic/:namespace/:destination/partitions</i></a>
 </p>
-<h4><a class="anchor" aria-hidden="true" id="java-3"></a><a href="#java-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<h4><a class="anchor" aria-hidden="true" id="java-4"></a><a href="#java-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <pre><code class="hljs css language-java">admin.persistentTopics().delete(persistentTopic);
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="list"></a><a href="#list" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 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>It provides a list of persistent topics existing under a given namespace.</p>
-<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-4"></a><a href="#pulsar-admin-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-5"></a><a href="#pulsar-admin-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics list tenant/namespace</span>
 persistent://tenant/namespace/topic1
 persistent://tenant/namespace/topic2
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="rest-api-4"></a><a href="#rest-api-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h4><a class="anchor" aria-hidden="true" id="rest-api-5"></a><a href="#rest-api-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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><a href="https://pulsar.incubator.apache.org/en/admin-rest-api#operation/getPartitionedTopicList"><b>GET</b> <i>/admin/v2/persistent/:tenant/:namespace</i></a>
 </p>
-<h4><a class="anchor" aria-hidden="true" id="java-4"></a><a href="#java-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<h4><a class="anchor" aria-hidden="true" id="java-5"></a><a href="#java-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <pre><code class="hljs css language-java">admin.persistentTopics().getList(namespace);
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="stats"></a><a href="#stats" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
@@ -223,16 +237,16 @@ persistent://tenant/namespace/topic2
 <tr><td>inboundConnectedSince</td><td>The TCP connection being used to publish messages to the remote cluster. If there are no local publishers connected, this connection is automatically closed after a minute.</td></tr>
 </tbody>
 </table>
-<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-5"></a><a href="#pulsar-admin-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-6"></a><a href="#pulsar-admin-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
 <p>The stats for the partitioned topic and its connected producers and consumers can be fetched by using the <a href="/docs/fr/next/pulsar-admin#partitioned-stats"><code>partitioned-stats</code></a> command, specifying the topic by name:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics partitioned-stats \</span>
   persistent://test-tenant/namespace/topic \
   --per-partition        
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="rest-api-5"></a><a href="#rest-api-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h4><a class="anchor" aria-hidden="true" id="rest-api-6"></a><a href="#rest-api-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
 <p><a href="https://pulsar.incubator.apache.org/en/admin-rest-api#operation/getPartitionedStats"><b>GET</b> <i>/admin/v2/persistent/:tenant/:namespace/:topic/partitioned-stats</i></a>
 </p>
-<h4><a class="anchor" aria-hidden="true" id="java-5"></a><a href="#java-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<h4><a class="anchor" aria-hidden="true" id="java-6"></a><a href="#java-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <pre><code class="hljs css language-java">admin.persistentTopics().getStats(persistentTopic);
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="internal-stats"></a><a href="#internal-stats" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
@@ -301,18 +315,18 @@ persistent://tenant/namespace/topic2
   }
 }
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-6"></a><a href="#pulsar-admin-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-7"></a><a href="#pulsar-admin-7" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
 <p>The internal stats for the partitioned topic can be fetched by using the <a href="/docs/fr/next/pulsar-admin#stats-internal"><code>stats-internal</code></a> command, specifying the topic by name:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics stats-internal \</span>
   persistent://test-tenant/namespace/topic
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="rest-api-6"></a><a href="#rest-api-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h4><a class="anchor" aria-hidden="true" id="rest-api-7"></a><a href="#rest-api-7" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
 <p><a href="https://pulsar.incubator.apache.org/en/admin-rest-api#operation/getInternalStats"><b>GET</b> <i>/admin/v2/persistent/:tenant/:namespace/:topic/internalStats</i></a>
 </p>
-<h4><a class="anchor" aria-hidden="true" id="java-6"></a><a href="#java-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<h4><a class="anchor" aria-hidden="true" id="java-7"></a><a href="#java-7" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <pre><code class="hljs css language-java">admin.persistentTopics().getInternalStats(persistentTopic);
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/admin-api-non-persistent-topics"><span class="arrow-prev">← </span><span>Non-Persistent topics</span></a><a class="docs-next button" href="/docs/fr/next/admin-api-schemas"><span>Schemas</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#partitioned-topics-resources">Partitioned topics resources</a><ul class="toc-h [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/admin-api-non-persistent-topics"><span class="arrow-prev">← </span><span>Non-Persistent topics</span></a><a class="docs-next button" href="/docs/fr/next/admin-api-schemas"><span>Schemas</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#partitioned-topics-resources">Partitioned topics resources</a><ul class="toc-h [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/fr/next/admin-api-partitioned-topics/index.html b/content/docs/fr/next/admin-api-partitioned-topics/index.html
index 7097b2a..86c51d2 100644
--- a/content/docs/fr/next/admin-api-partitioned-topics/index.html
+++ b/content/docs/fr/next/admin-api-partitioned-topics/index.html
@@ -91,6 +91,20 @@
 <span class="hljs-keyword">int</span> numPartitions = <span class="hljs-number">4</span>;
 admin.persistentTopics().createPartitionedTopic(topicName, numPartitions);
 </code></pre>
+<h2><a class="anchor" aria-hidden="true" id="nonpartitioned-topics-resources"></a><a href="#nonpartitioned-topics-resources" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 [...]
+<h3><a class="anchor" aria-hidden="true" id="create-1"></a><a href="#create-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<p>Nonpartitioned topics in Pulsar must be explicitly created if allowAutoTopicCreation or createIfMissing is disabled. When creating a non-partitioned topic, you need to provide a topic name.</p>
+<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-1"></a><a href="#pulsar-admin-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p>You can create non-partitioned topics using the <a href="/docs/fr/next/pulsar-admin#create"><code>create</code></a> command and specifying the topic name as an argument. This is an example command:</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin topics create persistent://my-tenant/my-namespace/my-topic</span>
+</code></pre>
+<h4><a class="anchor" aria-hidden="true" id="rest-api-1"></a><a href="#rest-api-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<p><a href="https://pulsar.incubator.apache.org/en/admin-rest-api#operation/createNonPartitionedTopic"><b>PUT</b> <i>admin/v2/persistent/:tenant/:namespace/:topic</i></a>
+</p>
+<h4><a class="anchor" aria-hidden="true" id="java-1"></a><a href="#java-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<pre><code class="hljs css language-java">String topicName = <span class="hljs-string">"persistent://my-tenant/my-namespace/my-topic"</span>;
+admin.topics().createNonPartitionedTopic(topicName);
+</code></pre>
 <h3><a class="anchor" aria-hidden="true" id="get-metadata"></a><a href="#get-metadata" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
 <p>Partitioned topics have metadata associated with them that you can fetch as a JSON object. The following metadata fields are currently available:</p>
 <table>
@@ -101,7 +115,7 @@ admin.persistentTopics().createPartitionedTopic(topicName, numPartitions);
 <tr><td style="text-align:left"><code>partitions</code></td><td style="text-align:left">The number of partitions into which the topic is divided</td></tr>
 </tbody>
 </table>
-<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-1"></a><a href="#pulsar-admin-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-2"></a><a href="#pulsar-admin-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
 <p>You can see the number of partitions in a partitioned topic using the <a href="/docs/fr/next/pulsar-admin#get-partitioned-topic-metadata"><code>get-partitioned-topic-metadata</code></a> subcommand. Here's an example:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics get-partitioned-topic-metadata \</span>
   persistent://my-tenant/my-namespace/my-topic
@@ -109,10 +123,10 @@ admin.persistentTopics().createPartitionedTopic(topicName, numPartitions);
   "partitions": 4
 }
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="rest-api-1"></a><a href="#rest-api-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h4><a class="anchor" aria-hidden="true" id="rest-api-2"></a><a href="#rest-api-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
 <p><a href="https://pulsar.incubator.apache.org/en/admin-rest-api#operation/getPartitionedMetadata"><b>GET</b> <i>/admin/v2/persistent/:tenant/:namespace/:topic/partitions</i></a>
 </p>
-<h4><a class="anchor" aria-hidden="true" id="java-1"></a><a href="#java-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<h4><a class="anchor" aria-hidden="true" id="java-2"></a><a href="#java-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <pre><code class="hljs css language-java">String topicName = <span class="hljs-string">"persistent://my-tenant/my-namespace/my-topic"</span>;
 admin.persistentTopics().getPartitionedTopicMetadata(topicName);
 </code></pre>
@@ -120,41 +134,41 @@ admin.persistentTopics().getPartitionedTopicMetadata(topicName);
 <p>You can update the number of partitions on an existing partitioned topic <em>if</em> the topic is non-global. To update, the new number of partitions must be greater than the existing number.</p>
 <p>Decrementing the number of partitions would deleting the topic, which is not supported in Pulsar.</p>
 <p>Already created partitioned producers and consumers can’t see newly created partitions and it requires to recreate them at application so, newly created producers and consumers can connect to newly added partitions as well. Therefore, it can violate partition ordering at producers until all producers are restarted at application.</p>
-<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-2"></a><a href="#pulsar-admin-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-3"></a><a href="#pulsar-admin-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
 <p>Partitioned topics can be updated using the <a href="/docs/fr/next/pulsar-admin#update-partitioned-topic"><code>update-partitioned-topic</code></a> command.</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics update-partitioned-topic \</span>
   persistent://my-tenant/my-namespace/my-topic \
   --partitions 8
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="rest-api-2"></a><a href="#rest-api-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h4><a class="anchor" aria-hidden="true" id="rest-api-3"></a><a href="#rest-api-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
 <p><a href="https://pulsar.incubator.apache.org/en/admin-rest-api#operation/updatePartitionedTopic"><b>POST</b> <i>/admin/v2/persistent/:tenant/:cluster/:namespace/:destination/partitions</i></a>
 </p>
-<h4><a class="anchor" aria-hidden="true" id="java-2"></a><a href="#java-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<h4><a class="anchor" aria-hidden="true" id="java-3"></a><a href="#java-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <pre><code class="hljs css language-java">admin.persistentTopics().updatePartitionedTopic(persistentTopic, numPartitions);
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="delete"></a><a href="#delete" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
-<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-3"></a><a href="#pulsar-admin-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-4"></a><a href="#pulsar-admin-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
 <p>Partitioned topics can be deleted using the <a href="/docs/fr/next/pulsar-admin#delete-partitioned-topic"><code>delete-partitioned-topic</code></a> command, specifying the topic by name:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> bin/pulsar-admin topics delete-partitioned-topic \</span>
   persistent://my-tenant/my-namespace/my-topic
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="rest-api-3"></a><a href="#rest-api-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h4><a class="anchor" aria-hidden="true" id="rest-api-4"></a><a href="#rest-api-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
 <p><a href="https://pulsar.incubator.apache.org/en/admin-rest-api#operation/deletePartitionedTopic"><b>DELETE</b> <i>/admin/v2/persistent/:topic/:namespace/:destination/partitions</i></a>
 </p>
-<h4><a class="anchor" aria-hidden="true" id="java-3"></a><a href="#java-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<h4><a class="anchor" aria-hidden="true" id="java-4"></a><a href="#java-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <pre><code class="hljs css language-java">admin.persistentTopics().delete(persistentTopic);
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="list"></a><a href="#list" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 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>It provides a list of persistent topics existing under a given namespace.</p>
-<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-4"></a><a href="#pulsar-admin-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-5"></a><a href="#pulsar-admin-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics list tenant/namespace</span>
 persistent://tenant/namespace/topic1
 persistent://tenant/namespace/topic2
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="rest-api-4"></a><a href="#rest-api-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h4><a class="anchor" aria-hidden="true" id="rest-api-5"></a><a href="#rest-api-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-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><a href="https://pulsar.incubator.apache.org/en/admin-rest-api#operation/getPartitionedTopicList"><b>GET</b> <i>/admin/v2/persistent/:tenant/:namespace</i></a>
 </p>
-<h4><a class="anchor" aria-hidden="true" id="java-4"></a><a href="#java-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<h4><a class="anchor" aria-hidden="true" id="java-5"></a><a href="#java-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <pre><code class="hljs css language-java">admin.persistentTopics().getList(namespace);
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="stats"></a><a href="#stats" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
@@ -223,16 +237,16 @@ persistent://tenant/namespace/topic2
 <tr><td>inboundConnectedSince</td><td>The TCP connection being used to publish messages to the remote cluster. If there are no local publishers connected, this connection is automatically closed after a minute.</td></tr>
 </tbody>
 </table>
-<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-5"></a><a href="#pulsar-admin-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-6"></a><a href="#pulsar-admin-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
 <p>The stats for the partitioned topic and its connected producers and consumers can be fetched by using the <a href="/docs/fr/next/pulsar-admin#partitioned-stats"><code>partitioned-stats</code></a> command, specifying the topic by name:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics partitioned-stats \</span>
   persistent://test-tenant/namespace/topic \
   --per-partition        
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="rest-api-5"></a><a href="#rest-api-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h4><a class="anchor" aria-hidden="true" id="rest-api-6"></a><a href="#rest-api-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
 <p><a href="https://pulsar.incubator.apache.org/en/admin-rest-api#operation/getPartitionedStats"><b>GET</b> <i>/admin/v2/persistent/:tenant/:namespace/:topic/partitioned-stats</i></a>
 </p>
-<h4><a class="anchor" aria-hidden="true" id="java-5"></a><a href="#java-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<h4><a class="anchor" aria-hidden="true" id="java-6"></a><a href="#java-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <pre><code class="hljs css language-java">admin.persistentTopics().getStats(persistentTopic);
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="internal-stats"></a><a href="#internal-stats" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
@@ -301,18 +315,18 @@ persistent://tenant/namespace/topic2
   }
 }
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-6"></a><a href="#pulsar-admin-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<h4><a class="anchor" aria-hidden="true" id="pulsar-admin-7"></a><a href="#pulsar-admin-7" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
 <p>The internal stats for the partitioned topic can be fetched by using the <a href="/docs/fr/next/pulsar-admin#stats-internal"><code>stats-internal</code></a> command, specifying the topic by name:</p>
 <pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin topics stats-internal \</span>
   persistent://test-tenant/namespace/topic
 </code></pre>
-<h4><a class="anchor" aria-hidden="true" id="rest-api-6"></a><a href="#rest-api-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h4><a class="anchor" aria-hidden="true" id="rest-api-7"></a><a href="#rest-api-7" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
 <p><a href="https://pulsar.incubator.apache.org/en/admin-rest-api#operation/getInternalStats"><b>GET</b> <i>/admin/v2/persistent/:tenant/:namespace/:topic/internalStats</i></a>
 </p>
-<h4><a class="anchor" aria-hidden="true" id="java-6"></a><a href="#java-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<h4><a class="anchor" aria-hidden="true" id="java-7"></a><a href="#java-7" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
 <pre><code class="hljs css language-java">admin.persistentTopics().getInternalStats(persistentTopic);
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/admin-api-non-persistent-topics"><span class="arrow-prev">← </span><span>Non-Persistent topics</span></a><a class="docs-next button" href="/docs/fr/next/admin-api-schemas"><span>Schemas</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#partitioned-topics-resources">Partitioned topics resources</a><ul class="toc-h [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/admin-api-non-persistent-topics"><span class="arrow-prev">← </span><span>Non-Persistent topics</span></a><a class="docs-next button" href="/docs/fr/next/admin-api-schemas"><span>Schemas</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#partitioned-topics-resources">Partitioned topics resources</a><ul class="toc-h [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/fr/next/client-libraries-python.html b/content/docs/fr/next/client-libraries-python.html
index 481416c..b755c30 100644
--- a/content/docs/fr/next/client-libraries-python.html
+++ b/content/docs/fr/next/client-libraries-python.html
@@ -117,7 +117,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -131,7 +131,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
@@ -162,7 +162,7 @@ producer.send(Example(a=<span class="hljs-string">'Hello'</span>, b=<span class=
                   subscription_name=<span class="hljs-string">'my-subscription'</span>,
                   schema=AvroSchema(Example) )
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     ex = msg.value()
     print(<span class="hljs-string">"Received message a={} b={} c={}"</span>.format(ex.a, ex.b, ex.c))
diff --git a/content/docs/fr/next/client-libraries-python/index.html b/content/docs/fr/next/client-libraries-python/index.html
index 481416c..b755c30 100644
--- a/content/docs/fr/next/client-libraries-python/index.html
+++ b/content/docs/fr/next/client-libraries-python/index.html
@@ -117,7 +117,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -131,7 +131,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
@@ -162,7 +162,7 @@ producer.send(Example(a=<span class="hljs-string">'Hello'</span>, b=<span class=
                   subscription_name=<span class="hljs-string">'my-subscription'</span>,
                   schema=AvroSchema(Example) )
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     ex = msg.value()
     print(<span class="hljs-string">"Received message a={} b={} c={}"</span>.format(ex.a, ex.b, ex.c))
diff --git a/content/docs/fr/next/client-libraries-websocket.html b/content/docs/fr/next/client-libraries-websocket.html
index daae67d..415f719 100644
--- a/content/docs/fr/next/client-libraries-websocket.html
+++ b/content/docs/fr/next/client-libraries-websocket.html
@@ -355,7 +355,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -374,7 +374,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/fr/next/client-libraries-websocket/index.html b/content/docs/fr/next/client-libraries-websocket/index.html
index daae67d..415f719 100644
--- a/content/docs/fr/next/client-libraries-websocket/index.html
+++ b/content/docs/fr/next/client-libraries-websocket/index.html
@@ -355,7 +355,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -374,7 +374,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/fr/next/functions-api.html b/content/docs/fr/next/functions-api.html
index 768ff08..db4cc00 100644
--- a/content/docs/fr/next/functions-api.html
+++ b/content/docs/fr/next/functions-api.html
@@ -647,7 +647,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/fr/next/functions-api/index.html b/content/docs/fr/next/functions-api/index.html
index 768ff08..db4cc00 100644
--- a/content/docs/fr/next/functions-api/index.html
+++ b/content/docs/fr/next/functions-api/index.html
@@ -647,7 +647,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/fr/next/io-cdc-canal.html b/content/docs/fr/next/io-cdc-canal.html
new file mode 100644
index 0000000..2a455d5
--- /dev/null
+++ b/content/docs/fr/next/io-cdc-canal.html
@@ -0,0 +1,206 @@
+<!DOCTYPE html><html lang="fr"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>CDC Canal Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-configuration-options&quot; aria-hidden=&quot [...]
+"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="fr"/><meta property="og:title" content="CDC Canal Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-conf [...]
+"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
+              (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+              (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+              m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+              })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+              ga('create', 'UA-102219959-1', 'auto');
+              ga('send', 'pageview');
+            </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div clas [...]
+        const languagesMenuItem = document.getElementById("languages-menu");
+        const languagesDropDown = document.getElementById("languages-dropdown");
+        languagesMenuItem.addEventListener("click", function(event) {
+          event.preventDefault();
+
+          if (languagesDropDown.className == "hide") {
+            languagesDropDown.className = "visible";
+          } else {
+            languagesDropDown.className = "hide";
+          }
+        });
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/fr" target="_blank" rel="noreferrer noopener">Transla [...]
+<p>The Configuration is mostly related to Canal task config.</p>
+<table>
+<thead>
+<tr><th>Name</th><th>Required</th><th>Default</th><th>Description</th></tr>
+</thead>
+<tbody>
+<tr><td><code>zkServers</code></td><td><code>false</code></td><td><code>127.0.0.1:2181</code></td><td><code>The address and port of the zookeeper . if canal server configured to cluster mode</code></td></tr>
+<tr><td><code>batchSize</code></td><td><code>true</code></td><td><code>5120</code></td><td><code>Take 5120 records from the canal server in batches</code></td></tr>
+<tr><td><code>username</code></td><td><code>false</code></td><td>``</td><td><code>Canal server account, not MySQL</code></td></tr>
+<tr><td><code>password</code></td><td><code>false</code></td><td>``</td><td><code>Canal server password, not MySQL</code></td></tr>
+<tr><td><code>cluster</code></td><td><code>false</code></td><td><code>false</code></td><td><code>Decide whether to open cluster mode based on canal server configuration, true: cluster mode, false: standalone mode</code></td></tr>
+<tr><td><code>singleHostname</code></td><td><code>false</code></td><td><code>127.0.0.1</code></td><td><code>The address of canal server</code></td></tr>
+<tr><td><code>singlePort</code></td><td><code>false</code></td><td><code>11111</code></td><td><code>The port of canal server</code></td></tr>
+</tbody>
+</table>
+<h3><a class="anchor" aria-hidden="true" id="configuration-example"></a><a href="#configuration-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 [...]
+<p>Here is a configuration Json example:</p>
+<pre><code class="hljs css language-$json { &quot;zkServers&quot;: &quot;127.0.0.1:2181&quot;, &quot;batchSize&quot;: &quot;5120&quot;, &quot;destination&quot;: &quot;example&quot;, &quot;username&quot;: &quot;&quot;, &quot;password&quot;: &quot;&quot;, &quot;cluster&quot;: false, &quot;singleHostname&quot;: &quot;127.0.0.1&quot;, &quot;singlePort&quot;: &quot;11111&quot;, }">
+    You could also find the yaml example <span class="hljs-keyword">in</span> this [<span class="hljs-keyword">file</span>](https:<span class="hljs-comment">//github.com/apache/pulsar/blob/master/pulsar-io/canal/src/main/resources/canal-mysql-source-config.yaml), which has similar content below:</span>
+    
+    ```<span class="hljs-variable">$yaml</span>
+    configs:
+        zkServers: <span class="hljs-string">"127.0.0.1:2181"</span>
+        batchSize: <span class="hljs-string">"5120"</span>
+        destination: <span class="hljs-string">"example"</span>
+        username: <span class="hljs-string">""</span>
+        password: <span class="hljs-string">""</span>
+        <span class="hljs-keyword">cluster</span>: false
+        singleHostname: <span class="hljs-string">"127.0.0.1"</span>
+        singlePort: <span class="hljs-string">"11111"</span>
+    
+
+### Usage example
+
+Here is a simple example to store MySQL change data using above example config.
+
+- Start a MySQL server
+
+```<span class="hljs-variable">$bash</span> docker pull mysql:5.7 docker <span class="hljs-keyword">run</span> -<span class="hljs-keyword">d</span> -it --<span class="hljs-keyword">rm</span> --name pulsar-mysql -p 3306:3306 -<span class="hljs-keyword">e</span> MYSQL_ROOT_PASSWORD=canal -<span class="hljs-keyword">e</span> MYSQL_USER=mysqluser -<span class="hljs-keyword">e</span> MYSQL_PASSWORD=mysqlpw mysql:5.7
+
+    - Modify configuration files mysqld.cnf
+    
+    
+
+[mysqld] pid-<span class="hljs-keyword">file</span> = /<span class="hljs-keyword">var</span>/<span class="hljs-keyword">run</span>/mysqld/mysqld.pid socket = /<span class="hljs-keyword">var</span>/<span class="hljs-keyword">run</span>/mysqld/mysqld.sock datadir = /<span class="hljs-keyword">var</span>/lib/mysql
+
+# <span class="hljs-keyword">log</span>-<span class="hljs-keyword">error</span> = /<span class="hljs-keyword">var</span>/<span class="hljs-keyword">log</span>/mysql/<span class="hljs-keyword">error</span>.<span class="hljs-built_in">log</span>
+
+# <span class="hljs-keyword">By</span> default we only accept connections from localhost
+
+# bind-address = 127.0.0.1
+
+# Disabling symbolic-links is recommended to prevent assorted security risks
+
+symbolic-links=0 <span class="hljs-keyword">log</span>-bin=mysql-bin binlog-<span class="hljs-keyword">format</span>=ROW server_id=1
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- <span class="hljs-keyword">Copy</span> <span class="hljs-keyword">file</span> to mysql server from <span class="hljs-keyword">local</span> and restart mysql server
+    ```<span class="hljs-variable">$bash</span>
+    docker cp mysqld.cnf pulsar-mysql:/etc/mysql/mysql.<span class="hljs-keyword">conf</span>.<span class="hljs-keyword">d</span>/
+    docker restart pulsar-mysql
+    
+
+- Create <span class="hljs-keyword">test</span> database <span class="hljs-keyword">in</span> mysql server ```<span class="hljs-variable">$bash</span> docker exec -it pulsar-mysql /bin/bash mysql -<span class="hljs-keyword">h</span> 127.0.0.1 -uroot -pcanal -<span class="hljs-keyword">e</span> 'create database <span class="hljs-keyword">test</span>;'
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- Start canal server and connect mysql server
+    
+    
+
+docker pull canal/canal-server:v1.1.2 docker <span class="hljs-keyword">run</span> -<span class="hljs-keyword">d</span> -it --link pulsar-mysql -<span class="hljs-keyword">e</span> canal.auto.scan=false -<span class="hljs-keyword">e</span> canal.destinations=<span class="hljs-keyword">test</span> -<span class="hljs-keyword">e</span> canal.instance.master.address=pulsar-mysql:3306 -<span class="hljs-keyword">e</span> canal.instance.dbUsername=root -<span class="hljs-keyword">e</span> cana [...]
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- Start pulsar standalone
+    
+    ```<span class="hljs-variable">$bash</span>
+    docker pull apachepulsar/pulsar:2.3.0
+    docker <span class="hljs-keyword">run</span> -<span class="hljs-keyword">d</span> -it --link pulsar-canal-server -p 6650:6650 -p 8080:8080 -v <span class="hljs-variable">$PWD</span>/data:/pulsar/data --name pulsar-standalone apachepulsar/pulsar:2.3.0 bin/pulsar standalone
+    
+
+- Start pulsar-io <span class="hljs-keyword">in</span> standalone
+
+- Config <span class="hljs-keyword">file</span> canal-mysql-source-config.yaml
+
+```<span class="hljs-variable">$yaml</span> configs: zkServers: <span class="hljs-string">""</span> batchSize: <span class="hljs-string">"5120"</span> destination: <span class="hljs-string">"test"</span> username: <span class="hljs-string">""</span> password: <span class="hljs-string">""</span> <span class="hljs-keyword">cluster</span>: false singleHostname: <span class="hljs-string">"pulsar-canal-server"</span> singlePort: <span class="hljs-string">"11111"</span>
+
+    - Consumer <span class="hljs-keyword">file</span> pulsar-client.py <span class="hljs-keyword">for</span> <span class="hljs-keyword">test</span>
+    
+
+import pulsar
+
+client = pulsar.Client('pulsar:<span class="hljs-comment">//localhost:6650') consumer = client.subscribe('my-topic', subscription_name='my-sub')</span>
+
+<span class="hljs-keyword">while</span> True: msg = consumer.receive() <span class="hljs-keyword">print</span>(<span class="hljs-string">"Received message: '%s'"</span> % msg.data()) consumer.acknowledge(msg)
+
+client.<span class="hljs-keyword">close</span>()
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- <span class="hljs-keyword">Copy</span> config <span class="hljs-keyword">file</span> and <span class="hljs-keyword">test</span> <span class="hljs-keyword">file</span> to pulsar server
+    
+    ```<span class="hljs-variable">$bash</span>
+    docker cp canal-mysql-source-config.yaml pulsar-standalone:/pulsar/<span class="hljs-keyword">conf</span>/
+    docker cp pulsar-client.py pulsar-standalone:/pulsar/
+    
+
+- Download canal connector and start canal connector ```<span class="hljs-variable">$bash</span> docker exec -it pulsar-standalone /bin/bash wget http:<span class="hljs-comment">//apache.01link.hk/pulsar/pulsar-2.3.0/connectors/pulsar-io-canal-2.3.0.nar -P connectors ./bin/pulsar-admin source localrun --archive ./connectors/pulsar-io-canal-2.3.0.nar --classname org.apache.pulsar.io.canal.CanalStringSource --tenant public --namespace default --name canal --destination-topic-name my-topic  [...]
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- Consumption data 
+    
+    ```<span class="hljs-variable">$bash</span>
+    docker exec -it pulsar-standalone /bin/bash
+    python pulsar-client.py
+    
+
+- <span class="hljs-keyword">Open</span> another <span class="hljs-keyword">window</span> <span class="hljs-keyword">for</span> login mysql server
+
+```<span class="hljs-variable">$bash</span> docker exec -it pulsar-mysql /bin/bash mysql -<span class="hljs-keyword">h</span> 127.0.0.1 -uroot -pcanal
+
+    - Create <span class="hljs-keyword">table</span> and insert, delete, <span class="hljs-keyword">update</span> data <span class="hljs-keyword">in</span> mysql server
+    
+
+mysql&gt; <span class="hljs-keyword">use</span> <span class="hljs-keyword">test</span>; mysql&gt; show tables; mysql&gt; CREATE <span class="hljs-keyword">TABLE</span> <span class="hljs-keyword">IF</span> NOT EXISTS `test_table`(`test_id` INT UNSIGNED AUTO_INCREMENT,`test_title` VARCHAR(100) NOT NULL, `test_author` VARCHAR(40) NOT NULL, `test_date` DATE,PRIMARY KEY ( `test_id` ))ENGINE=InnoDB DEFAULT CHARSET=utf8; mysql&gt; INSERT INTO test_table (test_title, test_author, test_date) VALU [...]
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apache Software Foundation.</section><span><script>
+      const community = document.querySelector("a[href='#community']").parentNode;
+      const communityMenu =
+        '<li>' +
+        '<a id="community-menu" href="#">Community <span style="font-size: 0.75em">&nbsp;▼</span></a>' +
+        '<div id="community-dropdown" class="hide">' +
+          '<ul id="community-dropdown-items">' +
+            '<li><a href="/fr/contact">Contact</a></li>' +
+            '<li><a href="/fr/contributing">Contributing</a></li>' +
+            '<li><a href="/fr/events">Events</a></li>' +
+            '<li><a href="https://twitter.com/Apache_Pulsar" target="_blank">Twitter &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/wiki" target="_blank">Wiki &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/issues" target="_blank">Issue tracking &#x2750</a></li>' +
+            '<li>&nbsp;</li>' +
+            '<li><a href="/fr/resources">Resources</a></li>' +
+            '<li><a href="/fr/team">Team</a></li>' +
+          '</ul>' +
+        '</div>' +
+        '</li>';
+
+      community.innerHTML = communityMenu;
+
+      const communityMenuItem = document.getElementById("community-menu");
+      const communityDropDown = document.getElementById("community-dropdown");
+      communityMenuItem.addEventListener("click", function(event) {
+        event.preventDefault();
+
+        if (communityDropDown.className == 'hide') {
+          communityDropDown.className = 'visible';
+        } else {
+          communityDropDown.className = 'hide';
+        }
+      });
+    </script></span><span><script src="/js/pjax-api.min.js"></script><script>window.navfoo = new Pjax({
+            areas: [
+              // try to use the first query.
+              '.mainContainer, .docsNavContainer .toc .navWrapper, .onPageNav',
+              // fallback
+              'body'
+            ],
+            link: '.docsNavContainer:not(.docsSliderActive) a',
+            update: {
+              script: false,
+            }
+          });
+        </script></span></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</scri [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: 'd226a455cecdd4bc18a554c1b47e5b52',
+                indexName: 'apache_pulsar',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:fr","version:next"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/fr/next/io-cdc-canal/index.html b/content/docs/fr/next/io-cdc-canal/index.html
new file mode 100644
index 0000000..2a455d5
--- /dev/null
+++ b/content/docs/fr/next/io-cdc-canal/index.html
@@ -0,0 +1,206 @@
+<!DOCTYPE html><html lang="fr"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>CDC Canal Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-configuration-options&quot; aria-hidden=&quot [...]
+"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="fr"/><meta property="og:title" content="CDC Canal Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-conf [...]
+"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
+              (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+              (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+              m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+              })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+              ga('create', 'UA-102219959-1', 'auto');
+              ga('send', 'pageview');
+            </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div clas [...]
+        const languagesMenuItem = document.getElementById("languages-menu");
+        const languagesDropDown = document.getElementById("languages-dropdown");
+        languagesMenuItem.addEventListener("click", function(event) {
+          event.preventDefault();
+
+          if (languagesDropDown.className == "hide") {
+            languagesDropDown.className = "visible";
+          } else {
+            languagesDropDown.className = "hide";
+          }
+        });
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/fr" target="_blank" rel="noreferrer noopener">Transla [...]
+<p>The Configuration is mostly related to Canal task config.</p>
+<table>
+<thead>
+<tr><th>Name</th><th>Required</th><th>Default</th><th>Description</th></tr>
+</thead>
+<tbody>
+<tr><td><code>zkServers</code></td><td><code>false</code></td><td><code>127.0.0.1:2181</code></td><td><code>The address and port of the zookeeper . if canal server configured to cluster mode</code></td></tr>
+<tr><td><code>batchSize</code></td><td><code>true</code></td><td><code>5120</code></td><td><code>Take 5120 records from the canal server in batches</code></td></tr>
+<tr><td><code>username</code></td><td><code>false</code></td><td>``</td><td><code>Canal server account, not MySQL</code></td></tr>
+<tr><td><code>password</code></td><td><code>false</code></td><td>``</td><td><code>Canal server password, not MySQL</code></td></tr>
+<tr><td><code>cluster</code></td><td><code>false</code></td><td><code>false</code></td><td><code>Decide whether to open cluster mode based on canal server configuration, true: cluster mode, false: standalone mode</code></td></tr>
+<tr><td><code>singleHostname</code></td><td><code>false</code></td><td><code>127.0.0.1</code></td><td><code>The address of canal server</code></td></tr>
+<tr><td><code>singlePort</code></td><td><code>false</code></td><td><code>11111</code></td><td><code>The port of canal server</code></td></tr>
+</tbody>
+</table>
+<h3><a class="anchor" aria-hidden="true" id="configuration-example"></a><a href="#configuration-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 [...]
+<p>Here is a configuration Json example:</p>
+<pre><code class="hljs css language-$json { &quot;zkServers&quot;: &quot;127.0.0.1:2181&quot;, &quot;batchSize&quot;: &quot;5120&quot;, &quot;destination&quot;: &quot;example&quot;, &quot;username&quot;: &quot;&quot;, &quot;password&quot;: &quot;&quot;, &quot;cluster&quot;: false, &quot;singleHostname&quot;: &quot;127.0.0.1&quot;, &quot;singlePort&quot;: &quot;11111&quot;, }">
+    You could also find the yaml example <span class="hljs-keyword">in</span> this [<span class="hljs-keyword">file</span>](https:<span class="hljs-comment">//github.com/apache/pulsar/blob/master/pulsar-io/canal/src/main/resources/canal-mysql-source-config.yaml), which has similar content below:</span>
+    
+    ```<span class="hljs-variable">$yaml</span>
+    configs:
+        zkServers: <span class="hljs-string">"127.0.0.1:2181"</span>
+        batchSize: <span class="hljs-string">"5120"</span>
+        destination: <span class="hljs-string">"example"</span>
+        username: <span class="hljs-string">""</span>
+        password: <span class="hljs-string">""</span>
+        <span class="hljs-keyword">cluster</span>: false
+        singleHostname: <span class="hljs-string">"127.0.0.1"</span>
+        singlePort: <span class="hljs-string">"11111"</span>
+    
+
+### Usage example
+
+Here is a simple example to store MySQL change data using above example config.
+
+- Start a MySQL server
+
+```<span class="hljs-variable">$bash</span> docker pull mysql:5.7 docker <span class="hljs-keyword">run</span> -<span class="hljs-keyword">d</span> -it --<span class="hljs-keyword">rm</span> --name pulsar-mysql -p 3306:3306 -<span class="hljs-keyword">e</span> MYSQL_ROOT_PASSWORD=canal -<span class="hljs-keyword">e</span> MYSQL_USER=mysqluser -<span class="hljs-keyword">e</span> MYSQL_PASSWORD=mysqlpw mysql:5.7
+
+    - Modify configuration files mysqld.cnf
+    
+    
+
+[mysqld] pid-<span class="hljs-keyword">file</span> = /<span class="hljs-keyword">var</span>/<span class="hljs-keyword">run</span>/mysqld/mysqld.pid socket = /<span class="hljs-keyword">var</span>/<span class="hljs-keyword">run</span>/mysqld/mysqld.sock datadir = /<span class="hljs-keyword">var</span>/lib/mysql
+
+# <span class="hljs-keyword">log</span>-<span class="hljs-keyword">error</span> = /<span class="hljs-keyword">var</span>/<span class="hljs-keyword">log</span>/mysql/<span class="hljs-keyword">error</span>.<span class="hljs-built_in">log</span>
+
+# <span class="hljs-keyword">By</span> default we only accept connections from localhost
+
+# bind-address = 127.0.0.1
+
+# Disabling symbolic-links is recommended to prevent assorted security risks
+
+symbolic-links=0 <span class="hljs-keyword">log</span>-bin=mysql-bin binlog-<span class="hljs-keyword">format</span>=ROW server_id=1
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- <span class="hljs-keyword">Copy</span> <span class="hljs-keyword">file</span> to mysql server from <span class="hljs-keyword">local</span> and restart mysql server
+    ```<span class="hljs-variable">$bash</span>
+    docker cp mysqld.cnf pulsar-mysql:/etc/mysql/mysql.<span class="hljs-keyword">conf</span>.<span class="hljs-keyword">d</span>/
+    docker restart pulsar-mysql
+    
+
+- Create <span class="hljs-keyword">test</span> database <span class="hljs-keyword">in</span> mysql server ```<span class="hljs-variable">$bash</span> docker exec -it pulsar-mysql /bin/bash mysql -<span class="hljs-keyword">h</span> 127.0.0.1 -uroot -pcanal -<span class="hljs-keyword">e</span> 'create database <span class="hljs-keyword">test</span>;'
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- Start canal server and connect mysql server
+    
+    
+
+docker pull canal/canal-server:v1.1.2 docker <span class="hljs-keyword">run</span> -<span class="hljs-keyword">d</span> -it --link pulsar-mysql -<span class="hljs-keyword">e</span> canal.auto.scan=false -<span class="hljs-keyword">e</span> canal.destinations=<span class="hljs-keyword">test</span> -<span class="hljs-keyword">e</span> canal.instance.master.address=pulsar-mysql:3306 -<span class="hljs-keyword">e</span> canal.instance.dbUsername=root -<span class="hljs-keyword">e</span> cana [...]
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- Start pulsar standalone
+    
+    ```<span class="hljs-variable">$bash</span>
+    docker pull apachepulsar/pulsar:2.3.0
+    docker <span class="hljs-keyword">run</span> -<span class="hljs-keyword">d</span> -it --link pulsar-canal-server -p 6650:6650 -p 8080:8080 -v <span class="hljs-variable">$PWD</span>/data:/pulsar/data --name pulsar-standalone apachepulsar/pulsar:2.3.0 bin/pulsar standalone
+    
+
+- Start pulsar-io <span class="hljs-keyword">in</span> standalone
+
+- Config <span class="hljs-keyword">file</span> canal-mysql-source-config.yaml
+
+```<span class="hljs-variable">$yaml</span> configs: zkServers: <span class="hljs-string">""</span> batchSize: <span class="hljs-string">"5120"</span> destination: <span class="hljs-string">"test"</span> username: <span class="hljs-string">""</span> password: <span class="hljs-string">""</span> <span class="hljs-keyword">cluster</span>: false singleHostname: <span class="hljs-string">"pulsar-canal-server"</span> singlePort: <span class="hljs-string">"11111"</span>
+
+    - Consumer <span class="hljs-keyword">file</span> pulsar-client.py <span class="hljs-keyword">for</span> <span class="hljs-keyword">test</span>
+    
+
+import pulsar
+
+client = pulsar.Client('pulsar:<span class="hljs-comment">//localhost:6650') consumer = client.subscribe('my-topic', subscription_name='my-sub')</span>
+
+<span class="hljs-keyword">while</span> True: msg = consumer.receive() <span class="hljs-keyword">print</span>(<span class="hljs-string">"Received message: '%s'"</span> % msg.data()) consumer.acknowledge(msg)
+
+client.<span class="hljs-keyword">close</span>()
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- <span class="hljs-keyword">Copy</span> config <span class="hljs-keyword">file</span> and <span class="hljs-keyword">test</span> <span class="hljs-keyword">file</span> to pulsar server
+    
+    ```<span class="hljs-variable">$bash</span>
+    docker cp canal-mysql-source-config.yaml pulsar-standalone:/pulsar/<span class="hljs-keyword">conf</span>/
+    docker cp pulsar-client.py pulsar-standalone:/pulsar/
+    
+
+- Download canal connector and start canal connector ```<span class="hljs-variable">$bash</span> docker exec -it pulsar-standalone /bin/bash wget http:<span class="hljs-comment">//apache.01link.hk/pulsar/pulsar-2.3.0/connectors/pulsar-io-canal-2.3.0.nar -P connectors ./bin/pulsar-admin source localrun --archive ./connectors/pulsar-io-canal-2.3.0.nar --classname org.apache.pulsar.io.canal.CanalStringSource --tenant public --namespace default --name canal --destination-topic-name my-topic  [...]
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- Consumption data 
+    
+    ```<span class="hljs-variable">$bash</span>
+    docker exec -it pulsar-standalone /bin/bash
+    python pulsar-client.py
+    
+
+- <span class="hljs-keyword">Open</span> another <span class="hljs-keyword">window</span> <span class="hljs-keyword">for</span> login mysql server
+
+```<span class="hljs-variable">$bash</span> docker exec -it pulsar-mysql /bin/bash mysql -<span class="hljs-keyword">h</span> 127.0.0.1 -uroot -pcanal
+
+    - Create <span class="hljs-keyword">table</span> and insert, delete, <span class="hljs-keyword">update</span> data <span class="hljs-keyword">in</span> mysql server
+    
+
+mysql&gt; <span class="hljs-keyword">use</span> <span class="hljs-keyword">test</span>; mysql&gt; show tables; mysql&gt; CREATE <span class="hljs-keyword">TABLE</span> <span class="hljs-keyword">IF</span> NOT EXISTS `test_table`(`test_id` INT UNSIGNED AUTO_INCREMENT,`test_title` VARCHAR(100) NOT NULL, `test_author` VARCHAR(40) NOT NULL, `test_date` DATE,PRIMARY KEY ( `test_id` ))ENGINE=InnoDB DEFAULT CHARSET=utf8; mysql&gt; INSERT INTO test_table (test_title, test_author, test_date) VALU [...]
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apache Software Foundation.</section><span><script>
+      const community = document.querySelector("a[href='#community']").parentNode;
+      const communityMenu =
+        '<li>' +
+        '<a id="community-menu" href="#">Community <span style="font-size: 0.75em">&nbsp;▼</span></a>' +
+        '<div id="community-dropdown" class="hide">' +
+          '<ul id="community-dropdown-items">' +
+            '<li><a href="/fr/contact">Contact</a></li>' +
+            '<li><a href="/fr/contributing">Contributing</a></li>' +
+            '<li><a href="/fr/events">Events</a></li>' +
+            '<li><a href="https://twitter.com/Apache_Pulsar" target="_blank">Twitter &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/wiki" target="_blank">Wiki &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/issues" target="_blank">Issue tracking &#x2750</a></li>' +
+            '<li>&nbsp;</li>' +
+            '<li><a href="/fr/resources">Resources</a></li>' +
+            '<li><a href="/fr/team">Team</a></li>' +
+          '</ul>' +
+        '</div>' +
+        '</li>';
+
+      community.innerHTML = communityMenu;
+
+      const communityMenuItem = document.getElementById("community-menu");
+      const communityDropDown = document.getElementById("community-dropdown");
+      communityMenuItem.addEventListener("click", function(event) {
+        event.preventDefault();
+
+        if (communityDropDown.className == 'hide') {
+          communityDropDown.className = 'visible';
+        } else {
+          communityDropDown.className = 'hide';
+        }
+      });
+    </script></span><span><script src="/js/pjax-api.min.js"></script><script>window.navfoo = new Pjax({
+            areas: [
+              // try to use the first query.
+              '.mainContainer, .docsNavContainer .toc .navWrapper, .onPageNav',
+              // fallback
+              'body'
+            ],
+            link: '.docsNavContainer:not(.docsSliderActive) a',
+            update: {
+              script: false,
+            }
+          });
+        </script></span></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</scri [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: 'd226a455cecdd4bc18a554c1b47e5b52',
+                indexName: 'apache_pulsar',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:fr","version:next"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/fr/next/io-cdc-debezium.html b/content/docs/fr/next/io-cdc-debezium.html
new file mode 100644
index 0000000..61385b0
--- /dev/null
+++ b/content/docs/fr/next/io-cdc-debezium.html
@@ -0,0 +1,184 @@
+<!DOCTYPE html><html lang="fr"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>CDC Debezium Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-configuration-options&quot; aria-hidden=&q [...]
+"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="fr"/><meta property="og:title" content="CDC Debezium Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-c [...]
+"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
+              (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+              (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+              m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+              })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+              ga('create', 'UA-102219959-1', 'auto');
+              ga('send', 'pageview');
+            </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div clas [...]
+        const languagesMenuItem = document.getElementById("languages-menu");
+        const languagesDropDown = document.getElementById("languages-dropdown");
+        languagesMenuItem.addEventListener("click", function(event) {
+          event.preventDefault();
+
+          if (languagesDropDown.className == "hide") {
+            languagesDropDown.className = "visible";
+          } else {
+            languagesDropDown.className = "hide";
+          }
+        });
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/fr" target="_blank" rel="noreferrer noopener">Transla [...]
+<p>The Configuration is mostly related to Debezium task config, besides this we should provides the service URL of Pulsar cluster, and topic names that used to store offset and history.</p>
+<table>
+<thead>
+<tr><th>Name</th><th>Required</th><th>Default</th><th>Description</th></tr>
+</thead>
+<tbody>
+<tr><td><code>task.class</code></td><td><code>true</code></td><td><code>null</code></td><td>A source task class that implemented in Debezium.</td></tr>
+<tr><td><code>database.hostname</code></td><td><code>true</code></td><td><code>null</code></td><td>The address of the Database server.</td></tr>
+<tr><td><code>database.port</code></td><td><code>true</code></td><td><code>null</code></td><td>The port number of the Database server..</td></tr>
+<tr><td><code>database.user</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the Database user that has the required privileges.</td></tr>
+<tr><td><code>database.password</code></td><td><code>true</code></td><td><code>null</code></td><td>The password for the Database user that has the required privileges.</td></tr>
+<tr><td><code>database.server.id</code></td><td><code>true</code></td><td><code>null</code></td><td>The connector’s identifier that must be unique within the Database cluster and similar to Database’s server-id configuration property.</td></tr>
+<tr><td><code>database.server.name</code></td><td><code>true</code></td><td><code>null</code></td><td>The logical name of the Database server/cluster, which forms a namespace and is used in all the names of the Kafka topics to which the connector writes, the Kafka Connect schema names, and the namespaces of the corresponding Avro schema when the Avro Connector is used.</td></tr>
+<tr><td><code>database.whitelist</code></td><td><code>false</code></td><td><code>null</code></td><td>A list of all databases hosted by this server that this connector will monitor. This is optional, and there are other properties for listing the databases and tables to include or exclude from monitoring.</td></tr>
+<tr><td><code>key.converter</code></td><td><code>true</code></td><td><code>null</code></td><td>The converter provided by Kafka Connect to convert record key.</td></tr>
+<tr><td><code>value.converter</code></td><td><code>true</code></td><td><code>null</code></td><td>The converter provided by Kafka Connect to convert record value.</td></tr>
+<tr><td><code>database.history</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the database history class name.</td></tr>
+<tr><td><code>database.history.pulsar.topic</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the database history topic where the connector will write and recover DDL statements. This topic is for internal use only and should not be used by consumers.</td></tr>
+<tr><td><code>database.history.pulsar.service.url</code></td><td><code>true</code></td><td><code>null</code></td><td>Pulsar cluster service url for history topic.</td></tr>
+<tr><td><code>pulsar.service.url</code></td><td><code>true</code></td><td><code>null</code></td><td>Pulsar cluster service url.</td></tr>
+<tr><td><code>offset.storage.topic</code></td><td><code>true</code></td><td><code>null</code></td><td>Record the last committed offsets that the connector successfully completed.</td></tr>
+</tbody>
+</table>
+<h3><a class="anchor" aria-hidden="true" id="configuration-example"></a><a href="#configuration-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 [...]
+<p>Here is a configuration Json example:</p>
+<pre><code class="hljs css language-$json { &quot;tenant&quot;: &quot;public&quot;, &quot;namespace&quot;: &quot;default&quot;, &quot;name&quot;: &quot;debezium-kafka-source&quot;, &quot;className&quot;: &quot;org.apache.pulsar.io.kafka.connect.KafkaConnectSource&quot; , &quot;topicName&quot;: &quot;kafka-connect-topic&quot;, &quot;configs&quot;: { &quot;task.class&quot;: &quot;io.debezium.connector.mysql.MySqlConnectorTask&quot;, &quot;database.hostname&quot;: &quot;localhost&quot;, &qu [...]
+    &lt;<span class="hljs-keyword">br</span> /&gt;You could also find the yaml example <span class="hljs-keyword">in</span> this [<span class="hljs-keyword">file</span>](https:<span class="hljs-comment">//github.com/apache/pulsar/blob/master/pulsar-io/kafka-connect-adaptor/src/main/resources/debezium-mysql-source-config.yaml), which has similar content below:</span>
+    
+    ```<span class="hljs-variable">$yaml</span>
+    tenant: <span class="hljs-string">"public"</span>
+    namespace: <span class="hljs-string">"default"</span>
+    name: <span class="hljs-string">"debezium-kafka-source"</span>
+    topicName: <span class="hljs-string">"kafka-connect-topic"</span>
+    archive: <span class="hljs-string">"connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar"</span>
+    
+    ##autoAck: true
+    parallelism: 1
+    
+    configs:
+      ## sourceTask
+      task.<span class="hljs-keyword">class</span>: <span class="hljs-string">"io.debezium.connector.mysql.MySqlConnectorTask"</span>
+    
+      ## config <span class="hljs-keyword">for</span> mysql, docker image: debezium/example-mysql:0.8
+      database.hostname: <span class="hljs-string">"localhost"</span>
+      database.port: <span class="hljs-string">"3306"</span>
+      database.user: <span class="hljs-string">"debezium"</span>
+      database.password: <span class="hljs-string">"dbz"</span>
+      database.server.id: <span class="hljs-string">"184054"</span>
+      database.server.name: <span class="hljs-string">"dbserver1"</span>
+      database.whitelist: <span class="hljs-string">"inventory"</span>
+    
+      database.history: <span class="hljs-string">"org.apache.pulsar.io.debezium.PulsarDatabaseHistory"</span>
+      database.history.pulsar.topic: <span class="hljs-string">"history-topic"</span>
+      database.history.pulsar.service.url: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>
+      ## KEY_CONVERTER_CLASS_CONFIG, VALUE_CONVERTER_CLASS_CONFIG
+      key.converter: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>
+      value.converter: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>
+      ## PULSAR_SERVICE_URL_CONFIG
+      pulsar.service.url: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>
+      ## OFFSET_STORAGE_TOPIC_CONFIG
+      offset.storage.topic: <span class="hljs-string">"offset-topic"</span>
+    
+
+### Usage example
+
+Here is a simple example to store MySQL change data using above example config.
+
+- Start a MySQL server with <span class="hljs-keyword">an</span> example database, from <span class="hljs-keyword">which</span> Debezium can <span class="hljs-keyword">capture</span> changes. ```<span class="hljs-variable">$bash</span> docker <span class="hljs-keyword">run</span> -it --<span class="hljs-keyword">rm</span> --name mysql -p 3306:3306 -<span class="hljs-keyword">e</span> MYSQL_ROOT_PASSWORD=debezium -<span class="hljs-keyword">e</span> MYSQL_USER=mysqluser -<span class="hljs [...]
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- Start a Pulsar service locally <span class="hljs-keyword">in</span> standalone mode.
+    ```<span class="hljs-variable">$bash</span>
+     bin/pulsar standalone
+    
+
+- Start pulsar debezium connector, with <span class="hljs-keyword">local</span> <span class="hljs-keyword">run</span> mode, and using above yaml config <span class="hljs-keyword">file</span>. Please make sure that the nar <span class="hljs-keyword">file</span> is available <span class="hljs-keyword">as</span> configured <span class="hljs-keyword">in</span> path `connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar`. ```<span class="hljs-variable">$bash</span> bin/pulsar-admin so [...]
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- Subscribe the topic <span class="hljs-keyword">for</span> <span class="hljs-keyword">table</span> `inventory.products`.
+    
+
+bin/pulsar-client consume -s <span class="hljs-string">"sub-products"</span> public/default/dbserver1.inventory.products -<span class="hljs-keyword">n</span> 0
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- start a MySQL <span class="hljs-keyword">cli</span> docker connector, and <span class="hljs-keyword">use</span> it we could change to the <span class="hljs-keyword">table</span> `products` <span class="hljs-keyword">in</span> MySQL server.
+    ```<span class="hljs-variable">$bash</span>
+    <span class="hljs-variable">$docker</span> <span class="hljs-keyword">run</span> -it --<span class="hljs-keyword">rm</span> --name mysqlterm --link mysql --<span class="hljs-keyword">rm</span> mysql:5.7 <span class="hljs-keyword">sh</span> -c 'exec mysql -<span class="hljs-keyword">h</span><span class="hljs-string">"$MYSQL_PORT_3306_TCP_ADDR"</span> -P<span class="hljs-string">"$MYSQL_PORT_3306_TCP_PORT"</span> -uroot -p<span class="hljs-string">"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"</span>'
+    
+
+This command will pop <span class="hljs-keyword">out</span> MySQL <span class="hljs-keyword">cli</span>, <span class="hljs-keyword">in</span> this <span class="hljs-keyword">cli</span>, we could <span class="hljs-keyword">do</span> a change <span class="hljs-keyword">in</span> <span class="hljs-keyword">table</span> products, <span class="hljs-keyword">use</span> commands below to change the name of 2 items <span class="hljs-keyword">in</span> <span class="hljs-keyword">table</span> products:
+
+    mysql&gt; <span class="hljs-keyword">use</span> inventory;
+    mysql&gt; show tables;
+    mysql&gt; SELECT * FROM  products ;
+    mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-keyword">SET</span> name='1111111111' WHERE id=101;
+    mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-keyword">SET</span> name='1111111111' WHERE id=107;
+    
+
+- <span class="hljs-keyword">In</span> above subscribe topic terminal <span class="hljs-keyword">tab</span>, we could find that 2 changes has been kept into products topic.</code></pre>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apache Software Foundation.</section><span><script>
+      const community = document.querySelector("a[href='#community']").parentNode;
+      const communityMenu =
+        '<li>' +
+        '<a id="community-menu" href="#">Community <span style="font-size: 0.75em">&nbsp;▼</span></a>' +
+        '<div id="community-dropdown" class="hide">' +
+          '<ul id="community-dropdown-items">' +
+            '<li><a href="/fr/contact">Contact</a></li>' +
+            '<li><a href="/fr/contributing">Contributing</a></li>' +
+            '<li><a href="/fr/events">Events</a></li>' +
+            '<li><a href="https://twitter.com/Apache_Pulsar" target="_blank">Twitter &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/wiki" target="_blank">Wiki &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/issues" target="_blank">Issue tracking &#x2750</a></li>' +
+            '<li>&nbsp;</li>' +
+            '<li><a href="/fr/resources">Resources</a></li>' +
+            '<li><a href="/fr/team">Team</a></li>' +
+          '</ul>' +
+        '</div>' +
+        '</li>';
+
+      community.innerHTML = communityMenu;
+
+      const communityMenuItem = document.getElementById("community-menu");
+      const communityDropDown = document.getElementById("community-dropdown");
+      communityMenuItem.addEventListener("click", function(event) {
+        event.preventDefault();
+
+        if (communityDropDown.className == 'hide') {
+          communityDropDown.className = 'visible';
+        } else {
+          communityDropDown.className = 'hide';
+        }
+      });
+    </script></span><span><script src="/js/pjax-api.min.js"></script><script>window.navfoo = new Pjax({
+            areas: [
+              // try to use the first query.
+              '.mainContainer, .docsNavContainer .toc .navWrapper, .onPageNav',
+              // fallback
+              'body'
+            ],
+            link: '.docsNavContainer:not(.docsSliderActive) a',
+            update: {
+              script: false,
+            }
+          });
+        </script></span></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</scri [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: 'd226a455cecdd4bc18a554c1b47e5b52',
+                indexName: 'apache_pulsar',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:fr","version:next"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/fr/next/io-cdc-debezium/index.html b/content/docs/fr/next/io-cdc-debezium/index.html
new file mode 100644
index 0000000..61385b0
--- /dev/null
+++ b/content/docs/fr/next/io-cdc-debezium/index.html
@@ -0,0 +1,184 @@
+<!DOCTYPE html><html lang="fr"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>CDC Debezium Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-configuration-options&quot; aria-hidden=&q [...]
+"/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="fr"/><meta property="og:title" content="CDC Debezium Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-c [...]
+"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
+              (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+              (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+              m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+              })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+              ga('create', 'UA-102219959-1', 'auto');
+              ga('send', 'pageview');
+            </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div clas [...]
+        const languagesMenuItem = document.getElementById("languages-menu");
+        const languagesDropDown = document.getElementById("languages-dropdown");
+        languagesMenuItem.addEventListener("click", function(event) {
+          event.preventDefault();
+
+          if (languagesDropDown.className == "hide") {
+            languagesDropDown.className = "visible";
+          } else {
+            languagesDropDown.className = "hide";
+          }
+        });
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/fr" target="_blank" rel="noreferrer noopener">Transla [...]
+<p>The Configuration is mostly related to Debezium task config, besides this we should provides the service URL of Pulsar cluster, and topic names that used to store offset and history.</p>
+<table>
+<thead>
+<tr><th>Name</th><th>Required</th><th>Default</th><th>Description</th></tr>
+</thead>
+<tbody>
+<tr><td><code>task.class</code></td><td><code>true</code></td><td><code>null</code></td><td>A source task class that implemented in Debezium.</td></tr>
+<tr><td><code>database.hostname</code></td><td><code>true</code></td><td><code>null</code></td><td>The address of the Database server.</td></tr>
+<tr><td><code>database.port</code></td><td><code>true</code></td><td><code>null</code></td><td>The port number of the Database server..</td></tr>
+<tr><td><code>database.user</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the Database user that has the required privileges.</td></tr>
+<tr><td><code>database.password</code></td><td><code>true</code></td><td><code>null</code></td><td>The password for the Database user that has the required privileges.</td></tr>
+<tr><td><code>database.server.id</code></td><td><code>true</code></td><td><code>null</code></td><td>The connector’s identifier that must be unique within the Database cluster and similar to Database’s server-id configuration property.</td></tr>
+<tr><td><code>database.server.name</code></td><td><code>true</code></td><td><code>null</code></td><td>The logical name of the Database server/cluster, which forms a namespace and is used in all the names of the Kafka topics to which the connector writes, the Kafka Connect schema names, and the namespaces of the corresponding Avro schema when the Avro Connector is used.</td></tr>
+<tr><td><code>database.whitelist</code></td><td><code>false</code></td><td><code>null</code></td><td>A list of all databases hosted by this server that this connector will monitor. This is optional, and there are other properties for listing the databases and tables to include or exclude from monitoring.</td></tr>
+<tr><td><code>key.converter</code></td><td><code>true</code></td><td><code>null</code></td><td>The converter provided by Kafka Connect to convert record key.</td></tr>
+<tr><td><code>value.converter</code></td><td><code>true</code></td><td><code>null</code></td><td>The converter provided by Kafka Connect to convert record value.</td></tr>
+<tr><td><code>database.history</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the database history class name.</td></tr>
+<tr><td><code>database.history.pulsar.topic</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the database history topic where the connector will write and recover DDL statements. This topic is for internal use only and should not be used by consumers.</td></tr>
+<tr><td><code>database.history.pulsar.service.url</code></td><td><code>true</code></td><td><code>null</code></td><td>Pulsar cluster service url for history topic.</td></tr>
+<tr><td><code>pulsar.service.url</code></td><td><code>true</code></td><td><code>null</code></td><td>Pulsar cluster service url.</td></tr>
+<tr><td><code>offset.storage.topic</code></td><td><code>true</code></td><td><code>null</code></td><td>Record the last committed offsets that the connector successfully completed.</td></tr>
+</tbody>
+</table>
+<h3><a class="anchor" aria-hidden="true" id="configuration-example"></a><a href="#configuration-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 [...]
+<p>Here is a configuration Json example:</p>
+<pre><code class="hljs css language-$json { &quot;tenant&quot;: &quot;public&quot;, &quot;namespace&quot;: &quot;default&quot;, &quot;name&quot;: &quot;debezium-kafka-source&quot;, &quot;className&quot;: &quot;org.apache.pulsar.io.kafka.connect.KafkaConnectSource&quot; , &quot;topicName&quot;: &quot;kafka-connect-topic&quot;, &quot;configs&quot;: { &quot;task.class&quot;: &quot;io.debezium.connector.mysql.MySqlConnectorTask&quot;, &quot;database.hostname&quot;: &quot;localhost&quot;, &qu [...]
+    &lt;<span class="hljs-keyword">br</span> /&gt;You could also find the yaml example <span class="hljs-keyword">in</span> this [<span class="hljs-keyword">file</span>](https:<span class="hljs-comment">//github.com/apache/pulsar/blob/master/pulsar-io/kafka-connect-adaptor/src/main/resources/debezium-mysql-source-config.yaml), which has similar content below:</span>
+    
+    ```<span class="hljs-variable">$yaml</span>
+    tenant: <span class="hljs-string">"public"</span>
+    namespace: <span class="hljs-string">"default"</span>
+    name: <span class="hljs-string">"debezium-kafka-source"</span>
+    topicName: <span class="hljs-string">"kafka-connect-topic"</span>
+    archive: <span class="hljs-string">"connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar"</span>
+    
+    ##autoAck: true
+    parallelism: 1
+    
+    configs:
+      ## sourceTask
+      task.<span class="hljs-keyword">class</span>: <span class="hljs-string">"io.debezium.connector.mysql.MySqlConnectorTask"</span>
+    
+      ## config <span class="hljs-keyword">for</span> mysql, docker image: debezium/example-mysql:0.8
+      database.hostname: <span class="hljs-string">"localhost"</span>
+      database.port: <span class="hljs-string">"3306"</span>
+      database.user: <span class="hljs-string">"debezium"</span>
+      database.password: <span class="hljs-string">"dbz"</span>
+      database.server.id: <span class="hljs-string">"184054"</span>
+      database.server.name: <span class="hljs-string">"dbserver1"</span>
+      database.whitelist: <span class="hljs-string">"inventory"</span>
+    
+      database.history: <span class="hljs-string">"org.apache.pulsar.io.debezium.PulsarDatabaseHistory"</span>
+      database.history.pulsar.topic: <span class="hljs-string">"history-topic"</span>
+      database.history.pulsar.service.url: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>
+      ## KEY_CONVERTER_CLASS_CONFIG, VALUE_CONVERTER_CLASS_CONFIG
+      key.converter: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>
+      value.converter: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>
+      ## PULSAR_SERVICE_URL_CONFIG
+      pulsar.service.url: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>
+      ## OFFSET_STORAGE_TOPIC_CONFIG
+      offset.storage.topic: <span class="hljs-string">"offset-topic"</span>
+    
+
+### Usage example
+
+Here is a simple example to store MySQL change data using above example config.
+
+- Start a MySQL server with <span class="hljs-keyword">an</span> example database, from <span class="hljs-keyword">which</span> Debezium can <span class="hljs-keyword">capture</span> changes. ```<span class="hljs-variable">$bash</span> docker <span class="hljs-keyword">run</span> -it --<span class="hljs-keyword">rm</span> --name mysql -p 3306:3306 -<span class="hljs-keyword">e</span> MYSQL_ROOT_PASSWORD=debezium -<span class="hljs-keyword">e</span> MYSQL_USER=mysqluser -<span class="hljs [...]
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- Start a Pulsar service locally <span class="hljs-keyword">in</span> standalone mode.
+    ```<span class="hljs-variable">$bash</span>
+     bin/pulsar standalone
+    
+
+- Start pulsar debezium connector, with <span class="hljs-keyword">local</span> <span class="hljs-keyword">run</span> mode, and using above yaml config <span class="hljs-keyword">file</span>. Please make sure that the nar <span class="hljs-keyword">file</span> is available <span class="hljs-keyword">as</span> configured <span class="hljs-keyword">in</span> path `connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar`. ```<span class="hljs-variable">$bash</span> bin/pulsar-admin so [...]
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- Subscribe the topic <span class="hljs-keyword">for</span> <span class="hljs-keyword">table</span> `inventory.products`.
+    
+
+bin/pulsar-client consume -s <span class="hljs-string">"sub-products"</span> public/default/dbserver1.inventory.products -<span class="hljs-keyword">n</span> 0
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- start a MySQL <span class="hljs-keyword">cli</span> docker connector, and <span class="hljs-keyword">use</span> it we could change to the <span class="hljs-keyword">table</span> `products` <span class="hljs-keyword">in</span> MySQL server.
+    ```<span class="hljs-variable">$bash</span>
+    <span class="hljs-variable">$docker</span> <span class="hljs-keyword">run</span> -it --<span class="hljs-keyword">rm</span> --name mysqlterm --link mysql --<span class="hljs-keyword">rm</span> mysql:5.7 <span class="hljs-keyword">sh</span> -c 'exec mysql -<span class="hljs-keyword">h</span><span class="hljs-string">"$MYSQL_PORT_3306_TCP_ADDR"</span> -P<span class="hljs-string">"$MYSQL_PORT_3306_TCP_PORT"</span> -uroot -p<span class="hljs-string">"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"</span>'
+    
+
+This command will pop <span class="hljs-keyword">out</span> MySQL <span class="hljs-keyword">cli</span>, <span class="hljs-keyword">in</span> this <span class="hljs-keyword">cli</span>, we could <span class="hljs-keyword">do</span> a change <span class="hljs-keyword">in</span> <span class="hljs-keyword">table</span> products, <span class="hljs-keyword">use</span> commands below to change the name of 2 items <span class="hljs-keyword">in</span> <span class="hljs-keyword">table</span> products:
+
+    mysql&gt; <span class="hljs-keyword">use</span> inventory;
+    mysql&gt; show tables;
+    mysql&gt; SELECT * FROM  products ;
+    mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-keyword">SET</span> name='1111111111' WHERE id=101;
+    mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-keyword">SET</span> name='1111111111' WHERE id=107;
+    
+
+- <span class="hljs-keyword">In</span> above subscribe topic terminal <span class="hljs-keyword">tab</span>, we could find that 2 changes has been kept into products topic.</code></pre>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apache Software Foundation.</section><span><script>
+      const community = document.querySelector("a[href='#community']").parentNode;
+      const communityMenu =
+        '<li>' +
+        '<a id="community-menu" href="#">Community <span style="font-size: 0.75em">&nbsp;▼</span></a>' +
+        '<div id="community-dropdown" class="hide">' +
+          '<ul id="community-dropdown-items">' +
+            '<li><a href="/fr/contact">Contact</a></li>' +
+            '<li><a href="/fr/contributing">Contributing</a></li>' +
+            '<li><a href="/fr/events">Events</a></li>' +
+            '<li><a href="https://twitter.com/Apache_Pulsar" target="_blank">Twitter &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/wiki" target="_blank">Wiki &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/issues" target="_blank">Issue tracking &#x2750</a></li>' +
+            '<li>&nbsp;</li>' +
+            '<li><a href="/fr/resources">Resources</a></li>' +
+            '<li><a href="/fr/team">Team</a></li>' +
+          '</ul>' +
+        '</div>' +
+        '</li>';
+
+      community.innerHTML = communityMenu;
+
+      const communityMenuItem = document.getElementById("community-menu");
+      const communityDropDown = document.getElementById("community-dropdown");
+      communityMenuItem.addEventListener("click", function(event) {
+        event.preventDefault();
+
+        if (communityDropDown.className == 'hide') {
+          communityDropDown.className = 'visible';
+        } else {
+          communityDropDown.className = 'hide';
+        }
+      });
+    </script></span><span><script src="/js/pjax-api.min.js"></script><script>window.navfoo = new Pjax({
+            areas: [
+              // try to use the first query.
+              '.mainContainer, .docsNavContainer .toc .navWrapper, .onPageNav',
+              // fallback
+              'body'
+            ],
+            link: '.docsNavContainer:not(.docsSliderActive) a',
+            update: {
+              script: false,
+            }
+          });
+        </script></span></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</scri [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: 'd226a455cecdd4bc18a554c1b47e5b52',
+                indexName: 'apache_pulsar',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:fr","version:next"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/fr/next/io-cdc.html b/content/docs/fr/next/io-cdc.html
index 06d551d..d1e2e18 100644
--- a/content/docs/fr/next/io-cdc.html
+++ b/content/docs/fr/next/io-cdc.html
@@ -72,105 +72,12 @@
             });
         </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/fr" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">CDC Connector</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="source"></a><a href="#source" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria- [...]
 <p>The CDC Source connector is used to capture change log of existing databases like MySQL, MongoDB, PostgreSQL into Pulsar.</p>
-<p>The CDC Source connector is built on top of <a href="https://debezium.io/">Debezium</a>. This connector stores all data into Pulsar Cluster in a persistent, replicated and partitioned way. This CDC Source are tested by using MySQL, and you could get more information regarding how it works at <a href="https://debezium.io/docs/connectors/mysql/">this link</a>. Regarding how Debezium works, please reference to <a href="https://debezium.io/docs/tutorial/">Debezium tutorial</a>. It is reco [...]
-<h3><a class="anchor" aria-hidden="true" id="source-configuration-options"></a><a href="#source-configuration-options" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 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>The Configuration is mostly related to Debezium task config, besides this we should provides the service URL of Pulsar cluster, and topic names that used to store offset and history.</p>
-<table>
-<thead>
-<tr><th>Name</th><th>Required</th><th>Default</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>task.class</code></td><td><code>true</code></td><td><code>null</code></td><td>A source task class that implemented in Debezium.</td></tr>
-<tr><td><code>database.hostname</code></td><td><code>true</code></td><td><code>null</code></td><td>The address of the Database server.</td></tr>
-<tr><td><code>database.port</code></td><td><code>true</code></td><td><code>null</code></td><td>The port number of the Database server..</td></tr>
-<tr><td><code>database.user</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the Database user that has the required privileges.</td></tr>
-<tr><td><code>database.password</code></td><td><code>true</code></td><td><code>null</code></td><td>The password for the Database user that has the required privileges.</td></tr>
-<tr><td><code>database.server.id</code></td><td><code>true</code></td><td><code>null</code></td><td>The connector’s identifier that must be unique within the Database cluster and similar to Database’s server-id configuration property.</td></tr>
-<tr><td><code>database.server.name</code></td><td><code>true</code></td><td><code>null</code></td><td>The logical name of the Database server/cluster, which forms a namespace and is used in all the names of the Kafka topics to which the connector writes, the Kafka Connect schema names, and the namespaces of the corresponding Avro schema when the Avro Connector is used.</td></tr>
-<tr><td><code>database.whitelist</code></td><td><code>false</code></td><td><code>null</code></td><td>A list of all databases hosted by this server that this connector will monitor. This is optional, and there are other properties for listing the databases and tables to include or exclude from monitoring.</td></tr>
-<tr><td><code>key.converter</code></td><td><code>true</code></td><td><code>null</code></td><td>The converter provided by Kafka Connect to convert record key.</td></tr>
-<tr><td><code>value.converter</code></td><td><code>true</code></td><td><code>null</code></td><td>The converter provided by Kafka Connect to convert record value.</td></tr>
-<tr><td><code>database.history</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the database history class name.</td></tr>
-<tr><td><code>database.history.pulsar.topic</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the database history topic where the connector will write and recover DDL statements. This topic is for internal use only and should not be used by consumers.</td></tr>
-<tr><td><code>database.history.pulsar.service.url</code></td><td><code>true</code></td><td><code>null</code></td><td>Pulsar cluster service url for history topic.</td></tr>
-<tr><td><code>pulsar.service.url</code></td><td><code>true</code></td><td><code>null</code></td><td>Pulsar cluster service url.</td></tr>
-<tr><td><code>offset.storage.topic</code></td><td><code>true</code></td><td><code>null</code></td><td>Record the last committed offsets that the connector successfully completed.</td></tr>
-</tbody>
-</table>
-<h3><a class="anchor" aria-hidden="true" id="configuration-example"></a><a href="#configuration-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 [...]
-<p>Here is a configuration Json example:</p>
-<pre><code class="hljs css language-$json { &quot;tenant&quot;: &quot;public&quot;, &quot;namespace&quot;: &quot;default&quot;, &quot;name&quot;: &quot;debezium-kafka-source&quot;, &quot;className&quot;: &quot;org.apache.pulsar.io.kafka.connect.KafkaConnectSource&quot; , &quot;topicName&quot;: &quot;kafka-connect-topic&quot;, &quot;configs&quot;: { &quot;task.class&quot;: &quot;io.debezium.connector.mysql.MySqlConnectorTask&quot;, &quot;database.hostname&quot;: &quot;localhost&quot;, &qu [...]
-    &lt;<span class="hljs-keyword">br</span> /&gt;You could also find the yaml example <span class="hljs-keyword">in</span> this [<span class="hljs-keyword">file</span>](https:<span class="hljs-comment">//github.com/apache/pulsar/blob/master/pulsar-io/kafka-connect-adaptor/src/main/resources/debezium-mysql-source-config.yaml), which has similar content below:</span>
-    
-    ```<span class="hljs-variable">$yaml</span>
-    tenant: <span class="hljs-string">"public"</span>
-    namespace: <span class="hljs-string">"default"</span>
-    name: <span class="hljs-string">"debezium-kafka-source"</span>
-    topicName: <span class="hljs-string">"kafka-connect-topic"</span>
-    archive: <span class="hljs-string">"connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar"</span>
-    
-    ##autoAck: true
-    parallelism: 1
-    
-    configs:
-      ## sourceTask
-      task.<span class="hljs-keyword">class</span>: <span class="hljs-string">"io.debezium.connector.mysql.MySqlConnectorTask"</span>
-    
-      ## config <span class="hljs-keyword">for</span> mysql, docker image: debezium/example-mysql:0.8
-      database.hostname: <span class="hljs-string">"localhost"</span>
-      database.port: <span class="hljs-string">"3306"</span>
-      database.user: <span class="hljs-string">"debezium"</span>
-      database.password: <span class="hljs-string">"dbz"</span>
-      database.server.id: <span class="hljs-string">"184054"</span>
-      database.server.name: <span class="hljs-string">"dbserver1"</span>
-      database.whitelist: <span class="hljs-string">"inventory"</span>
-    
-      database.history: <span class="hljs-string">"org.apache.pulsar.io.debezium.PulsarDatabaseHistory"</span>
-      database.history.pulsar.topic: <span class="hljs-string">"history-topic"</span>
-      database.history.pulsar.service.url: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>
-      ## KEY_CONVERTER_CLASS_CONFIG, VALUE_CONVERTER_CLASS_CONFIG
-      key.converter: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>
-      value.converter: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>
-      ## PULSAR_SERVICE_URL_CONFIG
-      pulsar.service.url: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>
-      ## OFFSET_STORAGE_TOPIC_CONFIG
-      offset.storage.topic: <span class="hljs-string">"offset-topic"</span>
-    
-
-### Usage example
-
-Here is a simple example to store MySQL change data using above example config.
-
-- Start a MySQL server with <span class="hljs-keyword">an</span> example database, from <span class="hljs-keyword">which</span> Debezium can <span class="hljs-keyword">capture</span> changes. ```<span class="hljs-variable">$bash</span> docker <span class="hljs-keyword">run</span> -it --<span class="hljs-keyword">rm</span> --name mysql -p 3306:3306 -<span class="hljs-keyword">e</span> MYSQL_ROOT_PASSWORD=debezium -<span class="hljs-keyword">e</span> MYSQL_USER=mysqluser -<span class="hljs [...]
-
-    &lt;<span class="hljs-keyword">br</span> /&gt;- Start a Pulsar service locally <span class="hljs-keyword">in</span> standalone mode.
-    ```<span class="hljs-variable">$bash</span>
-     bin/pulsar standalone
-    
-
-- Start pulsar debezium connector, with <span class="hljs-keyword">local</span> <span class="hljs-keyword">run</span> mode, and using above yaml config <span class="hljs-keyword">file</span>. Please make sure that the nar <span class="hljs-keyword">file</span> is available <span class="hljs-keyword">as</span> configured <span class="hljs-keyword">in</span> path `connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar`. ```<span class="hljs-variable">$bash</span> bin/pulsar-admin so [...]
-
-    &lt;<span class="hljs-keyword">br</span> /&gt;- Subscribe the topic <span class="hljs-keyword">for</span> <span class="hljs-keyword">table</span> `inventory.products`.
-    
-
-bin/pulsar-client consume -s <span class="hljs-string">"sub-products"</span> public/default/dbserver1.inventory.products -<span class="hljs-keyword">n</span> 0
-
-    &lt;<span class="hljs-keyword">br</span> /&gt;- start a MySQL <span class="hljs-keyword">cli</span> docker connector, and <span class="hljs-keyword">use</span> it we could change to the <span class="hljs-keyword">table</span> `products` <span class="hljs-keyword">in</span> MySQL server.
-    ```<span class="hljs-variable">$bash</span>
-    <span class="hljs-variable">$docker</span> <span class="hljs-keyword">run</span> -it --<span class="hljs-keyword">rm</span> --name mysqlterm --link mysql --<span class="hljs-keyword">rm</span> mysql:5.7 <span class="hljs-keyword">sh</span> -c 'exec mysql -<span class="hljs-keyword">h</span><span class="hljs-string">"$MYSQL_PORT_3306_TCP_ADDR"</span> -P<span class="hljs-string">"$MYSQL_PORT_3306_TCP_PORT"</span> -uroot -p<span class="hljs-string">"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"</span>'
-    
-
-This command will pop <span class="hljs-keyword">out</span> MySQL <span class="hljs-keyword">cli</span>, <span class="hljs-keyword">in</span> this <span class="hljs-keyword">cli</span>, we could <span class="hljs-keyword">do</span> a change <span class="hljs-keyword">in</span> <span class="hljs-keyword">table</span> products, <span class="hljs-keyword">use</span> commands below to change the name of 2 items <span class="hljs-keyword">in</span> <span class="hljs-keyword">table</span> products:
-
-    mysql&gt; <span class="hljs-keyword">use</span> inventory;
-    mysql&gt; show tables;
-    mysql&gt; SELECT * FROM  products ;
-    mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-keyword">SET</span> name='1111111111' WHERE id=101;
-    mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-keyword">SET</span> name='1111111111' WHERE id=107;
-    
-
-- <span class="hljs-keyword">In</span> above subscribe topic terminal <span class="hljs-keyword">tab</span>, we could find that 2 changes has been kept into products topic.</code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/io-develop"><span class="arrow-prev">← </span><span>Developing Connectors</span></a><a class="docs-next button" href="/docs/fr/next/sql-overview"><span>Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#source">Source</a><ul class="toc-headings"><li><a href="#source-configuration-options">Source Configura [...]
+<p>The CDC Source connector is built on top of <a href="https://debezium.io/">Debezium</a> and <a href="https://github.com/alibaba/canal">Canal</a>. This connector stores all data into Pulsar Cluster in a persistent, replicated and partitioned way. This CDC Source are tested by using MySQL, and you could get more information regarding how it works at <a href="https://debezium.io/docs/connectors/mysql/">this debezium link</a> or <a href="https://github.com/alibaba/canal/wiki">this canal l [...]
+<ul>
+<li><a href="/docs/fr/next/io-cdc-debezium">Debezium Connector</a></li>
+<li><a href="/docs/fr/next/io-cdc-canal">Alibaba Canal Connector</a></li>
+</ul>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/io-develop"><span class="arrow-prev">← </span><span>Developing Connectors</span></a><a class="docs-next button" href="/docs/fr/next/sql-overview"><span>Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#source">Source</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="copyrigh [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/fr/next/io-cdc/index.html b/content/docs/fr/next/io-cdc/index.html
index 06d551d..d1e2e18 100644
--- a/content/docs/fr/next/io-cdc/index.html
+++ b/content/docs/fr/next/io-cdc/index.html
@@ -72,105 +72,12 @@
             });
         </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/fr" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">CDC Connector</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="source"></a><a href="#source" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria- [...]
 <p>The CDC Source connector is used to capture change log of existing databases like MySQL, MongoDB, PostgreSQL into Pulsar.</p>
-<p>The CDC Source connector is built on top of <a href="https://debezium.io/">Debezium</a>. This connector stores all data into Pulsar Cluster in a persistent, replicated and partitioned way. This CDC Source are tested by using MySQL, and you could get more information regarding how it works at <a href="https://debezium.io/docs/connectors/mysql/">this link</a>. Regarding how Debezium works, please reference to <a href="https://debezium.io/docs/tutorial/">Debezium tutorial</a>. It is reco [...]
-<h3><a class="anchor" aria-hidden="true" id="source-configuration-options"></a><a href="#source-configuration-options" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 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>The Configuration is mostly related to Debezium task config, besides this we should provides the service URL of Pulsar cluster, and topic names that used to store offset and history.</p>
-<table>
-<thead>
-<tr><th>Name</th><th>Required</th><th>Default</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>task.class</code></td><td><code>true</code></td><td><code>null</code></td><td>A source task class that implemented in Debezium.</td></tr>
-<tr><td><code>database.hostname</code></td><td><code>true</code></td><td><code>null</code></td><td>The address of the Database server.</td></tr>
-<tr><td><code>database.port</code></td><td><code>true</code></td><td><code>null</code></td><td>The port number of the Database server..</td></tr>
-<tr><td><code>database.user</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the Database user that has the required privileges.</td></tr>
-<tr><td><code>database.password</code></td><td><code>true</code></td><td><code>null</code></td><td>The password for the Database user that has the required privileges.</td></tr>
-<tr><td><code>database.server.id</code></td><td><code>true</code></td><td><code>null</code></td><td>The connector’s identifier that must be unique within the Database cluster and similar to Database’s server-id configuration property.</td></tr>
-<tr><td><code>database.server.name</code></td><td><code>true</code></td><td><code>null</code></td><td>The logical name of the Database server/cluster, which forms a namespace and is used in all the names of the Kafka topics to which the connector writes, the Kafka Connect schema names, and the namespaces of the corresponding Avro schema when the Avro Connector is used.</td></tr>
-<tr><td><code>database.whitelist</code></td><td><code>false</code></td><td><code>null</code></td><td>A list of all databases hosted by this server that this connector will monitor. This is optional, and there are other properties for listing the databases and tables to include or exclude from monitoring.</td></tr>
-<tr><td><code>key.converter</code></td><td><code>true</code></td><td><code>null</code></td><td>The converter provided by Kafka Connect to convert record key.</td></tr>
-<tr><td><code>value.converter</code></td><td><code>true</code></td><td><code>null</code></td><td>The converter provided by Kafka Connect to convert record value.</td></tr>
-<tr><td><code>database.history</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the database history class name.</td></tr>
-<tr><td><code>database.history.pulsar.topic</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the database history topic where the connector will write and recover DDL statements. This topic is for internal use only and should not be used by consumers.</td></tr>
-<tr><td><code>database.history.pulsar.service.url</code></td><td><code>true</code></td><td><code>null</code></td><td>Pulsar cluster service url for history topic.</td></tr>
-<tr><td><code>pulsar.service.url</code></td><td><code>true</code></td><td><code>null</code></td><td>Pulsar cluster service url.</td></tr>
-<tr><td><code>offset.storage.topic</code></td><td><code>true</code></td><td><code>null</code></td><td>Record the last committed offsets that the connector successfully completed.</td></tr>
-</tbody>
-</table>
-<h3><a class="anchor" aria-hidden="true" id="configuration-example"></a><a href="#configuration-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 [...]
-<p>Here is a configuration Json example:</p>
-<pre><code class="hljs css language-$json { &quot;tenant&quot;: &quot;public&quot;, &quot;namespace&quot;: &quot;default&quot;, &quot;name&quot;: &quot;debezium-kafka-source&quot;, &quot;className&quot;: &quot;org.apache.pulsar.io.kafka.connect.KafkaConnectSource&quot; , &quot;topicName&quot;: &quot;kafka-connect-topic&quot;, &quot;configs&quot;: { &quot;task.class&quot;: &quot;io.debezium.connector.mysql.MySqlConnectorTask&quot;, &quot;database.hostname&quot;: &quot;localhost&quot;, &qu [...]
-    &lt;<span class="hljs-keyword">br</span> /&gt;You could also find the yaml example <span class="hljs-keyword">in</span> this [<span class="hljs-keyword">file</span>](https:<span class="hljs-comment">//github.com/apache/pulsar/blob/master/pulsar-io/kafka-connect-adaptor/src/main/resources/debezium-mysql-source-config.yaml), which has similar content below:</span>
-    
-    ```<span class="hljs-variable">$yaml</span>
-    tenant: <span class="hljs-string">"public"</span>
-    namespace: <span class="hljs-string">"default"</span>
-    name: <span class="hljs-string">"debezium-kafka-source"</span>
-    topicName: <span class="hljs-string">"kafka-connect-topic"</span>
-    archive: <span class="hljs-string">"connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar"</span>
-    
-    ##autoAck: true
-    parallelism: 1
-    
-    configs:
-      ## sourceTask
-      task.<span class="hljs-keyword">class</span>: <span class="hljs-string">"io.debezium.connector.mysql.MySqlConnectorTask"</span>
-    
-      ## config <span class="hljs-keyword">for</span> mysql, docker image: debezium/example-mysql:0.8
-      database.hostname: <span class="hljs-string">"localhost"</span>
-      database.port: <span class="hljs-string">"3306"</span>
-      database.user: <span class="hljs-string">"debezium"</span>
-      database.password: <span class="hljs-string">"dbz"</span>
-      database.server.id: <span class="hljs-string">"184054"</span>
-      database.server.name: <span class="hljs-string">"dbserver1"</span>
-      database.whitelist: <span class="hljs-string">"inventory"</span>
-    
-      database.history: <span class="hljs-string">"org.apache.pulsar.io.debezium.PulsarDatabaseHistory"</span>
-      database.history.pulsar.topic: <span class="hljs-string">"history-topic"</span>
-      database.history.pulsar.service.url: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>
-      ## KEY_CONVERTER_CLASS_CONFIG, VALUE_CONVERTER_CLASS_CONFIG
-      key.converter: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>
-      value.converter: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>
-      ## PULSAR_SERVICE_URL_CONFIG
-      pulsar.service.url: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>
-      ## OFFSET_STORAGE_TOPIC_CONFIG
-      offset.storage.topic: <span class="hljs-string">"offset-topic"</span>
-    
-
-### Usage example
-
-Here is a simple example to store MySQL change data using above example config.
-
-- Start a MySQL server with <span class="hljs-keyword">an</span> example database, from <span class="hljs-keyword">which</span> Debezium can <span class="hljs-keyword">capture</span> changes. ```<span class="hljs-variable">$bash</span> docker <span class="hljs-keyword">run</span> -it --<span class="hljs-keyword">rm</span> --name mysql -p 3306:3306 -<span class="hljs-keyword">e</span> MYSQL_ROOT_PASSWORD=debezium -<span class="hljs-keyword">e</span> MYSQL_USER=mysqluser -<span class="hljs [...]
-
-    &lt;<span class="hljs-keyword">br</span> /&gt;- Start a Pulsar service locally <span class="hljs-keyword">in</span> standalone mode.
-    ```<span class="hljs-variable">$bash</span>
-     bin/pulsar standalone
-    
-
-- Start pulsar debezium connector, with <span class="hljs-keyword">local</span> <span class="hljs-keyword">run</span> mode, and using above yaml config <span class="hljs-keyword">file</span>. Please make sure that the nar <span class="hljs-keyword">file</span> is available <span class="hljs-keyword">as</span> configured <span class="hljs-keyword">in</span> path `connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar`. ```<span class="hljs-variable">$bash</span> bin/pulsar-admin so [...]
-
-    &lt;<span class="hljs-keyword">br</span> /&gt;- Subscribe the topic <span class="hljs-keyword">for</span> <span class="hljs-keyword">table</span> `inventory.products`.
-    
-
-bin/pulsar-client consume -s <span class="hljs-string">"sub-products"</span> public/default/dbserver1.inventory.products -<span class="hljs-keyword">n</span> 0
-
-    &lt;<span class="hljs-keyword">br</span> /&gt;- start a MySQL <span class="hljs-keyword">cli</span> docker connector, and <span class="hljs-keyword">use</span> it we could change to the <span class="hljs-keyword">table</span> `products` <span class="hljs-keyword">in</span> MySQL server.
-    ```<span class="hljs-variable">$bash</span>
-    <span class="hljs-variable">$docker</span> <span class="hljs-keyword">run</span> -it --<span class="hljs-keyword">rm</span> --name mysqlterm --link mysql --<span class="hljs-keyword">rm</span> mysql:5.7 <span class="hljs-keyword">sh</span> -c 'exec mysql -<span class="hljs-keyword">h</span><span class="hljs-string">"$MYSQL_PORT_3306_TCP_ADDR"</span> -P<span class="hljs-string">"$MYSQL_PORT_3306_TCP_PORT"</span> -uroot -p<span class="hljs-string">"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"</span>'
-    
-
-This command will pop <span class="hljs-keyword">out</span> MySQL <span class="hljs-keyword">cli</span>, <span class="hljs-keyword">in</span> this <span class="hljs-keyword">cli</span>, we could <span class="hljs-keyword">do</span> a change <span class="hljs-keyword">in</span> <span class="hljs-keyword">table</span> products, <span class="hljs-keyword">use</span> commands below to change the name of 2 items <span class="hljs-keyword">in</span> <span class="hljs-keyword">table</span> products:
-
-    mysql&gt; <span class="hljs-keyword">use</span> inventory;
-    mysql&gt; show tables;
-    mysql&gt; SELECT * FROM  products ;
-    mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-keyword">SET</span> name='1111111111' WHERE id=101;
-    mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-keyword">SET</span> name='1111111111' WHERE id=107;
-    
-
-- <span class="hljs-keyword">In</span> above subscribe topic terminal <span class="hljs-keyword">tab</span>, we could find that 2 changes has been kept into products topic.</code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/io-develop"><span class="arrow-prev">← </span><span>Developing Connectors</span></a><a class="docs-next button" href="/docs/fr/next/sql-overview"><span>Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#source">Source</a><ul class="toc-headings"><li><a href="#source-configuration-options">Source Configura [...]
+<p>The CDC Source connector is built on top of <a href="https://debezium.io/">Debezium</a> and <a href="https://github.com/alibaba/canal">Canal</a>. This connector stores all data into Pulsar Cluster in a persistent, replicated and partitioned way. This CDC Source are tested by using MySQL, and you could get more information regarding how it works at <a href="https://debezium.io/docs/connectors/mysql/">this debezium link</a> or <a href="https://github.com/alibaba/canal/wiki">this canal l [...]
+<ul>
+<li><a href="/docs/fr/next/io-cdc-debezium">Debezium Connector</a></li>
+<li><a href="/docs/fr/next/io-cdc-canal">Alibaba Canal Connector</a></li>
+</ul>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/io-develop"><span class="arrow-prev">← </span><span>Developing Connectors</span></a><a class="docs-next button" href="/docs/fr/next/sql-overview"><span>Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#source">Source</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="copyrigh [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/fr/next/pulsar-admin.html b/content/docs/fr/next/pulsar-admin.html
index 119caa0..68a110f 100644
--- a/content/docs/fr/next/pulsar-admin.html
+++ b/content/docs/fr/next/pulsar-admin.html
@@ -1460,7 +1460,7 @@
 <p>Usage</p>
 <pre><code class="hljs css language-bash">$ pulsar-admin topics subcommand
 </code></pre>
-<p>Subcommands * <code>compact</code> * <code>compaction-status</code> * <code>offload</code> * <code>offload-status</code> * <code>create-partitioned-topic</code> * <code>delete-partitioned-topic</code> * <code>get-partitioned-topic-metadata</code> * <code>update-partitioned-topic</code> * <code>list</code> * <code>list-in-bundle</code> * <code>terminate</code> * <code>permissions</code> * <code>grant-permission</code> * <code>revoke-permission</code> * <code>lookup</code> * <code>bundl [...]
+<p>Subcommands * <code>compact</code> * <code>compaction-status</code> * <code>offload</code> * <code>offload-status</code> * <code>create-partitioned-topic</code> * <code>delete-partitioned-topic</code> * <code>create</code> * <code>get-partitioned-topic-metadata</code> * <code>update-partitioned-topic</code> * <code>list</code> * <code>list-in-bundle</code> * <code>terminate</code> * <code>permissions</code> * <code>grant-permission</code> * <code>revoke-permission</code> * <code>looku [...]
 <h3><a class="anchor" aria-hidden="true" id="compact"></a><a href="#compact" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 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>Run compaction on the specified topic (persistent topics only)</p>
 <p>Usage</p>
@@ -1527,6 +1527,11 @@
 <p>Usage</p>
 <pre><code class="hljs css language-bash">$ pulsar-admin topics delete-partitioned-topic {persistent|non-persistent}
 </code></pre>
+<h3><a class="anchor" aria-hidden="true" id="create-5"></a><a href="#create-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 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>Creates a non-partitioned topic. A non-partitioned topic must explicitly be created by the user if allowAutoTopicCreation or createIfMissing is disabled.</p>
+<p>Usage</p>
+<pre><code class="hljs css language-bash">$ pulsar-admin topics create {persistent|non-persistent}://tenant/namespace/topic
+</code></pre>
 <h3><a class="anchor" aria-hidden="true" id="get-partitioned-topic-metadata"></a><a href="#get-partitioned-topic-metadata" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 1 [...]
 <p>Get the partitioned topic metadata. If the topic is not created or is a non-partitioned topic, this will return an empty topic with zero partitions.</p>
 <p>Usage</p>
@@ -1767,7 +1772,7 @@
 <p>Usage</p>
 <pre><code class="hljs css language-bash">$ pulsar-admin tenants get tenant-name
 </code></pre>
-<h3><a class="anchor" aria-hidden="true" id="create-5"></a><a href="#create-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<h3><a class="anchor" aria-hidden="true" id="create-6"></a><a href="#create-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <p>Creates a new tenant</p>
 <p>Usage</p>
 <pre><code class="hljs css language-bash">$ pulsar-admin tenants create tenant-name options
@@ -1914,7 +1919,7 @@
 <tr><td><code>-t</code>, <code>--type</code></td><td>The type of the schema (avro or json)</td><td></td></tr>
 </tbody>
 </table>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/reference-cli-tools"><span class="arrow-prev">← </span><span>Pulsar CLI tools</span></a><a class="docs-next button" href="/docs/fr/next/reference-configuration"><span>Pulsar configuration</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#broker-stats"><code>broker-stats</code></a><ul class="toc-headings"><li><a h [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/reference-cli-tools"><span class="arrow-prev">← </span><span>Pulsar CLI tools</span></a><a class="docs-next button" href="/docs/fr/next/reference-configuration"><span>Pulsar configuration</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#broker-stats"><code>broker-stats</code></a><ul class="toc-headings"><li><a h [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/fr/next/pulsar-admin/index.html b/content/docs/fr/next/pulsar-admin/index.html
index 119caa0..68a110f 100644
--- a/content/docs/fr/next/pulsar-admin/index.html
+++ b/content/docs/fr/next/pulsar-admin/index.html
@@ -1460,7 +1460,7 @@
 <p>Usage</p>
 <pre><code class="hljs css language-bash">$ pulsar-admin topics subcommand
 </code></pre>
-<p>Subcommands * <code>compact</code> * <code>compaction-status</code> * <code>offload</code> * <code>offload-status</code> * <code>create-partitioned-topic</code> * <code>delete-partitioned-topic</code> * <code>get-partitioned-topic-metadata</code> * <code>update-partitioned-topic</code> * <code>list</code> * <code>list-in-bundle</code> * <code>terminate</code> * <code>permissions</code> * <code>grant-permission</code> * <code>revoke-permission</code> * <code>lookup</code> * <code>bundl [...]
+<p>Subcommands * <code>compact</code> * <code>compaction-status</code> * <code>offload</code> * <code>offload-status</code> * <code>create-partitioned-topic</code> * <code>delete-partitioned-topic</code> * <code>create</code> * <code>get-partitioned-topic-metadata</code> * <code>update-partitioned-topic</code> * <code>list</code> * <code>list-in-bundle</code> * <code>terminate</code> * <code>permissions</code> * <code>grant-permission</code> * <code>revoke-permission</code> * <code>looku [...]
 <h3><a class="anchor" aria-hidden="true" id="compact"></a><a href="#compact" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 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>Run compaction on the specified topic (persistent topics only)</p>
 <p>Usage</p>
@@ -1527,6 +1527,11 @@
 <p>Usage</p>
 <pre><code class="hljs css language-bash">$ pulsar-admin topics delete-partitioned-topic {persistent|non-persistent}
 </code></pre>
+<h3><a class="anchor" aria-hidden="true" id="create-5"></a><a href="#create-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 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>Creates a non-partitioned topic. A non-partitioned topic must explicitly be created by the user if allowAutoTopicCreation or createIfMissing is disabled.</p>
+<p>Usage</p>
+<pre><code class="hljs css language-bash">$ pulsar-admin topics create {persistent|non-persistent}://tenant/namespace/topic
+</code></pre>
 <h3><a class="anchor" aria-hidden="true" id="get-partitioned-topic-metadata"></a><a href="#get-partitioned-topic-metadata" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 1 [...]
 <p>Get the partitioned topic metadata. If the topic is not created or is a non-partitioned topic, this will return an empty topic with zero partitions.</p>
 <p>Usage</p>
@@ -1767,7 +1772,7 @@
 <p>Usage</p>
 <pre><code class="hljs css language-bash">$ pulsar-admin tenants get tenant-name
 </code></pre>
-<h3><a class="anchor" aria-hidden="true" id="create-5"></a><a href="#create-5" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<h3><a class="anchor" aria-hidden="true" id="create-6"></a><a href="#create-6" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <p>Creates a new tenant</p>
 <p>Usage</p>
 <pre><code class="hljs css language-bash">$ pulsar-admin tenants create tenant-name options
@@ -1914,7 +1919,7 @@
 <tr><td><code>-t</code>, <code>--type</code></td><td>The type of the schema (avro or json)</td><td></td></tr>
 </tbody>
 </table>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/reference-cli-tools"><span class="arrow-prev">← </span><span>Pulsar CLI tools</span></a><a class="docs-next button" href="/docs/fr/next/reference-configuration"><span>Pulsar configuration</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#broker-stats"><code>broker-stats</code></a><ul class="toc-headings"><li><a h [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/reference-cli-tools"><span class="arrow-prev">← </span><span>Pulsar CLI tools</span></a><a class="docs-next button" href="/docs/fr/next/reference-configuration"><span>Pulsar configuration</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#broker-stats"><code>broker-stats</code></a><ul class="toc-headings"><li><a h [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/fr/next/reference-cli-tools.html b/content/docs/fr/next/reference-cli-tools.html
index e75699e..e193e57 100644
--- a/content/docs/fr/next/reference-cli-tools.html
+++ b/content/docs/fr/next/reference-cli-tools.html
@@ -299,7 +299,7 @@ $ pulsar command
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--auth-params</code></td><td>Authentication parameters, for example key1:val1,key2:val2</td><td></td></tr>
+<tr><td><code>--auth-params</code></td><td>Authentication parameters, whose format is determined by the implementation of method <code>configure</code> in authentication plugin class, for example &quot;key1:val1,key2:val2&quot; or &quot;{&quot;key1&quot;:&quot;val1&quot;,&quot;key2&quot;:&quot;val2&quot;}&quot;</td><td></td></tr>
 <tr><td><code>--auth-plugin</code></td><td>Authentication plugin class name</td><td></td></tr>
 <tr><td><code>--url</code></td><td>Broker URL to which to connect</td><td><a href="pulsar://localhost:6650/">pulsar://localhost:6650/</a></td></tr>
 </tbody>
diff --git a/content/docs/fr/next/reference-cli-tools/index.html b/content/docs/fr/next/reference-cli-tools/index.html
index e75699e..e193e57 100644
--- a/content/docs/fr/next/reference-cli-tools/index.html
+++ b/content/docs/fr/next/reference-cli-tools/index.html
@@ -299,7 +299,7 @@ $ pulsar command
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--auth-params</code></td><td>Authentication parameters, for example key1:val1,key2:val2</td><td></td></tr>
+<tr><td><code>--auth-params</code></td><td>Authentication parameters, whose format is determined by the implementation of method <code>configure</code> in authentication plugin class, for example &quot;key1:val1,key2:val2&quot; or &quot;{&quot;key1&quot;:&quot;val1&quot;,&quot;key2&quot;:&quot;val2&quot;}&quot;</td><td></td></tr>
 <tr><td><code>--auth-plugin</code></td><td>Authentication plugin class name</td><td></td></tr>
 <tr><td><code>--url</code></td><td>Broker URL to which to connect</td><td><a href="pulsar://localhost:6650/">pulsar://localhost:6650/</a></td></tr>
 </tbody>
diff --git a/content/docs/fr/next/security-tls-authentication.html b/content/docs/fr/next/security-tls-authentication.html
index 0d07d98..796a718 100644
--- a/content/docs/fr/next/security-tls-authentication.html
+++ b/content/docs/fr/next/security-tls-authentication.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/fr/next/security-tls-authentication/index.html b/content/docs/fr/next/security-tls-authentication/index.html
index 0d07d98..796a718 100644
--- a/content/docs/fr/next/security-tls-authentication/index.html
+++ b/content/docs/fr/next/security-tls-authentication/index.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/fr/next/security-tls-transport.html b/content/docs/fr/next/security-tls-transport.html
index 1bf2b17..4e6bc70 100644
--- a/content/docs/fr/next/security-tls-transport.html
+++ b/content/docs/fr/next/security-tls-transport.html
@@ -201,7 +201,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/fr/next/security-tls-transport/index.html b/content/docs/fr/next/security-tls-transport/index.html
index 1bf2b17..4e6bc70 100644
--- a/content/docs/fr/next/security-tls-transport/index.html
+++ b/content/docs/fr/next/security-tls-transport/index.html
@@ -201,7 +201,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/fr/next/standalone-docker.html b/content/docs/fr/next/standalone-docker.html
index e567be8..7ca496f 100644
--- a/content/docs/fr/next/standalone-docker.html
+++ b/content/docs/fr/next/standalone-docker.html
@@ -115,7 +115,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/fr/next/standalone-docker/index.html b/content/docs/fr/next/standalone-docker/index.html
index e567be8..7ca496f 100644
--- a/content/docs/fr/next/standalone-docker/index.html
+++ b/content/docs/fr/next/standalone-docker/index.html
@@ -115,7 +115,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/fr/security-tls-authentication.html b/content/docs/fr/security-tls-authentication.html
index bbe0319..c6020b5 100644
--- a/content/docs/fr/security-tls-authentication.html
+++ b/content/docs/fr/security-tls-authentication.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/fr/security-tls-authentication/index.html b/content/docs/fr/security-tls-authentication/index.html
index bbe0319..c6020b5 100644
--- a/content/docs/fr/security-tls-authentication/index.html
+++ b/content/docs/fr/security-tls-authentication/index.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/fr/security-tls-transport.html b/content/docs/fr/security-tls-transport.html
index ac0cb90..be3936e 100644
--- a/content/docs/fr/security-tls-transport.html
+++ b/content/docs/fr/security-tls-transport.html
@@ -201,7 +201,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/fr/security-tls-transport/index.html b/content/docs/fr/security-tls-transport/index.html
index ac0cb90..be3936e 100644
--- a/content/docs/fr/security-tls-transport/index.html
+++ b/content/docs/fr/security-tls-transport/index.html
@@ -201,7 +201,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/fr/standalone-docker.html b/content/docs/fr/standalone-docker.html
index e931ef7..c125e24 100644
--- a/content/docs/fr/standalone-docker.html
+++ b/content/docs/fr/standalone-docker.html
@@ -115,7 +115,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/fr/standalone-docker/index.html b/content/docs/fr/standalone-docker/index.html
index e931ef7..c125e24 100644
--- a/content/docs/fr/standalone-docker/index.html
+++ b/content/docs/fr/standalone-docker/index.html
@@ -115,7 +115,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/fr/standalone.html b/content/docs/fr/standalone.html
index 61d7b84..d667940 100644
--- a/content/docs/fr/standalone.html
+++ b/content/docs/fr/standalone.html
@@ -223,6 +223,14 @@ tiered-storage-jcloud-2.3.0.nar
 <h4><a class="anchor" aria-hidden="true" id="no-need-to-explicitly-create-new-topics"></a><a href="#no-need-to-explicitly-create-new-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  [...]
 <p>You may have noticed that we did not explicitly create the <code>my-topic</code> topic to which we sent the <code>hello-pulsar</code> message. If you attempt to write a message to a topic that does not yet exist, Pulsar will automatically create that topic for you.</p>
 </blockquote>
+<h2><a class="anchor" aria-hidden="true" id="using-cli-pulsar-clients"></a><a href="#using-cli-pulsar-clients" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
+<p>Pulsar provides a CLI tool called <a href="/docs/fr/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> that enables you to do things like receive messages from a Pulsar topic in a running cluster. This command will receive a simple message saying <code>hello-pulsar</code> to the <code>my-topic</code> topic:</p>
+<pre><code class="hljs css language-bash">$ bin/pulsar-client consume my-topic -t Shared -s demo-sub -n 0
+</code></pre>
+<p>If the message has been successfully published to the topic as above, you should see a confirmation like this in the <code>pulsar-client</code> logs:</p>
+<pre><code class="hljs">----- got message -----
+hello-pulsar
+</code></pre>
 <h2><a class="anchor" aria-hidden="true" id="using-pulsar-clients-locally"></a><a href="#using-pulsar-clients-locally" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 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 currently offers client libraries for <a href="/docs/fr/client-libraries-java">Java</a>, <a href="/docs/fr/client-libraries-go">Go</a>, <a href="/docs/fr/client-libraries-python">Python</a> and <a href="/docs/fr/client-libraries-cpp">C++</a>. If you're running a local standalone cluster, you can use one of these root URLs for interacting with your cluster:</p>
 <ul>
@@ -250,7 +258,7 @@ Result result = client.createProducer(<span class="hljs-string">"my-topic"</span
     <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
 }
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/pulsar-2.0"><span class="arrow-prev">← </span><span>Pulsar 2.0</span></a><a class="docs-next button" href="/docs/fr/standalone-docker"><span>Pulsar in Docker</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#run-pulsar-standalone-manually">Run Pulsar Standalone Manually</a><ul class="toc-headings"><li><a href="#system [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/pulsar-2.0"><span class="arrow-prev">← </span><span>Pulsar 2.0</span></a><a class="docs-next button" href="/docs/fr/standalone-docker"><span>Pulsar in Docker</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#run-pulsar-standalone-manually">Run Pulsar Standalone Manually</a><ul class="toc-headings"><li><a href="#system [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/fr/standalone/index.html b/content/docs/fr/standalone/index.html
index 61d7b84..d667940 100644
--- a/content/docs/fr/standalone/index.html
+++ b/content/docs/fr/standalone/index.html
@@ -223,6 +223,14 @@ tiered-storage-jcloud-2.3.0.nar
 <h4><a class="anchor" aria-hidden="true" id="no-need-to-explicitly-create-new-topics"></a><a href="#no-need-to-explicitly-create-new-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  [...]
 <p>You may have noticed that we did not explicitly create the <code>my-topic</code> topic to which we sent the <code>hello-pulsar</code> message. If you attempt to write a message to a topic that does not yet exist, Pulsar will automatically create that topic for you.</p>
 </blockquote>
+<h2><a class="anchor" aria-hidden="true" id="using-cli-pulsar-clients"></a><a href="#using-cli-pulsar-clients" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
+<p>Pulsar provides a CLI tool called <a href="/docs/fr/reference-cli-tools#pulsar-client"><code>pulsar-client</code></a> that enables you to do things like receive messages from a Pulsar topic in a running cluster. This command will receive a simple message saying <code>hello-pulsar</code> to the <code>my-topic</code> topic:</p>
+<pre><code class="hljs css language-bash">$ bin/pulsar-client consume my-topic -t Shared -s demo-sub -n 0
+</code></pre>
+<p>If the message has been successfully published to the topic as above, you should see a confirmation like this in the <code>pulsar-client</code> logs:</p>
+<pre><code class="hljs">----- got message -----
+hello-pulsar
+</code></pre>
 <h2><a class="anchor" aria-hidden="true" id="using-pulsar-clients-locally"></a><a href="#using-pulsar-clients-locally" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 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 currently offers client libraries for <a href="/docs/fr/client-libraries-java">Java</a>, <a href="/docs/fr/client-libraries-go">Go</a>, <a href="/docs/fr/client-libraries-python">Python</a> and <a href="/docs/fr/client-libraries-cpp">C++</a>. If you're running a local standalone cluster, you can use one of these root URLs for interacting with your cluster:</p>
 <ul>
@@ -250,7 +258,7 @@ Result result = client.createProducer(<span class="hljs-string">"my-topic"</span
     <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
 }
 </code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/pulsar-2.0"><span class="arrow-prev">← </span><span>Pulsar 2.0</span></a><a class="docs-next button" href="/docs/fr/standalone-docker"><span>Pulsar in Docker</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#run-pulsar-standalone-manually">Run Pulsar Standalone Manually</a><ul class="toc-headings"><li><a href="#system [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/pulsar-2.0"><span class="arrow-prev">← </span><span>Pulsar 2.0</span></a><a class="docs-next button" href="/docs/fr/standalone-docker"><span>Pulsar in Docker</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#run-pulsar-standalone-manually">Run Pulsar Standalone Manually</a><ul class="toc-headings"><li><a href="#system [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/io-cdc-canal.html b/content/docs/io-cdc-canal.html
new file mode 100644
index 0000000..2b8c0bb
--- /dev/null
+++ b/content/docs/io-cdc-canal.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Pulsar · </title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content=""/><meta property="og:title" content="Apache Pulsar · "/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" c [...]
+              (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+              (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+              m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+              })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+              ga('create', 'UA-102219959-1', 'auto');
+              ga('send', 'pageview');
+            </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body><script>
+                <!--
+                window.location.href = "/docs/en/io-cdc-canal";
+                // -->
+                </script></body></html>
\ No newline at end of file
diff --git a/content/docs/io-cdc-canal/index.html b/content/docs/io-cdc-canal/index.html
new file mode 100644
index 0000000..2b8c0bb
--- /dev/null
+++ b/content/docs/io-cdc-canal/index.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Pulsar · </title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content=""/><meta property="og:title" content="Apache Pulsar · "/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" c [...]
+              (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+              (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+              m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+              })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+              ga('create', 'UA-102219959-1', 'auto');
+              ga('send', 'pageview');
+            </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body><script>
+                <!--
+                window.location.href = "/docs/en/io-cdc-canal";
+                // -->
+                </script></body></html>
\ No newline at end of file
diff --git a/content/docs/io-cdc-debezium.html b/content/docs/io-cdc-debezium.html
new file mode 100644
index 0000000..b67eddc
--- /dev/null
+++ b/content/docs/io-cdc-debezium.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Pulsar · </title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content=""/><meta property="og:title" content="Apache Pulsar · "/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" c [...]
+              (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+              (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+              m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+              })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+              ga('create', 'UA-102219959-1', 'auto');
+              ga('send', 'pageview');
+            </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body><script>
+                <!--
+                window.location.href = "/docs/en/io-cdc-debezium";
+                // -->
+                </script></body></html>
\ No newline at end of file
diff --git a/content/docs/io-cdc-debezium/index.html b/content/docs/io-cdc-debezium/index.html
new file mode 100644
index 0000000..b67eddc
--- /dev/null
+++ b/content/docs/io-cdc-debezium/index.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Pulsar · </title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content=""/><meta property="og:title" content="Apache Pulsar · "/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" c [...]
+              (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+              (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+              m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+              })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+              ga('create', 'UA-102219959-1', 'auto');
+              ga('send', 'pageview');
+            </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body><script>
+                <!--
+                window.location.href = "/docs/en/io-cdc-debezium";
+                // -->
+                </script></body></html>
\ No newline at end of file
diff --git a/content/docs/ja/2.1.0-incubating/client-libraries-python.html b/content/docs/ja/2.1.0-incubating/client-libraries-python.html
index 0fe727c..158a0de 100644
--- a/content/docs/ja/2.1.0-incubating/client-libraries-python.html
+++ b/content/docs/ja/2.1.0-incubating/client-libraries-python.html
@@ -115,7 +115,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -129,7 +129,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
diff --git a/content/docs/ja/2.1.0-incubating/client-libraries-python/index.html b/content/docs/ja/2.1.0-incubating/client-libraries-python/index.html
index 0fe727c..158a0de 100644
--- a/content/docs/ja/2.1.0-incubating/client-libraries-python/index.html
+++ b/content/docs/ja/2.1.0-incubating/client-libraries-python/index.html
@@ -115,7 +115,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -129,7 +129,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
diff --git a/content/docs/ja/2.1.0-incubating/client-libraries-websocket.html b/content/docs/ja/2.1.0-incubating/client-libraries-websocket.html
index 7ce6d11..3ffa82a 100644
--- a/content/docs/ja/2.1.0-incubating/client-libraries-websocket.html
+++ b/content/docs/ja/2.1.0-incubating/client-libraries-websocket.html
@@ -331,7 +331,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -350,7 +350,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/ja/2.1.0-incubating/client-libraries-websocket/index.html b/content/docs/ja/2.1.0-incubating/client-libraries-websocket/index.html
index 7ce6d11..3ffa82a 100644
--- a/content/docs/ja/2.1.0-incubating/client-libraries-websocket/index.html
+++ b/content/docs/ja/2.1.0-incubating/client-libraries-websocket/index.html
@@ -331,7 +331,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -350,7 +350,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/ja/2.1.0-incubating/functions-api.html b/content/docs/ja/2.1.0-incubating/functions-api.html
index 99c4d10..6a40b45 100644
--- a/content/docs/ja/2.1.0-incubating/functions-api.html
+++ b/content/docs/ja/2.1.0-incubating/functions-api.html
@@ -646,7 +646,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/ja/2.1.0-incubating/functions-api/index.html b/content/docs/ja/2.1.0-incubating/functions-api/index.html
index 99c4d10..6a40b45 100644
--- a/content/docs/ja/2.1.0-incubating/functions-api/index.html
+++ b/content/docs/ja/2.1.0-incubating/functions-api/index.html
@@ -646,7 +646,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/ja/2.1.0-incubating/reference-cli-tools.html b/content/docs/ja/2.1.0-incubating/reference-cli-tools.html
index 8c5f113..8593189 100644
--- a/content/docs/ja/2.1.0-incubating/reference-cli-tools.html
+++ b/content/docs/ja/2.1.0-incubating/reference-cli-tools.html
@@ -299,7 +299,7 @@ $ pulsar command
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--auth-params</code></td><td>Authentication parameters, for example key1:val1,key2:val2</td><td></td></tr>
+<tr><td><code>--auth-params</code></td><td>Authentication parameters, whose format is determined by the implementation of method <code>configure</code> in authentication plugin class, for example &quot;key1:val1,key2:val2&quot; or &quot;{&quot;key1&quot;:&quot;val1&quot;,&quot;key2&quot;:&quot;val2&quot;}&quot;</td><td></td></tr>
 <tr><td><code>--auth-plugin</code></td><td>Authentication plugin class name</td><td></td></tr>
 <tr><td><code>--url</code></td><td>Broker URL to which to connect</td><td><a href="pulsar://localhost:6650/">pulsar://localhost:6650/</a></td></tr>
 </tbody>
diff --git a/content/docs/ja/2.1.0-incubating/reference-cli-tools/index.html b/content/docs/ja/2.1.0-incubating/reference-cli-tools/index.html
index 8c5f113..8593189 100644
--- a/content/docs/ja/2.1.0-incubating/reference-cli-tools/index.html
+++ b/content/docs/ja/2.1.0-incubating/reference-cli-tools/index.html
@@ -299,7 +299,7 @@ $ pulsar command
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--auth-params</code></td><td>Authentication parameters, for example key1:val1,key2:val2</td><td></td></tr>
+<tr><td><code>--auth-params</code></td><td>Authentication parameters, whose format is determined by the implementation of method <code>configure</code> in authentication plugin class, for example &quot;key1:val1,key2:val2&quot; or &quot;{&quot;key1&quot;:&quot;val1&quot;,&quot;key2&quot;:&quot;val2&quot;}&quot;</td><td></td></tr>
 <tr><td><code>--auth-plugin</code></td><td>Authentication plugin class name</td><td></td></tr>
 <tr><td><code>--url</code></td><td>Broker URL to which to connect</td><td><a href="pulsar://localhost:6650/">pulsar://localhost:6650/</a></td></tr>
 </tbody>
diff --git a/content/docs/ja/2.1.0-incubating/security-tls-authentication.html b/content/docs/ja/2.1.0-incubating/security-tls-authentication.html
index 74b41d8..58e63a4 100644
--- a/content/docs/ja/2.1.0-incubating/security-tls-authentication.html
+++ b/content/docs/ja/2.1.0-incubating/security-tls-authentication.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-クライアント"></a><a href="#c-クライアント" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/ja/2.1.0-incubating/security-tls-authentication/index.html b/content/docs/ja/2.1.0-incubating/security-tls-authentication/index.html
index 74b41d8..58e63a4 100644
--- a/content/docs/ja/2.1.0-incubating/security-tls-authentication/index.html
+++ b/content/docs/ja/2.1.0-incubating/security-tls-authentication/index.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-クライアント"></a><a href="#c-クライアント" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/ja/2.1.0-incubating/security-tls-transport.html b/content/docs/ja/2.1.0-incubating/security-tls-transport.html
index 2709684..d250d75 100644
--- a/content/docs/ja/2.1.0-incubating/security-tls-transport.html
+++ b/content/docs/ja/2.1.0-incubating/security-tls-transport.html
@@ -185,7 +185,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>)
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-クライアント"></a><a href="#c-クライアント" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/ja/2.1.0-incubating/security-tls-transport/index.html b/content/docs/ja/2.1.0-incubating/security-tls-transport/index.html
index 2709684..d250d75 100644
--- a/content/docs/ja/2.1.0-incubating/security-tls-transport/index.html
+++ b/content/docs/ja/2.1.0-incubating/security-tls-transport/index.html
@@ -185,7 +185,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>)
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-クライアント"></a><a href="#c-クライアント" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/ja/2.1.0-incubating/standalone-docker.html b/content/docs/ja/2.1.0-incubating/standalone-docker.html
index f3489cb..1f80db9 100644
--- a/content/docs/ja/2.1.0-incubating/standalone-docker.html
+++ b/content/docs/ja/2.1.0-incubating/standalone-docker.html
@@ -115,7 +115,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/ja/2.1.0-incubating/standalone-docker/index.html b/content/docs/ja/2.1.0-incubating/standalone-docker/index.html
index f3489cb..1f80db9 100644
--- a/content/docs/ja/2.1.0-incubating/standalone-docker/index.html
+++ b/content/docs/ja/2.1.0-incubating/standalone-docker/index.html
@@ -115,7 +115,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/ja/2.1.1-incubating/client-libraries-python.html b/content/docs/ja/2.1.1-incubating/client-libraries-python.html
index a2748cd..672de0d 100644
--- a/content/docs/ja/2.1.1-incubating/client-libraries-python.html
+++ b/content/docs/ja/2.1.1-incubating/client-libraries-python.html
@@ -116,7 +116,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -130,7 +130,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
diff --git a/content/docs/ja/2.1.1-incubating/client-libraries-python/index.html b/content/docs/ja/2.1.1-incubating/client-libraries-python/index.html
index a2748cd..672de0d 100644
--- a/content/docs/ja/2.1.1-incubating/client-libraries-python/index.html
+++ b/content/docs/ja/2.1.1-incubating/client-libraries-python/index.html
@@ -116,7 +116,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -130,7 +130,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
diff --git a/content/docs/ja/2.1.1-incubating/client-libraries-websocket.html b/content/docs/ja/2.1.1-incubating/client-libraries-websocket.html
index 2caa2b3..1c4ff8e 100644
--- a/content/docs/ja/2.1.1-incubating/client-libraries-websocket.html
+++ b/content/docs/ja/2.1.1-incubating/client-libraries-websocket.html
@@ -331,7 +331,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -350,7 +350,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/ja/2.1.1-incubating/client-libraries-websocket/index.html b/content/docs/ja/2.1.1-incubating/client-libraries-websocket/index.html
index 2caa2b3..1c4ff8e 100644
--- a/content/docs/ja/2.1.1-incubating/client-libraries-websocket/index.html
+++ b/content/docs/ja/2.1.1-incubating/client-libraries-websocket/index.html
@@ -331,7 +331,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -350,7 +350,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/ja/2.1.1-incubating/functions-api.html b/content/docs/ja/2.1.1-incubating/functions-api.html
index 725f831..df9813b 100644
--- a/content/docs/ja/2.1.1-incubating/functions-api.html
+++ b/content/docs/ja/2.1.1-incubating/functions-api.html
@@ -639,7 +639,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/ja/2.1.1-incubating/functions-api/index.html b/content/docs/ja/2.1.1-incubating/functions-api/index.html
index 725f831..df9813b 100644
--- a/content/docs/ja/2.1.1-incubating/functions-api/index.html
+++ b/content/docs/ja/2.1.1-incubating/functions-api/index.html
@@ -639,7 +639,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/ja/2.1.1-incubating/reference-cli-tools.html b/content/docs/ja/2.1.1-incubating/reference-cli-tools.html
index 7a31f3b..a77e124 100644
--- a/content/docs/ja/2.1.1-incubating/reference-cli-tools.html
+++ b/content/docs/ja/2.1.1-incubating/reference-cli-tools.html
@@ -299,7 +299,7 @@ $ pulsar command
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--auth-params</code></td><td>Authentication parameters, for example key1:val1,key2:val2</td><td></td></tr>
+<tr><td><code>--auth-params</code></td><td>Authentication parameters, whose format is determined by the implementation of method <code>configure</code> in authentication plugin class, for example &quot;key1:val1,key2:val2&quot; or &quot;{&quot;key1&quot;:&quot;val1&quot;,&quot;key2&quot;:&quot;val2&quot;}&quot;</td><td></td></tr>
 <tr><td><code>--auth-plugin</code></td><td>Authentication plugin class name</td><td></td></tr>
 <tr><td><code>--url</code></td><td>Broker URL to which to connect</td><td><a href="pulsar://localhost:6650/">pulsar://localhost:6650/</a></td></tr>
 </tbody>
diff --git a/content/docs/ja/2.1.1-incubating/reference-cli-tools/index.html b/content/docs/ja/2.1.1-incubating/reference-cli-tools/index.html
index 7a31f3b..a77e124 100644
--- a/content/docs/ja/2.1.1-incubating/reference-cli-tools/index.html
+++ b/content/docs/ja/2.1.1-incubating/reference-cli-tools/index.html
@@ -299,7 +299,7 @@ $ pulsar command
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--auth-params</code></td><td>Authentication parameters, for example key1:val1,key2:val2</td><td></td></tr>
+<tr><td><code>--auth-params</code></td><td>Authentication parameters, whose format is determined by the implementation of method <code>configure</code> in authentication plugin class, for example &quot;key1:val1,key2:val2&quot; or &quot;{&quot;key1&quot;:&quot;val1&quot;,&quot;key2&quot;:&quot;val2&quot;}&quot;</td><td></td></tr>
 <tr><td><code>--auth-plugin</code></td><td>Authentication plugin class name</td><td></td></tr>
 <tr><td><code>--url</code></td><td>Broker URL to which to connect</td><td><a href="pulsar://localhost:6650/">pulsar://localhost:6650/</a></td></tr>
 </tbody>
diff --git a/content/docs/ja/2.1.1-incubating/security-tls-authentication.html b/content/docs/ja/2.1.1-incubating/security-tls-authentication.html
index 53ce6a1..79d80b6 100644
--- a/content/docs/ja/2.1.1-incubating/security-tls-authentication.html
+++ b/content/docs/ja/2.1.1-incubating/security-tls-authentication.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-クライアント"></a><a href="#c-クライアント" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/ja/2.1.1-incubating/security-tls-authentication/index.html b/content/docs/ja/2.1.1-incubating/security-tls-authentication/index.html
index 53ce6a1..79d80b6 100644
--- a/content/docs/ja/2.1.1-incubating/security-tls-authentication/index.html
+++ b/content/docs/ja/2.1.1-incubating/security-tls-authentication/index.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-クライアント"></a><a href="#c-クライアント" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/ja/2.1.1-incubating/security-tls-transport.html b/content/docs/ja/2.1.1-incubating/security-tls-transport.html
index 3162a93..d5d5651 100644
--- a/content/docs/ja/2.1.1-incubating/security-tls-transport.html
+++ b/content/docs/ja/2.1.1-incubating/security-tls-transport.html
@@ -185,7 +185,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>)
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-クライアント"></a><a href="#c-クライアント" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/ja/2.1.1-incubating/security-tls-transport/index.html b/content/docs/ja/2.1.1-incubating/security-tls-transport/index.html
index 3162a93..d5d5651 100644
--- a/content/docs/ja/2.1.1-incubating/security-tls-transport/index.html
+++ b/content/docs/ja/2.1.1-incubating/security-tls-transport/index.html
@@ -185,7 +185,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>)
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-クライアント"></a><a href="#c-クライアント" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/ja/2.1.1-incubating/standalone-docker.html b/content/docs/ja/2.1.1-incubating/standalone-docker.html
index 5da0228..0ccec7d 100644
--- a/content/docs/ja/2.1.1-incubating/standalone-docker.html
+++ b/content/docs/ja/2.1.1-incubating/standalone-docker.html
@@ -115,7 +115,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/ja/2.1.1-incubating/standalone-docker/index.html b/content/docs/ja/2.1.1-incubating/standalone-docker/index.html
index 5da0228..0ccec7d 100644
--- a/content/docs/ja/2.1.1-incubating/standalone-docker/index.html
+++ b/content/docs/ja/2.1.1-incubating/standalone-docker/index.html
@@ -115,7 +115,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/ja/2.2.0/client-libraries-python.html b/content/docs/ja/2.2.0/client-libraries-python.html
index f1c3e63..8df2f34 100644
--- a/content/docs/ja/2.2.0/client-libraries-python.html
+++ b/content/docs/ja/2.2.0/client-libraries-python.html
@@ -116,7 +116,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -130,7 +130,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
diff --git a/content/docs/ja/2.2.0/client-libraries-python/index.html b/content/docs/ja/2.2.0/client-libraries-python/index.html
index f1c3e63..8df2f34 100644
--- a/content/docs/ja/2.2.0/client-libraries-python/index.html
+++ b/content/docs/ja/2.2.0/client-libraries-python/index.html
@@ -116,7 +116,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -130,7 +130,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
diff --git a/content/docs/ja/2.2.0/client-libraries-websocket.html b/content/docs/ja/2.2.0/client-libraries-websocket.html
index 7012966..2d494ef 100644
--- a/content/docs/ja/2.2.0/client-libraries-websocket.html
+++ b/content/docs/ja/2.2.0/client-libraries-websocket.html
@@ -331,7 +331,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -350,7 +350,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/ja/2.2.0/client-libraries-websocket/index.html b/content/docs/ja/2.2.0/client-libraries-websocket/index.html
index 7012966..2d494ef 100644
--- a/content/docs/ja/2.2.0/client-libraries-websocket/index.html
+++ b/content/docs/ja/2.2.0/client-libraries-websocket/index.html
@@ -331,7 +331,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -350,7 +350,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/ja/2.2.0/functions-api.html b/content/docs/ja/2.2.0/functions-api.html
index 119ac09..40391cf 100644
--- a/content/docs/ja/2.2.0/functions-api.html
+++ b/content/docs/ja/2.2.0/functions-api.html
@@ -647,7 +647,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/ja/2.2.0/functions-api/index.html b/content/docs/ja/2.2.0/functions-api/index.html
index 119ac09..40391cf 100644
--- a/content/docs/ja/2.2.0/functions-api/index.html
+++ b/content/docs/ja/2.2.0/functions-api/index.html
@@ -647,7 +647,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/ja/2.2.0/reference-cli-tools.html b/content/docs/ja/2.2.0/reference-cli-tools.html
index 7891490..7829931 100644
--- a/content/docs/ja/2.2.0/reference-cli-tools.html
+++ b/content/docs/ja/2.2.0/reference-cli-tools.html
@@ -299,7 +299,7 @@ $ pulsar command
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--auth-params</code></td><td>Authentication parameters, for example key1:val1,key2:val2</td><td></td></tr>
+<tr><td><code>--auth-params</code></td><td>Authentication parameters, whose format is determined by the implementation of method <code>configure</code> in authentication plugin class, for example &quot;key1:val1,key2:val2&quot; or &quot;{&quot;key1&quot;:&quot;val1&quot;,&quot;key2&quot;:&quot;val2&quot;}&quot;</td><td></td></tr>
 <tr><td><code>--auth-plugin</code></td><td>Authentication plugin class name</td><td></td></tr>
 <tr><td><code>--url</code></td><td>Broker URL to which to connect</td><td><a href="pulsar://localhost:6650/">pulsar://localhost:6650/</a></td></tr>
 </tbody>
diff --git a/content/docs/ja/2.2.0/reference-cli-tools/index.html b/content/docs/ja/2.2.0/reference-cli-tools/index.html
index 7891490..7829931 100644
--- a/content/docs/ja/2.2.0/reference-cli-tools/index.html
+++ b/content/docs/ja/2.2.0/reference-cli-tools/index.html
@@ -299,7 +299,7 @@ $ pulsar command
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--auth-params</code></td><td>Authentication parameters, for example key1:val1,key2:val2</td><td></td></tr>
+<tr><td><code>--auth-params</code></td><td>Authentication parameters, whose format is determined by the implementation of method <code>configure</code> in authentication plugin class, for example &quot;key1:val1,key2:val2&quot; or &quot;{&quot;key1&quot;:&quot;val1&quot;,&quot;key2&quot;:&quot;val2&quot;}&quot;</td><td></td></tr>
 <tr><td><code>--auth-plugin</code></td><td>Authentication plugin class name</td><td></td></tr>
 <tr><td><code>--url</code></td><td>Broker URL to which to connect</td><td><a href="pulsar://localhost:6650/">pulsar://localhost:6650/</a></td></tr>
 </tbody>
diff --git a/content/docs/ja/2.2.0/security-tls-authentication.html b/content/docs/ja/2.2.0/security-tls-authentication.html
index eb4c6e7..cc63b53 100644
--- a/content/docs/ja/2.2.0/security-tls-authentication.html
+++ b/content/docs/ja/2.2.0/security-tls-authentication.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-クライアント"></a><a href="#c-クライアント" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/ja/2.2.0/security-tls-authentication/index.html b/content/docs/ja/2.2.0/security-tls-authentication/index.html
index eb4c6e7..cc63b53 100644
--- a/content/docs/ja/2.2.0/security-tls-authentication/index.html
+++ b/content/docs/ja/2.2.0/security-tls-authentication/index.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-クライアント"></a><a href="#c-クライアント" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/ja/2.2.0/security-tls-transport.html b/content/docs/ja/2.2.0/security-tls-transport.html
index 44c2983..cc4a816 100644
--- a/content/docs/ja/2.2.0/security-tls-transport.html
+++ b/content/docs/ja/2.2.0/security-tls-transport.html
@@ -193,7 +193,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-クライアント"></a><a href="#c-クライアント" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/ja/2.2.0/security-tls-transport/index.html b/content/docs/ja/2.2.0/security-tls-transport/index.html
index 44c2983..cc4a816 100644
--- a/content/docs/ja/2.2.0/security-tls-transport/index.html
+++ b/content/docs/ja/2.2.0/security-tls-transport/index.html
@@ -193,7 +193,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-クライアント"></a><a href="#c-クライアント" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/ja/2.2.0/standalone-docker.html b/content/docs/ja/2.2.0/standalone-docker.html
index 59dfa44..d2c9283 100644
--- a/content/docs/ja/2.2.0/standalone-docker.html
+++ b/content/docs/ja/2.2.0/standalone-docker.html
@@ -115,7 +115,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/ja/2.2.0/standalone-docker/index.html b/content/docs/ja/2.2.0/standalone-docker/index.html
index 59dfa44..d2c9283 100644
--- a/content/docs/ja/2.2.0/standalone-docker/index.html
+++ b/content/docs/ja/2.2.0/standalone-docker/index.html
@@ -115,7 +115,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/ja/2.2.1/client-libraries-python.html b/content/docs/ja/2.2.1/client-libraries-python.html
index 9b64075..3667203 100644
--- a/content/docs/ja/2.2.1/client-libraries-python.html
+++ b/content/docs/ja/2.2.1/client-libraries-python.html
@@ -116,7 +116,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -130,7 +130,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
diff --git a/content/docs/ja/2.2.1/client-libraries-python/index.html b/content/docs/ja/2.2.1/client-libraries-python/index.html
index 9b64075..3667203 100644
--- a/content/docs/ja/2.2.1/client-libraries-python/index.html
+++ b/content/docs/ja/2.2.1/client-libraries-python/index.html
@@ -116,7 +116,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -130,7 +130,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
diff --git a/content/docs/ja/2.2.1/client-libraries-websocket.html b/content/docs/ja/2.2.1/client-libraries-websocket.html
index 7cc7e93..b22f8a1 100644
--- a/content/docs/ja/2.2.1/client-libraries-websocket.html
+++ b/content/docs/ja/2.2.1/client-libraries-websocket.html
@@ -355,7 +355,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -374,7 +374,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/ja/2.2.1/client-libraries-websocket/index.html b/content/docs/ja/2.2.1/client-libraries-websocket/index.html
index 7cc7e93..b22f8a1 100644
--- a/content/docs/ja/2.2.1/client-libraries-websocket/index.html
+++ b/content/docs/ja/2.2.1/client-libraries-websocket/index.html
@@ -355,7 +355,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -374,7 +374,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/ja/2.2.1/functions-api.html b/content/docs/ja/2.2.1/functions-api.html
index aeb3944..2aa60c1 100644
--- a/content/docs/ja/2.2.1/functions-api.html
+++ b/content/docs/ja/2.2.1/functions-api.html
@@ -647,7 +647,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/ja/2.2.1/functions-api/index.html b/content/docs/ja/2.2.1/functions-api/index.html
index aeb3944..2aa60c1 100644
--- a/content/docs/ja/2.2.1/functions-api/index.html
+++ b/content/docs/ja/2.2.1/functions-api/index.html
@@ -647,7 +647,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/ja/2.2.1/reference-cli-tools.html b/content/docs/ja/2.2.1/reference-cli-tools.html
index 31e97cb..8574e94 100644
--- a/content/docs/ja/2.2.1/reference-cli-tools.html
+++ b/content/docs/ja/2.2.1/reference-cli-tools.html
@@ -299,7 +299,7 @@ $ pulsar command
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--auth-params</code></td><td>Authentication parameters, for example key1:val1,key2:val2</td><td></td></tr>
+<tr><td><code>--auth-params</code></td><td>Authentication parameters, whose format is determined by the implementation of method <code>configure</code> in authentication plugin class, for example &quot;key1:val1,key2:val2&quot; or &quot;{&quot;key1&quot;:&quot;val1&quot;,&quot;key2&quot;:&quot;val2&quot;}&quot;</td><td></td></tr>
 <tr><td><code>--auth-plugin</code></td><td>Authentication plugin class name</td><td></td></tr>
 <tr><td><code>--url</code></td><td>Broker URL to which to connect</td><td><a href="pulsar://localhost:6650/">pulsar://localhost:6650/</a></td></tr>
 </tbody>
diff --git a/content/docs/ja/2.2.1/reference-cli-tools/index.html b/content/docs/ja/2.2.1/reference-cli-tools/index.html
index 31e97cb..8574e94 100644
--- a/content/docs/ja/2.2.1/reference-cli-tools/index.html
+++ b/content/docs/ja/2.2.1/reference-cli-tools/index.html
@@ -299,7 +299,7 @@ $ pulsar command
 <tr><th>Flag</th><th>Description</th><th>Default</th></tr>
 </thead>
 <tbody>
-<tr><td><code>--auth-params</code></td><td>Authentication parameters, for example key1:val1,key2:val2</td><td></td></tr>
+<tr><td><code>--auth-params</code></td><td>Authentication parameters, whose format is determined by the implementation of method <code>configure</code> in authentication plugin class, for example &quot;key1:val1,key2:val2&quot; or &quot;{&quot;key1&quot;:&quot;val1&quot;,&quot;key2&quot;:&quot;val2&quot;}&quot;</td><td></td></tr>
 <tr><td><code>--auth-plugin</code></td><td>Authentication plugin class name</td><td></td></tr>
 <tr><td><code>--url</code></td><td>Broker URL to which to connect</td><td><a href="pulsar://localhost:6650/">pulsar://localhost:6650/</a></td></tr>
 </tbody>
diff --git a/content/docs/ja/2.2.1/security-tls-authentication.html b/content/docs/ja/2.2.1/security-tls-authentication.html
index 699199d..65d0993 100644
--- a/content/docs/ja/2.2.1/security-tls-authentication.html
+++ b/content/docs/ja/2.2.1/security-tls-authentication.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-クライアント"></a><a href="#c-クライアント" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/ja/2.2.1/security-tls-authentication/index.html b/content/docs/ja/2.2.1/security-tls-authentication/index.html
index 699199d..65d0993 100644
--- a/content/docs/ja/2.2.1/security-tls-authentication/index.html
+++ b/content/docs/ja/2.2.1/security-tls-authentication/index.html
@@ -140,7 +140,7 @@ PulsarClient client = PulsarClient.builder()
 auth = AuthenticationTLS(<span class="hljs-string">"/path/to/my-role.cert.pem"</span>, <span class="hljs-string">"/path/to/my-role.key-pk8.pem"</span>)
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>,
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>,
                 authentication=auth)
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-クライアント"></a><a href="#c-クライアント" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
diff --git a/content/docs/ja/2.2.1/security-tls-transport.html b/content/docs/ja/2.2.1/security-tls-transport.html
index 7aaf8c3..c5ad5b0 100644
--- a/content/docs/ja/2.2.1/security-tls-transport.html
+++ b/content/docs/ja/2.2.1/security-tls-transport.html
@@ -201,7 +201,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-クライアント"></a><a href="#c-クライアント" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/ja/2.2.1/security-tls-transport/index.html b/content/docs/ja/2.2.1/security-tls-transport/index.html
index 7aaf8c3..c5ad5b0 100644
--- a/content/docs/ja/2.2.1/security-tls-transport/index.html
+++ b/content/docs/ja/2.2.1/security-tls-transport/index.html
@@ -201,7 +201,7 @@ PulsarClient client = PulsarClient.builder()
 
 client = Client(<span class="hljs-string">"pulsar+ssl://broker.example.com:6651/"</span>,
                 tls_trust_certs_file_path=<span class="hljs-string">"/path/to/ca.cert.pem"</span>,
-                tls_allow_insecure_connection=<span class="hljs-keyword">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
+                tls_allow_insecure_connection=<span class="hljs-literal">False</span>) // defaults to false <span class="hljs-keyword">from</span> v2<span class="hljs-number">.2</span><span class="hljs-number">.0</span> onwards
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-クライアント"></a><a href="#c-クライアント" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
diff --git a/content/docs/ja/2.2.1/standalone-docker.html b/content/docs/ja/2.2.1/standalone-docker.html
index d335731..6836468 100644
--- a/content/docs/ja/2.2.1/standalone-docker.html
+++ b/content/docs/ja/2.2.1/standalone-docker.html
@@ -115,7 +115,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/ja/2.2.1/standalone-docker/index.html b/content/docs/ja/2.2.1/standalone-docker/index.html
index d335731..6836468 100644
--- a/content/docs/ja/2.2.1/standalone-docker/index.html
+++ b/content/docs/ja/2.2.1/standalone-docker/index.html
@@ -115,7 +115,7 @@ client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span
 consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
                             subscription_name=<span class="hljs-string">'my-sub'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
     consumer.acknowledge(msg)
diff --git a/content/docs/ja/client-libraries-python.html b/content/docs/ja/client-libraries-python.html
index 0a59899..096e443 100644
--- a/content/docs/ja/client-libraries-python.html
+++ b/content/docs/ja/client-libraries-python.html
@@ -117,7 +117,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -131,7 +131,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
@@ -162,7 +162,7 @@ producer.send(Example(a=<span class="hljs-string">'Hello'</span>, b=<span class=
                   subscription_name=<span class="hljs-string">'my-subscription'</span>,
                   schema=AvroSchema(Example) )
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     ex = msg.value()
     print(<span class="hljs-string">"Received message a={} b={} c={}"</span>.format(ex.a, ex.b, ex.c))
diff --git a/content/docs/ja/client-libraries-python/index.html b/content/docs/ja/client-libraries-python/index.html
index 0a59899..096e443 100644
--- a/content/docs/ja/client-libraries-python/index.html
+++ b/content/docs/ja/client-libraries-python/index.html
@@ -117,7 +117,7 @@ client.close()
 <p>This creates a consumer with the <code>my-subscription</code> subscription on the <code>my-topic</code> topic, listen for incoming messages, print the content and ID of messages that arrive, and acknowledge each message to the Pulsar broker:</p>
 <pre><code class="hljs css language-python">consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>, <span class="hljs-string">'my-subscription'</span>)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     consumer.acknowledge(msg)
@@ -131,7 +131,7 @@ msg_id = msg.message_id()
 
 reader = client.create_reader(<span class="hljs-string">'my-topic'</span>, msg_id)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = reader.receive()
     print(<span class="hljs-string">"Received message '{}' id='{}'"</span>.format(msg.data(), msg.message_id()))
     <span class="hljs-comment"># No acknowledgment</span>
@@ -162,7 +162,7 @@ producer.send(Example(a=<span class="hljs-string">'Hello'</span>, b=<span class=
                   subscription_name=<span class="hljs-string">'my-subscription'</span>,
                   schema=AvroSchema(Example) )
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = consumer.receive()
     ex = msg.value()
     print(<span class="hljs-string">"Received message a={} b={} c={}"</span>.format(ex.a, ex.b, ex.c))
diff --git a/content/docs/ja/client-libraries-websocket.html b/content/docs/ja/client-libraries-websocket.html
index a3e3042..9fffb4f 100644
--- a/content/docs/ja/client-libraries-websocket.html
+++ b/content/docs/ja/client-libraries-websocket.html
@@ -355,7 +355,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -374,7 +374,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/ja/client-libraries-websocket/index.html b/content/docs/ja/client-libraries-websocket/index.html
index a3e3042..9fffb4f 100644
--- a/content/docs/ja/client-libraries-websocket/index.html
+++ b/content/docs/ja/client-libraries-websocket/index.html
@@ -355,7 +355,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/consumer/persistent
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
@@ -374,7 +374,7 @@ TOPIC = <span class="hljs-string">'ws://localhost:8080/ws/v2/reader/persistent/p
 
 ws = websocket.create_connection(TOPIC)
 
-<span class="hljs-keyword">while</span> <span class="hljs-keyword">True</span>:
+<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
     msg = json.loads(ws.recv())
     <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> msg: <span class="hljs-keyword">break</span>
 
diff --git a/content/docs/ja/functions-api.html b/content/docs/ja/functions-api.html
index 7ae3044..edfd173 100644
--- a/content/docs/ja/functions-api.html
+++ b/content/docs/ja/functions-api.html
@@ -647,7 +647,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/ja/functions-api/index.html b/content/docs/ja/functions-api/index.html
index 7ae3044..edfd173 100644
--- a/content/docs/ja/functions-api/index.html
+++ b/content/docs/ja/functions-api/index.html
@@ -647,7 +647,7 @@ String wotd = context.getUserConfigValueOrDefault(<span class="hljs-string">"wor
     <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">process</span><span class="hljs-params">(self, input, context)</span>:</span>
         logger = context.get_logger()
         wotd = context.get_user_config_value(<span class="hljs-string">'word-of-the-day'</span>)
-        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-keyword">None</span>:
+        <span class="hljs-keyword">if</span> wotd <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
             logger.warn(<span class="hljs-string">'No word of the day provided'</span>)
         <span class="hljs-keyword">else</span>:
             logger.info(<span class="hljs-string">"The word of the day is {0}"</span>.format(wotd))
diff --git a/content/docs/ja/io-cdc-canal.html b/content/docs/ja/io-cdc-canal.html
new file mode 100644
index 0000000..0cb3204
--- /dev/null
+++ b/content/docs/ja/io-cdc-canal.html
@@ -0,0 +1,206 @@
+<!DOCTYPE html><html lang="ja"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>CDC Canal Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-configuration-options&quot; aria-hidden=&quot [...]
+"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="ja"/><meta property="og:title" content="CDC Canal Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-con [...]
+"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
+              (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+              (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+              m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+              })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+              ga('create', 'UA-102219959-1', 'auto');
+              ga('send', 'pageview');
+            </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div clas [...]
+        const languagesMenuItem = document.getElementById("languages-menu");
+        const languagesDropDown = document.getElementById("languages-dropdown");
+        languagesMenuItem.addEventListener("click", function(event) {
+          event.preventDefault();
+
+          if (languagesDropDown.className == "hide") {
+            languagesDropDown.className = "visible";
+          } else {
+            languagesDropDown.className = "hide";
+          }
+        });
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ja" target="_blank" rel="noreferrer noopener">Transla [...]
+<p>The Configuration is mostly related to Canal task config.</p>
+<table>
+<thead>
+<tr><th>Name</th><th>Required</th><th>Default</th><th>Description</th></tr>
+</thead>
+<tbody>
+<tr><td><code>zkServers</code></td><td><code>false</code></td><td><code>127.0.0.1:2181</code></td><td><code>The address and port of the zookeeper . if canal server configured to cluster mode</code></td></tr>
+<tr><td><code>batchSize</code></td><td><code>true</code></td><td><code>5120</code></td><td><code>Take 5120 records from the canal server in batches</code></td></tr>
+<tr><td><code>username</code></td><td><code>false</code></td><td>``</td><td><code>Canal server account, not MySQL</code></td></tr>
+<tr><td><code>password</code></td><td><code>false</code></td><td>``</td><td><code>Canal server password, not MySQL</code></td></tr>
+<tr><td><code>cluster</code></td><td><code>false</code></td><td><code>false</code></td><td><code>Decide whether to open cluster mode based on canal server configuration, true: cluster mode, false: standalone mode</code></td></tr>
+<tr><td><code>singleHostname</code></td><td><code>false</code></td><td><code>127.0.0.1</code></td><td><code>The address of canal server</code></td></tr>
+<tr><td><code>singlePort</code></td><td><code>false</code></td><td><code>11111</code></td><td><code>The port of canal server</code></td></tr>
+</tbody>
+</table>
+<h3><a class="anchor" aria-hidden="true" id="configuration-example"></a><a href="#configuration-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 [...]
+<p>Here is a configuration Json example:</p>
+<pre><code class="hljs css language-$json { &quot;zkServers&quot;: &quot;127.0.0.1:2181&quot;, &quot;batchSize&quot;: &quot;5120&quot;, &quot;destination&quot;: &quot;example&quot;, &quot;username&quot;: &quot;&quot;, &quot;password&quot;: &quot;&quot;, &quot;cluster&quot;: false, &quot;singleHostname&quot;: &quot;127.0.0.1&quot;, &quot;singlePort&quot;: &quot;11111&quot;, }">
+    You could also find the yaml example <span class="hljs-keyword">in</span> this [<span class="hljs-keyword">file</span>](https:<span class="hljs-comment">//github.com/apache/pulsar/blob/master/pulsar-io/canal/src/main/resources/canal-mysql-source-config.yaml), which has similar content below:</span>
+    
+    ```<span class="hljs-variable">$yaml</span>
+    configs:
+        zkServers: <span class="hljs-string">"127.0.0.1:2181"</span>
+        batchSize: <span class="hljs-string">"5120"</span>
+        destination: <span class="hljs-string">"example"</span>
+        username: <span class="hljs-string">""</span>
+        password: <span class="hljs-string">""</span>
+        <span class="hljs-keyword">cluster</span>: false
+        singleHostname: <span class="hljs-string">"127.0.0.1"</span>
+        singlePort: <span class="hljs-string">"11111"</span>
+    
+
+### Usage example
+
+Here is a simple example to store MySQL change data using above example config.
+
+- Start a MySQL server
+
+```<span class="hljs-variable">$bash</span> docker pull mysql:5.7 docker <span class="hljs-keyword">run</span> -<span class="hljs-keyword">d</span> -it --<span class="hljs-keyword">rm</span> --name pulsar-mysql -p 3306:3306 -<span class="hljs-keyword">e</span> MYSQL_ROOT_PASSWORD=canal -<span class="hljs-keyword">e</span> MYSQL_USER=mysqluser -<span class="hljs-keyword">e</span> MYSQL_PASSWORD=mysqlpw mysql:5.7
+
+    - Modify configuration files mysqld.cnf
+    
+    
+
+[mysqld] pid-<span class="hljs-keyword">file</span> = /<span class="hljs-keyword">var</span>/<span class="hljs-keyword">run</span>/mysqld/mysqld.pid socket = /<span class="hljs-keyword">var</span>/<span class="hljs-keyword">run</span>/mysqld/mysqld.sock datadir = /<span class="hljs-keyword">var</span>/lib/mysql
+
+# <span class="hljs-keyword">log</span>-<span class="hljs-keyword">error</span> = /<span class="hljs-keyword">var</span>/<span class="hljs-keyword">log</span>/mysql/<span class="hljs-keyword">error</span>.<span class="hljs-built_in">log</span>
+
+# <span class="hljs-keyword">By</span> default we only accept connections from localhost
+
+# bind-address = 127.0.0.1
+
+# Disabling symbolic-links is recommended to prevent assorted security risks
+
+symbolic-links=0 <span class="hljs-keyword">log</span>-bin=mysql-bin binlog-<span class="hljs-keyword">format</span>=ROW server_id=1
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- <span class="hljs-keyword">Copy</span> <span class="hljs-keyword">file</span> to mysql server from <span class="hljs-keyword">local</span> and restart mysql server
+    ```<span class="hljs-variable">$bash</span>
+    docker cp mysqld.cnf pulsar-mysql:/etc/mysql/mysql.<span class="hljs-keyword">conf</span>.<span class="hljs-keyword">d</span>/
+    docker restart pulsar-mysql
+    
+
+- Create <span class="hljs-keyword">test</span> database <span class="hljs-keyword">in</span> mysql server ```<span class="hljs-variable">$bash</span> docker exec -it pulsar-mysql /bin/bash mysql -<span class="hljs-keyword">h</span> 127.0.0.1 -uroot -pcanal -<span class="hljs-keyword">e</span> 'create database <span class="hljs-keyword">test</span>;'
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- Start canal server and connect mysql server
+    
+    
+
+docker pull canal/canal-server:v1.1.2 docker <span class="hljs-keyword">run</span> -<span class="hljs-keyword">d</span> -it --link pulsar-mysql -<span class="hljs-keyword">e</span> canal.auto.scan=false -<span class="hljs-keyword">e</span> canal.destinations=<span class="hljs-keyword">test</span> -<span class="hljs-keyword">e</span> canal.instance.master.address=pulsar-mysql:3306 -<span class="hljs-keyword">e</span> canal.instance.dbUsername=root -<span class="hljs-keyword">e</span> cana [...]
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- Start pulsar standalone
+    
+    ```<span class="hljs-variable">$bash</span>
+    docker pull apachepulsar/pulsar:2.3.0
+    docker <span class="hljs-keyword">run</span> -<span class="hljs-keyword">d</span> -it --link pulsar-canal-server -p 6650:6650 -p 8080:8080 -v <span class="hljs-variable">$PWD</span>/data:/pulsar/data --name pulsar-standalone apachepulsar/pulsar:2.3.0 bin/pulsar standalone
+    
+
+- Start pulsar-io <span class="hljs-keyword">in</span> standalone
+
+- Config <span class="hljs-keyword">file</span> canal-mysql-source-config.yaml
+
+```<span class="hljs-variable">$yaml</span> configs: zkServers: <span class="hljs-string">""</span> batchSize: <span class="hljs-string">"5120"</span> destination: <span class="hljs-string">"test"</span> username: <span class="hljs-string">""</span> password: <span class="hljs-string">""</span> <span class="hljs-keyword">cluster</span>: false singleHostname: <span class="hljs-string">"pulsar-canal-server"</span> singlePort: <span class="hljs-string">"11111"</span>
+
+    - Consumer <span class="hljs-keyword">file</span> pulsar-client.py <span class="hljs-keyword">for</span> <span class="hljs-keyword">test</span>
+    
+
+import pulsar
+
+client = pulsar.Client('pulsar:<span class="hljs-comment">//localhost:6650') consumer = client.subscribe('my-topic', subscription_name='my-sub')</span>
+
+<span class="hljs-keyword">while</span> True: msg = consumer.receive() <span class="hljs-keyword">print</span>(<span class="hljs-string">"Received message: '%s'"</span> % msg.data()) consumer.acknowledge(msg)
+
+client.<span class="hljs-keyword">close</span>()
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- <span class="hljs-keyword">Copy</span> config <span class="hljs-keyword">file</span> and <span class="hljs-keyword">test</span> <span class="hljs-keyword">file</span> to pulsar server
+    
+    ```<span class="hljs-variable">$bash</span>
+    docker cp canal-mysql-source-config.yaml pulsar-standalone:/pulsar/<span class="hljs-keyword">conf</span>/
+    docker cp pulsar-client.py pulsar-standalone:/pulsar/
+    
+
+- Download canal connector and start canal connector ```<span class="hljs-variable">$bash</span> docker exec -it pulsar-standalone /bin/bash wget http:<span class="hljs-comment">//apache.01link.hk/pulsar/pulsar-2.3.0/connectors/pulsar-io-canal-2.3.0.nar -P connectors ./bin/pulsar-admin source localrun --archive ./connectors/pulsar-io-canal-2.3.0.nar --classname org.apache.pulsar.io.canal.CanalStringSource --tenant public --namespace default --name canal --destination-topic-name my-topic  [...]
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- Consumption data 
+    
+    ```<span class="hljs-variable">$bash</span>
+    docker exec -it pulsar-standalone /bin/bash
+    python pulsar-client.py
+    
+
+- <span class="hljs-keyword">Open</span> another <span class="hljs-keyword">window</span> <span class="hljs-keyword">for</span> login mysql server
+
+```<span class="hljs-variable">$bash</span> docker exec -it pulsar-mysql /bin/bash mysql -<span class="hljs-keyword">h</span> 127.0.0.1 -uroot -pcanal
+
+    - Create <span class="hljs-keyword">table</span> and insert, delete, <span class="hljs-keyword">update</span> data <span class="hljs-keyword">in</span> mysql server
+    
+
+mysql&gt; <span class="hljs-keyword">use</span> <span class="hljs-keyword">test</span>; mysql&gt; show tables; mysql&gt; CREATE <span class="hljs-keyword">TABLE</span> <span class="hljs-keyword">IF</span> NOT EXISTS `test_table`(`test_id` INT UNSIGNED AUTO_INCREMENT,`test_title` VARCHAR(100) NOT NULL, `test_author` VARCHAR(40) NOT NULL, `test_date` DATE,PRIMARY KEY ( `test_id` ))ENGINE=InnoDB DEFAULT CHARSET=utf8; mysql&gt; INSERT INTO test_table (test_title, test_author, test_date) VALU [...]
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apache Software Foundation.</section><span><script>
+      const community = document.querySelector("a[href='#community']").parentNode;
+      const communityMenu =
+        '<li>' +
+        '<a id="community-menu" href="#">Community <span style="font-size: 0.75em">&nbsp;▼</span></a>' +
+        '<div id="community-dropdown" class="hide">' +
+          '<ul id="community-dropdown-items">' +
+            '<li><a href="/ja/contact">Contact</a></li>' +
+            '<li><a href="/ja/contributing">Contributing</a></li>' +
+            '<li><a href="/ja/events">Events</a></li>' +
+            '<li><a href="https://twitter.com/Apache_Pulsar" target="_blank">Twitter &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/wiki" target="_blank">Wiki &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/issues" target="_blank">Issue tracking &#x2750</a></li>' +
+            '<li>&nbsp;</li>' +
+            '<li><a href="/ja/resources">Resources</a></li>' +
+            '<li><a href="/ja/team">Team</a></li>' +
+          '</ul>' +
+        '</div>' +
+        '</li>';
+
+      community.innerHTML = communityMenu;
+
+      const communityMenuItem = document.getElementById("community-menu");
+      const communityDropDown = document.getElementById("community-dropdown");
+      communityMenuItem.addEventListener("click", function(event) {
+        event.preventDefault();
+
+        if (communityDropDown.className == 'hide') {
+          communityDropDown.className = 'visible';
+        } else {
+          communityDropDown.className = 'hide';
+        }
+      });
+    </script></span><span><script src="/js/pjax-api.min.js"></script><script>window.navfoo = new Pjax({
+            areas: [
+              // try to use the first query.
+              '.mainContainer, .docsNavContainer .toc .navWrapper, .onPageNav',
+              // fallback
+              'body'
+            ],
+            link: '.docsNavContainer:not(.docsSliderActive) a',
+            update: {
+              script: false,
+            }
+          });
+        </script></span></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</scri [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: 'd226a455cecdd4bc18a554c1b47e5b52',
+                indexName: 'apache_pulsar',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:ja","version:2.3.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/ja/io-cdc-canal/index.html b/content/docs/ja/io-cdc-canal/index.html
new file mode 100644
index 0000000..0cb3204
--- /dev/null
+++ b/content/docs/ja/io-cdc-canal/index.html
@@ -0,0 +1,206 @@
+<!DOCTYPE html><html lang="ja"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>CDC Canal Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-configuration-options&quot; aria-hidden=&quot [...]
+"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="ja"/><meta property="og:title" content="CDC Canal Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-con [...]
+"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
+              (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+              (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+              m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+              })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+              ga('create', 'UA-102219959-1', 'auto');
+              ga('send', 'pageview');
+            </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div clas [...]
+        const languagesMenuItem = document.getElementById("languages-menu");
+        const languagesDropDown = document.getElementById("languages-dropdown");
+        languagesMenuItem.addEventListener("click", function(event) {
+          event.preventDefault();
+
+          if (languagesDropDown.className == "hide") {
+            languagesDropDown.className = "visible";
+          } else {
+            languagesDropDown.className = "hide";
+          }
+        });
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ja" target="_blank" rel="noreferrer noopener">Transla [...]
+<p>The Configuration is mostly related to Canal task config.</p>
+<table>
+<thead>
+<tr><th>Name</th><th>Required</th><th>Default</th><th>Description</th></tr>
+</thead>
+<tbody>
+<tr><td><code>zkServers</code></td><td><code>false</code></td><td><code>127.0.0.1:2181</code></td><td><code>The address and port of the zookeeper . if canal server configured to cluster mode</code></td></tr>
+<tr><td><code>batchSize</code></td><td><code>true</code></td><td><code>5120</code></td><td><code>Take 5120 records from the canal server in batches</code></td></tr>
+<tr><td><code>username</code></td><td><code>false</code></td><td>``</td><td><code>Canal server account, not MySQL</code></td></tr>
+<tr><td><code>password</code></td><td><code>false</code></td><td>``</td><td><code>Canal server password, not MySQL</code></td></tr>
+<tr><td><code>cluster</code></td><td><code>false</code></td><td><code>false</code></td><td><code>Decide whether to open cluster mode based on canal server configuration, true: cluster mode, false: standalone mode</code></td></tr>
+<tr><td><code>singleHostname</code></td><td><code>false</code></td><td><code>127.0.0.1</code></td><td><code>The address of canal server</code></td></tr>
+<tr><td><code>singlePort</code></td><td><code>false</code></td><td><code>11111</code></td><td><code>The port of canal server</code></td></tr>
+</tbody>
+</table>
+<h3><a class="anchor" aria-hidden="true" id="configuration-example"></a><a href="#configuration-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 [...]
+<p>Here is a configuration Json example:</p>
+<pre><code class="hljs css language-$json { &quot;zkServers&quot;: &quot;127.0.0.1:2181&quot;, &quot;batchSize&quot;: &quot;5120&quot;, &quot;destination&quot;: &quot;example&quot;, &quot;username&quot;: &quot;&quot;, &quot;password&quot;: &quot;&quot;, &quot;cluster&quot;: false, &quot;singleHostname&quot;: &quot;127.0.0.1&quot;, &quot;singlePort&quot;: &quot;11111&quot;, }">
+    You could also find the yaml example <span class="hljs-keyword">in</span> this [<span class="hljs-keyword">file</span>](https:<span class="hljs-comment">//github.com/apache/pulsar/blob/master/pulsar-io/canal/src/main/resources/canal-mysql-source-config.yaml), which has similar content below:</span>
+    
+    ```<span class="hljs-variable">$yaml</span>
+    configs:
+        zkServers: <span class="hljs-string">"127.0.0.1:2181"</span>
+        batchSize: <span class="hljs-string">"5120"</span>
+        destination: <span class="hljs-string">"example"</span>
+        username: <span class="hljs-string">""</span>
+        password: <span class="hljs-string">""</span>
+        <span class="hljs-keyword">cluster</span>: false
+        singleHostname: <span class="hljs-string">"127.0.0.1"</span>
+        singlePort: <span class="hljs-string">"11111"</span>
+    
+
+### Usage example
+
+Here is a simple example to store MySQL change data using above example config.
+
+- Start a MySQL server
+
+```<span class="hljs-variable">$bash</span> docker pull mysql:5.7 docker <span class="hljs-keyword">run</span> -<span class="hljs-keyword">d</span> -it --<span class="hljs-keyword">rm</span> --name pulsar-mysql -p 3306:3306 -<span class="hljs-keyword">e</span> MYSQL_ROOT_PASSWORD=canal -<span class="hljs-keyword">e</span> MYSQL_USER=mysqluser -<span class="hljs-keyword">e</span> MYSQL_PASSWORD=mysqlpw mysql:5.7
+
+    - Modify configuration files mysqld.cnf
+    
+    
+
+[mysqld] pid-<span class="hljs-keyword">file</span> = /<span class="hljs-keyword">var</span>/<span class="hljs-keyword">run</span>/mysqld/mysqld.pid socket = /<span class="hljs-keyword">var</span>/<span class="hljs-keyword">run</span>/mysqld/mysqld.sock datadir = /<span class="hljs-keyword">var</span>/lib/mysql
+
+# <span class="hljs-keyword">log</span>-<span class="hljs-keyword">error</span> = /<span class="hljs-keyword">var</span>/<span class="hljs-keyword">log</span>/mysql/<span class="hljs-keyword">error</span>.<span class="hljs-built_in">log</span>
+
+# <span class="hljs-keyword">By</span> default we only accept connections from localhost
+
+# bind-address = 127.0.0.1
+
+# Disabling symbolic-links is recommended to prevent assorted security risks
+
+symbolic-links=0 <span class="hljs-keyword">log</span>-bin=mysql-bin binlog-<span class="hljs-keyword">format</span>=ROW server_id=1
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- <span class="hljs-keyword">Copy</span> <span class="hljs-keyword">file</span> to mysql server from <span class="hljs-keyword">local</span> and restart mysql server
+    ```<span class="hljs-variable">$bash</span>
+    docker cp mysqld.cnf pulsar-mysql:/etc/mysql/mysql.<span class="hljs-keyword">conf</span>.<span class="hljs-keyword">d</span>/
+    docker restart pulsar-mysql
+    
+
+- Create <span class="hljs-keyword">test</span> database <span class="hljs-keyword">in</span> mysql server ```<span class="hljs-variable">$bash</span> docker exec -it pulsar-mysql /bin/bash mysql -<span class="hljs-keyword">h</span> 127.0.0.1 -uroot -pcanal -<span class="hljs-keyword">e</span> 'create database <span class="hljs-keyword">test</span>;'
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- Start canal server and connect mysql server
+    
+    
+
+docker pull canal/canal-server:v1.1.2 docker <span class="hljs-keyword">run</span> -<span class="hljs-keyword">d</span> -it --link pulsar-mysql -<span class="hljs-keyword">e</span> canal.auto.scan=false -<span class="hljs-keyword">e</span> canal.destinations=<span class="hljs-keyword">test</span> -<span class="hljs-keyword">e</span> canal.instance.master.address=pulsar-mysql:3306 -<span class="hljs-keyword">e</span> canal.instance.dbUsername=root -<span class="hljs-keyword">e</span> cana [...]
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- Start pulsar standalone
+    
+    ```<span class="hljs-variable">$bash</span>
+    docker pull apachepulsar/pulsar:2.3.0
+    docker <span class="hljs-keyword">run</span> -<span class="hljs-keyword">d</span> -it --link pulsar-canal-server -p 6650:6650 -p 8080:8080 -v <span class="hljs-variable">$PWD</span>/data:/pulsar/data --name pulsar-standalone apachepulsar/pulsar:2.3.0 bin/pulsar standalone
+    
+
+- Start pulsar-io <span class="hljs-keyword">in</span> standalone
+
+- Config <span class="hljs-keyword">file</span> canal-mysql-source-config.yaml
+
+```<span class="hljs-variable">$yaml</span> configs: zkServers: <span class="hljs-string">""</span> batchSize: <span class="hljs-string">"5120"</span> destination: <span class="hljs-string">"test"</span> username: <span class="hljs-string">""</span> password: <span class="hljs-string">""</span> <span class="hljs-keyword">cluster</span>: false singleHostname: <span class="hljs-string">"pulsar-canal-server"</span> singlePort: <span class="hljs-string">"11111"</span>
+
+    - Consumer <span class="hljs-keyword">file</span> pulsar-client.py <span class="hljs-keyword">for</span> <span class="hljs-keyword">test</span>
+    
+
+import pulsar
+
+client = pulsar.Client('pulsar:<span class="hljs-comment">//localhost:6650') consumer = client.subscribe('my-topic', subscription_name='my-sub')</span>
+
+<span class="hljs-keyword">while</span> True: msg = consumer.receive() <span class="hljs-keyword">print</span>(<span class="hljs-string">"Received message: '%s'"</span> % msg.data()) consumer.acknowledge(msg)
+
+client.<span class="hljs-keyword">close</span>()
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- <span class="hljs-keyword">Copy</span> config <span class="hljs-keyword">file</span> and <span class="hljs-keyword">test</span> <span class="hljs-keyword">file</span> to pulsar server
+    
+    ```<span class="hljs-variable">$bash</span>
+    docker cp canal-mysql-source-config.yaml pulsar-standalone:/pulsar/<span class="hljs-keyword">conf</span>/
+    docker cp pulsar-client.py pulsar-standalone:/pulsar/
+    
+
+- Download canal connector and start canal connector ```<span class="hljs-variable">$bash</span> docker exec -it pulsar-standalone /bin/bash wget http:<span class="hljs-comment">//apache.01link.hk/pulsar/pulsar-2.3.0/connectors/pulsar-io-canal-2.3.0.nar -P connectors ./bin/pulsar-admin source localrun --archive ./connectors/pulsar-io-canal-2.3.0.nar --classname org.apache.pulsar.io.canal.CanalStringSource --tenant public --namespace default --name canal --destination-topic-name my-topic  [...]
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- Consumption data 
+    
+    ```<span class="hljs-variable">$bash</span>
+    docker exec -it pulsar-standalone /bin/bash
+    python pulsar-client.py
+    
+
+- <span class="hljs-keyword">Open</span> another <span class="hljs-keyword">window</span> <span class="hljs-keyword">for</span> login mysql server
+
+```<span class="hljs-variable">$bash</span> docker exec -it pulsar-mysql /bin/bash mysql -<span class="hljs-keyword">h</span> 127.0.0.1 -uroot -pcanal
+
+    - Create <span class="hljs-keyword">table</span> and insert, delete, <span class="hljs-keyword">update</span> data <span class="hljs-keyword">in</span> mysql server
+    
+
+mysql&gt; <span class="hljs-keyword">use</span> <span class="hljs-keyword">test</span>; mysql&gt; show tables; mysql&gt; CREATE <span class="hljs-keyword">TABLE</span> <span class="hljs-keyword">IF</span> NOT EXISTS `test_table`(`test_id` INT UNSIGNED AUTO_INCREMENT,`test_title` VARCHAR(100) NOT NULL, `test_author` VARCHAR(40) NOT NULL, `test_date` DATE,PRIMARY KEY ( `test_id` ))ENGINE=InnoDB DEFAULT CHARSET=utf8; mysql&gt; INSERT INTO test_table (test_title, test_author, test_date) VALU [...]
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apache Software Foundation.</section><span><script>
+      const community = document.querySelector("a[href='#community']").parentNode;
+      const communityMenu =
+        '<li>' +
+        '<a id="community-menu" href="#">Community <span style="font-size: 0.75em">&nbsp;▼</span></a>' +
+        '<div id="community-dropdown" class="hide">' +
+          '<ul id="community-dropdown-items">' +
+            '<li><a href="/ja/contact">Contact</a></li>' +
+            '<li><a href="/ja/contributing">Contributing</a></li>' +
+            '<li><a href="/ja/events">Events</a></li>' +
+            '<li><a href="https://twitter.com/Apache_Pulsar" target="_blank">Twitter &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/wiki" target="_blank">Wiki &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/issues" target="_blank">Issue tracking &#x2750</a></li>' +
+            '<li>&nbsp;</li>' +
+            '<li><a href="/ja/resources">Resources</a></li>' +
+            '<li><a href="/ja/team">Team</a></li>' +
+          '</ul>' +
+        '</div>' +
+        '</li>';
+
+      community.innerHTML = communityMenu;
+
+      const communityMenuItem = document.getElementById("community-menu");
+      const communityDropDown = document.getElementById("community-dropdown");
+      communityMenuItem.addEventListener("click", function(event) {
+        event.preventDefault();
+
+        if (communityDropDown.className == 'hide') {
+          communityDropDown.className = 'visible';
+        } else {
+          communityDropDown.className = 'hide';
+        }
+      });
+    </script></span><span><script src="/js/pjax-api.min.js"></script><script>window.navfoo = new Pjax({
+            areas: [
+              // try to use the first query.
+              '.mainContainer, .docsNavContainer .toc .navWrapper, .onPageNav',
+              // fallback
+              'body'
+            ],
+            link: '.docsNavContainer:not(.docsSliderActive) a',
+            update: {
+              script: false,
+            }
+          });
+        </script></span></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</scri [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: 'd226a455cecdd4bc18a554c1b47e5b52',
+                indexName: 'apache_pulsar',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:ja","version:2.3.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/ja/io-cdc-debezium.html b/content/docs/ja/io-cdc-debezium.html
new file mode 100644
index 0000000..4e157e7
--- /dev/null
+++ b/content/docs/ja/io-cdc-debezium.html
@@ -0,0 +1,184 @@
+<!DOCTYPE html><html lang="ja"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>CDC Debezium Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-configuration-options&quot; aria-hidden=&q [...]
+"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="ja"/><meta property="og:title" content="CDC Debezium Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source- [...]
+"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
+              (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+              (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+              m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+              })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+              ga('create', 'UA-102219959-1', 'auto');
+              ga('send', 'pageview');
+            </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div clas [...]
+        const languagesMenuItem = document.getElementById("languages-menu");
+        const languagesDropDown = document.getElementById("languages-dropdown");
+        languagesMenuItem.addEventListener("click", function(event) {
+          event.preventDefault();
+
+          if (languagesDropDown.className == "hide") {
+            languagesDropDown.className = "visible";
+          } else {
+            languagesDropDown.className = "hide";
+          }
+        });
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ja" target="_blank" rel="noreferrer noopener">Transla [...]
+<p>The Configuration is mostly related to Debezium task config, besides this we should provides the service URL of Pulsar cluster, and topic names that used to store offset and history.</p>
+<table>
+<thead>
+<tr><th>Name</th><th>Required</th><th>Default</th><th>Description</th></tr>
+</thead>
+<tbody>
+<tr><td><code>task.class</code></td><td><code>true</code></td><td><code>null</code></td><td>A source task class that implemented in Debezium.</td></tr>
+<tr><td><code>database.hostname</code></td><td><code>true</code></td><td><code>null</code></td><td>The address of the Database server.</td></tr>
+<tr><td><code>database.port</code></td><td><code>true</code></td><td><code>null</code></td><td>The port number of the Database server..</td></tr>
+<tr><td><code>database.user</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the Database user that has the required privileges.</td></tr>
+<tr><td><code>database.password</code></td><td><code>true</code></td><td><code>null</code></td><td>The password for the Database user that has the required privileges.</td></tr>
+<tr><td><code>database.server.id</code></td><td><code>true</code></td><td><code>null</code></td><td>The connector’s identifier that must be unique within the Database cluster and similar to Database’s server-id configuration property.</td></tr>
+<tr><td><code>database.server.name</code></td><td><code>true</code></td><td><code>null</code></td><td>The logical name of the Database server/cluster, which forms a namespace and is used in all the names of the Kafka topics to which the connector writes, the Kafka Connect schema names, and the namespaces of the corresponding Avro schema when the Avro Connector is used.</td></tr>
+<tr><td><code>database.whitelist</code></td><td><code>false</code></td><td><code>null</code></td><td>A list of all databases hosted by this server that this connector will monitor. This is optional, and there are other properties for listing the databases and tables to include or exclude from monitoring.</td></tr>
+<tr><td><code>key.converter</code></td><td><code>true</code></td><td><code>null</code></td><td>The converter provided by Kafka Connect to convert record key.</td></tr>
+<tr><td><code>value.converter</code></td><td><code>true</code></td><td><code>null</code></td><td>The converter provided by Kafka Connect to convert record value.</td></tr>
+<tr><td><code>database.history</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the database history class name.</td></tr>
+<tr><td><code>database.history.pulsar.topic</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the database history topic where the connector will write and recover DDL statements. This topic is for internal use only and should not be used by consumers.</td></tr>
+<tr><td><code>database.history.pulsar.service.url</code></td><td><code>true</code></td><td><code>null</code></td><td>Pulsar cluster service url for history topic.</td></tr>
+<tr><td><code>pulsar.service.url</code></td><td><code>true</code></td><td><code>null</code></td><td>Pulsar cluster service url.</td></tr>
+<tr><td><code>offset.storage.topic</code></td><td><code>true</code></td><td><code>null</code></td><td>Record the last committed offsets that the connector successfully completed.</td></tr>
+</tbody>
+</table>
+<h3><a class="anchor" aria-hidden="true" id="configuration-example"></a><a href="#configuration-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 [...]
+<p>Here is a configuration Json example:</p>
+<pre><code class="hljs css language-$json { &quot;tenant&quot;: &quot;public&quot;, &quot;namespace&quot;: &quot;default&quot;, &quot;name&quot;: &quot;debezium-kafka-source&quot;, &quot;className&quot;: &quot;org.apache.pulsar.io.kafka.connect.KafkaConnectSource&quot; , &quot;topicName&quot;: &quot;kafka-connect-topic&quot;, &quot;configs&quot;: { &quot;task.class&quot;: &quot;io.debezium.connector.mysql.MySqlConnectorTask&quot;, &quot;database.hostname&quot;: &quot;localhost&quot;, &qu [...]
+    &lt;<span class="hljs-keyword">br</span> /&gt;You could also find the yaml example <span class="hljs-keyword">in</span> this [<span class="hljs-keyword">file</span>](https:<span class="hljs-comment">//github.com/apache/pulsar/blob/master/pulsar-io/kafka-connect-adaptor/src/main/resources/debezium-mysql-source-config.yaml), which has similar content below:</span>
+    
+    ```<span class="hljs-variable">$yaml</span>
+    tenant: <span class="hljs-string">"public"</span>
+    namespace: <span class="hljs-string">"default"</span>
+    name: <span class="hljs-string">"debezium-kafka-source"</span>
+    topicName: <span class="hljs-string">"kafka-connect-topic"</span>
+    archive: <span class="hljs-string">"connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar"</span>
+    
+    ##autoAck: true
+    parallelism: 1
+    
+    configs:
+      ## sourceTask
+      task.<span class="hljs-keyword">class</span>: <span class="hljs-string">"io.debezium.connector.mysql.MySqlConnectorTask"</span>
+    
+      ## config <span class="hljs-keyword">for</span> mysql, docker image: debezium/example-mysql:0.8
+      database.hostname: <span class="hljs-string">"localhost"</span>
+      database.port: <span class="hljs-string">"3306"</span>
+      database.user: <span class="hljs-string">"debezium"</span>
+      database.password: <span class="hljs-string">"dbz"</span>
+      database.server.id: <span class="hljs-string">"184054"</span>
+      database.server.name: <span class="hljs-string">"dbserver1"</span>
+      database.whitelist: <span class="hljs-string">"inventory"</span>
+    
+      database.history: <span class="hljs-string">"org.apache.pulsar.io.debezium.PulsarDatabaseHistory"</span>
+      database.history.pulsar.topic: <span class="hljs-string">"history-topic"</span>
+      database.history.pulsar.service.url: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>
+      ## KEY_CONVERTER_CLASS_CONFIG, VALUE_CONVERTER_CLASS_CONFIG
+      key.converter: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>
+      value.converter: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>
+      ## PULSAR_SERVICE_URL_CONFIG
+      pulsar.service.url: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>
+      ## OFFSET_STORAGE_TOPIC_CONFIG
+      offset.storage.topic: <span class="hljs-string">"offset-topic"</span>
+    
+
+### Usage example
+
+Here is a simple example to store MySQL change data using above example config.
+
+- Start a MySQL server with <span class="hljs-keyword">an</span> example database, from <span class="hljs-keyword">which</span> Debezium can <span class="hljs-keyword">capture</span> changes. ```<span class="hljs-variable">$bash</span> docker <span class="hljs-keyword">run</span> -it --<span class="hljs-keyword">rm</span> --name mysql -p 3306:3306 -<span class="hljs-keyword">e</span> MYSQL_ROOT_PASSWORD=debezium -<span class="hljs-keyword">e</span> MYSQL_USER=mysqluser -<span class="hljs [...]
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- Start a Pulsar service locally <span class="hljs-keyword">in</span> standalone mode.
+    ```<span class="hljs-variable">$bash</span>
+     bin/pulsar standalone
+    
+
+- Start pulsar debezium connector, with <span class="hljs-keyword">local</span> <span class="hljs-keyword">run</span> mode, and using above yaml config <span class="hljs-keyword">file</span>. Please make sure that the nar <span class="hljs-keyword">file</span> is available <span class="hljs-keyword">as</span> configured <span class="hljs-keyword">in</span> path `connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar`. ```<span class="hljs-variable">$bash</span> bin/pulsar-admin so [...]
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- Subscribe the topic <span class="hljs-keyword">for</span> <span class="hljs-keyword">table</span> `inventory.products`.
+    
+
+bin/pulsar-client consume -s <span class="hljs-string">"sub-products"</span> public/default/dbserver1.inventory.products -<span class="hljs-keyword">n</span> 0
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- start a MySQL <span class="hljs-keyword">cli</span> docker connector, and <span class="hljs-keyword">use</span> it we could change to the <span class="hljs-keyword">table</span> `products` <span class="hljs-keyword">in</span> MySQL server.
+    ```<span class="hljs-variable">$bash</span>
+    <span class="hljs-variable">$docker</span> <span class="hljs-keyword">run</span> -it --<span class="hljs-keyword">rm</span> --name mysqlterm --link mysql --<span class="hljs-keyword">rm</span> mysql:5.7 <span class="hljs-keyword">sh</span> -c 'exec mysql -<span class="hljs-keyword">h</span><span class="hljs-string">"$MYSQL_PORT_3306_TCP_ADDR"</span> -P<span class="hljs-string">"$MYSQL_PORT_3306_TCP_PORT"</span> -uroot -p<span class="hljs-string">"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"</span>'
+    
+
+This command will pop <span class="hljs-keyword">out</span> MySQL <span class="hljs-keyword">cli</span>, <span class="hljs-keyword">in</span> this <span class="hljs-keyword">cli</span>, we could <span class="hljs-keyword">do</span> a change <span class="hljs-keyword">in</span> <span class="hljs-keyword">table</span> products, <span class="hljs-keyword">use</span> commands below to change the name of 2 items <span class="hljs-keyword">in</span> <span class="hljs-keyword">table</span> products:
+
+    mysql&gt; <span class="hljs-keyword">use</span> inventory;
+    mysql&gt; show tables;
+    mysql&gt; SELECT * FROM  products ;
+    mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-keyword">SET</span> name='1111111111' WHERE id=101;
+    mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-keyword">SET</span> name='1111111111' WHERE id=107;
+    
+
+- <span class="hljs-keyword">In</span> above subscribe topic terminal <span class="hljs-keyword">tab</span>, we could find that 2 changes has been kept into products topic.</code></pre>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apache Software Foundation.</section><span><script>
+      const community = document.querySelector("a[href='#community']").parentNode;
+      const communityMenu =
+        '<li>' +
+        '<a id="community-menu" href="#">Community <span style="font-size: 0.75em">&nbsp;▼</span></a>' +
+        '<div id="community-dropdown" class="hide">' +
+          '<ul id="community-dropdown-items">' +
+            '<li><a href="/ja/contact">Contact</a></li>' +
+            '<li><a href="/ja/contributing">Contributing</a></li>' +
+            '<li><a href="/ja/events">Events</a></li>' +
+            '<li><a href="https://twitter.com/Apache_Pulsar" target="_blank">Twitter &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/wiki" target="_blank">Wiki &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/issues" target="_blank">Issue tracking &#x2750</a></li>' +
+            '<li>&nbsp;</li>' +
+            '<li><a href="/ja/resources">Resources</a></li>' +
+            '<li><a href="/ja/team">Team</a></li>' +
+          '</ul>' +
+        '</div>' +
+        '</li>';
+
+      community.innerHTML = communityMenu;
+
+      const communityMenuItem = document.getElementById("community-menu");
+      const communityDropDown = document.getElementById("community-dropdown");
+      communityMenuItem.addEventListener("click", function(event) {
+        event.preventDefault();
+
+        if (communityDropDown.className == 'hide') {
+          communityDropDown.className = 'visible';
+        } else {
+          communityDropDown.className = 'hide';
+        }
+      });
+    </script></span><span><script src="/js/pjax-api.min.js"></script><script>window.navfoo = new Pjax({
+            areas: [
+              // try to use the first query.
+              '.mainContainer, .docsNavContainer .toc .navWrapper, .onPageNav',
+              // fallback
+              'body'
+            ],
+            link: '.docsNavContainer:not(.docsSliderActive) a',
+            update: {
+              script: false,
+            }
+          });
+        </script></span></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</scri [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: 'd226a455cecdd4bc18a554c1b47e5b52',
+                indexName: 'apache_pulsar',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:ja","version:2.3.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/ja/io-cdc-debezium/index.html b/content/docs/ja/io-cdc-debezium/index.html
new file mode 100644
index 0000000..4e157e7
--- /dev/null
+++ b/content/docs/ja/io-cdc-debezium/index.html
@@ -0,0 +1,184 @@
+<!DOCTYPE html><html lang="ja"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>CDC Debezium Connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source-configuration-options&quot; aria-hidden=&q [...]
+"/><meta name="docsearch:version" content="2.3.0"/><meta name="docsearch:language" content="ja"/><meta property="og:title" content="CDC Debezium Connector · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" content="&lt;h3&gt;&lt;a class=&quot;anchor&quot; aria-hidden=&quot;true&quot; id=&quot;source-configuration-options&quot;&gt;&lt;/a&gt;&lt;a href=&quot;#source- [...]
+"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.x [...]
+              (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+              (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+              m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+              })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+              ga('create', 'UA-102219959-1', 'auto');
+              ga('send', 'pageview');
+            </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div clas [...]
+        const languagesMenuItem = document.getElementById("languages-menu");
+        const languagesDropDown = document.getElementById("languages-dropdown");
+        languagesMenuItem.addEventListener("click", function(event) {
+          event.preventDefault();
+
+          if (languagesDropDown.className == "hide") {
+            languagesDropDown.className = "visible";
+          } else {
+            languagesDropDown.className = "hide";
+          }
+        });
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ja" target="_blank" rel="noreferrer noopener">Transla [...]
+<p>The Configuration is mostly related to Debezium task config, besides this we should provides the service URL of Pulsar cluster, and topic names that used to store offset and history.</p>
+<table>
+<thead>
+<tr><th>Name</th><th>Required</th><th>Default</th><th>Description</th></tr>
+</thead>
+<tbody>
+<tr><td><code>task.class</code></td><td><code>true</code></td><td><code>null</code></td><td>A source task class that implemented in Debezium.</td></tr>
+<tr><td><code>database.hostname</code></td><td><code>true</code></td><td><code>null</code></td><td>The address of the Database server.</td></tr>
+<tr><td><code>database.port</code></td><td><code>true</code></td><td><code>null</code></td><td>The port number of the Database server..</td></tr>
+<tr><td><code>database.user</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the Database user that has the required privileges.</td></tr>
+<tr><td><code>database.password</code></td><td><code>true</code></td><td><code>null</code></td><td>The password for the Database user that has the required privileges.</td></tr>
+<tr><td><code>database.server.id</code></td><td><code>true</code></td><td><code>null</code></td><td>The connector’s identifier that must be unique within the Database cluster and similar to Database’s server-id configuration property.</td></tr>
+<tr><td><code>database.server.name</code></td><td><code>true</code></td><td><code>null</code></td><td>The logical name of the Database server/cluster, which forms a namespace and is used in all the names of the Kafka topics to which the connector writes, the Kafka Connect schema names, and the namespaces of the corresponding Avro schema when the Avro Connector is used.</td></tr>
+<tr><td><code>database.whitelist</code></td><td><code>false</code></td><td><code>null</code></td><td>A list of all databases hosted by this server that this connector will monitor. This is optional, and there are other properties for listing the databases and tables to include or exclude from monitoring.</td></tr>
+<tr><td><code>key.converter</code></td><td><code>true</code></td><td><code>null</code></td><td>The converter provided by Kafka Connect to convert record key.</td></tr>
+<tr><td><code>value.converter</code></td><td><code>true</code></td><td><code>null</code></td><td>The converter provided by Kafka Connect to convert record value.</td></tr>
+<tr><td><code>database.history</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the database history class name.</td></tr>
+<tr><td><code>database.history.pulsar.topic</code></td><td><code>true</code></td><td><code>null</code></td><td>The name of the database history topic where the connector will write and recover DDL statements. This topic is for internal use only and should not be used by consumers.</td></tr>
+<tr><td><code>database.history.pulsar.service.url</code></td><td><code>true</code></td><td><code>null</code></td><td>Pulsar cluster service url for history topic.</td></tr>
+<tr><td><code>pulsar.service.url</code></td><td><code>true</code></td><td><code>null</code></td><td>Pulsar cluster service url.</td></tr>
+<tr><td><code>offset.storage.topic</code></td><td><code>true</code></td><td><code>null</code></td><td>Record the last committed offsets that the connector successfully completed.</td></tr>
+</tbody>
+</table>
+<h3><a class="anchor" aria-hidden="true" id="configuration-example"></a><a href="#configuration-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 [...]
+<p>Here is a configuration Json example:</p>
+<pre><code class="hljs css language-$json { &quot;tenant&quot;: &quot;public&quot;, &quot;namespace&quot;: &quot;default&quot;, &quot;name&quot;: &quot;debezium-kafka-source&quot;, &quot;className&quot;: &quot;org.apache.pulsar.io.kafka.connect.KafkaConnectSource&quot; , &quot;topicName&quot;: &quot;kafka-connect-topic&quot;, &quot;configs&quot;: { &quot;task.class&quot;: &quot;io.debezium.connector.mysql.MySqlConnectorTask&quot;, &quot;database.hostname&quot;: &quot;localhost&quot;, &qu [...]
+    &lt;<span class="hljs-keyword">br</span> /&gt;You could also find the yaml example <span class="hljs-keyword">in</span> this [<span class="hljs-keyword">file</span>](https:<span class="hljs-comment">//github.com/apache/pulsar/blob/master/pulsar-io/kafka-connect-adaptor/src/main/resources/debezium-mysql-source-config.yaml), which has similar content below:</span>
+    
+    ```<span class="hljs-variable">$yaml</span>
+    tenant: <span class="hljs-string">"public"</span>
+    namespace: <span class="hljs-string">"default"</span>
+    name: <span class="hljs-string">"debezium-kafka-source"</span>
+    topicName: <span class="hljs-string">"kafka-connect-topic"</span>
+    archive: <span class="hljs-string">"connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar"</span>
+    
+    ##autoAck: true
+    parallelism: 1
+    
+    configs:
+      ## sourceTask
+      task.<span class="hljs-keyword">class</span>: <span class="hljs-string">"io.debezium.connector.mysql.MySqlConnectorTask"</span>
+    
+      ## config <span class="hljs-keyword">for</span> mysql, docker image: debezium/example-mysql:0.8
+      database.hostname: <span class="hljs-string">"localhost"</span>
+      database.port: <span class="hljs-string">"3306"</span>
+      database.user: <span class="hljs-string">"debezium"</span>
+      database.password: <span class="hljs-string">"dbz"</span>
+      database.server.id: <span class="hljs-string">"184054"</span>
+      database.server.name: <span class="hljs-string">"dbserver1"</span>
+      database.whitelist: <span class="hljs-string">"inventory"</span>
+    
+      database.history: <span class="hljs-string">"org.apache.pulsar.io.debezium.PulsarDatabaseHistory"</span>
+      database.history.pulsar.topic: <span class="hljs-string">"history-topic"</span>
+      database.history.pulsar.service.url: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>
+      ## KEY_CONVERTER_CLASS_CONFIG, VALUE_CONVERTER_CLASS_CONFIG
+      key.converter: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>
+      value.converter: <span class="hljs-string">"org.apache.kafka.connect.json.JsonConverter"</span>
+      ## PULSAR_SERVICE_URL_CONFIG
+      pulsar.service.url: <span class="hljs-string">"pulsar://127.0.0.1:6650"</span>
+      ## OFFSET_STORAGE_TOPIC_CONFIG
+      offset.storage.topic: <span class="hljs-string">"offset-topic"</span>
+    
+
+### Usage example
+
+Here is a simple example to store MySQL change data using above example config.
+
+- Start a MySQL server with <span class="hljs-keyword">an</span> example database, from <span class="hljs-keyword">which</span> Debezium can <span class="hljs-keyword">capture</span> changes. ```<span class="hljs-variable">$bash</span> docker <span class="hljs-keyword">run</span> -it --<span class="hljs-keyword">rm</span> --name mysql -p 3306:3306 -<span class="hljs-keyword">e</span> MYSQL_ROOT_PASSWORD=debezium -<span class="hljs-keyword">e</span> MYSQL_USER=mysqluser -<span class="hljs [...]
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- Start a Pulsar service locally <span class="hljs-keyword">in</span> standalone mode.
+    ```<span class="hljs-variable">$bash</span>
+     bin/pulsar standalone
+    
+
+- Start pulsar debezium connector, with <span class="hljs-keyword">local</span> <span class="hljs-keyword">run</span> mode, and using above yaml config <span class="hljs-keyword">file</span>. Please make sure that the nar <span class="hljs-keyword">file</span> is available <span class="hljs-keyword">as</span> configured <span class="hljs-keyword">in</span> path `connectors/pulsar-io-kafka-connect-adaptor-2.3.0-SNAPSHOT.nar`. ```<span class="hljs-variable">$bash</span> bin/pulsar-admin so [...]
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- Subscribe the topic <span class="hljs-keyword">for</span> <span class="hljs-keyword">table</span> `inventory.products`.
+    
+
+bin/pulsar-client consume -s <span class="hljs-string">"sub-products"</span> public/default/dbserver1.inventory.products -<span class="hljs-keyword">n</span> 0
+
+    &lt;<span class="hljs-keyword">br</span> /&gt;- start a MySQL <span class="hljs-keyword">cli</span> docker connector, and <span class="hljs-keyword">use</span> it we could change to the <span class="hljs-keyword">table</span> `products` <span class="hljs-keyword">in</span> MySQL server.
+    ```<span class="hljs-variable">$bash</span>
+    <span class="hljs-variable">$docker</span> <span class="hljs-keyword">run</span> -it --<span class="hljs-keyword">rm</span> --name mysqlterm --link mysql --<span class="hljs-keyword">rm</span> mysql:5.7 <span class="hljs-keyword">sh</span> -c 'exec mysql -<span class="hljs-keyword">h</span><span class="hljs-string">"$MYSQL_PORT_3306_TCP_ADDR"</span> -P<span class="hljs-string">"$MYSQL_PORT_3306_TCP_PORT"</span> -uroot -p<span class="hljs-string">"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"</span>'
+    
+
+This command will pop <span class="hljs-keyword">out</span> MySQL <span class="hljs-keyword">cli</span>, <span class="hljs-keyword">in</span> this <span class="hljs-keyword">cli</span>, we could <span class="hljs-keyword">do</span> a change <span class="hljs-keyword">in</span> <span class="hljs-keyword">table</span> products, <span class="hljs-keyword">use</span> commands below to change the name of 2 items <span class="hljs-keyword">in</span> <span class="hljs-keyword">table</span> products:
+
+    mysql&gt; <span class="hljs-keyword">use</span> inventory;
+    mysql&gt; show tables;
+    mysql&gt; SELECT * FROM  products ;
+    mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-keyword">SET</span> name='1111111111' WHERE id=101;
+    mysql&gt; <span class="hljs-keyword">UPDATE</span> products <span class="hljs-keyword">SET</span> name='1111111111' WHERE id=107;
+    
+
+- <span class="hljs-keyword">In</span> above subscribe topic terminal <span class="hljs-keyword">tab</span>, we could find that 2 changes has been kept into products topic.</code></pre>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apache Software Foundation.</section><span><script>
+      const community = document.querySelector("a[href='#community']").parentNode;
+      const communityMenu =
+        '<li>' +
+        '<a id="community-menu" href="#">Community <span style="font-size: 0.75em">&nbsp;▼</span></a>' +
+        '<div id="community-dropdown" class="hide">' +
+          '<ul id="community-dropdown-items">' +
+            '<li><a href="/ja/contact">Contact</a></li>' +
+            '<li><a href="/ja/contributing">Contributing</a></li>' +
+            '<li><a href="/ja/events">Events</a></li>' +
+            '<li><a href="https://twitter.com/Apache_Pulsar" target="_blank">Twitter &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/wiki" target="_blank">Wiki &#x2750</a></li>' +
+            '<li><a href="https://github.com/apache/pulsar/issues" target="_blank">Issue tracking &#x2750</a></li>' +
+            '<li>&nbsp;</li>' +
+            '<li><a href="/ja/resources">Resources</a></li>' +
+            '<li><a href="/ja/team">Team</a></li>' +
+          '</ul>' +
+        '</div>' +
+        '</li>';
+
+      community.innerHTML = communityMenu;
+
+      const communityMenuItem = document.getElementById("community-menu");
+      const communityDropDown = document.getElementById("community-dropdown");
+      communityMenuItem.addEventListener("click", function(event) {
+        event.preventDefault();
+
+        if (communityDropDown.className == 'hide') {
+          communityDropDown.className = 'visible';
+        } else {
+          communityDropDown.className = 'hide';
+        }
+      });
+    </script></span><span><script src="/js/pjax-api.min.js"></script><script>window.navfoo = new Pjax({
+            areas: [
+              // try to use the first query.
+              '.mainContainer, .docsNavContainer .toc .navWrapper, .onPageNav',
+              // fallback
+              'body'
+            ],
+            link: '.docsNavContainer:not(.docsSliderActive) a',
+            update: {
+              script: false,
+            }
+          });
+        </script></span></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</scri [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: 'd226a455cecdd4bc18a554c1b47e5b52',
+                indexName: 'apache_pulsar',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:ja","version:2.3.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/ja/io-cdc.html b/content/docs/ja/io-cdc.html
index dc686e3..588e4b7 100644
--- a/content/docs/ja/io-cdc.html
+++ b/content/docs/ja/io-cdc.html
@@ -72,105 +72,12 @@
             });
         </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ja" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">CDC Connector</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="source"></a><a href="#source" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria- [...]
 <p>The CDC Source connector is used to capture change log of existing databases like MySQL, MongoDB, PostgreSQL into Pulsar.</p>
-<p>The CDC Source connector is built on top of <a href="https://debezium.io/">Debezium</a>. This connector stores all data into Pulsar Cluster in a persistent, replicated and partitioned way. This CDC Source are tested by using MySQL, and you could get more information regarding how it works at <a href="https://debezium.io/docs/connectors/mysql/">this link</a>. Regarding how Debezium works, please reference to <a href="https://debezium.io/docs/tutorial/">Debezium tutorial</a>. It is reco [...]
-<h3><a class="anchor" aria-hidden="true" id="source-configuration-options"></a><a href="#source-configuration-options" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 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>The Configuration is mostly related to Debezium task config, besides this we should provides the service URL of Pulsar cluster, and topic names that used to store offset and history.</p>
-<table>
-<thead>
-<tr><th>Name</th><th>Required</th><th>Default</th><th>Description</th></tr>
... 12458 lines suppressed ...