You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by ti...@apache.org on 2023/03/21 08:28:46 UTC
[pulsar-site] branch main updated: [improve][misc] trim all whitespaces (#478)
This is an automated email from the ASF dual-hosted git repository.
tison pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/pulsar-site.git
The following commit(s) were added to refs/heads/main by this push:
new bf9ae80fb57 [improve][misc] trim all whitespaces (#478)
bf9ae80fb57 is described below
commit bf9ae80fb5785b775614d42b156e81b21cb043b7
Author: tison <wa...@gmail.com>
AuthorDate: Tue Mar 21 16:28:36 2023 +0800
[improve][misc] trim all whitespaces (#478)
Signed-off-by: tison <wa...@gmail.com>
---
docs/about.md | 8 +-
docs/admin-api-clusters.md | 4 +-
docs/admin-api-functions.md | 40 ++--
docs/admin-api-namespaces.md | 8 +-
docs/admin-api-permissions.md | 8 +-
docs/admin-api-schemas.md | 38 ++--
docs/admin-api-tenants.md | 6 +-
docs/admin-api-topics.md | 8 +-
docs/admin-api-transactions.md | 8 +-
docs/administration-isolation-bookie.md | 2 +-
docs/administration-isolation-broker.md | 4 +-
docs/administration-isolation.md | 8 +-
docs/administration-load-balance.md | 4 +-
docs/administration-proxy.md | 4 +-
docs/administration-pulsar-shell.md | 14 +-
docs/administration-upgrade.md | 26 +--
docs/administration-zk-bk.md | 6 +-
docs/client-api-overview.md | 2 +-
docs/client-libraries-cluster-level-failover.md | 14 +-
docs/client-libraries-consumers.md | 18 +-
docs/client-libraries-dotnet-setup.md | 4 +-
docs/client-libraries-go-initialize.md | 4 +-
docs/client-libraries-go-setup.md | 2 +-
docs/client-libraries-go-use.md | 2 +-
docs/client-libraries-java-configs.md | 8 +-
docs/client-libraries-java-use.md | 2 +-
docs/client-libraries-producers.md | 4 +-
docs/client-libraries-rest.md | 12 +-
docs/client-libraries-websocket.md | 2 +-
docs/concepts-architecture-overview.md | 2 +-
docs/concepts-clients.md | 2 +-
docs/concepts-cluster-level-failover.md | 12 +-
docs/concepts-replication.md | 8 +-
docs/concepts-throttling.md | 18 +-
docs/concepts-transactions.md | 4 +-
docs/cookbooks-compaction.md | 2 +-
docs/cookbooks-deduplication.md | 14 +-
docs/cookbooks-message-queue.md | 2 +-
docs/cookbooks-non-persistent.md | 2 +-
docs/cookbooks-retention-expiry.md | 14 +-
docs/deploy-aws.md | 4 +-
docs/deploy-bare-metal-multi-cluster.md | 8 +-
docs/deploy-dcos.md | 6 +-
docs/deploy-ibm.md | 26 +--
docs/deploy-kubernetes.md | 2 +-
docs/deploy-monitoring.md | 6 +-
docs/develop-load-manager.md | 8 +-
docs/developing-binary-protocol.md | 10 +-
docs/functions-cli.md | 6 +-
docs/functions-concepts.md | 40 ++--
docs/functions-debug-log-topic.md | 6 +-
docs/functions-debug-unit-test.md | 2 +-
docs/functions-deploy-arguments.md | 16 +-
docs/functions-deploy-cluster-encryption.md | 2 +-
docs/functions-deploy-cluster-parallelism.md | 2 +-
docs/functions-deploy-cluster-resource.md | 2 +-
docs/functions-deploy-cluster.md | 4 +-
docs/functions-deploy-localrun.md | 4 +-
docs/functions-deploy-trigger.md | 4 +-
docs/functions-deploy.md | 4 +-
docs/functions-develop-api.md | 26 +--
docs/functions-develop-log.md | 8 +-
docs/functions-develop-metrics.md | 6 +-
docs/functions-develop-security.md | 2 +-
docs/functions-develop-tutorial.md | 4 +-
docs/functions-develop-user-defined-configs.md | 2 +-
docs/functions-develop.md | 2 +-
docs/functions-overview.md | 12 +-
docs/functions-package-go.md | 6 +-
docs/functions-package.md | 4 +-
docs/functions-quickstart.md | 26 +--
docs/functions-runtime-kubernetes.md | 36 +--
docs/functions-runtime-thread.md | 2 +-
docs/functions-worker-run-separately.md | 2 +-
docs/functions-worker-stateful.md | 4 +-
docs/functions-worker-temp-file-path.md | 2 +-
docs/functions-worker-troubleshooting.md | 4 +-
docs/functions-worker.md | 4 +-
docs/get-started-pulsar-admin.md | 4 +-
docs/helm-deploy.md | 2 +-
docs/io-aerospike-sink.md | 4 +-
docs/io-alluxio.md | 2 +-
docs/io-canal-source.md | 4 +-
docs/io-cassandra-sink.md | 2 +-
docs/io-cdc-debezium.md | 14 +-
docs/io-cli.md | 2 +-
docs/io-connectors.md | 84 +++----
docs/io-debezium-source.md | 18 +-
docs/io-debug.md | 26 +--
docs/io-develop.md | 52 ++---
docs/io-dynamodb-source.md | 4 +-
docs/io-elasticsearch-sink.md | 14 +-
docs/io-file-source.md | 8 +-
docs/io-flume-sink.md | 4 +-
docs/io-flume-source.md | 4 +-
docs/io-hbase-sink.md | 3 +-
docs/io-hdfs2-sink.md | 6 +-
docs/io-hdfs3-sink.md | 6 +-
docs/io-http-sink.md | 2 +-
docs/io-influxdb-sink.md | 6 +-
docs/io-jdbc-sink.md | 22 +-
docs/io-kafka-sink.md | 12 +-
docs/io-kafka-source.md | 12 +-
docs/io-kinesis-sink.md | 8 +-
docs/io-kinesis-source.md | 4 +-
docs/io-mongo-sink.md | 2 +-
docs/io-netty-source.md | 10 +-
docs/io-nsq-source.md | 4 +-
docs/io-overview.md | 18 +-
docs/io-quickstart.md | 2 +-
docs/io-rabbitmq-sink.md | 6 +-
docs/io-rabbitmq-source.md | 6 +-
docs/io-redis-sink.md | 6 +-
docs/io-solr-sink.md | 2 +-
docs/io-twitter-source.md | 4 +-
docs/kubernetes-helm.md | 12 +-
docs/performance-pulsar-perf.md | 28 +--
docs/pulsar-api-overview.md | 2 +-
docs/reference-cli-tools.md | 2 +-
docs/reference-metrics.md | 4 +-
docs/reference-pulsar-admin.md | 14 +-
docs/reference-rest-api-overview.md | 4 +-
docs/reference-terminology.md | 2 +-
docs/schema-get-started.md | 22 +-
docs/schema-overview.md | 22 +-
docs/schema-understand.md | 64 +++---
docs/security-authorization.md | 8 +-
docs/security-bouncy-castle.md | 2 +-
docs/security-encryption.md | 10 +-
docs/security-extending.md | 2 +-
docs/security-kerberos.md | 34 +--
docs/security-overview.md | 4 +-
docs/security-tls-authentication.md | 4 +-
docs/security-tls-transport.md | 32 +--
docs/sql-deployment-configurations.md | 30 +--
docs/sql-overview.md | 2 +-
docs/sql-rest-api.md | 4 +-
docs/transaction-api.md | 6 +-
docs/transaction-guarantee.md | 2 +-
docs/txn-how.md | 90 ++++----
docs/txn-monitor.md | 2 +-
docs/txn-use.md | 26 +--
docs/txn-what.md | 28 +--
docs/txn-why.md | 20 +-
docs/window-functions-context.md | 28 +--
versioned_docs/version-2.10.x/about.md | 6 +-
.../version-2.10.x/administration-proxy.md | 4 +-
.../version-2.10.x/administration-upgrade.md | 48 ++--
.../version-2.10.x/administration-zk-bk.md | 4 +-
.../version-2.10.x/client-libraries-cgo.md | 18 +-
.../version-2.10.x/client-libraries-dotnet.md | 60 ++---
.../version-2.10.x/client-libraries-go.md | 52 ++---
.../version-2.10.x/client-libraries-java.md | 108 ++++-----
.../version-2.10.x/client-libraries-node.md | 38 ++--
.../version-2.10.x/client-libraries-rest.md | 20 +-
versioned_docs/version-2.10.x/client-libraries.md | 4 +-
.../concepts-architecture-overview.md | 2 +-
versioned_docs/version-2.10.x/concepts-clients.md | 2 +-
.../version-2.10.x/concepts-proxy-sni-routing.md | 8 +-
.../version-2.10.x/concepts-replication.md | 8 +-
.../version-2.10.x/concepts-throttling.md | 18 +-
.../version-2.10.x/concepts-transactions.md | 4 +-
.../version-2.10.x/cookbooks-compaction.md | 2 +-
.../version-2.10.x/cookbooks-deduplication.md | 12 +-
.../version-2.10.x/cookbooks-encryption.md | 4 +-
.../version-2.10.x/cookbooks-non-persistent.md | 2 +-
.../version-2.10.x/cookbooks-retention-expiry.md | 32 +--
.../version-2.10.x/cookbooks-tiered-storage.md | 14 +-
versioned_docs/version-2.10.x/deploy-aws.md | 12 +-
versioned_docs/version-2.10.x/deploy-dcos.md | 14 +-
versioned_docs/version-2.10.x/deploy-docker.md | 2 +-
versioned_docs/version-2.10.x/deploy-ibm.md | 26 +--
versioned_docs/version-2.10.x/deploy-monitoring.md | 14 +-
.../version-2.10.x/develop-load-manager.md | 24 +-
versioned_docs/version-2.10.x/develop-plugin.md | 38 ++--
versioned_docs/version-2.10.x/develop-schema.md | 2 +-
.../version-2.10.x/developing-binary-protocol.md | 10 +-
versioned_docs/version-2.10.x/functions-debug.md | 18 +-
versioned_docs/version-2.10.x/functions-deploy.md | 10 +-
versioned_docs/version-2.10.x/functions-develop.md | 56 ++---
.../version-2.10.x/functions-overview.md | 4 +-
versioned_docs/version-2.10.x/functions-runtime.md | 16 +-
versioned_docs/version-2.10.x/functions-worker.md | 38 ++--
.../version-2.10.x/getting-started-helm.md | 12 +-
versioned_docs/version-2.10.x/helm-deploy.md | 4 +-
versioned_docs/version-2.10.x/helm-upgrade.md | 8 +-
versioned_docs/version-2.10.x/io-aerospike-sink.md | 4 +-
versioned_docs/version-2.10.x/io-canal-source.md | 68 +++---
versioned_docs/version-2.10.x/io-cassandra-sink.md | 10 +-
versioned_docs/version-2.10.x/io-cdc-debezium.md | 164 +++++++-------
versioned_docs/version-2.10.x/io-connectors.md | 88 ++++----
.../version-2.10.x/io-debezium-source.md | 202 ++++++++---------
versioned_docs/version-2.10.x/io-develop.md | 74 +++----
.../version-2.10.x/io-dynamodb-source.md | 12 +-
.../version-2.10.x/io-elasticsearch-sink.md | 64 +++---
versioned_docs/version-2.10.x/io-file-source.md | 54 ++---
versioned_docs/version-2.10.x/io-flume-sink.md | 12 +-
versioned_docs/version-2.10.x/io-flume-source.md | 12 +-
versioned_docs/version-2.10.x/io-hbase-sink.md | 13 +-
versioned_docs/version-2.10.x/io-hdfs2-sink.md | 16 +-
versioned_docs/version-2.10.x/io-hdfs3-sink.md | 16 +-
versioned_docs/version-2.10.x/io-influxdb-sink.md | 24 +-
versioned_docs/version-2.10.x/io-jdbc-sink.md | 54 ++---
versioned_docs/version-2.10.x/io-kafka-sink.md | 10 +-
versioned_docs/version-2.10.x/io-kafka-source.md | 64 +++---
versioned_docs/version-2.10.x/io-kinesis-sink.md | 20 +-
versioned_docs/version-2.10.x/io-kinesis-source.md | 12 +-
versioned_docs/version-2.10.x/io-mongo-sink.md | 12 +-
versioned_docs/version-2.10.x/io-netty-source.md | 94 ++++----
versioned_docs/version-2.10.x/io-nsq-source.md | 4 +-
versioned_docs/version-2.10.x/io-rabbitmq-sink.md | 16 +-
.../version-2.10.x/io-rabbitmq-source.md | 16 +-
versioned_docs/version-2.10.x/io-redis-sink.md | 44 ++--
versioned_docs/version-2.10.x/io-solr-sink.md | 12 +-
versioned_docs/version-2.10.x/io-twitter-source.md | 4 +-
.../version-2.10.x/reference-cli-tools.md | 12 +-
.../version-2.10.x/reference-configuration.md | 10 +-
versioned_docs/version-2.10.x/reference-metrics.md | 2 +-
.../version-2.10.x/reference-rest-api-overview.md | 4 +-
.../version-2.10.x/reference-terminology.md | 2 +-
.../schema-evolution-compatibility.md | 152 ++++++-------
.../version-2.10.x/schema-get-started.md | 20 +-
versioned_docs/version-2.10.x/schema-manage.md | 168 +++++++-------
versioned_docs/version-2.10.x/schema-understand.md | 170 +++++++--------
versioned_docs/version-2.10.x/security-athenz.md | 4 +-
.../version-2.10.x/security-authorization.md | 12 +-
.../version-2.10.x/security-bouncy-castle.md | 18 +-
.../version-2.10.x/security-encryption.md | 18 +-
.../version-2.10.x/security-extending.md | 4 +-
versioned_docs/version-2.10.x/security-jwt.md | 4 +-
versioned_docs/version-2.10.x/security-kerberos.md | 52 ++---
versioned_docs/version-2.10.x/security-oauth2.md | 6 +-
.../version-2.10.x/security-tls-keystore.md | 34 +--
.../version-2.10.x/security-tls-transport.md | 8 +-
.../sql-deployment-configurations.md | 24 +-
.../version-2.10.x/sql-getting-started.md | 42 ++--
versioned_docs/version-2.10.x/sql-overview.md | 2 +-
versioned_docs/version-2.10.x/sql-rest-api.md | 4 +-
.../version-2.10.x/tiered-storage-filesystem.md | 146 ++++++-------
.../version-2.10.x/tiered-storage-gcs.md | 76 +++----
.../version-2.10.x/tiered-storage-overview.md | 12 +-
versioned_docs/version-2.10.x/transaction-api.md | 6 +-
.../version-2.10.x/transaction-guarantee.md | 2 +-
versioned_docs/version-2.10.x/txn-how.md | 90 ++++----
versioned_docs/version-2.10.x/txn-monitor.md | 2 +-
versioned_docs/version-2.10.x/txn-use.md | 42 ++--
versioned_docs/version-2.10.x/txn-what.md | 28 +--
versioned_docs/version-2.10.x/txn-why.md | 20 +-
.../version-2.10.x/window-functions-context.md | 28 +--
versioned_docs/version-2.11.x/about.md | 8 +-
.../version-2.11.x/administration-isolation.md | 8 +-
.../version-2.11.x/administration-proxy.md | 4 +-
.../version-2.11.x/administration-pulsar-shell.md | 14 +-
.../version-2.11.x/administration-upgrade.md | 26 +--
.../version-2.11.x/administration-zk-bk.md | 6 +-
.../version-2.11.x/client-api-overview.md | 2 +-
.../version-2.11.x/client-libraries-dotnet.md | 6 +-
.../version-2.11.x/client-libraries-go.md | 2 +-
.../version-2.11.x/client-libraries-java.md | 44 ++--
.../version-2.11.x/client-libraries-node.md | 4 +-
.../version-2.11.x/client-libraries-rest.md | 12 +-
.../version-2.11.x/client-libraries-websocket.md | 2 +-
.../concepts-architecture-overview.md | 2 +-
versioned_docs/version-2.11.x/concepts-clients.md | 2 +-
.../concepts-cluster-level-failover.md | 12 +-
.../version-2.11.x/concepts-replication.md | 8 +-
.../version-2.11.x/concepts-throttling.md | 18 +-
.../version-2.11.x/concepts-transactions.md | 4 +-
.../version-2.11.x/cookbooks-deduplication.md | 14 +-
.../version-2.11.x/cookbooks-message-queue.md | 2 +-
.../version-2.11.x/cookbooks-non-persistent.md | 2 +-
.../version-2.11.x/cookbooks-retention-expiry.md | 14 +-
versioned_docs/version-2.11.x/deploy-aws.md | 4 +-
versioned_docs/version-2.11.x/deploy-dcos.md | 6 +-
versioned_docs/version-2.11.x/deploy-ibm.md | 26 +--
versioned_docs/version-2.11.x/deploy-kubernetes.md | 2 +-
versioned_docs/version-2.11.x/deploy-monitoring.md | 6 +-
.../version-2.11.x/develop-load-manager.md | 8 +-
.../version-2.11.x/developing-binary-protocol.md | 10 +-
.../version-2.11.x/functions-debug-log-topic.md | 6 +-
.../version-2.11.x/functions-debug-unit-test.md | 2 +-
.../functions-deploy-cluster-parallelism.md | 2 +-
.../functions-deploy-cluster-resource.md | 2 +-
.../version-2.11.x/functions-deploy-cluster.md | 4 +-
.../version-2.11.x/functions-deploy-localrun.md | 4 +-
versioned_docs/version-2.11.x/functions-deploy.md | 4 +-
.../version-2.11.x/functions-develop-api.md | 26 +--
.../version-2.11.x/functions-develop-log.md | 8 +-
.../version-2.11.x/functions-develop-metrics.md | 6 +-
.../version-2.11.x/functions-develop-security.md | 2 +-
.../version-2.11.x/functions-develop-tutorial.md | 4 +-
.../functions-develop-user-defined-configs.md | 2 +-
versioned_docs/version-2.11.x/functions-develop.md | 2 +-
.../version-2.11.x/functions-overview.md | 12 +-
.../version-2.11.x/functions-package-go.md | 6 +-
versioned_docs/version-2.11.x/functions-package.md | 4 +-
.../version-2.11.x/functions-runtime-kubernetes.md | 36 +--
.../version-2.11.x/functions-runtime-thread.md | 2 +-
.../version-2.11.x/functions-worker-stateful.md | 4 +-
.../functions-worker-temp-file-path.md | 2 +-
.../functions-worker-troubleshooting.md | 4 +-
versioned_docs/version-2.11.x/functions-worker.md | 4 +-
versioned_docs/version-2.11.x/helm-deploy.md | 2 +-
versioned_docs/version-2.11.x/io-aerospike-sink.md | 4 +-
versioned_docs/version-2.11.x/io-alluxio.md | 2 +-
versioned_docs/version-2.11.x/io-canal-source.md | 4 +-
versioned_docs/version-2.11.x/io-cassandra-sink.md | 2 +-
versioned_docs/version-2.11.x/io-cdc-debezium.md | 14 +-
versioned_docs/version-2.11.x/io-connectors.md | 84 +++----
.../version-2.11.x/io-debezium-source.md | 18 +-
versioned_docs/version-2.11.x/io-debug.md | 26 +--
versioned_docs/version-2.11.x/io-develop.md | 52 ++---
.../version-2.11.x/io-dynamodb-source.md | 4 +-
.../version-2.11.x/io-elasticsearch-sink.md | 14 +-
versioned_docs/version-2.11.x/io-file-source.md | 8 +-
versioned_docs/version-2.11.x/io-flume-sink.md | 4 +-
versioned_docs/version-2.11.x/io-flume-source.md | 4 +-
versioned_docs/version-2.11.x/io-hbase-sink.md | 3 +-
versioned_docs/version-2.11.x/io-hdfs2-sink.md | 6 +-
versioned_docs/version-2.11.x/io-hdfs3-sink.md | 6 +-
versioned_docs/version-2.11.x/io-http-sink.md | 2 +-
versioned_docs/version-2.11.x/io-influxdb-sink.md | 6 +-
versioned_docs/version-2.11.x/io-jdbc-sink.md | 22 +-
versioned_docs/version-2.11.x/io-kafka-sink.md | 12 +-
versioned_docs/version-2.11.x/io-kafka-source.md | 12 +-
versioned_docs/version-2.11.x/io-kinesis-sink.md | 8 +-
versioned_docs/version-2.11.x/io-kinesis-source.md | 4 +-
versioned_docs/version-2.11.x/io-mongo-sink.md | 2 +-
versioned_docs/version-2.11.x/io-netty-source.md | 10 +-
versioned_docs/version-2.11.x/io-nsq-source.md | 4 +-
versioned_docs/version-2.11.x/io-rabbitmq-sink.md | 6 +-
.../version-2.11.x/io-rabbitmq-source.md | 6 +-
versioned_docs/version-2.11.x/io-redis-sink.md | 6 +-
versioned_docs/version-2.11.x/io-solr-sink.md | 2 +-
versioned_docs/version-2.11.x/io-twitter-source.md | 4 +-
versioned_docs/version-2.11.x/kubernetes-helm.md | 12 +-
.../version-2.11.x/pulsar-api-overview.md | 2 +-
.../version-2.11.x/reference-cli-tools.md | 2 +-
versioned_docs/version-2.11.x/reference-metrics.md | 4 +-
.../version-2.11.x/reference-rest-api-overview.md | 4 +-
.../version-2.11.x/reference-terminology.md | 2 +-
.../version-2.11.x/schema-get-started.md | 22 +-
versioned_docs/version-2.11.x/schema-overview.md | 22 +-
versioned_docs/version-2.11.x/schema-understand.md | 64 +++---
.../version-2.11.x/security-bouncy-castle.md | 2 +-
.../version-2.11.x/security-encryption.md | 10 +-
.../version-2.11.x/security-extending.md | 2 +-
versioned_docs/version-2.11.x/security-overview.md | 4 +-
.../version-2.11.x/security-tls-authentication.md | 4 +-
.../version-2.11.x/security-tls-transport.md | 32 +--
.../sql-deployment-configurations.md | 30 +--
versioned_docs/version-2.11.x/sql-overview.md | 2 +-
versioned_docs/version-2.11.x/sql-rest-api.md | 4 +-
versioned_docs/version-2.11.x/transaction-api.md | 6 +-
.../version-2.11.x/transaction-guarantee.md | 2 +-
versioned_docs/version-2.11.x/txn-how.md | 90 ++++----
versioned_docs/version-2.11.x/txn-monitor.md | 2 +-
versioned_docs/version-2.11.x/txn-use.md | 26 +--
versioned_docs/version-2.11.x/txn-what.md | 28 +--
versioned_docs/version-2.11.x/txn-why.md | 20 +-
.../version-2.11.x/window-functions-context.md | 28 +--
versioned_docs/version-2.2.0/adaptors-storm.md | 4 +-
versioned_docs/version-2.2.0/admin-api-brokers.md | 16 +-
versioned_docs/version-2.2.0/admin-api-clusters.md | 16 +-
.../version-2.2.0/admin-api-namespaces.md | 66 +++---
versioned_docs/version-2.2.0/admin-api-overview.md | 30 +--
.../version-2.2.0/admin-api-permissions.md | 14 +-
versioned_docs/version-2.2.0/admin-api-tenants.md | 14 +-
versioned_docs/version-2.2.0/admin-api-topics.md | 134 ++++++------
versioned_docs/version-2.2.0/administration-geo.md | 16 +-
.../version-2.2.0/administration-proxy.md | 2 +-
.../version-2.2.0/administration-zk-bk.md | 4 +-
.../version-2.2.0/client-libraries-go.md | 10 +-
.../version-2.2.0/client-libraries-java.md | 112 +++++-----
.../version-2.2.0/client-libraries-node.md | 8 +-
.../concepts-architecture-overview.md | 2 +-
versioned_docs/version-2.2.0/concepts-clients.md | 2 +-
.../version-2.2.0/concepts-replication.md | 10 +-
.../version-2.2.0/cookbooks-deduplication.md | 12 +-
.../version-2.2.0/cookbooks-encryption.md | 4 +-
.../version-2.2.0/cookbooks-non-persistent.md | 2 +-
.../version-2.2.0/cookbooks-retention-expiry.md | 32 +--
.../version-2.2.0/cookbooks-tiered-storage.md | 6 +-
versioned_docs/version-2.2.0/deploy-aws.md | 8 +-
.../deploy-bare-metal-multi-cluster.md | 8 +-
versioned_docs/version-2.2.0/deploy-bare-metal.md | 18 +-
versioned_docs/version-2.2.0/deploy-dcos.md | 14 +-
versioned_docs/version-2.2.0/deploy-monitoring.md | 14 +-
.../version-2.2.0/develop-load-manager.md | 24 +-
versioned_docs/version-2.2.0/develop-schema.md | 2 +-
.../version-2.2.0/developing-binary-protocol.md | 6 +-
versioned_docs/version-2.2.0/functions-api.md | 12 +-
.../version-2.2.0/functions-quickstart.md | 8 +-
.../version-2.2.0/getting-started-helm.md | 122 +++++------
.../version-2.2.0/getting-started-standalone.md | 18 +-
versioned_docs/version-2.2.0/helm-deploy.md | 4 +-
versioned_docs/version-2.2.0/helm-overview.md | 2 +-
versioned_docs/version-2.2.0/helm-upgrade.md | 8 +-
versioned_docs/version-2.2.0/io-aerospike.md | 2 +-
versioned_docs/version-2.2.0/io-cli.md | 42 ++--
versioned_docs/version-2.2.0/io-develop.md | 74 +++----
versioned_docs/version-2.2.0/io-kafka.md | 2 +-
versioned_docs/version-2.2.0/io-quickstart.md | 8 +-
versioned_docs/version-2.2.0/io-use.md | 188 ++++++++--------
versioned_docs/version-2.2.0/pulsar-admin.md | 12 +-
.../version-2.2.0/reference-cli-tools.md | 12 +-
.../version-2.2.0/reference-configuration.md | 16 +-
.../version-2.2.0/reference-pulsar-admin.md | 4 +-
.../version-2.2.0/reference-rest-api-overview.md | 4 +-
versioned_docs/version-2.2.0/schema-get-started.md | 20 +-
versioned_docs/version-2.2.0/schema-manage.md | 126 +++++------
versioned_docs/version-2.2.0/schema-understand.md | 152 ++++++-------
versioned_docs/version-2.2.0/security-athenz.md | 4 +-
.../version-2.2.0/security-authorization.md | 8 +-
.../version-2.2.0/security-encryption.md | 18 +-
versioned_docs/version-2.2.0/security-extending.md | 4 +-
.../version-2.2.0/security-tls-transport.md | 2 +-
.../version-2.2.0/sql-deployment-configurations.md | 6 +-
.../version-2.2.0/sql-getting-started.md | 38 ++--
versioned_docs/version-2.2.0/sql-overview.md | 4 +-
versioned_docs/version-2.2.0/standalone.md | 18 +-
versioned_docs/version-2.2.1/admin-api-brokers.md | 16 +-
versioned_docs/version-2.2.1/admin-api-clusters.md | 16 +-
.../version-2.2.1/admin-api-namespaces.md | 66 +++---
versioned_docs/version-2.2.1/admin-api-overview.md | 30 +--
.../version-2.2.1/admin-api-permissions.md | 14 +-
versioned_docs/version-2.2.1/admin-api-tenants.md | 14 +-
versioned_docs/version-2.2.1/admin-api-topics.md | 134 ++++++------
versioned_docs/version-2.2.1/administration-geo.md | 16 +-
.../version-2.2.1/administration-proxy.md | 2 +-
.../version-2.2.1/administration-zk-bk.md | 4 +-
.../version-2.2.1/client-libraries-cpp.md | 44 ++--
.../version-2.2.1/client-libraries-dotnet.md | 60 ++---
.../version-2.2.1/client-libraries-go.md | 10 +-
.../version-2.2.1/client-libraries-java.md | 24 +-
.../version-2.2.1/client-libraries-node.md | 8 +-
versioned_docs/version-2.2.1/client-libraries.md | 18 +-
.../concepts-architecture-overview.md | 2 +-
.../version-2.2.1/concepts-replication.md | 10 +-
.../version-2.2.1/cookbooks-deduplication.md | 12 +-
.../version-2.2.1/cookbooks-encryption.md | 4 +-
.../version-2.2.1/cookbooks-non-persistent.md | 2 +-
.../version-2.2.1/cookbooks-retention-expiry.md | 32 +--
.../version-2.2.1/cookbooks-tiered-storage.md | 14 +-
versioned_docs/version-2.2.1/deploy-aws.md | 12 +-
.../deploy-bare-metal-multi-cluster.md | 12 +-
versioned_docs/version-2.2.1/deploy-bare-metal.md | 24 +-
versioned_docs/version-2.2.1/deploy-dcos.md | 14 +-
versioned_docs/version-2.2.1/deploy-monitoring.md | 14 +-
.../version-2.2.1/develop-load-manager.md | 24 +-
versioned_docs/version-2.2.1/develop-schema.md | 2 +-
.../version-2.2.1/developing-binary-protocol.md | 8 +-
.../version-2.2.1/getting-started-helm.md | 122 +++++------
.../version-2.2.1/getting-started-standalone.md | 18 +-
versioned_docs/version-2.2.1/helm-deploy.md | 4 +-
versioned_docs/version-2.2.1/helm-overview.md | 2 +-
versioned_docs/version-2.2.1/helm-upgrade.md | 8 +-
versioned_docs/version-2.2.1/io-aerospike.md | 2 +-
versioned_docs/version-2.2.1/io-cli.md | 42 ++--
versioned_docs/version-2.2.1/io-develop.md | 74 +++----
versioned_docs/version-2.2.1/io-kafka.md | 2 +-
versioned_docs/version-2.2.1/io-quickstart.md | 8 +-
versioned_docs/version-2.2.1/io-use.md | 188 ++++++++--------
versioned_docs/version-2.2.1/pulsar-admin.md | 12 +-
.../version-2.2.1/reference-cli-tools.md | 12 +-
.../version-2.2.1/reference-configuration.md | 10 +-
.../version-2.2.1/reference-pulsar-admin.md | 4 +-
.../version-2.2.1/reference-rest-api-overview.md | 4 +-
versioned_docs/version-2.2.1/schema-get-started.md | 20 +-
versioned_docs/version-2.2.1/schema-manage.md | 126 +++++------
versioned_docs/version-2.2.1/schema-understand.md | 152 ++++++-------
versioned_docs/version-2.2.1/security-athenz.md | 4 +-
.../version-2.2.1/security-authorization.md | 8 +-
.../version-2.2.1/security-encryption.md | 18 +-
versioned_docs/version-2.2.1/security-extending.md | 4 +-
.../version-2.2.1/security-tls-transport.md | 2 +-
.../version-2.2.1/security-token-admin.md | 4 +-
.../version-2.2.1/sql-deployment-configurations.md | 24 +-
.../version-2.2.1/sql-getting-started.md | 38 ++--
versioned_docs/version-2.2.1/sql-overview.md | 2 +-
versioned_docs/version-2.2.1/standalone.md | 18 +-
versioned_docs/version-2.3.0/admin-api-brokers.md | 16 +-
versioned_docs/version-2.3.0/admin-api-clusters.md | 16 +-
versioned_docs/version-2.3.0/admin-api-overview.md | 30 +--
.../version-2.3.0/admin-api-partitioned-topics.md | 2 +-
.../version-2.3.0/admin-api-permissions.md | 14 +-
versioned_docs/version-2.3.0/admin-api-tenants.md | 14 +-
versioned_docs/version-2.3.0/admin-api-topics.md | 134 ++++++------
versioned_docs/version-2.3.0/administration-geo.md | 16 +-
.../version-2.3.0/administration-proxy.md | 2 +-
.../version-2.3.0/client-libraries-dotnet.md | 60 ++---
.../version-2.3.0/client-libraries-go.md | 10 +-
.../version-2.3.0/client-libraries-java.md | 112 +++++-----
.../version-2.3.0/client-libraries-node.md | 8 +-
versioned_docs/version-2.3.0/client-libraries.md | 18 +-
.../concepts-architecture-overview.md | 2 +-
versioned_docs/version-2.3.0/concepts-clients.md | 2 +-
.../version-2.3.0/concepts-replication.md | 10 +-
.../version-2.3.0/cookbooks-deduplication.md | 12 +-
.../version-2.3.0/cookbooks-encryption.md | 4 +-
.../version-2.3.0/cookbooks-non-persistent.md | 2 +-
.../version-2.3.0/cookbooks-retention-expiry.md | 2 +-
.../version-2.3.0/cookbooks-tiered-storage.md | 14 +-
versioned_docs/version-2.3.0/deploy-aws.md | 12 +-
.../deploy-bare-metal-multi-cluster.md | 12 +-
versioned_docs/version-2.3.0/deploy-bare-metal.md | 26 +--
versioned_docs/version-2.3.0/deploy-dcos.md | 14 +-
versioned_docs/version-2.3.0/deploy-monitoring.md | 8 +-
.../version-2.3.0/develop-load-manager.md | 24 +-
versioned_docs/version-2.3.0/develop-schema.md | 2 +-
.../version-2.3.0/developing-binary-protocol.md | 8 +-
versioned_docs/version-2.3.0/functions-cli.md | 20 +-
versioned_docs/version-2.3.0/functions-develop.md | 40 ++--
versioned_docs/version-2.3.0/functions-overview.md | 4 +-
.../version-2.3.0/functions-quickstart.md | 8 +-
versioned_docs/version-2.3.0/functions-worker.md | 22 +-
.../version-2.3.0/getting-started-helm.md | 122 +++++------
.../version-2.3.0/getting-started-standalone.md | 22 +-
versioned_docs/version-2.3.0/helm-deploy.md | 4 +-
versioned_docs/version-2.3.0/helm-overview.md | 2 +-
versioned_docs/version-2.3.0/helm-upgrade.md | 8 +-
versioned_docs/version-2.3.0/io-aerospike.md | 2 +-
versioned_docs/version-2.3.0/io-cdc-canal.md | 2 +-
versioned_docs/version-2.3.0/io-cdc-debezium.md | 2 +-
versioned_docs/version-2.3.0/io-cli.md | 42 ++--
versioned_docs/version-2.3.0/io-develop.md | 74 +++----
versioned_docs/version-2.3.0/io-kafka.md | 2 +-
versioned_docs/version-2.3.0/io-overview.md | 22 +-
versioned_docs/version-2.3.0/io-quickstart.md | 4 +-
versioned_docs/version-2.3.0/io-use.md | 188 ++++++++--------
versioned_docs/version-2.3.0/pulsar-admin.md | 12 +-
.../version-2.3.0/reference-cli-tools.md | 6 +-
.../version-2.3.0/reference-configuration.md | 10 +-
.../version-2.3.0/reference-connector-admin.md | 42 ++--
.../version-2.3.0/reference-rest-api-overview.md | 4 +-
versioned_docs/version-2.3.0/schema-get-started.md | 20 +-
versioned_docs/version-2.3.0/schema-manage.md | 126 +++++------
versioned_docs/version-2.3.0/schema-understand.md | 152 ++++++-------
versioned_docs/version-2.3.0/security-athenz.md | 4 +-
.../version-2.3.0/security-authorization.md | 2 +-
.../version-2.3.0/security-encryption.md | 18 +-
versioned_docs/version-2.3.0/security-extending.md | 4 +-
.../version-2.3.0/security-tls-transport.md | 2 +-
.../version-2.3.0/sql-deployment-configurations.md | 24 +-
.../version-2.3.0/sql-getting-started.md | 38 ++--
versioned_docs/version-2.3.0/sql-overview.md | 4 +-
versioned_docs/version-2.3.0/standalone.md | 22 +-
.../version-2.3.0/window-functions-context.md | 28 +--
versioned_docs/version-2.3.1/admin-api-brokers.md | 16 +-
versioned_docs/version-2.3.1/admin-api-clusters.md | 16 +-
.../version-2.3.1/admin-api-namespaces.md | 66 +++---
versioned_docs/version-2.3.1/admin-api-overview.md | 30 +--
.../version-2.3.1/admin-api-permissions.md | 14 +-
versioned_docs/version-2.3.1/admin-api-tenants.md | 14 +-
versioned_docs/version-2.3.1/admin-api-topics.md | 134 ++++++------
versioned_docs/version-2.3.1/administration-geo.md | 16 +-
.../version-2.3.1/administration-load-balance.md | 6 +-
.../version-2.3.1/administration-proxy.md | 2 +-
.../version-2.3.1/administration-zk-bk.md | 4 +-
.../version-2.3.1/client-libraries-cpp.md | 2 +-
.../version-2.3.1/client-libraries-dotnet.md | 60 ++---
.../version-2.3.1/client-libraries-go.md | 10 +-
.../version-2.3.1/client-libraries-java.md | 24 +-
.../version-2.3.1/client-libraries-node.md | 8 +-
versioned_docs/version-2.3.1/client-libraries.md | 18 +-
.../concepts-architecture-overview.md | 2 +-
versioned_docs/version-2.3.1/concepts-clients.md | 2 +-
.../version-2.3.1/concepts-replication.md | 10 +-
.../version-2.3.1/cookbooks-deduplication.md | 12 +-
.../version-2.3.1/cookbooks-encryption.md | 4 +-
.../version-2.3.1/cookbooks-non-persistent.md | 2 +-
.../version-2.3.1/cookbooks-retention-expiry.md | 32 +--
.../version-2.3.1/cookbooks-tiered-storage.md | 14 +-
versioned_docs/version-2.3.1/deploy-aws.md | 12 +-
.../deploy-bare-metal-multi-cluster.md | 8 +-
versioned_docs/version-2.3.1/deploy-bare-metal.md | 26 +--
versioned_docs/version-2.3.1/deploy-dcos.md | 14 +-
versioned_docs/version-2.3.1/deploy-monitoring.md | 14 +-
.../version-2.3.1/develop-load-manager.md | 24 +-
versioned_docs/version-2.3.1/develop-schema.md | 2 +-
.../version-2.3.1/developing-binary-protocol.md | 8 +-
versioned_docs/version-2.3.1/functions-cli.md | 20 +-
versioned_docs/version-2.3.1/functions-develop.md | 40 ++--
versioned_docs/version-2.3.1/functions-worker.md | 22 +-
.../version-2.3.1/getting-started-helm.md | 122 +++++------
.../version-2.3.1/getting-started-standalone.md | 20 +-
versioned_docs/version-2.3.1/helm-deploy.md | 4 +-
versioned_docs/version-2.3.1/helm-overview.md | 2 +-
versioned_docs/version-2.3.1/helm-upgrade.md | 8 +-
versioned_docs/version-2.3.1/io-aerospike.md | 2 +-
versioned_docs/version-2.3.1/io-cdc-canal.md | 2 +-
versioned_docs/version-2.3.1/io-cdc-debezium.md | 2 +-
versioned_docs/version-2.3.1/io-cli.md | 42 ++--
versioned_docs/version-2.3.1/io-kafka.md | 2 +-
versioned_docs/version-2.3.1/io-overview.md | 22 +-
versioned_docs/version-2.3.1/io-quickstart.md | 4 +-
versioned_docs/version-2.3.1/io-use.md | 188 ++++++++--------
versioned_docs/version-2.3.1/pulsar-admin.md | 12 +-
.../version-2.3.1/reference-cli-tools.md | 4 +-
.../version-2.3.1/reference-configuration.md | 10 +-
.../version-2.3.1/reference-connector-admin.md | 42 ++--
.../version-2.3.1/reference-rest-api-overview.md | 4 +-
versioned_docs/version-2.3.1/schema-get-started.md | 20 +-
versioned_docs/version-2.3.1/schema-manage.md | 126 +++++------
versioned_docs/version-2.3.1/schema-understand.md | 152 ++++++-------
versioned_docs/version-2.3.1/security-athenz.md | 4 +-
.../version-2.3.1/security-authorization.md | 8 +-
.../version-2.3.1/security-encryption.md | 18 +-
versioned_docs/version-2.3.1/security-extending.md | 4 +-
.../version-2.3.1/security-tls-transport.md | 2 +-
.../version-2.3.1/security-token-admin.md | 4 +-
.../version-2.3.1/sql-deployment-configurations.md | 24 +-
.../version-2.3.1/sql-getting-started.md | 38 ++--
versioned_docs/version-2.3.1/sql-overview.md | 2 +-
versioned_docs/version-2.3.1/standalone.md | 20 +-
.../version-2.3.1/window-functions-context.md | 28 +--
versioned_docs/version-2.3.2/admin-api-brokers.md | 16 +-
versioned_docs/version-2.3.2/admin-api-clusters.md | 16 +-
versioned_docs/version-2.3.2/admin-api-overview.md | 30 +--
.../version-2.3.2/admin-api-permissions.md | 14 +-
versioned_docs/version-2.3.2/admin-api-schemas.md | 4 +-
versioned_docs/version-2.3.2/admin-api-tenants.md | 14 +-
versioned_docs/version-2.3.2/admin-api-topics.md | 134 ++++++------
versioned_docs/version-2.3.2/administration-geo.md | 2 +-
.../version-2.3.2/administration-load-balance.md | 14 +-
.../version-2.3.2/administration-proxy.md | 2 +-
.../version-2.3.2/administration-zk-bk.md | 4 +-
.../version-2.3.2/client-libraries-cpp.md | 44 ++--
.../version-2.3.2/client-libraries-dotnet.md | 60 ++---
.../version-2.3.2/client-libraries-go.md | 52 ++---
.../version-2.3.2/client-libraries-java.md | 112 +++++-----
.../version-2.3.2/client-libraries-node.md | 8 +-
.../concepts-architecture-overview.md | 2 +-
.../version-2.3.2/concepts-replication.md | 10 +-
.../version-2.3.2/cookbooks-deduplication.md | 12 +-
.../version-2.3.2/cookbooks-encryption.md | 4 +-
.../version-2.3.2/cookbooks-non-persistent.md | 2 +-
.../version-2.3.2/cookbooks-retention-expiry.md | 32 +--
.../version-2.3.2/cookbooks-tiered-storage.md | 14 +-
versioned_docs/version-2.3.2/deploy-aws.md | 12 +-
.../deploy-bare-metal-multi-cluster.md | 12 +-
versioned_docs/version-2.3.2/deploy-bare-metal.md | 26 +--
versioned_docs/version-2.3.2/deploy-dcos.md | 14 +-
versioned_docs/version-2.3.2/deploy-monitoring.md | 14 +-
.../version-2.3.2/develop-load-manager.md | 24 +-
versioned_docs/version-2.3.2/develop-schema.md | 2 +-
.../version-2.3.2/developing-binary-protocol.md | 8 +-
versioned_docs/version-2.3.2/functions-cli.md | 20 +-
versioned_docs/version-2.3.2/functions-develop.md | 40 ++--
versioned_docs/version-2.3.2/functions-overview.md | 4 +-
versioned_docs/version-2.3.2/functions-worker.md | 22 +-
.../version-2.3.2/getting-started-helm.md | 122 +++++------
.../version-2.3.2/getting-started-standalone.md | 28 +--
versioned_docs/version-2.3.2/helm-deploy.md | 4 +-
versioned_docs/version-2.3.2/helm-overview.md | 2 +-
versioned_docs/version-2.3.2/helm-upgrade.md | 8 +-
versioned_docs/version-2.3.2/io-aerospike.md | 2 +-
versioned_docs/version-2.3.2/io-cdc-canal.md | 2 +-
versioned_docs/version-2.3.2/io-cdc-debezium.md | 2 +-
versioned_docs/version-2.3.2/io-cli.md | 42 ++--
versioned_docs/version-2.3.2/io-develop.md | 74 +++----
versioned_docs/version-2.3.2/io-kafka.md | 2 +-
versioned_docs/version-2.3.2/io-overview.md | 22 +-
versioned_docs/version-2.3.2/io-quickstart.md | 4 +-
versioned_docs/version-2.3.2/io-use.md | 188 ++++++++--------
versioned_docs/version-2.3.2/pulsar-admin.md | 12 +-
.../version-2.3.2/reference-cli-tools.md | 6 +-
.../version-2.3.2/reference-configuration.md | 10 +-
.../version-2.3.2/reference-connector-admin.md | 42 ++--
.../version-2.3.2/reference-rest-api-overview.md | 4 +-
versioned_docs/version-2.3.2/schema-get-started.md | 20 +-
versioned_docs/version-2.3.2/schema-manage.md | 126 +++++------
versioned_docs/version-2.3.2/schema-understand.md | 152 ++++++-------
versioned_docs/version-2.3.2/security-athenz.md | 4 +-
.../version-2.3.2/security-authorization.md | 8 +-
.../version-2.3.2/security-encryption.md | 18 +-
versioned_docs/version-2.3.2/security-extending.md | 4 +-
versioned_docs/version-2.3.2/security-kerberos.md | 44 ++--
.../version-2.3.2/security-tls-transport.md | 2 +-
.../version-2.3.2/sql-deployment-configurations.md | 24 +-
.../version-2.3.2/sql-getting-started.md | 38 ++--
versioned_docs/version-2.3.2/sql-overview.md | 2 +-
versioned_docs/version-2.3.2/standalone.md | 28 +--
.../version-2.3.2/window-functions-context.md | 28 +--
versioned_docs/version-2.4.0/admin-api-brokers.md | 16 +-
versioned_docs/version-2.4.0/admin-api-clusters.md | 16 +-
.../version-2.4.0/admin-api-namespaces.md | 66 +++---
versioned_docs/version-2.4.0/admin-api-overview.md | 4 +-
.../version-2.4.0/admin-api-permissions.md | 14 +-
versioned_docs/version-2.4.0/admin-api-tenants.md | 14 +-
versioned_docs/version-2.4.0/admin-api-topics.md | 134 ++++++------
versioned_docs/version-2.4.0/administration-geo.md | 10 +-
.../version-2.4.0/administration-load-balance.md | 14 +-
.../version-2.4.0/administration-proxy.md | 2 +-
.../version-2.4.0/client-libraries-cpp.md | 44 ++--
.../version-2.4.0/client-libraries-dotnet.md | 60 ++---
.../version-2.4.0/client-libraries-go.md | 12 +-
.../version-2.4.0/client-libraries-java.md | 34 +--
.../version-2.4.0/client-libraries-node.md | 8 +-
versioned_docs/version-2.4.0/client-libraries.md | 18 +-
.../concepts-architecture-overview.md | 2 +-
versioned_docs/version-2.4.0/concepts-clients.md | 2 +-
.../version-2.4.0/concepts-replication.md | 10 +-
.../version-2.4.0/concepts-schema-registry.md | 14 +-
.../version-2.4.0/concepts-tiered-storage.md | 2 +-
.../version-2.4.0/cookbooks-deduplication.md | 12 +-
.../version-2.4.0/cookbooks-encryption.md | 4 +-
.../version-2.4.0/cookbooks-non-persistent.md | 2 +-
.../version-2.4.0/cookbooks-retention-expiry.md | 32 +--
versioned_docs/version-2.4.0/deploy-aws.md | 12 +-
.../deploy-bare-metal-multi-cluster.md | 12 +-
versioned_docs/version-2.4.0/deploy-bare-metal.md | 26 +--
versioned_docs/version-2.4.0/deploy-dcos.md | 14 +-
versioned_docs/version-2.4.0/deploy-monitoring.md | 14 +-
.../version-2.4.0/develop-load-manager.md | 24 +-
versioned_docs/version-2.4.0/develop-schema.md | 2 +-
.../version-2.4.0/developing-binary-protocol.md | 6 +-
versioned_docs/version-2.4.0/functions-api.md | 12 +-
versioned_docs/version-2.4.0/functions-cli.md | 20 +-
.../version-2.4.0/functions-debugging.md | 16 +-
versioned_docs/version-2.4.0/functions-develop.md | 40 ++--
versioned_docs/version-2.4.0/functions-overview.md | 4 +-
.../version-2.4.0/functions-quickstart.md | 14 +-
versioned_docs/version-2.4.0/functions-runtime.md | 8 +-
versioned_docs/version-2.4.0/functions-worker.md | 26 +--
.../version-2.4.0/getting-started-helm.md | 122 +++++------
.../version-2.4.0/getting-started-standalone.md | 28 +--
versioned_docs/version-2.4.0/helm-deploy.md | 4 +-
versioned_docs/version-2.4.0/helm-overview.md | 2 +-
versioned_docs/version-2.4.0/helm-upgrade.md | 8 +-
versioned_docs/version-2.4.0/io-aerospike.md | 2 +-
versioned_docs/version-2.4.0/io-cdc-canal.md | 2 +-
versioned_docs/version-2.4.0/io-cdc-debezium.md | 68 +++---
versioned_docs/version-2.4.0/io-cli.md | 42 ++--
versioned_docs/version-2.4.0/io-develop.md | 74 +++----
versioned_docs/version-2.4.0/io-kafka.md | 2 +-
versioned_docs/version-2.4.0/io-overview.md | 22 +-
versioned_docs/version-2.4.0/io-quickstart.md | 96 ++++----
versioned_docs/version-2.4.0/io-use.md | 188 ++++++++--------
versioned_docs/version-2.4.0/pulsar-admin.md | 12 +-
.../version-2.4.0/reference-cli-tools.md | 6 +-
.../version-2.4.0/reference-configuration.md | 2 +-
.../version-2.4.0/reference-connector-admin.md | 42 ++--
.../version-2.4.0/reference-rest-api-overview.md | 4 +-
versioned_docs/version-2.4.0/schema-get-started.md | 20 +-
versioned_docs/version-2.4.0/schema-manage.md | 126 +++++------
versioned_docs/version-2.4.0/schema-understand.md | 152 ++++++-------
versioned_docs/version-2.4.0/security-athenz.md | 4 +-
.../version-2.4.0/security-authorization.md | 12 +-
.../version-2.4.0/security-encryption.md | 18 +-
versioned_docs/version-2.4.0/security-extending.md | 4 +-
versioned_docs/version-2.4.0/security-jwt.md | 4 +-
versioned_docs/version-2.4.0/security-kerberos.md | 54 ++---
.../version-2.4.0/security-tls-transport.md | 2 +-
.../version-2.4.0/sql-deployment-configurations.md | 24 +-
.../version-2.4.0/sql-getting-started.md | 38 ++--
versioned_docs/version-2.4.0/sql-overview.md | 2 +-
versioned_docs/version-2.4.0/standalone.md | 28 +--
.../version-2.4.0/window-functions-context.md | 28 +--
versioned_docs/version-2.4.1/admin-api-brokers.md | 16 +-
versioned_docs/version-2.4.1/admin-api-clusters.md | 16 +-
.../version-2.4.1/admin-api-functions.md | 34 +--
.../version-2.4.1/admin-api-namespaces.md | 66 +++---
.../version-2.4.1/admin-api-partitioned-topics.md | 2 +-
.../version-2.4.1/admin-api-permissions.md | 14 +-
versioned_docs/version-2.4.1/admin-api-tenants.md | 14 +-
versioned_docs/version-2.4.1/admin-api-topics.md | 134 ++++++------
versioned_docs/version-2.4.1/administration-geo.md | 10 +-
.../version-2.4.1/administration-load-balance.md | 14 +-
.../version-2.4.1/administration-proxy.md | 2 +-
.../version-2.4.1/administration-upgrade.md | 48 ++--
.../version-2.4.1/administration-zk-bk.md | 4 +-
.../version-2.4.1/client-libraries-cpp.md | 44 ++--
.../version-2.4.1/client-libraries-dotnet.md | 60 ++---
.../version-2.4.1/client-libraries-go.md | 52 ++---
.../version-2.4.1/client-libraries-java.md | 48 ++--
.../version-2.4.1/client-libraries-node.md | 8 +-
versioned_docs/version-2.4.1/client-libraries.md | 18 +-
.../concepts-architecture-overview.md | 2 +-
versioned_docs/version-2.4.1/concepts-clients.md | 2 +-
.../version-2.4.1/concepts-replication.md | 10 +-
.../version-2.4.1/concepts-schema-registry.md | 14 +-
.../version-2.4.1/cookbooks-deduplication.md | 12 +-
.../version-2.4.1/cookbooks-encryption.md | 4 +-
.../version-2.4.1/cookbooks-non-persistent.md | 2 +-
.../version-2.4.1/cookbooks-retention-expiry.md | 32 +--
.../version-2.4.1/cookbooks-tiered-storage.md | 14 +-
versioned_docs/version-2.4.1/deploy-aws.md | 12 +-
.../deploy-bare-metal-multi-cluster.md | 12 +-
versioned_docs/version-2.4.1/deploy-bare-metal.md | 26 +--
versioned_docs/version-2.4.1/deploy-dcos.md | 14 +-
versioned_docs/version-2.4.1/deploy-monitoring.md | 14 +-
.../version-2.4.1/develop-load-manager.md | 24 +-
versioned_docs/version-2.4.1/develop-schema.md | 2 +-
.../version-2.4.1/developing-binary-protocol.md | 8 +-
versioned_docs/version-2.4.1/functions-cli.md | 20 +-
versioned_docs/version-2.4.1/functions-debug.md | 16 +-
versioned_docs/version-2.4.1/functions-deploy.md | 8 +-
versioned_docs/version-2.4.1/functions-develop.md | 40 ++--
versioned_docs/version-2.4.1/functions-overview.md | 4 +-
versioned_docs/version-2.4.1/functions-runtime.md | 10 +-
versioned_docs/version-2.4.1/functions-worker.md | 26 +--
.../version-2.4.1/getting-started-helm.md | 122 +++++------
.../version-2.4.1/getting-started-standalone.md | 30 +--
versioned_docs/version-2.4.1/helm-deploy.md | 4 +-
versioned_docs/version-2.4.1/helm-overview.md | 2 +-
versioned_docs/version-2.4.1/helm-upgrade.md | 8 +-
versioned_docs/version-2.4.1/io-aerospike.md | 2 +-
versioned_docs/version-2.4.1/io-cdc-canal.md | 2 +-
versioned_docs/version-2.4.1/io-cdc-debezium.md | 68 +++---
versioned_docs/version-2.4.1/io-cli.md | 42 ++--
versioned_docs/version-2.4.1/io-debug.md | 78 +++----
versioned_docs/version-2.4.1/io-kafka.md | 2 +-
versioned_docs/version-2.4.1/io-netty.md | 2 +-
versioned_docs/version-2.4.1/io-overview.md | 22 +-
versioned_docs/version-2.4.1/io-quickstart.md | 96 ++++----
versioned_docs/version-2.4.1/io-use.md | 188 ++++++++--------
versioned_docs/version-2.4.1/pulsar-admin.md | 12 +-
.../version-2.4.1/reference-cli-tools.md | 12 +-
.../version-2.4.1/reference-configuration.md | 2 +-
.../version-2.4.1/reference-connector-admin.md | 42 ++--
.../version-2.4.1/reference-pulsar-admin.md | 2 +-
.../version-2.4.1/reference-rest-api-overview.md | 4 +-
.../schema-evolution-compatibility.md | 130 +++++------
versioned_docs/version-2.4.1/schema-get-started.md | 20 +-
versioned_docs/version-2.4.1/schema-manage.md | 126 +++++------
versioned_docs/version-2.4.1/schema-understand.md | 152 ++++++-------
versioned_docs/version-2.4.1/security-athenz.md | 4 +-
.../version-2.4.1/security-authorization.md | 6 +-
.../version-2.4.1/security-encryption.md | 18 +-
versioned_docs/version-2.4.1/security-extending.md | 4 +-
versioned_docs/version-2.4.1/security-jwt.md | 4 +-
versioned_docs/version-2.4.1/security-kerberos.md | 52 ++---
.../version-2.4.1/security-tls-transport.md | 6 +-
.../version-2.4.1/sql-deployment-configurations.md | 24 +-
.../version-2.4.1/sql-getting-started.md | 38 ++--
versioned_docs/version-2.4.1/sql-overview.md | 2 +-
versioned_docs/version-2.4.1/standalone.md | 30 +--
.../version-2.4.1/window-functions-context.md | 28 +--
versioned_docs/version-2.4.2/admin-api-brokers.md | 16 +-
versioned_docs/version-2.4.2/admin-api-clusters.md | 16 +-
.../version-2.4.2/admin-api-functions.md | 34 +--
.../version-2.4.2/admin-api-namespaces.md | 66 +++---
.../version-2.4.2/admin-api-partitioned-topics.md | 2 +-
.../version-2.4.2/admin-api-permissions.md | 14 +-
versioned_docs/version-2.4.2/admin-api-tenants.md | 14 +-
versioned_docs/version-2.4.2/admin-api-topics.md | 134 ++++++------
versioned_docs/version-2.4.2/administration-geo.md | 10 +-
.../version-2.4.2/administration-load-balance.md | 14 +-
.../version-2.4.2/administration-proxy.md | 2 +-
.../version-2.4.2/administration-upgrade.md | 48 ++--
.../version-2.4.2/administration-zk-bk.md | 4 +-
.../version-2.4.2/client-libraries-cpp.md | 44 ++--
.../version-2.4.2/client-libraries-dotnet.md | 60 ++---
.../version-2.4.2/client-libraries-go.md | 52 ++---
.../version-2.4.2/client-libraries-java.md | 48 ++--
.../version-2.4.2/client-libraries-node.md | 8 +-
versioned_docs/version-2.4.2/client-libraries.md | 18 +-
.../concepts-architecture-overview.md | 2 +-
versioned_docs/version-2.4.2/concepts-clients.md | 2 +-
.../version-2.4.2/concepts-replication.md | 10 +-
.../version-2.4.2/concepts-schema-registry.md | 14 +-
.../version-2.4.2/cookbooks-deduplication.md | 12 +-
.../version-2.4.2/cookbooks-encryption.md | 4 +-
.../version-2.4.2/cookbooks-non-persistent.md | 2 +-
.../version-2.4.2/cookbooks-retention-expiry.md | 32 +--
.../version-2.4.2/cookbooks-tiered-storage.md | 14 +-
versioned_docs/version-2.4.2/deploy-aws.md | 12 +-
.../deploy-bare-metal-multi-cluster.md | 12 +-
versioned_docs/version-2.4.2/deploy-bare-metal.md | 26 +--
versioned_docs/version-2.4.2/deploy-dcos.md | 14 +-
versioned_docs/version-2.4.2/deploy-monitoring.md | 14 +-
.../version-2.4.2/develop-load-manager.md | 24 +-
versioned_docs/version-2.4.2/develop-schema.md | 2 +-
.../version-2.4.2/developing-binary-protocol.md | 8 +-
versioned_docs/version-2.4.2/functions-cli.md | 20 +-
versioned_docs/version-2.4.2/functions-debug.md | 16 +-
versioned_docs/version-2.4.2/functions-deploy.md | 8 +-
versioned_docs/version-2.4.2/functions-develop.md | 40 ++--
versioned_docs/version-2.4.2/functions-overview.md | 4 +-
versioned_docs/version-2.4.2/functions-runtime.md | 10 +-
versioned_docs/version-2.4.2/functions-worker.md | 26 +--
.../version-2.4.2/getting-started-helm.md | 122 +++++------
.../version-2.4.2/getting-started-standalone.md | 30 +--
versioned_docs/version-2.4.2/helm-deploy.md | 4 +-
versioned_docs/version-2.4.2/helm-overview.md | 2 +-
versioned_docs/version-2.4.2/helm-upgrade.md | 8 +-
versioned_docs/version-2.4.2/io-aerospike.md | 2 +-
versioned_docs/version-2.4.2/io-cdc-canal.md | 2 +-
versioned_docs/version-2.4.2/io-cdc-debezium.md | 68 +++---
versioned_docs/version-2.4.2/io-cli.md | 42 ++--
versioned_docs/version-2.4.2/io-debug.md | 78 +++----
versioned_docs/version-2.4.2/io-kafka.md | 2 +-
versioned_docs/version-2.4.2/io-netty.md | 2 +-
versioned_docs/version-2.4.2/io-overview.md | 22 +-
versioned_docs/version-2.4.2/io-quickstart.md | 96 ++++----
versioned_docs/version-2.4.2/io-use.md | 188 ++++++++--------
versioned_docs/version-2.4.2/pulsar-admin.md | 12 +-
.../version-2.4.2/reference-cli-tools.md | 12 +-
.../version-2.4.2/reference-configuration.md | 2 +-
.../version-2.4.2/reference-connector-admin.md | 44 ++--
.../version-2.4.2/reference-pulsar-admin.md | 2 +-
.../version-2.4.2/reference-rest-api-overview.md | 4 +-
.../schema-evolution-compatibility.md | 130 +++++------
versioned_docs/version-2.4.2/schema-get-started.md | 20 +-
versioned_docs/version-2.4.2/schema-manage.md | 126 +++++------
versioned_docs/version-2.4.2/schema-understand.md | 152 ++++++-------
versioned_docs/version-2.4.2/security-athenz.md | 4 +-
.../version-2.4.2/security-authorization.md | 6 +-
.../version-2.4.2/security-encryption.md | 18 +-
versioned_docs/version-2.4.2/security-extending.md | 4 +-
versioned_docs/version-2.4.2/security-jwt.md | 4 +-
versioned_docs/version-2.4.2/security-kerberos.md | 52 ++---
.../version-2.4.2/security-tls-transport.md | 6 +-
.../version-2.4.2/sql-deployment-configurations.md | 24 +-
.../version-2.4.2/sql-getting-started.md | 38 ++--
versioned_docs/version-2.4.2/sql-overview.md | 2 +-
versioned_docs/version-2.4.2/standalone.md | 30 +--
.../version-2.4.2/window-functions-context.md | 28 +--
versioned_docs/version-2.5.0/admin-api-brokers.md | 16 +-
versioned_docs/version-2.5.0/admin-api-clusters.md | 16 +-
.../version-2.5.0/admin-api-functions.md | 74 +++----
.../version-2.5.0/admin-api-namespaces.md | 66 +++---
.../admin-api-non-partitioned-topics.md | 2 +-
versioned_docs/version-2.5.0/admin-api-overview.md | 30 +--
.../version-2.5.0/admin-api-partitioned-topics.md | 4 +-
.../version-2.5.0/admin-api-permissions.md | 14 +-
.../version-2.5.0/admin-api-persistent-topics.md | 2 +-
versioned_docs/version-2.5.0/admin-api-tenants.md | 14 +-
versioned_docs/version-2.5.0/admin-api-topics.md | 134 ++++++------
versioned_docs/version-2.5.0/administration-geo.md | 10 +-
.../version-2.5.0/administration-load-balance.md | 8 +-
.../version-2.5.0/administration-proxy.md | 2 +-
.../version-2.5.0/administration-upgrade.md | 48 ++--
.../version-2.5.0/administration-zk-bk.md | 2 +-
.../version-2.5.0/client-libraries-cpp.md | 10 +-
.../version-2.5.0/client-libraries-dotnet.md | 60 ++---
.../version-2.5.0/client-libraries-go.md | 14 +-
.../version-2.5.0/client-libraries-java.md | 60 ++---
.../version-2.5.0/client-libraries-node.md | 8 +-
.../concepts-architecture-overview.md | 2 +-
.../version-2.5.0/concepts-replication.md | 10 +-
.../version-2.5.0/concepts-schema-registry.md | 10 +-
.../version-2.5.0/cookbooks-deduplication.md | 10 +-
.../version-2.5.0/cookbooks-encryption.md | 4 +-
.../version-2.5.0/cookbooks-non-persistent.md | 2 +-
.../version-2.5.0/cookbooks-tiered-storage.md | 10 +-
versioned_docs/version-2.5.0/deploy-aws.md | 8 +-
.../deploy-bare-metal-multi-cluster.md | 12 +-
versioned_docs/version-2.5.0/deploy-bare-metal.md | 34 +--
versioned_docs/version-2.5.0/deploy-dcos.md | 14 +-
versioned_docs/version-2.5.0/deploy-monitoring.md | 10 +-
.../version-2.5.0/develop-load-manager.md | 24 +-
versioned_docs/version-2.5.0/develop-schema.md | 2 +-
.../version-2.5.0/developing-binary-protocol.md | 8 +-
versioned_docs/version-2.5.0/functions-debug.md | 16 +-
versioned_docs/version-2.5.0/functions-deploy.md | 8 +-
versioned_docs/version-2.5.0/functions-develop.md | 44 ++--
versioned_docs/version-2.5.0/functions-overview.md | 4 +-
versioned_docs/version-2.5.0/functions-worker.md | 26 +--
.../version-2.5.0/getting-started-helm.md | 122 +++++------
.../version-2.5.0/getting-started-standalone.md | 30 +--
versioned_docs/version-2.5.0/helm-deploy.md | 4 +-
versioned_docs/version-2.5.0/helm-overview.md | 2 +-
versioned_docs/version-2.5.0/helm-upgrade.md | 8 +-
versioned_docs/version-2.5.0/io-aerospike-sink.md | 4 +-
versioned_docs/version-2.5.0/io-canal-source.md | 68 +++---
versioned_docs/version-2.5.0/io-cassandra-sink.md | 10 +-
versioned_docs/version-2.5.0/io-cdc-debezium.md | 164 +++++++-------
versioned_docs/version-2.5.0/io-cli.md | 42 ++--
versioned_docs/version-2.5.0/io-connectors.md | 66 +++---
versioned_docs/version-2.5.0/io-debezium-source.md | 108 ++++-----
versioned_docs/version-2.5.0/io-debug.md | 78 +++----
versioned_docs/version-2.5.0/io-develop.md | 64 +++---
.../version-2.5.0/io-elasticsearch-sink.md | 12 +-
versioned_docs/version-2.5.0/io-file-source.md | 49 ++---
versioned_docs/version-2.5.0/io-flume-sink.md | 12 +-
versioned_docs/version-2.5.0/io-flume-source.md | 12 +-
versioned_docs/version-2.5.0/io-hbase-sink.md | 13 +-
versioned_docs/version-2.5.0/io-hdfs2-sink.md | 16 +-
versioned_docs/version-2.5.0/io-hdfs3-sink.md | 16 +-
versioned_docs/version-2.5.0/io-influxdb-sink.md | 14 +-
versioned_docs/version-2.5.0/io-jdbc-sink.md | 16 +-
versioned_docs/version-2.5.0/io-kafka-sink.md | 12 +-
versioned_docs/version-2.5.0/io-kafka-source.md | 62 +++---
versioned_docs/version-2.5.0/io-kinesis-sink.md | 20 +-
versioned_docs/version-2.5.0/io-kinesis-source.md | 12 +-
versioned_docs/version-2.5.0/io-mongo-sink.md | 12 +-
versioned_docs/version-2.5.0/io-netty-source.md | 94 ++++----
versioned_docs/version-2.5.0/io-overview.md | 22 +-
versioned_docs/version-2.5.0/io-quickstart.md | 236 ++++++++++----------
versioned_docs/version-2.5.0/io-rabbitmq-sink.md | 16 +-
versioned_docs/version-2.5.0/io-rabbitmq-source.md | 16 +-
versioned_docs/version-2.5.0/io-redis-sink.md | 12 +-
versioned_docs/version-2.5.0/io-solr-sink.md | 12 +-
versioned_docs/version-2.5.0/io-twitter-source.md | 4 +-
versioned_docs/version-2.5.0/io-use.md | 188 ++++++++--------
versioned_docs/version-2.5.0/kubernetes-helm.md | 132 +++++------
versioned_docs/version-2.5.0/pulsar-admin.md | 12 +-
.../version-2.5.0/reference-cli-tools.md | 6 +-
.../version-2.5.0/reference-connector-admin.md | 2 +-
.../version-2.5.0/reference-pulsar-admin.md | 6 +-
.../version-2.5.0/reference-rest-api-overview.md | 4 +-
.../schema-evolution-compatibility.md | 152 ++++++-------
versioned_docs/version-2.5.0/schema-get-started.md | 20 +-
versioned_docs/version-2.5.0/schema-manage.md | 142 ++++++------
versioned_docs/version-2.5.0/schema-understand.md | 154 ++++++-------
versioned_docs/version-2.5.0/security-athenz.md | 4 +-
.../version-2.5.0/security-authorization.md | 12 +-
.../version-2.5.0/security-encryption.md | 4 +-
versioned_docs/version-2.5.0/security-extending.md | 4 +-
versioned_docs/version-2.5.0/security-jwt.md | 4 +-
versioned_docs/version-2.5.0/security-kerberos.md | 52 ++---
.../version-2.5.0/security-tls-transport.md | 6 +-
.../version-2.5.0/sql-deployment-configurations.md | 20 +-
.../version-2.5.0/sql-getting-started.md | 42 ++--
versioned_docs/version-2.5.0/sql-overview.md | 4 +-
versioned_docs/version-2.5.0/sql-rest-api.md | 4 +-
versioned_docs/version-2.5.0/standalone.md | 30 +--
.../version-2.5.0/window-functions-context.md | 28 +--
versioned_docs/version-2.5.1/admin-api-brokers.md | 16 +-
versioned_docs/version-2.5.1/admin-api-clusters.md | 16 +-
.../version-2.5.1/admin-api-functions.md | 74 +++----
.../version-2.5.1/admin-api-namespaces.md | 66 +++---
.../admin-api-non-partitioned-topics.md | 2 +-
versioned_docs/version-2.5.1/admin-api-overview.md | 30 +--
.../version-2.5.1/admin-api-partitioned-topics.md | 4 +-
.../version-2.5.1/admin-api-permissions.md | 14 +-
.../version-2.5.1/admin-api-persistent-topics.md | 16 +-
versioned_docs/version-2.5.1/admin-api-tenants.md | 14 +-
versioned_docs/version-2.5.1/admin-api-topics.md | 134 ++++++------
versioned_docs/version-2.5.1/administration-geo.md | 10 +-
.../version-2.5.1/administration-load-balance.md | 14 +-
.../version-2.5.1/administration-proxy.md | 2 +-
.../version-2.5.1/administration-upgrade.md | 48 ++--
.../version-2.5.1/administration-zk-bk.md | 4 +-
.../version-2.5.1/client-libraries-cgo.md | 18 +-
.../version-2.5.1/client-libraries-cpp.md | 16 +-
.../version-2.5.1/client-libraries-dotnet.md | 60 ++---
.../version-2.5.1/client-libraries-go.md | 36 +--
.../version-2.5.1/client-libraries-java.md | 60 ++---
.../version-2.5.1/client-libraries-node.md | 8 +-
versioned_docs/version-2.5.1/concepts-clients.md | 2 +-
.../version-2.5.1/concepts-schema-registry.md | 10 +-
.../version-2.5.1/cookbooks-deduplication.md | 12 +-
.../version-2.5.1/cookbooks-encryption.md | 4 +-
.../version-2.5.1/cookbooks-non-persistent.md | 2 +-
.../version-2.5.1/cookbooks-retention-expiry.md | 32 +--
.../version-2.5.1/cookbooks-tiered-storage.md | 14 +-
versioned_docs/version-2.5.1/deploy-aws.md | 12 +-
.../deploy-bare-metal-multi-cluster.md | 12 +-
versioned_docs/version-2.5.1/deploy-bare-metal.md | 34 +--
versioned_docs/version-2.5.1/deploy-dcos.md | 14 +-
versioned_docs/version-2.5.1/deploy-monitoring.md | 10 +-
.../version-2.5.1/develop-load-manager.md | 24 +-
versioned_docs/version-2.5.1/develop-schema.md | 2 +-
.../version-2.5.1/developing-binary-protocol.md | 8 +-
versioned_docs/version-2.5.1/functions-debug.md | 16 +-
versioned_docs/version-2.5.1/functions-deploy.md | 8 +-
versioned_docs/version-2.5.1/functions-develop.md | 44 ++--
versioned_docs/version-2.5.1/functions-overview.md | 4 +-
versioned_docs/version-2.5.1/functions-worker.md | 38 ++--
.../version-2.5.1/getting-started-helm.md | 132 +++++------
.../version-2.5.1/getting-started-standalone.md | 30 +--
versioned_docs/version-2.5.1/helm-deploy.md | 4 +-
versioned_docs/version-2.5.1/helm-upgrade.md | 8 +-
versioned_docs/version-2.5.1/io-aerospike-sink.md | 4 +-
versioned_docs/version-2.5.1/io-canal-source.md | 68 +++---
versioned_docs/version-2.5.1/io-cassandra-sink.md | 10 +-
versioned_docs/version-2.5.1/io-cdc-debezium.md | 164 +++++++-------
versioned_docs/version-2.5.1/io-cli.md | 42 ++--
versioned_docs/version-2.5.1/io-connectors.md | 66 +++---
versioned_docs/version-2.5.1/io-debezium-source.md | 164 +++++++-------
versioned_docs/version-2.5.1/io-debug.md | 78 +++----
versioned_docs/version-2.5.1/io-develop.md | 64 +++---
.../version-2.5.1/io-elasticsearch-sink.md | 60 ++---
versioned_docs/version-2.5.1/io-file-source.md | 49 ++---
versioned_docs/version-2.5.1/io-flume-sink.md | 12 +-
versioned_docs/version-2.5.1/io-flume-source.md | 12 +-
versioned_docs/version-2.5.1/io-hbase-sink.md | 13 +-
versioned_docs/version-2.5.1/io-hdfs2-sink.md | 16 +-
versioned_docs/version-2.5.1/io-hdfs3-sink.md | 16 +-
versioned_docs/version-2.5.1/io-influxdb-sink.md | 28 +--
versioned_docs/version-2.5.1/io-jdbc-sink.md | 16 +-
versioned_docs/version-2.5.1/io-kafka-sink.md | 12 +-
versioned_docs/version-2.5.1/io-kafka-source.md | 62 +++---
versioned_docs/version-2.5.1/io-kinesis-sink.md | 20 +-
versioned_docs/version-2.5.1/io-kinesis-source.md | 12 +-
versioned_docs/version-2.5.1/io-mongo-sink.md | 12 +-
versioned_docs/version-2.5.1/io-netty-source.md | 94 ++++----
versioned_docs/version-2.5.1/io-overview.md | 22 +-
versioned_docs/version-2.5.1/io-quickstart.md | 236 ++++++++++----------
versioned_docs/version-2.5.1/io-rabbitmq-sink.md | 16 +-
versioned_docs/version-2.5.1/io-rabbitmq-source.md | 16 +-
versioned_docs/version-2.5.1/io-redis-sink.md | 12 +-
versioned_docs/version-2.5.1/io-solr-sink.md | 12 +-
versioned_docs/version-2.5.1/io-twitter-source.md | 4 +-
versioned_docs/version-2.5.1/io-use.md | 186 ++++++++--------
versioned_docs/version-2.5.1/pulsar-admin.md | 12 +-
.../version-2.5.1/reference-cli-tools.md | 6 +-
.../version-2.5.1/reference-configuration.md | 2 +-
.../version-2.5.1/reference-connector-admin.md | 2 +-
.../version-2.5.1/reference-pulsar-admin.md | 6 +-
.../version-2.5.1/reference-rest-api-overview.md | 4 +-
.../schema-evolution-compatibility.md | 152 ++++++-------
versioned_docs/version-2.5.1/schema-get-started.md | 20 +-
versioned_docs/version-2.5.1/schema-manage.md | 156 ++++++-------
versioned_docs/version-2.5.1/schema-understand.md | 154 ++++++-------
versioned_docs/version-2.5.1/security-athenz.md | 4 +-
.../version-2.5.1/security-authorization.md | 12 +-
.../version-2.5.1/security-bouncy-castle.md | 4 +-
.../version-2.5.1/security-encryption.md | 18 +-
versioned_docs/version-2.5.1/security-extending.md | 4 +-
versioned_docs/version-2.5.1/security-jwt.md | 4 +-
versioned_docs/version-2.5.1/security-kerberos.md | 52 ++---
.../version-2.5.1/security-tls-transport.md | 6 +-
.../version-2.5.1/sql-deployment-configurations.md | 24 +-
.../version-2.5.1/sql-getting-started.md | 38 ++--
versioned_docs/version-2.5.1/sql-overview.md | 2 +-
versioned_docs/version-2.5.1/sql-rest-api.md | 4 +-
versioned_docs/version-2.5.1/standalone.md | 30 +--
.../version-2.5.1/window-functions-context.md | 28 +--
versioned_docs/version-2.5.2/admin-api-brokers.md | 16 +-
versioned_docs/version-2.5.2/admin-api-clusters.md | 16 +-
.../version-2.5.2/admin-api-functions.md | 74 +++----
.../version-2.5.2/admin-api-namespaces.md | 66 +++---
.../admin-api-non-partitioned-topics.md | 2 +-
versioned_docs/version-2.5.2/admin-api-overview.md | 30 +--
.../version-2.5.2/admin-api-partitioned-topics.md | 4 +-
.../version-2.5.2/admin-api-permissions.md | 14 +-
.../version-2.5.2/admin-api-persistent-topics.md | 16 +-
versioned_docs/version-2.5.2/admin-api-tenants.md | 14 +-
versioned_docs/version-2.5.2/admin-api-topics.md | 134 ++++++------
versioned_docs/version-2.5.2/administration-geo.md | 10 +-
.../version-2.5.2/administration-load-balance.md | 14 +-
.../version-2.5.2/administration-proxy.md | 2 +-
.../version-2.5.2/administration-upgrade.md | 48 ++--
.../version-2.5.2/administration-zk-bk.md | 4 +-
.../version-2.5.2/client-libraries-cgo.md | 18 +-
.../version-2.5.2/client-libraries-cpp.md | 16 +-
.../version-2.5.2/client-libraries-dotnet.md | 60 ++---
.../version-2.5.2/client-libraries-go.md | 36 +--
.../version-2.5.2/client-libraries-java.md | 60 ++---
.../version-2.5.2/client-libraries-node.md | 8 +-
.../concepts-architecture-overview.md | 2 +-
versioned_docs/version-2.5.2/concepts-clients.md | 2 +-
.../version-2.5.2/concepts-replication.md | 10 +-
.../version-2.5.2/concepts-schema-registry.md | 10 +-
.../version-2.5.2/cookbooks-deduplication.md | 12 +-
.../version-2.5.2/cookbooks-encryption.md | 4 +-
.../version-2.5.2/cookbooks-non-persistent.md | 2 +-
.../version-2.5.2/cookbooks-retention-expiry.md | 32 +--
.../version-2.5.2/cookbooks-tiered-storage.md | 14 +-
versioned_docs/version-2.5.2/deploy-aws.md | 12 +-
.../deploy-bare-metal-multi-cluster.md | 12 +-
versioned_docs/version-2.5.2/deploy-bare-metal.md | 34 +--
versioned_docs/version-2.5.2/deploy-dcos.md | 14 +-
versioned_docs/version-2.5.2/deploy-monitoring.md | 10 +-
.../version-2.5.2/develop-load-manager.md | 24 +-
versioned_docs/version-2.5.2/develop-schema.md | 2 +-
.../version-2.5.2/developing-binary-protocol.md | 8 +-
versioned_docs/version-2.5.2/functions-debug.md | 16 +-
versioned_docs/version-2.5.2/functions-deploy.md | 8 +-
versioned_docs/version-2.5.2/functions-develop.md | 44 ++--
versioned_docs/version-2.5.2/functions-overview.md | 4 +-
versioned_docs/version-2.5.2/functions-worker.md | 38 ++--
.../version-2.5.2/getting-started-helm.md | 132 +++++------
.../version-2.5.2/getting-started-standalone.md | 30 +--
versioned_docs/version-2.5.2/helm-deploy.md | 4 +-
versioned_docs/version-2.5.2/helm-upgrade.md | 8 +-
versioned_docs/version-2.5.2/io-aerospike-sink.md | 4 +-
versioned_docs/version-2.5.2/io-canal-source.md | 68 +++---
versioned_docs/version-2.5.2/io-cassandra-sink.md | 10 +-
versioned_docs/version-2.5.2/io-cdc-debezium.md | 164 +++++++-------
versioned_docs/version-2.5.2/io-cli.md | 42 ++--
versioned_docs/version-2.5.2/io-connectors.md | 66 +++---
versioned_docs/version-2.5.2/io-debezium-source.md | 164 +++++++-------
versioned_docs/version-2.5.2/io-debug.md | 78 +++----
versioned_docs/version-2.5.2/io-develop.md | 64 +++---
.../version-2.5.2/io-elasticsearch-sink.md | 60 ++---
versioned_docs/version-2.5.2/io-file-source.md | 49 ++---
versioned_docs/version-2.5.2/io-flume-sink.md | 12 +-
versioned_docs/version-2.5.2/io-flume-source.md | 12 +-
versioned_docs/version-2.5.2/io-hbase-sink.md | 12 +-
versioned_docs/version-2.5.2/io-hdfs2-sink.md | 16 +-
versioned_docs/version-2.5.2/io-hdfs3-sink.md | 16 +-
versioned_docs/version-2.5.2/io-influxdb-sink.md | 28 +--
versioned_docs/version-2.5.2/io-jdbc-sink.md | 16 +-
versioned_docs/version-2.5.2/io-kafka-sink.md | 12 +-
versioned_docs/version-2.5.2/io-kafka-source.md | 62 +++---
versioned_docs/version-2.5.2/io-kinesis-sink.md | 20 +-
versioned_docs/version-2.5.2/io-kinesis-source.md | 12 +-
versioned_docs/version-2.5.2/io-mongo-sink.md | 12 +-
versioned_docs/version-2.5.2/io-netty-source.md | 94 ++++----
versioned_docs/version-2.5.2/io-overview.md | 22 +-
versioned_docs/version-2.5.2/io-quickstart.md | 236 ++++++++++----------
versioned_docs/version-2.5.2/io-rabbitmq-sink.md | 16 +-
versioned_docs/version-2.5.2/io-rabbitmq-source.md | 16 +-
versioned_docs/version-2.5.2/io-redis-sink.md | 12 +-
versioned_docs/version-2.5.2/io-solr-sink.md | 12 +-
versioned_docs/version-2.5.2/io-twitter-source.md | 4 +-
versioned_docs/version-2.5.2/io-use.md | 186 ++++++++--------
versioned_docs/version-2.5.2/kubernetes-helm.md | 132 +++++------
versioned_docs/version-2.5.2/pulsar-admin.md | 12 +-
.../version-2.5.2/reference-cli-tools.md | 6 +-
.../version-2.5.2/reference-configuration.md | 2 +-
.../version-2.5.2/reference-connector-admin.md | 2 +-
.../version-2.5.2/reference-pulsar-admin.md | 6 +-
.../version-2.5.2/reference-rest-api-overview.md | 4 +-
.../schema-evolution-compatibility.md | 152 ++++++-------
versioned_docs/version-2.5.2/schema-get-started.md | 20 +-
versioned_docs/version-2.5.2/schema-manage.md | 168 +++++++-------
versioned_docs/version-2.5.2/schema-understand.md | 154 ++++++-------
versioned_docs/version-2.5.2/security-athenz.md | 4 +-
.../version-2.5.2/security-authorization.md | 12 +-
.../version-2.5.2/security-bouncy-castle.md | 4 +-
.../version-2.5.2/security-encryption.md | 18 +-
versioned_docs/version-2.5.2/security-extending.md | 4 +-
versioned_docs/version-2.5.2/security-jwt.md | 4 +-
versioned_docs/version-2.5.2/security-kerberos.md | 52 ++---
.../version-2.5.2/security-tls-transport.md | 6 +-
.../version-2.5.2/sql-deployment-configurations.md | 24 +-
.../version-2.5.2/sql-getting-started.md | 38 ++--
versioned_docs/version-2.5.2/sql-overview.md | 2 +-
versioned_docs/version-2.5.2/sql-rest-api.md | 4 +-
versioned_docs/version-2.5.2/standalone.md | 30 +--
.../version-2.5.2/window-functions-context.md | 28 +--
.../version-2.6.0/admin-api-functions.md | 34 +--
.../admin-api-non-partitioned-topics.md | 2 +-
.../version-2.6.0/admin-api-partitioned-topics.md | 4 +-
.../version-2.6.0/admin-api-permissions.md | 4 +-
.../version-2.6.0/admin-api-persistent-topics.md | 16 +-
versioned_docs/version-2.6.0/admin-api-topics.md | 134 ++++++------
versioned_docs/version-2.6.0/administration-geo.md | 10 +-
.../version-2.6.0/administration-load-balance.md | 8 +-
.../version-2.6.0/administration-proxy.md | 2 +-
.../version-2.6.0/administration-upgrade.md | 48 ++--
.../version-2.6.0/administration-zk-bk.md | 4 +-
.../version-2.6.0/client-libraries-cgo.md | 18 +-
.../version-2.6.0/client-libraries-cpp.md | 16 +-
.../version-2.6.0/client-libraries-dotnet.md | 60 ++---
.../version-2.6.0/client-libraries-go.md | 36 +--
.../version-2.6.0/client-libraries-java.md | 60 ++---
.../version-2.6.0/client-libraries-node.md | 6 +-
versioned_docs/version-2.6.0/concepts-clients.md | 2 +-
.../version-2.6.0/concepts-schema-registry.md | 10 +-
.../version-2.6.0/cookbooks-deduplication.md | 10 +-
.../version-2.6.0/cookbooks-encryption.md | 4 +-
.../version-2.6.0/cookbooks-non-persistent.md | 2 +-
.../version-2.6.0/cookbooks-tiered-storage.md | 10 +-
versioned_docs/version-2.6.0/deploy-aws.md | 8 +-
.../deploy-bare-metal-multi-cluster.md | 12 +-
versioned_docs/version-2.6.0/deploy-bare-metal.md | 34 +--
versioned_docs/version-2.6.0/deploy-dcos.md | 14 +-
versioned_docs/version-2.6.0/deploy-monitoring.md | 10 +-
.../version-2.6.0/develop-load-manager.md | 24 +-
versioned_docs/version-2.6.0/develop-schema.md | 2 +-
.../version-2.6.0/developing-binary-protocol.md | 8 +-
versioned_docs/version-2.6.0/functions-debug.md | 16 +-
versioned_docs/version-2.6.0/functions-deploy.md | 8 +-
versioned_docs/version-2.6.0/functions-develop.md | 44 ++--
versioned_docs/version-2.6.0/functions-overview.md | 4 +-
versioned_docs/version-2.6.0/functions-worker.md | 42 ++--
.../version-2.6.0/getting-started-helm.md | 130 +++++------
.../version-2.6.0/getting-started-standalone.md | 30 +--
versioned_docs/version-2.6.0/helm-deploy.md | 6 +-
versioned_docs/version-2.6.0/helm-upgrade.md | 8 +-
versioned_docs/version-2.6.0/io-aerospike-sink.md | 4 +-
versioned_docs/version-2.6.0/io-canal-source.md | 68 +++---
versioned_docs/version-2.6.0/io-cassandra-sink.md | 10 +-
versioned_docs/version-2.6.0/io-cdc-debezium.md | 164 +++++++-------
versioned_docs/version-2.6.0/io-cli.md | 42 ++--
versioned_docs/version-2.6.0/io-connectors.md | 82 +++----
versioned_docs/version-2.6.0/io-debezium-source.md | 168 +++++++-------
versioned_docs/version-2.6.0/io-debug.md | 78 +++----
versioned_docs/version-2.6.0/io-develop.md | 64 +++---
versioned_docs/version-2.6.0/io-dynamodb-source.md | 12 +-
.../version-2.6.0/io-elasticsearch-sink.md | 60 ++---
versioned_docs/version-2.6.0/io-file-source.md | 49 ++---
versioned_docs/version-2.6.0/io-flume-sink.md | 12 +-
versioned_docs/version-2.6.0/io-flume-source.md | 12 +-
versioned_docs/version-2.6.0/io-hbase-sink.md | 13 +-
versioned_docs/version-2.6.0/io-hdfs2-sink.md | 16 +-
versioned_docs/version-2.6.0/io-hdfs3-sink.md | 16 +-
versioned_docs/version-2.6.0/io-influxdb-sink.md | 28 +--
versioned_docs/version-2.6.0/io-jdbc-sink.md | 54 ++---
versioned_docs/version-2.6.0/io-kafka-sink.md | 12 +-
versioned_docs/version-2.6.0/io-kafka-source.md | 62 +++---
versioned_docs/version-2.6.0/io-kinesis-sink.md | 20 +-
versioned_docs/version-2.6.0/io-kinesis-source.md | 12 +-
versioned_docs/version-2.6.0/io-mongo-sink.md | 12 +-
versioned_docs/version-2.6.0/io-netty-source.md | 94 ++++----
versioned_docs/version-2.6.0/io-overview.md | 22 +-
versioned_docs/version-2.6.0/io-quickstart.md | 242 ++++++++++-----------
versioned_docs/version-2.6.0/io-rabbitmq-sink.md | 16 +-
versioned_docs/version-2.6.0/io-rabbitmq-source.md | 16 +-
versioned_docs/version-2.6.0/io-redis-sink.md | 12 +-
versioned_docs/version-2.6.0/io-solr-sink.md | 12 +-
versioned_docs/version-2.6.0/io-twitter-source.md | 4 +-
versioned_docs/version-2.6.0/io-use.md | 186 ++++++++--------
versioned_docs/version-2.6.0/kubernetes-helm.md | 132 +++++------
.../version-2.6.0/performance-pulsar-perf.md | 16 +-
versioned_docs/version-2.6.0/pulsar-admin.md | 12 +-
.../version-2.6.0/reference-cli-tools.md | 6 +-
.../version-2.6.0/reference-configuration.md | 2 +-
.../version-2.6.0/reference-connector-admin.md | 2 +-
.../version-2.6.0/reference-pulsar-admin.md | 6 +-
.../version-2.6.0/reference-rest-api-overview.md | 4 +-
.../schema-evolution-compatibility.md | 152 ++++++-------
versioned_docs/version-2.6.0/schema-get-started.md | 20 +-
versioned_docs/version-2.6.0/schema-manage.md | 142 ++++++------
versioned_docs/version-2.6.0/schema-understand.md | 154 ++++++-------
versioned_docs/version-2.6.0/security-athenz.md | 4 +-
.../version-2.6.0/security-authorization.md | 6 +-
.../version-2.6.0/security-bouncy-castle.md | 4 +-
.../version-2.6.0/security-encryption.md | 4 +-
versioned_docs/version-2.6.0/security-extending.md | 4 +-
versioned_docs/version-2.6.0/security-jwt.md | 4 +-
versioned_docs/version-2.6.0/security-kerberos.md | 52 ++---
.../version-2.6.0/security-tls-keystore.md | 34 +--
.../version-2.6.0/security-tls-transport.md | 6 +-
.../version-2.6.0/sql-deployment-configurations.md | 20 +-
.../version-2.6.0/sql-getting-started.md | 42 ++--
versioned_docs/version-2.6.0/sql-overview.md | 4 +-
versioned_docs/version-2.6.0/sql-rest-api.md | 4 +-
versioned_docs/version-2.6.0/standalone.md | 30 +--
.../version-2.6.0/window-functions-context.md | 28 +--
.../version-2.6.1/admin-api-functions.md | 34 +--
.../version-2.6.1/admin-api-namespaces.md | 4 +-
.../admin-api-non-partitioned-topics.md | 2 +-
.../version-2.6.1/admin-api-partitioned-topics.md | 4 +-
.../version-2.6.1/admin-api-permissions.md | 4 +-
.../version-2.6.1/admin-api-persistent-topics.md | 16 +-
versioned_docs/version-2.6.1/admin-api-topics.md | 134 ++++++------
versioned_docs/version-2.6.1/administration-geo.md | 10 +-
.../version-2.6.1/administration-load-balance.md | 8 +-
.../version-2.6.1/administration-proxy.md | 2 +-
.../version-2.6.1/administration-upgrade.md | 48 ++--
.../version-2.6.1/administration-zk-bk.md | 6 +-
.../version-2.6.1/client-libraries-cgo.md | 18 +-
.../version-2.6.1/client-libraries-cpp.md | 16 +-
.../version-2.6.1/client-libraries-dotnet.md | 60 ++---
.../version-2.6.1/client-libraries-go.md | 36 +--
.../version-2.6.1/client-libraries-java.md | 60 ++---
.../version-2.6.1/client-libraries-node.md | 6 +-
versioned_docs/version-2.6.1/concepts-clients.md | 2 +-
.../version-2.6.1/concepts-proxy-sni-routing.md | 6 +-
.../version-2.6.1/concepts-schema-registry.md | 10 +-
.../version-2.6.1/cookbooks-deduplication.md | 10 +-
.../version-2.6.1/cookbooks-encryption.md | 4 +-
.../version-2.6.1/cookbooks-non-persistent.md | 2 +-
.../version-2.6.1/cookbooks-retention-expiry.md | 12 +-
.../version-2.6.1/cookbooks-tiered-storage.md | 10 +-
versioned_docs/version-2.6.1/deploy-aws.md | 8 +-
.../deploy-bare-metal-multi-cluster.md | 12 +-
versioned_docs/version-2.6.1/deploy-bare-metal.md | 34 +--
versioned_docs/version-2.6.1/deploy-dcos.md | 14 +-
versioned_docs/version-2.6.1/deploy-monitoring.md | 10 +-
.../version-2.6.1/develop-load-manager.md | 24 +-
versioned_docs/version-2.6.1/develop-schema.md | 2 +-
.../version-2.6.1/developing-binary-protocol.md | 8 +-
versioned_docs/version-2.6.1/functions-debug.md | 16 +-
versioned_docs/version-2.6.1/functions-deploy.md | 8 +-
versioned_docs/version-2.6.1/functions-develop.md | 44 ++--
versioned_docs/version-2.6.1/functions-overview.md | 4 +-
versioned_docs/version-2.6.1/functions-worker.md | 38 ++--
.../version-2.6.1/getting-started-helm.md | 132 +++++------
.../version-2.6.1/getting-started-standalone.md | 30 +--
versioned_docs/version-2.6.1/helm-deploy.md | 4 +-
versioned_docs/version-2.6.1/helm-upgrade.md | 8 +-
versioned_docs/version-2.6.1/io-aerospike-sink.md | 4 +-
versioned_docs/version-2.6.1/io-canal-source.md | 68 +++---
versioned_docs/version-2.6.1/io-cassandra-sink.md | 10 +-
versioned_docs/version-2.6.1/io-cdc-debezium.md | 164 +++++++-------
versioned_docs/version-2.6.1/io-cli.md | 42 ++--
versioned_docs/version-2.6.1/io-connectors.md | 82 +++----
versioned_docs/version-2.6.1/io-debezium-source.md | 168 +++++++-------
versioned_docs/version-2.6.1/io-debug.md | 78 +++----
versioned_docs/version-2.6.1/io-develop.md | 64 +++---
versioned_docs/version-2.6.1/io-dynamodb-source.md | 12 +-
.../version-2.6.1/io-elasticsearch-sink.md | 60 ++---
versioned_docs/version-2.6.1/io-file-source.md | 49 ++---
versioned_docs/version-2.6.1/io-flume-sink.md | 12 +-
versioned_docs/version-2.6.1/io-flume-source.md | 12 +-
versioned_docs/version-2.6.1/io-hbase-sink.md | 13 +-
versioned_docs/version-2.6.1/io-hdfs2-sink.md | 16 +-
versioned_docs/version-2.6.1/io-hdfs3-sink.md | 16 +-
versioned_docs/version-2.6.1/io-influxdb-sink.md | 28 +--
versioned_docs/version-2.6.1/io-jdbc-sink.md | 54 ++---
versioned_docs/version-2.6.1/io-kafka-sink.md | 12 +-
versioned_docs/version-2.6.1/io-kafka-source.md | 62 +++---
versioned_docs/version-2.6.1/io-kinesis-sink.md | 20 +-
versioned_docs/version-2.6.1/io-kinesis-source.md | 12 +-
versioned_docs/version-2.6.1/io-mongo-sink.md | 12 +-
versioned_docs/version-2.6.1/io-netty-source.md | 94 ++++----
versioned_docs/version-2.6.1/io-overview.md | 22 +-
versioned_docs/version-2.6.1/io-quickstart.md | 242 ++++++++++-----------
versioned_docs/version-2.6.1/io-rabbitmq-sink.md | 16 +-
versioned_docs/version-2.6.1/io-rabbitmq-source.md | 16 +-
versioned_docs/version-2.6.1/io-redis-sink.md | 12 +-
versioned_docs/version-2.6.1/io-solr-sink.md | 12 +-
versioned_docs/version-2.6.1/io-twitter-source.md | 4 +-
versioned_docs/version-2.6.1/io-use.md | 186 ++++++++--------
versioned_docs/version-2.6.1/kubernetes-helm.md | 132 +++++------
.../version-2.6.1/performance-pulsar-perf.md | 16 +-
versioned_docs/version-2.6.1/pulsar-admin.md | 12 +-
.../version-2.6.1/reference-cli-tools.md | 6 +-
.../version-2.6.1/reference-configuration.md | 2 +-
.../version-2.6.1/reference-connector-admin.md | 2 +-
.../version-2.6.1/reference-pulsar-admin.md | 6 +-
.../version-2.6.1/reference-rest-api-overview.md | 4 +-
.../schema-evolution-compatibility.md | 152 ++++++-------
versioned_docs/version-2.6.1/schema-get-started.md | 20 +-
versioned_docs/version-2.6.1/schema-manage.md | 144 ++++++------
versioned_docs/version-2.6.1/schema-understand.md | 154 ++++++-------
versioned_docs/version-2.6.1/security-athenz.md | 4 +-
.../version-2.6.1/security-authorization.md | 6 +-
.../version-2.6.1/security-bouncy-castle.md | 4 +-
.../version-2.6.1/security-encryption.md | 4 +-
versioned_docs/version-2.6.1/security-extending.md | 4 +-
versioned_docs/version-2.6.1/security-jwt.md | 4 +-
versioned_docs/version-2.6.1/security-kerberos.md | 52 ++---
versioned_docs/version-2.6.1/security-oauth2.md | 6 +-
.../version-2.6.1/security-tls-keystore.md | 34 +--
.../version-2.6.1/security-tls-transport.md | 6 +-
.../version-2.6.1/sql-deployment-configurations.md | 22 +-
.../version-2.6.1/sql-getting-started.md | 42 ++--
versioned_docs/version-2.6.1/sql-overview.md | 4 +-
versioned_docs/version-2.6.1/sql-rest-api.md | 4 +-
versioned_docs/version-2.6.1/standalone.md | 30 +--
.../version-2.6.1/window-functions-context.md | 28 +--
.../version-2.6.2/admin-api-functions.md | 34 +--
.../version-2.6.2/admin-api-namespaces.md | 6 +-
.../admin-api-non-partitioned-topics.md | 2 +-
.../version-2.6.2/admin-api-partitioned-topics.md | 4 +-
.../version-2.6.2/admin-api-permissions.md | 4 +-
.../version-2.6.2/admin-api-persistent-topics.md | 16 +-
versioned_docs/version-2.6.2/admin-api-topics.md | 134 ++++++------
versioned_docs/version-2.6.2/administration-geo.md | 10 +-
.../version-2.6.2/administration-load-balance.md | 8 +-
.../version-2.6.2/administration-proxy.md | 2 +-
.../version-2.6.2/administration-upgrade.md | 48 ++--
.../version-2.6.2/administration-zk-bk.md | 6 +-
.../version-2.6.2/client-libraries-cgo.md | 18 +-
.../version-2.6.2/client-libraries-cpp.md | 16 +-
.../version-2.6.2/client-libraries-dotnet.md | 60 ++---
.../version-2.6.2/client-libraries-go.md | 36 +--
.../version-2.6.2/client-libraries-java.md | 60 ++---
.../version-2.6.2/client-libraries-node.md | 6 +-
versioned_docs/version-2.6.2/concepts-clients.md | 2 +-
.../version-2.6.2/concepts-proxy-sni-routing.md | 6 +-
.../version-2.6.2/concepts-schema-registry.md | 10 +-
.../version-2.6.2/cookbooks-deduplication.md | 10 +-
.../version-2.6.2/cookbooks-encryption.md | 4 +-
.../version-2.6.2/cookbooks-non-persistent.md | 2 +-
.../version-2.6.2/cookbooks-tiered-storage.md | 10 +-
versioned_docs/version-2.6.2/deploy-aws.md | 8 +-
.../deploy-bare-metal-multi-cluster.md | 12 +-
versioned_docs/version-2.6.2/deploy-bare-metal.md | 34 +--
versioned_docs/version-2.6.2/deploy-dcos.md | 14 +-
versioned_docs/version-2.6.2/deploy-monitoring.md | 10 +-
.../version-2.6.2/develop-load-manager.md | 24 +-
versioned_docs/version-2.6.2/develop-schema.md | 2 +-
.../version-2.6.2/developing-binary-protocol.md | 8 +-
versioned_docs/version-2.6.2/functions-debug.md | 16 +-
versioned_docs/version-2.6.2/functions-deploy.md | 8 +-
versioned_docs/version-2.6.2/functions-develop.md | 44 ++--
versioned_docs/version-2.6.2/functions-overview.md | 4 +-
versioned_docs/version-2.6.2/functions-worker.md | 38 ++--
.../version-2.6.2/getting-started-helm.md | 132 +++++------
.../version-2.6.2/getting-started-standalone.md | 30 +--
versioned_docs/version-2.6.2/helm-deploy.md | 4 +-
versioned_docs/version-2.6.2/helm-upgrade.md | 8 +-
versioned_docs/version-2.6.2/io-aerospike-sink.md | 4 +-
versioned_docs/version-2.6.2/io-canal-source.md | 68 +++---
versioned_docs/version-2.6.2/io-cassandra-sink.md | 10 +-
versioned_docs/version-2.6.2/io-cdc-debezium.md | 164 +++++++-------
versioned_docs/version-2.6.2/io-cli.md | 42 ++--
versioned_docs/version-2.6.2/io-connectors.md | 82 +++----
versioned_docs/version-2.6.2/io-debezium-source.md | 168 +++++++-------
versioned_docs/version-2.6.2/io-debug.md | 78 +++----
versioned_docs/version-2.6.2/io-develop.md | 64 +++---
versioned_docs/version-2.6.2/io-dynamodb-source.md | 12 +-
.../version-2.6.2/io-elasticsearch-sink.md | 60 ++---
versioned_docs/version-2.6.2/io-file-source.md | 49 ++---
versioned_docs/version-2.6.2/io-flume-sink.md | 12 +-
versioned_docs/version-2.6.2/io-flume-source.md | 12 +-
versioned_docs/version-2.6.2/io-hbase-sink.md | 13 +-
versioned_docs/version-2.6.2/io-hdfs2-sink.md | 16 +-
versioned_docs/version-2.6.2/io-hdfs3-sink.md | 16 +-
versioned_docs/version-2.6.2/io-influxdb-sink.md | 28 +--
versioned_docs/version-2.6.2/io-jdbc-sink.md | 54 ++---
versioned_docs/version-2.6.2/io-kafka-sink.md | 12 +-
versioned_docs/version-2.6.2/io-kafka-source.md | 62 +++---
versioned_docs/version-2.6.2/io-kinesis-sink.md | 20 +-
versioned_docs/version-2.6.2/io-kinesis-source.md | 12 +-
versioned_docs/version-2.6.2/io-mongo-sink.md | 12 +-
versioned_docs/version-2.6.2/io-netty-source.md | 94 ++++----
versioned_docs/version-2.6.2/io-overview.md | 22 +-
versioned_docs/version-2.6.2/io-quickstart.md | 242 ++++++++++-----------
versioned_docs/version-2.6.2/io-rabbitmq-sink.md | 16 +-
versioned_docs/version-2.6.2/io-rabbitmq-source.md | 16 +-
versioned_docs/version-2.6.2/io-redis-sink.md | 12 +-
versioned_docs/version-2.6.2/io-solr-sink.md | 12 +-
versioned_docs/version-2.6.2/io-twitter-source.md | 4 +-
versioned_docs/version-2.6.2/io-use.md | 186 ++++++++--------
versioned_docs/version-2.6.2/kubernetes-helm.md | 132 +++++------
.../version-2.6.2/performance-pulsar-perf.md | 16 +-
versioned_docs/version-2.6.2/pulsar-admin.md | 12 +-
.../version-2.6.2/reference-cli-tools.md | 6 +-
.../version-2.6.2/reference-configuration.md | 2 +-
.../version-2.6.2/reference-connector-admin.md | 2 +-
.../version-2.6.2/reference-pulsar-admin.md | 6 +-
.../version-2.6.2/reference-rest-api-overview.md | 4 +-
.../schema-evolution-compatibility.md | 152 ++++++-------
versioned_docs/version-2.6.2/schema-get-started.md | 20 +-
versioned_docs/version-2.6.2/schema-manage.md | 142 ++++++------
versioned_docs/version-2.6.2/schema-understand.md | 154 ++++++-------
versioned_docs/version-2.6.2/security-athenz.md | 4 +-
.../version-2.6.2/security-authorization.md | 6 +-
.../version-2.6.2/security-bouncy-castle.md | 4 +-
.../version-2.6.2/security-encryption.md | 4 +-
versioned_docs/version-2.6.2/security-extending.md | 4 +-
versioned_docs/version-2.6.2/security-jwt.md | 4 +-
versioned_docs/version-2.6.2/security-kerberos.md | 52 ++---
versioned_docs/version-2.6.2/security-oauth2.md | 6 +-
.../version-2.6.2/security-tls-keystore.md | 34 +--
.../version-2.6.2/security-tls-transport.md | 6 +-
.../version-2.6.2/sql-deployment-configurations.md | 22 +-
.../version-2.6.2/sql-getting-started.md | 42 ++--
versioned_docs/version-2.6.2/sql-overview.md | 4 +-
versioned_docs/version-2.6.2/sql-rest-api.md | 4 +-
versioned_docs/version-2.6.2/standalone.md | 30 +--
.../version-2.6.2/window-functions-context.md | 28 +--
.../version-2.6.3/admin-api-functions.md | 34 +--
.../version-2.6.3/admin-api-namespaces.md | 6 +-
.../admin-api-non-partitioned-topics.md | 2 +-
.../version-2.6.3/admin-api-partitioned-topics.md | 4 +-
.../version-2.6.3/admin-api-permissions.md | 4 +-
.../version-2.6.3/admin-api-persistent-topics.md | 16 +-
versioned_docs/version-2.6.3/admin-api-topics.md | 134 ++++++------
versioned_docs/version-2.6.3/administration-geo.md | 10 +-
.../version-2.6.3/administration-load-balance.md | 8 +-
.../version-2.6.3/administration-proxy.md | 2 +-
.../version-2.6.3/administration-upgrade.md | 48 ++--
.../version-2.6.3/administration-zk-bk.md | 4 +-
.../version-2.6.3/client-libraries-cgo.md | 18 +-
.../version-2.6.3/client-libraries-cpp.md | 16 +-
.../version-2.6.3/client-libraries-dotnet.md | 60 ++---
.../version-2.6.3/client-libraries-go.md | 36 +--
.../version-2.6.3/client-libraries-java.md | 60 ++---
.../version-2.6.3/client-libraries-node.md | 6 +-
versioned_docs/version-2.6.3/concepts-clients.md | 2 +-
.../version-2.6.3/concepts-proxy-sni-routing.md | 6 +-
.../version-2.6.3/concepts-schema-registry.md | 10 +-
.../version-2.6.3/cookbooks-deduplication.md | 10 +-
.../version-2.6.3/cookbooks-encryption.md | 4 +-
.../version-2.6.3/cookbooks-non-persistent.md | 2 +-
.../version-2.6.3/cookbooks-tiered-storage.md | 10 +-
versioned_docs/version-2.6.3/deploy-aws.md | 8 +-
.../deploy-bare-metal-multi-cluster.md | 12 +-
versioned_docs/version-2.6.3/deploy-bare-metal.md | 34 +--
versioned_docs/version-2.6.3/deploy-dcos.md | 14 +-
versioned_docs/version-2.6.3/deploy-monitoring.md | 10 +-
.../version-2.6.3/develop-load-manager.md | 24 +-
versioned_docs/version-2.6.3/develop-schema.md | 2 +-
.../version-2.6.3/developing-binary-protocol.md | 8 +-
versioned_docs/version-2.6.3/functions-debug.md | 16 +-
versioned_docs/version-2.6.3/functions-deploy.md | 8 +-
versioned_docs/version-2.6.3/functions-develop.md | 44 ++--
versioned_docs/version-2.6.3/functions-overview.md | 4 +-
versioned_docs/version-2.6.3/functions-worker.md | 38 ++--
.../version-2.6.3/getting-started-helm.md | 132 +++++------
.../version-2.6.3/getting-started-standalone.md | 30 +--
versioned_docs/version-2.6.3/helm-deploy.md | 4 +-
versioned_docs/version-2.6.3/helm-upgrade.md | 8 +-
versioned_docs/version-2.6.3/io-aerospike-sink.md | 4 +-
versioned_docs/version-2.6.3/io-canal-source.md | 68 +++---
versioned_docs/version-2.6.3/io-cassandra-sink.md | 10 +-
versioned_docs/version-2.6.3/io-cdc-debezium.md | 164 +++++++-------
versioned_docs/version-2.6.3/io-cli.md | 42 ++--
versioned_docs/version-2.6.3/io-connectors.md | 82 +++----
versioned_docs/version-2.6.3/io-debezium-source.md | 168 +++++++-------
versioned_docs/version-2.6.3/io-debug.md | 78 +++----
versioned_docs/version-2.6.3/io-develop.md | 64 +++---
versioned_docs/version-2.6.3/io-dynamodb-source.md | 12 +-
.../version-2.6.3/io-elasticsearch-sink.md | 60 ++---
versioned_docs/version-2.6.3/io-file-source.md | 49 ++---
versioned_docs/version-2.6.3/io-flume-sink.md | 12 +-
versioned_docs/version-2.6.3/io-flume-source.md | 12 +-
versioned_docs/version-2.6.3/io-hbase-sink.md | 13 +-
versioned_docs/version-2.6.3/io-hdfs2-sink.md | 16 +-
versioned_docs/version-2.6.3/io-hdfs3-sink.md | 16 +-
versioned_docs/version-2.6.3/io-influxdb-sink.md | 28 +--
versioned_docs/version-2.6.3/io-jdbc-sink.md | 54 ++---
versioned_docs/version-2.6.3/io-kafka-sink.md | 12 +-
versioned_docs/version-2.6.3/io-kafka-source.md | 62 +++---
versioned_docs/version-2.6.3/io-kinesis-sink.md | 20 +-
versioned_docs/version-2.6.3/io-kinesis-source.md | 12 +-
versioned_docs/version-2.6.3/io-mongo-sink.md | 12 +-
versioned_docs/version-2.6.3/io-netty-source.md | 94 ++++----
versioned_docs/version-2.6.3/io-overview.md | 22 +-
versioned_docs/version-2.6.3/io-quickstart.md | 242 ++++++++++-----------
versioned_docs/version-2.6.3/io-rabbitmq-sink.md | 16 +-
versioned_docs/version-2.6.3/io-rabbitmq-source.md | 16 +-
versioned_docs/version-2.6.3/io-redis-sink.md | 12 +-
versioned_docs/version-2.6.3/io-solr-sink.md | 12 +-
versioned_docs/version-2.6.3/io-twitter-source.md | 4 +-
versioned_docs/version-2.6.3/io-use.md | 186 ++++++++--------
versioned_docs/version-2.6.3/kubernetes-helm.md | 132 +++++------
.../version-2.6.3/performance-pulsar-perf.md | 16 +-
versioned_docs/version-2.6.3/pulsar-admin.md | 12 +-
.../version-2.6.3/reference-cli-tools.md | 6 +-
.../version-2.6.3/reference-configuration.md | 2 +-
.../version-2.6.3/reference-connector-admin.md | 2 +-
.../version-2.6.3/reference-pulsar-admin.md | 6 +-
.../version-2.6.3/reference-rest-api-overview.md | 4 +-
.../schema-evolution-compatibility.md | 152 ++++++-------
versioned_docs/version-2.6.3/schema-get-started.md | 20 +-
versioned_docs/version-2.6.3/schema-manage.md | 142 ++++++------
versioned_docs/version-2.6.3/schema-understand.md | 154 ++++++-------
versioned_docs/version-2.6.3/security-athenz.md | 4 +-
.../version-2.6.3/security-authorization.md | 6 +-
.../version-2.6.3/security-bouncy-castle.md | 4 +-
.../version-2.6.3/security-encryption.md | 4 +-
versioned_docs/version-2.6.3/security-extending.md | 4 +-
versioned_docs/version-2.6.3/security-jwt.md | 4 +-
versioned_docs/version-2.6.3/security-kerberos.md | 52 ++---
versioned_docs/version-2.6.3/security-oauth2.md | 6 +-
.../version-2.6.3/security-tls-keystore.md | 34 +--
.../version-2.6.3/security-tls-transport.md | 6 +-
.../version-2.6.3/sql-deployment-configurations.md | 22 +-
.../version-2.6.3/sql-getting-started.md | 42 ++--
versioned_docs/version-2.6.3/sql-overview.md | 4 +-
versioned_docs/version-2.6.3/sql-rest-api.md | 4 +-
versioned_docs/version-2.6.3/standalone.md | 30 +--
.../version-2.6.3/window-functions-context.md | 28 +--
.../version-2.6.4/admin-api-functions.md | 34 +--
.../version-2.6.4/admin-api-namespaces.md | 4 +-
.../admin-api-non-partitioned-topics.md | 2 +-
.../version-2.6.4/admin-api-partitioned-topics.md | 4 +-
.../version-2.6.4/admin-api-permissions.md | 4 +-
.../version-2.6.4/admin-api-persistent-topics.md | 16 +-
versioned_docs/version-2.6.4/admin-api-topics.md | 134 ++++++------
versioned_docs/version-2.6.4/administration-geo.md | 10 +-
.../version-2.6.4/administration-load-balance.md | 8 +-
.../version-2.6.4/administration-proxy.md | 2 +-
.../version-2.6.4/administration-upgrade.md | 48 ++--
.../version-2.6.4/administration-zk-bk.md | 6 +-
.../version-2.6.4/client-libraries-cgo.md | 18 +-
.../version-2.6.4/client-libraries-cpp.md | 16 +-
.../version-2.6.4/client-libraries-dotnet.md | 76 +++----
.../version-2.6.4/client-libraries-go.md | 34 +--
.../version-2.6.4/client-libraries-java.md | 60 ++---
.../version-2.6.4/client-libraries-node.md | 6 +-
versioned_docs/version-2.6.4/concepts-clients.md | 2 +-
.../version-2.6.4/concepts-proxy-sni-routing.md | 6 +-
.../version-2.6.4/concepts-schema-registry.md | 10 +-
.../version-2.6.4/cookbooks-deduplication.md | 10 +-
.../version-2.6.4/cookbooks-encryption.md | 4 +-
.../version-2.6.4/cookbooks-non-persistent.md | 2 +-
.../version-2.6.4/cookbooks-tiered-storage.md | 10 +-
versioned_docs/version-2.6.4/deploy-aws.md | 12 +-
.../deploy-bare-metal-multi-cluster.md | 12 +-
versioned_docs/version-2.6.4/deploy-bare-metal.md | 38 ++--
versioned_docs/version-2.6.4/deploy-dcos.md | 14 +-
versioned_docs/version-2.6.4/deploy-monitoring.md | 10 +-
.../version-2.6.4/develop-load-manager.md | 24 +-
versioned_docs/version-2.6.4/develop-schema.md | 2 +-
.../version-2.6.4/developing-binary-protocol.md | 8 +-
versioned_docs/version-2.6.4/functions-debug.md | 16 +-
versioned_docs/version-2.6.4/functions-deploy.md | 8 +-
versioned_docs/version-2.6.4/functions-develop.md | 44 ++--
versioned_docs/version-2.6.4/functions-overview.md | 4 +-
versioned_docs/version-2.6.4/functions-worker.md | 36 +--
.../version-2.6.4/getting-started-helm.md | 122 +++++------
.../version-2.6.4/getting-started-standalone.md | 30 +--
versioned_docs/version-2.6.4/helm-deploy.md | 4 +-
versioned_docs/version-2.6.4/helm-upgrade.md | 8 +-
versioned_docs/version-2.6.4/io-aerospike-sink.md | 4 +-
versioned_docs/version-2.6.4/io-canal-source.md | 68 +++---
versioned_docs/version-2.6.4/io-cassandra-sink.md | 10 +-
versioned_docs/version-2.6.4/io-cdc-debezium.md | 164 +++++++-------
versioned_docs/version-2.6.4/io-cli.md | 42 ++--
versioned_docs/version-2.6.4/io-connectors.md | 82 +++----
versioned_docs/version-2.6.4/io-debezium-source.md | 168 +++++++-------
versioned_docs/version-2.6.4/io-debug.md | 78 +++----
versioned_docs/version-2.6.4/io-develop.md | 64 +++---
versioned_docs/version-2.6.4/io-dynamodb-source.md | 12 +-
.../version-2.6.4/io-elasticsearch-sink.md | 60 ++---
versioned_docs/version-2.6.4/io-file-source.md | 49 ++---
versioned_docs/version-2.6.4/io-flume-sink.md | 12 +-
versioned_docs/version-2.6.4/io-flume-source.md | 12 +-
versioned_docs/version-2.6.4/io-hbase-sink.md | 13 +-
versioned_docs/version-2.6.4/io-hdfs2-sink.md | 16 +-
versioned_docs/version-2.6.4/io-hdfs3-sink.md | 16 +-
versioned_docs/version-2.6.4/io-influxdb-sink.md | 28 +--
versioned_docs/version-2.6.4/io-jdbc-sink.md | 54 ++---
versioned_docs/version-2.6.4/io-kafka-sink.md | 12 +-
versioned_docs/version-2.6.4/io-kafka-source.md | 62 +++---
versioned_docs/version-2.6.4/io-kinesis-sink.md | 20 +-
versioned_docs/version-2.6.4/io-kinesis-source.md | 12 +-
versioned_docs/version-2.6.4/io-mongo-sink.md | 12 +-
versioned_docs/version-2.6.4/io-netty-source.md | 94 ++++----
versioned_docs/version-2.6.4/io-overview.md | 22 +-
versioned_docs/version-2.6.4/io-quickstart.md | 242 ++++++++++-----------
versioned_docs/version-2.6.4/io-rabbitmq-sink.md | 16 +-
versioned_docs/version-2.6.4/io-rabbitmq-source.md | 16 +-
versioned_docs/version-2.6.4/io-redis-sink.md | 12 +-
versioned_docs/version-2.6.4/io-solr-sink.md | 12 +-
versioned_docs/version-2.6.4/io-twitter-source.md | 4 +-
versioned_docs/version-2.6.4/io-use.md | 186 ++++++++--------
versioned_docs/version-2.6.4/kubernetes-helm.md | 132 +++++------
.../version-2.6.4/performance-pulsar-perf.md | 16 +-
.../version-2.6.4/reference-cli-tools.md | 6 +-
.../version-2.6.4/reference-configuration.md | 4 +-
.../version-2.6.4/reference-connector-admin.md | 2 +-
.../version-2.6.4/reference-pulsar-admin.md | 6 +-
.../version-2.6.4/reference-rest-api-overview.md | 4 +-
.../schema-evolution-compatibility.md | 152 ++++++-------
versioned_docs/version-2.6.4/schema-get-started.md | 20 +-
versioned_docs/version-2.6.4/schema-manage.md | 142 ++++++------
versioned_docs/version-2.6.4/schema-understand.md | 154 ++++++-------
versioned_docs/version-2.6.4/security-athenz.md | 4 +-
.../version-2.6.4/security-authorization.md | 6 +-
.../version-2.6.4/security-bouncy-castle.md | 4 +-
.../version-2.6.4/security-encryption.md | 4 +-
versioned_docs/version-2.6.4/security-extending.md | 4 +-
versioned_docs/version-2.6.4/security-jwt.md | 4 +-
versioned_docs/version-2.6.4/security-kerberos.md | 52 ++---
versioned_docs/version-2.6.4/security-oauth2.md | 6 +-
.../version-2.6.4/security-tls-keystore.md | 34 +--
.../version-2.6.4/security-tls-transport.md | 6 +-
.../version-2.6.4/sql-deployment-configurations.md | 20 +-
.../version-2.6.4/sql-getting-started.md | 42 ++--
versioned_docs/version-2.6.4/sql-overview.md | 4 +-
versioned_docs/version-2.6.4/sql-rest-api.md | 4 +-
versioned_docs/version-2.6.4/standalone.md | 30 +--
.../version-2.6.4/tiered-storage-azure.md | 76 +++----
.../version-2.6.4/window-functions-context.md | 28 +--
versioned_docs/version-2.7.0/admin-api-brokers.md | 10 +-
versioned_docs/version-2.7.0/admin-api-clusters.md | 12 +-
.../version-2.7.0/admin-api-functions.md | 70 +++---
.../version-2.7.0/admin-api-namespaces.md | 66 +++---
versioned_docs/version-2.7.0/admin-api-overview.md | 30 +--
.../version-2.7.0/admin-api-permissions.md | 10 +-
versioned_docs/version-2.7.0/admin-api-tenants.md | 10 +-
versioned_docs/version-2.7.0/admin-api-topics.md | 134 ++++++------
versioned_docs/version-2.7.0/administration-geo.md | 10 +-
.../version-2.7.0/administration-load-balance.md | 8 +-
.../version-2.7.0/administration-proxy.md | 4 +-
.../version-2.7.0/administration-upgrade.md | 48 ++--
.../version-2.7.0/administration-zk-bk.md | 4 +-
.../version-2.7.0/client-libraries-cgo.md | 18 +-
.../version-2.7.0/client-libraries-cpp.md | 16 +-
.../version-2.7.0/client-libraries-dotnet.md | 60 ++---
.../version-2.7.0/client-libraries-go.md | 36 +--
.../version-2.7.0/client-libraries-java.md | 60 ++---
.../version-2.7.0/client-libraries-node.md | 6 +-
versioned_docs/version-2.7.0/client-libraries.md | 4 +-
versioned_docs/version-2.7.0/concepts-clients.md | 2 +-
.../version-2.7.0/concepts-proxy-sni-routing.md | 6 +-
.../version-2.7.0/concepts-schema-registry.md | 10 +-
.../version-2.7.0/cookbooks-deduplication.md | 12 +-
.../version-2.7.0/cookbooks-encryption.md | 4 +-
.../version-2.7.0/cookbooks-non-persistent.md | 2 +-
.../version-2.7.0/cookbooks-retention-expiry.md | 12 +-
.../version-2.7.0/cookbooks-tiered-storage.md | 10 +-
versioned_docs/version-2.7.0/deploy-aws.md | 12 +-
.../deploy-bare-metal-multi-cluster.md | 12 +-
versioned_docs/version-2.7.0/deploy-bare-metal.md | 38 ++--
versioned_docs/version-2.7.0/deploy-dcos.md | 14 +-
versioned_docs/version-2.7.0/deploy-docker.md | 2 +-
versioned_docs/version-2.7.0/deploy-monitoring.md | 12 +-
.../version-2.7.0/develop-load-manager.md | 24 +-
versioned_docs/version-2.7.0/develop-schema.md | 2 +-
.../version-2.7.0/developing-binary-protocol.md | 8 +-
versioned_docs/version-2.7.0/functions-debug.md | 16 +-
versioned_docs/version-2.7.0/functions-deploy.md | 8 +-
versioned_docs/version-2.7.0/functions-develop.md | 42 ++--
versioned_docs/version-2.7.0/functions-overview.md | 4 +-
versioned_docs/version-2.7.0/functions-runtime.md | 8 +-
versioned_docs/version-2.7.0/functions-worker.md | 38 ++--
.../version-2.7.0/getting-started-helm.md | 132 +++++------
.../version-2.7.0/getting-started-standalone.md | 30 +--
versioned_docs/version-2.7.0/helm-deploy.md | 4 +-
versioned_docs/version-2.7.0/helm-upgrade.md | 8 +-
versioned_docs/version-2.7.0/io-aerospike-sink.md | 4 +-
versioned_docs/version-2.7.0/io-canal-source.md | 68 +++---
versioned_docs/version-2.7.0/io-cassandra-sink.md | 10 +-
versioned_docs/version-2.7.0/io-cdc-debezium.md | 164 +++++++-------
versioned_docs/version-2.7.0/io-cli.md | 42 ++--
versioned_docs/version-2.7.0/io-connectors.md | 84 +++----
versioned_docs/version-2.7.0/io-debezium-source.md | 178 +++++++--------
versioned_docs/version-2.7.0/io-debug.md | 78 +++----
versioned_docs/version-2.7.0/io-develop.md | 64 +++---
versioned_docs/version-2.7.0/io-dynamodb-source.md | 12 +-
.../version-2.7.0/io-elasticsearch-sink.md | 60 ++---
versioned_docs/version-2.7.0/io-file-source.md | 49 ++---
versioned_docs/version-2.7.0/io-flume-sink.md | 12 +-
versioned_docs/version-2.7.0/io-flume-source.md | 12 +-
versioned_docs/version-2.7.0/io-hbase-sink.md | 13 +-
versioned_docs/version-2.7.0/io-hdfs2-sink.md | 16 +-
versioned_docs/version-2.7.0/io-hdfs3-sink.md | 16 +-
versioned_docs/version-2.7.0/io-influxdb-sink.md | 28 +--
versioned_docs/version-2.7.0/io-jdbc-sink.md | 54 ++---
versioned_docs/version-2.7.0/io-kafka-sink.md | 12 +-
versioned_docs/version-2.7.0/io-kafka-source.md | 62 +++---
versioned_docs/version-2.7.0/io-kinesis-sink.md | 20 +-
versioned_docs/version-2.7.0/io-kinesis-source.md | 12 +-
versioned_docs/version-2.7.0/io-mongo-sink.md | 12 +-
versioned_docs/version-2.7.0/io-netty-source.md | 94 ++++----
versioned_docs/version-2.7.0/io-nsq-source.md | 4 +-
versioned_docs/version-2.7.0/io-overview.md | 22 +-
versioned_docs/version-2.7.0/io-quickstart.md | 242 ++++++++++-----------
versioned_docs/version-2.7.0/io-rabbitmq-sink.md | 16 +-
versioned_docs/version-2.7.0/io-rabbitmq-source.md | 16 +-
versioned_docs/version-2.7.0/io-redis-sink.md | 12 +-
versioned_docs/version-2.7.0/io-solr-sink.md | 12 +-
versioned_docs/version-2.7.0/io-twitter-source.md | 4 +-
versioned_docs/version-2.7.0/io-use.md | 186 ++++++++--------
versioned_docs/version-2.7.0/kubernetes-helm.md | 132 +++++------
.../version-2.7.0/performance-pulsar-perf.md | 16 +-
versioned_docs/version-2.7.0/pulsar-admin.md | 12 +-
.../version-2.7.0/reference-cli-tools.md | 6 +-
.../version-2.7.0/reference-configuration.md | 8 +-
.../version-2.7.0/reference-connector-admin.md | 2 +-
.../version-2.7.0/reference-pulsar-admin.md | 8 +-
.../version-2.7.0/reference-rest-api-overview.md | 4 +-
.../schema-evolution-compatibility.md | 152 ++++++-------
versioned_docs/version-2.7.0/schema-get-started.md | 20 +-
versioned_docs/version-2.7.0/schema-manage.md | 142 ++++++------
versioned_docs/version-2.7.0/schema-understand.md | 154 ++++++-------
versioned_docs/version-2.7.0/security-athenz.md | 4 +-
.../version-2.7.0/security-authorization.md | 8 +-
.../version-2.7.0/security-bouncy-castle.md | 18 +-
.../version-2.7.0/security-encryption.md | 4 +-
versioned_docs/version-2.7.0/security-extending.md | 4 +-
versioned_docs/version-2.7.0/security-jwt.md | 4 +-
versioned_docs/version-2.7.0/security-kerberos.md | 52 ++---
versioned_docs/version-2.7.0/security-oauth2.md | 6 +-
.../version-2.7.0/security-tls-keystore.md | 34 +--
.../version-2.7.0/security-tls-transport.md | 8 +-
.../version-2.7.0/sql-deployment-configurations.md | 24 +-
.../version-2.7.0/sql-getting-started.md | 42 ++--
versioned_docs/version-2.7.0/sql-overview.md | 4 +-
versioned_docs/version-2.7.0/sql-rest-api.md | 4 +-
versioned_docs/version-2.7.0/standalone.md | 30 +--
versioned_docs/version-2.7.0/tiered-storage-aws.md | 90 ++++----
.../version-2.7.0/tiered-storage-azure.md | 74 +++----
.../version-2.7.0/tiered-storage-filesystem.md | 146 ++++++-------
versioned_docs/version-2.7.0/tiered-storage-gcs.md | 76 +++----
.../version-2.7.0/tiered-storage-overview.md | 12 +-
versioned_docs/version-2.7.0/transactions-api.md | 6 +-
.../version-2.7.0/transactions-guarantee.md | 2 +-
versioned_docs/version-2.7.0/transactions.md | 4 +-
.../version-2.7.0/window-functions-context.md | 28 +--
versioned_docs/version-2.7.1/admin-api-brokers.md | 10 +-
versioned_docs/version-2.7.1/admin-api-clusters.md | 12 +-
.../version-2.7.1/admin-api-functions.md | 70 +++---
.../version-2.7.1/admin-api-namespaces.md | 68 +++---
versioned_docs/version-2.7.1/admin-api-overview.md | 20 +-
.../version-2.7.1/admin-api-permissions.md | 10 +-
versioned_docs/version-2.7.1/admin-api-tenants.md | 10 +-
versioned_docs/version-2.7.1/admin-api-topics.md | 134 ++++++------
versioned_docs/version-2.7.1/administration-geo.md | 10 +-
.../version-2.7.1/administration-isolation.md | 6 +-
.../version-2.7.1/administration-load-balance.md | 8 +-
.../version-2.7.1/administration-proxy.md | 4 +-
.../version-2.7.1/administration-upgrade.md | 48 ++--
.../version-2.7.1/administration-zk-bk.md | 4 +-
.../version-2.7.1/client-libraries-cgo.md | 18 +-
.../version-2.7.1/client-libraries-cpp.md | 16 +-
.../version-2.7.1/client-libraries-dotnet.md | 60 ++---
.../version-2.7.1/client-libraries-go.md | 36 +--
.../version-2.7.1/client-libraries-java.md | 60 ++---
.../version-2.7.1/client-libraries-node.md | 6 +-
versioned_docs/version-2.7.1/client-libraries.md | 4 +-
versioned_docs/version-2.7.1/concepts-clients.md | 2 +-
.../version-2.7.1/concepts-proxy-sni-routing.md | 6 +-
.../version-2.7.1/concepts-schema-registry.md | 10 +-
.../version-2.7.1/cookbooks-deduplication.md | 12 +-
.../version-2.7.1/cookbooks-encryption.md | 4 +-
.../version-2.7.1/cookbooks-non-persistent.md | 2 +-
.../version-2.7.1/cookbooks-retention-expiry.md | 12 +-
.../version-2.7.1/cookbooks-tiered-storage.md | 10 +-
versioned_docs/version-2.7.1/deploy-aws.md | 12 +-
.../deploy-bare-metal-multi-cluster.md | 12 +-
versioned_docs/version-2.7.1/deploy-bare-metal.md | 38 ++--
versioned_docs/version-2.7.1/deploy-dcos.md | 14 +-
versioned_docs/version-2.7.1/deploy-docker.md | 2 +-
versioned_docs/version-2.7.1/deploy-monitoring.md | 14 +-
.../version-2.7.1/develop-load-manager.md | 24 +-
versioned_docs/version-2.7.1/develop-schema.md | 2 +-
.../version-2.7.1/developing-binary-protocol.md | 8 +-
versioned_docs/version-2.7.1/functions-debug.md | 16 +-
versioned_docs/version-2.7.1/functions-deploy.md | 8 +-
versioned_docs/version-2.7.1/functions-develop.md | 44 ++--
versioned_docs/version-2.7.1/functions-overview.md | 4 +-
versioned_docs/version-2.7.1/functions-runtime.md | 12 +-
versioned_docs/version-2.7.1/functions-worker.md | 38 ++--
.../version-2.7.1/getting-started-helm.md | 132 +++++------
.../version-2.7.1/getting-started-standalone.md | 30 +--
versioned_docs/version-2.7.1/helm-deploy.md | 4 +-
versioned_docs/version-2.7.1/helm-upgrade.md | 8 +-
versioned_docs/version-2.7.1/io-aerospike-sink.md | 4 +-
versioned_docs/version-2.7.1/io-canal-source.md | 68 +++---
versioned_docs/version-2.7.1/io-cassandra-sink.md | 10 +-
versioned_docs/version-2.7.1/io-cdc-debezium.md | 164 +++++++-------
versioned_docs/version-2.7.1/io-cli.md | 42 ++--
versioned_docs/version-2.7.1/io-connectors.md | 84 +++----
versioned_docs/version-2.7.1/io-debezium-source.md | 178 +++++++--------
versioned_docs/version-2.7.1/io-debug.md | 78 +++----
versioned_docs/version-2.7.1/io-develop.md | 64 +++---
versioned_docs/version-2.7.1/io-dynamodb-source.md | 12 +-
.../version-2.7.1/io-elasticsearch-sink.md | 60 ++---
versioned_docs/version-2.7.1/io-file-source.md | 49 ++---
versioned_docs/version-2.7.1/io-flume-sink.md | 12 +-
versioned_docs/version-2.7.1/io-flume-source.md | 12 +-
versioned_docs/version-2.7.1/io-hbase-sink.md | 13 +-
versioned_docs/version-2.7.1/io-hdfs2-sink.md | 16 +-
versioned_docs/version-2.7.1/io-hdfs3-sink.md | 16 +-
versioned_docs/version-2.7.1/io-influxdb-sink.md | 28 +--
versioned_docs/version-2.7.1/io-jdbc-sink.md | 54 ++---
versioned_docs/version-2.7.1/io-kafka-sink.md | 12 +-
versioned_docs/version-2.7.1/io-kafka-source.md | 62 +++---
versioned_docs/version-2.7.1/io-kinesis-sink.md | 20 +-
versioned_docs/version-2.7.1/io-kinesis-source.md | 12 +-
versioned_docs/version-2.7.1/io-mongo-sink.md | 12 +-
versioned_docs/version-2.7.1/io-netty-source.md | 94 ++++----
versioned_docs/version-2.7.1/io-nsq-source.md | 4 +-
versioned_docs/version-2.7.1/io-overview.md | 22 +-
versioned_docs/version-2.7.1/io-quickstart.md | 242 ++++++++++-----------
versioned_docs/version-2.7.1/io-rabbitmq-sink.md | 16 +-
versioned_docs/version-2.7.1/io-rabbitmq-source.md | 16 +-
versioned_docs/version-2.7.1/io-redis-sink.md | 12 +-
versioned_docs/version-2.7.1/io-solr-sink.md | 12 +-
versioned_docs/version-2.7.1/io-twitter-source.md | 4 +-
versioned_docs/version-2.7.1/io-use.md | 186 ++++++++--------
versioned_docs/version-2.7.1/kubernetes-helm.md | 132 +++++------
.../version-2.7.1/performance-pulsar-perf.md | 16 +-
.../version-2.7.1/reference-cli-tools.md | 6 +-
.../version-2.7.1/reference-configuration.md | 8 +-
.../version-2.7.1/reference-connector-admin.md | 2 +-
.../version-2.7.1/reference-pulsar-admin.md | 10 +-
.../version-2.7.1/reference-rest-api-overview.md | 4 +-
.../schema-evolution-compatibility.md | 152 ++++++-------
versioned_docs/version-2.7.1/schema-get-started.md | 20 +-
versioned_docs/version-2.7.1/schema-manage.md | 144 ++++++------
versioned_docs/version-2.7.1/schema-understand.md | 154 ++++++-------
versioned_docs/version-2.7.1/security-athenz.md | 4 +-
.../version-2.7.1/security-authorization.md | 8 +-
.../version-2.7.1/security-bouncy-castle.md | 18 +-
.../version-2.7.1/security-encryption.md | 4 +-
versioned_docs/version-2.7.1/security-extending.md | 4 +-
versioned_docs/version-2.7.1/security-jwt.md | 4 +-
versioned_docs/version-2.7.1/security-kerberos.md | 52 ++---
versioned_docs/version-2.7.1/security-oauth2.md | 6 +-
.../version-2.7.1/security-tls-keystore.md | 34 +--
.../version-2.7.1/security-tls-transport.md | 8 +-
.../version-2.7.1/sql-deployment-configurations.md | 24 +-
.../version-2.7.1/sql-getting-started.md | 42 ++--
versioned_docs/version-2.7.1/sql-overview.md | 4 +-
versioned_docs/version-2.7.1/sql-rest-api.md | 4 +-
versioned_docs/version-2.7.1/standalone.md | 30 +--
versioned_docs/version-2.7.1/tiered-storage-aws.md | 90 ++++----
.../version-2.7.1/tiered-storage-azure.md | 74 +++----
.../version-2.7.1/tiered-storage-filesystem.md | 146 ++++++-------
versioned_docs/version-2.7.1/tiered-storage-gcs.md | 76 +++----
.../version-2.7.1/tiered-storage-overview.md | 10 +-
versioned_docs/version-2.7.1/transactions-api.md | 6 +-
.../version-2.7.1/transactions-guarantee.md | 2 +-
versioned_docs/version-2.7.1/transactions.md | 4 +-
.../version-2.7.1/window-functions-context.md | 28 +--
versioned_docs/version-2.7.2/admin-api-brokers.md | 10 +-
versioned_docs/version-2.7.2/admin-api-clusters.md | 12 +-
.../version-2.7.2/admin-api-functions.md | 70 +++---
.../version-2.7.2/admin-api-namespaces.md | 68 +++---
versioned_docs/version-2.7.2/admin-api-overview.md | 20 +-
.../version-2.7.2/admin-api-permissions.md | 10 +-
versioned_docs/version-2.7.2/admin-api-tenants.md | 10 +-
versioned_docs/version-2.7.2/admin-api-topics.md | 134 ++++++------
versioned_docs/version-2.7.2/administration-geo.md | 10 +-
.../version-2.7.2/administration-isolation.md | 6 +-
.../version-2.7.2/administration-load-balance.md | 8 +-
.../version-2.7.2/administration-proxy.md | 4 +-
.../version-2.7.2/administration-upgrade.md | 48 ++--
.../version-2.7.2/administration-zk-bk.md | 4 +-
.../version-2.7.2/client-libraries-cgo.md | 18 +-
.../version-2.7.2/client-libraries-cpp.md | 16 +-
.../version-2.7.2/client-libraries-dotnet.md | 60 ++---
.../version-2.7.2/client-libraries-go.md | 36 +--
.../version-2.7.2/client-libraries-java.md | 60 ++---
.../version-2.7.2/client-libraries-node.md | 36 +--
versioned_docs/version-2.7.2/client-libraries.md | 4 +-
versioned_docs/version-2.7.2/concepts-clients.md | 2 +-
.../version-2.7.2/concepts-proxy-sni-routing.md | 6 +-
.../version-2.7.2/concepts-schema-registry.md | 10 +-
.../version-2.7.2/cookbooks-deduplication.md | 12 +-
.../version-2.7.2/cookbooks-encryption.md | 4 +-
.../version-2.7.2/cookbooks-non-persistent.md | 2 +-
.../version-2.7.2/cookbooks-retention-expiry.md | 12 +-
.../version-2.7.2/cookbooks-tiered-storage.md | 10 +-
versioned_docs/version-2.7.2/deploy-aws.md | 12 +-
.../deploy-bare-metal-multi-cluster.md | 12 +-
versioned_docs/version-2.7.2/deploy-bare-metal.md | 38 ++--
versioned_docs/version-2.7.2/deploy-dcos.md | 14 +-
versioned_docs/version-2.7.2/deploy-docker.md | 2 +-
versioned_docs/version-2.7.2/deploy-monitoring.md | 14 +-
.../version-2.7.2/develop-load-manager.md | 24 +-
versioned_docs/version-2.7.2/develop-schema.md | 2 +-
.../version-2.7.2/developing-binary-protocol.md | 8 +-
versioned_docs/version-2.7.2/functions-debug.md | 16 +-
versioned_docs/version-2.7.2/functions-deploy.md | 8 +-
versioned_docs/version-2.7.2/functions-develop.md | 48 ++--
versioned_docs/version-2.7.2/functions-overview.md | 4 +-
versioned_docs/version-2.7.2/functions-runtime.md | 12 +-
versioned_docs/version-2.7.2/functions-worker.md | 38 ++--
.../version-2.7.2/getting-started-helm.md | 132 +++++------
.../version-2.7.2/getting-started-standalone.md | 30 +--
versioned_docs/version-2.7.2/helm-deploy.md | 4 +-
versioned_docs/version-2.7.2/helm-upgrade.md | 8 +-
versioned_docs/version-2.7.2/io-aerospike-sink.md | 4 +-
versioned_docs/version-2.7.2/io-canal-source.md | 68 +++---
versioned_docs/version-2.7.2/io-cassandra-sink.md | 10 +-
versioned_docs/version-2.7.2/io-cdc-debezium.md | 164 +++++++-------
versioned_docs/version-2.7.2/io-cli.md | 42 ++--
versioned_docs/version-2.7.2/io-connectors.md | 84 +++----
versioned_docs/version-2.7.2/io-debezium-source.md | 178 +++++++--------
versioned_docs/version-2.7.2/io-debug.md | 78 +++----
versioned_docs/version-2.7.2/io-develop.md | 64 +++---
versioned_docs/version-2.7.2/io-dynamodb-source.md | 12 +-
.../version-2.7.2/io-elasticsearch-sink.md | 60 ++---
versioned_docs/version-2.7.2/io-file-source.md | 48 ++--
versioned_docs/version-2.7.2/io-flume-sink.md | 12 +-
versioned_docs/version-2.7.2/io-flume-source.md | 12 +-
versioned_docs/version-2.7.2/io-hbase-sink.md | 12 +-
versioned_docs/version-2.7.2/io-hdfs2-sink.md | 16 +-
versioned_docs/version-2.7.2/io-hdfs3-sink.md | 16 +-
versioned_docs/version-2.7.2/io-influxdb-sink.md | 28 +--
versioned_docs/version-2.7.2/io-jdbc-sink.md | 54 ++---
versioned_docs/version-2.7.2/io-kafka-sink.md | 12 +-
versioned_docs/version-2.7.2/io-kafka-source.md | 62 +++---
versioned_docs/version-2.7.2/io-kinesis-sink.md | 20 +-
versioned_docs/version-2.7.2/io-kinesis-source.md | 12 +-
versioned_docs/version-2.7.2/io-mongo-sink.md | 12 +-
versioned_docs/version-2.7.2/io-netty-source.md | 94 ++++----
versioned_docs/version-2.7.2/io-nsq-source.md | 4 +-
versioned_docs/version-2.7.2/io-overview.md | 22 +-
versioned_docs/version-2.7.2/io-quickstart.md | 242 ++++++++++-----------
versioned_docs/version-2.7.2/io-rabbitmq-sink.md | 16 +-
versioned_docs/version-2.7.2/io-rabbitmq-source.md | 16 +-
versioned_docs/version-2.7.2/io-redis-sink.md | 12 +-
versioned_docs/version-2.7.2/io-solr-sink.md | 12 +-
versioned_docs/version-2.7.2/io-twitter-source.md | 4 +-
versioned_docs/version-2.7.2/io-use.md | 186 ++++++++--------
versioned_docs/version-2.7.2/kubernetes-helm.md | 132 +++++------
.../version-2.7.2/performance-pulsar-perf.md | 16 +-
.../version-2.7.2/reference-cli-tools.md | 6 +-
.../version-2.7.2/reference-configuration.md | 8 +-
.../version-2.7.2/reference-connector-admin.md | 2 +-
.../version-2.7.2/reference-pulsar-admin.md | 10 +-
.../version-2.7.2/reference-rest-api-overview.md | 4 +-
.../schema-evolution-compatibility.md | 152 ++++++-------
versioned_docs/version-2.7.2/schema-get-started.md | 20 +-
versioned_docs/version-2.7.2/schema-manage.md | 144 ++++++------
versioned_docs/version-2.7.2/schema-understand.md | 154 ++++++-------
versioned_docs/version-2.7.2/security-athenz.md | 4 +-
.../version-2.7.2/security-authorization.md | 8 +-
.../version-2.7.2/security-bouncy-castle.md | 18 +-
.../version-2.7.2/security-encryption.md | 12 +-
versioned_docs/version-2.7.2/security-extending.md | 4 +-
versioned_docs/version-2.7.2/security-jwt.md | 4 +-
versioned_docs/version-2.7.2/security-kerberos.md | 52 ++---
versioned_docs/version-2.7.2/security-oauth2.md | 6 +-
.../version-2.7.2/security-tls-keystore.md | 34 +--
.../version-2.7.2/security-tls-transport.md | 8 +-
.../version-2.7.2/sql-deployment-configurations.md | 24 +-
.../version-2.7.2/sql-getting-started.md | 42 ++--
versioned_docs/version-2.7.2/sql-overview.md | 4 +-
versioned_docs/version-2.7.2/sql-rest-api.md | 4 +-
versioned_docs/version-2.7.2/standalone.md | 30 +--
versioned_docs/version-2.7.2/tiered-storage-aws.md | 90 ++++----
.../version-2.7.2/tiered-storage-azure.md | 74 +++----
.../version-2.7.2/tiered-storage-filesystem.md | 146 ++++++-------
versioned_docs/version-2.7.2/tiered-storage-gcs.md | 76 +++----
.../version-2.7.2/tiered-storage-overview.md | 12 +-
versioned_docs/version-2.7.2/transactions-api.md | 6 +-
.../version-2.7.2/transactions-guarantee.md | 2 +-
versioned_docs/version-2.7.2/transactions.md | 4 +-
.../version-2.7.2/window-functions-context.md | 28 +--
versioned_docs/version-2.7.3/admin-api-brokers.md | 10 +-
versioned_docs/version-2.7.3/admin-api-clusters.md | 12 +-
.../version-2.7.3/admin-api-functions.md | 70 +++---
.../version-2.7.3/admin-api-namespaces.md | 66 +++---
versioned_docs/version-2.7.3/admin-api-overview.md | 20 +-
.../version-2.7.3/admin-api-permissions.md | 10 +-
versioned_docs/version-2.7.3/admin-api-tenants.md | 10 +-
versioned_docs/version-2.7.3/admin-api-topics.md | 134 ++++++------
versioned_docs/version-2.7.3/administration-geo.md | 10 +-
.../version-2.7.3/administration-isolation.md | 6 +-
.../version-2.7.3/administration-load-balance.md | 8 +-
.../version-2.7.3/administration-proxy.md | 4 +-
.../version-2.7.3/administration-upgrade.md | 48 ++--
.../version-2.7.3/administration-zk-bk.md | 4 +-
.../version-2.7.3/client-libraries-cgo.md | 18 +-
.../version-2.7.3/client-libraries-cpp.md | 16 +-
.../version-2.7.3/client-libraries-dotnet.md | 60 ++---
.../version-2.7.3/client-libraries-go.md | 36 +--
.../version-2.7.3/client-libraries-java.md | 60 ++---
.../version-2.7.3/client-libraries-node.md | 36 +--
versioned_docs/version-2.7.3/client-libraries.md | 4 +-
versioned_docs/version-2.7.3/concepts-clients.md | 2 +-
.../version-2.7.3/concepts-proxy-sni-routing.md | 6 +-
.../version-2.7.3/concepts-schema-registry.md | 10 +-
.../version-2.7.3/cookbooks-deduplication.md | 12 +-
.../version-2.7.3/cookbooks-encryption.md | 4 +-
.../version-2.7.3/cookbooks-non-persistent.md | 2 +-
.../version-2.7.3/cookbooks-retention-expiry.md | 12 +-
.../version-2.7.3/cookbooks-tiered-storage.md | 10 +-
versioned_docs/version-2.7.3/deploy-aws.md | 12 +-
.../deploy-bare-metal-multi-cluster.md | 12 +-
versioned_docs/version-2.7.3/deploy-bare-metal.md | 38 ++--
versioned_docs/version-2.7.3/deploy-dcos.md | 14 +-
versioned_docs/version-2.7.3/deploy-docker.md | 2 +-
versioned_docs/version-2.7.3/deploy-monitoring.md | 14 +-
.../version-2.7.3/develop-load-manager.md | 24 +-
versioned_docs/version-2.7.3/develop-schema.md | 2 +-
.../version-2.7.3/developing-binary-protocol.md | 8 +-
versioned_docs/version-2.7.3/functions-debug.md | 16 +-
versioned_docs/version-2.7.3/functions-deploy.md | 8 +-
versioned_docs/version-2.7.3/functions-develop.md | 48 ++--
versioned_docs/version-2.7.3/functions-overview.md | 4 +-
versioned_docs/version-2.7.3/functions-runtime.md | 12 +-
versioned_docs/version-2.7.3/functions-worker.md | 38 ++--
.../version-2.7.3/getting-started-helm.md | 132 +++++------
.../version-2.7.3/getting-started-standalone.md | 30 +--
versioned_docs/version-2.7.3/helm-deploy.md | 4 +-
versioned_docs/version-2.7.3/helm-upgrade.md | 8 +-
versioned_docs/version-2.7.3/io-aerospike-sink.md | 4 +-
versioned_docs/version-2.7.3/io-canal-source.md | 68 +++---
versioned_docs/version-2.7.3/io-cassandra-sink.md | 10 +-
versioned_docs/version-2.7.3/io-cdc-debezium.md | 164 +++++++-------
versioned_docs/version-2.7.3/io-cli.md | 42 ++--
versioned_docs/version-2.7.3/io-connectors.md | 84 +++----
versioned_docs/version-2.7.3/io-debezium-source.md | 178 +++++++--------
versioned_docs/version-2.7.3/io-debug.md | 78 +++----
versioned_docs/version-2.7.3/io-develop.md | 64 +++---
versioned_docs/version-2.7.3/io-dynamodb-source.md | 12 +-
.../version-2.7.3/io-elasticsearch-sink.md | 60 ++---
versioned_docs/version-2.7.3/io-file-source.md | 48 ++--
versioned_docs/version-2.7.3/io-flume-sink.md | 12 +-
versioned_docs/version-2.7.3/io-flume-source.md | 12 +-
versioned_docs/version-2.7.3/io-hbase-sink.md | 12 +-
versioned_docs/version-2.7.3/io-hdfs2-sink.md | 16 +-
versioned_docs/version-2.7.3/io-hdfs3-sink.md | 16 +-
versioned_docs/version-2.7.3/io-influxdb-sink.md | 28 +--
versioned_docs/version-2.7.3/io-jdbc-sink.md | 54 ++---
versioned_docs/version-2.7.3/io-kafka-sink.md | 12 +-
versioned_docs/version-2.7.3/io-kafka-source.md | 62 +++---
versioned_docs/version-2.7.3/io-kinesis-sink.md | 20 +-
versioned_docs/version-2.7.3/io-kinesis-source.md | 12 +-
versioned_docs/version-2.7.3/io-mongo-sink.md | 12 +-
versioned_docs/version-2.7.3/io-netty-source.md | 94 ++++----
versioned_docs/version-2.7.3/io-nsq-source.md | 4 +-
versioned_docs/version-2.7.3/io-overview.md | 22 +-
versioned_docs/version-2.7.3/io-quickstart.md | 242 ++++++++++-----------
versioned_docs/version-2.7.3/io-rabbitmq-sink.md | 16 +-
versioned_docs/version-2.7.3/io-rabbitmq-source.md | 16 +-
versioned_docs/version-2.7.3/io-redis-sink.md | 12 +-
versioned_docs/version-2.7.3/io-solr-sink.md | 12 +-
versioned_docs/version-2.7.3/io-twitter-source.md | 4 +-
versioned_docs/version-2.7.3/io-use.md | 186 ++++++++--------
versioned_docs/version-2.7.3/kubernetes-helm.md | 132 +++++------
.../version-2.7.3/performance-pulsar-perf.md | 16 +-
.../version-2.7.3/reference-cli-tools.md | 6 +-
.../version-2.7.3/reference-configuration.md | 8 +-
.../version-2.7.3/reference-connector-admin.md | 2 +-
.../version-2.7.3/reference-pulsar-admin.md | 10 +-
.../version-2.7.3/reference-rest-api-overview.md | 4 +-
.../schema-evolution-compatibility.md | 152 ++++++-------
versioned_docs/version-2.7.3/schema-get-started.md | 20 +-
versioned_docs/version-2.7.3/schema-manage.md | 144 ++++++------
versioned_docs/version-2.7.3/schema-understand.md | 154 ++++++-------
versioned_docs/version-2.7.3/security-athenz.md | 4 +-
.../version-2.7.3/security-authorization.md | 8 +-
.../version-2.7.3/security-bouncy-castle.md | 18 +-
.../version-2.7.3/security-encryption.md | 12 +-
versioned_docs/version-2.7.3/security-extending.md | 4 +-
versioned_docs/version-2.7.3/security-jwt.md | 4 +-
versioned_docs/version-2.7.3/security-kerberos.md | 52 ++---
versioned_docs/version-2.7.3/security-oauth2.md | 6 +-
.../version-2.7.3/security-tls-keystore.md | 34 +--
.../version-2.7.3/security-tls-transport.md | 6 +-
.../version-2.7.3/sql-deployment-configurations.md | 24 +-
.../version-2.7.3/sql-getting-started.md | 42 ++--
versioned_docs/version-2.7.3/sql-overview.md | 4 +-
versioned_docs/version-2.7.3/sql-rest-api.md | 4 +-
versioned_docs/version-2.7.3/standalone.md | 30 +--
versioned_docs/version-2.7.3/tiered-storage-aws.md | 90 ++++----
.../version-2.7.3/tiered-storage-azure.md | 74 +++----
.../version-2.7.3/tiered-storage-filesystem.md | 146 ++++++-------
versioned_docs/version-2.7.3/tiered-storage-gcs.md | 76 +++----
.../version-2.7.3/tiered-storage-overview.md | 12 +-
versioned_docs/version-2.7.3/transactions-api.md | 6 +-
.../version-2.7.3/transactions-guarantee.md | 2 +-
versioned_docs/version-2.7.3/transactions.md | 4 +-
.../version-2.7.3/window-functions-context.md | 28 +--
versioned_docs/version-2.7.4/admin-api-brokers.md | 10 +-
versioned_docs/version-2.7.4/admin-api-clusters.md | 12 +-
.../version-2.7.4/admin-api-functions.md | 70 +++---
.../version-2.7.4/admin-api-namespaces.md | 68 +++---
versioned_docs/version-2.7.4/admin-api-overview.md | 20 +-
.../version-2.7.4/admin-api-permissions.md | 10 +-
versioned_docs/version-2.7.4/admin-api-tenants.md | 10 +-
versioned_docs/version-2.7.4/admin-api-topics.md | 134 ++++++------
versioned_docs/version-2.7.4/administration-geo.md | 10 +-
.../version-2.7.4/administration-isolation.md | 6 +-
.../version-2.7.4/administration-load-balance.md | 8 +-
.../version-2.7.4/administration-proxy.md | 4 +-
.../version-2.7.4/administration-upgrade.md | 48 ++--
.../version-2.7.4/administration-zk-bk.md | 4 +-
.../version-2.7.4/client-libraries-cgo.md | 18 +-
.../version-2.7.4/client-libraries-cpp.md | 16 +-
.../version-2.7.4/client-libraries-dotnet.md | 60 ++---
.../version-2.7.4/client-libraries-go.md | 36 +--
.../version-2.7.4/client-libraries-java.md | 60 ++---
.../version-2.7.4/client-libraries-node.md | 36 +--
versioned_docs/version-2.7.4/client-libraries.md | 4 +-
versioned_docs/version-2.7.4/concepts-clients.md | 2 +-
.../version-2.7.4/concepts-proxy-sni-routing.md | 6 +-
.../version-2.7.4/concepts-schema-registry.md | 10 +-
.../version-2.7.4/cookbooks-deduplication.md | 12 +-
.../version-2.7.4/cookbooks-encryption.md | 4 +-
.../version-2.7.4/cookbooks-non-persistent.md | 2 +-
.../version-2.7.4/cookbooks-retention-expiry.md | 12 +-
.../version-2.7.4/cookbooks-tiered-storage.md | 10 +-
versioned_docs/version-2.7.4/deploy-aws.md | 12 +-
.../deploy-bare-metal-multi-cluster.md | 12 +-
versioned_docs/version-2.7.4/deploy-bare-metal.md | 38 ++--
versioned_docs/version-2.7.4/deploy-dcos.md | 14 +-
versioned_docs/version-2.7.4/deploy-docker.md | 2 +-
versioned_docs/version-2.7.4/deploy-monitoring.md | 14 +-
.../version-2.7.4/develop-load-manager.md | 24 +-
versioned_docs/version-2.7.4/develop-schema.md | 2 +-
.../version-2.7.4/developing-binary-protocol.md | 8 +-
versioned_docs/version-2.7.4/functions-debug.md | 16 +-
versioned_docs/version-2.7.4/functions-deploy.md | 8 +-
versioned_docs/version-2.7.4/functions-develop.md | 48 ++--
versioned_docs/version-2.7.4/functions-overview.md | 4 +-
versioned_docs/version-2.7.4/functions-runtime.md | 12 +-
versioned_docs/version-2.7.4/functions-worker.md | 38 ++--
.../version-2.7.4/getting-started-helm.md | 132 +++++------
.../version-2.7.4/getting-started-standalone.md | 30 +--
versioned_docs/version-2.7.4/helm-deploy.md | 4 +-
versioned_docs/version-2.7.4/helm-upgrade.md | 8 +-
versioned_docs/version-2.7.4/io-aerospike-sink.md | 4 +-
versioned_docs/version-2.7.4/io-canal-source.md | 68 +++---
versioned_docs/version-2.7.4/io-cassandra-sink.md | 10 +-
versioned_docs/version-2.7.4/io-cdc-debezium.md | 164 +++++++-------
versioned_docs/version-2.7.4/io-cli.md | 42 ++--
versioned_docs/version-2.7.4/io-connectors.md | 84 +++----
versioned_docs/version-2.7.4/io-debezium-source.md | 178 +++++++--------
versioned_docs/version-2.7.4/io-debug.md | 78 +++----
versioned_docs/version-2.7.4/io-develop.md | 64 +++---
versioned_docs/version-2.7.4/io-dynamodb-source.md | 12 +-
.../version-2.7.4/io-elasticsearch-sink.md | 60 ++---
versioned_docs/version-2.7.4/io-file-source.md | 48 ++--
versioned_docs/version-2.7.4/io-flume-sink.md | 12 +-
versioned_docs/version-2.7.4/io-flume-source.md | 12 +-
versioned_docs/version-2.7.4/io-hbase-sink.md | 12 +-
versioned_docs/version-2.7.4/io-hdfs2-sink.md | 16 +-
versioned_docs/version-2.7.4/io-hdfs3-sink.md | 16 +-
versioned_docs/version-2.7.4/io-influxdb-sink.md | 28 +--
versioned_docs/version-2.7.4/io-jdbc-sink.md | 54 ++---
versioned_docs/version-2.7.4/io-kafka-sink.md | 12 +-
versioned_docs/version-2.7.4/io-kafka-source.md | 62 +++---
versioned_docs/version-2.7.4/io-kinesis-sink.md | 20 +-
versioned_docs/version-2.7.4/io-kinesis-source.md | 12 +-
versioned_docs/version-2.7.4/io-mongo-sink.md | 12 +-
versioned_docs/version-2.7.4/io-netty-source.md | 94 ++++----
versioned_docs/version-2.7.4/io-nsq-source.md | 4 +-
versioned_docs/version-2.7.4/io-overview.md | 22 +-
versioned_docs/version-2.7.4/io-quickstart.md | 242 ++++++++++-----------
versioned_docs/version-2.7.4/io-rabbitmq-sink.md | 16 +-
versioned_docs/version-2.7.4/io-rabbitmq-source.md | 16 +-
versioned_docs/version-2.7.4/io-redis-sink.md | 12 +-
versioned_docs/version-2.7.4/io-solr-sink.md | 12 +-
versioned_docs/version-2.7.4/io-twitter-source.md | 4 +-
versioned_docs/version-2.7.4/io-use.md | 186 ++++++++--------
versioned_docs/version-2.7.4/kubernetes-helm.md | 132 +++++------
.../version-2.7.4/performance-pulsar-perf.md | 16 +-
.../version-2.7.4/reference-cli-tools.md | 6 +-
.../version-2.7.4/reference-configuration.md | 8 +-
.../version-2.7.4/reference-connector-admin.md | 2 +-
.../version-2.7.4/reference-pulsar-admin.md | 10 +-
.../version-2.7.4/reference-rest-api-overview.md | 4 +-
.../schema-evolution-compatibility.md | 152 ++++++-------
versioned_docs/version-2.7.4/schema-get-started.md | 20 +-
versioned_docs/version-2.7.4/schema-manage.md | 144 ++++++------
versioned_docs/version-2.7.4/schema-understand.md | 154 ++++++-------
versioned_docs/version-2.7.4/security-athenz.md | 4 +-
.../version-2.7.4/security-authorization.md | 8 +-
.../version-2.7.4/security-bouncy-castle.md | 18 +-
.../version-2.7.4/security-encryption.md | 12 +-
versioned_docs/version-2.7.4/security-extending.md | 4 +-
versioned_docs/version-2.7.4/security-jwt.md | 4 +-
versioned_docs/version-2.7.4/security-kerberos.md | 52 ++---
versioned_docs/version-2.7.4/security-oauth2.md | 6 +-
.../version-2.7.4/security-tls-keystore.md | 34 +--
.../version-2.7.4/security-tls-transport.md | 6 +-
.../version-2.7.4/sql-deployment-configurations.md | 24 +-
.../version-2.7.4/sql-getting-started.md | 42 ++--
versioned_docs/version-2.7.4/sql-overview.md | 4 +-
versioned_docs/version-2.7.4/sql-rest-api.md | 4 +-
versioned_docs/version-2.7.4/standalone.md | 30 +--
versioned_docs/version-2.7.4/tiered-storage-aws.md | 90 ++++----
.../version-2.7.4/tiered-storage-azure.md | 74 +++----
.../version-2.7.4/tiered-storage-filesystem.md | 146 ++++++-------
versioned_docs/version-2.7.4/tiered-storage-gcs.md | 76 +++----
.../version-2.7.4/tiered-storage-overview.md | 12 +-
versioned_docs/version-2.7.4/transactions-api.md | 6 +-
.../version-2.7.4/transactions-guarantee.md | 2 +-
versioned_docs/version-2.7.4/transactions.md | 4 +-
.../version-2.7.4/window-functions-context.md | 28 +--
versioned_docs/version-2.7.5/admin-api-brokers.md | 10 +-
versioned_docs/version-2.7.5/admin-api-clusters.md | 12 +-
.../version-2.7.5/admin-api-functions.md | 70 +++---
.../version-2.7.5/admin-api-namespaces.md | 68 +++---
versioned_docs/version-2.7.5/admin-api-overview.md | 20 +-
.../version-2.7.5/admin-api-permissions.md | 10 +-
versioned_docs/version-2.7.5/admin-api-tenants.md | 10 +-
versioned_docs/version-2.7.5/admin-api-topics.md | 134 ++++++------
versioned_docs/version-2.7.5/administration-geo.md | 10 +-
.../version-2.7.5/administration-isolation.md | 6 +-
.../version-2.7.5/administration-load-balance.md | 8 +-
.../version-2.7.5/administration-proxy.md | 4 +-
.../version-2.7.5/administration-upgrade.md | 48 ++--
.../version-2.7.5/administration-zk-bk.md | 4 +-
.../version-2.7.5/client-libraries-cgo.md | 18 +-
.../version-2.7.5/client-libraries-dotnet.md | 60 ++---
.../version-2.7.5/client-libraries-go.md | 36 +--
.../version-2.7.5/client-libraries-java.md | 60 ++---
.../version-2.7.5/client-libraries-node.md | 36 +--
versioned_docs/version-2.7.5/client-libraries.md | 4 +-
versioned_docs/version-2.7.5/concepts-clients.md | 2 +-
.../version-2.7.5/concepts-proxy-sni-routing.md | 6 +-
.../version-2.7.5/concepts-schema-registry.md | 10 +-
.../version-2.7.5/cookbooks-deduplication.md | 12 +-
.../version-2.7.5/cookbooks-encryption.md | 4 +-
.../version-2.7.5/cookbooks-non-persistent.md | 2 +-
.../version-2.7.5/cookbooks-retention-expiry.md | 12 +-
.../version-2.7.5/cookbooks-tiered-storage.md | 10 +-
versioned_docs/version-2.7.5/deploy-aws.md | 12 +-
.../deploy-bare-metal-multi-cluster.md | 12 +-
versioned_docs/version-2.7.5/deploy-bare-metal.md | 38 ++--
versioned_docs/version-2.7.5/deploy-dcos.md | 14 +-
versioned_docs/version-2.7.5/deploy-docker.md | 2 +-
versioned_docs/version-2.7.5/deploy-monitoring.md | 14 +-
.../version-2.7.5/develop-load-manager.md | 24 +-
versioned_docs/version-2.7.5/develop-schema.md | 2 +-
.../version-2.7.5/developing-binary-protocol.md | 8 +-
versioned_docs/version-2.7.5/functions-debug.md | 16 +-
versioned_docs/version-2.7.5/functions-deploy.md | 8 +-
versioned_docs/version-2.7.5/functions-develop.md | 48 ++--
versioned_docs/version-2.7.5/functions-overview.md | 4 +-
versioned_docs/version-2.7.5/functions-runtime.md | 12 +-
versioned_docs/version-2.7.5/functions-worker.md | 38 ++--
.../version-2.7.5/getting-started-helm.md | 132 +++++------
.../version-2.7.5/getting-started-standalone.md | 30 +--
versioned_docs/version-2.7.5/helm-deploy.md | 4 +-
versioned_docs/version-2.7.5/helm-upgrade.md | 8 +-
versioned_docs/version-2.7.5/io-aerospike-sink.md | 4 +-
versioned_docs/version-2.7.5/io-canal-source.md | 68 +++---
versioned_docs/version-2.7.5/io-cassandra-sink.md | 10 +-
versioned_docs/version-2.7.5/io-cdc-debezium.md | 164 +++++++-------
versioned_docs/version-2.7.5/io-cli.md | 42 ++--
versioned_docs/version-2.7.5/io-connectors.md | 84 +++----
versioned_docs/version-2.7.5/io-debezium-source.md | 178 +++++++--------
versioned_docs/version-2.7.5/io-debug.md | 78 +++----
versioned_docs/version-2.7.5/io-develop.md | 64 +++---
versioned_docs/version-2.7.5/io-dynamodb-source.md | 12 +-
.../version-2.7.5/io-elasticsearch-sink.md | 60 ++---
versioned_docs/version-2.7.5/io-file-source.md | 48 ++--
versioned_docs/version-2.7.5/io-flume-sink.md | 12 +-
versioned_docs/version-2.7.5/io-flume-source.md | 12 +-
versioned_docs/version-2.7.5/io-hbase-sink.md | 12 +-
versioned_docs/version-2.7.5/io-hdfs2-sink.md | 16 +-
versioned_docs/version-2.7.5/io-hdfs3-sink.md | 16 +-
versioned_docs/version-2.7.5/io-influxdb-sink.md | 28 +--
versioned_docs/version-2.7.5/io-jdbc-sink.md | 54 ++---
versioned_docs/version-2.7.5/io-kafka-sink.md | 12 +-
versioned_docs/version-2.7.5/io-kafka-source.md | 62 +++---
versioned_docs/version-2.7.5/io-kinesis-sink.md | 20 +-
versioned_docs/version-2.7.5/io-kinesis-source.md | 12 +-
versioned_docs/version-2.7.5/io-mongo-sink.md | 12 +-
versioned_docs/version-2.7.5/io-netty-source.md | 94 ++++----
versioned_docs/version-2.7.5/io-nsq-source.md | 4 +-
versioned_docs/version-2.7.5/io-overview.md | 22 +-
versioned_docs/version-2.7.5/io-quickstart.md | 242 ++++++++++-----------
versioned_docs/version-2.7.5/io-rabbitmq-sink.md | 16 +-
versioned_docs/version-2.7.5/io-rabbitmq-source.md | 16 +-
versioned_docs/version-2.7.5/io-redis-sink.md | 12 +-
versioned_docs/version-2.7.5/io-solr-sink.md | 12 +-
versioned_docs/version-2.7.5/io-twitter-source.md | 4 +-
versioned_docs/version-2.7.5/io-use.md | 186 ++++++++--------
versioned_docs/version-2.7.5/kubernetes-helm.md | 132 +++++------
.../version-2.7.5/performance-pulsar-perf.md | 16 +-
.../version-2.7.5/reference-cli-tools.md | 6 +-
.../version-2.7.5/reference-configuration.md | 8 +-
.../version-2.7.5/reference-connector-admin.md | 2 +-
.../version-2.7.5/reference-pulsar-admin.md | 10 +-
.../version-2.7.5/reference-rest-api-overview.md | 4 +-
.../schema-evolution-compatibility.md | 152 ++++++-------
versioned_docs/version-2.7.5/schema-get-started.md | 20 +-
versioned_docs/version-2.7.5/schema-manage.md | 144 ++++++------
versioned_docs/version-2.7.5/schema-understand.md | 154 ++++++-------
versioned_docs/version-2.7.5/security-athenz.md | 4 +-
.../version-2.7.5/security-authorization.md | 8 +-
.../version-2.7.5/security-bouncy-castle.md | 18 +-
.../version-2.7.5/security-encryption.md | 12 +-
versioned_docs/version-2.7.5/security-extending.md | 4 +-
versioned_docs/version-2.7.5/security-jwt.md | 4 +-
versioned_docs/version-2.7.5/security-kerberos.md | 52 ++---
versioned_docs/version-2.7.5/security-oauth2.md | 6 +-
.../version-2.7.5/security-tls-keystore.md | 34 +--
.../version-2.7.5/security-tls-transport.md | 6 +-
.../version-2.7.5/sql-deployment-configurations.md | 24 +-
.../version-2.7.5/sql-getting-started.md | 42 ++--
versioned_docs/version-2.7.5/sql-overview.md | 4 +-
versioned_docs/version-2.7.5/sql-rest-api.md | 4 +-
versioned_docs/version-2.7.5/standalone.md | 30 +--
versioned_docs/version-2.7.5/tiered-storage-aws.md | 90 ++++----
.../version-2.7.5/tiered-storage-azure.md | 74 +++----
.../version-2.7.5/tiered-storage-filesystem.md | 146 ++++++-------
versioned_docs/version-2.7.5/tiered-storage-gcs.md | 76 +++----
.../version-2.7.5/tiered-storage-overview.md | 12 +-
versioned_docs/version-2.7.5/transactions-api.md | 6 +-
.../version-2.7.5/transactions-guarantee.md | 2 +-
versioned_docs/version-2.7.5/transactions.md | 4 +-
.../version-2.7.5/window-functions-context.md | 28 +--
versioned_docs/version-2.8.x/about.md | 6 +-
versioned_docs/version-2.8.x/admin-api-brokers.md | 12 +-
versioned_docs/version-2.8.x/admin-api-clusters.md | 12 +-
.../version-2.8.x/admin-api-functions.md | 70 +++---
.../version-2.8.x/admin-api-namespaces.md | 66 +++---
versioned_docs/version-2.8.x/admin-api-packages.md | 18 +-
.../version-2.8.x/admin-api-permissions.md | 10 +-
versioned_docs/version-2.8.x/admin-api-tenants.md | 10 +-
versioned_docs/version-2.8.x/admin-api-topics.md | 148 ++++++-------
.../version-2.8.x/administration-proxy.md | 4 +-
.../version-2.8.x/administration-upgrade.md | 48 ++--
.../version-2.8.x/administration-zk-bk.md | 4 +-
.../version-2.8.x/client-libraries-cgo.md | 18 +-
.../version-2.8.x/client-libraries-dotnet.md | 60 ++---
.../version-2.8.x/client-libraries-go.md | 50 ++---
.../version-2.8.x/client-libraries-java.md | 60 ++---
.../version-2.8.x/client-libraries-node.md | 36 +--
versioned_docs/version-2.8.x/client-libraries.md | 4 +-
versioned_docs/version-2.8.x/concepts-clients.md | 2 +-
.../version-2.8.x/concepts-proxy-sni-routing.md | 8 +-
.../version-2.8.x/concepts-throttling.md | 18 +-
.../version-2.8.x/concepts-transactions.md | 4 +-
.../version-2.8.x/cookbooks-compaction.md | 2 +-
.../version-2.8.x/cookbooks-deduplication.md | 12 +-
.../version-2.8.x/cookbooks-encryption.md | 4 +-
.../version-2.8.x/cookbooks-non-persistent.md | 2 +-
.../version-2.8.x/cookbooks-retention-expiry.md | 12 +-
.../version-2.8.x/cookbooks-tiered-storage.md | 12 +-
versioned_docs/version-2.8.x/deploy-aws.md | 12 +-
versioned_docs/version-2.8.x/deploy-dcos.md | 14 +-
versioned_docs/version-2.8.x/deploy-docker.md | 2 +-
versioned_docs/version-2.8.x/deploy-monitoring.md | 14 +-
.../version-2.8.x/develop-load-manager.md | 24 +-
versioned_docs/version-2.8.x/develop-schema.md | 2 +-
.../version-2.8.x/developing-binary-protocol.md | 8 +-
versioned_docs/version-2.8.x/functions-debug.md | 16 +-
versioned_docs/version-2.8.x/functions-deploy.md | 8 +-
versioned_docs/version-2.8.x/functions-develop.md | 48 ++--
versioned_docs/version-2.8.x/functions-overview.md | 4 +-
versioned_docs/version-2.8.x/functions-runtime.md | 16 +-
versioned_docs/version-2.8.x/functions-worker.md | 40 ++--
.../version-2.8.x/getting-started-helm.md | 12 +-
versioned_docs/version-2.8.x/helm-deploy.md | 4 +-
versioned_docs/version-2.8.x/helm-upgrade.md | 8 +-
versioned_docs/version-2.8.x/io-aerospike-sink.md | 4 +-
versioned_docs/version-2.8.x/io-canal-source.md | 68 +++---
versioned_docs/version-2.8.x/io-cassandra-sink.md | 10 +-
versioned_docs/version-2.8.x/io-cdc-debezium.md | 164 +++++++-------
versioned_docs/version-2.8.x/io-cli.md | 42 ++--
versioned_docs/version-2.8.x/io-connectors.md | 86 ++++----
versioned_docs/version-2.8.x/io-debezium-source.md | 196 ++++++++---------
versioned_docs/version-2.8.x/io-debug.md | 78 +++----
versioned_docs/version-2.8.x/io-develop.md | 74 +++----
versioned_docs/version-2.8.x/io-dynamodb-source.md | 12 +-
.../version-2.8.x/io-elasticsearch-sink.md | 60 ++---
versioned_docs/version-2.8.x/io-file-source.md | 49 ++---
versioned_docs/version-2.8.x/io-flume-sink.md | 12 +-
versioned_docs/version-2.8.x/io-flume-source.md | 12 +-
versioned_docs/version-2.8.x/io-hbase-sink.md | 13 +-
versioned_docs/version-2.8.x/io-hdfs2-sink.md | 16 +-
versioned_docs/version-2.8.x/io-hdfs3-sink.md | 16 +-
versioned_docs/version-2.8.x/io-influxdb-sink.md | 28 +--
versioned_docs/version-2.8.x/io-jdbc-sink.md | 54 ++---
versioned_docs/version-2.8.x/io-kafka-sink.md | 12 +-
versioned_docs/version-2.8.x/io-kafka-source.md | 64 +++---
versioned_docs/version-2.8.x/io-kinesis-sink.md | 20 +-
versioned_docs/version-2.8.x/io-kinesis-source.md | 12 +-
versioned_docs/version-2.8.x/io-mongo-sink.md | 12 +-
versioned_docs/version-2.8.x/io-netty-source.md | 94 ++++----
versioned_docs/version-2.8.x/io-nsq-source.md | 4 +-
versioned_docs/version-2.8.x/io-overview.md | 22 +-
versioned_docs/version-2.8.x/io-quickstart.md | 242 ++++++++++-----------
versioned_docs/version-2.8.x/io-rabbitmq-sink.md | 16 +-
versioned_docs/version-2.8.x/io-rabbitmq-source.md | 16 +-
versioned_docs/version-2.8.x/io-redis-sink.md | 12 +-
versioned_docs/version-2.8.x/io-solr-sink.md | 12 +-
versioned_docs/version-2.8.x/io-twitter-source.md | 4 +-
versioned_docs/version-2.8.x/kubernetes-helm.md | 132 +++++------
.../version-2.8.x/performance-pulsar-perf.md | 16 +-
.../version-2.8.x/reference-cli-tools.md | 6 +-
.../version-2.8.x/reference-configuration.md | 8 +-
.../version-2.8.x/reference-rest-api-overview.md | 4 +-
.../version-2.8.x/reference-terminology.md | 2 +-
.../schema-evolution-compatibility.md | 152 ++++++-------
versioned_docs/version-2.8.x/schema-get-started.md | 20 +-
versioned_docs/version-2.8.x/schema-manage.md | 144 ++++++------
versioned_docs/version-2.8.x/schema-understand.md | 170 +++++++--------
versioned_docs/version-2.8.x/security-athenz.md | 4 +-
.../version-2.8.x/security-authorization.md | 8 +-
.../version-2.8.x/security-bouncy-castle.md | 18 +-
.../version-2.8.x/security-encryption.md | 12 +-
versioned_docs/version-2.8.x/security-extending.md | 4 +-
versioned_docs/version-2.8.x/security-jwt.md | 4 +-
versioned_docs/version-2.8.x/security-kerberos.md | 52 ++---
versioned_docs/version-2.8.x/security-oauth2.md | 6 +-
.../version-2.8.x/security-tls-keystore.md | 34 +--
.../version-2.8.x/security-tls-transport.md | 8 +-
.../version-2.8.x/sql-deployment-configurations.md | 24 +-
.../version-2.8.x/sql-getting-started.md | 42 ++--
versioned_docs/version-2.8.x/sql-overview.md | 2 +-
versioned_docs/version-2.8.x/sql-rest-api.md | 4 +-
.../version-2.8.x/tiered-storage-filesystem.md | 146 ++++++-------
versioned_docs/version-2.8.x/tiered-storage-gcs.md | 76 +++----
.../version-2.8.x/tiered-storage-overview.md | 12 +-
versioned_docs/version-2.8.x/transaction-api.md | 6 +-
.../version-2.8.x/transaction-guarantee.md | 2 +-
versioned_docs/version-2.8.x/txn-how.md | 90 ++++----
versioned_docs/version-2.8.x/txn-monitor.md | 2 +-
versioned_docs/version-2.8.x/txn-what.md | 28 +--
versioned_docs/version-2.8.x/txn-why.md | 20 +-
.../version-2.8.x/window-functions-context.md | 28 +--
versioned_docs/version-2.9.x/about.md | 4 +-
.../version-2.9.x/administration-proxy.md | 4 +-
.../version-2.9.x/administration-upgrade.md | 48 ++--
.../version-2.9.x/administration-zk-bk.md | 6 +-
.../version-2.9.x/client-libraries-cgo.md | 18 +-
.../version-2.9.x/client-libraries-dotnet.md | 60 ++---
.../version-2.9.x/client-libraries-go.md | 50 ++---
.../version-2.9.x/client-libraries-java.md | 58 ++---
.../version-2.9.x/client-libraries-node.md | 36 +--
.../version-2.9.x/client-libraries-rest.md | 12 +-
versioned_docs/version-2.9.x/client-libraries.md | 4 +-
versioned_docs/version-2.9.x/concepts-clients.md | 2 +-
.../version-2.9.x/concepts-proxy-sni-routing.md | 8 +-
.../version-2.9.x/concepts-throttling.md | 18 +-
.../version-2.9.x/concepts-transactions.md | 4 +-
.../version-2.9.x/cookbooks-compaction.md | 2 +-
.../version-2.9.x/cookbooks-deduplication.md | 12 +-
.../version-2.9.x/cookbooks-encryption.md | 4 +-
.../version-2.9.x/cookbooks-non-persistent.md | 2 +-
.../version-2.9.x/cookbooks-retention-expiry.md | 26 +--
.../version-2.9.x/cookbooks-tiered-storage.md | 14 +-
versioned_docs/version-2.9.x/deploy-aws.md | 12 +-
versioned_docs/version-2.9.x/deploy-dcos.md | 14 +-
versioned_docs/version-2.9.x/deploy-docker.md | 2 +-
versioned_docs/version-2.9.x/deploy-ibm.md | 28 +--
versioned_docs/version-2.9.x/deploy-monitoring.md | 14 +-
.../version-2.9.x/develop-load-manager.md | 24 +-
versioned_docs/version-2.9.x/develop-schema.md | 2 +-
.../version-2.9.x/developing-binary-protocol.md | 8 +-
versioned_docs/version-2.9.x/functions-debug.md | 18 +-
versioned_docs/version-2.9.x/functions-deploy.md | 10 +-
versioned_docs/version-2.9.x/functions-develop.md | 48 ++--
versioned_docs/version-2.9.x/functions-overview.md | 4 +-
versioned_docs/version-2.9.x/functions-package.md | 136 ++++++------
versioned_docs/version-2.9.x/functions-runtime.md | 16 +-
versioned_docs/version-2.9.x/functions-worker.md | 38 ++--
.../version-2.9.x/getting-started-helm.md | 12 +-
versioned_docs/version-2.9.x/helm-deploy.md | 4 +-
versioned_docs/version-2.9.x/helm-upgrade.md | 8 +-
versioned_docs/version-2.9.x/io-aerospike-sink.md | 4 +-
versioned_docs/version-2.9.x/io-canal-source.md | 68 +++---
versioned_docs/version-2.9.x/io-cassandra-sink.md | 10 +-
versioned_docs/version-2.9.x/io-cdc-debezium.md | 164 +++++++-------
versioned_docs/version-2.9.x/io-cli.md | 42 ++--
versioned_docs/version-2.9.x/io-connectors.md | 88 ++++----
versioned_docs/version-2.9.x/io-debezium-source.md | 202 ++++++++---------
versioned_docs/version-2.9.x/io-debug.md | 78 +++----
versioned_docs/version-2.9.x/io-develop.md | 74 +++----
versioned_docs/version-2.9.x/io-dynamodb-source.md | 12 +-
.../version-2.9.x/io-elasticsearch-sink.md | 64 +++---
versioned_docs/version-2.9.x/io-file-source.md | 49 ++---
versioned_docs/version-2.9.x/io-flume-sink.md | 12 +-
versioned_docs/version-2.9.x/io-flume-source.md | 12 +-
versioned_docs/version-2.9.x/io-hbase-sink.md | 13 +-
versioned_docs/version-2.9.x/io-hdfs2-sink.md | 16 +-
versioned_docs/version-2.9.x/io-hdfs3-sink.md | 16 +-
versioned_docs/version-2.9.x/io-influxdb-sink.md | 28 +--
versioned_docs/version-2.9.x/io-jdbc-sink.md | 54 ++---
versioned_docs/version-2.9.x/io-kafka-sink.md | 12 +-
versioned_docs/version-2.9.x/io-kafka-source.md | 64 +++---
versioned_docs/version-2.9.x/io-kinesis-sink.md | 20 +-
versioned_docs/version-2.9.x/io-kinesis-source.md | 12 +-
versioned_docs/version-2.9.x/io-mongo-sink.md | 12 +-
versioned_docs/version-2.9.x/io-netty-source.md | 94 ++++----
versioned_docs/version-2.9.x/io-nsq-source.md | 4 +-
versioned_docs/version-2.9.x/io-overview.md | 22 +-
versioned_docs/version-2.9.x/io-quickstart.md | 226 +++++++++----------
versioned_docs/version-2.9.x/io-rabbitmq-sink.md | 16 +-
versioned_docs/version-2.9.x/io-rabbitmq-source.md | 16 +-
versioned_docs/version-2.9.x/io-redis-sink.md | 44 ++--
versioned_docs/version-2.9.x/io-solr-sink.md | 12 +-
versioned_docs/version-2.9.x/io-twitter-source.md | 4 +-
versioned_docs/version-2.9.x/kubernetes-helm.md | 132 +++++------
.../version-2.9.x/performance-pulsar-perf.md | 16 +-
.../version-2.9.x/reference-cli-tools.md | 6 +-
.../version-2.9.x/reference-configuration.md | 8 +-
versioned_docs/version-2.9.x/reference-metrics.md | 18 +-
.../version-2.9.x/reference-rest-api-overview.md | 4 +-
.../version-2.9.x/reference-terminology.md | 2 +-
.../schema-evolution-compatibility.md | 152 ++++++-------
versioned_docs/version-2.9.x/schema-get-started.md | 20 +-
versioned_docs/version-2.9.x/schema-manage.md | 144 ++++++------
versioned_docs/version-2.9.x/schema-understand.md | 170 +++++++--------
versioned_docs/version-2.9.x/security-athenz.md | 4 +-
.../version-2.9.x/security-authorization.md | 12 +-
.../version-2.9.x/security-bouncy-castle.md | 18 +-
.../version-2.9.x/security-encryption.md | 12 +-
versioned_docs/version-2.9.x/security-extending.md | 4 +-
versioned_docs/version-2.9.x/security-jwt.md | 4 +-
versioned_docs/version-2.9.x/security-kerberos.md | 52 ++---
versioned_docs/version-2.9.x/security-oauth2.md | 6 +-
.../version-2.9.x/security-tls-keystore.md | 34 +--
.../version-2.9.x/security-tls-transport.md | 8 +-
.../version-2.9.x/sql-deployment-configurations.md | 24 +-
.../version-2.9.x/sql-getting-started.md | 42 ++--
versioned_docs/version-2.9.x/sql-overview.md | 2 +-
versioned_docs/version-2.9.x/sql-rest-api.md | 4 +-
.../version-2.9.x/tiered-storage-azure.md | 74 +++----
.../version-2.9.x/tiered-storage-filesystem.md | 66 +++---
versioned_docs/version-2.9.x/tiered-storage-gcs.md | 76 +++----
.../version-2.9.x/tiered-storage-overview.md | 12 +-
versioned_docs/version-2.9.x/transaction-api.md | 6 +-
.../version-2.9.x/transaction-guarantee.md | 2 +-
versioned_docs/version-2.9.x/txn-how.md | 90 ++++----
versioned_docs/version-2.9.x/txn-monitor.md | 2 +-
versioned_docs/version-2.9.x/txn-what.md | 28 +--
versioned_docs/version-2.9.x/txn-why.md | 20 +-
.../version-2.9.x/window-functions-context.md | 28 +--
2660 files changed, 40606 insertions(+), 40632 deletions(-)
diff --git a/docs/about.md b/docs/about.md
index 8cf60eb35ad..b7480242844 100644
--- a/docs/about.md
+++ b/docs/about.md
@@ -13,16 +13,16 @@ import { docUrl } from "@site/src/utils/index";
# Welcome to the Apache Pulsar documentation portal
***
-This portal holds a variety of topics, tutorials, guides, and reference material to help you work with Pulsar.
+This portal holds a variety of topics, tutorials, guides, and reference material to help you work with Pulsar.
## Choose your path....
Select one of the content blocks below to begin your Pulsar journey. If you ...
* Are new to Pulsar, start with **About Pulsar** to learn about features and concepts.
* Want to jump to the quickstart, select **Get Started**.
* Are an operator responsible for architecting and supporting Apache Pulsar, start with **Install, Deploy, Upgrade**.
-* Are a developer who wants to master Apache Pulsar, select **Pulsar for Developers**.
+* Are a developer who wants to master Apache Pulsar, select **Pulsar for Developers**.
* Want to try out Pulsar, select **How To** for access to the "hello world" tutorial.
-* An experienced Pulsar coder looking for API, metrics, or configuration documentation, go to **Reference**.
+* An experienced Pulsar coder looking for API, metrics, or configuration documentation, go to **Reference**.
<BlockLinks>
<BlockLink title="About Pulsar" url="concepts-overview" />
@@ -41,7 +41,7 @@ As you probably know, we are working on a new user experience for our documentat
## Help Improve These Documents
***
-You'll notice an Edit button at the bottom and top of each page. Click it to open a landing page with instructions for requesting changes to posted documents. These are your resources. Participation is not only welcomed – it's essential!
+You'll notice an Edit button at the bottom and top of each page. Click it to open a landing page with instructions for requesting changes to posted documents. These are your resources. Participation is not only welcomed – it's essential!
:::tip
diff --git a/docs/admin-api-clusters.md b/docs/admin-api-clusters.md
index 12cb8778944..dbabeea4c5f 100644
--- a/docs/admin-api-clusters.md
+++ b/docs/admin-api-clusters.md
@@ -15,9 +15,9 @@ import TabItem from '@theme/TabItem';
This page only shows **some frequently used operations**.
- For the latest and complete information about `Pulsar admin`, including commands, flags, descriptions, and more, see [Pulsar admin docs](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/).
-
+
- For the latest and complete information about `REST API`, including parameters, responses, samples, and more, see {@inject: rest:REST:/} API doc.
-
+
- For the latest and complete information about `Java admin API`, including classes, methods, descriptions, and more, see [Java admin API doc](/api/admin/).
:::
diff --git a/docs/admin-api-functions.md b/docs/admin-api-functions.md
index 6a482d937c1..76958c2242b 100644
--- a/docs/admin-api-functions.md
+++ b/docs/admin-api-functions.md
@@ -15,11 +15,11 @@ import TabItem from '@theme/TabItem';
This page only shows **some frequently used operations**.
- For the latest and complete information about `Pulsar admin`, including commands, flags, descriptions, and more, see [Pulsar admin docs](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/).
-
+
- For the latest and complete information about `REST API`, including parameters, responses, samples, and more, see {@inject: rest:REST:/} API doc.
-
+
- For the latest and complete information about `Java admin API`, including classes, methods, descriptions, and more, see [Java admin API doc](/api/admin/).
-
+
:::
**Pulsar Functions** are lightweight compute processes that
@@ -50,7 +50,7 @@ You can create a Pulsar function in cluster mode (deploy it on a Pulsar cluster)
values={[{"label":"Admin CLI","value":"Admin CLI"},{"label":"REST API","value":"REST API"},{"label":"Java Admin API","value":"Java Admin API"}]}>
<TabItem value="Admin CLI">
-Use the [`create`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=create) subcommand.
+Use the [`create`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=create) subcommand.
**Example**
@@ -104,7 +104,7 @@ You can update a Pulsar function that has been deployed to a Pulsar cluster usin
values={[{"label":"Admin CLI","value":"Admin CLI"},{"label":"REST API","value":"REST API"},{"label":"Java Admin API","value":"Java Admin API"}]}>
<TabItem value="Admin CLI">
-Use the [`update`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=update) subcommand.
+Use the [`update`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=update) subcommand.
**Example**
@@ -153,7 +153,7 @@ You can start a stopped function instance with `instance-id` using Admin CLI, RE
values={[{"label":"Admin CLI","value":"Admin CLI"},{"label":"REST API","value":"REST API"},{"label":"Java Admin API","value":"Java Admin API"}]}>
<TabItem value="Admin CLI">
-Use the [`start`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=start) subcommand.
+Use the [`start`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=start) subcommand.
```shell
pulsar-admin functions start \
@@ -190,7 +190,7 @@ You can start all stopped function instances using Admin CLI, REST API or Java A
values={[{"label":"Admin CLI","value":"Admin CLI"},{"label":"REST API","value":"REST API"},{"label":"Java Admin API","value":"Java Admin API"}]}>
<TabItem value="Admin CLI">
-Use the [`start`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=start) subcommand.
+Use the [`start`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=start) subcommand.
**Example**
@@ -228,7 +228,7 @@ You can stop a function instance with `instance-id` using Admin CLI, REST API or
values={[{"label":"Admin CLI","value":"Admin CLI"},{"label":"REST API","value":"REST API"},{"label":"Java Admin API","value":"Java Admin API"}]}>
<TabItem value="Admin CLI">
-Use the [`stop`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=stop) subcommand.
+Use the [`stop`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=stop) subcommand.
**Example**
@@ -267,7 +267,7 @@ You can stop all function instances using Admin CLI, REST API or Java Admin API.
values={[{"label":"Admin CLI","value":"Admin CLI"},{"label":"REST API","value":"REST API"},{"label":"Java Admin API","value":"Java Admin API"}]}>
<TabItem value="Admin CLI">
-Use the [`stop`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=stop) subcommand.
+Use the [`stop`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=stop) subcommand.
**Example**
@@ -305,7 +305,7 @@ Restart a function instance with `instance-id` using Admin CLI, REST API or Java
values={[{"label":"Admin CLI","value":"Admin CLI"},{"label":"REST API","value":"REST API"},{"label":"Java Admin API","value":"Java Admin API"}]}>
<TabItem value="Admin CLI">
-Use the [`restart`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=restart) subcommand.
+Use the [`restart`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=restart) subcommand.
**Example**
@@ -344,7 +344,7 @@ You can restart all function instances using Admin CLI, REST API or Java admin A
values={[{"label":"Admin CLI","value":"Admin CLI"},{"label":"REST API","value":"REST API"},{"label":"Java Admin API","value":"Java Admin API"}]}>
<TabItem value="Admin CLI">
-Use the [`restart`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=restart) subcommand.
+Use the [`restart`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=restart) subcommand.
**Example**
@@ -419,7 +419,7 @@ You can delete a Pulsar function that is running on a Pulsar cluster using Admin
values={[{"label":"Admin CLI","value":"Admin CLI"},{"label":"REST API","value":"REST API"},{"label":"Java Admin API","value":"Java Admin API"}]}>
<TabItem value="Admin CLI">
-Use the [`delete`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=delete) subcommand.
+Use the [`delete`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=delete) subcommand.
**Example**
@@ -457,7 +457,7 @@ You can get information about a Pulsar function currently running in cluster mod
values={[{"label":"Admin CLI","value":"Admin CLI"},{"label":"REST API","value":"REST API"},{"label":"Java Admin API","value":"Java Admin API"}]}>
<TabItem value="Admin CLI">
-Use the [`get`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=get) subcommand.
+Use the [`get`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=get) subcommand.
**Example**
@@ -494,7 +494,7 @@ You can get the current status of a Pulsar function instance with `instance-id`
values={[{"label":"Admin CLI","value":"Admin CLI"},{"label":"REST API","value":"REST API"},{"label":"Java Admin API","value":"Java Admin API"}]}>
<TabItem value="Admin CLI">
-Use the [`status`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=status) subcommand.
+Use the [`status`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=status) subcommand.
**Example**
@@ -533,7 +533,7 @@ You can get the current status of a Pulsar function instance using Admin CLI, RE
values={[{"label":"Admin CLI","value":"Admin CLI"},{"label":"REST API","value":"REST API"},{"label":"Java Admin API","value":"Java Admin API"}]}>
<TabItem value="Admin CLI">
-Use the [`status`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=status) subcommand.
+Use the [`status`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=status) subcommand.
**Example**
@@ -571,7 +571,7 @@ You can get the current stats of a Pulsar Function instance with `instance-id` u
values={[{"label":"Admin CLI","value":"Admin CLI"},{"label":"REST API","value":"REST API"},{"label":"Java Admin API","value":"Java Admin API"}]}>
<TabItem value="Admin CLI">
-Use the [`stats`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=stats) subcommand.
+Use the [`stats`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=stats) subcommand.
**Example**
@@ -610,7 +610,7 @@ You can get the current stats of a Pulsar function using Admin CLI, REST API or
values={[{"label":"Admin CLI","value":"Admin CLI"},{"label":"REST API","value":"REST API"},{"label":"Java Admin API","value":"Java Admin API"}]}>
<TabItem value="Admin CLI">
-Use the [`stats`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=stats) subcommand.
+Use the [`stats`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=stats) subcommand.
**Example**
@@ -648,7 +648,7 @@ You can trigger a specified Pulsar function with a supplied value using Admin CL
values={[{"label":"Admin CLI","value":"Admin CLI"},{"label":"REST API","value":"REST API"},{"label":"Java Admin API","value":"Java Admin API"}]}>
<TabItem value="Admin CLI">
-Use the [`trigger`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=trigger) subcommand.
+Use the [`trigger`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=trigger) subcommand.
**Example**
@@ -689,7 +689,7 @@ You can put the state associated with a Pulsar function using Admin CLI, REST AP
values={[{"label":"Admin CLI","value":"Admin CLI"},{"label":"REST API","value":"REST API"},{"label":"Java Admin API","value":"Java Admin API"}]}>
<TabItem value="Admin CLI">
-Use the [`putstate`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=putstate) subcommand.
+Use the [`putstate`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=putstate) subcommand.
**Example**
@@ -730,7 +730,7 @@ You can fetch the current state associated with a Pulsar function using Admin CL
values={[{"label":"Admin CLI","value":"Admin CLI"},{"label":"REST API","value":"REST API"},{"label":"Java Admin API","value":"Java Admin API"}]}>
<TabItem value="Admin CLI">
-Use the [`querystate`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=querystate) subcommand.
+Use the [`querystate`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/functions?id=querystate) subcommand.
**Example**
diff --git a/docs/admin-api-namespaces.md b/docs/admin-api-namespaces.md
index 50524d34f80..ca95675b957 100644
--- a/docs/admin-api-namespaces.md
+++ b/docs/admin-api-namespaces.md
@@ -15,11 +15,11 @@ import TabItem from '@theme/TabItem';
This page only shows **some frequently used operations**.
- For the latest and complete information about `Pulsar admin`, including commands, flags, descriptions, and more information, see [Pulsar admin docs](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/).
-
+
- For the latest and complete information about `REST API`, including parameters, responses, samples, and more, see {@inject: rest:REST:/} API doc.
-
+
- For the latest and complete information about `Java admin API`, including classes, methods, descriptions, and more, see [Java admin API doc](/api/admin/).
-
+
:::
Pulsar [namespaces](reference-terminology.md#namespace) are logical groupings of [topics](reference-terminology.md#topic).
@@ -1114,7 +1114,7 @@ admin.namespaces().removeDeduplicationSnapshotInterval(namespace)
### Namespace isolation
-You can use the [Pulsar isolation policy](administration-isolation.md) to allocate resources (broker and bookie) for a namespace.
+You can use the [Pulsar isolation policy](administration-isolation.md) to allocate resources (broker and bookie) for a namespace.
### Unload namespaces from a broker
diff --git a/docs/admin-api-permissions.md b/docs/admin-api-permissions.md
index ca84455e035..d2943e13e70 100644
--- a/docs/admin-api-permissions.md
+++ b/docs/admin-api-permissions.md
@@ -15,9 +15,9 @@ import TabItem from '@theme/TabItem';
This page only shows **some frequently used operations**.
- For the latest and complete information about `Pulsar admin`, including commands, flags, descriptions, and more, see [Pulsar admin docs](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/).
-
+
- For the latest and complete information about `REST API`, including parameters, responses, samples, and more, see {@inject: rest:REST:/} API doc.
-
+
- For the latest and complete information about `Java admin API`, including classes, methods, descriptions, and more, see [Java admin API doc](/api/admin/).
:::
@@ -58,7 +58,7 @@ pulsar-admin namespaces grant-permission test-tenant/namespace1 \
--role 'my.role.*'
```
-Then, roles `my.role.1`, `my.role.2`, `my.role.foo`, `my.role.bar`, etc. can produce and consume.
+Then, roles `my.role.1`, `my.role.2`, `my.role.foo`, `my.role.bar`, etc. can produce and consume.
```shell
pulsar-admin namespaces grant-permission test-tenant/namespace1 \
@@ -82,7 +82,7 @@ pulsar-admin namespaces grant-permission test-tenant/namespace1 \
--role 'my.*.role'
```
-In this case, only the role `my.*.role` has permissions.
+In this case, only the role `my.*.role` has permissions.
Roles `my.1.role`, `my.2.role`, `my.foo.role`, `my.bar.role`, etc. **cannot** produce and consume.
</TabItem>
diff --git a/docs/admin-api-schemas.md b/docs/admin-api-schemas.md
index deb43cd2102..baf5718535d 100644
--- a/docs/admin-api-schemas.md
+++ b/docs/admin-api-schemas.md
@@ -41,7 +41,7 @@ Use the `upload` subcommand.
pulsar-admin schemas upload --filename <schema-definition-file> <topic-name>
```
-The `schema-definition-file` is in JSON format.
+The `schema-definition-file` is in JSON format.
```json
{
@@ -94,11 +94,11 @@ If the schema is a **struct** schema, this field must be a JSON string of the Av
The payload includes the following fields:
-| Field | Description |
+| Field | Description |
| --- | --- |
-| `type` | The schema type. |
-| `schema` | The schema definition data, which is encoded in UTF 8 charset. <li>If the schema is a **primitive** schema, this field should be blank. </li><li>If the schema is a **struct** schema, this field should be a JSON string of the Avro schema definition. </li> |
-| `properties` | The additional properties associated with the schema. |
+| `type` | The schema type. |
+| `schema` | The schema definition data, which is encoded in UTF 8 charset. <li>If the schema is a **primitive** schema, this field should be blank. </li><li>If the schema is a **struct** schema, this field should be a JSON string of the Avro schema definition. </li> |
+| `properties` | The additional properties associated with the schema. |
The following is an example for a JSON schema.
@@ -114,7 +114,7 @@ The following is an example for a JSON schema.
### Get the latest schema
-To get the latest schema for a topic, you can use one of the following methods.
+To get the latest schema for a topic, you can use one of the following methods.
````mdx-code-block
<Tabs groupId="api-choice"
@@ -280,7 +280,7 @@ pulsar-admin schemas delete <topic-name>
</TabItem>
<TabItem value="REST API">
-Send a `DELETE` request to a schema endpoint: {@inject: endpoint|DELETE|/admin/v2/schemas/:tenant/:namespace/:topic/schema|operation/deleteSchema?version=@pulsar:version_number@}
+Send a `DELETE` request to a schema endpoint: {@inject: endpoint|DELETE|/admin/v2/schemas/:tenant/:namespace/:topic/schema|operation/deleteSchema?version=@pulsar:version_number@}
Here is an example of a response returned in JSON format.
@@ -322,7 +322,7 @@ To enable/enforce schema auto-update at the namespace level, you can use one of
<TabItem value="Admin CLI">
-Use the `set-is-allow-auto-update-schema` subcommand.
+Use the `set-is-allow-auto-update-schema` subcommand.
```bash
bin/pulsar-admin namespaces set-is-allow-auto-update-schema --enable tenant/namespace
@@ -371,7 +371,7 @@ To disable schema auto-update at the **namespace** level, you can use one of the
<TabItem value="Admin CLI">
-Use the `set-is-allow-auto-update-schema` subcommand.
+Use the `set-is-allow-auto-update-schema` subcommand.
```bash
bin/pulsar-admin namespaces set-is-allow-auto-update-schema --disable tenant/namespace
@@ -407,7 +407,7 @@ admin.namespaces().setIsAllowAutoUpdateSchema("my-namspace", false);
### Enable schema validation enforcement
-To enforce schema validation enforcement at the **cluster** level, you can configure `isSchemaValidationEnforced` to `true` in the `conf/broker.conf` file.
+To enforce schema validation enforcement at the **cluster** level, you can configure `isSchemaValidationEnforced` to `true` in the `conf/broker.conf` file.
To enable schema validation enforcement at the **namespace** level, you can use one of the following commands.
@@ -418,7 +418,7 @@ To enable schema validation enforcement at the **namespace** level, you can use
<TabItem value="Admin CLI">
-Use the `set-schema-validation-enforce` subcommand.
+Use the `set-schema-validation-enforce` subcommand.
```bash
bin/pulsar-admin namespaces set-schema-validation-enforce --enable tenant/namespace
@@ -461,7 +461,7 @@ To disable schema validation enforcement at the **namespace** level, you can use
<TabItem value="Admin CLI">
-Use the `set-schema-validation-enforce` subcommand.
+Use the `set-schema-validation-enforce` subcommand.
```bash
bin/pulsar-admin namespaces set-schema-validation-enforce --disable tenant/namespace
@@ -493,11 +493,11 @@ admin.namespaces().setSchemaValidationEnforced("my-namspace", false);
</Tabs>
````
-## Manage schema compatibility strategy
+## Manage schema compatibility strategy
The [schema compatibility check strategy](schema-understand.md#schema-compatibility-check-strategy) configured at different levels has priority: topic level > namespace level > cluster level. In other words:
- * If you set the strategy at both topic and namespace levels, the topic-level strategy is used.
- * If you set the strategy at both namespace and cluster levels, the namespace-level strategy is used.
+ * If you set the strategy at both topic and namespace levels, the topic-level strategy is used.
+ * If you set the strategy at both namespace and cluster levels, the namespace-level strategy is used.
### Set schema compatibility strategy
@@ -512,7 +512,7 @@ To set a schema compatibility check strategy at the topic level, you can use one
<TabItem value="Admin CLI">
-Use the [`pulsar-admin topicPolicies set-schema-compatibility-strategy`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/topicPolicies?id=set-schema-compatibility-strategy) command.
+Use the [`pulsar-admin topicPolicies set-schema-compatibility-strategy`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/topicPolicies?id=set-schema-compatibility-strategy) command.
```shell
pulsar-admin topicPolicies set-schema-compatibility-strategy <strategy> <topicName>
@@ -553,7 +553,7 @@ To set schema compatibility check strategy at the namespace level, you can use o
<TabItem value="Admin CLI">
-Use the [`pulsar-admin namespaces set-schema-compatibility-strategy`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/namespaces?id=set-schema-compatibility-strategy) command.
+Use the [`pulsar-admin namespaces set-schema-compatibility-strategy`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/namespaces?id=set-schema-compatibility-strategy) command.
```shell
pulsar-admin namespaces set-schema-compatibility-strategy options
@@ -600,7 +600,7 @@ To get the topic-level schema compatibility check strategy, you can use one of t
<TabItem value="Admin CLI">
-Use the [`pulsar-admin topicPolicies get-schema-compatibility-strategy`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/topicPolicies?id=get-schema-compatibility-strategy) command.
+Use the [`pulsar-admin topicPolicies get-schema-compatibility-strategy`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/topicPolicies?id=get-schema-compatibility-strategy) command.
```shell
pulsar-admin topicPolicies get-schema-compatibility-strategy <topicName>
@@ -645,7 +645,7 @@ You can get schema compatibility check strategy at namespace level using one of
<TabItem value="Admin CLI">
-Use the [`pulsar-admin namespaces get-schema-compatibility-strategy`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/namespaces?id=get-schema-compatibility-strategy) command.
+Use the [`pulsar-admin namespaces get-schema-compatibility-strategy`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/namespaces?id=get-schema-compatibility-strategy) command.
```shell
pulsar-admin namespaces get-schema-compatibility-strategy options
diff --git a/docs/admin-api-tenants.md b/docs/admin-api-tenants.md
index 30e57c5b04d..2d81eb3d96f 100644
--- a/docs/admin-api-tenants.md
+++ b/docs/admin-api-tenants.md
@@ -15,11 +15,11 @@ import TabItem from '@theme/TabItem';
This page only shows **some frequently used operations**.
- For the latest and complete information about `Pulsar admin`, including commands, flags, descriptions, and more, see [Pulsar admin docs](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/).
-
+
- For the latest and complete information about `REST API`, including parameters, responses, samples, and more, see {@inject: rest:REST:/} API doc.
-
+
- For the latest and complete information about `Java admin API`, including classes, methods, descriptions, and more, see [Java admin API doc](/api/admin/).
-
+
:::
Tenants, like namespaces, can be managed using the [admin API](admin-api-overview.md). There are currently two configurable aspects of tenants:
diff --git a/docs/admin-api-topics.md b/docs/admin-api-topics.md
index f0ab264db15..12eb0eb9968 100644
--- a/docs/admin-api-topics.md
+++ b/docs/admin-api-topics.md
@@ -39,7 +39,7 @@ Whether it is a persistent or non-persistent topic, you can obtain the topic res
:::note
-In REST API, `:schema` stands for persistent or non-persistent. `:tenant`, `:namespace`, `:x` are variables, replace them with the real tenant, namespace, and `x` names when using them.
+In REST API, `:schema` stands for persistent or non-persistent. `:tenant`, `:namespace`, `:x` are variables, replace them with the real tenant, namespace, and `x` names when using them.
Take {@inject: endpoint|GET|/admin/v2/:schema/:tenant/:namespace|operation/getList?version=@pulsar:version_number@} as an example, to get the list of persistent topics in REST API, use `https://pulsar.apache.org/admin/v2/persistent/my-tenant/my-namespace`. To get the list of non-persistent topics in REST API, use `https://pulsar.apache.org/admin/v2/non-persistent/my-tenant/my-namespace`.
:::
@@ -124,7 +124,7 @@ You can fetch permission in the following ways.
<TabItem value="pulsar-admin">
```shell
-pulsar-admin topics permissions persistent://test-tenant/ns1/tp1
+pulsar-admin topics permissions persistent://test-tenant/ns1/tp1
```
Example output:
@@ -164,7 +164,7 @@ You can revoke permissions granted on a client role in the following ways.
```shell
pulsar-admin topics revoke-permission \
--role application1 \
- persistent://test-tenant/ns1/tp1
+ persistent://test-tenant/ns1/tp1
```
</TabItem>
@@ -1639,7 +1639,7 @@ Field | Description
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
-You can check the number of partitions in a partitioned topic with the [`get-partitioned-topic-metadata`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/topics?id=get-partitioned-topic-metadata) subcommand.
+You can check the number of partitions in a partitioned topic with the [`get-partitioned-topic-metadata`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/topics?id=get-partitioned-topic-metadata) subcommand.
```shell
pulsar-admin topics get-partitioned-topic-metadata \
diff --git a/docs/admin-api-transactions.md b/docs/admin-api-transactions.md
index 0c13a7ec8a5..b63893bd363 100644
--- a/docs/admin-api-transactions.md
+++ b/docs/admin-api-transactions.md
@@ -387,7 +387,7 @@ The following is an example of the returned values.
The coordinator's internal stats that can be retrieved include:
* **transactionLogStats:** The stats of the transaction coordinator log.
-* **managedLedgerName:** The name of the managed ledger where the transaction coordinator log is stored.
+* **managedLedgerName:** The name of the managed ledger where the transaction coordinator log is stored.
* **managedLedgerInternalStats:** The internal stats of the managed ledger where the transaction coordinator log is stored. See `[managedLedgerInternalStats](admin-api-topics.md#get-internal-stats)` for more details.
Use one of the following ways to get coordinator's internal stats:
@@ -527,7 +527,7 @@ The following is an example of the returned values.
The transaction pending ack internal stats that can be retrieved include:
* **transactionLogStats:** The stats of the transaction pending ack log.
-* **managedLedgerName:** The name of the managed ledger where the transaction pending ack log is stored.
+* **managedLedgerName:** The name of the managed ledger where the transaction pending ack log is stored.
* **managedLedgerInternalStats:** The internal stats of the managed ledger where the transaction coordinator log is stored. See `[managedLedgerInternalStats](admin-api-topics.md#get-internal-stats)` for more details.
Use one of the following ways to get transaction pending ack internal stats:
@@ -664,8 +664,8 @@ The following is an example of the returned values.
## Transaction buffer stats
-Transaction buffer handles messages produced to a topic partition within a transaction.
-The messages in the transaction buffer are not visible to consumers until the transactions are committed. The messages in the transaction buffer are discarded when the transactions are aborted.
+Transaction buffer handles messages produced to a topic partition within a transaction.
+The messages in the transaction buffer are not visible to consumers until the transactions are committed. The messages in the transaction buffer are discarded when the transactions are aborted.
### Get transaction buffer stats
diff --git a/docs/administration-isolation-bookie.md b/docs/administration-isolation-bookie.md
index 8b97bffe4be..768aaa46ebd 100644
--- a/docs/administration-isolation-bookie.md
+++ b/docs/administration-isolation-bookie.md
@@ -70,7 +70,7 @@ For example, you have the same BookKeeper cluster with the same topic requiremen

-* If you have configured `EnforceMinNumRacksPerWriteQuorum=false`, the BookKeeper client tries its best effort to apply the placement policy depending on the available number of racks and bookies. It may still work as the above diagram or the following diagram.
+* If you have configured `EnforceMinNumRacksPerWriteQuorum=false`, the BookKeeper client tries its best effort to apply the placement policy depending on the available number of racks and bookies. It may still work as the above diagram or the following diagram.

diff --git a/docs/administration-isolation-broker.md b/docs/administration-isolation-broker.md
index b56b50c754e..eb79c009089 100644
--- a/docs/administration-isolation-broker.md
+++ b/docs/administration-isolation-broker.md
@@ -12,10 +12,10 @@ import TabItem from '@theme/TabItem';
In Pulsar, when namespaces (more specifically, namespace bundles) are assigned dynamically to brokers, the namespace isolation policy limits the set of brokers that can be used for assignment. Before topics are assigned to brokers, you can set the namespace isolation policy with a primary or a secondary regex to select desired brokers.
-To set a namespace isolation policy for a broker cluster, you can use one of the following methods.
+To set a namespace isolation policy for a broker cluster, you can use one of the following methods.
````mdx-code-block
-<Tabs
+<Tabs
defaultValue="Pulsar-admin CLI"
values={[{"label":"Pulsar-admin CLI","value":"Pulsar-admin CLI"},{"label":"REST API","value":"REST API"},{"label":"Java admin API","value":"Java admin API"}]}>
diff --git a/docs/administration-isolation.md b/docs/administration-isolation.md
index 4e78fe8095c..f2f179e1eb4 100644
--- a/docs/administration-isolation.md
+++ b/docs/administration-isolation.md
@@ -12,7 +12,7 @@ The multi-layer and segment-centric architecture and hierarchical resource manag
## Isolation levels
-Pulsar supports isolation at either of the following two levels or both.
+Pulsar supports isolation at either of the following two levels or both.
* [Broker-level isolation](administration-isolation-broker.md) divides brokers into different groups and assigns broker groups to different namespaces. In this way, you can bind topics in a namespace to a set of brokers that belong to specific groups.
* [Bookie-level isolation](administration-isolation-bookie.md) divides bookies into different racks/regions and assigns data replicas to bookies based on a specified data placement policy for disaster tolerance.
@@ -37,11 +37,11 @@ Here are some key points for understanding how it works:
- Separate Pulsar clusters use a shared [configuration store](concepts-architecture-overview.md#configuration-store).
- Each cluster exposes its service through a DNS entry point and makes sure a client can access the cluster through the DNS entry point. Clients can use one or multiple Pulsar URLs that the Pulsar cluster exposes as the service URL.
- Each Pulsar cluster has one or multiple brokers and bookies.
-- Each Pulsar cluster has one metadata store, which can be separated into [Pulsar metadata store](concepts-architecture-overview.md#metadata-store) and [BookKeeper metadata store](https://bookkeeper.apache.org/docs/latest/getting-started/concepts/#metadata-storage).
+- Each Pulsar cluster has one metadata store, which can be separated into [Pulsar metadata store](concepts-architecture-overview.md#metadata-store) and [BookKeeper metadata store](https://bookkeeper.apache.org/docs/latest/getting-started/concepts/#metadata-storage).
:::note
-When using this approach, if you want to achieve namespace isolation, you need to specify a cluster for a namespace. The cluster must be in the allowed cluster list of the tenant. Topics under the namespace are assigned to this cluster.
+When using this approach, if you want to achieve namespace isolation, you need to specify a cluster for a namespace. The cluster must be in the allowed cluster list of the tenant. Topics under the namespace are assigned to this cluster.
:::
@@ -55,7 +55,7 @@ Here are some key points for understanding how it works:
- Separate Pulsar clusters share a BookKeeper cluster and a [configuration store](concepts-architecture-overview.md#configuration-store).
- Each cluster exposes its service through a DNS entry point and makes sure a client can access the cluster through the DNS entry point. Clients can use one or multiple Pulsar URLs that the Pulsar cluster exposes as the service URL.
- Each Pulsar cluster has one or multiple brokers.
-- Each Pulsar cluster has one metadata store.
+- Each Pulsar cluster has one metadata store.
As illustrated below, all bookie groups use a shared BookKeeper cluster and a metadata store, and each [bookie affinity group](administration-isolation-bookie.md#configure-bookie-affinity-groups) has one or several bookies. You can specify one or multiple primary/secondary groups for a namespace. Topics under the namespace are created on the bookies in the primary group first and then created on the bookies in the secondary group.
diff --git a/docs/administration-load-balance.md b/docs/administration-load-balance.md
index c70e63e38b4..931b16a943b 100644
--- a/docs/administration-load-balance.md
+++ b/docs/administration-load-balance.md
@@ -13,7 +13,7 @@ The following sections introduce how load-balanced assignments work across Pulsa
## Dynamic assignments
-Topics are dynamically assigned to brokers based on the load conditions of all brokers in the cluster. The assignment of topics to brokers is not done at the topic level but the **bundle** level (a higher level). Instead of individual topic assignments, each broker takes ownership of a subset of the topics for a namespace. This subset is called a bundle and effectively this subset is a sharding mechanism.
+Topics are dynamically assigned to brokers based on the load conditions of all brokers in the cluster. The assignment of topics to brokers is not done at the topic level but the **bundle** level (a higher level). Instead of individual topic assignments, each broker takes ownership of a subset of the topics for a namespace. This subset is called a bundle and effectively this subset is a sharding mechanism.
In other words, each namespace is an "administrative" unit and sharded into a list of bundles, with each bundle comprising a portion of the overall hash range of the namespace. Topics are assigned to a particular bundle by taking the hash of the topic name and checking in which bundle the hash falls. Each bundle is independent of the others and thus is independently assigned to different brokers.
@@ -133,7 +133,7 @@ Pulsar supports the following types of automatic load shedding strategies.
### ThresholdShedder
-This strategy tends to shed the bundles if any broker's usage is above the configured threshold. It does this by first computing the average resource usage per broker for the whole cluster. The resource usage for each broker is calculated using the following method `LocalBrokerData#getMaxResourceUsageWithWeight`. Historical observations are included in the running average based on the broker's setting for `loadBalancerHistoryResourcePercentage`. Once the average resource usage is calcula [...]
+This strategy tends to shed the bundles if any broker's usage is above the configured threshold. It does this by first computing the average resource usage per broker for the whole cluster. The resource usage for each broker is calculated using the following method `LocalBrokerData#getMaxResourceUsageWithWeight`. Historical observations are included in the running average based on the broker's setting for `loadBalancerHistoryResourcePercentage`. Once the average resource usage is calcula [...]

diff --git a/docs/administration-proxy.md b/docs/administration-proxy.md
index 5a4eae023ba..bb29de1df63 100644
--- a/docs/administration-proxy.md
+++ b/docs/administration-proxy.md
@@ -64,7 +64,7 @@ Unless the Pulsar Proxy is explicitly configured to limit access, the Pulsar Pro
It is necessary to limit proxied broker connections to known broker addresses by specifying `brokerProxyAllowedHostNames` and `brokerProxyAllowedIPAddresses` settings.
-When specifying `brokerProxyAllowedHostNames`, it's possible to use a wildcard.
+When specifying `brokerProxyAllowedHostNames`, it's possible to use a wildcard.
Please notice that `*` is a wildcard that matches any character in the hostname. It also matches dot `.` characters.
It is recommended to use a pattern that matches only the desired brokers and no other hosts in the local network. Pulsar lookups will use the default host name of the broker by default. This can be overridden with the `advertisedAddress` setting in `broker.conf`.
@@ -74,7 +74,7 @@ To increase security, it is also possible to restrict access with the `brokerPro
Example: limiting by host name in a Kubernetes deployment
```yaml
- # example of limiting to Kubernetes statefulset hostnames that contain "broker-"
+ # example of limiting to Kubernetes statefulset hostnames that contain "broker-"
PULSAR_PREFIX_brokerProxyAllowedHostNames: '*broker-*.*.*.svc.cluster.local'
```
diff --git a/docs/administration-pulsar-shell.md b/docs/administration-pulsar-shell.md
index 54ff51dce65..82e8d7def19 100644
--- a/docs/administration-pulsar-shell.md
+++ b/docs/administration-pulsar-shell.md
@@ -39,7 +39,7 @@ Welcome to Pulsar shell!
Type help to get started or try the autocompletion (TAB button).
Type exit or quit to end the shell session.
-default(localhost)>
+default(localhost)>
```
@@ -104,10 +104,10 @@ Welcome to Pulsar shell!
Type help to get started or try the autocompletion (TAB button).
Type exit or quit to end the shell session.
-my-cluster(mycluster)>
+my-cluster(mycluster)>
```
-
+
## Run commands sequentially
To run a bunch of admin commands sequentially, you can use Pulsar shell's non-interactive mode.
For example, to set up a new tenant with policies, you would normally need to run multiple `pulsar-admin` commands.
@@ -121,12 +121,12 @@ There are multiple ways to do this with Pulsar shell non-interactive mode:
values={[{"label":"Single command","value":"single-command"},{"label":"File","value":"file"},{"label":"Unix pipe","value":"pipe"}]}>
<TabItem value="single-command">
-Specify a multi-line command with the `-e` option.
+Specify a multi-line command with the `-e` option.
```shell
./bin/pulsar-shell -e "
config use my-cluster
-admin tenants create new-tenant
+admin tenants create new-tenant
admin namespaces create new-tenant/new-namespace
" --fail-on-error
```
@@ -143,7 +143,7 @@ echo "
config use my-cluster
# Now it creates a new tenant
admin tenants create new-tenant
-# And then it creates a new namespace inside the tenant
+# And then it creates a new namespace inside the tenant
admin namespaces create new-tenant/new-namespace
" > setup-shell.txt
@@ -162,7 +162,7 @@ echo "
config use my-cluster
# Now it creates a new tenant
admin tenants create new-tenant
-# And then it creates a new namespace inside the tenant
+# And then it creates a new namespace inside the tenant
admin namespaces create new-tenant/new-namespace
" > ./bin/pulsar-shell --fail-on-error -
diff --git a/docs/administration-upgrade.md b/docs/administration-upgrade.md
index 5ad06f04124..17e98efc5ae 100644
--- a/docs/administration-upgrade.md
+++ b/docs/administration-upgrade.md
@@ -16,8 +16,8 @@ Apache Pulsar is comprised of multiple components, ZooKeeper, bookies, and broke
Read the following guidelines before upgrading a Pulsar cluster.
- Back up all your configuration files before upgrading.
-- Read the guide entirely, make a plan, and then execute the plan. When you make an upgrade plan, you need to take your specific requirements and environment into consideration.
-- Pay attention to the [upgrade sequence of components](#upgrade-sequence). In general, you do not need to upgrade your ZooKeeper or configuration store cluster (the global ZooKeeper cluster). You need to upgrade bookies first, and then upgrade brokers, proxies, and your clients.
+- Read the guide entirely, make a plan, and then execute the plan. When you make an upgrade plan, you need to take your specific requirements and environment into consideration.
+- Pay attention to the [upgrade sequence of components](#upgrade-sequence). In general, you do not need to upgrade your ZooKeeper or configuration store cluster (the global ZooKeeper cluster). You need to upgrade bookies first, and then upgrade brokers, proxies, and your clients.
- If `autorecovery` is enabled, you need to disable `autorecovery` in the upgrade process, and re-enable it after completing the process.
- Read the release notes carefully for each release. Release notes contain features and configuration changes that might impact your upgrade.
- Upgrade a small subset of nodes of each type to canary test the new version before upgrading all nodes of that type in the cluster. When you have upgraded the canary nodes, run for a while to ensure that they work correctly.
@@ -25,7 +25,7 @@ Read the following guidelines before upgrading a Pulsar cluster.
:::note
-Currently, Apache Pulsar is compatible between versions.
+Currently, Apache Pulsar is compatible between versions.
:::
@@ -33,19 +33,19 @@ Currently, Apache Pulsar is compatible between versions.
To upgrade an Apache Pulsar cluster, follow the upgrade sequence.
-1. Upgrade ZooKeeper (optional).
- - Canary test: test an upgraded version in one or a small set of ZooKeeper nodes.
+1. Upgrade ZooKeeper (optional).
+ - Canary test: test an upgraded version in one or a small set of ZooKeeper nodes.
- Rolling upgrade: roll out the upgraded version to all ZooKeeper servers incrementally, one at a time. Monitor your dashboard during the whole rolling upgrade process.
2. Upgrade bookies.
- Canary test: test an upgraded version in one or a small set of bookies.
- - Rolling upgrade:
+ - Rolling upgrade:
- a. Disable `autorecovery` with the following command.
```shell
bin/bookkeeper shell autorecovery -disable
```
- - b. Roll out the upgraded version to all bookies in the cluster after you determine that a version is safe after canary.
+ - b. Roll out the upgraded version to all bookies in the cluster after you determine that a version is safe after canary.
- c. After you upgrade all bookies, re-enable `autorecovery` with the following command.
```shell
@@ -82,7 +82,7 @@ If issues occur during the canary test, you can shut down the problematic ZooKee
### Upgrade all ZooKeeper servers
-After the canary test to upgrade one ZooKeeper in your cluster, you can upgrade all ZooKeeper servers in your cluster.
+After the canary test to upgrade one ZooKeeper in your cluster, you can upgrade all ZooKeeper servers in your cluster.
You can upgrade all ZooKeeper servers one by one by following the steps in the canary test.
@@ -115,13 +115,13 @@ To upgrade a bookie to a new version, complete the following steps:
:::tip
-If issues occur during the canary test, you can shut down the problematic bookie node. Other bookies in the cluster replace this problematic bookie node with auto-recovery.
+If issues occur during the canary test, you can shut down the problematic bookie node. Other bookies in the cluster replace this problematic bookie node with auto-recovery.
:::
### Upgrade all bookies
-After the canary test to upgrade some bookies in your cluster, you can upgrade all bookies in your cluster.
+After the canary test to upgrade some bookies in your cluster, you can upgrade all bookies in your cluster.
Before upgrading, you have to decide whether to upgrade the whole cluster at once, including downtime and rolling upgrade scenarios.
@@ -129,7 +129,7 @@ In a rolling upgrade scenario, upgrade one bookie at a time. In a downtime upgra
While you upgrade in both scenarios, the procedure is the same for each bookie.
-1. Stop the bookie.
+1. Stop the bookie.
2. Upgrade the software (either new binary or new configuration files).
2. Start the bookie.
@@ -161,7 +161,7 @@ If issues occur during the canary test, you can shut down the problematic broker
### Upgrade all brokers or proxies
-After the canary test to upgrade some brokers or proxies in your cluster, you can upgrade all brokers or proxies in your cluster.
+After the canary test to upgrade some brokers or proxies in your cluster, you can upgrade all brokers or proxies in your cluster.
Before upgrading, you have to decide whether to upgrade the whole cluster at once, including downtime and rolling upgrade scenarios.
@@ -171,7 +171,7 @@ In a downtime upgrade scenario, shut down the entire cluster, upgrade each broke
While you upgrade in both scenarios, the procedure is the same for each broker or proxy.
-1. Stop the broker (or proxy).
+1. Stop the broker (or proxy).
2. Upgrade the software (either new binary or new configuration files).
3. Start the broker (or proxy).
diff --git a/docs/administration-zk-bk.md b/docs/administration-zk-bk.md
index 27068006b76..0fdcf19874a 100644
--- a/docs/administration-zk-bk.md
+++ b/docs/administration-zk-bk.md
@@ -22,7 +22,7 @@ Each Pulsar cluster consists of one or more message brokers. Each broker relies
Each Pulsar instance relies on two separate ZooKeeper quorums.
* [Local ZooKeeper](#deploy-local-zookeeper) operates at the cluster level and provides cluster-specific configuration management and coordination. Each Pulsar cluster needs to have a dedicated ZooKeeper cluster.
-* [Configuration Store](#deploy-configuration-store) operates at the instance level and provides configuration management for the entire system (and thus across clusters). An independent cluster of machines or the same machines that local ZooKeeper uses can provide the configuration store quorum.
+* [Configuration Store](#deploy-configuration-store) operates at the instance level and provides configuration management for the entire system (and thus across clusters). An independent cluster of machines or the same machines that local ZooKeeper uses can provide the configuration store quorum.
### Deploy local ZooKeeper
@@ -245,7 +245,7 @@ And then you can decommission bookies safely. To decommission bookies, complete
or
`bin/bookkeeper shell decommissionbookie -bookieid <target bookieid>`
-4. Validate that no ledgers are on the decommissioned bookie.
+4. Validate that no ledgers are on the decommissioned bookie.
`bin/bookkeeper shell listledgers -bookieid <target bookieid>`
You can run the following command to check if the bookie you have decommissioned is listed:
@@ -313,7 +313,7 @@ pulsar-admin namespaces set-persistence my-tenant/my-ns -e 3 -w 3 -a 3
```java
// The following must be true: bkEnsemble >= bkWriteQuorum >= bkAckQuorum
-// Please notice that sticky reads cannot be used unless bkEnsemble == bkWriteQuorum.
+// Please notice that sticky reads cannot be used unless bkEnsemble == bkWriteQuorum.
int bkEnsemble = 3;
int bkWriteQuorum = 3;
int bkAckQuorum = 3;
diff --git a/docs/client-api-overview.md b/docs/client-api-overview.md
index b7f31116564..3ddac30f85b 100644
--- a/docs/client-api-overview.md
+++ b/docs/client-api-overview.md
@@ -9,7 +9,7 @@ import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
````
-Pulsar client APIs allow you to create and configure producers, consumers, and readers; produce and consume messages; perform authentication and authorization tasks, and so on via programmable interfaces. They encapsulate and optimize Pulsar's client-broker communication protocols and add additional features using Pulsar primitives. Pulsar exposes client APIs with language bindings for [Java](client-libraries-java.md), [C++](client-libraries-cpp.md), [Python](client-libraries-python.md), [...]
+Pulsar client APIs allow you to create and configure producers, consumers, and readers; produce and consume messages; perform authentication and authorization tasks, and so on via programmable interfaces. They encapsulate and optimize Pulsar's client-broker communication protocols and add additional features using Pulsar primitives. Pulsar exposes client APIs with language bindings for [Java](client-libraries-java.md), [C++](client-libraries-cpp.md), [Python](client-libraries-python.md), [...]

diff --git a/docs/client-libraries-cluster-level-failover.md b/docs/client-libraries-cluster-level-failover.md
index ef560974913..e9be45ecd34 100644
--- a/docs/client-libraries-cluster-level-failover.md
+++ b/docs/client-libraries-cluster-level-failover.md
@@ -9,7 +9,7 @@ import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
````
-For more information about cluster-level failover, including concepts, benefits, use cases, constraints, usage and working principles, see [Cluster-level failover concepts](concepts-cluster-level-failover.md).
+For more information about cluster-level failover, including concepts, benefits, use cases, constraints, usage and working principles, see [Cluster-level failover concepts](concepts-cluster-level-failover.md).
:::tip
@@ -43,7 +43,7 @@ private PulsarClient getAutoFailoverClient() throws PulsarClientException {
"org.apache.pulsar.client.impl.auth.AuthenticationTls",
"tlsCertFile:/path/to/secondary-my-role.cert.pem,"
+ "tlsKeyFile:/path/to/secondary-role.key-pk8.pem");
-
+
// You can put more failover cluster config in to map
Map<String, String> secondaryTlsTrustCertsFilePaths = new HashMap<>();
secondaryTlsTrustCertsFilePaths.put(secondaryUrl, secondaryTlsTrustCertsFilePath);
@@ -73,7 +73,7 @@ Parameter|Default value|Required?|Description
|---|---|---|---
`primary`|N/A|Yes|Service URL of the primary cluster.
`secondary`|N/A|Yes|Service URL(s) of one or several backup clusters.<br /><br />You can specify several backup clusters using a comma-separated list.<br /><br /> Note that:<br />- The backup cluster is chosen in the sequence shown in the list. <br />- If all backup clusters are available, the Pulsar client chooses the first backup cluster.
-`failoverDelay`|N/A|Yes|The delay before the Pulsar client switches from the primary cluster to the backup cluster.<br /><br />Automatic failover is controlled by a probe task: <br />1) The probe task first checks the health status of the primary cluster. <br /> 2) If the probe task finds the continuous failure time of the primary cluster exceeds `failoverDelayMs`, it switches the Pulsar client to the backup cluster.
+`failoverDelay`|N/A|Yes|The delay before the Pulsar client switches from the primary cluster to the backup cluster.<br /><br />Automatic failover is controlled by a probe task: <br />1) The probe task first checks the health status of the primary cluster. <br /> 2) If the probe task finds the continuous failure time of the primary cluster exceeds `failoverDelayMs`, it switches the Pulsar client to the backup cluster.
`switchBackDelay`|N/A|Yes|The delay before the Pulsar client switches from the backup cluster to the primary cluster.<br /><br />Automatic failover switchover is controlled by a probe task: <br /> 1) After the Pulsar client switches from the primary cluster to the backup cluster, the probe task continues to check the status of the primary cluster. <br /> 2) If the primary cluster functions well and continuously remains active longer than `switchBackDelay`, the Pulsar client switches back [...]
`checkInterval`|30s|No|Frequency of performing a probe task (in seconds).
`secondaryTlsTrustCertsFilePath`|N/A|No|Path to the trusted TLS certificate file of the backup cluster.
@@ -128,21 +128,21 @@ Assume that you want to connect Pulsar client 1 to cluster A.
1. Pulsar client 1 sends the token *t1* to the URL provider service.
2. The URL provider service returns the credential *c1* and the cluster A URL to the Pulsar client.
-
+
The URL provider service manages all tokens and credentials. It returns different credentials based on different tokens and different target cluster URLs to different Pulsar clients.
:::note
-
+
The credential must be in a JSON file and contain parameters as shown.
:::
```java
{
- "serviceUrl": "pulsar+ssl://target:6651",
+ "serviceUrl": "pulsar+ssl://target:6651",
"tlsTrustCertsFilePath": "/security/ca.cert.pem",
"authPluginClassName":"org.apache.pulsar.client.impl.auth.AuthenticationTls",
- "authParamsString": " \"tlsCertFile\": \"/security/client.cert.pem\"
+ "authParamsString": " \"tlsCertFile\": \"/security/client.cert.pem\"
\"tlsKeyFile\": \"/security/client-pk8.pem\" "
}
```
diff --git a/docs/client-libraries-consumers.md b/docs/client-libraries-consumers.md
index 880e174d896..1c67eed20b1 100644
--- a/docs/client-libraries-consumers.md
+++ b/docs/client-libraries-consumers.md
@@ -75,7 +75,7 @@ Only the first consumer is allowed to the subscription, and other consumers rece
:::note
-If the topic is partitioned, the first consumer subscribes to all partitioned topics, and other consumers are not assigned with partitions and receive an error.
+If the topic is partitioned, the first consumer subscribes to all partitioned topics, and other consumers are not assigned with partitions and receive an error.
:::
@@ -108,7 +108,7 @@ Consumer consumer2 = client.newConsumer()
</Tabs>
````
-Multiple consumers can attach to the same subscription, yet only the first consumer is active, and others are standby. When the active consumer is disconnected, messages will be dispatched to one of standby consumers, and the standby consumer then becomes the active consumer.
+Multiple consumers can attach to the same subscription, yet only the first consumer is active, and others are standby. When the active consumer is disconnected, messages will be dispatched to one of standby consumers, and the standby consumer then becomes the active consumer.
If the first active consumer is disconnected after receiving 5 messages, the standby consumer becomes active consumer. Consumer1 will receive:
@@ -132,7 +132,7 @@ consumer2 will receive:
:::note
-If a topic is a partitioned topic, each partition has only one active consumer, messages of one partition are distributed to only one consumer, and messages of multiple partitions are distributed to multiple consumers.
+If a topic is a partitioned topic, each partition has only one active consumer, messages of one partition are distributed to only one consumer, and messages of multiple partitions are distributed to multiple consumers.
:::
@@ -152,7 +152,7 @@ Consumer consumer1 = client.newConsumer()
.subscriptionName("my-subscription")
.subscriptionType(SubscriptionType.Shared)
.subscribe()
-
+
Consumer consumer2 = client.newConsumer()
.topic("my-topic")
.subscriptionName("my-subscription")
@@ -205,7 +205,7 @@ Consumer consumer1 = client.newConsumer()
.subscriptionName("my-subscription")
.subscriptionType(SubscriptionType.Key_Shared)
.subscribe()
-
+
Consumer consumer2 = client.newConsumer()
.topic("my-topic")
.subscriptionName("my-subscription")
@@ -551,7 +551,7 @@ The following is an example.
```java
CompletableFuture<Message> asyncMessage = consumer.receiveAsync();
```
-
+
Async receive operations return a {@inject: javadoc:Message:/client/org/apache/pulsar/client/api/Message} wrapped inside of a [`CompletableFuture`](http://www.baeldung.com/java-completablefuture).
</TabItem>
@@ -560,7 +560,7 @@ The following is an example.
## Batch receive messages
-Use `batchReceive` to receive multiple messages for each call.
+Use `batchReceive` to receive multiple messages for each call.
The following is an example.
@@ -664,7 +664,7 @@ Messages can be acknowledged individually or cumulatively. For details about mes
## Negative acknowledgment redelivery backoff
-The `RedeliveryBackoff` introduces a redelivery backoff mechanism. You can achieve redelivery with different delays by setting the redelivery count of messages.
+The `RedeliveryBackoff` introduces a redelivery backoff mechanism. You can achieve redelivery with different delays by setting the redelivery count of messages.
````mdx-code-block
<Tabs groupId="lang-choice"
@@ -755,7 +755,7 @@ The following is an example of how to configure message chunking.
.expireTimeOfIncompleteChunkedMessage(10, TimeUnit.MINUTES)
.subscribe();
```
-
+
</TabItem>
<TabItem value="C++">
diff --git a/docs/client-libraries-dotnet-setup.md b/docs/client-libraries-dotnet-setup.md
index 4c7df712dd4..be2b4136147 100644
--- a/docs/client-libraries-dotnet-setup.md
+++ b/docs/client-libraries-dotnet-setup.md
@@ -6,13 +6,13 @@ sidebar_label: "Set up"
## Install C# client library
-This section describes how to install the Pulsar C# client library through the dotnet CLI.
+This section describes how to install the Pulsar C# client library through the dotnet CLI.
Alternatively, you can install the Pulsar C# client library through Visual Studio. Note that starting from Visual Studio 2017, the dotnet CLI is automatically installed with any .NET Core related workloads. For more information, see [Microsoft documentation](https://docs.microsoft.com/en-us/visualstudio/mac/nuget-walkthrough?view=vsmac-2019).
To install the Pulsar C# client library using the dotnet CLI, follow these steps:
-1. Install the [.NET Core SDK](https://dotnet.microsoft.com/download/), which provides the dotnet CLI.
+1. Install the [.NET Core SDK](https://dotnet.microsoft.com/download/), which provides the dotnet CLI.
2. Create a project.
diff --git a/docs/client-libraries-go-initialize.md b/docs/client-libraries-go-initialize.md
index ec45d01903f..3011c08e6bd 100644
--- a/docs/client-libraries-go-initialize.md
+++ b/docs/client-libraries-go-initialize.md
@@ -4,9 +4,9 @@ title: Initialize Pulsar Go client
sidebar_label: "Initialize"
---
-To interact with Pulsar, you need a [`Client`](https://pkg.go.dev/github.com/apache/pulsar-client-go/pulsar#Client) object first.
+To interact with Pulsar, you need a [`Client`](https://pkg.go.dev/github.com/apache/pulsar-client-go/pulsar#Client) object first.
-You can create a client object using the [`NewClient`](https://pkg.go.dev/github.com/apache/pulsar-client-go/pulsar#NewClient) function, passing in a [`ClientOptions`](https://pkg.go.dev/github.com/apache/pulsar-client-go/pulsar#ClientOptions) object.
+You can create a client object using the [`NewClient`](https://pkg.go.dev/github.com/apache/pulsar-client-go/pulsar#NewClient) function, passing in a [`ClientOptions`](https://pkg.go.dev/github.com/apache/pulsar-client-go/pulsar#ClientOptions) object.
Here's an example:
diff --git a/docs/client-libraries-go-setup.md b/docs/client-libraries-go-setup.md
index bad1aa8f603..f496e605088 100644
--- a/docs/client-libraries-go-setup.md
+++ b/docs/client-libraries-go-setup.md
@@ -33,7 +33,7 @@ You can install the `pulsar` library by using either `go get` or `go module`.
2. Write a sample script (such as `test_example.go`) in the `test_dir` directory and write `package main` at the beginning of the file.
```bash
- go mod init test_dir
+ go mod init test_dir
go mod tidy && go mod download
go build test_example.go
./test_example
diff --git a/docs/client-libraries-go-use.md b/docs/client-libraries-go-use.md
index 4764ab17d9e..d7f81eaed20 100644
--- a/docs/client-libraries-go-use.md
+++ b/docs/client-libraries-go-use.md
@@ -107,7 +107,7 @@ scrape_configs:
## Create a consumer
-Pulsar consumers subscribe to one or more Pulsar topics and listen for incoming messages produced on that topic/those topics. You can configure Go consumers using a `ConsumerOptions` object.
+Pulsar consumers subscribe to one or more Pulsar topics and listen for incoming messages produced on that topic/those topics. You can configure Go consumers using a `ConsumerOptions` object.
Here's a basic example that uses channels:
diff --git a/docs/client-libraries-java-configs.md b/docs/client-libraries-java-configs.md
index a74c7258cd8..379f4b4c4c8 100644
--- a/docs/client-libraries-java-configs.md
+++ b/docs/client-libraries-java-configs.md
@@ -15,8 +15,8 @@ If you create a Java client, you can use the `loadConf` configuration. The follo
`authParams` | String | Parameters for the authentication plugin <br /><br />**Example**<br /> key1:val1,key2:val2|None
`operationTimeoutMs`|long|`operationTimeoutMs`|Operation timeout |30000
`statsIntervalSeconds`|long|Interval between each stats information<br /><br />Stats is activated with positive `statsInterval`<br /><br />Set `statsIntervalSeconds` to 1 second at least. |60
-`numIoThreads`| int| The number of threads used for handling connections to brokers | 1
-`numListenerThreads`|int|The number of threads used for handling message listeners. The listener thread pool is shared across all the consumers and readers using the "listener" model to get messages. For a given consumer, the listener is always invoked from the same thread to ensure ordering. If you want multiple threads to process a single topic, you need to create a [`shared`](/concepts-messaging.md#shared) subscription and multiple consumers for this subscription. This does not ensure [...]
+`numIoThreads`| int| The number of threads used for handling connections to brokers | 1
+`numListenerThreads`|int|The number of threads used for handling message listeners. The listener thread pool is shared across all the consumers and readers using the "listener" model to get messages. For a given consumer, the listener is always invoked from the same thread to ensure ordering. If you want multiple threads to process a single topic, you need to create a [`shared`](/concepts-messaging.md#shared) subscription and multiple consumers for this subscription. This does not ensure [...]
`useTcpNoDelay`| boolean| Whether to use TCP no-delay flag on the connection to disable Nagle algorithm |true
`enableTls` |boolean | Whether to use TLS encryption on the connection. Note that this parameter is **deprecated**. If you want to enable TLS, use `pulsar+ssl://` in `serviceUrl` instead. | false
`tlsTrustCertsFilePath` |string |Path to the trusted TLS certificate file|None
@@ -78,7 +78,7 @@ Producer<byte[]> producer = client.newProducer()
## Consumer configs
-If you instantiate a `Consumer` object by specifying only a topic and subscription name as in the example above, the consumer uses the default configuration.
+If you instantiate a `Consumer` object by specifying only a topic and subscription name as in the example above, the consumer uses the default configuration.
When you create a consumer, you can use the `loadConf` configuration. The following parameters are available in `loadConf`.
@@ -148,7 +148,7 @@ You can set the client memory allocator configurations through Java properties.<
| Property | Type | <div>Description</div> | Default | Available values
|---|---|---|---|---
-`pulsar.allocator.pooled` | String | If set to `true`, the client uses a direct memory pool. <br /> If set to `false`, the client uses a heap memory without pool | true | <li> true </li> <li> false </li>
+`pulsar.allocator.pooled` | String | If set to `true`, the client uses a direct memory pool. <br /> If set to `false`, the client uses a heap memory without pool | true | <li> true </li> <li> false </li>
`pulsar.allocator.exit_on_oom` | String | Whether to exit the JVM when OOM happens | false | <li> true </li> <li> false </li>
`pulsar.allocator.leak_detection` | String | The leak detection policy for Pulsar bytebuf allocator. <li> **Disabled**: No leak detection and no overhead. </li> <li> **Simple**: Instruments 1% of the allocated buffer to track for leaks. </li> <li> **Advanced**: Instruments 1% of the allocated buffer to track for leaks, reporting stack traces of places where the buffer is used. </li> <li> **Paranoid**: Instruments 100% of the allocated buffer to track for leaks, reporting stack traces of [...]
`pulsar.allocator.out_of_memory_policy` | String | When an OOM occurs, the client throws an exception or fallbacks to heap | FallbackToHeap | <li> ThrowException </li> <li> FallbackToHeap </li>
diff --git a/docs/client-libraries-java-use.md b/docs/client-libraries-java-use.md
index be23429ab2f..68543ada706 100644
--- a/docs/client-libraries-java-use.md
+++ b/docs/client-libraries-java-use.md
@@ -98,7 +98,7 @@ Consumer consumer = client.newConsumer()
.subscribe();
```
-## Create a reader
+## Create a reader
With the [reader interface](concepts-clients.md#reader-interface), Pulsar clients can "manually position" themselves within a topic and read all messages from a specified message onward. The Pulsar API for Java enables you to create {@inject: javadoc:Reader:/client/org/apache/pulsar/client/api/Reader} objects by specifying a topic and a {@inject: javadoc:MessageId:/client/org/apache/pulsar/client/api/MessageId}.
diff --git a/docs/client-libraries-producers.md b/docs/client-libraries-producers.md
index 9a3e4802abc..33af11c34f1 100644
--- a/docs/client-libraries-producers.md
+++ b/docs/client-libraries-producers.md
@@ -409,7 +409,7 @@ If a message has a key, it supersedes the round robin routing policy. The follow
## Enable chunking
-Message [chunking](concepts-messaging.md#chunking) enables Pulsar to process large payload messages by splitting the message into chunks at the producer side and aggregating chunked messages on the consumer side.
+Message [chunking](concepts-messaging.md#chunking) enables Pulsar to process large payload messages by splitting the message into chunks at the producer side and aggregating chunked messages on the consumer side.
The message chunking feature is OFF by default. The following is an example of how to enable message chunking when creating a producer.
@@ -426,7 +426,7 @@ The message chunking feature is OFF by default. The following is an example of h
.enableBatching(false)
.create();
```
-
+
</TabItem>
<TabItem value="C++">
diff --git a/docs/client-libraries-rest.md b/docs/client-libraries-rest.md
index a079882ff8b..c754ccacc15 100644
--- a/docs/client-libraries-rest.md
+++ b/docs/client-libraries-rest.md
@@ -4,7 +4,7 @@ title: Pulsar REST
sidebar_label: "REST"
---
-Pulsar not only provides REST endpoints to manage resources in Pulsar clusters, but also provides methods to query the state for those resources. In addition, Pulsar REST provides a simple way to interact with Pulsar **without using client libraries**, which is convenient for applications to use HTTP to interact with Pulsar.
+Pulsar not only provides REST endpoints to manage resources in Pulsar clusters, but also provides methods to query the state for those resources. In addition, Pulsar REST provides a simple way to interact with Pulsar **without using client libraries**, which is convenient for applications to use HTTP to interact with Pulsar.
## Connection
@@ -24,7 +24,7 @@ To connect to Pulsar, you need to specify a URL.
## Producer
-Currently, you can produce messages to the following destinations with tools like cURL or Postman via REST.
+Currently, you can produce messages to the following destinations with tools like cURL or Postman via REST.
- Non-partitioned or partitioned topics
@@ -49,13 +49,13 @@ Consuming and reading messages via REST will be supported in the future.
`producerName`|No|Producer name
`Messages[] SingleMessage`|Yes|Messages to be sent
-- Below is the structure of a message.
+- Below is the structure of a message.
Parameter|Required?|Type|Description
|---|---|---|---
`payload`|Yes|`String`|Actual message payload <br /><br />Messages are sent in strings and encoded with given schemas on the server side
`properties`|No|`Map<String, String>`|Custom properties
- `key`|No|`String`|Partition key
+ `key`|No|`String`|Partition key
`replicationClusters`|No|`List<String>`|Clusters to which messages replicate
`eventTime`|No|`String`|Message event time
`sequenceId`|No|`long`|Message sequence ID
@@ -67,7 +67,7 @@ Consuming and reading messages via REST will be supported in the future.
- Currently, Primitive, Avro, JSON, and KeyValue schemas are supported.
-- For Primitive, Avro and JSON schemas, schemas should be provided as the full schema encoded as a string.
+- For Primitive, Avro and JSON schemas, schemas should be provided as the full schema encoded as a string.
- If the schema is not set, messages are encoded with string schema.
@@ -119,7 +119,7 @@ curl --location --request POST 'brokerUrl:{8080/8081}/topics/{persistent/non-per
}
]
}
-`
+`
// Sample message
```
diff --git a/docs/client-libraries-websocket.md b/docs/client-libraries-websocket.md
index 5ef377fdb91..937cdec920c 100644
--- a/docs/client-libraries-websocket.md
+++ b/docs/client-libraries-websocket.md
@@ -4,7 +4,7 @@ title: Pulsar WebSocket API
sidebar_label: "WebSocket"
---
-Pulsar [WebSocket](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API) API provides a simple way to interact with Pulsar using languages that do not have an official [client library](client-libraries.md). You can use Pulsar WebSocket API with any WebSocket client library. See [Python and Node.js examples](#client-examples) for more details.
+Pulsar [WebSocket](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API) API provides a simple way to interact with Pulsar using languages that do not have an official [client library](client-libraries.md). You can use Pulsar WebSocket API with any WebSocket client library. See [Python and Node.js examples](#client-examples) for more details.
Through WebSocket, you can publish and consume messages and use features available on the [Client Feature Matrix](https://docs.google.com/spreadsheets/d/1YHYTkIXR8-Ql103u-IMI18TXLlGStK8uJjDsOOA0T20/edit#gid=1784579914) page.
diff --git a/docs/concepts-architecture-overview.md b/docs/concepts-architecture-overview.md
index 67b880f7ffb..377b5488f14 100644
--- a/docs/concepts-architecture-overview.md
+++ b/docs/concepts-architecture-overview.md
@@ -47,7 +47,7 @@ Clusters can replicate among themselves using [geo-replication](concepts-replica
The Pulsar metadata store maintains all the metadata of a Pulsar cluster, such as topic metadata, schema, broker load data, and so on. Pulsar uses [Apache ZooKeeper](https://zookeeper.apache.org/) for metadata storage, cluster configuration, and coordination. The Pulsar metadata store can be deployed on a separate ZooKeeper cluster or deployed on an existing ZooKeeper cluster. You can use one ZooKeeper cluster for both Pulsar metadata store and BookKeeper metadata store. If you want to d [...]
-> Pulsar also supports more metadata backend services, including [etcd](https://etcd.io/) and [RocksDB](http://rocksdb.org/) (for standalone Pulsar only).
+> Pulsar also supports more metadata backend services, including [etcd](https://etcd.io/) and [RocksDB](http://rocksdb.org/) (for standalone Pulsar only).
In a Pulsar instance:
diff --git a/docs/concepts-clients.md b/docs/concepts-clients.md
index 45e2b843d75..3524c123451 100644
--- a/docs/concepts-clients.md
+++ b/docs/concepts-clients.md
@@ -90,7 +90,7 @@ Internally, the reader interface is implemented as a consumer using an exclusive
Unlike subscription/consumer, readers are non-durable in nature and do not prevent data in a topic from being deleted, thus it is ***strongly*** advised that [data retention](cookbooks-retention-expiry.md) be configured. If data retention for a topic is not configured for an adequate amount of time, messages that the reader has not yet read might be deleted. This causes the readers to essentially skip messages. Configuring the data retention for a topic guarantees the reader with a cert [...]
-Please also note that a reader can have a "backlog", but the metric is only used for users to know how behind the reader is. The metric is not considered for any backlog quota calculations.
+Please also note that a reader can have a "backlog", but the metric is only used for users to know how behind the reader is. The metric is not considered for any backlog quota calculations.
:::
diff --git a/docs/concepts-cluster-level-failover.md b/docs/concepts-cluster-level-failover.md
index 35b57962c55..c9bde9a085f 100644
--- a/docs/concepts-cluster-level-failover.md
+++ b/docs/concepts-cluster-level-failover.md
@@ -14,7 +14,7 @@ This chapter describes the concept, benefits, use cases, constraints, usage, wor
values={[{"label":"Automatic cluster-level failover","value":"Automatic cluster-level failover"},{"label":"Controlled cluster-level failover","value":"Controlled cluster-level failover"}]}>
<TabItem value="Automatic cluster-level failover">
-Automatic cluster-level failover supports Pulsar clients switching from a primary cluster to one or several backup clusters automatically and seamlessly when it detects a failover event based on the configured detecting policy set by **users**.
+Automatic cluster-level failover supports Pulsar clients switching from a primary cluster to one or several backup clusters automatically and seamlessly when it detects a failover event based on the configured detecting policy set by **users**.

@@ -58,7 +58,7 @@ The cluster-level failover protects your environment in a number of ways, includ
values={[{"label":"Automatic cluster-level failover","value":"Automatic cluster-level failover"},{"label":"Controlled cluster-level failover","value":"Controlled cluster-level failover"}]}>
<TabItem value="Automatic cluster-level failover">
-Automatic cluster-level failover is triggered when Pulsar clients cannot connect to the primary cluster for a prolonged period of time. This can be caused by any number of reasons including, but not limited to:
+Automatic cluster-level failover is triggered when Pulsar clients cannot connect to the primary cluster for a prolonged period of time. This can be caused by any number of reasons including, but not limited to:
* Network failure: internet connection is lost.
@@ -119,18 +119,18 @@ This chapter explains the working process of cluster-level failover. For more im
In an automatic failover cluster, the primary cluster and backup cluster are aware of each other's availability. The automatic failover cluster performs the following actions without administrator intervention:
1. The Pulsar client runs a probe task at intervals defined in `checkInterval`.
-
+
2. If the probe task finds the failure time of the primary cluster exceeds the time set in the `failoverDelay` parameter, it searches backup clusters for an available healthy cluster.
2a) If there are healthy backup clusters, the Pulsar client switches to a backup cluster in the order defined in `secondary`.
2b) If there is no healthy backup cluster, the Pulsar client does not perform the switchover, and the probe task continues to look for an available backup cluster.
-3. The probe task checks whether the primary cluster functions well or not.
+3. The probe task checks whether the primary cluster functions well or not.
3a) If the primary cluster comes back and the continuous healthy time exceeds the time set in `switchBackDelay`, the Pulsar client switches back to the primary cluster.
- 3b) If the primary cluster does not come back, the Pulsar client does not perform the switchover.
+ 3b) If the primary cluster does not come back, the Pulsar client does not perform the switchover.

@@ -145,7 +145,7 @@ In an automatic failover cluster, the primary cluster and backup cluster are awa
2b) If the service URL configuration is not changed, the Pulsar client does not perform the switchover.
-3. If the Pulsar client switches to the target cluster, the probe task continues to fetch service URL configuration from the URL provider service at intervals defined in `checkInterval`.
+3. If the Pulsar client switches to the target cluster, the probe task continues to fetch service URL configuration from the URL provider service at intervals defined in `checkInterval`.
3a) If the service URL configuration is changed, the probe task switches to the target cluster without checking the health status of the target cluster.
diff --git a/docs/concepts-replication.md b/docs/concepts-replication.md
index b47c037719f..a16fb500cce 100644
--- a/docs/concepts-replication.md
+++ b/docs/concepts-replication.md
@@ -6,7 +6,7 @@ sidebar_label: "Geo Replication"
Regardless of industries, when an unforeseen event occurs and brings day-to-day operations to a halt, an organization needs a well-prepared disaster recovery plan to quickly restore service to clients. However, a disaster recovery plan usually requires a multi-datacenter deployment with geographically dispersed data centers. Such a multi-datacenter deployment requires a geo-replication mechanism to provide additional redundancy in case a data center fails.
-Pulsar's geo-replication mechanism is typically used for disaster recovery, enabling the replication of persistently stored message data across multiple data centers. For instance, your application is publishing data in one region and you would like to process it for consumption in other regions. With Pulsar's geo-replication mechanism, messages can be produced and consumed in different geo-locations.
+Pulsar's geo-replication mechanism is typically used for disaster recovery, enabling the replication of persistently stored message data across multiple data centers. For instance, your application is publishing data in one region and you would like to process it for consumption in other regions. With Pulsar's geo-replication mechanism, messages can be produced and consumed in different geo-locations.
The diagram below illustrates the process of [geo-replication](administration-geo.md). Whenever three producers (P1, P2 and P3) respectively publish messages to the T1 topic in three clusters, those messages are instantly replicated across clusters. Once the messages are replicated, two consumers (C1 and C2) can consume those messages from their clusters.
@@ -18,17 +18,17 @@ The geo-replication mechanism can be categorized into synchronous geo-replicatio
### Asynchronous geo-replication in Pulsar
-An asynchronous geo-replicated cluster is composed of multiple physical clusters set up in different data centers. Messages produced on a Pulsar topic are first persisted to the local cluster and then replicated asynchronously to the remote clusters by brokers.
+An asynchronous geo-replicated cluster is composed of multiple physical clusters set up in different data centers. Messages produced on a Pulsar topic are first persisted to the local cluster and then replicated asynchronously to the remote clusters by brokers.

In normal cases, when there are no connectivity issues, messages are replicated immediately, at the same time as they are dispatched to local consumers. Typically, end-to-end delivery latency is defined by the network round-trip time (RTT) between the data centers. Applications can create producers and consumers in any of the clusters, even when the remote clusters are not reachable (for example, during a network partition).
-Asynchronous geo-replication provides lower latency but may result in weaker consistency guarantees due to the potential replication lag that some data hasn't been replicated.
+Asynchronous geo-replication provides lower latency but may result in weaker consistency guarantees due to the potential replication lag that some data hasn't been replicated.
### Synchronous geo-replication via BookKeeper
-In synchronous geo-replication, data is synchronously replicated to multiple data centers and the client has to wait for an acknowledgment from the other data centers. As illustrated below, when the client issues a write request to one cluster, the written data will be replicated to the other two data centers. The write request is only acknowledged to the client when the majority of data centers (in this example, at least 2 data centers) have acknowledged that the write has been persisted.
+In synchronous geo-replication, data is synchronously replicated to multiple data centers and the client has to wait for an acknowledgment from the other data centers. As illustrated below, when the client issues a write request to one cluster, the written data will be replicated to the other two data centers. The write request is only acknowledged to the client when the majority of data centers (in this example, at least 2 data centers) have acknowledged that the write has been persisted.

diff --git a/docs/concepts-throttling.md b/docs/concepts-throttling.md
index b0e89441044..c849caf1c8b 100644
--- a/docs/concepts-throttling.md
+++ b/docs/concepts-throttling.md
@@ -33,7 +33,7 @@ Message dispatch throttling brings the following benefits in detail:
### How it works?
The process of message dispatch throttling can be divided into the following steps:
-1. The broker approximates the number of entries to read from the bookies by calculating the remaining quota.
+1. The broker approximates the number of entries to read from the bookies by calculating the remaining quota.
2. The broker reads the messages from the bookies.
3. The broker dispatches the messages to the client and updates the counter to decrease the quota. A scheduled task refreshes the quota when a throttling period ends.
@@ -107,9 +107,9 @@ Message dispatch throttling may cause messages over-delivered per unit of time d
1. **The broker may read more entries or bytes from the bookies than the throttling limit.**
a) **The byte size of messages delivered to the client may exceed the configured threshold.**
-
+
When you set the dispatch rate limit in bytes/throttling-period (`dispatchThrottlingRateInByte`/`ratePeriodInSecond`), the broker calculates $$the \ number \ of \ entries \ to \ read \ from \ bookies$$ in one throttling period through the following equation:
-
+
$$
The \ number \ of \ entries \ to \ read \ from \ bookies = {{The \ total \ byte \ size \ to \ read} \over{The \ average \ byte \ size \ per \ entry}}
$$
@@ -121,13 +121,13 @@ Message dispatch throttling may cause messages over-delivered per unit of time d
* Average publish size (`brk_ml_EntrySizeBuckets`): the average byte size per entry stored in the bookies when the broker receives a publish request.
* Average dispatch size (`entriesReadSize`/`entriesReadCount`): the average byte size per entry read from bookies, that is, the average byte size per entry sent to the client.
-
+
The broker uses the average publish size in preference to the average dispatch size. If the average publish size is unavailable, then it uses the average dispatch size. When none of the two metrics are available, the broker only reads one entry at the first attempt.
**b) The number of messages delivered to the client may exceed the configured threshold.**
-
+
When you set the dispatch rate limit in message-count/throttling-period (`dispatchThrottlingRateInMsg`/`ratePeriodInSecond`) and batching (`batch-send`) is enabled, the broker counts an entry as one message (despite the message count per entry) and calculates $$the \ number \ of \ entries \ to \ read \ from \ bookies$$ through the following equation:
-
+
$$
The \ number \ of \ entries \ to \ read \ from \ bookies = {{The \ total \ number \ of \ messages \ to \ read} \over{The \ average \ message \ count \ per \ entry} \ (=1)}
$$
@@ -140,9 +140,9 @@ Message dispatch throttling may cause messages over-delivered per unit of time d
2. **Concurrent throttling processes may not decrease the quota in a timely manner.**
- As introduced in [How it works](#how-it-works), the dispatch throttling process is `1.get remaining quota` $$\to$$ `2.load data` $$\to$$ `3.decrease quota`.
-
- When two processes "dispatch replay messages (process-R)" and "dispatch non-replay messages (process-N)" in the same subscription are executed concurrently, their throttling processes can be interwoven in this order:
+ As introduced in [How it works](#how-it-works), the dispatch throttling process is `1.get remaining quota` $$\to$$ `2.load data` $$\to$$ `3.decrease quota`.
+
+ When two processes "dispatch replay messages (process-R)" and "dispatch non-replay messages (process-N)" in the same subscription are executed concurrently, their throttling processes can be interwoven in this order:
1) process-R: `1.get remaining quota`
diff --git a/docs/concepts-transactions.md b/docs/concepts-transactions.md
index 8b818c065fb..808eeccd08f 100644
--- a/docs/concepts-transactions.md
+++ b/docs/concepts-transactions.md
@@ -4,7 +4,7 @@ title: Transactions
sidebar_label: "Overview"
---
-Transactional semantics enable event streaming applications to consume, process, and produce messages in one atomic operation. In Pulsar, a producer or consumer can work with messages across multiple topics and partitions and ensure those messages are processed as a single unit.
+Transactional semantics enable event streaming applications to consume, process, and produce messages in one atomic operation. In Pulsar, a producer or consumer can work with messages across multiple topics and partitions and ensure those messages are processed as a single unit.
The following concepts help you understand Pulsar transactions.
@@ -21,7 +21,7 @@ All the transaction metadata is persisted in the transaction log. The transactio
The transaction ID (TxnID) identifies a unique transaction in Pulsar. The transaction ID is 128-bit. The highest 16 bits are reserved for the ID of the transaction coordinator, and the remaining bits are used for monotonically increasing numbers in each transaction coordinator. It is easy to locate the transaction crash with the TxnID.
## Transaction buffer
-Messages produced within a transaction are stored in the transaction buffer. The messages in transaction buffer are not materialized (visible) to consumers until the transactions are committed. The messages in the transaction buffer are discarded when the transactions are aborted.
+Messages produced within a transaction are stored in the transaction buffer. The messages in transaction buffer are not materialized (visible) to consumers until the transactions are committed. The messages in the transaction buffer are discarded when the transactions are aborted.
## Pending acknowledge state
Message acknowledges within a transaction are maintained by the pending acknowledge state before the transaction completes. If a message is in the pending acknowledge state, the message cannot be acknowledged by other transactions until the message is removed from the pending acknowledge state.
diff --git a/docs/cookbooks-compaction.md b/docs/cookbooks-compaction.md
index f2eb153ddac..bbe69deb91f 100644
--- a/docs/cookbooks-compaction.md
+++ b/docs/cookbooks-compaction.md
@@ -31,7 +31,7 @@ Thus, if you're using a Pulsar topic called `stock-values`, some consumers could
Compaction policy specifies how large the topic backlog can grow before compaction is triggered.
-Tenant administrators can configure a compaction policy at namespace or topic levels. Configuring the compaction policy at the namespace level applies to all topics within that namespace.
+Tenant administrators can configure a compaction policy at namespace or topic levels. Configuring the compaction policy at the namespace level applies to all topics within that namespace.
For example, to trigger compaction in a namespace when the backlog reaches 100MB:
diff --git a/docs/cookbooks-deduplication.md b/docs/cookbooks-deduplication.md
index cb9958fba61..add4eac74f6 100644
--- a/docs/cookbooks-deduplication.md
+++ b/docs/cookbooks-deduplication.md
@@ -11,7 +11,7 @@ import TabItem from '@theme/TabItem';
````
-When **Message deduplication** is enabled, it ensures that each message produced on Pulsar topics is persisted to disk *only once*, even if the message is produced more than once. Message deduplication is handled automatically on the server side.
+When **Message deduplication** is enabled, it ensures that each message produced on Pulsar topics is persisted to disk *only once*, even if the message is produced more than once. Message deduplication is handled automatically on the server side.
Message deduplication could affect the performance of the brokers during informational snapshots.
@@ -45,7 +45,7 @@ Even if you set the value for `brokerDeduplicationEnabled`, enabling or disablin
### Enable message deduplication at namespace or topic level
-Though message deduplication is disabled by default at the broker level, you can enable message deduplication for a specific namespace or topic using the [`pulsar-admin namespaces set-deduplication`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/namespaces?id=set-deduplication) or the [`pulsar-admin topics set-deduplication`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/topics?id=set-deduplication) command. You can use the `--enable`/`-e` flag and specify t [...]
+Though message deduplication is disabled by default at the broker level, you can enable message deduplication for a specific namespace or topic using the [`pulsar-admin namespaces set-deduplication`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/namespaces?id=set-deduplication) or the [`pulsar-admin topics set-deduplication`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/topics?id=set-deduplication) command. You can use the `--enable`/`-e` flag and specify t [...]
The following example shows how to enable message deduplication at the namespace level.
@@ -69,7 +69,7 @@ public/default \
## Pulsar clients
-If you enable message deduplication in Pulsar brokers, namespaces, or topics, it is recommended to make the client retry infinitely the messages until it succeeds, otherwise it is possible to break the ordering guarantee as some requests may time out and the application does not know whether the request is successfully added to the topic or not.
+If you enable message deduplication in Pulsar brokers, namespaces, or topics, it is recommended to make the client retry infinitely the messages until it succeeds, otherwise it is possible to break the ordering guarantee as some requests may time out and the application does not know whether the request is successfully added to the topic or not.
So you need to complete the following tasks for your client producers:
@@ -79,12 +79,12 @@ So you need to complete the following tasks for your client producers:
The instructions for Java, Python, and C++ clients are different.
````mdx-code-block
-<Tabs
+<Tabs
defaultValue="Java clients"
values={[{"label":"Java clients","value":"Java clients"},{"label":"Python clients","value":"Python clients"},{"label":"C++ clients","value":"C++ clients"}]}>
<TabItem value="Java clients">
-To ensure the guarantee order on a [Java producer](client-libraries-java-use/#create-a-producer) sending to a topic with message deduplication enabled, set the producer name using the `producerName` setter, and set the timeout to `0` using the `sendTimeout` setter.
+To ensure the guarantee order on a [Java producer](client-libraries-java-use/#create-a-producer) sending to a topic with message deduplication enabled, set the producer name using the `producerName` setter, and set the timeout to `0` using the `sendTimeout` setter.
```java
import org.apache.pulsar.client.api.Producer;
@@ -104,7 +104,7 @@ Producer producer = pulsarClient.newProducer()
</TabItem>
<TabItem value="Python clients">
-Not to break the guarantee order on a [Python producer](client-libraries-python-use.md#create-a-producer) sending to a topic with message deduplication active, set the producer name using `producer_name`, and set the timeout to `0` using `send_timeout_millis`.
+Not to break the guarantee order on a [Python producer](client-libraries-python-use.md#create-a-producer) sending to a topic with message deduplication active, set the producer name using `producer_name`, and set the timeout to `0` using `send_timeout_millis`.
```python
import pulsar
@@ -118,7 +118,7 @@ producer = client.create_producer(
</TabItem>
<TabItem value="C++ clients">
-Not to break the guarantee order on a [C++ producer](client-libraries-cpp-use.md#create-a-producer) sending to a topic with message deduplication active, set the producer name using `producer_name`, and set the timeout to `0` using `send_timeout_millis`.
+Not to break the guarantee order on a [C++ producer](client-libraries-cpp-use.md#create-a-producer) sending to a topic with message deduplication active, set the producer name using `producer_name`, and set the timeout to `0` using `send_timeout_millis`.
```cpp
#include <pulsar/Client.h>
diff --git a/docs/cookbooks-message-queue.md b/docs/cookbooks-message-queue.md
index fca9b7218e2..bd5fcd87f5f 100644
--- a/docs/cookbooks-message-queue.md
+++ b/docs/cookbooks-message-queue.md
@@ -24,7 +24,7 @@ You can use the same Pulsar installation to act as a real-time message bus and a
## Client configuration changes
-To use a Pulsar [topic](reference-terminology.md#topic) as a message queue, you should distribute the receiver load on that topic across several consumers (the optimal number of consumers depends on the load).
+To use a Pulsar [topic](reference-terminology.md#topic) as a message queue, you should distribute the receiver load on that topic across several consumers (the optimal number of consumers depends on the load).
Each consumer must establish a [shared subscription](concepts-messaging.md#shared) and use the same subscription name as the other consumers (otherwise the subscription is not shared and the consumers can't act as a processing ensemble).
diff --git a/docs/cookbooks-non-persistent.md b/docs/cookbooks-non-persistent.md
index b0b80783789..e7ecc47965c 100644
--- a/docs/cookbooks-non-persistent.md
+++ b/docs/cookbooks-non-persistent.md
@@ -42,7 +42,7 @@ To enable non-persistent topics in a Pulsar broker, the [`enableNonPersistentTop
> #### Configuration for standalone mode
-> If you're running Pulsar in standalone mode, the same configurable parameters are available but in the [`standalone.conf`](reference-configuration.md#standalone) configuration file.
+> If you're running Pulsar in standalone mode, the same configurable parameters are available but in the [`standalone.conf`](reference-configuration.md#standalone) configuration file.
If you'd like to enable *only* non-persistent topics in a broker, you can set the [`enablePersistentTopics`](reference-configuration.md#broker-enablePersistentTopics) parameter to `false` and the `enableNonPersistentTopics` parameter to `true`.
diff --git a/docs/cookbooks-retention-expiry.md b/docs/cookbooks-retention-expiry.md
index 99310282e14..5dd6c264dbe 100644
--- a/docs/cookbooks-retention-expiry.md
+++ b/docs/cookbooks-retention-expiry.md
@@ -72,11 +72,11 @@ You can set a retention policy for a namespace by specifying the namespace, a si
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
-You can use the [`set-retention`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/namespaces?id=set-retention) subcommand and specify a namespace, a size limit using the `-s`/`--size` flag, and a time limit using the `-t`/`--time` flag.
+You can use the [`set-retention`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/namespaces?id=set-retention) subcommand and specify a namespace, a size limit using the `-s`/`--size` flag, and a time limit using the `-t`/`--time` flag.
-In the following example, the size limit is set to 10 GB and the time limit is set to 3 hours for each topic within the `my-tenant/my-ns` namespace.
-- When the size of messages reaches 10 GB on a topic within 3 hours, the acknowledged messages will not be retained.
-- After 3 hours, even if the message size is less than 10 GB, the acknowledged messages will not be retained.
+In the following example, the size limit is set to 10 GB and the time limit is set to 3 hours for each topic within the `my-tenant/my-ns` namespace.
+- When the size of messages reaches 10 GB on a topic within 3 hours, the acknowledged messages will not be retained.
+- After 3 hours, even if the message size is less than 10 GB, the acknowledged messages will not be retained.
```shell
pulsar-admin namespaces set-retention my-tenant/my-ns \
@@ -456,12 +456,12 @@ admin.namespaces().removeNamespaceMessageTTL(namespace)
## Delete messages from namespaces
When it comes to the physical storage size, message expiry and retention are just like two sides of the same coin.
-* The backlog quota and TTL parameters prevent disk size from growing indefinitely, as Pulsar's default behavior is to persist unacknowledged messages.
+* The backlog quota and TTL parameters prevent disk size from growing indefinitely, as Pulsar's default behavior is to persist unacknowledged messages.
* The retention policy allocates storage space to accommodate the messages that are supposed to be deleted by Pulsar by default.
-In conclusion, the size of your physical storage should accommodate the sum of the backlog quota and the retention size.
+In conclusion, the size of your physical storage should accommodate the sum of the backlog quota and the retention size.
-The message deletion rate (releasing rate of disk space) can be determined by multiple factors.
+The message deletion rate (releasing rate of disk space) can be determined by multiple factors.
- **Segment rollover period**: basically, the segment rollover period is how often a new segment is created. Once a new segment is created, the old segment will be deleted. By default, this happens either when you have written 50,000 entries (messages) or have waited 240 minutes. You can tune this in your broker.
diff --git a/docs/deploy-aws.md b/docs/deploy-aws.md
index da954e94a49..0994114269a 100644
--- a/docs/deploy-aws.md
+++ b/docs/deploy-aws.md
@@ -175,9 +175,9 @@ Remember to enter this command just only once. If you attempt to enter this comm
## Run the Pulsar playbook
-Once you have created the necessary AWS resources using Terraform, you can install and run Pulsar on the Terraform-created EC2 instances using Ansible.
+Once you have created the necessary AWS resources using Terraform, you can install and run Pulsar on the Terraform-created EC2 instances using Ansible.
-(Optional) If you want to use any [built-in IO connectors](io-connectors.md), edit the `Download Pulsar IO packages` task in the `deploy-pulsar.yaml` file and uncomment the connectors you want to use.
+(Optional) If you want to use any [built-in IO connectors](io-connectors.md), edit the `Download Pulsar IO packages` task in the `deploy-pulsar.yaml` file and uncomment the connectors you want to use.
To run the playbook, enter this command:
diff --git a/docs/deploy-bare-metal-multi-cluster.md b/docs/deploy-bare-metal-multi-cluster.md
index f8e3bcf9499..438fd8c0edf 100644
--- a/docs/deploy-bare-metal-multi-cluster.md
+++ b/docs/deploy-bare-metal-multi-cluster.md
@@ -64,7 +64,7 @@ Directory | Contains
`bin` | [Command-line tools](reference-cli-tools.md) of Pulsar, such as [`pulsar`](reference-cli-tools.md) and [`pulsar-admin`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/)
`conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
-`lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses
+`lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses
`licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
The following directories are created once you begin running Pulsar:
@@ -90,7 +90,7 @@ You can use an independent cluster of machines or the same machines used by loca
ZooKeeper manages a variety of essential coordination-related and configuration-related tasks for Pulsar.
-You need to stand up one local ZooKeeper cluster per Pulsar cluster for deploying a Pulsar instance.
+You need to stand up one local ZooKeeper cluster per Pulsar cluster for deploying a Pulsar instance.
To begin, add all ZooKeeper servers to the quorum configuration specified in the [`conf/zookeeper.conf`](reference-configuration.md#zookeeper) file. Add a `server.N` line for each node in the cluster to the configuration, where `N` is the number of the ZooKeeper node. The following is an example of a three-node cluster:
@@ -123,7 +123,7 @@ Once you add each server to the `zookeeper.conf` configuration and each server h
bin/pulsar-daemon start zookeeper
```
-### Deploy the configuration store
+### Deploy the configuration store
The ZooKeeper cluster configured and started up in the section above is a local ZooKeeper cluster that you can use to manage a single Pulsar cluster. In addition to a local cluster, however, a full Pulsar instance also requires a configuration store for handling some instance-level configuration and coordination tasks.
@@ -152,7 +152,7 @@ The key here is to make sure the ZK quorum members are spread across at least 3
Again, given the very low expected load on the configuration store servers, you can share the same hosts used for the local ZooKeeper quorum.
-For example, assume a Pulsar instance with the following clusters `us-west`, `us-east`, `us-central`, `eu-central`, `ap-south`. Also assume, each cluster has its own local ZK servers named such as the following:
+For example, assume a Pulsar instance with the following clusters `us-west`, `us-east`, `us-central`, `eu-central`, `ap-south`. Also assume, each cluster has its own local ZK servers named such as the following:
```
zk[1-3].${CLUSTER}.example.com
diff --git a/docs/deploy-dcos.md b/docs/deploy-dcos.md
index 6186523a5f1..0b3bd4b1a45 100644
--- a/docs/deploy-dcos.md
+++ b/docs/deploy-dcos.md
@@ -65,9 +65,9 @@ To monitor the status of the BookKeeper cluster deployment, click the **bookkeep

At this point, the status of the 3 [bookies](reference-terminology.md#bookie) is green, which means that the bookies have been deployed successfully and are running.
-
+

-
+
You can also click each bookie instance to get more detailed information, such as the bookie running log.

@@ -111,7 +111,7 @@ If you click that endpoint, you can see the Prometheus dashboard. All the bookie
### Grafana
Click `grafana` to get the endpoint for Grafana, which is `192.168.65.121:3000` in this example.
-
+

If you click that endpoint, you can access the Grafana dashboard.
diff --git a/docs/deploy-ibm.md b/docs/deploy-ibm.md
index ef7253b18f7..1966d17696a 100644
--- a/docs/deploy-ibm.md
+++ b/docs/deploy-ibm.md
@@ -57,13 +57,13 @@ Deploying a Pulsar cluster on IBM cloud consists of the following steps:

-11. Check created VM in "Navigation Menu" -> "Resource list" Devices
+11. Check created VM in "Navigation Menu" -> "Resource list" Devices


-12. Check the detail of VM in overview
+12. Check the detail of VM in overview

@@ -71,7 +71,7 @@ Deploying a Pulsar cluster on IBM cloud consists of the following steps:

-## 2. Create Kubernetes Cluster on IBM
+## 2. Create Kubernetes Cluster on IBM
1. Search for the Kubernetes services
@@ -100,7 +100,7 @@ Deploying a Pulsar cluster on IBM cloud consists of the following steps:
6. Set cluster name as you want.

-7. Leave rest of the things as we are selecting as default. You can disable below options. Click on create and wait for provisioning of the cluster.
+7. Leave rest of the things as we are selecting as default. You can disable below options. Click on create and wait for provisioning of the cluster.

@@ -118,7 +118,7 @@ Deploying a Pulsar cluster on IBM cloud consists of the following steps:
## 3. Prepare VM for connecting to Kubernetes cluster and deploy Pulsar Helm chart on Kubernetes cluster.
-**Prerequisites**
+**Prerequisites**
1. Install [IBM Cloud CLI](https://cloud.ibm.com/docs/cli?topic=cli-install-ibmcloud-cli) and connect to Kubernetes master node.
2. Install [IBM Cloud CLI Plugins](https://cloud.ibm.com/docs/containers?topic=containers-cs_cli_install) to connect to IKS (IBM Kubernetes services). This is a required step.
@@ -126,7 +126,7 @@ Deploying a Pulsar cluster on IBM cloud consists of the following steps:
3. Install [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/) 1.23 or later versions.
4. Install [Helm](https://helm.sh/docs/intro/install/).
-:::note
+:::note
Please install all the above things before running the below commands
@@ -134,7 +134,7 @@ Please install all the above things before running the below commands
1. First take SSH of your VM with your private key. Run all the below commands one by one.
```bash
- $ ibmcloud login
+ $ ibmcloud login
$ ibmcloud plugin list
```
@@ -148,7 +148,7 @@ Output
$ibmcloud ks cluster config --cluster ccql163t064kpvg5gg10
```
-:::note
+:::note
This step is showing during creation of Kubernetes Cluster.
@@ -184,7 +184,7 @@ Output
2. Clone the Pulsar Helm chart repository, go inside the pulsar-helm-chart directory
```bash
-git clone https://github.com/apache/pulsar-helm-chart
+git clone https://github.com/apache/pulsar-helm-chart
cd pulsar-helm-chart
```
@@ -197,7 +197,7 @@ When running the script, you can use `-n` to specify the Kubernetes namespace wh
:::
```bash
- ./scripts/pulsar/prepare_helm_release.sh -n default -k asia -c
+ ./scripts/pulsar/prepare_helm_release.sh -n default -k asia -c
```
Output
@@ -220,7 +220,7 @@ Output
5. Check the status of all pods.
-```bash
+```bash
kubectl get pods
```
If all pods start up successfully, you can see that `STATUS` is changed to `Running` or `Completed`.
@@ -233,13 +233,13 @@ Output
```bash
kubectl get services
-```
+```
Output

-The output shows both `services URL` and `broker URL`.
+The output shows both `services URL` and `broker URL`.
Proxy external IPs are the ports changed just now:
- Service URL port is 80.
- Broker URL port is 6650. This is default.
diff --git a/docs/deploy-kubernetes.md b/docs/deploy-kubernetes.md
index f6edc27fc96..985ee5f87b8 100644
--- a/docs/deploy-kubernetes.md
+++ b/docs/deploy-kubernetes.md
@@ -10,7 +10,7 @@ The Apache Pulsar Helm Chart contains all components to support the features and
## What's Next?
-* To get up and running with Pulsar Helm Chart as fast as possible for Proof of Concept (PoC) in a **non-production** use case, see the [Quick Start Guide](getting-started-helm.md).
+* To get up and running with Pulsar Helm Chart as fast as possible for Proof of Concept (PoC) in a **non-production** use case, see the [Quick Start Guide](getting-started-helm.md).
* To get up and running with Pulsar Helm Chart in production under sustained load, see the [preparations](helm-prepare.md) and [Deployment Guide](helm-deploy.md).
diff --git a/docs/deploy-monitoring.md b/docs/deploy-monitoring.md
index a461b46a517..241b735bbdd 100644
--- a/docs/deploy-monitoring.md
+++ b/docs/deploy-monitoring.md
@@ -8,7 +8,7 @@ You can use different ways to monitor a Pulsar cluster, exposing both metrics re
## Collect metrics
-You can collect broker stats, ZooKeeper stats, and BookKeeper stats.
+You can collect broker stats, ZooKeeper stats, and BookKeeper stats.
### Broker stats
@@ -58,7 +58,7 @@ http://$BOOKIE_ADDRESS:8000/metrics
The default port for bookie is `8000`. You can change the port by configuring `prometheusStatsHttpPort` in the `conf/bookkeeper.conf` file.
### Managed cursor acknowledgment state
-The acknowledgment state is persistent to the ledger first. When the acknowledgment state fails to be persistent to the ledger, they are persistent to ZooKeeper. To track the stats of acknowledgment, you can configure the metrics for the managed cursor.
+The acknowledgment state is persistent to the ledger first. When the acknowledgment state fails to be persistent to the ledger, they are persistent to ZooKeeper. To track the stats of acknowledgment, you can configure the metrics for the managed cursor.
```
brk_ml_cursor_persistLedgerSucceed(namespace=", ledger_name="", cursor_name:")
@@ -94,7 +94,7 @@ http://$FUNCTIONS_WORKER_ADDRESS:$WORKER_PORT/metrics:
You can use Prometheus to collect all the metrics exposed for Pulsar components and set up [Grafana](https://grafana.com/) dashboards to display the metrics and monitor your Pulsar cluster. For details, refer to [Prometheus guide](https://prometheus.io/docs/introduction/getting_started/).
-When you run Pulsar on bare metal, you can provide the list of nodes to be probed. When you deploy Pulsar in a Kubernetes cluster, the monitoring is set up automatically. For details, refer to [Kubernetes instructions](helm-deploy.md).
+When you run Pulsar on bare metal, you can provide the list of nodes to be probed. When you deploy Pulsar in a Kubernetes cluster, the monitoring is set up automatically. For details, refer to [Kubernetes instructions](helm-deploy.md).
## Dashboards
diff --git a/docs/develop-load-manager.md b/docs/develop-load-manager.md
index 2d8f4ecb1e1..6db950cc88a 100644
--- a/docs/develop-load-manager.md
+++ b/docs/develop-load-manager.md
@@ -94,7 +94,7 @@ There are a few different ways to determine which load manager is being used:
Here is an example from the modular load manager:
```
-
+
===================================================================================================================
||SYSTEM |CPU % |MEMORY % |DIRECT % |BW IN % |BW OUT % |MAX % ||
|| |0.00 |48.33 |0.01 |0.00 |0.00 |48.33 ||
@@ -107,13 +107,13 @@ There are a few different ways to determine which load manager is being used:
||LONG |MSG/S IN |MSG/S OUT |TOTAL |KB/S IN |KB/S OUT |TOTAL ||
|| |0.00 |0.00 |0.00 |0.00 |0.00 |0.00 ||
===================================================================================================================
-
+
```
Here is an example from the simple load manager:
```
-
+
===================================================================================================================
||COUNT |TOPIC |BUNDLE |PRODUCER |CONSUMER |BUNDLE + |BUNDLE - ||
|| |4 |4 |0 |2 |0 |0 ||
@@ -126,7 +126,7 @@ There are a few different ways to determine which load manager is being used:
||ALLOC MSG |MSG/S IN |MSG/S OUT |TOTAL |KB/S IN |KB/S OUT |TOTAL ||
|| |54.84 |134.48 |189.31 |126.54 |320.96 |447.50 ||
===================================================================================================================
-
+
```
It is important to note that the module load manager is _centralized_, meaning that all requests to assign a bundle---whether it's been seen before or whether this is the first time---only get handled by the _lead_ broker (which can change over time). To determine the current lead broker, examine the `/loadbalance/leader` node in ZooKeeper.
diff --git a/docs/developing-binary-protocol.md b/docs/developing-binary-protocol.md
index d259872b98d..0721a9b86b4 100644
--- a/docs/developing-binary-protocol.md
+++ b/docs/developing-binary-protocol.md
@@ -67,7 +67,7 @@ If you want to use broker entry metadata for **brokers**, configure the [`broker
If you want to use broker entry metadata for **consumers**:
1. Use the client protocol version [18 or later](https://github.com/apache/pulsar/blob/ca37e67211feda4f7e0984e6414e707f1c1dfd07/pulsar-common/src/main/proto/PulsarApi.proto#L259).
-
+
2. Configure the [`brokerEntryMetadataInterceptors`](reference-configuration.md) parameter and set the [`exposingBrokerEntryMetadataToClientEnabled`](reference-configuration.md) parameter to `true` in the `broker.conf` file.
## Message metadata
@@ -337,7 +337,7 @@ A `Flow` command gives additional *permits* to send messages to the consumer.
A typical consumer implementation will use a queue to accumulate these messages
before the application is ready to consume them.
-After the application has dequeued half of the messages in the queue, the consumer
+After the application has dequeued half of the messages in the queue, the consumer
sends permits to the broker to ask for more messages (equals to half of the messages in the queue).
For example, if the queue size is 1000 and the consumer consumes 500 messages in the queue.
@@ -493,17 +493,17 @@ messages are coming from the consumer.
##### Command ConsumerStats
-This command is sent by the client to retrieve Subscriber and Consumer level
+This command is sent by the client to retrieve Subscriber and Consumer level
stats from the broker.
Fields:
- * `request_id`: The ID of the request, used to correlate the request
+ * `request_id`: The ID of the request, used to correlate the request
and the response.
* `consumer_id`: The ID of an already established consumer.
##### Command ConsumerStatsResponse
-This is the broker's response to ConsumerStats request by the client.
+This is the broker's response to ConsumerStats request by the client.
It contains the Subscriber and Consumer level stats of the `consumer_id` sent in the request.
If the `error_code` or the `error_message` field is set it indicates that the request has failed.
diff --git a/docs/functions-cli.md b/docs/functions-cli.md
index 5a7a966c63b..25e7be53e11 100644
--- a/docs/functions-cli.md
+++ b/docs/functions-cli.md
@@ -136,7 +136,7 @@ The following table outlines the nested fields and related arguments under the `
The following example shows how to configure a function using YAML or JSON.
````mdx-code-block
-<Tabs
+<Tabs
defaultValue="YAML"
values={[{"label":"YAML","value":"YAML"},{"label":"JSON","value":"JSON"}]}>
@@ -146,13 +146,13 @@ The following example shows how to configure a function using YAML or JSON.
tenant: "public"
namespace: "default"
name: "config-file-function"
-inputs:
+inputs:
- "persistent://public/default/config-file-function-input-1"
- "persistent://public/default/config-file-function-input-2"
output: "persistent://public/default/config-file-function-output"
jar: "function.jar"
parallelism: 1
-resources:
+resources:
cpu: 8
ram: 8589934592
autoAck: true
diff --git a/docs/functions-concepts.md b/docs/functions-concepts.md
index ed252060640..b2443afeac6 100644
--- a/docs/functions-concepts.md
+++ b/docs/functions-concepts.md
@@ -7,7 +7,7 @@ sidebar_label: "Concepts"
## Fully Qualified Function Name
-Each function has a Fully Qualified Function Name (FQFN) with a specified tenant, namespace, and function name. With FQFN, you can create multiple functions in different namespaces with the same function name.
+Each function has a Fully Qualified Function Name (FQFN) with a specified tenant, namespace, and function name. With FQFN, you can create multiple functions in different namespaces with the same function name.
An FQFN looks like this:
@@ -18,7 +18,7 @@ tenant/namespace/name
## Function instance
Function instance is the core element of the function execution framework, consisting of the following elements:
-* A collection of consumers consuming messages from different input topics.
+* A collection of consumers consuming messages from different input topics.
* An executor that invokes the function.
* A producer that sends the result of a function to an output topic.
@@ -26,16 +26,16 @@ The following figure illustrates the internal workflow of a function instance.

-A function can have multiple instances, and each instance executes one copy of a function. You can specify the number of instances in the configuration file.
+A function can have multiple instances, and each instance executes one copy of a function. You can specify the number of instances in the configuration file.
The consumers inside a function instance use FQFN as subscriber names to enable load balancing between multiple instances based on subscription types. The subscription type can be specified at the function level.
-Each function has a separate state store with FQFN. You can specify a state interface to persist intermediate results in the BookKeeper. Other users can query the state of the function and extract these results.
+Each function has a separate state store with FQFN. You can specify a state interface to persist intermediate results in the BookKeeper. Other users can query the state of the function and extract these results.
## Function worker
-Function worker is a logic component to monitor, orchestrate, and execute an individual function in [cluster-mode](functions-deploy.md#depoy-a-function-in-cluster-mode) deployment of Pulsar Functions.
+Function worker is a logic component to monitor, orchestrate, and execute an individual function in [cluster-mode](functions-deploy.md#depoy-a-function-in-cluster-mode) deployment of Pulsar Functions.
Within function workers, each [function instance](#function-instance) can be executed as a thread or process, depending on the selected configurations. Alternatively, if a Kubernetes cluster is available, functions can be spawned as StatefulSets within Kubernetes. See [Set up function workers](functions-worker.md) for more details.
@@ -46,18 +46,18 @@ The following figure illustrates the internal architecture and workflow of funct
Function workers form a cluster of worker nodes and the workflow is described as follows.
1. User sends a request to the REST server to execute a function instance.
2. The REST server responds to the request and passes the request to the function metadata manager.
-3. The function metadata manager writes the request updates to the function metadata topic. It also keeps track of all the metadata-related messages and uses the function metadata topic to persist the state updates of functions.
+3. The function metadata manager writes the request updates to the function metadata topic. It also keeps track of all the metadata-related messages and uses the function metadata topic to persist the state updates of functions.
4. The function metadata manager reads updates from the function metadata topic and triggers the schedule manager to compute an assignment.
5. The schedule manager writes the assignment updates to the assignment topic.
6. The function runtime manager listens to the assignment topic, reads the assignment updates, and updates its internal state that contains a global view of all assignments for all workers. If the update changes the assignment on a worker, the function runtime manager materializes the new assignment by starting or stopping the execution of function instances.
-7. The membership manager requests the coordination topic to elect a lead worker. All workers subscribe to the coordination topic in a failover subscription, but the active worker becomes the leader and performs the assignment, guaranteeing only one active consumer for this topic.
+7. The membership manager requests the coordination topic to elect a lead worker. All workers subscribe to the coordination topic in a failover subscription, but the active worker becomes the leader and performs the assignment, guaranteeing only one active consumer for this topic.
8. The membership manager reads updates from the coordination topic.
## Function runtime
A [function instance](#function-instance) is invoked inside a runtime, and a number of instances can run in parallel. Pulsar supports three types of function runtime with different costs and isolation guarantees to maximize deployment flexibility. You can use one of them to run functions based on your needs. See [Configure function runtime](functions-runtime.md) for more details.
-
+
The following table outlines the three types of function runtime.
| Type | Description |
@@ -98,7 +98,7 @@ bin/pulsar-admin functions create \
# Other function configs
```
-You can change the processing guarantees applied to a function using the `update` command.
+You can change the processing guarantees applied to a function using the `update` command.
```bash
bin/pulsar-admin functions update \
@@ -135,14 +135,14 @@ For more information about code examples, refer to [Java](https://github.com/apa
## Function message types
-Pulsar Functions take byte arrays as inputs and spit out byte arrays as output. You can write typed functions and bind messages to types by using either of the following ways:
+Pulsar Functions take byte arrays as inputs and spit out byte arrays as output. You can write typed functions and bind messages to types by using either of the following ways:
* [Schema Registry](functions-develop-schema-registry.md)
* [SerDe](functions-develop-serde.md)
## Window function
-:::note
+:::note
Currently, window functions are only available in Java, and do not support `MANUAL` and `Effectively-once` delivery semantics.
@@ -153,34 +153,34 @@ A window function is a function that performs computation across a data window,

The definition of a data window for a function involves two policies:
-* Eviction policy: Controls the amount of data collected in a window.
-* Trigger policy: Controls when a function is triggered and executed to process all of the data collected in a window based on eviction policy.
+* Eviction policy: Controls the amount of data collected in a window.
+* Trigger policy: Controls when a function is triggered and executed to process all of the data collected in a window based on eviction policy.
Both trigger policy and eviction policy are driven by either time or count.
:::tip
Both processing time and event time are supported.
- * Processing time is defined based on the wall time when the function instance builds and processes a window. The judging of window completeness is straightforward and you don't have to worry about data arrival disorder.
+ * Processing time is defined based on the wall time when the function instance builds and processes a window. The judging of window completeness is straightforward and you don't have to worry about data arrival disorder.
* Event time is defined based on the timestamps that come with the event record. It guarantees event time correctness but also offers more data buffering and a limited completeness guarantee.
-
+
:::
### Types of window
Based on whether two adjacent windows can share common events or not, windows can be divided into the following two types:
-* [Tumbling window](#tumbling-window)
+* [Tumbling window](#tumbling-window)
* [Sliding window](#sliding-window)
#### Tumbling window
-A tumbling window assigns elements to a window of a specified time length or count. The eviction policy for tumbling windows is always based on the window being full. So you only need to specify the trigger policy, either count-based or time-based.
+A tumbling window assigns elements to a window of a specified time length or count. The eviction policy for tumbling windows is always based on the window being full. So you only need to specify the trigger policy, either count-based or time-based.
-In a tumbling window with a count-based trigger policy, as illustrated in the following example, the trigger policy is set to 2. Each function is triggered and executed when two items are in the window, regardless of the time.
+In a tumbling window with a count-based trigger policy, as illustrated in the following example, the trigger policy is set to 2. Each function is triggered and executed when two items are in the window, regardless of the time.

-In contrast, as illustrated in the following example, the window length of the tumbling window is 10 seconds, which means the function is triggered when the 10-second time interval has elapsed, regardless of how many events are in the window.
+In contrast, as illustrated in the following example, the window length of the tumbling window is 10 seconds, which means the function is triggered when the 10-second time interval has elapsed, regardless of how many events are in the window.

@@ -188,6 +188,6 @@ In contrast, as illustrated in the following example, the window length of the t
The sliding window method defines a fixed window length by setting the eviction policy to limit the amount of data retained for processing and setting the trigger policy with a sliding interval. If the sliding interval is smaller than the window length, there is data overlapping, which means the data simultaneously falling into adjacent windows is used for computation more than once.
-As illustrated in the following example, the window length is 2 seconds, which means that any data older than 2 seconds will be evicted and not used in the computation. The sliding interval is configured to be 1 second, which means that function is executed every second to process the data within the entire window length.
+As illustrated in the following example, the window length is 2 seconds, which means that any data older than 2 seconds will be evicted and not used in the computation. The sliding interval is configured to be 1 second, which means that function is executed every second to process the data within the entire window length.

\ No newline at end of file
diff --git a/docs/functions-debug-log-topic.md b/docs/functions-debug-log-topic.md
index 6269e509136..a53c01866fb 100644
--- a/docs/functions-debug-log-topic.md
+++ b/docs/functions-debug-log-topic.md
@@ -4,7 +4,7 @@ title: Debug with log topic
sidebar_label: "Debug with log topic"
---
-When using Pulsar Functions, you can generate logs predefined in functions to a specified log topic and configure consumers to consume messages from the log topic.
+When using Pulsar Functions, you can generate logs predefined in functions to a specified log topic and configure consumers to consume messages from the log topic.
For example, the following function logs either a WARNING-level or INFO-level log based on whether the incoming string contains the word `danger` or not.
@@ -30,7 +30,7 @@ public class LoggingFunction implements Function<String, Void> {
}
```
-As shown in the example, you can get the logger via `context.getLogger()` and assign the logger to the `LOG` variable of `slf4j`, so you can define your desired logs in a function using the `LOG` variable.
+As shown in the example, you can get the logger via `context.getLogger()` and assign the logger to the `LOG` variable of `slf4j`, so you can define your desired logs in a function using the `LOG` variable.
Meanwhile, you need to specify the topic that the logs can be produced to. The following is an example.
@@ -40,7 +40,7 @@ bin/pulsar-admin functions create \
# Other function configs
```
-The message published to a log topic contains several properties:
+The message published to a log topic contains several properties:
- `loglevel`: the level of the log message.
- `fqn`: the fully qualified function name that pushes this log message.
- `instance`: the ID of the function instance that pushes this log message.
diff --git a/docs/functions-debug-unit-test.md b/docs/functions-debug-unit-test.md
index b3257d5cd14..45133bcaa8c 100644
--- a/docs/functions-debug-unit-test.md
+++ b/docs/functions-debug-unit-test.md
@@ -51,7 +51,7 @@ public class ExclamationFunction implements Function<String, String> {
}
```
-You can write a unit test to test this function and mock the `Context` parameter as follows.
+You can write a unit test to test this function and mock the `Context` parameter as follows.
```java
@Test
diff --git a/docs/functions-deploy-arguments.md b/docs/functions-deploy-arguments.md
index fe2a2e0bbae..e5a6cf259e4 100644
--- a/docs/functions-deploy-arguments.md
+++ b/docs/functions-deploy-arguments.md
@@ -4,20 +4,20 @@ title: Default arguments of CLI
sidebar_label: "Default arguments of CLI"
---
-You can use function-related commands in the [`pulsar-admin`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/) CLI to deploy functions. Pulsar provides a variety of commands, such as:
+You can use function-related commands in the [`pulsar-admin`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/) CLI to deploy functions. Pulsar provides a variety of commands, such as:
* `create` command for deploying functions in [cluster mode](functions-deploy-cluster.md)
* `trigger` command for [triggering](functions-deploy-trigger.md) functions
The following table lists the parameters required in CLI and their default values.
-| Parameter | Default value|
-|----------|----------------|
-| Function name | N/A <br />You can specify any value for the function name (except org, library, or similar class names).
-Tenant | N/A <br />The value is derived from the name of the input topics. For example, if the input topic form is `persistent://marketing/{namespace}/{topicName}`, the tenant name is `marketing`.|
-| Namespace | N/A <br />The value is derived from the input topic name. If the input topic form is `persistent://marketing/asia/{topicName}`, the namespace is `asia`.|
-| Output topic | `{input topic}-{function name}-output`. For example, if an input topic name of a function is `incoming` and the function name is `exclamation`, the output topic name is `incoming-exclamation-output`.|
+| Parameter | Default value|
+|----------|----------------|
+| Function name | N/A <br />You can specify any value for the function name (except org, library, or similar class names).
+Tenant | N/A <br />The value is derived from the name of the input topics. For example, if the input topic form is `persistent://marketing/{namespace}/{topicName}`, the tenant name is `marketing`.|
+| Namespace | N/A <br />The value is derived from the input topic name. If the input topic form is `persistent://marketing/asia/{topicName}`, the namespace is `asia`.|
+| Output topic | `{input topic}-{function name}-output`. For example, if an input topic name of a function is `incoming` and the function name is `exclamation`, the output topic name is `incoming-exclamation-output`.|
| [Processing guarantees](functions-concepts.md#processing-guarantees-and-subscription-types) | `ATLEAST_ONCE` |
-| Pulsar service URL | `pulsar://localhost:6650`|
+| Pulsar service URL | `pulsar://localhost:6650`|
Take the `create` command for example. The following function has default values for the function name (`MyFunction`), tenant (`public`), namespace (`default`), subscription type (`SHARED`), processing guarantees (`ATLEAST_ONCE`), and Pulsar service URL (`pulsar://localhost:6650`).
diff --git a/docs/functions-deploy-cluster-encryption.md b/docs/functions-deploy-cluster-encryption.md
index 23aec7b02bf..2be9b251d95 100644
--- a/docs/functions-deploy-cluster-encryption.md
+++ b/docs/functions-deploy-cluster-encryption.md
@@ -4,7 +4,7 @@ title: Enable end-to-end-encryption
sidebar_label: "Enable end-to-end-encryption"
---
-To perform end-to-end [encryption](security-encryption.md), you can specify `--producer-config` and `--input-specs` in the [`pulsar-admin`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/) CLI with the public and private key pair configured by the application. Only the consumers with a valid key can decrypt the encrypted messages.
+To perform end-to-end [encryption](security-encryption.md), you can specify `--producer-config` and `--input-specs` in the [`pulsar-admin`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/) CLI with the public and private key pair configured by the application. Only the consumers with a valid key can decrypt the encrypted messages.
The encryption/decryption relevant configuration [`CryptoConfig`](functions-cli.md) is included in both `ProducerConfig` and `inputSpecs`. The specific configurable fields about `CryptoConfig` are as follows:
diff --git a/docs/functions-deploy-cluster-parallelism.md b/docs/functions-deploy-cluster-parallelism.md
index 369c4fced05..3620f042cd2 100644
--- a/docs/functions-deploy-cluster-parallelism.md
+++ b/docs/functions-deploy-cluster-parallelism.md
@@ -8,7 +8,7 @@ In cluster mode, you can specify the **parallelism** (the number of instances to
**Example1**
-Specify the `--parallelism` flag of the `create` command when deploying a function.
+Specify the `--parallelism` flag of the `create` command when deploying a function.
```bash
bin/pulsar-admin functions create \
diff --git a/docs/functions-deploy-cluster-resource.md b/docs/functions-deploy-cluster-resource.md
index b7516c3f24a..98b1c765f6a 100644
--- a/docs/functions-deploy-cluster-resource.md
+++ b/docs/functions-deploy-cluster-resource.md
@@ -27,6 +27,6 @@ bin/pulsar-admin functions create \
:::note
-The resources allocated to a given function are applied to each instance of the function. For example, if you apply 8GB of RAM to a function with a [parallelism](functions-deploy-cluster-parallelism.md) of 5, you are applying 40GB of RAM for the function in total.
+The resources allocated to a given function are applied to each instance of the function. For example, if you apply 8GB of RAM to a function with a [parallelism](functions-deploy-cluster-parallelism.md) of 5, you are applying 40GB of RAM for the function in total.
:::
diff --git a/docs/functions-deploy-cluster.md b/docs/functions-deploy-cluster.md
index ccfd36e63de..f6e3e3daab5 100644
--- a/docs/functions-deploy-cluster.md
+++ b/docs/functions-deploy-cluster.md
@@ -4,9 +4,9 @@ title: Deploy a function in cluster mode
sidebar_label: "Deploy a function in cluster mode"
---
-Deploying a function in cluster mode uploads the function to a function worker, which means the function is scheduled by the worker.
+Deploying a function in cluster mode uploads the function to a function worker, which means the function is scheduled by the worker.
-To deploy a function in cluster mode, use the `create` command.
+To deploy a function in cluster mode, use the `create` command.
```bash
bin/pulsar-admin functions create \
diff --git a/docs/functions-deploy-localrun.md b/docs/functions-deploy-localrun.md
index 95f64305469..3e05f0e86cb 100644
--- a/docs/functions-deploy-localrun.md
+++ b/docs/functions-deploy-localrun.md
@@ -4,9 +4,9 @@ title: Deploy a function in localrun mode
sidebar_label: "Deploy a function in localrun mode"
---
-When you deploy a function in localrun mode, it runs on the machine where you enter the commands – on your laptop, for example, or in an [AWS EC2](https://aws.amazon.com/ec2/) instance.
+When you deploy a function in localrun mode, it runs on the machine where you enter the commands – on your laptop, for example, or in an [AWS EC2](https://aws.amazon.com/ec2/) instance.
-You can use the `localrun` command to run a single instance of a function. To run multiple instances, you can use the `localrun` command multiple times.
+You can use the `localrun` command to run a single instance of a function. To run multiple instances, you can use the `localrun` command multiple times.
The following is an example of how to use the `localrun` command.
diff --git a/docs/functions-deploy-trigger.md b/docs/functions-deploy-trigger.md
index 9e76620455a..bea91d223bf 100644
--- a/docs/functions-deploy-trigger.md
+++ b/docs/functions-deploy-trigger.md
@@ -4,7 +4,7 @@ title: Trigger a function
sidebar_label: "Trigger a function"
---
-Triggering a function means that you invoke a function by producing a message to one of the input topics via the CLI. You can use the `trigger` command to trigger a function at any time.
+Triggering a function means that you invoke a function by producing a message to one of the input topics via the CLI. You can use the `trigger` command to trigger a function at any time.
:::tip
@@ -53,7 +53,7 @@ def process(input):
:::tip
- In the `trigger` command, topic info is not required. You only need to specify basic information about the function, such as tenant, namespace, and function name.
+ In the `trigger` command, topic info is not required. You only need to specify basic information about the function, such as tenant, namespace, and function name.
:::
diff --git a/docs/functions-deploy.md b/docs/functions-deploy.md
index 19c4a91ccb5..ed4c537413e 100644
--- a/docs/functions-deploy.md
+++ b/docs/functions-deploy.md
@@ -5,8 +5,8 @@ sidebar_label: "How to deploy"
---
Pulsar provides two modes to deploy a function:
-* [cluster mode (for production)](functions-deploy-cluster.md) - you can submit a function to a Pulsar cluster and the cluster will take charge of running the function.
-* [localrun mode](functions-deploy-localrun.md) - you can determine where a function runs, for example, on your local machine.
+* [cluster mode (for production)](functions-deploy-cluster.md) - you can submit a function to a Pulsar cluster and the cluster will take charge of running the function.
+* [localrun mode](functions-deploy-localrun.md) - you can determine where a function runs, for example, on your local machine.
## Prerequisites
diff --git a/docs/functions-develop-api.md b/docs/functions-develop-api.md
index 3e4308f73ee..e3c98f85f34 100644
--- a/docs/functions-develop-api.md
+++ b/docs/functions-develop-api.md
@@ -11,16 +11,16 @@ import TabItem from '@theme/TabItem';
The following table outlines the APIs that you can use to develop Pulsar Functions in Java, Python, and Go.
-| Interface | Description | Use case|
-|---------|------------|---------|
-| [Language-native interface for Java/Python](#use-language-native-interface-for-javapython) | No Pulsar-specific libraries or special dependencies required (only core libraries). | Functions that do not require access to the [context](functions-concepts.md#context).|
-| [Pulsar Functions SDK for Java/Python/Go](#use-sdk-for-javapythongo) | Pulsar-specific libraries that provide a range of functionality not available in the language-native interfaces, such as state management or user configuration. | Functions that require access to the [context](functions-concepts.md#context).|
-| [Extended Pulsar Functions SDK for Java](#use-extended-sdk-for-java) | An extension to Pulsar-specific libraries, providing the initialization and close interfaces in Java. | Functions that require initializing and releasing external resources.|
+| Interface | Description | Use case|
+|---------|------------|---------|
+| [Language-native interface for Java/Python](#use-language-native-interface-for-javapython) | No Pulsar-specific libraries or special dependencies required (only core libraries). | Functions that do not require access to the [context](functions-concepts.md#context).|
+| [Pulsar Functions SDK for Java/Python/Go](#use-sdk-for-javapythongo) | Pulsar-specific libraries that provide a range of functionality not available in the language-native interfaces, such as state management or user configuration. | Functions that require access to the [context](functions-concepts.md#context).|
+| [Extended Pulsar Functions SDK for Java](#use-extended-sdk-for-java) | An extension to Pulsar-specific libraries, providing the initialization and close interfaces in Java. | Functions that require initializing and releasing external resources.|
## Use language-native interface for Java/Python
-The language-native interface provides a simple and clean approach to writing Java/Python functions, by adding an exclamation point to all incoming strings and publishing the output string to a topic. It has no external dependencies.
+The language-native interface provides a simple and clean approach to writing Java/Python functions, by adding an exclamation point to all incoming strings and publishing the output string to a topic. It has no external dependencies.
The following examples are language-native functions.
@@ -60,7 +60,7 @@ For more details, see [code example](https://github.com/apache/pulsar/blob/maste
:::note
Write Pulsar Functions in Python 3. To make sure your functions can run, you need to have Python 3 installed for functions workers and set Python 3 as the default interpreter.
-
+
:::
</TabItem>
@@ -70,7 +70,7 @@ Write Pulsar Functions in Python 3. To make sure your functions can run, you nee
## Use SDK for Java/Python/Go
-The implementation of Pulsar Functions SDK specifies a functional interface that includes the [context](functions-concepts.md#context) object as a parameter.
+The implementation of Pulsar Functions SDK specifies a functional interface that includes the [context](functions-concepts.md#context) object as a parameter.
The following examples use Pulsar Functions SDK for different languages.
@@ -127,7 +127,7 @@ For more details, see [code example](https://github.com/apache/pulsar/blob/maste
</TabItem>
<TabItem value="Python">
-To develop a function using the Python SDK, you need to add the pulsar client dependency to your Python installation.
+To develop a function using the Python SDK, you need to add the pulsar client dependency to your Python installation.
```python
from pulsar import Function
@@ -145,7 +145,7 @@ For more details, see [code example](https://github.com/apache/pulsar/blob/maste
</TabItem>
<TabItem value="Go">
-To develop a function using the Go SDK, you need to add the pulsar client dependency to your Go installation and provide the name of the function to the `pf.Start()` method inside the `main()` method. This registers the function with the Pulsar Functions framework and ensures that the specified function can be invoked when a new message arrives.
+To develop a function using the Go SDK, you need to add the pulsar client dependency to your Go installation and provide the name of the function to the `pf.Start()` method inside the `main()` method. This registers the function with the Pulsar Functions framework and ensures that the specified function can be invoked when a new message arrives.
```go
package main
@@ -178,7 +178,7 @@ For more details, see [code example](https://github.com/apache/pulsar/blob/77cf0
This extended Pulsar Functions SDK provides two additional interfaces to initialize and release external resources.
- By using the `initialize` interface, you can initialize external resources which only need one-time initialization when the function instance starts.
-- By using the `close` interface, you can close the referenced external resources when the function instance closes.
+- By using the `close` interface, you can close the referenced external resources when the function instance closes.
:::note
@@ -201,7 +201,7 @@ import io.lettuce.core.RedisClient;
public class InitializableFunction implements Function<String, String> {
private RedisClient redisClient;
-
+
private void initRedisClient(Map<String, Object> connectInfo) {
redisClient = RedisClient.create(connectInfo.get("redisURI"));
}
@@ -211,7 +211,7 @@ public class InitializableFunction implements Function<String, String> {
Map<String, Object> connectInfo = context.getUserConfigMap();
redisClient = initRedisClient(connectInfo);
}
-
+
@Override
public String process(String input, Context context) {
String value = client.get(key);
diff --git a/docs/functions-develop-log.md b/docs/functions-develop-log.md
index 2d4ed01563e..331136b5165 100644
--- a/docs/functions-develop-log.md
+++ b/docs/functions-develop-log.md
@@ -6,7 +6,7 @@ sidebar_label: "Produce function logs"
## Produce logs for Java functions
-Pulsar Functions that use the Java SDK have access to an [SLF4j `Logger`](https://www.slf4j.org/api/org/apache/log4j/Logger.html) object. The logger object can be used to produce logs at a specified log level.
+Pulsar Functions that use the Java SDK have access to an [SLF4j `Logger`](https://www.slf4j.org/api/org/apache/log4j/Logger.html) object. The logger object can be used to produce logs at a specified log level.
For example, the following function logs either a `WARNING`- or `INFO`-level log based on whether the incoming string contains the word `danger`.
@@ -50,7 +50,7 @@ By default, the log level for Java functions is `info`. If you want to customize
:::tip
-The `functions_log4j2.xml` file is under your Pulsar configuration directory, for example, `/etc/pulsar/` on bare-metal, or `/pulsar/conf` on Kubernetes.
+The `functions_log4j2.xml` file is under your Pulsar configuration directory, for example, `/etc/pulsar/` on bare-metal, or `/pulsar/conf` on Kubernetes.
:::
@@ -63,7 +63,7 @@ The `functions_log4j2.xml` file is under your Pulsar configuration directory, fo
</Property>
```
-2. Apply the log level to places where they are referenced. In the following example, `debug` applies to all function logs.
+2. Apply the log level to places where they are referenced. In the following example, `debug` applies to all function logs.
```xml
<Root>
@@ -116,7 +116,7 @@ The `functions_log4j2.xml` file is under your Pulsar configuration directory, fo
## Produce logs for Python functions
-Pulsar Functions that use the Python SDK have access to a logger object. The logger object can be used to produce logs at a specified log level.
+Pulsar Functions that use the Python SDK have access to a logger object. The logger object can be used to produce logs at a specified log level.
For example, the following function logs either a `WARNING`- or `INFO`-level log based on whether the incoming string contains the word `danger`.
diff --git a/docs/functions-develop-metrics.md b/docs/functions-develop-metrics.md
index d6a35a6f5a5..312fc4ab2f1 100644
--- a/docs/functions-develop-metrics.md
+++ b/docs/functions-develop-metrics.md
@@ -9,7 +9,7 @@ import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
````
-To ensure that running functions are healthy at any time, you can configure functions to publish arbitrary metrics to the `metrics` interface that can be queried.
+To ensure that running functions are healthy at any time, you can configure functions to publish arbitrary metrics to the `metrics` interface that can be queried.
:::note
@@ -19,11 +19,11 @@ Using the language-native interface for Java or Python is **not** able to publis
You can use both built-in metrics and customized metrics to monitor functions.
- Use the built-in [function metrics](reference-metrics.md#pulsar-functions).
- Pulsar Functions expose the metrics that can be collected and used for monitoring the health of Java, Python, and Go functions. You can check the metrics by following the [monitoring](deploy-monitoring.md#function-and-connector-stats) guide.
+ Pulsar Functions expose the metrics that can be collected and used for monitoring the health of Java, Python, and Go functions. You can check the metrics by following the [monitoring](deploy-monitoring.md#function-and-connector-stats) guide.
- Set your customized metrics.
In addition to the built-in metrics, Pulsar allows you to customize metrics for Java and Python functions. Function workers collect user-defined metrics to Prometheus automatically and you can check them in Grafana.
-Here is an example of how to customize metrics for Java, Python and Go functions by using the [`Context object`](functions-concepts.md#context) on a per-key basis. For example, you can set a metric for the `process-count` key and set another one for the `elevens-count` key every time the function processes a message.
+Here is an example of how to customize metrics for Java, Python and Go functions by using the [`Context object`](functions-concepts.md#context) on a per-key basis. For example, you can set a metric for the `process-count` key and set another one for the `elevens-count` key every time the function processes a message.
````mdx-code-block
diff --git a/docs/functions-develop-security.md b/docs/functions-develop-security.md
index 8807d826e36..d9ef7fb0103 100644
--- a/docs/functions-develop-security.md
+++ b/docs/functions-develop-security.md
@@ -22,7 +22,7 @@ To use the secret APIs from the context, you need to set the following two param
Pulsar Functions provided two types of `SecretsProviderConfigurator` implementation and both can be used as the value of `secretsProviderConfiguratorClassName` directly:
* `org.apache.pulsar.functions.secretsproviderconfigurator.DefaultSecretsProviderConfigurator`: This is a barebones version of a secrets provider which wires in `ClearTextSecretsProvider` to the function instances.
-* `org.apache.pulsar.functions.secretsproviderconfigurator.KubernetesSecretsProviderConfigurator`: This is used by default for running in Kubernetes and it uses Kubernetes built-in secrets and binds them as environment variables (via `EnvironmentBasedSecretsProvider`) within the function container to ensure that the secrets are available to the function at runtime.
+* `org.apache.pulsar.functions.secretsproviderconfigurator.KubernetesSecretsProviderConfigurator`: This is used by default for running in Kubernetes and it uses Kubernetes built-in secrets and binds them as environment variables (via `EnvironmentBasedSecretsProvider`) within the function container to ensure that the secrets are available to the function at runtime.
Function workers use the `org.apache.pulsar.functions.secretsproviderconfigurator.SecretsProviderConfigurator` interface to choose the `SecretsProvider` class name and its associated configurations at the time of starting the function instances.
diff --git a/docs/functions-develop-tutorial.md b/docs/functions-develop-tutorial.md
index 30bbd84f764..439d470629a 100644
--- a/docs/functions-develop-tutorial.md
+++ b/docs/functions-develop-tutorial.md
@@ -92,11 +92,11 @@ The following example is a stateful function. By default, the state of a functio
:::note
-Currently, window functions are only available in Java.
+Currently, window functions are only available in Java.
:::
-This example demonstrates how to use the [language-native interface](functions-develop-api.md) to write a window function in Java.
+This example demonstrates how to use the [language-native interface](functions-develop-api.md) to write a window function in Java.
Each input message is a sentence that is split into words and each word is counted. The built-in counter state is used to keep track of the word count in a persistent and consistent manner.
diff --git a/docs/functions-develop-user-defined-configs.md b/docs/functions-develop-user-defined-configs.md
index f21d1022d10..e12d8cbd49f 100644
--- a/docs/functions-develop-user-defined-configs.md
+++ b/docs/functions-develop-user-defined-configs.md
@@ -9,7 +9,7 @@ import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
````
-When you run or update functions created via SDK, you can pass arbitrary key/value pairs to them by using CLI with the `--user-config` flag. Key/value pairs must be specified as JSON.
+When you run or update functions created via SDK, you can pass arbitrary key/value pairs to them by using CLI with the `--user-config` flag. Key/value pairs must be specified as JSON.
````mdx-code-block
<Tabs groupId="lang-choice"
diff --git a/docs/functions-develop.md b/docs/functions-develop.md
index 2b183e205ec..470e26f88a2 100644
--- a/docs/functions-develop.md
+++ b/docs/functions-develop.md
@@ -6,7 +6,7 @@ sidebar_label: "How to develop"
:::note
-Develop functions in Java, Python, or Go.
+Develop functions in Java, Python, or Go.
* For supported Java versions, refer to [Pulsar runtime Java version recommendation](https://github.com/apache/pulsar#pulsar-runtime-java-version-recommendation) for more details.
* For supported Python versions, refer to [Python client](client-libraries-python.md) for more details.
diff --git a/docs/functions-overview.md b/docs/functions-overview.md
index c01a8230855..7d5102d866d 100644
--- a/docs/functions-overview.md
+++ b/docs/functions-overview.md
@@ -18,18 +18,18 @@ Pulsar Functions are a serverless computing framework that runs on top of Pulsar
* applies a user-defined processing logic to the messages,
* publishes the outputs of the messages to other topics.
-The diagram below illustrates the three steps in the functions computing process.
+The diagram below illustrates the three steps in the functions computing process.

Each time a function receives a message, it completes the following consume-apply-publish steps.
-1. Consumes the message from one or more **input topics**.
+1. Consumes the message from one or more **input topics**.
2. Applies the customized (user-supplied) processing logic to the message.
3. Publishes the output of the message, including:
1. writes output messages to an **output topic** in Pulsar
2. writes logs to a **log topic** (if it is configured)for debugging
- 3. writes [state](functions-develop-state.md) updates to BookKeeper (if it is configured)
-
+ 3. writes [state](functions-develop-state.md) updates to BookKeeper (if it is configured)
+
You can write functions in Java, Python, and Go. For example, you can use Pulsar Functions to set up the following processing chain:
* A Python function listens for the `raw-sentences` topic and "sanitizes" incoming strings (removing extraneous white space and converting all characters to lowercase) and then publishes the results to a `sanitized-sentences` topic.
* A Java function listens for the `sanitized-sentences` topic, counts the number of times each word appears within a specified time [window](functions-concepts.md#window-function), and publishes the results to a `results` topic.
@@ -62,7 +62,7 @@ In this example, the function calculates a sum of the occurrences of every indiv
### Content-based routing example
-This figure demonstrates the process of implementing a content-based routing use case.
+This figure demonstrates the process of implementing a content-based routing use case.

@@ -81,6 +81,6 @@ In this example, a function takes items (strings) as input and publishes them to
**For admins/operators**
1. [Set up function workers](functions-worker.md).
-2. [Configure function runtime](functions-runtime.md).
+2. [Configure function runtime](functions-runtime.md).
3. [Deploy a function](functions-deploy.md).
diff --git a/docs/functions-package-go.md b/docs/functions-package-go.md
index 04b88a61525..127807a2b33 100644
--- a/docs/functions-package-go.md
+++ b/docs/functions-package-go.md
@@ -6,7 +6,7 @@ sidebar_label: "Package Go Functions"
:::note
-Currently, Go functions can be implemented only using SDK and the interface of functions is exposed in the form of SDK. Before using Go functions, you need to import `github.com/apache/pulsar/pulsar-function-go/pf`.
+Currently, Go functions can be implemented only using SDK and the interface of functions is exposed in the form of SDK. Before using Go functions, you need to import `github.com/apache/pulsar/pulsar-function-go/pf`.
:::
@@ -30,12 +30,12 @@ To package a Go function, complete the following steps.
```bash
bin/pulsar-admin functions localrun \
- --go [your go function path]
+ --go [your go function path]
--inputs [input topics] \
--output [output topic] \
--tenant [default:public] \
--namespace [default:default] \
- --name [custom unique go function name]
+ --name [custom unique go function name]
```
The following log indicates that the Go function starts successfully.
diff --git a/docs/functions-package.md b/docs/functions-package.md
index caa1990dfcf..07c85d4faa7 100644
--- a/docs/functions-package.md
+++ b/docs/functions-package.md
@@ -4,11 +4,11 @@ title: Package Pulsar Functions
sidebar_label: "How to package"
---
-If you want to submit and run functions in cluster mode, you need to package your functions first.
+If you want to submit and run functions in cluster mode, you need to package your functions first.
## Prerequisite
-Before running a Pulsar function, you need to start Pulsar.
+Before running a Pulsar function, you need to start Pulsar.
You can [run a standalone Pulsar in Docker](getting-started-docker.md), or [run Pulsar in Kubernetes](getting-started-helm.md). To check whether the Docker image starts, you can use the `docker ps` command.
diff --git a/docs/functions-quickstart.md b/docs/functions-quickstart.md
index 2dbd1c63ce9..2f0d0b28e58 100644
--- a/docs/functions-quickstart.md
+++ b/docs/functions-quickstart.md
@@ -11,7 +11,7 @@ This hands-on tutorial provides step-by-step instructions and examples on how to
- JDK 8+. For more details, refer to [Pulsar runtime Java version recommendation](https://github.com/apache/pulsar#pulsar-runtime-java-version-recommendation).
- Windows OS is not supported.
-## Start standalone Pulsar
+## Start standalone Pulsar
1. Enable pulsar function in `conf/standalone.conf` (add this field if not exists):
@@ -137,7 +137,7 @@ Before starting functions, you need to [start Pulsar](#start-standalone-pulsar)
```text
Created Successfully
```
-
+
You can check the config of this function in `examples/example-function-config.yaml`:
```yaml
@@ -146,13 +146,13 @@ Before starting functions, you need to [start Pulsar](#start-standalone-pulsar)
name: "example" # function name
className: "org.apache.pulsar.functions.api.examples.ExclamationFunction"
inputs: ["test_src"] # this function will read messages from these topics
- output: "test_result" # the return value of this function will be sent to this topic
- autoAck: true # function will acknowledge input messages if set true
+ output: "test_result" # the return value of this function will be sent to this topic
+ autoAck: true # function will acknowledge input messages if set true
parallelism: 1
```
You can see the [source code](https://github.com/apache/pulsar/blob/master/pulsar-functions/java-examples/src/main/java/org/apache/pulsar/functions/api/examples/ExclamationFunction.java) of `ExclamationFunction`.
- For more information about the yaml config, see the [reference](functions-cli.md#yaml-configurations-for-pulsar-functions).
+ For more information about the yaml config, see the [reference](functions-cli.md#yaml-configurations-for-pulsar-functions).
2. In the same terminal window as step 1, verify the function's configurations.
@@ -214,7 +214,7 @@ Before starting functions, you need to [start Pulsar](#start-standalone-pulsar)
**Output**
`"running": true` shows that the function is running.
-
+
```json
{
"numInstances" : 1,
@@ -315,7 +315,7 @@ Before starting stateful functions, you need to [start Pulsar](#start-standalone
autoAck: true
parallelism: 1
```
-
+
You can see the [source code](https://github.com/apache/pulsar/blob/master/pulsar-functions/java-examples/src/main/java/org/apache/pulsar/functions/api/examples/WordCountFunction.java) of `WordCountFunction`. This function won't return any value but store the occurrence of words in function context. So you don't need to specify an output topic.
For more information about the yaml config, see the [reference](functions-cli.md#yaml-configurations-for-pulsar-functions).
@@ -411,7 +411,7 @@ Before starting stateful functions, you need to [start Pulsar](#start-standalone
```
:::tip
-
+
For more information about the `pulsar-admin functions querystate options` command, including flags, descriptions, default values, and shorthands, see [Pulsar admin API](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/).
:::
@@ -431,7 +431,7 @@ Before starting stateful functions, you need to [start Pulsar](#start-standalone
bin/pulsar-client produce -m "hello" -n 10 test_wordcount_src
```
-6. In the same terminal window as step 1, check the result.
+6. In the same terminal window as step 1, check the result.
The result shows that the **output topic** `test_wordcount_dest` receives the messages.
@@ -451,7 +451,7 @@ Before starting stateful functions, you need to [start Pulsar](#start-standalone
bin/pulsar-client produce -m "hello" -n 10 test_wordcount_src
```
-8. In the same terminal window as step 1, check the result.
+8. In the same terminal window as step 1, check the result.
The result shows that the **output topic** `test_wordcount_dest` receives the value of 20.
@@ -500,7 +500,7 @@ Before starting window functions, you need to [start Pulsar](#start-standalone-p
output: "test_window_result"
autoAck: true
parallelism: 1
-
+
# every 5 messages, calculate sum of the latest 10 messages
windowConfig:
windowLengthCount: 10
@@ -577,7 +577,7 @@ Before starting window functions, you need to [start Pulsar](#start-standalone-p
**Output**
`"running": true` shows that the function is running.
-
+
```json
{
"numInstances" : 1,
@@ -614,7 +614,7 @@ Before starting window functions, you need to [start Pulsar](#start-standalone-p
bin/pulsar-client produce -m "3" -n 10 test_window_src
```
-6. In the same terminal window as step 1, the messages produced by the window function `window-example` are returned.
+6. In the same terminal window as step 1, the messages produced by the window function `window-example` are returned.
**Output**
diff --git a/docs/functions-runtime-kubernetes.md b/docs/functions-runtime-kubernetes.md
index 842b794ae6c..a7bec7da7a7 100644
--- a/docs/functions-runtime-kubernetes.md
+++ b/docs/functions-runtime-kubernetes.md
@@ -8,8 +8,8 @@ The Kubernetes runtime works when a function worker generates and applies Kubern
* a `StatefulSet`
By default, the `StatefulSet` manifest has a single pod with a number of replicas. The number is determined by the [parallelism](functions-deploy-cluster-parallelism.md) of the function. The pod downloads the function payload (via the function worker REST API) on pod boot. The pod's container image is configurable if the function runtime is configured.
* a `Service` (used to communicate with the pod)
-* a `Secret` for authenticating credentials (when applicable).
- The Kubernetes runtime supports secrets. You can create a Kubernetes secret and expose it as an environment variable in the pod.
+* a `Secret` for authenticating credentials (when applicable).
+ The Kubernetes runtime supports secrets. You can create a Kubernetes secret and expose it as an environment variable in the pod.
:::tip
@@ -19,7 +19,7 @@ For the rules of translating Pulsar object names into Kubernetes resource labels
### Configure basic settings
-To quickly configure a Kubernetes runtime, you can use the default settings of [`KubernetesRuntimeFactoryConfig`](https://github.com/apache/pulsar/blob/master/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeFactoryConfig.java) in the `conf/functions_worker.yml` file.
+To quickly configure a Kubernetes runtime, you can use the default settings of [`KubernetesRuntimeFactoryConfig`](https://github.com/apache/pulsar/blob/master/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeFactoryConfig.java) in the `conf/functions_worker.yml` file.
If you have [set up a Pulsar cluster on Kubernetes using [Helm chart](helm-install.md), which means function workers have also been set up on Kubernetes, you can use the `serviceAccount` associated with the pod where the function worker is running. Otherwise, you can configure function workers to communicate with a Kubernetes cluster by setting `functionRuntimeFactoryConfigs` to `k8Uri`.
@@ -43,23 +43,23 @@ secrets:
key: "password"
```
-### Enable token authentication
+### Enable token authentication
When you use token authentication, TLS encryption, or custom authentications to secure the communication with your Pulsar cluster, Pulsar passes your certificate authority (CA) to the client, so the client can authenticate the cluster with your signed certificate.
-To enable the authentication for your Pulsar cluster, you need to specify a mechanism for the pod running your function to authenticate the broker, by implementing the `org.apache.pulsar.functions.auth.KubernetesFunctionAuthProvider` interface.
+To enable the authentication for your Pulsar cluster, you need to specify a mechanism for the pod running your function to authenticate the broker, by implementing the `org.apache.pulsar.functions.auth.KubernetesFunctionAuthProvider` interface.
* For token authentication, Pulsar includes an implementation of the above interface to distribute the CA. The function worker captures the token that deploys (or updates) the function, saves it as a secret, and mounts it into the pod.
- The configuration in the `conf/function-worker.yml` file is as follows. `functionAuthProviderClassName` is used to specify the path to this implementation.
+ The configuration in the `conf/function-worker.yml` file is as follows. `functionAuthProviderClassName` is used to specify the path to this implementation.
```yaml
functionAuthProviderClassName: org.apache.pulsar.functions.auth.KubernetesSecretsTokenAuthProvider
```
-* For TLS or custom authentication, you can either implement the `org.apache.pulsar.functions.auth.KubernetesFunctionAuthProvider` interface or use an alternative mechanism.
+* For TLS or custom authentication, you can either implement the `org.apache.pulsar.functions.auth.KubernetesFunctionAuthProvider` interface or use an alternative mechanism.
-:::note
+:::note
If the token you use to deploy the function has an expiration date, you may need to deploy the function again after it expires.
@@ -69,19 +69,19 @@ If the token you use to deploy the function has an expiration date, you may need
Customizing Kubernetes runtime allows you to customize Kubernetes resources created by the runtime, including how to generate manifests, how to pass authenticated data to pods, and how to integrate secrets.
-To customize Kubernetes runtime, you can set `runtimeCustomizerClassName` in the `conf/functions-worker.yml` file and use the fully qualified class name.
+To customize Kubernetes runtime, you can set `runtimeCustomizerClassName` in the `conf/functions-worker.yml` file and use the fully qualified class name.
The function API provides a flag named `customRuntimeOptions`, which is passed to the `org.apache.pulsar.functions.runtime.kubernetes.KubernetesManifestCustomizer` interface. To initialize `KubernetesManifestCustomizer`, you can set `runtimeCustomizerConfig` in the `conf/functions-worker.yml` file.
:::note
-`runtimeCustomizerConfig` is the same across all functions. If you provide both `runtimeCustomizerConfig` and `customRuntimeOptions`, you need to decide how to manage these two configurations in your implementation of the `KubernetesManifestCustomizer` interface.
+`runtimeCustomizerConfig` is the same across all functions. If you provide both `runtimeCustomizerConfig` and `customRuntimeOptions`, you need to decide how to manage these two configurations in your implementation of the `KubernetesManifestCustomizer` interface.
:::
Pulsar includes a built-in implementation initialized with `runtimeCustomizerConfig`. It enables you to pass a JSON document as `customRuntimeOptions` with certain properties to augment. To use this built-in implementation, set `runtimeCustomizerClassName` to `org.apache.pulsar.functions.runtime.kubernetes.BasicKubernetesManifestCustomizer`.
-If both `runtimeCustomizerConfig` and `customRuntimeOptions` are provided and have conflicts, `BasicKubernetesManifestCustomizer` uses `customRuntimeOptions` to override `runtimeCustomizerConfig`.
+If both `runtimeCustomizerConfig` and `customRuntimeOptions` are provided and have conflicts, `BasicKubernetesManifestCustomizer` uses `customRuntimeOptions` to override `runtimeCustomizerConfig`.
Below is an example of configuring `customRuntimeOptions`.
@@ -125,17 +125,17 @@ If you run Pulsar Functions or connectors on Kubernetes, you need to follow the
Kubernetes requires a name that can be used as a DNS subdomain name as defined in [RFC 1123](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names). Pulsar supports more legal characters than the Kubernetes naming convention. If you create a Pulsar resource name with special characters that are not supported by Kubernetes (for example, including colons in a Pulsar namespace name), Kubernetes runtime translates the Pulsar object names into Kubernetes resource labe [...]
- Truncate to 63 characters
-
+
- Replace the following characters with dashes (-):
-
+
- Non-alphanumeric characters
-
+
- Underscores (_)
-
- - Dots (.)
-
+
+ - Dots (.)
+
- Replace beginning and ending non-alphanumeric characters with 0
-
+
:::tip
- If you get an error in translating Pulsar object names into Kubernetes resource labels (for example, you may have a naming collision if your Pulsar object name is too long) or want to customize the translating rules, see [customize Kubernetes runtime](functions-runtime-kubernetes.md#customize-kubernetes-runtime).
diff --git a/docs/functions-runtime-thread.md b/docs/functions-runtime-thread.md
index 8302f9c02f0..130a1506fdc 100644
--- a/docs/functions-runtime-thread.md
+++ b/docs/functions-runtime-thread.md
@@ -4,7 +4,7 @@ title: Configure thread runtime
sidebar_label: "Configure thread runtime"
---
-You can use the default configurations of thread runtime in the `conf/functions_worker.yml` file.
+You can use the default configurations of thread runtime in the `conf/functions_worker.yml` file.
If you want to customize more parameters, such as thread group name, refer to the following example.
diff --git a/docs/functions-worker-run-separately.md b/docs/functions-worker-run-separately.md
index 0ae060df370..0813a56e254 100644
--- a/docs/functions-worker-run-separately.md
+++ b/docs/functions-worker-run-separately.md
@@ -152,7 +152,7 @@ For [token authentication](security-jwt.md) provider, add the required settings
properties:
tokenSecretKey: file://my/secret.key
# If using public/private
- # tokenPublicKey: file://path/to/public.key
+ # tokenPublicKey: file://path/to/public.key
```
:::note
diff --git a/docs/functions-worker-stateful.md b/docs/functions-worker-stateful.md
index 615724ac7ac..efe9d85ee5b 100644
--- a/docs/functions-worker-stateful.md
+++ b/docs/functions-worker-stateful.md
@@ -19,7 +19,7 @@ When the stateful APIs of Pulsar Functions are required – for example, `putSta
# Settings below are used by stream/table service
##################################################################
##################################################################
-
+
### Grpc Server ###
# the grpc server port to listen on. default is 4181
@@ -60,7 +60,7 @@ When the stateful APIs of Pulsar Functions are required – for example, `putSta
Escape character is '^]'.
```
-3. Configure `stateStorageServiceUrl` in the `conf/functions_worker.yml` file.
+3. Configure `stateStorageServiceUrl` in the `conf/functions_worker.yml` file.
`bk-service-url` is the service URL pointing to the BookKeeper table service.
```yaml
diff --git a/docs/functions-worker-temp-file-path.md b/docs/functions-worker-temp-file-path.md
index 0b4a00c8db2..4113a208b15 100644
--- a/docs/functions-worker-temp-file-path.md
+++ b/docs/functions-worker-temp-file-path.md
@@ -4,7 +4,7 @@ title: Configure temporary file path
sidebar_label: "Configure temporary file path"
---
-Function workers use `java.io.tmpdir` in the JVM as the default temporary file path, which is also used as the default extraction file path for each NAR package. NAR packages require a local file path to extract and load to the Java class loader.
+Function workers use `java.io.tmpdir` in the JVM as the default temporary file path, which is also used as the default extraction file path for each NAR package. NAR packages require a local file path to extract and load to the Java class loader.
If you want to change the default extraction file path for NAR packages to another directory, you can add the following parameter with the desired directory in the `functions_worker.yml` file. The configuration varies depending on the [function runtime](functions-concepts.md#function-runtime) you are using.
diff --git a/docs/functions-worker-troubleshooting.md b/docs/functions-worker-troubleshooting.md
index 52f4f2cd912..f082f383e8c 100644
--- a/docs/functions-worker-troubleshooting.md
+++ b/docs/functions-worker-troubleshooting.md
@@ -34,8 +34,8 @@ If any of these cases happen, follow the instructions below to fix the problem.
bin/pulsar-admin namespaces set-clusters --clusters <existing-clusters>,<new-cluster> public/functions
```
-4. After setting the cluster successfully, enable function workers by setting `functionsWorkerEnabled=true`.
+4. After setting the cluster successfully, enable function workers by setting `functionsWorkerEnabled=true`.
5. Set the correct cluster name for the `pulsarFunctionsCluster` parameter in the `conf/functions_worker.yml` file.
-6. Restart brokers.
+6. Restart brokers.
diff --git a/docs/functions-worker.md b/docs/functions-worker.md
index a6920a3d087..6705008fce3 100644
--- a/docs/functions-worker.md
+++ b/docs/functions-worker.md
@@ -4,9 +4,9 @@ title: Set up function workers
sidebar_label: "Set up function workers"
---
-You have two ways to set up [function workers](functions-concepts.md#function-worker).
+You have two ways to set up [function workers](functions-concepts.md#function-worker).
- [Run function workers with brokers](functions-worker-corun.md). Use it when:
- - resource isolation is not required when running functions in process or thread mode;
+ - resource isolation is not required when running functions in process or thread mode;
- you configure the function workers to run functions on Kubernetes (where the resource isolation problem is addressed by Kubernetes).
- [Run function workers separately](functions-worker-run-separately.md). Use it when you want to separate functions and brokers.
diff --git a/docs/get-started-pulsar-admin.md b/docs/get-started-pulsar-admin.md
index 07de1debb94..7b945f2a091 100644
--- a/docs/get-started-pulsar-admin.md
+++ b/docs/get-started-pulsar-admin.md
@@ -16,9 +16,9 @@ This tutorial guides you through every step of using pulsar-admin CLI to manage
5. Check the stats of the topic.
-6. Delete the topic.
+6. Delete the topic.
-## Prerequisites
+## Prerequisites
- [Install and start Pulsar standalone](getting-started-standalone.md). This tutorial runs Pulsar 2.11 as an example.
diff --git a/docs/helm-deploy.md b/docs/helm-deploy.md
index fa03409b241..f342d89a2a3 100644
--- a/docs/helm-deploy.md
+++ b/docs/helm-deploy.md
@@ -61,7 +61,7 @@ The Pulsar Helm Chart is designed for production use. To use the Pulsar Helm Cha
--set volumes.persistence=false
```
-#### Affinity
+#### Affinity
By default, `anti-affinity` is enabled to ensure pods of the same component can run on different nodes.
diff --git a/docs/io-aerospike-sink.md b/docs/io-aerospike-sink.md
index 6d9fc3c5ae6..1bbc3c0a5fe 100644
--- a/docs/io-aerospike-sink.md
+++ b/docs/io-aerospike-sink.md
@@ -18,9 +18,9 @@ The configuration of the Aerospike sink connector has the following properties.
### Property
-| Name | Type|Required | Default | Description
+| Name | Type|Required | Default | Description
|------|----------|----------|---------|-------------|
-| `seedHosts` |String| true | No default value| The comma-separated list of one or more Aerospike cluster hosts.<br /><br />Each host can be specified as a valid IP address or hostname followed by an optional port number. |
+| `seedHosts` |String| true | No default value| The comma-separated list of one or more Aerospike cluster hosts.<br /><br />Each host can be specified as a valid IP address or hostname followed by an optional port number. |
| `keyspace` | String| true |No default value |The Aerospike namespace. |
| `columnName` | String | true| No default value|The Aerospike column name. |
|`userName`|String|false|NULL|The Aerospike username.|
diff --git a/docs/io-alluxio.md b/docs/io-alluxio.md
index f0e393a582f..6f121640513 100644
--- a/docs/io-alluxio.md
+++ b/docs/io-alluxio.md
@@ -20,7 +20,7 @@ The configuration of the Alluxio sink connector has the following properties.
### Property
-| Name | Type|Required | Default | Description
+| Name | Type|Required | Default | Description
|------|----------|----------|---------|-------------|
| `alluxioMasterHost` | String | true | "" (empty string) | The hostname of Alluxio master. |
| `alluxioMasterPort` | int | true | 19998 | The port that Alluxio master node runs on. |
diff --git a/docs/io-canal-source.md b/docs/io-canal-source.md
index bfa2123e0e6..ffaf543b2fe 100644
--- a/docs/io-canal-source.md
+++ b/docs/io-canal-source.md
@@ -33,7 +33,7 @@ The configuration of the Canal source connector has the following properties.
Before using the Canal connector, you can create a configuration file through one of the following methods.
-* JSON
+* JSON
```json
{
@@ -179,7 +179,7 @@ Here is an example of storing MySQL data using the configuration file as above.
--parallelism 1
```
-12. Consume data from MySQL.
+12. Consume data from MySQL.
```bash
docker exec -it pulsar-standalone /bin/bash
diff --git a/docs/io-cassandra-sink.md b/docs/io-cassandra-sink.md
index 0c564e6c416..ad2f438806a 100644
--- a/docs/io-cassandra-sink.md
+++ b/docs/io-cassandra-sink.md
@@ -18,7 +18,7 @@ The configuration of the Cassandra sink connector has the following properties.
### Property
-| Name | Type|Required | Default | Description
+| Name | Type|Required | Default | Description
|------|----------|----------|---------|-------------|
| `roots` | String|true | " " (empty string) | A comma-separated list of Cassandra hosts to connect to.|
| `keyspace` | String|true| " " (empty string)| The key space used for writing pulsar messages. <br /><br />**Note: `keyspace` should be created prior to a Cassandra sink.**|
diff --git a/docs/io-cdc-debezium.md b/docs/io-cdc-debezium.md
index aa1a7eadc76..16d7f379549 100644
--- a/docs/io-cdc-debezium.md
+++ b/docs/io-cdc-debezium.md
@@ -132,8 +132,8 @@ This example shows how to change the data of a MySQL table using the Pulsar Debe
3. Start the Pulsar Debezium connector in local run mode using one of the following methods.
- * Use the **JSON** configuration file as shown previously.
-
+ * Use the **JSON** configuration file as shown previously.
+
Make sure the NAR file is available at `connectors/pulsar-io-debezium-mysql-@pulsar:version@.nar`.
```bash
@@ -254,8 +254,8 @@ This example shows how to change the data of a PostgreSQL table using the Pulsar
3. Start the Pulsar Debezium connector in local run mode using one of the following methods.
- * Use the **JSON** configuration file as shown previously.
-
+ * Use the **JSON** configuration file as shown previously.
+
Make sure the NAR file is available at `connectors/pulsar-io-debezium-postgres-@pulsar:version@.nar`.
```bash
@@ -396,8 +396,8 @@ This example shows how to change the data of a MongoDB table using the Pulsar De
3. Start the Pulsar Debezium connector in local run mode using one of the following methods.
- * Use the **JSON** configuration file as shown previously.
-
+ * Use the **JSON** configuration file as shown previously.
+
Make sure the NAR file is available at `connectors/pulsar-io-mongodb-@pulsar:version@.nar`.
```bash
@@ -443,7 +443,7 @@ This example shows how to change the data of a MongoDB table using the Pulsar De
```
## FAQ
-
+
### Debezium postgres connector will hang when creating snap
```
diff --git a/docs/io-cli.md b/docs/io-cli.md
index 3a575e0f09c..f63818a9594 100644
--- a/docs/io-cli.md
+++ b/docs/io-cli.md
@@ -11,7 +11,7 @@ This page is deprecated and not updated anymore. For the latest and complete inf
:::
The `pulsar-admin` tool helps you manage Pulsar connectors.
-
+
## `sources`
An interface for managing Pulsar IO sources (ingress data into Pulsar).
diff --git a/docs/io-connectors.md b/docs/io-connectors.md
index 1f88d40f67a..8055df02a0d 100644
--- a/docs/io-connectors.md
+++ b/docs/io-connectors.md
@@ -4,7 +4,7 @@ title: Built-in connector
sidebar_label: "Built-in connector"
---
-Pulsar distribution includes a set of common connectors that have been packaged and tested with the rest of Apache Pulsar. These connectors import and export data from some of the most commonly used data systems.
+Pulsar distribution includes a set of common connectors that have been packaged and tested with the rest of Apache Pulsar. These connectors import and export data from some of the most commonly used data systems.
Using any of these connectors is as easy as writing a simple connector and running the connector locally or submitting the connector to a Pulsar Functions cluster.
@@ -26,7 +26,7 @@ Pulsar has various source connectors, which are sorted alphabetically as below.
* [Configuration](io-debezium-source.md#configuration)
* [Example](io-debezium-source.md#example-of-mysql)
-
+
* [Java class](https://github.com/apache/pulsar/blob/master/pulsar-io/debezium/mysql/src/main/java/org/apache/pulsar/io/debezium/mysql/DebeziumMysqlSource.java)
### Debezium PostgreSQL
@@ -61,11 +61,11 @@ Pulsar has various source connectors, which are sorted alphabetically as below.
* [Java class](https://github.com/apache/pulsar/blob/master/pulsar-io/debezium/mssql/src/main/java/org/apache/pulsar/io/debezium/mssql/DebeziumMsSqlSource.java)
-
+
### DynamoDB
* [Configuration](io-dynamodb-source.md#configuration)
-
+
* [Java class](https://github.com/apache/pulsar/blob/master/pulsar-io/dynamodb/src/main/java/org/apache/pulsar/io/dynamodb/DynamoDBSource.java)
### File
@@ -93,13 +93,13 @@ Pulsar has various source connectors, which are sorted alphabetically as below.
* [Configuration](io-kafka-source.md#configuration)
* [Example](io-kafka-source.md#usage)
-
+
* [Java class](https://github.com/apache/pulsar/blob/master/pulsar-io/kafka/src/main/java/org/apache/pulsar/io/kafka/KafkaAbstractSource.java)
### Kinesis
* [Configuration](io-kinesis-source.md#configuration)
-
+
* [Java class](https://github.com/apache/pulsar/blob/master/pulsar-io/kinesis/src/main/java/org/apache/pulsar/io/kinesis/KinesisSource.java)
### MongoDB
@@ -115,21 +115,21 @@ Pulsar has various source connectors, which are sorted alphabetically as below.
* [Example of TCP](io-netty-source.md#tcp)
* [Example of HTTP](io-netty-source.md#http)
-
+
* [Java class](https://github.com/apache/pulsar/blob/master/pulsar-io/netty/src/main/java/org/apache/pulsar/io/netty/NettySource.java)
### NSQ
* [Configuration](io-nsq-source.md#configuration)
-
+
* [Java class](https://github.com/apache/pulsar/blob/master/pulsar-io/nsq/src/main/java/org/apache/pulsar/io/nsq/NSQSource.java)
### RabbitMQ
* [Configuration](io-rabbitmq-source.md#configuration)
-
+
* [Java class](https://github.com/apache/pulsar/blob/master/pulsar-io/rabbitmq/src/main/java/org/apache/pulsar/io/rabbitmq/RabbitMQSource.java)
-
+
## Sink connector
Pulsar has various sink connectors, which are sorted alphabetically as below.
@@ -149,39 +149,39 @@ Pulsar has various sink connectors, which are sorted alphabetically as below.
### Cassandra
* [Configuration](io-cassandra-sink.md#configuration)
-
-* [Example](io-cassandra-sink.md#usage)
-
+
+* [Example](io-cassandra-sink.md#usage)
+
* [Java class](https://github.com/apache/pulsar/blob/master/pulsar-io/cassandra/src/main/java/org/apache/pulsar/io/cassandra/CassandraStringSink.java)
### ElasticSearch
* [Configuration](io-elasticsearch-sink.md#configuration)
-
+
* [Java class](https://github.com/apache/pulsar/blob/master/pulsar-io/elastic-search/src/main/java/org/apache/pulsar/io/elasticsearch/ElasticSearchSink.java)
### Flume
* [Configuration](io-flume-sink.md#configuration)
-
+
* [Java class](https://github.com/apache/pulsar/blob/master/pulsar-io/flume/src/main/java/org/apache/pulsar/io/flume/sink/StringSink.java)
### HBase
* [Configuration](io-hbase-sink.md#configuration)
-
+
* [Java class](https://github.com/apache/pulsar/blob/master/pulsar-io/hbase/src/main/java/org/apache/pulsar/io/hbase/HbaseAbstractConfig.java)
-
+
### HDFS2
* [Configuration](io-hdfs2-sink.md#configuration)
-
+
* [Java class](https://github.com/apache/pulsar/blob/master/pulsar-io/hdfs2/src/main/java/org/apache/pulsar/io/hdfs2/AbstractHdfsConnector.java)
### HDFS3
* [Configuration](io-hdfs3-sink.md#configuration)
-
+
* [Java class](https://github.com/apache/pulsar/blob/master/pulsar-io/hdfs3/src/main/java/org/apache/pulsar/io/hdfs3/AbstractHdfsConnector.java)
### HTTP
@@ -193,23 +193,23 @@ Pulsar has various sink connectors, which are sorted alphabetically as below.
### InfluxDB
* [Configuration](io-influxdb-sink.md#configuration)
-
+
* [Java class](https://github.com/apache/pulsar/blob/master/pulsar-io/influxdb/src/main/java/org/apache/pulsar/io/influxdb/InfluxDBGenericRecordSink.java)
### JDBC ClickHouse
* [Configuration](io-jdbc-sink.md#configuration)
-
+
* [Example](io-jdbc-sink.md#example-of-clickhouse)
-
+
* [Java class](https://github.com/apache/pulsar/blob/master/pulsar-io/jdbc/clickhouse/src/main/java/org/apache/pulsar/io/jdbc/ClickHouseJdbcAutoSchemaSink.java)
### JDBC MariaDB
* [Configuration](io-jdbc-sink.md#configuration)
-
+
* [Example](io-jdbc-sink.md#example-of-mariadb)
-
+
* [Java class](https://github.com/apache/pulsar/blob/master/pulsar-io/jdbc/mariadb/src/main/java/org/apache/pulsar/io/jdbc/MariadbJdbcAutoSchemaSink.java)
### JDBC OpenMLDB
@@ -223,52 +223,52 @@ Pulsar has various sink connectors, which are sorted alphabetically as below.
### JDBC PostgreSQL
* [Configuration](io-jdbc-sink.md#configuration)
-
+
* [Example](io-jdbc-sink.md#example-of-postgresql)
-
+
* [Java class](https://github.com/apache/pulsar/blob/master/pulsar-io/jdbc/postgres/src/main/java/org/apache/pulsar/io/jdbc/PostgresJdbcAutoSchemaSink.java)
-
+
### JDBC SQLite
* [Configuration](io-jdbc-sink.md#configuration)
-
+
* [Example](io-jdbc-sink.md#example-of-sqlite)
-
+
* [Java class](https://github.com/apache/pulsar/blob/master/pulsar-io/jdbc/sqlite/src/main/java/org/apache/pulsar/io/jdbc/SqliteJdbcAutoSchemaSink.java)
-
+
### Kafka
* [Configuration](io-kafka-sink.md#configuration)
-
+
* [Java class](https://github.com/apache/pulsar/blob/master/pulsar-io/kafka/src/main/java/org/apache/pulsar/io/kafka/KafkaAbstractSink.java)
-
+
### Kinesis
* [Configuration](io-kinesis-sink.md#configuration)
-
+
* [Java class](https://github.com/apache/pulsar/blob/master/pulsar-io/kinesis/src/main/java/org/apache/pulsar/io/kinesis/KinesisSink.java)
-
+
### MongoDB
* [Configuration](io-mongo-sink.md#configuration)
-
+
* [Java class](https://github.com/apache/pulsar/blob/master/pulsar-io/mongo/src/main/java/org/apache/pulsar/io/mongodb/MongoSink.java)
-
+
### RabbitMQ
* [Configuration](io-rabbitmq-sink.md#configuration)
-
+
* [Java class](https://github.com/apache/pulsar/blob/master/pulsar-io/rabbitmq/src/main/java/org/apache/pulsar/io/rabbitmq/RabbitMQSink.java)
-
+
### Redis
* [Configuration](io-redis-sink.md#configuration)
-
+
* [Java class](https://github.com/apache/pulsar/blob/master/pulsar-io/redis/src/main/java/org/apache/pulsar/io/redis/RedisAbstractConfig.java)
-
+
### Solr
* [Configuration](io-solr-sink.md#configuration)
-
+
* [Java class](https://github.com/apache/pulsar/blob/master/pulsar-io/solr/src/main/java/org/apache/pulsar/io/solr/SolrSinkConfig.java)
-
+
diff --git a/docs/io-debezium-source.md b/docs/io-debezium-source.md
index 383e4c273aa..4ed80d05138 100644
--- a/docs/io-debezium-source.md
+++ b/docs/io-debezium-source.md
@@ -169,8 +169,8 @@ This example shows how to change the data of a MySQL table using the Pulsar Debe
3. Start the Pulsar Debezium connector in local run mode using one of the following methods.
- * Use the **JSON** configuration file as shown previously.
-
+ * Use the **JSON** configuration file as shown previously.
+
Make sure the NAR file is available at `connectors/pulsar-io-debezium-mysql-@pulsar:version@.nar`.
```bash
@@ -185,7 +185,7 @@ This example shows how to change the data of a MySQL table using the Pulsar Debe
:::note
The Debezium connector saves data in the following 4 types of topics:
-
+
- One topic named with the database server name (`database.server.name`) for storing the database metadata messages, such as `public/default/database.server.name`.
- One topic (`database.history.pulsar.topic`) for storing the database history information. The connector writes and recovers DDL statements on this topic.
- One topic (`offset.storage.topic`) for storing the offset metadata messages. The connector saves the last successfully-committed offsets on this topic.
@@ -310,8 +310,8 @@ This example shows how to change the data of a PostgreSQL table using the Pulsar
3. Start the Pulsar Debezium connector in local run mode using one of the following methods.
- * Use the **JSON** configuration file as shown previously.
-
+ * Use the **JSON** configuration file as shown previously.
+
Make sure the NAR file is available at `connectors/pulsar-io-debezium-postgres-@pulsar:version@.nar`.
```bash
@@ -470,8 +470,8 @@ This example shows how to change the data of a MongoDB table using the Pulsar De
3. Start the Pulsar Debezium connector in local run mode using one of the following methods.
- * Use the **JSON** configuration file as shown previously.
-
+ * Use the **JSON** configuration file as shown previously.
+
Make sure the NAR file is available at `connectors/pulsar-io-mongodb-@pulsar:version@.nar`.
```bash
@@ -535,7 +535,7 @@ This example shows how to change the data of a MongoDB table using the Pulsar De
Oracle connector does not include Oracle JDBC driver and you need to package it with the connector.
Major reasons for not including the drivers are the variety of versions and Oracle licensing. It is recommended to use the driver provided with your Oracle DB installation, or you can [download](https://www.oracle.com/database/technologies/appdev/jdbc.html) one.
-Integration tests have an [example](https://github.com/apache/pulsar/blob/e2bc52d40450fa00af258c4432a5b71d50a5c6e0/tests/docker-images/latest-version-image/Dockerfile#L110-L122) of packaging the driver into the connector NAR file.
+Integration tests have an [example](https://github.com/apache/pulsar/blob/e2bc52d40450fa00af258c4432a5b71d50a5c6e0/tests/docker-images/latest-version-image/Dockerfile#L110-L122) of packaging the driver into the connector NAR file.
### Configuration
@@ -676,7 +676,7 @@ configs:
For the full list of configuration properties supported by Debezium, see [Debezium Connector for MS SQL](https://debezium.io/documentation/reference/1.5/connectors/sqlserver.html#sqlserver-connector-properties).
## FAQ
-
+
### Debezium postgres connector will hang when creating snap
```
diff --git a/docs/io-debug.md b/docs/io-debug.md
index 11c8fd1ff6d..2c76da7fa5b 100644
--- a/docs/io-debug.md
+++ b/docs/io-debug.md
@@ -64,7 +64,7 @@ For more information about the `localrun` command, see [`localrun`](reference-co
```bash
./bin/pulsar-admin sinks localrun \
- --archive connectors/pulsar-io-mongo-@pulsar:version@.nar \
+ --archive connectors/pulsar-io-mongo-@pulsar:version@.nar \
--tenant public --namespace default \
--inputs test-mongo \
--name pulsar-mongo-sink \
@@ -82,7 +82,7 @@ Use one of the following methods to get a connector log in localrun mode:
```
**Example**
-
+
The path of the Mongo sink connector is:
```bash
@@ -209,7 +209,7 @@ In cluster mode, multiple connectors can run on a worker. To find the log path o
Pulsar admin CLI helps you debug Pulsar connectors with the following subcommands:
* [`get`](#get)
* [`status`](#status)
-* [`topics stats`](#topics-stats)
+* [`topics stats`](#topics-stats)
**Create a Mongo sink**
@@ -269,7 +269,7 @@ For more information about the `get` command, see [`get`](reference-connector-ad
Use the `status` command to get the current status about the Mongo sink connector, such as the number of instance, the number of running instance, instanceId, workerId and so on.
```bash
-./bin/pulsar-admin sinks status
+./bin/pulsar-admin sinks status
--tenant public \
--namespace default \
--name pulsar-mongo-sink
@@ -369,23 +369,23 @@ For more information about the `topic stats` command, see [`topic stats`](pathna
:::
## Checklist
-This checklist indicates the major areas to check when you debug connectors. It is a reminder of what to look for to ensure a thorough review and an evaluation tool to get the status of connectors.
+This checklist indicates the major areas to check when you debug connectors. It is a reminder of what to look for to ensure a thorough review and an evaluation tool to get the status of connectors.
* Does Pulsar start successfully?
-
+
* Does the external service run normally?
-
+
* Is the nar package complete?
-
+
* Is the connector configuration file correct?
-
+
* In localrun mode, run a connector and check the printed information (connector log) on the console.
-
+
* In cluster mode:
-
+
* Use the `get` command to get the basic information.
-
+
* Use the `status` command to get the current status.
* Use the `topics stats` command to get the stats for a specified topic and its connected producers and consumers.
-
+
* Check the connector log.
* Enter into the external system and verify the result.
diff --git a/docs/io-develop.md b/docs/io-develop.md
index 21d8af108c2..f4e14598c43 100644
--- a/docs/io-develop.md
+++ b/docs/io-develop.md
@@ -11,12 +11,12 @@ import TabItem from '@theme/TabItem';
This guide describes how to develop Pulsar connectors to move data
-between Pulsar and other systems.
+between Pulsar and other systems.
Pulsar connectors are special [Pulsar Functions](functions-overview.md), so creating
-a Pulsar connector is similar to creating a Pulsar function.
+a Pulsar connector is similar to creating a Pulsar function.
-Pulsar connectors come in two types:
+Pulsar connectors come in two types:
| Type | Description | Example
|---|---|---
@@ -32,7 +32,7 @@ You can develop Pulsar source connectors and sink connectors.
Developing a source connector is to implement the {@inject: github:Source:/pulsar-io/core/src/main/java/org/apache/pulsar/io/core/Source.java}
interface, which means you need to implement the {@inject: github:open:/pulsar-io/core/src/main/java/org/apache/pulsar/io/core/Source.java} method and the {@inject: github:read:/pulsar-io/core/src/main/java/org/apache/pulsar/io/core/Source.java} method.
-1. Implement the {@inject: github:open:/pulsar-io/core/src/main/java/org/apache/pulsar/io/core/Source.java} method.
+1. Implement the {@inject: github:open:/pulsar-io/core/src/main/java/org/apache/pulsar/io/core/Source.java} method.
```java
/**
@@ -45,10 +45,10 @@ interface, which means you need to implement the {@inject: github:open:/pulsar-i
void open(final Map<String, Object> config, SourceContext sourceContext) throws Exception;
```
- This method is called when the source connector is initialized.
+ This method is called when the source connector is initialized.
+
+ In this method, you can retrieve all connector-specific settings through the passed-in `config` parameter and initialize all necessary resources.
- In this method, you can retrieve all connector-specific settings through the passed-in `config` parameter and initialize all necessary resources.
-
For example, a Kafka connector can create a Kafka client in this `open` method.
Besides, Pulsar runtime also provides a `SourceContext` for the connector to access runtime resources for tasks like collecting metrics. The implementation can save the `SourceContext` for future use.
@@ -67,7 +67,7 @@ interface, which means you need to implement the {@inject: github:open:/pulsar-i
If there is nothing to return, the implementation should be blocking rather than returning `null`.
- The returned {@inject: github:Record:/pulsar-functions/api-java/src/main/java/org/apache/pulsar/functions/api/Record.java} should encapsulate the following information, which is needed by the Pulsar IO runtime.
+ The returned {@inject: github:Record:/pulsar-functions/api-java/src/main/java/org/apache/pulsar/functions/api/Record.java} should encapsulate the following information, which is needed by the Pulsar IO runtime.
* {@inject: github:Record:/pulsar-functions/api-java/src/main/java/org/apache/pulsar/functions/api/Record.java} should provide the following variables:
@@ -107,14 +107,14 @@ If you want to implement a source that works with any schema, you can go with `b
```java
public class MySource implements Source<byte[]> {
public Record<byte[]> read() {
-
+
Schema wantedSchema = ....
- Record<byte[]> myRecord = new MyRecordImplementation();
+ Record<byte[]> myRecord = new MyRecordImplementation();
....
}
class MyRecordImplementation implements Record<byte[]> {
public byte[] getValue() {
- return ....encoded byte[]...that represents the value
+ return ....encoded byte[]...that represents the value
}
public Schema<byte[]> getSchema() {
return Schema.AUTO_PRODUCE_BYTES(wantedSchema);
@@ -168,9 +168,9 @@ Developing a sink connector **is similar to** developing a source connector, tha
During the implementation, you can decide how to write the `Value` and
the `Key` to the actual sink, and leverage all the provided information such as
- `PartitionId` and `RecordSequence` to achieve different processing guarantees.
+ `PartitionId` and `RecordSequence` to achieve different processing guarantees.
- You also need to ack records (if messages are sent successfully) or fail records (if messages fail to send).
+ You also need to ack records (if messages are sent successfully) or fail records (if messages fail to send).
#### Handle schema information
@@ -217,7 +217,7 @@ public class MySink implements Sink<GenericObject> {
KeyValue keyValue = (KeyValue) nativeObject;
Object key = keyValue.getKey();
Object value = keyValue.getValue();
-
+
KeyValueSchema keyValueSchema = (KeyValueSchema) schema;
Schema keySchema = keyValueSchema.getKeySchema();
Schema valueSchema = keyValueSchema.getValueSchema();
@@ -230,10 +230,10 @@ public class MySink implements Sink<GenericObject> {
## Test
Testing connectors can be challenging because Pulsar IO connectors interact with two systems
-that may be difficult to mock—Pulsar and the system to which the connector is connecting.
+that may be difficult to mock—Pulsar and the system to which the connector is connecting.
It is recommended to write special tests to test the connector functionalities as below
-while mocking the external service.
+while mocking the external service.
### Unit test
@@ -242,9 +242,9 @@ You can create unit tests for your connector.
### Integration test
Once you have written sufficient unit tests, you can add
-separate integration tests to verify end-to-end functionality.
+separate integration tests to verify end-to-end functionality.
-Pulsar uses [testcontainers](https://www.testcontainers.org/) **for all integration tests**.
+Pulsar uses [testcontainers](https://www.testcontainers.org/) **for all integration tests**.
:::tip
@@ -255,7 +255,7 @@ For more information about **how to create integration tests for Pulsar connecto
## Package
Once you've developed and tested your connector, you need to package it so that it can be submitted
-to a [Pulsar Functions](functions-overview.md) cluster.
+to a [Pulsar Functions](functions-overview.md) cluster.
There are two methods to
work with Pulsar Functions' runtime, that is, [NAR](#nar) and [uber JAR](#uber-jar).
@@ -268,28 +268,28 @@ all libraries your code uses and to your distribution.
:::
-> If you use the [NAR](#nar) method, the NAR plugin
+> If you use the [NAR](#nar) method, the NAR plugin
automatically creates a `DEPENDENCIES` file in the generated NAR package, including the proper
licensing and copyrights of all libraries of your connector.
>
> For the runtime Java version, please refer to [Pulsar Runtime Java Version Recommendation](https://github.com/apache/pulsar/blob/master/README.md#pulsar-runtime-java-version-recommendation) according to your target Pulsar version.
-### NAR
+### NAR
**NAR** stands for NiFi Archive, which is a custom packaging mechanism used by Apache NiFi, to provide
-a bit of Java ClassLoader isolation.
+a bit of Java ClassLoader isolation.
:::tip
-For more information about **how NAR works**, see [here](https://medium.com/hashmapinc/nifi-nar-files-explained-14113f7796fd).
+For more information about **how NAR works**, see [here](https://medium.com/hashmapinc/nifi-nar-files-explained-14113f7796fd).
:::
-Pulsar uses the same mechanism for packaging **all** [built-in connectors](io-connectors.md).
+Pulsar uses the same mechanism for packaging **all** [built-in connectors](io-connectors.md).
The easiest approach to package a Pulsar connector is to create a NAR package using [nifi-nar-maven-plugin](https://mvnrepository.com/artifact/org.apache.nifi/nifi-nar-maven-plugin).
-Include this [nifi-nar-maven-plugin](https://mvnrepository.com/artifact/org.apache.nifi/nifi-nar-maven-plugin) in your maven project for your connector as below.
+Include this [nifi-nar-maven-plugin](https://mvnrepository.com/artifact/org.apache.nifi/nifi-nar-maven-plugin) in your maven project for your connector as below.
```xml
<plugins>
@@ -363,7 +363,7 @@ Pulsar connectors enable you to move data in and out of Pulsar easily. It is imp
Here is an example of how to customize metrics for a Java connector.
````mdx-code-block
-<Tabs
+<Tabs
defaultValue="Java"
values={[{"label":"Java","value":"Java"}]}>
<TabItem value="Java">
diff --git a/docs/io-dynamodb-source.md b/docs/io-dynamodb-source.md
index 6ecda73180e..bae298e9495 100644
--- a/docs/io-dynamodb-source.md
+++ b/docs/io-dynamodb-source.md
@@ -23,7 +23,7 @@ The configuration of the DynamoDB source connector has the following properties.
### Property
-| Name | Type|Required | Default | Description
+| Name | Type|Required | Default | Description
|------|----------|----------|---------|-------------|
`initialPositionInStream`|InitialPositionInStream|false|LATEST|The position where the connector starts from.<br /><br />Below are the available options:<br /><br /><li>`AT_TIMESTAMP`: start from the record at or after the specified timestamp.<br /><br /></li><li>`LATEST`: start after the most recent data record.<br /><br /></li><li>`TRIM_HORIZON`: start from the oldest available data record.</li>
`startAtTime`|Date|false|" " (empty string)|If set to `AT_TIMESTAMP`, it specifies the point in time to start consumption.
@@ -44,7 +44,7 @@ The configuration of the DynamoDB source connector has the following properties.
Before using the DynamoDB source connector, you need to create a configuration file through one of the following methods.
-* JSON
+* JSON
```json
{
diff --git a/docs/io-elasticsearch-sink.md b/docs/io-elasticsearch-sink.md
index a33d97611d7..ce41502d8e3 100644
--- a/docs/io-elasticsearch-sink.md
+++ b/docs/io-elasticsearch-sink.md
@@ -19,7 +19,7 @@ To deploy an Elasticsearch sink connector, the following are required:
- Elasticsearch 7 (Elasticsearch 8 will be supported in the future)
- OpenSearch 1.x
-## Feature
+## Feature
### Handle data
@@ -50,7 +50,7 @@ Since Pulsar 2.9.0, you can use bulk writes by setting the `bulkEnabled` propert
### Enable secure connections via TLS
-Since Pulsar 2.9.0, you can enable secure connections with TLS.
+Since Pulsar 2.9.0, you can enable secure connections with TLS.
## Configuration
@@ -119,7 +119,7 @@ Before using the Elasticsearch sink connector, you need to create a configuratio
#### For Elasticsearch After 6.2
-* JSON
+* JSON
```json
{
@@ -144,7 +144,7 @@ Before using the Elasticsearch sink connector, you need to create a configuratio
#### For Elasticsearch Before 6.2
-* JSON
+* JSON
```json
{
@@ -186,7 +186,7 @@ Before using the Elasticsearch sink connector, you need to create a configuratio
Make sure the NAR file is available at `connectors/pulsar-io-elastic-search-@pulsar:version@.nar`.
3. Start the Pulsar Elasticsearch connector in local run mode using one of the following methods.
- * Use the **JSON** configuration as shown previously.
+ * Use the **JSON** configuration as shown previously.
```bash
bin/pulsar-admin sinks localrun \
@@ -217,13 +217,13 @@ Before using the Elasticsearch sink connector, you need to create a configuratio
```
5. Check documents in Elasticsearch.
-
+
* refresh the index
```bash
curl -s http://localhost:9200/my_index/_refresh
```
-
+
* search documents
```bash
diff --git a/docs/io-file-source.md b/docs/io-file-source.md
index 1c63b2c3068..97b26623155 100644
--- a/docs/io-file-source.md
+++ b/docs/io-file-source.md
@@ -18,7 +18,7 @@ The configuration of the file source connector has the following properties.
### Property
-| Name | Type|Required | Default | Description
+| Name | Type|Required | Default | Description
|------|----------|----------|---------|-------------|
| `inputDirectory` | String|true | No default value|The input directory to pull files. |
| `recurse` | Boolean|false | true | Whether to pull files from subdirectory or not.|
@@ -38,7 +38,7 @@ The configuration of the file source connector has the following properties.
Before using the File source connector, you need to create a configuration file through one of the following methods.
-* JSON
+* JSON
```json
{
@@ -117,7 +117,7 @@ Here is an example of using the File source connecter.
6. Copy it to the `connectors` folder, then restart the container.
```bash
- docker cp pulsar-io-file-{version}.nar pulsar-standalone:/pulsar/connectors/
+ docker cp pulsar-io-file-{version}.nar pulsar-standalone:/pulsar/connectors/
docker restart pulsar-standalone
```
@@ -125,7 +125,7 @@ Here is an example of using the File source connecter.
```bash
docker exec -it pulsar-standalone /bin/bash
-
+
./bin/pulsar-admin sources localrun \
--archive /pulsar/connectors/pulsar-io-file-{version}.nar \
--name file-test \
diff --git a/docs/io-flume-sink.md b/docs/io-flume-sink.md
index f03597baf69..db9696d3bab 100644
--- a/docs/io-flume-sink.md
+++ b/docs/io-flume-sink.md
@@ -18,7 +18,7 @@ The configuration of the Flume sink connector has the following properties.
### Property
-| Name | Type|Required | Default | Description
+| Name | Type|Required | Default | Description
|------|----------|----------|---------|-------------|
`name`|String|true|"" (empty string)|The name of the agent.
`confFile`|String|true|"" (empty string)|The configuration file.
@@ -32,7 +32,7 @@ Before using the Flume sink connector, you need to create a configuration file t
> For more information about the `sink.conf` in the example below, see [here](https://github.com/apache/pulsar/blob/master/pulsar-io/flume/src/main/resources/flume/sink.conf).
-* JSON
+* JSON
```json
{
diff --git a/docs/io-flume-source.md b/docs/io-flume-source.md
index 52ae898dc39..be4d0a685ee 100644
--- a/docs/io-flume-source.md
+++ b/docs/io-flume-source.md
@@ -18,7 +18,7 @@ The configuration of the Flume source connector has the following properties.
### Property
-| Name | Type|Required | Default | Description
+| Name | Type|Required | Default | Description
|------|----------|----------|---------|-------------|
`name`|String|true|"" (empty string)|The name of the agent.
`confFile`|String|true|"" (empty string)|The configuration file.
@@ -32,7 +32,7 @@ Before using the Flume source connector, you need to create a configuration file
> For more information about the `source.conf` in the example below, see [here](https://github.com/apache/pulsar/blob/master/pulsar-io/flume/src/main/resources/flume/source.conf).
-* JSON
+* JSON
```json
{
diff --git a/docs/io-hbase-sink.md b/docs/io-hbase-sink.md
index ae69a468116..53e4dca7a97 100644
--- a/docs/io-hbase-sink.md
+++ b/docs/io-hbase-sink.md
@@ -35,7 +35,7 @@ The configuration of the HBase sink connector has the following properties.
Before using the HBase sink connector, you need to create a configuration file through one of the following methods.
-* JSON
+* JSON
```json
{
@@ -66,4 +66,3 @@ Before using the HBase sink connector, you need to create a configuration file t
qualifierNames: [ 'name', 'address', 'age']
```
-
\ No newline at end of file
diff --git a/docs/io-hdfs2-sink.md b/docs/io-hdfs2-sink.md
index 08f576d656a..3203c9dad92 100644
--- a/docs/io-hdfs2-sink.md
+++ b/docs/io-hdfs2-sink.md
@@ -18,7 +18,7 @@ The configuration of the HDFS2 sink connector has the following properties.
### Property
-| Name | Type|Required | Default | Description
+| Name | Type|Required | Default | Description
|------|----------|----------|---------|-------------|
| `hdfsConfigResources` | String|true| None | A file or a comma-separated list containing the Hadoop file system configuration.<br /><br />**Example**<br />'core-site.xml'<br />'hdfs-site.xml' |
| `directory` | String | true | None|The HDFS directory where files read from or written to. |
@@ -30,14 +30,14 @@ The configuration of the HDFS2 sink connector has the following properties.
| `fileExtension` | String| true, if `compression` is set to `None`. | None | The extension added to the files written to HDFS.<br /><br />**Example**<br />'.txt'<br /> '.seq' |
| `separator` | char|false |None |The character used to separate records in a text file. <br /><br />If no value is provided, the contents from all records are concatenated together in one continuous byte array. |
| `syncInterval` | long| false |0| The interval between calls to flush data to HDFS disk in milliseconds. |
-| `maxPendingRecords` |int| false|Integer.MAX_VALUE | The maximum number of records that hold in memory before acking. <br /><br />Setting this property to 1 makes every record send to disk before the record is acked.<br /><br />Setting this property to a higher value allows buffering records before flushing them to disk.
+| `maxPendingRecords` |int| false|Integer.MAX_VALUE | The maximum number of records that hold in memory before acking. <br /><br />Setting this property to 1 makes every record send to disk before the record is acked.<br /><br />Setting this property to a higher value allows buffering records before flushing them to disk.
| `subdirectoryPattern` | String | false | None | A subdirectory associated with the created time of the sink.<br />The pattern is the formatted pattern of `directory`'s subdirectory.<br /><br />See [DateTimeFormatter](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html) for pattern's syntax. |
### Example
Before using the HDFS2 sink connector, you need to create a configuration file through one of the following methods.
-* JSON
+* JSON
```json
{
diff --git a/docs/io-hdfs3-sink.md b/docs/io-hdfs3-sink.md
index 09120b2d5dd..ba7fdba8ed2 100644
--- a/docs/io-hdfs3-sink.md
+++ b/docs/io-hdfs3-sink.md
@@ -18,7 +18,7 @@ The configuration of the HDFS3 sink connector has the following properties.
### Property
-| Name | Type|Required | Default | Description
+| Name | Type|Required | Default | Description
|------|----------|----------|---------|-------------|
| `hdfsConfigResources` | String|true| None | A file or a comma-separated list containing the Hadoop file system configuration.<br /><br />**Example**<br />'core-site.xml'<br />'hdfs-site.xml' |
| `directory` | String | true | None|The HDFS directory where files read from or written to. |
@@ -30,13 +30,13 @@ The configuration of the HDFS3 sink connector has the following properties.
| `fileExtension` | String| true, if `compression` is set to `None`. | None| The extension added to the files written to HDFS.<br /><br />**Example**<br />'.txt'<br /> '.seq' |
| `separator` | char|false |None |The character used to separate records in a text file. <br /><br />If no value is provided, the contents from all records are concatenated together in one continuous byte array. |
| `syncInterval` | long| false |0| The interval between calls to flush data to HDFS disk in milliseconds. |
-| `maxPendingRecords` |int| false|Integer.MAX_VALUE | The maximum number of records that hold in memory before acking. <br /><br />Setting this property to 1 makes every record send to disk before the record is acked.<br /><br />Setting this property to a higher value allows buffering records before flushing them to disk.
+| `maxPendingRecords` |int| false|Integer.MAX_VALUE | The maximum number of records that hold in memory before acking. <br /><br />Setting this property to 1 makes every record send to disk before the record is acked.<br /><br />Setting this property to a higher value allows buffering records before flushing them to disk.
### Example
Before using the HDFS3 sink connector, you need to create a configuration file through one of the following methods.
-* JSON
+* JSON
```json
{
diff --git a/docs/io-http-sink.md b/docs/io-http-sink.md
index 6d6650a8634..e16880a4d17 100644
--- a/docs/io-http-sink.md
+++ b/docs/io-http-sink.md
@@ -38,7 +38,7 @@ The configuration of the HTTP sink connector has the following properties.
Before using the HTTP sink connector, you need to create a configuration file through one of the following methods.
-* JSON
+* JSON
```json
{
diff --git a/docs/io-influxdb-sink.md b/docs/io-influxdb-sink.md
index c3e0da41642..d7c551e6c26 100644
--- a/docs/io-influxdb-sink.md
+++ b/docs/io-influxdb-sink.md
@@ -20,7 +20,7 @@ The configuration of the InfluxDB sink connector has the following properties.
### Property
#### InfluxDBv2
-| Name | Type|Required | Default | Description
+| Name | Type|Required | Default | Description
|------|----------|----------|---------|-------------|
| `influxdbUrl` |String| true|" " (empty string) | The URL of the InfluxDB instance. |
| `token` | String|true| " " (empty string) |The authentication token used to authenticate to InfluxDB. |
@@ -33,7 +33,7 @@ The configuration of the InfluxDB sink connector has the following properties.
| `batchSize` | int|false|200| The batch size of writing to InfluxDB. |
#### InfluxDBv1
-| Name | Type|Required | Default | Description
+| Name | Type|Required | Default | Description
|------|----------|----------|---------|-------------|
| `influxdbUrl` |String| true|" " (empty string) | The URL of the InfluxDB instance. |
| `username` | String|false| " " (empty string) |The username used to authenticate to InfluxDB. |
@@ -85,7 +85,7 @@ Before using the InfluxDB sink connector, you need to create a configuration fil
#### InfluxDBv1
-* JSON
+* JSON
```json
{
diff --git a/docs/io-jdbc-sink.md b/docs/io-jdbc-sink.md
index 528edf01df8..966cfd69c69 100644
--- a/docs/io-jdbc-sink.md
+++ b/docs/io-jdbc-sink.md
@@ -15,7 +15,7 @@ The JDBC sink connectors allow pulling messages from Pulsar topics and persist t
> Currently, INSERT, DELETE and UPDATE operations are supported.
> SQLite, MariaDB and PostgreSQL also support UPSERT operations and idempotent writes.
-## Configuration
+## Configuration
The configuration of all JDBC sink connectors has the following properties.
@@ -33,13 +33,13 @@ The configuration of all JDBC sink connectors has the following properties.
| `batchSize` | int | false | 200 | The batch size of updates made to the database. |
| `insertMode` | enum( INSERT,UPSERT,UPDATE) | false | INSERT | If it is configured as UPSERT, the sink uses upsert semantics rather than plain INSERT/UPDATE statements. Upsert semantics refer to atomically adding a new row or updating the existing row if there is a primary key constraint violation, which provides idempotence. |
| `nullValueAction` | enum(FAIL, DELETE) | false | FAIL | How to handle records with NULL values. Possible options are `DELETE` or `FAIL`. |
-| `useTransactions` | boolean | false | true | Enable transactions of the database.
+| `useTransactions` | boolean | false | true | Enable transactions of the database.
| `excludeNonDeclaredFields` | boolean | false | false | All the table fields are discovered automatically. `excludeNonDeclaredFields` indicates if the table fields not explicitly listed in `nonKey` and `key` must be included in the query. By default all the table fields are included. To leverage of table fields defaults during insertion, it is suggested to set this value to `false`. |
| `useJdbcBatch` | boolean | false | false | Use the JDBC batch API. This option is suggested to improve write performance. |
### Example of ClickHouse
-* JSON
+* JSON
```json
{
@@ -60,7 +60,7 @@ The configuration of all JDBC sink connectors has the following properties.
namespace: "default"
name: "jdbc-clickhouse-sink"
inputs: [ "persistent://public/default/jdbc-clickhouse-topic" ]
- sinkType: "jdbc-clickhouse"
+ sinkType: "jdbc-clickhouse"
configs:
userName: "clickhouse"
password: "password"
@@ -71,7 +71,7 @@ The configuration of all JDBC sink connectors has the following properties.
### Example of MariaDB
-* JSON
+* JSON
```json
{
@@ -91,7 +91,7 @@ The configuration of all JDBC sink connectors has the following properties.
namespace: "default"
name: "jdbc-mariadb-sink"
inputs: [ "persistent://public/default/jdbc-mariadb-topic" ]
- sinkType: "jdbc-mariadb"
+ sinkType: "jdbc-mariadb"
configs:
userName: "mariadb"
password: "password"
@@ -119,7 +119,7 @@ The configuration of all JDBC sink connectors has the following properties.
namespace: "default"
name: "jdbc-openmldb-sink"
inputs: [ "persistent://public/default/jdbc-openmldb-topic" ]
- sinkType: "jdbc-openmldb"
+ sinkType: "jdbc-openmldb"
configs:
jdbcUrl: "jdbc:openmldb:///pulsar_openmldb_db?zk=localhost:6181&zkPath=/openmldb"
tableName: "pulsar_openmldb_jdbc_sink"
@@ -129,7 +129,7 @@ The configuration of all JDBC sink connectors has the following properties.
Before using the JDBC PostgreSQL sink connector, you need to create a configuration file through one of the following methods.
-* JSON
+* JSON
```json
{
@@ -149,7 +149,7 @@ Before using the JDBC PostgreSQL sink connector, you need to create a configurat
namespace: "default"
name: "jdbc-postgres-sink"
inputs: [ "persistent://public/default/jdbc-postgres-topic" ]
- sinkType: "jdbc-postgres"
+ sinkType: "jdbc-postgres"
configs:
userName: "postgres"
password: "password"
@@ -161,7 +161,7 @@ For more information on **how to use this JDBC sink connector**, see [connect Pu
### Example of SQLite
-* JSON
+* JSON
```json
{
@@ -179,7 +179,7 @@ For more information on **how to use this JDBC sink connector**, see [connect Pu
namespace: "default"
name: "jdbc-sqlite-sink"
inputs: [ "persistent://public/default/jdbc-sqlite-topic" ]
- sinkType: "jdbc-sqlite"
+ sinkType: "jdbc-sqlite"
configs:
jdbcUrl: "jdbc:sqlite:db.sqlite"
tableName: "pulsar_sqlite_jdbc_sink"
diff --git a/docs/io-kafka-sink.md b/docs/io-kafka-sink.md
index b8c0a0a135f..7edd32dc5da 100644
--- a/docs/io-kafka-sink.md
+++ b/docs/io-kafka-sink.md
@@ -20,7 +20,7 @@ The configuration of the Kafka sink connector has the following parameters.
### Property
-| Name | Type| Required | Default | Description
+| Name | Type| Required | Default | Description
|------|----------|---------|-------------|-------------|
| `bootstrapServers` |String| true | " " (empty string) | A comma-separated list of host and port pairs for establishing the initial connection to the Kafka cluster. |
| `securityProtocol` |String| false | " " (empty string) | The protocol used to communicate with Kafka brokers. |
@@ -43,7 +43,7 @@ The configuration of the Kafka sink connector has the following parameters.
Before using the Kafka sink connector, you need to create a configuration file through one of the following methods.
-* JSON
+* JSON
```json
{
@@ -58,14 +58,14 @@ Before using the Kafka sink connector, you need to create a configuration file t
"security.protocol": "SASL_PLAINTEXT",
"sasl.mechanism": "GSSAPI",
"sasl.kerberos.service.name": "kafka",
- "acks": "all"
+ "acks": "all"
}
}
}
```
-
+
* YAML
-
+
```yaml
configs:
bootstrapServers: "localhost:6667"
@@ -78,5 +78,5 @@ Before using the Kafka sink connector, you need to create a configuration file t
security.protocol: "SASL_PLAINTEXT"
sasl.mechanism: "GSSAPI"
sasl.kerberos.service.name: "kafka"
- acks: "all"
+ acks: "all"
```
diff --git a/docs/io-kafka-source.md b/docs/io-kafka-source.md
index a7df01e43d7..a223ea9efd5 100644
--- a/docs/io-kafka-source.md
+++ b/docs/io-kafka-source.md
@@ -20,7 +20,7 @@ The configuration of the Kafka source connector has the following properties.
### Property
-| Name | Type| Required | Default | Description
+| Name | Type| Required | Default | Description
|------|----------|---------|-------------|-------------|
| `bootstrapServers` |String| true | " " (empty string) | A comma-separated list of host and port pairs for establishing the initial connection to the Kafka cluster. |
| `securityProtocol` |String| false | " " (empty string) | The protocol used to communicate with Kafka brokers. |
@@ -55,7 +55,7 @@ and sets it properly on the Pulsar topic.
In this case, you need to set `schema.registry.url` inside of the `consumerConfigProperties` configuration entry
of the source.
-If `keyDeserializationClass` is not `org.apache.kafka.common.serialization.StringDeserializer`, it means
+If `keyDeserializationClass` is not `org.apache.kafka.common.serialization.StringDeserializer`, it means
that you do not have a string as a key and the Kafka Source uses the KeyValue schema type with the SEPARATED encoding.
Pulsar supports the AVRO format for keys.
@@ -109,18 +109,18 @@ This example describes how to use the Kafka source connector to feed data from K
#### Prerequisites
-- Install [Docker](https://docs.docker.com/get-docker/)(Community Edition).
+- Install [Docker](https://docs.docker.com/get-docker/)(Community Edition).
#### Steps
-1. Download and start the Confluent Platform.
+1. Download and start the Confluent Platform.
For details, see the [documentation](https://docs.confluent.io/platform/current/quickstart/ce-docker-quickstart.html#step-1-download-and-start-cp) to install the Kafka service locally.
2. Pull a Pulsar image and start Pulsar in standalone mode.
```bash
docker pull apachepulsar/pulsar:latest
-
+
docker run -d -it -p 6650:6650 -p 8080:8080 -v $PWD/data:/pulsar/data --name pulsar-kafka-standalone apachepulsar/pulsar:latest bin/pulsar standalone
```
@@ -162,7 +162,7 @@ This example describes how to use the Kafka source connector to feed data from K
```bash
docker exec -it pulsar-kafka-standalone /bin/bash
-
+
./bin/pulsar-admin source localrun \
--archive ./pulsar-io-kafka.nar \
--tenant public \
diff --git a/docs/io-kinesis-sink.md b/docs/io-kinesis-sink.md
index 87cad4e13cb..a57c65e80b3 100644
--- a/docs/io-kinesis-sink.md
+++ b/docs/io-kinesis-sink.md
@@ -35,13 +35,13 @@ The configuration of the Kinesis sink connector has the following property.
The following are built-in `AwsCredentialProviderPlugin` plugins:
* `org.apache.pulsar.io.aws.AwsDefaultProviderChainPlugin`
-
- This plugin takes no configuration, it uses the default AWS provider chain.
-
+
+ This plugin takes no configuration, it uses the default AWS provider chain.
+
For more information, see [AWS documentation](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/credentials.html#credentials-default).
* `org.apache.pulsar.io.aws.STSAssumeRoleProviderPlugin`
-
+
This plugin takes a configuration (via the `awsCredentialPluginParam`) that describes a role to assume when running the KCL.
This configuration takes the form of a small JSON document like:
diff --git a/docs/io-kinesis-source.md b/docs/io-kinesis-source.md
index 1f3fee372b2..386a5486c75 100644
--- a/docs/io-kinesis-source.md
+++ b/docs/io-kinesis-source.md
@@ -26,7 +26,7 @@ The configuration of the Kinesis source connector has the following properties.
### Property
-| Name | Type|Required | Default | Description
+| Name | Type|Required | Default | Description
|------|----------|----------|---------|-------------|
`initialPositionInStream`|InitialPositionInStream|false|LATEST|The position where the connector starts from.<br /><br />Below are the available options:<br /><br /><li>`AT_TIMESTAMP`: start from the record at or after the specified timestamp.<br /><br /></li><li>`LATEST`: start after the most recent data record.<br /><br /></li><li>`TRIM_HORIZON`: start from the oldest available data record.</li>
`startAtTime`|Date|false|" " (empty string)|If set to `AT_TIMESTAMP`, it specifies the point in time to start consumption.
@@ -48,7 +48,7 @@ The configuration of the Kinesis source connector has the following properties.
Before using the Kinesis source connector, you need to create a configuration file through one of the following methods.
-* JSON
+* JSON
```json
{
diff --git a/docs/io-mongo-sink.md b/docs/io-mongo-sink.md
index 4c16809c969..0425f16c29b 100644
--- a/docs/io-mongo-sink.md
+++ b/docs/io-mongo-sink.md
@@ -18,7 +18,7 @@ The configuration of the MongoDB sink connector has the following properties.
### Property
-| Name | Type|Required | Default | Description
+| Name | Type|Required | Default | Description
|------|----------|----------|---------|-------------|
| `mongoUri` | String| true| " " (empty string) | The MongoDB URI to which the connector connects. <br /><br />For more information, see [connection string URI format](https://docs.mongodb.com/manual/reference/connection-string/). |
| `database` | String| true| " " (empty string)| The database name to which the collection belongs. |
diff --git a/docs/io-netty-source.md b/docs/io-netty-source.md
index b35b60c90b9..c4b26a4ead5 100644
--- a/docs/io-netty-source.md
+++ b/docs/io-netty-source.md
@@ -20,7 +20,7 @@ The configuration of the Netty source connector has the following properties.
### Property
-| Name | Type|Required | Default | Description
+| Name | Type|Required | Default | Description
|------|----------|----------|---------|-------------|
| `type` |String| true |tcp | The network protocol over which data is transmitted to netty. <br /><br />Below are the available options:<br /><li>tcp</li><li>http</li><li>udp </li>|
| `host` | String|true | 127.0.0.1 | The host name or address on which the source instance listen. |
@@ -32,7 +32,7 @@ The configuration of the Netty source connector has the following properties.
Before using the Netty source connector, you need to create a configuration file through one of the following methods.
-* JSON
+* JSON
```json
{
@@ -55,11 +55,11 @@ Before using the Netty source connector, you need to create a configuration file
numberOfThreads: 1
```
-## Usage
+## Usage
The following examples show how to use the Netty source connector with TCP and HTTP.
-### TCP
+### TCP
1. Start Pulsar standalone.
@@ -136,7 +136,7 @@ The following examples show how to use the Netty source connector with TCP and H
world
```
-### HTTP
+### HTTP
1. Start Pulsar standalone.
diff --git a/docs/io-nsq-source.md b/docs/io-nsq-source.md
index 287534f6763..fa2b2ea274b 100644
--- a/docs/io-nsq-source.md
+++ b/docs/io-nsq-source.md
@@ -10,7 +10,7 @@ You can download all the Pulsar connectors on [download page](pathname:///downlo
::::
-The NSQ source connector receives messages from NSQ topics
+The NSQ source connector receives messages from NSQ topics
and writes messages to Pulsar topics.
## Configuration
@@ -19,7 +19,7 @@ The configuration of the NSQ source connector has the following properties.
### Property
-| Name | Type|Required | Default | Description
+| Name | Type|Required | Default | Description
|------|----------|----------|---------|-------------|
| `lookupds` |String| true | " " (empty string) | A comma-separated list of nsqlookupds to connect to. |
| `topic` | String|true | " " (empty string) | The NSQ topic to transport. |
diff --git a/docs/io-overview.md b/docs/io-overview.md
index 66b90466918..529ff7f9b4a 100644
--- a/docs/io-overview.md
+++ b/docs/io-overview.md
@@ -43,7 +43,7 @@ For the complete list of Pulsar built-in sink connectors, see [sink connector](i
## Processing guarantee
Processing guarantees are used to handle errors when writing messages to Pulsar topics.
-
+
> Pulsar connectors and Functions use the **same** processing guarantees as below.
Delivery semantic | Description
@@ -63,14 +63,14 @@ Delivery semantic | Description
When creating a connector, you can set the processing guarantee with the following semantics:
* ATLEAST_ONCE
-
+
* ATMOST_ONCE
-
+
* EFFECTIVELY_ONCE
> If `--processing-guarantees` is not specified when creating a connector, the default semantic is `ATLEAST_ONCE`.
-Take **Admin CLI** as an example. For more information about **REST API** or **JAVA Admin API**, see [here](io-use.md#create).
+Take **Admin CLI** as an example. For more information about **REST API** or **JAVA Admin API**, see [here](io-use.md#create).
````mdx-code-block
<Tabs groupId="io-choice"
@@ -103,17 +103,17 @@ For more information about the options of `pulsar-admin sinks create`, see [here
</Tabs>
````
-### Update
+### Update
After creating a connector, you can update the processing guarantee with the following semantics:
* ATLEAST_ONCE
-
+
* ATMOST_ONCE
-
+
* EFFECTIVELY_ONCE
-
-Take **Admin CLI** as an example. For more information about **REST API** or **JAVA Admin API**, see [here](io-use.md#create).
+
+Take **Admin CLI** as an example. For more information about **REST API** or **JAVA Admin API**, see [here](io-use.md#create).
````mdx-code-block
<Tabs groupId="io-choice"
diff --git a/docs/io-quickstart.md b/docs/io-quickstart.md
index 73292cc7de2..41fde2c9a66 100644
--- a/docs/io-quickstart.md
+++ b/docs/io-quickstart.md
@@ -164,7 +164,7 @@ This example uses `cassandra` Docker image to start a single-node Cassandra clus
```bash
docker exec -ti cassandra cqlsh localhost
```
-
+
**Output**
```
Connected to Test Cluster at localhost:9042.
diff --git a/docs/io-rabbitmq-sink.md b/docs/io-rabbitmq-sink.md
index bffbde6cc6c..f2f45ac1e00 100644
--- a/docs/io-rabbitmq-sink.md
+++ b/docs/io-rabbitmq-sink.md
@@ -13,14 +13,14 @@ You can download all the Pulsar connectors on [download page](pathname:///downlo
The RabbitMQ sink connector pulls messages from Pulsar topics and persists the messages to RabbitMQ queues.
-## Configuration
+## Configuration
The configuration of the RabbitMQ sink connector has the following properties.
### Property
-| Name | Type|Required | Default | Description
+| Name | Type|Required | Default | Description
|------|----------|----------|---------|-------------|
| `connectionName` |String| true | " " (empty string) | The connection name. |
| `host` | String| true | " " (empty string) | The RabbitMQ host. |
@@ -42,7 +42,7 @@ The configuration of the RabbitMQ sink connector has the following properties.
Before using the RabbitMQ sink connector, you need to create a configuration file through one of the following methods.
-* JSON
+* JSON
```json
{
diff --git a/docs/io-rabbitmq-source.md b/docs/io-rabbitmq-source.md
index ee0563f17f3..4322871df98 100644
--- a/docs/io-rabbitmq-source.md
+++ b/docs/io-rabbitmq-source.md
@@ -12,13 +12,13 @@ You can download all the Pulsar connectors on [download page](pathname:///downlo
The RabbitMQ source connector receives messages from RabbitMQ clusters and writes messages to Pulsar topics.
-## Configuration
+## Configuration
The configuration of the RabbitMQ source connector has the following properties.
### Property
-| Name | Type|Required | Default | Description
+| Name | Type|Required | Default | Description
|------|----------|----------|---------|-------------|
| `connectionName` |String| true | " " (empty string) | The connection name. |
| `host` | String| true | " " (empty string) | The RabbitMQ host. |
@@ -40,7 +40,7 @@ The configuration of the RabbitMQ source connector has the following properties.
Before using the RabbitMQ source connector, you need to create a configuration file through one of the following methods.
-* JSON
+* JSON
```json
{
diff --git a/docs/io-redis-sink.md b/docs/io-redis-sink.md
index 391905ddfef..7a1de907426 100644
--- a/docs/io-redis-sink.md
+++ b/docs/io-redis-sink.md
@@ -20,7 +20,7 @@ The configuration of the Redis sink connector has the following properties.
### Property
-| Name | Type|Required | Default | Description
+| Name | Type|Required | Default | Description
|------|----------|----------|---------|-------------|
| `redisHosts` |String|true|" " (empty string) | A comma-separated list of Redis hosts to connect to. |
| `redisPassword` |String|false|" " (empty string) | The password used to connect to Redis. |
@@ -89,10 +89,10 @@ This example shows how to write records to a Redis database using the Pulsar Red
```
Make sure the NAR file is available at `connectors/pulsar-io-redis-@pulsar:version@.nar`.
-
+
3. Start the Pulsar Redis connector in local run mode using one of the following methods.
- * Use the **JSON** configuration file as shown previously.
+ * Use the **JSON** configuration file as shown previously.
```bash
bin/pulsar-admin sinks localrun \
diff --git a/docs/io-solr-sink.md b/docs/io-solr-sink.md
index a9c34b3f445..e00c37ebd20 100644
--- a/docs/io-solr-sink.md
+++ b/docs/io-solr-sink.md
@@ -20,7 +20,7 @@ The configuration of the Solr sink connector has the following properties.
### Property
-| Name | Type|Required | Default | Description
+| Name | Type|Required | Default | Description
|------|----------|----------|---------|-------------|
| `solrUrl` | String|true|" " (empty string) | <li>Comma-separated zookeeper hosts with chroot used in the SolrCloud mode. <br />**Example**<br />`localhost:2181,localhost:2182/chroot` <br /><br /></li><li>URL to connect to Solr used in standalone mode. <br />**Example**<br />`localhost:8983/solr` </li>|
| `solrMode` | String|true|SolrCloud| The client mode when interacting with the Solr cluster. <br /><br />Below are the available options:<br /><li>Standalone<br /></li><li> SolrCloud</li>|
diff --git a/docs/io-twitter-source.md b/docs/io-twitter-source.md
index a560d5a8fba..91e649aa709 100644
--- a/docs/io-twitter-source.md
+++ b/docs/io-twitter-source.md
@@ -10,7 +10,7 @@ You can download all the Pulsar connectors on [download page](pathname:///downlo
::::
-The Twitter Firehose source connector receives tweets from Twitter Firehose and
+The Twitter Firehose source connector receives tweets from Twitter Firehose and
writes the tweets to Pulsar topics.
## Configuration
@@ -19,7 +19,7 @@ The configuration of the Twitter Firehose source connector has the following pro
### Property
-| Name | Type|Required | Default | Description
+| Name | Type|Required | Default | Description
|------|----------|----------|---------|-------------|
| `consumerKey` | String|true | " " (empty string) | The twitter OAuth consumer key.<br /><br />For more information, see [Access tokens](https://developer.twitter.com/en/docs/basics/authentication/guides/access-tokens). |
| `consumerSecret` | String |true | " " (empty string) | The twitter OAuth consumer secret. |
diff --git a/docs/kubernetes-helm.md b/docs/kubernetes-helm.md
index e8bc8070de1..1d6ad923fd4 100644
--- a/docs/kubernetes-helm.md
+++ b/docs/kubernetes-helm.md
@@ -58,7 +58,7 @@ We use [Minikube](https://minikube.sigs.k8s.io/docs/start/) in this quick start
minikube dashboard
```
- The command automatically triggers opening a webpage in your browser.
+ The command automatically triggers opening a webpage in your browser.
## Step 1: Install Pulsar Helm chart
@@ -88,7 +88,7 @@ We use [Minikube](https://minikube.sigs.k8s.io/docs/start/) in this quick start
-c
```
-4. Use the Pulsar Helm chart to install a Pulsar cluster to Kubernetes.
+4. Use the Pulsar Helm chart to install a Pulsar cluster to Kubernetes.
```bash
helm install \
@@ -163,7 +163,7 @@ We use [Minikube](https://minikube.sigs.k8s.io/docs/start/) in this quick start
bin/pulsar-admin tenants list
```
- You should see a similar output as below. The tenant `apache` has been successfully created.
+ You should see a similar output as below. The tenant `apache` has been successfully created.
```bash
"apache"
@@ -183,7 +183,7 @@ We use [Minikube](https://minikube.sigs.k8s.io/docs/start/) in this quick start
bin/pulsar-admin namespaces list apache
```
- You should see a similar output as below. The namespace `apache/pulsar` has been successfully created.
+ You should see a similar output as below. The namespace `apache/pulsar` has been successfully created.
```bash
"apache/pulsar"
@@ -297,7 +297,7 @@ Then you can proceed with the following steps:
- From the producer side
**Output**
-
+
The messages have been produced successfully.
```bash
@@ -345,7 +345,7 @@ Then you can proceed with the following steps:
2. The Pulsar Manager UI will be open in your browser. You can use the username `pulsar` and password `pulsar` to log into Pulsar Manager.
-3. In Pulsar Manager UI, you can create an environment.
+3. In Pulsar Manager UI, you can create an environment.
- Click `New Environment` button in the top-left corner.
- Type `pulsar-mini` for the field `Environment Name` in the popup window.
diff --git a/docs/performance-pulsar-perf.md b/docs/performance-pulsar-perf.md
index 30d92cba331..a07343e911a 100644
--- a/docs/performance-pulsar-perf.md
+++ b/docs/performance-pulsar-perf.md
@@ -14,7 +14,7 @@ For the latest and complete information about `pulsar-perf`, including commands,
:::
-- This example shows how the Pulsar Perf produces messages with **default** options.
+- This example shows how the Pulsar Perf produces messages with **default** options.
**Input**
@@ -53,14 +53,14 @@ For the latest and complete information about `pulsar-perf`, including commands,
**Output**
```shell
- 2021-10-11T13:36:15,595+0800 INFO [Thread-3] o.a.p.t.PerformanceProducer@499 - --- Transaction : 2 transaction end successfully ---0 transaction end failed --- 0.200 Txn/s
+ 2021-10-11T13:36:15,595+0800 INFO [Thread-3] o.a.p.t.PerformanceProducer@499 - --- Transaction : 2 transaction end successfully ---0 transaction end failed --- 0.200 Txn/s
- 2021-10-11T13:36:15,614+0800 INFO [Thread-3] o.a.p.t.PerformanceProducer@503 - Throughput produced: 100 msg --- 0.0 msg/s --- 0.1 Mbit/s --- failure 0.0 msg/s --- Latency: mean: 3.067 ms - med: 3.104 - 95pct: 3.747 - 99pct: 4.619 - 99.9pct: 6.760 - 99.99pct: 6.760 - Max: 6.760
+ 2021-10-11T13:36:15,614+0800 INFO [Thread-3] o.a.p.t.PerformanceProducer@503 - Throughput produced: 100 msg --- 0.0 msg/s --- 0.1 Mbit/s --- failure 0.0 msg/s --- Latency: mean: 3.067 ms - med: 3.104 - 95pct: 3.747 - 99pct: 4.619 - 99.9pct: 6.760 - 99.99pct: 6.760 - Max: 6.760
- 2021-10-11T13:36:15,710+0800 INFO [pulsar-perf-producer-exec-46-1] o.a.p.t.PerformanceProducer@834 - Aggregated latency stats --- Latency: mean: 3.067 ms - med: 3.104 - 95pct: 3.747 - 99pct: 4.619 - 99.9pct: 6.760 - 99.99pct: 6.760 - 99.999pct: 6.760 - Max: 6.760
+ 2021-10-11T13:36:15,710+0800 INFO [pulsar-perf-producer-exec-46-1] o.a.p.t.PerformanceProducer@834 - Aggregated latency stats --- Latency: mean: 3.067 ms - med: 3.104 - 95pct: 3.747 - 99pct: 4.619 - 99.9pct: 6.760 - 99.99pct: 6.760 - 99.999pct: 6.760 - Max: 6.760
+
+ 2021-10-11T13:36:29,976+0800 INFO [Thread-4] o.a.p.t.PerformanceProducer@815 - --- Transaction : 2 transaction end successfully --- 0 transaction end failed --- 2 transaction open successfully --- 0 transaction open failed --- 12.237 Txn/s
- 2021-10-11T13:36:29,976+0800 INFO [Thread-4] o.a.p.t.PerformanceProducer@815 - --- Transaction : 2 transaction end successfully --- 0 transaction end failed --- 2 transaction open successfully --- 0 transaction open failed --- 12.237 Txn/s
-
2021-10-11T13:36:29,976+0800 INFO [Thread-4] o.a.p.t.PerformanceProducer@824 - Aggregated throughput stats --- 102 records sent --- 4.168 msg/s --- 0.033 Mbit/s
```
@@ -119,17 +119,17 @@ For the latest and complete information about `pulsar-perf`, including commands,
:::
-
+
**Output**
```shell
- 2021-10-11T13:43:36,052+0800 INFO [Thread-3] o.a.p.t.PerformanceConsumer@538 - --- Transaction: 6 transaction end successfully --- 0 transaction end failed --- 0.199 Txn/s --- AckRate: 9.952 msg/s
+ 2021-10-11T13:43:36,052+0800 INFO [Thread-3] o.a.p.t.PerformanceConsumer@538 - --- Transaction: 6 transaction end successfully --- 0 transaction end failed --- 0.199 Txn/s --- AckRate: 9.952 msg/s
- 2021-10-11T13:43:36,065+0800 INFO [Thread-3] o.a.p.t.PerformanceConsumer@545 - Throughput received: 306 msg --- 9.952 msg/s -- 0.000 Mbit/s --- Latency: mean: 26177.380 ms - med: 26128 - 95pct: 30531 - 99pct: 30923 - 99.9pct: 31021 - 99.99pct: 31021 - Max: 31021
+ 2021-10-11T13:43:36,065+0800 INFO [Thread-3] o.a.p.t.PerformanceConsumer@545 - Throughput received: 306 msg --- 9.952 msg/s -- 0.000 Mbit/s --- Latency: mean: 26177.380 ms - med: 26128 - 95pct: 30531 - 99pct: 30923 - 99.9pct: 31021 - 99.99pct: 31021 - Max: 31021
- 2021-10-11T13:43:59,854+0800 INFO [Thread-5] o.a.p.t.PerformanceConsumer@579 - -- Transaction: 10 transaction end successfully --- 0 transaction end failed --- 10 transaction open successfully --- 0 transaction open failed --- 0.185 Txn/s
+ 2021-10-11T13:43:59,854+0800 INFO [Thread-5] o.a.p.t.PerformanceConsumer@579 - -- Transaction: 10 transaction end successfully --- 0 transaction end failed --- 10 transaction open successfully --- 0 transaction open failed --- 0.185 Txn/s
- 2021-10-11T13:43:59,854+0800 INFO [Thread-5] o.a.p.t.PerformanceConsumer@588 - Aggregated throughput stats --- 505 records received --- 9.345 msg/s --- 0.000 Mbit/s--- AckRate: 9.27065308842743 msg/s --- ack failed 4 msg
+ 2021-10-11T13:43:59,854+0800 INFO [Thread-5] o.a.p.t.PerformanceConsumer@588 - Aggregated throughput stats --- 505 records received --- 9.345 msg/s --- 0.000 Mbit/s--- AckRate: 9.27065308842743 msg/s --- ack failed 4 msg
2021-10-11T13:43:59,882+0800 INFO [Thread-5] o.a.p.t.PerformanceConsumer@601 - Aggregated latency stats --- Latency: mean: 50593.000 ms - med: 50593 - 95pct: 50593 - 99pct: 50593 - 99.9pct: 50593 - 99.99pct: 50593 - 99.999pct: 50593 - Max: 50593
```
@@ -140,7 +140,7 @@ This section shows how Pulsar Perf runs transactions. For more information, see
### Use transaction
-This example executes 50 transactions. Each transaction sends and receives 1 message (default).
+This example executes 50 transactions. Each transaction sends and receives 1 message (default).
**Input**
@@ -183,9 +183,9 @@ If you have not created a topic (in this example, it is _myConsumerTopic_) befor
**Output**
```shell
-2021-10-11T16:48:26,876+0800 INFO [Thread-4] o.a.p.t.PerformanceProducer@529 - Throughput task: 50 task executes --- 4.999 task/s ---send Latency: mean: 10.002 ms - med: 9.875 - 95pct: 11.733 - 99pct: 15.995 - 99.9pct: 15.995 - 99.99pct: 15.995 - Max: 15.995---ack Latency: mean: 0.051 ms - med: 0.020 - 95pct: 0.059 - 99pct: 1.377 - 99.9pct: 1.377 - 99.99pct: 1.377 - Max: 1.377
+2021-10-11T16:48:26,876+0800 INFO [Thread-4] o.a.p.t.PerformanceProducer@529 - Throughput task: 50 task executes --- 4.999 task/s ---send Latency: mean: 10.002 ms - med: 9.875 - 95pct: 11.733 - 99pct: 15.995 - 99.9pct: 15.995 - 99.99pct: 15.995 - Max: 15.995---ack Latency: mean: 0.051 ms - med: 0.020 - 95pct: 0.059 - 99pct: 1.377 - 99.9pct: 1.377 - 99.99pct: 1.377 - Max: 1.377
-2021-10-11T16:48:29,222+0800 INFO [Thread-5] o.a.p.t.PerformanceProducer@617 - Messages ack aggregated latency stats --- Latency: mean: 0.051 ms - med: 0.020 - 95pct: 0.059 - 99pct: 1.377 - 99.9pct: 1.377 - 99.99pct: 1.377 - 99.999pct: 1.377 - Max: 1.377
+2021-10-11T16:48:29,222+0800 INFO [Thread-5] o.a.p.t.PerformanceProducer@617 - Messages ack aggregated latency stats --- Latency: mean: 0.051 ms - med: 0.020 - 95pct: 0.059 - 99pct: 1.377 - 99.9pct: 1.377 - 99.99pct: 1.377 - 99.999pct: 1.377 - Max: 1.377
2021-10-11T16:48:29,246+0800 INFO [Thread-5] o.a.p.t.PerformanceProducer@629 - Messages send aggregated latency stats --- Latency: mean: 10.002 ms - med: 9.875 - 95pct: 11.733 - 99pct: 15.995 - 99.9pct: 15.995 - 99.99pct: 15.995 - 99.999pct: 15.995 - Max: 15.995
diff --git a/docs/pulsar-api-overview.md b/docs/pulsar-api-overview.md
index 9b1ecb37c7a..bd9969fc5b2 100644
--- a/docs/pulsar-api-overview.md
+++ b/docs/pulsar-api-overview.md
@@ -9,7 +9,7 @@ import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
````
-Pulsar is a messaging and streaming platform that scales across organizations of all sizes. Pulsar APIs are the core building blocks of Pulsar, which allow you to interact with Pulsar or administer Pulsar clusters. Pulsar APIs consist of the following types:
+Pulsar is a messaging and streaming platform that scales across organizations of all sizes. Pulsar APIs are the core building blocks of Pulsar, which allow you to interact with Pulsar or administer Pulsar clusters. Pulsar APIs consist of the following types:
- [Pulsar client APIs](client-api-overview.md)
diff --git a/docs/reference-cli-tools.md b/docs/reference-cli-tools.md
index bcb436632a6..db6226195fd 100644
--- a/docs/reference-cli-tools.md
+++ b/docs/reference-cli-tools.md
@@ -20,7 +20,7 @@ For the latest and complete information about command-line tools, including comm
:::
-All Pulsar command-line tools can be run from the `bin` directory of your [installed Pulsar package](getting-started-standalone.md).
+All Pulsar command-line tools can be run from the `bin` directory of your [installed Pulsar package](getting-started-standalone.md).
You can get help for any CLI tool, command, or subcommand using the `--help` flag, or `-h` for short. Here's an example:
diff --git a/docs/reference-metrics.md b/docs/reference-metrics.md
index f1f5027fedb..ae30ccadaed 100644
--- a/docs/reference-metrics.md
+++ b/docs/reference-metrics.md
@@ -188,7 +188,7 @@ All the namespace metrics are labeled with the following labels:
| pulsar_subscription_delayed | Gauge | The total message batches (entries) are delayed for dispatching. |
| pulsar_storage_write_latency_le_* | Histogram | The entry rate of a namespace that the storage write latency is smaller with a given threshold.<br /> Available thresholds: <br /><ul><li>pulsar_storage_write_latency_le_0_5: <= 0.5ms </li><li>pulsar_storage_write_latency_le_1: <= 1ms</li><li>pulsar_storage_write_latency_le_5: <= 5ms</li><li>pulsar_storage_write_latency_le_10: <= 10ms</li><li>pulsar_storage_write_latency_le_20: <= 20ms</li><li>pulsar_storage_write_latency_le_50: <= 50ms</ [...]
| pulsar_entry_size_le_* | Histogram | The entry rate of a namespace that the entry size is smaller with a given threshold.<br /> Available thresholds: <br /><ul><li>pulsar_entry_size_le_128: <= 128 bytes </li><li>pulsar_entry_size_le_512: <= 512 bytes</li><li>pulsar_entry_size_le_1_kb: <= 1 KB</li><li>pulsar_entry_size_le_2_kb: <= 2 KB</li><li>pulsar_entry_size_le_4_kb: <= 4 KB</li><li>pulsar_entry_size_le_16_kb: <= 16 KB</li><li>pulsar_entry_size_le_100_kb: <= 100 KB</li><li>pulsar_ent [...]
-| pulsar_delayed_message_index_size_bytes | Gauge | The total memory size allocated by `InMemoryDelayedDeliveryTracker` of the namespace owned by this broker (in bytes). |
+| pulsar_delayed_message_index_size_bytes | Gauge | The total memory size allocated by `InMemoryDelayedDeliveryTracker` of the namespace owned by this broker (in bytes). |
### Topic metrics
@@ -331,7 +331,7 @@ All the loadbalancing metrics are labeled with the following labels:
| pulsar_lb_bandwidth_in_usage | Gauge | The broker inbound bandwidth usage (in percent). |
| pulsar_lb_bandwidth_out_usage | Gauge | The broker outbound bandwidth usage (in percent). |
| pulsar_lb_cpu_usage | Gauge | The broker cpu usage (in percent). |
-| pulsar_lb_directMemory_usage | Gauge | The broker process direct memory usage (in percent). |
+| pulsar_lb_directMemory_usage | Gauge | The broker process direct memory usage (in percent). |
| pulsar_lb_memory_usage | Gauge | The broker process memory usage (in percent). |
### BundleUnloading metrics
diff --git a/docs/reference-pulsar-admin.md b/docs/reference-pulsar-admin.md
index c56445de4c8..4c7c4f12303 100644
--- a/docs/reference-pulsar-admin.md
+++ b/docs/reference-pulsar-admin.md
@@ -1877,7 +1877,7 @@ Options
|`-d`, `--disabled`|Disable automatic schema updates.|false|
### `get-publish-rate`
-Get the message publish rate for each topic in a namespace, in bytes as well as messages per second
+Get the message publish rate for each topic in a namespace, in bytes as well as messages per second
Usage
@@ -2052,7 +2052,7 @@ Options
|`--broker`|Broker name to get namespace-isolation policies attached to it||
## `topics`
-Operations for managing Pulsar topics (both persistent and non-persistent).
+Operations for managing Pulsar topics (both persistent and non-persistent).
Usage
@@ -2060,7 +2060,7 @@ Usage
pulsar-admin topics subcommand
```
-From Pulsar 2.7.0, some namespace-level policies are available on topic level. To enable topic-level policy in Pulsar, you need to configure the following parameters in the `broker.conf` file.
+From Pulsar 2.7.0, some namespace-level policies are available on topic level. To enable topic-level policy in Pulsar, you need to configure the following parameters in the `broker.conf` file.
```conf
systemTopicEnabled=true
@@ -2232,7 +2232,7 @@ Options
|`-p`, `--partitions`|The number of partitions for the topic|0|
### `create-missed-partitions`
-Try to create partitions for partitioned topic. The partitions of partition topic has to be created,
+Try to create partitions for partitioned topic. The partitions of partition topic has to be created,
can be used by repair partitions when topic auto creation is disabled
Usage
@@ -2456,7 +2456,7 @@ Options
|---|---|---|
|`-etb`,`--get-earliest-time-in-backlog` | Set to `true` to get the earliest time in backlog | false |
|`-gpb`,`--get-precise-backlog`| Set to `true` to get precise backlog | false |
-|`-sbs`,` --get-subscription-backlog-size`| Set to `true` to get backlog size for each subscription, locking required | false |
+|`-sbs`,` --get-subscription-backlog-size`| Set to `true` to get backlog size for each subscription, locking required | false |
:::note
@@ -2497,7 +2497,7 @@ Options
|Flag|Description|Default|
|---|---|---|
|`-gpb`,`--get-precise-backlog`| Set to `true` to get precise backlog | false |
-|`-sbs`,` --get-subscription-backlog-size`| Set to `true` to get backlog size for each subscription, locking required | false |
+|`-sbs`,` --get-subscription-backlog-size`| Set to `true` to get backlog size for each subscription, locking required | false |
|`--per-partition`|Get per-partition stats|false|
@@ -2757,7 +2757,7 @@ Usage
pulsar-admin topics remove-message-ttl tenant/namespace/topic
```
-Options
+Options
|Flag|Description|Default|
|---|---|---|
diff --git a/docs/reference-rest-api-overview.md b/docs/reference-rest-api-overview.md
index 9bfd8ff5848..6402ef5fc15 100644
--- a/docs/reference-rest-api-overview.md
+++ b/docs/reference-rest-api-overview.md
@@ -4,9 +4,9 @@ title: Pulsar REST APIs
sidebar_label: "Pulsar REST APIs"
---
-A REST API (also known as RESTful API, REpresentational State Transfer Application Programming Interface) is a set of definitions and protocols for building and integrating application software, using HTTP requests to GET, PUT, POST, and DELETE data following the REST standards. In essence, REST API is a set of remote calls using standard methods to request and return data in a specific format between two systems.
+A REST API (also known as RESTful API, REpresentational State Transfer Application Programming Interface) is a set of definitions and protocols for building and integrating application software, using HTTP requests to GET, PUT, POST, and DELETE data following the REST standards. In essence, REST API is a set of remote calls using standard methods to request and return data in a specific format between two systems.
-Pulsar provides a variety of REST APIs that enable you to interact with Pulsar to retrieve information or perform an action.
+Pulsar provides a variety of REST APIs that enable you to interact with Pulsar to retrieve information or perform an action.
| REST API category | Description |
| --- | --- |
diff --git a/docs/reference-terminology.md b/docs/reference-terminology.md
index b58c191f01a..9ff7fc8a540 100644
--- a/docs/reference-terminology.md
+++ b/docs/reference-terminology.md
@@ -99,7 +99,7 @@ on a per-[tenant](#tenant) basis.
#### Failure Domain
-A logical domain under a Pulsar cluster. Each logical domain contains a pre-configured list of brokers.
+A logical domain under a Pulsar cluster. Each logical domain contains a pre-configured list of brokers.
#### Anti-affinity Namespaces
diff --git a/docs/schema-get-started.md b/docs/schema-get-started.md
index 461ca4923bf..bbb4d2e9891 100644
--- a/docs/schema-get-started.md
+++ b/docs/schema-get-started.md
@@ -657,7 +657,7 @@ The following example shows how to create a producer/consumer with a ProtobufNat
Message<DemoMessage> message = consumer.receive(5, TimeUnit.SECONDS);
```
-
+
</TabItem>
<TabItem value="C++">
@@ -861,7 +861,7 @@ This example shows how to construct an [AUTO_PRODUCE](schema-understand.md#auto-
Produce<byte[]> pulsarProducer = client.newProducer(Schema.AUTO_PRODUCE_BYTES())
…
.create();
-byte[] kafkaMessageBytes = … ;
+byte[] kafkaMessageBytes = … ;
pulsarProducer.produce(kafkaMessageBytes);
```
@@ -876,22 +876,22 @@ Consumer<GenericRecord> pulsarConsumer = client.newConsumer(Schema.AUTO_CONSUME(
…
.subscribe();
-Message<GenericRecord> msg = consumer.receive() ;
+Message<GenericRecord> msg = consumer.receive() ;
GenericRecord record = msg.getValue();
record.getFields().forEach((field -> {
if (field.getName().equals("theNeedFieldName")) {
Object recordField = record.getField(field);
- //Do some things
+ //Do some things
}
}));
```
## Customize schema storage
-By default, Pulsar stores various data types of schemas in [Apache BookKeeper](https://bookkeeper.apache.org) deployed alongside Pulsar. Alternatively, you can use another storage system if needed.
+By default, Pulsar stores various data types of schemas in [Apache BookKeeper](https://bookkeeper.apache.org) deployed alongside Pulsar. Alternatively, you can use another storage system if needed.
-To use a non-default (non-BookKeeper) storage system for Pulsar schemas, you need to implement the following Java interfaces before [deploying custom schema storage](#deploy-custom-schema-storage):
-* [SchemaStorage interface](#implement-schemastorage-interface)
+To use a non-default (non-BookKeeper) storage system for Pulsar schemas, you need to implement the following Java interfaces before [deploying custom schema storage](#deploy-custom-schema-storage):
+* [SchemaStorage interface](#implement-schemastorage-interface)
* [SchemaStorageFactory interface](#implement-schemastoragefactory-interface)
### Implement `SchemaStorage` interface
@@ -926,7 +926,7 @@ For a complete example of **schema storage** implementation, see the [BookKeeper
:::
-### Implement `SchemaStorageFactory` interface
+### Implement `SchemaStorageFactory` interface
The `SchemaStorageFactory` interface has the following method:
@@ -948,9 +948,9 @@ For a complete example of **schema storage factory** implementation, see the [Bo
To use your custom schema storage implementation, perform the following steps.
1. Package the implementation in a [JAR](https://docs.oracle.com/javase/tutorial/deployment/jar/basicsindex.html) file.
-
+
2. Add the JAR file to the `lib` folder in your Pulsar binary or source distribution.
-
+
3. Change the `schemaRegistryStorageClassName` configuration in the `conf/broker.conf` file to your custom factory class.
-
+
4. Start Pulsar.
\ No newline at end of file
diff --git a/docs/schema-overview.md b/docs/schema-overview.md
index 583dfb85034..d117818dc0f 100644
--- a/docs/schema-overview.md
+++ b/docs/schema-overview.md
@@ -35,7 +35,7 @@ Pulsar schema resolves the pain points with the following capabilities:
* enforces the data type safety when a topic has a schema defined. As a result, producers/consumers are only allowed to connect if they are using a "compatible" schema.
* provides a central location for storing information about the schemas used within your organization, in turn greatly simplifies the sharing of this information across application teams.
* serves as a single source of truth for all the message schemas used across all your services and development teams, which makes it easier for them to collaborate.
-* keeps data compatibility on-track between schema versions. When new schemas are uploaded, the new versions can be read by old consumers.
+* keeps data compatibility on-track between schema versions. When new schemas are uploaded, the new versions can be read by old consumers.
* stored in the existing storage layer BookKeeper, without additional system required.
## How it works
@@ -48,26 +48,26 @@ This diagram illustrates how Pulsar schema works on the Producer side.

-1. The application uses a schema instance to construct a producer instance.
+1. The application uses a schema instance to construct a producer instance.
The schema instance defines the schema for the data being produced using the producer instance. Take Avro as an example, Pulsar extracts the schema definition from the POJO class and constructs the `SchemaInfo`.
2. The producer requests to connect to the broker with the `SchemaInfo` extracted from the passed-in schema instance.
-
-3. The broker looks up the schema registry to check if it is a registered schema.
+
+3. The broker looks up the schema registry to check if it is a registered schema.
* If the schema is registered, the broker returns the schema version to the producer.
* Otherwise, go to step 4.
-4. The broker checks whether the schema can be auto-updated.
+4. The broker checks whether the schema can be auto-updated.
* If it's not allowed to be auto-updated, then the schema cannot be registered, and the broker rejects the producer.
* Otherwise, go to step 5.
5. The broker performs the [schema compatibility check](schema-understand.md#schema-compatibility-check) defined for the topic.
- * If the schema passes the compatibility check, the broker stores it in the schema registry and returns the schema version to the producer. All the messages produced by this producer are tagged with the schema version.
+ * If the schema passes the compatibility check, the broker stores it in the schema registry and returns the schema version to the producer. All the messages produced by this producer are tagged with the schema version.
* Otherwise, the broker rejects the producer.
### Consumer side
-This diagram illustrates how schema works on the consumer side.
+This diagram illustrates how schema works on the consumer side.

@@ -82,10 +82,10 @@ This diagram illustrates how schema works on the consumer side.
4. The broker checks whether the schema can be auto-updated.
* If the schema can be auto-updated, the broker registers the schema and connects the consumer.
* Otherwise, the broker rejects the consumer.
-
+
5. The broker performs the [schema compatibility check](schema-understand.md#schema-compatibility-check).
* If the schema passes the compatibility check, the broker connects the consumer.
- * Otherwise, the broker rejects the consumer.
+ * Otherwise, the broker rejects the consumer.
## Use case
@@ -97,9 +97,9 @@ For example, you are using the _User_ class to define the messages sent to Pulsa
public class User {
public String name;
public int age;
-
+
User() {}
-
+
User(String name, int age) {
this.name = name;
this.age = age;
diff --git a/docs/schema-understand.md b/docs/schema-understand.md
index e6b649c0983..cb094228cd2 100644
--- a/docs/schema-understand.md
+++ b/docs/schema-understand.md
@@ -29,17 +29,17 @@ This is a string example of `SchemaInfo`.
The following table outlines the fields that each `SchemaInfo` consists of.
-| Field | Description |
+| Field | Description |
| --- | --- |
-| `name` | Schema name (a string). |
-| `type` | [Schema type](#schema-type) that determines how to serialize and deserialize the schema data. |
-| `schema` | Schema data, which is a sequence of 8-bit unsigned bytes and specific schema type. |
+| `name` | Schema name (a string). |
+| `type` | [Schema type](#schema-type) that determines how to serialize and deserialize the schema data. |
+| `schema` | Schema data, which is a sequence of 8-bit unsigned bytes and specific schema type. |
| `properties` | A user-defined property as a string/string map, which can be used by applications to carry any application-specific logic. |
## Schema type
-Pulsar supports various schema types, which are mainly divided into two categories:
-* [Primitive type](#primitive-type)
+Pulsar supports various schema types, which are mainly divided into two categories:
+* [Primitive type](#primitive-type)
* [Complex type](#complex-type)
### Primitive type
@@ -99,7 +99,7 @@ The following table outlines the `struct` types that Pulsar schema supports:
| `ProtobufNativeSchema` | [`ProtobufNativeSchema`](schema-get-started.md#protobufnative) is based on protobuf native descriptor. <br /><br />This allows Pulsar to:<br />- use native protobuf-v3 to serialize or deserialize data.<br />- use `AutoConsume` to deserialize data. [...]
| `NativeAvroBytesSchema` | [`NativeAvroBytesSchema`](schema-get-started.md#native-avro) wraps a native Avro schema type `org.apache.avro.Schema`. The result is a schema instance that accepts a serialized Avro payload without validating it against the wrapped Avro schema. <br /><br />When you migrate or ingest event or messaging data from external systems (such as Kafka and Cassandra), the data is often already serialized in Avro format. The applications producing the data typically have [...]
-Pulsar provides the following methods to use the `struct` schema.
+Pulsar provides the following methods to use the `struct` schema.
* `static`
* `generic`
* `SchemaDefinition`
@@ -107,15 +107,15 @@ Pulsar provides the following methods to use the `struct` schema.
This example shows how to construct a `struct` schema with these methods and use it to produce and consume messages.
````mdx-code-block
-<Tabs
+<Tabs
defaultValue="static"
values={[{"label":"static","value":"static"},{"label":"generic","value":"generic"},{"label":"SchemaDefinition","value":"SchemaDefinition"}]}>
<TabItem value="static">
-You can predefine the `struct` schema, which can be a POJO in Java, a `struct` in Go, or classes generated by Avro or Protobuf tools.
+You can predefine the `struct` schema, which can be a POJO in Java, a `struct` in Go, or classes generated by Avro or Protobuf tools.
-**Example**
+**Example**
Pulsar gets the schema definition from the predefined `struct` using an Avro library. The schema definition is the schema data stored as a part of the `SchemaInfo`.
@@ -133,11 +133,11 @@ Pulsar gets the schema definition from the predefined `struct` using an Avro lib
}
# If you DON'T use Lombok you will need to add the constructor like this
- #
+ #
# public static class User {
# String name;
# int age;
- # public User() { }
+ # public User() { }
# public User(String name, int age) { this.name = name; this.age = age; } }
#}
@@ -164,7 +164,7 @@ Sometimes applications do not have pre-defined structs, and you can use this met
You can define the `struct` schema using the `GenericSchemaBuilder`, generate a generic struct using `GenericRecordBuilder`, and consume messages into `GenericRecord`.
-**Example**
+**Example**
1. Use `RecordSchemaBuilder` to build a schema.
@@ -172,7 +172,7 @@ You can define the `struct` schema using the `GenericSchemaBuilder`, generate a
RecordSchemaBuilder recordSchemaBuilder = SchemaBuilder.record("schemaName");
recordSchemaBuilder.field("intField").type(SchemaType.INT32);
SchemaInfo schemaInfo = recordSchemaBuilder.build(SchemaType.AVRO);
-
+
Consumer<GenericRecord> consumer = client.newConsumer(Schema.generic(schemaInfo))
.topic(topicName)
.subscriptionName(subscriptionName)
@@ -191,7 +191,7 @@ You can define the `struct` schema using the `GenericSchemaBuilder`, generate a
producer.newMessage().value(record).send();
// receive message
Message<GenericRecord> msg = consumer.receive();
-
+
Assert.assertEquals(msg.getValue().getField("intField"), 32);
```
@@ -200,7 +200,7 @@ You can define the `struct` schema using the `GenericSchemaBuilder`, generate a
You can define the `schemaDefinition` to generate a `struct` schema.
-**Example**
+**Example**
1. Create the _User_ class to define the messages sent to Pulsar topics.
@@ -249,18 +249,18 @@ Auto schema contains two categories:
Schema validation enforcement enables brokers to reject producers/consumers without a schema.
By default, schema validation enforcement is only **disabled** (`isSchemaValidationEnforced`=`false`) for producers, which means:
-* A producer without a schema can produce any messages to a topic with schemas, which may result in producing trash data to the topic.
+* A producer without a schema can produce any messages to a topic with schemas, which may result in producing trash data to the topic.
* Clients that don't support schema are allowed to produce messages to a topic with schemas.
For how to enable schema validation enforcement, see [Manage schema validation](admin-api-schemas.md#manage-schema-validation).
## Schema evolution
-Schemas store the details of attributes and types. To satisfy new business needs, schemas undergo evolution over time with [versioning](#schema-versioning).
+Schemas store the details of attributes and types. To satisfy new business needs, schemas undergo evolution over time with [versioning](#schema-versioning).
:::note
-Schema evolution only applies to Avro, JSON, Protobuf, and ProtobufNative schemas.
+Schema evolution only applies to Avro, JSON, Protobuf, and ProtobufNative schemas.
:::
@@ -272,7 +272,7 @@ For further readings about schema evolution, see [Avro documentation](https://av
### Schema versioning
-Each `SchemaInfo` stored with a topic has a version. The schema version manages schema changes happening within a topic.
+Each `SchemaInfo` stored with a topic has a version. The schema version manages schema changes happening within a topic.
Messages produced with `SchemaInfo` are tagged with a schema version. When a message is consumed by a Pulsar client, the client can use the schema version to retrieve the corresponding `SchemaInfo` and use the correct schema to deserialize data. Once a version is assigned to or fetched from a schema, all subsequent messages produced by that producer are tagged with the appropriate version.
@@ -301,10 +301,10 @@ The table below outlines the possible scenarios when this connection attempt occ
The purpose of schema compatibility check is to ensure that existing consumers can process the introduced messages.
-When receiving a `SchemaInfo` from producers, brokers recognize the schema type and deploy the schema compatibility checker ([`schemaRegistryCompatibilityCheckers`](https://github.com/apache/pulsar/blob/bf194b557c48e2d3246e44f1fc28876932d8ecb8/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/ServiceConfiguration.java)) for that schema type to check if the `SchemaInfo` is compatible with the schema of the topic by applying the configured compatibility check strategy.
+When receiving a `SchemaInfo` from producers, brokers recognize the schema type and deploy the schema compatibility checker ([`schemaRegistryCompatibilityCheckers`](https://github.com/apache/pulsar/blob/bf194b557c48e2d3246e44f1fc28876932d8ecb8/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/ServiceConfiguration.java)) for that schema type to check if the `SchemaInfo` is compatible with the schema of the topic by applying the configured compatibility check strategy.
The default value of `schemaRegistryCompatibilityCheckers` in the `conf/broker.conf` file is as follows.
-
+
```properties
schemaRegistryCompatibilityCheckers=org.apache.pulsar.broker.service.schema.JsonSchemaCompatibilityCheck,org.apache.pulsar.broker.service.schema.AvroSchemaCompatibilityCheck,org.apache.pulsar.broker.service.schema.ProtobufNativeSchemaCompatibilityCheck
```
@@ -318,12 +318,12 @@ Suppose that you have a topic containing three schemas (V1, V2, and V3). V1 is t
| Compatibility check strategy | Definition | Changes allowed | Check against which schema |
| --- | --- | --- | --- |
| `ALWAYS_COMPATIBLE` | Disable schema compatibility check. | All changes are allowed | All previous versions |
-| `ALWAYS_INCOMPATIBLE` | Disable schema evolution, that is, any schema change is rejected. | No change is allowed | N/A |
+| `ALWAYS_INCOMPATIBLE` | Disable schema evolution, that is, any schema change is rejected. | No change is allowed | N/A |
| `BACKWARD` | Consumers using schema V3 can process data written by producers using the **last schema version** V2. | <li>Add optional fields </li><li>Delete fields </li> | Latest version |
| `BACKWARD_TRANSITIVE` | Consumers using schema V3 can process data written by producers using **all previous schema versions** V2 and V1. | <li>Add optional fields </li><li>Delete fields </li> | All previous versions |
| `FORWARD` | Consumers using the **last schema version** V2 can process data written by producers using a new schema V3, even though they may not be able to use the full capabilities of the new schema. | <li>Add fields </li><li>Delete optional fields </li> | Latest version |
| `FORWARD_TRANSITIVE` | Consumers using **all previous schema versions** V2 or V1 can process data written by producers using a new schema V3. | <li>Add fields </li><li>Delete optional fields </li> | All previous versions |
-| `FULL` | Schemas are both backward and forward compatible. <li>Consumers using the last schema V2 can process data written by producers using the new schema V3. </li><li>Consumers using the new schema V3 can process data written by producers using the last schema V2.</li> | Modify optional fields | Latest version |
+| `FULL` | Schemas are both backward and forward compatible. <li>Consumers using the last schema V2 can process data written by producers using the new schema V3. </li><li>Consumers using the new schema V3 can process data written by producers using the last schema V2.</li> | Modify optional fields | Latest version |
| `FULL_TRANSITIVE` | Backward and forward compatible among schema V3, V2, and V1. <li>Consumers using the schema V3 can process data written by producers using schema V2 and V1. </li><li>Consumers using the schema V2 or V1 can process data written by producers using the schema V3.</li> | Modify optional fields | All previous versions |
:::tip
@@ -337,7 +337,7 @@ Suppose that you have a topic containing three schemas (V1, V2, and V3). V1 is t
### Schema AutoUpdate
-By default, schema `AutoUpdate` is enabled. When a schema passes the schema compatibility check, the producer automatically updates this schema to the topic it produces.
+By default, schema `AutoUpdate` is enabled. When a schema passes the schema compatibility check, the producer automatically updates this schema to the topic it produces.
#### Producer side
@@ -347,8 +347,8 @@ For a producer, the `AutoUpdate` happens in the following cases:
* If a **topic has a schema** and the **producer doesn't carry any schema** (meaning it produces raw bytes):
- * If [schema validation enforcement](#schema-validation-enforcement) is **disabled** (`schemaValidationEnforced`=`false`) in the namespace that the topic belongs to, the producer is allowed to connect to the topic and produce data.
-
+ * If [schema validation enforcement](#schema-validation-enforcement) is **disabled** (`schemaValidationEnforced`=`false`) in the namespace that the topic belongs to, the producer is allowed to connect to the topic and produce data.
+
* Otherwise, the producer is rejected.
* If a **topic has a schema** and the **producer carries a schema**, see [How schema works on producer side](schema-overview.md#producer-side) for more information.
@@ -367,10 +367,10 @@ To adapt to schema evolution and auto-update, you need to upgrade your client ap
The following table outlines the mapping between the schema compatibility check strategy and the upgrade order of clients.
-| Compatibility check strategy | Upgrade order | Description |
+| Compatibility check strategy | Upgrade order | Description |
| --- | --- |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `ALWAYS_COMPATIBLE` | Any order | The compatibility check is disabled. Consequently, you can upgrade the producers and consumers in **any order**. |
-| `ALWAYS_INCOMPATIBLE` | N/A | The schema evolution is disabled. |
-| <li>`BACKWARD` </li><li>`BACKWARD_TRANSITIVE` </li> | Consumer first | There is no guarantee that consumers using the old schema can read data produced using the new schema. Consequently, **upgrade all consumers first**, and then start producing new data. |
-| <li>`FORWARD` </li><li>`FORWARD_TRANSITIVE` </li> | Producer first | There is no guarantee that consumers using the new schema can read data produced using the old schema. Consequently, **upgrade all producers first** to use the new schema and ensure the data that has already been produced using the old schemas are not available to consumers, and then upgrade the consumers. |
+| `ALWAYS_COMPATIBLE` | Any order | The compatibility check is disabled. Consequently, you can upgrade the producers and consumers in **any order**. |
+| `ALWAYS_INCOMPATIBLE` | N/A | The schema evolution is disabled. |
+| <li>`BACKWARD` </li><li>`BACKWARD_TRANSITIVE` </li> | Consumer first | There is no guarantee that consumers using the old schema can read data produced using the new schema. Consequently, **upgrade all consumers first**, and then start producing new data. |
+| <li>`FORWARD` </li><li>`FORWARD_TRANSITIVE` </li> | Producer first | There is no guarantee that consumers using the new schema can read data produced using the old schema. Consequently, **upgrade all producers first** to use the new schema and ensure the data that has already been produced using the old schemas are not available to consumers, and then upgrade the consumers. |
| <li>`FULL` </li><li>`FULL_TRANSITIVE` </li> | Any order | It is guaranteed that consumers using the old schema can read data produced using the new schema and consumers using the new schema can read data produced using the old schema. Consequently, you can upgrade the producers and consumers in **any order**. |
diff --git a/docs/security-authorization.md b/docs/security-authorization.md
index 4b38c4296c2..a1f6a21a5d6 100644
--- a/docs/security-authorization.md
+++ b/docs/security-authorization.md
@@ -22,11 +22,11 @@ superUserRoles=my-super-user-1,my-super-user-2
```
> A full list of parameters is available in the `conf/broker.conf` or `conf/standalone.conf` file.
-> You can also find the default values for those parameters in [Broker Configuration](reference-configuration.md).
+> You can also find the default values for those parameters in [Broker Configuration](reference-configuration.md).
Typically, you use superuser roles for administrators, clients as well as broker-to-broker authorization. When you use [geo-replication](concepts-replication.md), every broker needs to be able to publish to all the other topics of clusters.
-You can also enable the authorization for the proxy in the proxy configuration file (`conf/proxy.conf`). Once you enable the authorization on the proxy, the proxy does an additional authorization check before forwarding the request to a broker.
+You can also enable the authorization for the proxy in the proxy configuration file (`conf/proxy.conf`). Once you enable the authorization on the proxy, the proxy does an additional authorization check before forwarding the request to a broker.
If you enable authorization on the broker, the broker checks the authorization of the request when the broker receives the forwarded request.
### Proxy Roles
@@ -54,9 +54,9 @@ superUserRoles=my-super-user-1,my-super-user-2,my-proxy-role
## Administer tenants
-Pulsar [instance](reference-terminology.md#instance) administrators or some kind of self-service portal typically provisions a Pulsar [tenant](reference-terminology.md#tenant).
+Pulsar [instance](reference-terminology.md#instance) administrators or some kind of self-service portal typically provisions a Pulsar [tenant](reference-terminology.md#tenant).
-You can manage tenants using the [`pulsar-admin`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/) tool.
+You can manage tenants using the [`pulsar-admin`](pathname:///reference/#/@pulsar:version_origin@/pulsar-admin/) tool.
### Create a new tenant
diff --git a/docs/security-bouncy-castle.md b/docs/security-bouncy-castle.md
index cc8dc5613c7..9e6b1d85912 100644
--- a/docs/security-bouncy-castle.md
+++ b/docs/security-bouncy-castle.md
@@ -97,7 +97,7 @@ That means, `bouncy-castle` related jars are not shaded in these fat jars.
### Module BC-FIPS (`bouncy-castle-bcfips`)
-Pulsar module `bouncy-castle-bcfips`, which is defined by `bouncy-castle/bcfips/pom.xml`, contains the needed FIPS jars for Pulsar.
+Pulsar module `bouncy-castle-bcfips`, which is defined by `bouncy-castle/bcfips/pom.xml`, contains the needed FIPS jars for Pulsar.
Similar to `bouncy-castle-bc`, `bouncy-castle-bcfips` is also packaged as a `jar-in-jar` package for easy include/exclude.
```xml
diff --git a/docs/security-encryption.md b/docs/security-encryption.md
index 247991012e5..e088e9564de 100644
--- a/docs/security-encryption.md
+++ b/docs/security-encryption.md
@@ -21,8 +21,8 @@ The following figure illustrates how Pulsar encrypts messages on the producer si
1. The producer generates a session key regularly (every 4 hours or after publishing a certain number of messages) to encrypt the message payload using a symmetric algorithm, such as AES, and fetches the asymmetric public key every 4 hours. The ciphertext is packed as the message body.
2. The producer uses the consumer’s public key to encrypt the session key using an asymmetric algorithm, such as RSA, and adds an alias with the encrypted secret to the message header.
-3. The consumer reads the message header and decrypts the session key using its private key.
-4. The consumer uses the decrypted session key to decrypt the message payload.
+3. The consumer reads the message header and decrypts the session key using its private key.
+4. The consumer uses the decrypted session key to decrypt the message payload.
:::note
@@ -35,7 +35,7 @@ Pulsar isolates the key management and only provides interfaces (`CryptoKeyReade
If the produced messages are consumed across application boundaries, you need to ensure that consumers in other applications have access to one of the private keys that can decrypt the messages. You can do this in two ways:
- Access the public key that the consumer application provides and add it to the producer's keys.
-- Grant access to one of the private keys from the pairs that the producer uses.
+- Grant access to one of the private keys from the pairs that the producer uses.
## Get started
@@ -256,7 +256,7 @@ If the produced messages are consumed across application boundaries, you need to
````
3. Optional: customize the `CryptoKeyReader` implementation.
-
+
````mdx-code-block
<Tabs groupId="lang-choice"
defaultValue="Java"
@@ -365,7 +365,7 @@ This is only available for Java clients.
:::
-You can encrypt a message with more than one key. Producers add all such keys to the config and consumers can decrypt the message as long as they have access to at least one of the keys. Any one of the keys used for encrypting the message is sufficient to decrypt the message.
+You can encrypt a message with more than one key. Producers add all such keys to the config and consumers can decrypt the message as long as they have access to at least one of the keys. Any one of the keys used for encrypting the message is sufficient to decrypt the message.
For example, encrypt the messages using 2 keys (`myapp.messagekey1` and `myapp.messagekey2`):
diff --git a/docs/security-extending.md b/docs/security-extending.md
index b3470307416..4da31ebe1c7 100644
--- a/docs/security-extending.md
+++ b/docs/security-extending.md
@@ -50,7 +50,7 @@ authenticationProviders=
:::tip
-Pulsar supports an authentication provider chain that contains multiple authentication providers with the same authentication method name.
+Pulsar supports an authentication provider chain that contains multiple authentication providers with the same authentication method name.
For example, your Pulsar cluster uses JSON Web Token (JWT) authentication (with an authentication method named `token`) and you want to upgrade it to use OAuth2.0 authentication with the same authentication name. In this case, you can implement your own authentication provider `AuthenticationProviderOAuth2` and configure `authenticationProviders` as follows.
diff --git a/docs/security-kerberos.md b/docs/security-kerberos.md
index 97261f96892..780d57c8bc5 100644
--- a/docs/security-kerberos.md
+++ b/docs/security-kerberos.md
@@ -4,9 +4,9 @@ title: Authentication using Kerberos
sidebar_label: "Authentication using Kerberos"
---
-[Kerberos](https://web.mit.edu/kerberos/) is a network authentication protocol designed to provide strong authentication for client applications and server applications by using secret-key cryptography.
+[Kerberos](https://web.mit.edu/kerberos/) is a network authentication protocol designed to provide strong authentication for client applications and server applications by using secret-key cryptography.
-In Pulsar, you can use Kerberos with [SASL](https://en.wikipedia.org/wiki/Simple_Authentication_and_Security_Layer) as a choice for authentication. Since Pulsar uses the [Java Authentication and Authorization Service (JAAS)](https://en.wikipedia.org/wiki/Java_Authentication_and_Authorization_Service) for SASL configuration, you need to provide JAAS configurations for Kerberos authentication.
+In Pulsar, you can use Kerberos with [SASL](https://en.wikipedia.org/wiki/Simple_Authentication_and_Security_Layer) as a choice for authentication. Since Pulsar uses the [Java Authentication and Authorization Service (JAAS)](https://en.wikipedia.org/wiki/Java_Authentication_and_Authorization_Service) for SASL configuration, you need to provide JAAS configurations for Kerberos authentication.
:::note
@@ -21,7 +21,7 @@ superUserRoles=client/{clientIp}@EXAMPLE.COM
## Prerequisites
- Set up and run a [Key Distribution Center(KDC)](https://en.wikipedia.org/wiki/Key_distribution_center).
-- Install a Kerberos server if your organization doesn't have one. Your Linux vendor might have packages for `Kerberos`. For how to install and configure Kerberos, see [Ubuntu](https://help.ubuntu.com/community/Kerberos) and
+- Install a Kerberos server if your organization doesn't have one. Your Linux vendor might have packages for `Kerberos`. For how to install and configure Kerberos, see [Ubuntu](https://help.ubuntu.com/community/Kerberos) and
[Redhat](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Managing_Smart_Cards/installing-kerberos.html).
- If you use Oracle Java, you need to download JCE policy files for your Java version and copy them to the `$JAVA_HOME/jre/lib/security` directory.
@@ -42,12 +42,12 @@ sudo /usr/sbin/kadmin.local -q 'addprinc -randkey client/{hostname}@{REALM}'
sudo /usr/sbin/kadmin.local -q "ktadd -k /etc/security/keytabs/{client-keytabname}.keytab client/{hostname}@{REALM}"
```
-The first part of broker principal (for example, `broker` in `broker/{hostname}@{REALM}`) is the `serverType` of each host. The suggested values of `serverType` are `broker` (host machine runs Pulsar broker service) and `proxy` (host machine runs Pulsar Proxy service).
+The first part of broker principal (for example, `broker` in `broker/{hostname}@{REALM}`) is the `serverType` of each host. The suggested values of `serverType` are `broker` (host machine runs Pulsar broker service) and `proxy` (host machine runs Pulsar Proxy service).
Note that *Kerberos* requires that all your hosts can be resolved with their FQDNs.
### Configure brokers
-
+
In the `broker.conf` file, set Kerberos-related configurations. Here is an example:
```conf
@@ -61,7 +61,7 @@ brokerClientAuthenticationPlugin=org.apache.pulsar.client.impl.auth.Authenticati
brokerClientAuthenticationParameters={"saslJaasClientSectionName":"PulsarClient", "serverType":"broker"}
```
-To make Pulsar internal admin client work properly, you need to:
+To make Pulsar internal admin client work properly, you need to:
- Set `brokerClientAuthenticationPlugin` to client plugin `AuthenticationSasl`;
- Set `brokerClientAuthenticationParameters` to value in JSON string `{"saslJaasClientSectionName":"PulsarClient", "serverType":"broker"}`, in which `PulsarClient` is the section name in the `pulsar_jaas.conf` file, and `"serverType":"broker"` indicates that the internal admin client connects to a broker.
@@ -90,7 +90,7 @@ JAAS configuration file provides the information to connect KDC. Here is an exam
```
In the above example:
-- `PulsarBroker` is a section name in the JAAS file that each broker uses. This section tells the broker to use which principal inside Kerberos and the location of the keytab where the principal is stored.
+- `PulsarBroker` is a section name in the JAAS file that each broker uses. This section tells the broker to use which principal inside Kerberos and the location of the keytab where the principal is stored.
- `PulsarClient` is a section name in the JASS file that each client uses. This section tells the client to use which principal inside Kerberos and the location of the keytab where the principal is stored.
You need to set the `pulsar_jaas.conf` file path as a JVM parameter. For example:
@@ -109,13 +109,13 @@ If your machines configured with Kerberos already have a system-wide configurati
The content of `krb5.conf` file indicates the default Realm and KDC information. See [JDK's Kerberos Requirements](https://docs.oracle.com/javase/8/docs/technotes/guides/security/jgss/tutorials/KerberosReq.html) for more details.
-To specify the path to the `krb5.conf` file for brokers, enter the command below.
+To specify the path to the `krb5.conf` file for brokers, enter the command below.
```shell
-Djava.security.krb5.conf=/etc/pulsar/krb5.conf
```
-Here is an example of the `krb5.conf` file.
+Here is an example of the `krb5.conf` file.
```conf
[libdefaults]
@@ -133,7 +133,7 @@ In the above example:
## Enable Kerberos authentication on proxies
-If you want to use proxies between brokers and clients, Pulsar proxies (as a SASL server in Kerberos) will authenticate clients (as a SASL client in Kerberos) before brokers authenticate proxies.
+If you want to use proxies between brokers and clients, Pulsar proxies (as a SASL server in Kerberos) will authenticate clients (as a SASL client in Kerberos) before brokers authenticate proxies.
### Create Kerberos principals
@@ -149,7 +149,7 @@ For principals set for brokers and clients, see [here](#create-kerberos-principa
### Configure proxies
-In the `proxy.conf` file, set Kerberos-related configuration.
+In the `proxy.conf` file, set Kerberos-related configuration.
```shell
## related to authenticate client.
@@ -165,7 +165,7 @@ forwardAuthorizationCredentials=true
```
In the above example:
-- The first part relates to the authentication between clients and proxies. In this phase, clients work as SASL clients, while proxies work as SASL servers.
+- The first part relates to the authentication between clients and proxies. In this phase, clients work as SASL clients, while proxies work as SASL servers.
- The second part relates to the authentication between proxies and brokers. In this phase, proxies work as SASL clients, while brokers work as SASL servers.
### Configure JAAS
@@ -201,9 +201,9 @@ Ensure that the operating system user who starts Pulsar clients can access the k
</dependency>
```
-2. Configure the authentication type to use `AuthenticationSasl` and provide the following parameters.
+2. Configure the authentication type to use `AuthenticationSasl` and provide the following parameters.
- set `saslJaasClientSectionName` to `PulsarClient`;
- - set `serverType` to `broker`. `serverType` stands for whether this client connects to brokers or proxies. Clients use this parameter to know which server-side principal should be used.
+ - set `serverType` to `broker`. `serverType` stands for whether this client connects to brokers or proxies. Clients use this parameter to know which server-side principal should be used.
The following is an example of configuring a Java client:
@@ -217,7 +217,7 @@ Ensure that the operating system user who starts Pulsar clients can access the k
Authentication saslAuth = AuthenticationFactory
.create(org.apache.pulsar.client.impl.auth.AuthenticationSasl.class.getName(), authParams);
-
+
PulsarClient client = PulsarClient.builder()
.serviceUrl("pulsar://my-broker.com:6650")
.authentication(saslAuth)
@@ -225,7 +225,7 @@ Ensure that the operating system user who starts Pulsar clients can access the k
```
:::note
-
+
- To configure clients for proxies, you need to set `serverType` to `proxy` instead of `broker`.
- The first two lines in the above example are hard-coded. Alternatively, you can set additional JVM parameters for `pulsar_jaas.conf` and `krb5.conf` files when you run the application like below:
@@ -286,7 +286,7 @@ For more information, see [ZooKeeper document](https://cwiki.apache.org/confluen
## Configure Kerberos authentication for BookKeeper and broker
-Pulsar broker acts as a Kerberos client when authenticating with Bookie.
+Pulsar broker acts as a Kerberos client when authenticating with Bookie.
1. Add the `bookkeeperClientAuthenticationPlugin` parameter in `broker.conf`.
diff --git a/docs/security-overview.md b/docs/security-overview.md
index 4cd6afd2669..7b550ebf5f1 100644
--- a/docs/security-overview.md
+++ b/docs/security-overview.md
@@ -17,7 +17,7 @@ Apache Pulsar uses an [Authentication Provider](#authentication) or an [Authenti
## Encryption
-Encryption ensures that if an attacker gets access to your data, the attacker cannot read the data without also having access to the encryption keys. Encryption provides an important mechanism for protecting your data in-transit to meet your security requirements for cryptographic algorithms and key management.
+Encryption ensures that if an attacker gets access to your data, the attacker cannot read the data without also having access to the encryption keys. Encryption provides an important mechanism for protecting your data in-transit to meet your security requirements for cryptographic algorithms and key management.
**What's next?**
@@ -26,7 +26,7 @@ Encryption ensures that if an attacker gets access to your data, the attacker ca
## Authentication
-Authentication is the process of verifying the identity of clients. In Pulsar, the authentication provider is responsible for properly identifying clients and associating them with role tokens. Note that if you only enable authentication, an authenticated role token can access all resources in the cluster.
+Authentication is the process of verifying the identity of clients. In Pulsar, the authentication provider is responsible for properly identifying clients and associating them with role tokens. Note that if you only enable authentication, an authenticated role token can access all resources in the cluster.
### How it works in Pulsar
diff --git a/docs/security-tls-authentication.md b/docs/security-tls-authentication.md
index 8ea4ff92efe..8bac6b3a164 100644
--- a/docs/security-tls-authentication.md
+++ b/docs/security-tls-authentication.md
@@ -11,7 +11,7 @@ import TabItem from '@theme/TabItem';
## mTLS authentication overview
-Mutual TLS (mTLS) is a mutual authentication mechanism. Not only servers have keys and certs that the client uses to verify the identity of servers, clients also have keys and certs that the server uses to verify the identity of clients.
+Mutual TLS (mTLS) is a mutual authentication mechanism. Not only servers have keys and certs that the client uses to verify the identity of servers, clients also have keys and certs that the server uses to verify the identity of clients.
The following figure illustrates how Pulsar processes mTLS authentication between clients and servers.
@@ -192,7 +192,7 @@ authPlugin=org.apache.pulsar.client.impl.auth.AuthenticationTls
authParams=tlsCertFile:/path/to/my-role.cert.pem,tlsKeyFile:/path/to/my-role.key-pk8.pem
```
-## Configure mTLS authentication with KeyStore
+## Configure mTLS authentication with KeyStore
Apache Pulsar supports [TLS encryption](security-tls-transport.md) and [mTLS authentication](security-tls-authentication.md) between clients and Apache Pulsar service. By default, it uses PEM format file configuration. This section describes how to use the [KeyStore](https://en.wikipedia.org/wiki/Java_KeyStore) type to configure mTLS authentication.
diff --git a/docs/security-tls-transport.md b/docs/security-tls-transport.md
index 812b5212c31..1e564a41fd4 100644
--- a/docs/security-tls-transport.md
+++ b/docs/security-tls-transport.md
@@ -42,14 +42,14 @@ The validity of these certificates is 365 days. It's highly recommended to use `
### Certificate formats
You can use either one of the following certificate formats to configure TLS encryption:
-* Recommended: Privacy Enhanced Mail (PEM).
+* Recommended: Privacy Enhanced Mail (PEM).
See [Configure TLS encryption with PEM](#configure-tls-encryption-with-pem) for detailed instructions.
-* Optional: Java [KeyStore](https://en.wikipedia.org/wiki/Java_KeyStore) (JKS).
+* Optional: Java [KeyStore](https://en.wikipedia.org/wiki/Java_KeyStore) (JKS).
See [Configure TLS encryption with KeyStore](#configure-tls-encryption-with-keystore) for detailed instructions.
### Hostname verification
-Hostname verification is a TLS security feature whereby a client can refuse to connect to a server if the Subject Alternative Name (SAN) does not match the hostname that the hostname is connecting to.
+Hostname verification is a TLS security feature whereby a client can refuse to connect to a server if the Subject Alternative Name (SAN) does not match the hostname that the hostname is connecting to.
By default, Pulsar clients disable hostname verification, as it requires that each broker has a DNS record and a unique cert.
@@ -65,7 +65,7 @@ By default, Pulsar uses [netty-tcnative](https://github.com/netty/netty-tcnative
### Create TLS certificates
-Creating TLS certificates involves creating a [certificate authority](#create-a-certificate-authority), a [server certificate](#create-a-server-certificate), and a [client certificate](#create-a-client-certificate).
+Creating TLS certificates involves creating a [certificate authority](#create-a-certificate-authority), a [server certificate](#create-a-server-certificate), and a [client certificate](#create-a-client-certificate).
#### Create a certificate authority
@@ -87,7 +87,7 @@ brew install openssl
export PATH="/usr/local/Cellar/openssl@3/3.0.1/bin:$PATH"
```
-Use the actual path from the output of the `brew install` command. Note that version number `3.0.1` might change.
+Use the actual path from the output of the `brew install` command. Note that version number `3.0.1` might change.
:::
@@ -132,7 +132,7 @@ Once you have created a CA, you can create certificate requests and sign them wi
IP.1 = 127.0.0.1
IP.2 = 192.168.1.2
```
-
+
:::tip
To configure [hostname verification](#hostname-verification), you need to enter the hostname of the broker in `alt_names` as the Subject Alternative Name (SAN). To ensure that multiple machines can reuse the same certificate, you can also use a wildcard to match a group of broker hostnames, for example, `*.broker.usw.example.com`.
@@ -213,7 +213,7 @@ To configure the broker (and proxy) to require specific TLS protocol versions an
By default, Pulsar uses OpenSSL when it is available, otherwise, Pulsar defaults back to the JDK implementation. OpenSSL currently supports `TLSv1.1`, `TLSv1.2` and `TLSv1.3`. You can acquire a list of supported ciphers from the OpenSSL ciphers command, i.e. `openssl ciphers -tls1_3`.
-Both the TLS protocol versions and cipher properties can take multiple values, separated by commas. The possible values for protocol versions and ciphers depend on the TLS provider that you are using.
+Both the TLS protocol versions and cipher properties can take multiple values, separated by commas. The possible values for protocol versions and ciphers depend on the TLS provider that you are using.
```properties
tlsProtocols=TLSv1.3,TLSv1.2
@@ -413,7 +413,7 @@ By default, Pulsar uses [Conscrypt](https://github.com/google/conscrypt) for bot
### Generate JKS certificate
-You can use Java's `keytool` utility to generate the key and certificate for each machine in the cluster.
+You can use Java's `keytool` utility to generate the key and certificate for each machine in the cluster.
```bash
DAYS=365
@@ -426,17 +426,17 @@ keytool -genkeypair -keystore broker.keystore.jks ${BROKER_COMMON_PARAMS} -keyal
keytool -genkeypair -keystore client.keystore.jks ${CLIENT_COMMON_PARAMS} -keyalg RSA -keysize 2048 -alias client -validity $DAYS \
-dname 'CN=client,OU=Unknown,O=Unknown,L=Unknown,ST=Unknown,C=Unknown'
-# export certificate
+# export certificate
keytool -exportcert -keystore broker.keystore.jks ${BROKER_COMMON_PARAMS} -file broker.cer -alias broker
keytool -exportcert -keystore client.keystore.jks ${CLIENT_COMMON_PARAMS} -file client.cer -alias client
-
+
# generate truststore
keytool -importcert -keystore client.truststore.jks ${CLIENT_COMMON_PARAMS} -file broker.cer -alias truststore
keytool -importcert -keystore broker.truststore.jks ${BROKER_COMMON_PARAMS} -file client.cer -alias truststore
```
-
+
:::note
-
+
To configure [hostname verification](#hostname-verification), you need to append ` -ext SAN=IP:127.0.0.1,IP:192.168.20.2,DNS:broker.example.com` to the value of `BROKER_COMMON_PARAMS` as the Subject Alternative Name (SAN).
:::
@@ -493,19 +493,19 @@ Configuring mTLS on proxies includes two directions of connections, from clients
```properties
servicePortTls=6651
webServicePortTls=8081
-
+
tlsRequireTrustedClientCertOnConnect=true
-
+
# keystore
tlsKeyStoreType=JKS
tlsKeyStore=/var/private/tls/proxy.keystore.jks
tlsKeyStorePassword=brokerpw
-
+
# truststore
tlsTrustStoreType=JKS
tlsTrustStore=/var/private/tls/proxy.truststore.jks
tlsTrustStorePassword=brokerpw
-
+
# internal client/admin-client config
tlsEnabledWithKeyStore=true
brokerClientTlsEnabled=true
diff --git a/docs/sql-deployment-configurations.md b/docs/sql-deployment-configurations.md
index 8c1362e5637..2c9c1174870 100644
--- a/docs/sql-deployment-configurations.md
+++ b/docs/sql-deployment-configurations.md
@@ -111,7 +111,7 @@ pulsar.managed-ledger-num-scheduler-threads=Runtime.getRuntime().availableProces
pulsar.nar-extraction-directory=System.getProperty("java.io.tmpdir")
```
-### Enable authentication and authorization between Pulsar and Pulsar SQL
+### Enable authentication and authorization between Pulsar and Pulsar SQL
By default, the authentication and authorization between Pulsar and Pulsar SQL are disabled.
@@ -126,8 +126,8 @@ pulsar.broker-binary-service-url=pulsar://localhost:6650
You can connect Trino to a Pulsar cluster with multiple hosts.
-* To configure multiple hosts for brokers, add multiple URLs to `pulsar.web-service-url`.
-* To configure multiple hosts for ZooKeeper, add multiple URIs to `pulsar.zookeeper-uri`.
+* To configure multiple hosts for brokers, add multiple URLs to `pulsar.web-service-url`.
+* To configure multiple hosts for ZooKeeper, add multiple URIs to `pulsar.zookeeper-uri`.
The following is an example.
@@ -140,14 +140,14 @@ pulsar.zookeeper-uri=localhost1,localhost2:2181
:::note
-By default, Pulsar SQL **does not get the last message in a topic**. It is by design and controlled by settings. By default, BookKeeper LAC only advances when subsequent entries are added. If there is no subsequent entry added, the last written entry is not visible to readers until the ledger is closed. This is not a problem for Pulsar which uses managed ledger, but Pulsar SQL directly reads from BookKeeper ledger.
+By default, Pulsar SQL **does not get the last message in a topic**. It is by design and controlled by settings. By default, BookKeeper LAC only advances when subsequent entries are added. If there is no subsequent entry added, the last written entry is not visible to readers until the ledger is closed. This is not a problem for Pulsar which uses managed ledger, but Pulsar SQL directly reads from BookKeeper ledger.
:::
If you want to get the last message in a topic, set the following configurations:
1. For the broker configuration, set `bookkeeperExplicitLacIntervalInMills` > 0 in `broker.conf` or `standalone.conf`.
-
+
2. For the Trino configuration, set `pulsar.bookkeeper-explicit-interval` > 0 and `pulsar.bookkeeper-use-v2-protocol=false`.
However, using BookKeeper V3 protocol introduces additional GC overhead to BK as it uses Protobuf.
@@ -162,11 +162,11 @@ wget pulsar:binary_release_url
## Deploy a new cluster
-Since Pulsar SQL is powered by Trino, the configuration for deployment is the same for the Pulsar SQL worker.
+Since Pulsar SQL is powered by Trino, the configuration for deployment is the same for the Pulsar SQL worker.
:::note
-For how to set up a standalone single node environment, refer to [Query data](sql-getting-started.md).
+For how to set up a standalone single node environment, refer to [Query data](sql-getting-started.md).
:::
@@ -174,7 +174,7 @@ You can use the same CLI args as the Trino launcher.
The default configuration for the cluster is located in `${project.root}/trino/conf`. You can customize your deployment by modifying the default configuration.
-You can set the worker to read from a different configuration directory, or set a different directory to write data.
+You can set the worker to read from a different configuration directory, or set a different directory to write data.
```bash
./bin/pulsar sql-worker run --etc-dir /tmp/pulsar/trino/conf --data-dir /tmp/trino-1
@@ -186,13 +186,13 @@ You can start the worker as daemon process.
./bin/pulsar sql-worker start
```
-### Deploy a cluster on multiple nodes
+### Deploy a cluster on multiple nodes
-You can deploy a Pulsar SQL cluster or Trino cluster on multiple nodes. The following example shows how to deploy a cluster on three-node cluster.
+You can deploy a Pulsar SQL cluster or Trino cluster on multiple nodes. The following example shows how to deploy a cluster on three-node cluster.
1. Copy the Pulsar binary distribution to three nodes.
-The first node runs as Trino coordinator. The minimal configuration required in the `${project.root}/trino/conf/config.properties` file is as follows.
+The first node runs as Trino coordinator. The minimal configuration required in the `${project.root}/trino/conf/config.properties` file is as follows.
```properties
coordinator=true
@@ -204,7 +204,7 @@ discovery-server.enabled=true
discovery.uri=<coordinator-url>
```
-The other two nodes serve as worker nodes, you can use the following configuration for worker nodes.
+The other two nodes serve as worker nodes, you can use the following configuration for worker nodes.
```properties
coordinator=false
@@ -238,10 +238,10 @@ discovery.uri=<coordinator-url>
```bash
trino> SELECT * FROM system.runtime.nodes;
- node_id | http_uri | node_version | coordinator | state
+ node_id | http_uri | node_version | coordinator | state
---------+-------------------------+--------------+-------------+--------
- 1 | http://192.168.2.1:8081 | testversion | true | active
- 3 | http://192.168.2.2:8081 | testversion | false | active
+ 1 | http://192.168.2.1:8081 | testversion | true | active
+ 3 | http://192.168.2.2:8081 | testversion | false | active
2 | http://192.168.2.3:8081 | testversion | false | active
```
diff --git a/docs/sql-overview.md b/docs/sql-overview.md
index f320e6a7291..5893451358e 100644
--- a/docs/sql-overview.md
+++ b/docs/sql-overview.md
@@ -10,7 +10,7 @@ As the core of Pulsar SQL, the Pulsar Trino plugin enables Trino workers within

-The query performance is efficient and highly scalable, because Pulsar adopts [two-level-segment-based architecture](concepts-architecture-overview.md#apache-bookkeeper).
+The query performance is efficient and highly scalable, because Pulsar adopts [two-level-segment-based architecture](concepts-architecture-overview.md#apache-bookkeeper).
Topics in Pulsar are stored as segments in [Apache BookKeeper](https://bookkeeper.apache.org/). Each topic segment is replicated to some BookKeeper nodes, which enables concurrent reads and high read throughput. In the Pulsar Trino connector, data is read directly from BookKeeper, so Trino workers can read concurrently from a horizontally scalable number of BookKeeper nodes.
diff --git a/docs/sql-rest-api.md b/docs/sql-rest-api.md
index 39e23a8d003..723771f92d7 100644
--- a/docs/sql-rest-api.md
+++ b/docs/sql-rest-api.md
@@ -4,11 +4,11 @@ title: Pulsar SQL REST APIs
sidebar_label: "REST APIs"
---
-This section lists resources that make up the Trino REST API v1.
+This section lists resources that make up the Trino REST API v1.
## Request for Trino services
-All requests for Trino services should use Trino REST API v1 version.
+All requests for Trino services should use Trino REST API v1 version.
To request services, use the explicit URL `http://trino.service:8081/v1``. You need to update `trino.service:8081` with your real Trino address before sending requests.
diff --git a/docs/transaction-api.md b/docs/transaction-api.md
index 0aa51cfed7c..5fe4ea7a137 100644
--- a/docs/transaction-api.md
+++ b/docs/transaction-api.md
@@ -4,7 +4,7 @@ title: Transactions API
sidebar_label: "Transactions API"
---
-All messages in a transaction are available only to consumers after the transaction has been committed. If a transaction has been aborted, all the writes and acknowledgments in this transaction roll back.
+All messages in a transaction are available only to consumers after the transaction has been committed. If a transaction has been aborted, all the writes and acknowledgments in this transaction roll back.
## Prerequisites
1. To enable transactions in Pulsar, you need to configure the parameter in `broker.conf` file or `standalone.conf` file.
@@ -21,7 +21,7 @@ bin/pulsar initialize-transaction-coordinator-metadata -cs 127.0.0.1:2181 -c sta
After initializing transaction coordinator metadata, you can use the transactions API. The following APIs are available.
-## Initialize Pulsar client
+## Initialize Pulsar client
You can enable transactions for transaction clients and initialize transaction coordinator clients.
@@ -60,7 +60,7 @@ Message<byte[]> message = consumer.receive();
consumer.acknowledgeAsync(message.getMessageId(), txn);
```
-## Commit transactions
+## Commit transactions
When the transaction is committed, consumers receive the transaction messages and the pending-ack state becomes ack state.
diff --git a/docs/transaction-guarantee.md b/docs/transaction-guarantee.md
index 61eda0fc9db..669d2b08be6 100644
--- a/docs/transaction-guarantee.md
+++ b/docs/transaction-guarantee.md
@@ -7,7 +7,7 @@ sidebar_label: "Transactions Guarantee"
Pulsar transactions support the following guarantee.
## Atomic multi-partition writes and multi-subscription acknowledges
-Transactions enable atomic writes to multiple topics and partitions. A batch of messages in a transaction can be received from, produced to, and acknowledged by many partitions. All the operations involved in a transaction succeed or fail as a single unit.
+Transactions enable atomic writes to multiple topics and partitions. A batch of messages in a transaction can be received from, produced to, and acknowledged by many partitions. All the operations involved in a transaction succeed or fail as a single unit.
## Read transactional message
All the messages in a transaction are available only for consumers until the transaction is committed.
diff --git a/docs/txn-how.md b/docs/txn-how.md
index 8f67ea5cccc..b34020cf426 100644
--- a/docs/txn-how.md
+++ b/docs/txn-how.md
@@ -12,21 +12,21 @@ It is important to know the following key concepts, which is a prerequisite for
### Transaction coordinator
-The transaction coordinator (TC) is a module running inside a Pulsar broker.
+The transaction coordinator (TC) is a module running inside a Pulsar broker.
+
+* It maintains the entire life cycle of transactions and prevents a transaction from getting into an incorrect status.
-* It maintains the entire life cycle of transactions and prevents a transaction from getting into an incorrect status.
-
* It handles transaction timeout, and ensures that the transaction is aborted after a transaction timeout.
### Transaction log
All the transaction metadata persists in the transaction log. The transaction log is backed by a Pulsar topic. If the transaction coordinator crashes, it can restore the transaction metadata from the transaction log.
-The transaction log stores the transaction status rather than actual messages in the transaction (the actual messages are stored in the actual topic partitions).
+The transaction log stores the transaction status rather than actual messages in the transaction (the actual messages are stored in the actual topic partitions).
### Transaction buffer
-Messages produced to a topic partition within a transaction are stored in the transaction buffer (TB) of that topic partition. The messages in the transaction buffer are not visible to consumers until the transactions are committed. The messages in the transaction buffer are discarded when the transactions are aborted.
+Messages produced to a topic partition within a transaction are stored in the transaction buffer (TB) of that topic partition. The messages in the transaction buffer are not visible to consumers until the transactions are committed. The messages in the transaction buffer are discarded when the transactions are aborted.
Transaction buffer stores all ongoing and aborted transactions in memory. All messages are sent to the actual partitioned Pulsar topics. After transactions are committed, the messages in the transaction buffer are materialized (visible) to consumers. When the transactions are aborted, the messages in the transaction buffer are discarded.
@@ -38,53 +38,53 @@ Transaction ID (TxnID) identifies a unique transaction in Pulsar. The transactio
Pending acknowledge state maintains message acknowledgments within a transaction before a transaction completes. If a message is in the pending acknowledge state, the message cannot be acknowledged by other transactions until the message is removed from the pending acknowledge state.
-The pending acknowledge state is persisted in the pending acknowledge log (cursor ledger). A new broker can restore the state from the pending acknowledge log to ensure the acknowledgment is not lost.
+The pending acknowledge state is persisted in the pending acknowledge log (cursor ledger). A new broker can restore the state from the pending acknowledge log to ensure the acknowledgment is not lost.
## Data flow
At a high level, the data flow can be split into several steps:
1. Begin a transaction.
-
+
2. Publish messages with a transaction.
-
+
3. Acknowledge messages with a transaction.
-
+
4. End a transaction.
-To help you debug or tune the transaction for better performance, review the following diagrams and descriptions.
+To help you debug or tune the transaction for better performance, review the following diagrams and descriptions.
### 1. Begin a transaction
-Before introducing the transaction in Pulsar, a producer is created and then messages are sent to brokers and stored in data logs.
+Before introducing the transaction in Pulsar, a producer is created and then messages are sent to brokers and stored in data logs.

Let's walk through the steps for _beginning a transaction_.
-| Step | Description |
+| Step | Description |
| --- | --- |
-| 1.1 | The first step is that the Pulsar client finds the transaction coordinator. |
-| 1.2 | The transaction coordinator allocates a transaction ID for the transaction. In the transaction log, the transaction is logged with its transaction ID and status (OPEN), which ensures the transaction status is persisted regardless of transaction coordinator crashes. |
-| 1.3 | The transaction log sends the result of persisting the transaction ID to the transaction coordinator. |
-| 1.4 | After the transaction status entry is logged, the transaction coordinator brings the transaction ID back to the Pulsar client. |
+| 1.1 | The first step is that the Pulsar client finds the transaction coordinator. |
+| 1.2 | The transaction coordinator allocates a transaction ID for the transaction. In the transaction log, the transaction is logged with its transaction ID and status (OPEN), which ensures the transaction status is persisted regardless of transaction coordinator crashes. |
+| 1.3 | The transaction log sends the result of persisting the transaction ID to the transaction coordinator. |
+| 1.4 | After the transaction status entry is logged, the transaction coordinator brings the transaction ID back to the Pulsar client. |
### 2. Publish messages with a transaction
-In this stage, the Pulsar client enters a transaction loop, repeating the `consume-process-produce` operation for all the messages that comprise the transaction. This is a long phase and is potentially composed of multiple produce and acknowledgment requests.
+In this stage, the Pulsar client enters a transaction loop, repeating the `consume-process-produce` operation for all the messages that comprise the transaction. This is a long phase and is potentially composed of multiple produce and acknowledgment requests.

Let's walk through the steps for _publishing messages with a transaction_.
-| Step | Description |
+| Step | Description |
| --- | --- |
-| 2.1.1 | Before the Pulsar client produces messages to a new topic partition, it sends a request to the transaction coordinator to add the partition to the transaction. |
-| 2.1.2 | The transaction coordinator logs the partition changes of the transaction into the transaction log for durability, which ensures the transaction coordinator knows all the partitions that a transaction is handling. The transaction coordinator can commit or abort changes on each partition at the end-partition phase. |
-| 2.1.3 | The transaction log sends the result of logging the new partition (used for producing messages) to the transaction coordinator. |
-| 2.1.4 | The transaction coordinator sends the result of adding a new produced partition to the transaction. |
-| 2.2.1 | The Pulsar client starts producing messages to partitions. The flow of this part is the same as the normal flow of producing messages except that the batch of messages produced by a transaction contains transaction IDs. |
-| 2.2.2 | The broker writes messages to a partition. |
+| 2.1.1 | Before the Pulsar client produces messages to a new topic partition, it sends a request to the transaction coordinator to add the partition to the transaction. |
+| 2.1.2 | The transaction coordinator logs the partition changes of the transaction into the transaction log for durability, which ensures the transaction coordinator knows all the partitions that a transaction is handling. The transaction coordinator can commit or abort changes on each partition at the end-partition phase. |
+| 2.1.3 | The transaction log sends the result of logging the new partition (used for producing messages) to the transaction coordinator. |
+| 2.1.4 | The transaction coordinator sends the result of adding a new produced partition to the transaction. |
+| 2.2.1 | The Pulsar client starts producing messages to partitions. The flow of this part is the same as the normal flow of producing messages except that the batch of messages produced by a transaction contains transaction IDs. |
+| 2.2.2 | The broker writes messages to a partition. |
### 3. Acknowledge messages with a transaction
@@ -94,18 +94,18 @@ In this phase, the Pulsar client sends a request to the transaction coordinator
Let's walk through the steps for _acknowledging messages with a transaction_.
-| Step | Description |
+| Step | Description |
| --- | --- |
-| 3.1.1 | The Pulsar client sends a request to add an acknowledged subscription to the transaction coordinator. |
-| 3.1.2 | The transaction coordinator logs the addition of subscription, which ensures that it knows all subscriptions handled by a transaction and can commit or abort changes on each subscription at the end phase. |
-| 3.1.3 | The transaction log sends the result of logging the new partition (used for acknowledging messages) to the transaction coordinator. |
-| 3.1.4 | The transaction coordinator sends the result of adding the new acknowledged partition to the transaction. |
-| 3.2 | The Pulsar client acknowledges messages on the subscription. The flow of this part is the same as the normal flow of acknowledging messages except that the acknowledged request carries a transaction ID. |
-| 3.3 | The broker receiving the acknowledgment request checks if the acknowledgment belongs to a transaction or not. |
+| 3.1.1 | The Pulsar client sends a request to add an acknowledged subscription to the transaction coordinator. |
+| 3.1.2 | The transaction coordinator logs the addition of subscription, which ensures that it knows all subscriptions handled by a transaction and can commit or abort changes on each subscription at the end phase. |
+| 3.1.3 | The transaction log sends the result of logging the new partition (used for acknowledging messages) to the transaction coordinator. |
+| 3.1.4 | The transaction coordinator sends the result of adding the new acknowledged partition to the transaction. |
+| 3.2 | The Pulsar client acknowledges messages on the subscription. The flow of this part is the same as the normal flow of acknowledging messages except that the acknowledged request carries a transaction ID. |
+| 3.3 | The broker receiving the acknowledgment request checks if the acknowledgment belongs to a transaction or not. |
### 4. End a transaction
-At the end of a transaction, the Pulsar client decides to commit or abort the transaction. The transaction can be aborted when a conflict is detected in acknowledging messages.
+At the end of a transaction, the Pulsar client decides to commit or abort the transaction. The transaction can be aborted when a conflict is detected in acknowledging messages.
#### 4.1 End transaction request
@@ -115,25 +115,25 @@ When the Pulsar client finishes a transaction, it issues an end transaction requ
Let's walk through the steps for _ending the transaction_.
-| Step | Description |
+| Step | Description |
| --- | --- |
-| 4.1.1 | The Pulsar client issues an end transaction request (with a field indicating whether the transaction is to be committed or aborted) to the transaction coordinator. |
-| 4.1.2 | The transaction coordinator writes a COMMITTING or ABORTING message to its transaction log. |
-| 4.1.3 | The transaction log sends the result of logging the committing or aborting status. |
+| 4.1.1 | The Pulsar client issues an end transaction request (with a field indicating whether the transaction is to be committed or aborted) to the transaction coordinator. |
+| 4.1.2 | The transaction coordinator writes a COMMITTING or ABORTING message to its transaction log. |
+| 4.1.3 | The transaction log sends the result of logging the committing or aborting status. |
#### 4.2 Finalize a transaction
-The transaction coordinator starts the process of committing or aborting messages to all the partitions involved in this transaction.
+The transaction coordinator starts the process of committing or aborting messages to all the partitions involved in this transaction.

Let's walk through the steps for _finalizing a transaction_.
-| Step | Description |
+| Step | Description |
| --- | --- |
-| 4.2.1 | The transaction coordinator commits transactions on subscriptions and commits transactions on partitions at the same time. |
-| 4.2.2 | The broker (produce) writes produced committed markers to the actual partitions. At the same time, the broker (ack) writes acked committed marks to the subscription pending ack partitions. |
-| 4.2.3 | The data log sends the result of writing produced committed marks to the broker. At the same time, pending ack data log sends the result of writing acked committed marks to the broker. The cursor moves to the next position. |
+| 4.2.1 | The transaction coordinator commits transactions on subscriptions and commits transactions on partitions at the same time. |
+| 4.2.2 | The broker (produce) writes produced committed markers to the actual partitions. At the same time, the broker (ack) writes acked committed marks to the subscription pending ack partitions. |
+| 4.2.3 | The data log sends the result of writing produced committed marks to the broker. At the same time, pending ack data log sends the result of writing acked committed marks to the broker. The cursor moves to the next position. |
#### 4.3 Mark a transaction as COMMITTED or ABORTED
@@ -143,8 +143,8 @@ The transaction coordinator writes the final transaction status to the transacti
Let's walk through the steps for _marking a transaction as COMMITTED or ABORTED_.
-| Step | Description |
+| Step | Description |
| --- | --- |
-| 4.3.1 | After all produced messages and acknowledgments to all partitions involved in this transaction have been successfully committed or aborted, the transaction coordinator writes the final COMMITTED or ABORTED transaction status messages to its transaction log, indicating that the transaction is complete. All the messages associated with the transaction in its transaction log can be safely removed. |
-| 4.3.2 | The transaction log sends the result of the committed transaction to the transaction coordinator. |
-| 4.3.3 | The transaction coordinator sends the result of the committed transaction to the Pulsar client. |
+| 4.3.1 | After all produced messages and acknowledgments to all partitions involved in this transaction have been successfully committed or aborted, the transaction coordinator writes the final COMMITTED or ABORTED transaction status messages to its transaction log, indicating that the transaction is complete. All the messages associated with the transaction in its transaction log can be safely removed. |
+| 4.3.2 | The transaction log sends the result of the committed transaction to the transaction coordinator. |
+| 4.3.3 | The transaction coordinator sends the result of the committed transaction to the Pulsar client. |
diff --git a/docs/txn-monitor.md b/docs/txn-monitor.md
index fe36e044fe0..f317db80adb 100644
--- a/docs/txn-monitor.md
+++ b/docs/txn-monitor.md
@@ -4,6 +4,6 @@ title: How to monitor transactions?
sidebar_label: "How to monitor transactions?"
---
-You can monitor the status of the transactions in Prometheus and Grafana using the [transaction metrics](/reference-metrics.md#pulsar-transaction).
+You can monitor the status of the transactions in Prometheus and Grafana using the [transaction metrics](/reference-metrics.md#pulsar-transaction).
For how to configure Prometheus and Grafana, see [here](/deploy-monitoring.md).
diff --git a/docs/txn-use.md b/docs/txn-use.md
index cfeb6cc208a..69c7590914c 100644
--- a/docs/txn-use.md
+++ b/docs/txn-use.md
@@ -6,26 +6,26 @@ sidebar_label: "How to use transactions?"
## Transaction API
-The transaction feature is primarily a server-side and protocol-level feature. You can use the transaction feature via the [transaction API](/api/admin/), which is available in **Pulsar 2.8.0 or later**.
+The transaction feature is primarily a server-side and protocol-level feature. You can use the transaction feature via the [transaction API](/api/admin/), which is available in **Pulsar 2.8.0 or later**.
-To use the transaction API, you do not need any additional settings in the Pulsar client. **By default**, transactions are **disabled**.
+To use the transaction API, you do not need any additional settings in the Pulsar client. **By default**, transactions are **disabled**.
Currently, transaction API is only available for **Java** clients. Support for other language clients will be added in future releases.
## Quick start
-This section provides an example of how to use the transaction API to send and receive messages in a Java client.
+This section provides an example of how to use the transaction API to send and receive messages in a Java client.
-1. Start Pulsar 2.8.0 or later.
+1. Start Pulsar 2.8.0 or later.
-2. Enable transaction.
+2. Enable transaction.
Change the configuration in the `broker.conf` or `standalone.conf` file.
```conf
//mandatory configuration, used to enable transaction coordinator
transactionCoordinatorEnabled=true
-
+
//mandtory configuration, used to create systemTopic used for transaction buffer snapshot
systemTopicEnabled=true
```
@@ -38,7 +38,7 @@ This section provides an example of how to use the transaction API to send and r
* If you want to guarantee exactly-once semantics, you need to enable [message deduplication](cookbooks-deduplication.md).
You can enable message deduplication at the broker level, the namespace level, or the topic level according to your needs.
-
+
3. Initialize transaction coordinator metadata.
@@ -71,13 +71,13 @@ Now you can start using the transaction API to send and receive messages. Below
Let's walk through this example step by step.
-| Step | Description |
+| Step | Description |
| --- | --- |
-| 1. Start a transaction. | The application opens a new transaction by calling PulsarClient.newTransaction. It specifics the transaction timeout as 1 minute. If the transaction is not committed within 1 minute, the transaction is automatically aborted. |
-| 2. Receive messages from topics. | The application creates two normal consumers to receive messages from topic input-topic-1 and input-topic-2 respectively. |
-| 3. Publish messages to topics with the transaction. | The application creates two producers to produce the resulting messages to the output topic _output-topic-1_ and output-topic-2 respectively. The application applies the processing logic and generates two output messages. The application sends those two output messages as part of the transaction opened in the first step via `Producer.newMessage(Transaction)`. |
-| 4. Acknowledge the messages with the transaction. | In the same transaction, the application acknowledges the two input messages. |
-| 5. Commit the transaction. | The application commits the transaction by calling `Transaction.commit()` on the open transaction. The commit operation ensures the two input messages are marked as acknowledged and the two output messages are written successfully to the output topics. |
+| 1. Start a transaction. | The application opens a new transaction by calling PulsarClient.newTransaction. It specifics the transaction timeout as 1 minute. If the transaction is not committed within 1 minute, the transaction is automatically aborted. |
+| 2. Receive messages from topics. | The application creates two normal consumers to receive messages from topic input-topic-1 and input-topic-2 respectively. |
+| 3. Publish messages to topics with the transaction. | The application creates two producers to produce the resulting messages to the output topic _output-topic-1_ and output-topic-2 respectively. The application applies the processing logic and generates two output messages. The application sends those two output messages as part of the transaction opened in the first step via `Producer.newMessage(Transaction)`. |
+| 4. Acknowledge the messages with the transaction. | In the same transaction, the application acknowledges the two input messages. |
+| 5. Commit the transaction. | The application commits the transaction by calling `Transaction.commit()` on the open transaction. The commit operation ensures the two input messages are marked as acknowledged and the two output messages are written successfully to the output topics. |
[1] Example of enabling batch messages ack in transactions in the consumer builder.
diff --git a/docs/txn-what.md b/docs/txn-what.md
index 3d1b984fbb3..8b77be4fdd4 100644
--- a/docs/txn-what.md
+++ b/docs/txn-what.md
@@ -4,32 +4,32 @@ title: What are transactions?
sidebar_label: "What are transactions?"
---
-Transactions strengthen the message delivery semantics of Apache Pulsar and [processing guarantees of Pulsar Functions](functions-concepts.md#processing-guarantees-and-subscription-types). The Pulsar Transaction API supports atomic writes and acknowledgments across multiple topics.
+Transactions strengthen the message delivery semantics of Apache Pulsar and [processing guarantees of Pulsar Functions](functions-concepts.md#processing-guarantees-and-subscription-types). The Pulsar Transaction API supports atomic writes and acknowledgments across multiple topics.
Transactions allow:
-- A producer to send a batch of messages to multiple topics where all messages in the batch are eventually visible to any consumer, or none is ever visible to consumers.
+- A producer to send a batch of messages to multiple topics where all messages in the batch are eventually visible to any consumer, or none is ever visible to consumers.
- End-to-end exactly-once semantics (execute a `consume-process-produce` operation exactly once).
## Transaction semantics
-Pulsar transactions have the following semantics:
+Pulsar transactions have the following semantics:
* All operations within a transaction are committed as a single unit.
-
- * Either all messages are committed, or none of them are.
- * Each message is written or processed exactly once, without data loss or duplicates (even in the event of failures).
+ * Either all messages are committed, or none of them are.
+
+ * Each message is written or processed exactly once, without data loss or duplicates (even in the event of failures).
* If a transaction is aborted, all the writes and acknowledgments in this transaction rollback.
-
+
* A group of messages in a transaction can be received from, produced to, and acknowledged by multiple partitions.
-
+
* Consumers are only allowed to read committed (acked) messages. In other words, the broker does not deliver transactional messages which are part of an open transaction or messages which are part of an aborted transaction.
-
+
* Message writes across multiple partitions are atomic.
-
+
* Message acks across multiple subscriptions are atomic. A message is acked successfully only once by a consumer under the subscription when acknowledging the message with the transaction ID.
## Transactions and stream processing
@@ -37,9 +37,9 @@ Pulsar transactions have the following semantics:
Stream processing on Pulsar is a `consume-process-produce` operation on Pulsar topics:
* `Consume`: a source operator that runs a Pulsar consumer reads messages from one or multiple Pulsar topics.
-
-* `Process`: a processing operator transforms the messages.
-
+
+* `Process`: a processing operator transforms the messages.
+
* `Produce`: a sink operator that runs a Pulsar producer writes the resulting messages to one or multiple Pulsar topics.

@@ -54,6 +54,6 @@ Prior to Pulsar 2.8.0, there was no easy way to build stream processing applicat
Prior to Pulsar 2.8.0, if you want to build stream applications using Pulsar and Flink, the Pulsar Flink connector only supported exactly-once source connector and at-least-once sink connector, which means the highest processing guarantee for end-to-end was at-least-once, there was a possibility that the resulting messages from streaming applications produce duplicated messages to the resulting topics in Pulsar.
- With the transaction introduced in Pulsar 2.8.0, the Pulsar Flink sink connector can support exactly-once semantics by implementing the designated `TwoPhaseCommitSinkFunction` and hooking up the Flink sink message lifecycle with Pulsar transaction API.
+ With the transaction introduced in Pulsar 2.8.0, the Pulsar Flink sink connector can support exactly-once semantics by implementing the designated `TwoPhaseCommitSinkFunction` and hooking up the Flink sink message lifecycle with Pulsar transaction API.
* Support for Pulsar Functions and other connectors will be added in future releases.
diff --git a/docs/txn-why.md b/docs/txn-why.md
index 93654763e4d..7c9348eb3ad 100644
--- a/docs/txn-why.md
+++ b/docs/txn-why.md
@@ -21,24 +21,24 @@ The Pulsar transactions API strengthens the message delivery semantics and the p
## Limitation of idempotent producer
-Avoiding data loss or duplication can be achieved by using the Pulsar idempotent producer, but it does not provide guarantees for writes across multiple partitions.
+Avoiding data loss or duplication can be achieved by using the Pulsar idempotent producer, but it does not provide guarantees for writes across multiple partitions.
In Pulsar, the highest level of message delivery guarantee is using an [idempotent producer](concepts-messaging.md#producer-idempotency) with the exactly once semantic at one single partition, that is, each message is persisted exactly once without data loss and duplication. However, there are some limitations in this solution:
-- Due to the monotonic increasing sequence ID, this solution only works on a single partition and within a single producer session (that is, for producing one message), so there is no atomicity when producing multiple messages to one or multiple partitions.
-
- In this case, if there are some failures (for example, client / broker / bookie crashes, network failure, and more) in the process of producing and receiving messages, messages are re-processed and re-delivered, which may cause data loss or data duplication:
+- Due to the monotonic increasing sequence ID, this solution only works on a single partition and within a single producer session (that is, for producing one message), so there is no atomicity when producing multiple messages to one or multiple partitions.
- - For the producer: if the producer retries sending messages, some messages are persisted multiple times; if the producer does not retry sending messages, some messages are persisted once and other messages are lost.
-
- - For the consumer: since the consumer does not know whether the broker has received messages or not, the consumer may not retry sending acks, which causes it to receive duplicate messages.
+ In this case, if there are some failures (for example, client / broker / bookie crashes, network failure, and more) in the process of producing and receiving messages, messages are re-processed and re-delivered, which may cause data loss or data duplication:
-- Similarly, for Pulsar Function, it only guarantees the exactly once semantics for an idempotent function on a single event rather than processing multiple events or producing multiple results that can happen exactly.
+ - For the producer: if the producer retries sending messages, some messages are persisted multiple times; if the producer does not retry sending messages, some messages are persisted once and other messages are lost.
+
+ - For the consumer: since the consumer does not know whether the broker has received messages or not, the consumer may not retry sending acks, which causes it to receive duplicate messages.
+
+- Similarly, for Pulsar Function, it only guarantees the exactly once semantics for an idempotent function on a single event rather than processing multiple events or producing multiple results that can happen exactly.
For example, if a function accepts multiple events and produces one result (for example, window function), the function may fail between producing the result and acknowledging the incoming messages, or even between acknowledging individual events, which causes all (or some) incoming messages to be re-delivered and reprocessed, and a new result is generated.
However, many scenarios need atomic guarantees across multiple partitions and sessions.
-- Consumers need to rely on more mechanisms to acknowledge (ack) messages once.
-
+- Consumers need to rely on more mechanisms to acknowledge (ack) messages once.
+
For example, consumers are required to store the MessageID along with its acked state. After the topic is unloaded, the subscription can recover the acked state of this MessageID in memory when the topic is loaded again.
\ No newline at end of file
diff --git a/docs/window-functions-context.md b/docs/window-functions-context.md
index b61566082a7..a2e0145a85e 100644
--- a/docs/window-functions-context.md
+++ b/docs/window-functions-context.md
@@ -14,25 +14,25 @@ Java SDK provides access to a **window context object** that can be used by a wi
* ID of the Pulsar function instance running the window function.
* Number of instances that invoke the window function.
* Built-in type or custom class name of the output schema.
-
+
- [Logger](#logger)
-
+
* Logger object used by the window function, which can be used to create window function log messages.
- [User config](#user-config)
-
+
* Access to arbitrary user configuration values.
- [Routing](#routing)
-
+
* Routing is supported in Pulsar window functions. Pulsar window functions send messages to arbitrary topics as per the `publish` interface.
- [Metrics](#metrics)
-
+
* Interface for recording metrics.
- [State storage](#state-storage)
-
+
* Interface for storing and retrieving state in [state storage](#state-storage).
## Spec
@@ -254,7 +254,7 @@ public class LoggingWindowFunction implements WindowFunction<String, Void> {
}
```
-If you need your function to produce logs, specify a log topic when creating or running the function.
+If you need your function to produce logs, specify a log topic when creating or running the function.
```bash
bin/pulsar-admin functions create \
@@ -268,7 +268,7 @@ You can access all logs produced by `LoggingFunction` via the `persistent://publ
## Metrics
-Pulsar window functions can publish arbitrary metrics to the metrics interface which can be queried.
+Pulsar window functions can publish arbitrary metrics to the metrics interface which can be queried.
:::note
@@ -276,9 +276,9 @@ If a Pulsar window function uses the language-native interface for Java, that fu
:::
-You can record metrics using the context object on a per-key basis.
+You can record metrics using the context object on a per-key basis.
-This example sets a metric for the `process-count` key and a different metric for the `elevens-count` key every time the function processes a message in a Java function.
+This example sets a metric for the `process-count` key and a different metric for the `elevens-count` key every time the function processes a message in a Java function.
```java
import java.util.Collection;
@@ -308,7 +308,7 @@ public class UserMetricWindowFunction implements WindowFunction<String, Void> {
## User config
-When you run or update Pulsar Functions that are created using SDK, you can pass arbitrary key/value pairs to them with the `--user-config` flag. Key/value pairs **must** be specified as JSON.
+When you run or update Pulsar Functions that are created using SDK, you can pass arbitrary key/value pairs to them with the `--user-config` flag. Key/value pairs **must** be specified as JSON.
This example passes a user-configured key/value to a function.
@@ -365,7 +365,7 @@ The `getUserConfigValueOrDefault` API gets a user-defined key/value or a default
This example demonstrates how to access key/value pairs provided to Pulsar window functions.
-Java SDK context object enables you to access key/value pairs provided to Pulsar window functions via the command line (as JSON).
+Java SDK context object enables you to access key/value pairs provided to Pulsar window functions via the command line (as JSON).
:::tip
@@ -383,7 +383,7 @@ bin/pulsar-admin functions create \
This example accesses values in a Java window function.
-The `UserConfigFunction` function logs the string `"The word of the day is verdure"` every time the function is invoked (which means every time a message arrives). The user config of `word-of-the-day` is changed **only** when the function is updated with a new config value via
+The `UserConfigFunction` function logs the string `"The word of the day is verdure"` every time the function is invoked (which means every time a message arrives). The user config of `word-of-the-day` is changed **only** when the function is updated with a new config value via
multiple ways, such as the command line tool or REST API.
```java
@@ -452,7 +452,7 @@ Currently, Pulsar window functions expose Java API to access, update, and manage
|`getCounter`|Gets the counter value for the key.
|`putState`|Updates the state value for the key.
-You can use the following APIs to access, update, and manage states in Java window functions.
+You can use the following APIs to access, update, and manage states in Java window functions.
#### incrCounter
diff --git a/versioned_docs/version-2.10.x/about.md b/versioned_docs/version-2.10.x/about.md
index 8a27daa3b04..94cfd03faa6 100644
--- a/versioned_docs/version-2.10.x/about.md
+++ b/versioned_docs/version-2.10.x/about.md
@@ -13,16 +13,16 @@ import { docUrl } from "@site/src/utils/index";
# Welcome to the Apache Pulsar documentation portal
***
-This portal holds a variety of topics, tutorials, guides, and reference material to help you work with Pulsar.
+This portal holds a variety of topics, tutorials, guides, and reference material to help you work with Pulsar.
## Choose your path....
Select one of the content blocks below to begin your Pulsar journey. If you ...
* Are new to Pulsar, start with **About Pulsar** to learn about features and concepts.
* Want to jump to the quickstart, select **Get Started**.
* Are an operator responsible for architecting and supporting Apache Pulsar, start with **Install, Deploy, Upgrade**.
-* Are a developer who wants to master Apache Pulsar, select **Pulsar for Developers**.
+* Are a developer who wants to master Apache Pulsar, select **Pulsar for Developers**.
* Want to try out Pulsar, select **How To** for access to the "hello world" tutorial.
-* An experienced Pulsar coder looking for API, metrics, or configuration documentation, go to **Reference**.
+* An experienced Pulsar coder looking for API, metrics, or configuration documentation, go to **Reference**.
<BlockLinks>
<BlockLink title="About Pulsar" url="/docs/2.10.x/concepts-overview/" />
diff --git a/versioned_docs/version-2.10.x/administration-proxy.md b/versioned_docs/version-2.10.x/administration-proxy.md
index 202d7d64343..7c96ec653db 100644
--- a/versioned_docs/version-2.10.x/administration-proxy.md
+++ b/versioned_docs/version-2.10.x/administration-proxy.md
@@ -65,7 +65,7 @@ Unless the Pulsar Proxy is explicitly configured to limit access, the Pulsar Pro
It is necessary to limit proxied broker connections to known broker addresses by specifying `brokerProxyAllowedHostNames` and `brokerProxyAllowedIPAddresses` settings.
-When specifying `brokerProxyAllowedHostNames`, it's possible to use a wildcard.
+When specifying `brokerProxyAllowedHostNames`, it's possible to use a wildcard.
Please notice that `*` is a wildcard that matches any character in the hostname. It also matches dot `.` characters.
It is recommended to use a pattern that matches only the desired brokers and no other hosts in the local network. Pulsar lookups will use the default host name of the broker by default. This can be overridden with the `advertisedAddress` setting in `broker.conf`.
@@ -75,7 +75,7 @@ To increase security, it is also possible to restrict access with the `brokerPro
Example: limiting by host name in a Kubernetes deployment
```yaml
- # example of limiting to Kubernetes statefulset hostnames that contain "broker-"
+ # example of limiting to Kubernetes statefulset hostnames that contain "broker-"
PULSAR_PREFIX_brokerProxyAllowedHostNames: '*broker-*.*.*.svc.cluster.local'
```
diff --git a/versioned_docs/version-2.10.x/administration-upgrade.md b/versioned_docs/version-2.10.x/administration-upgrade.md
index 72d136b6460..9a069c7e660 100644
--- a/versioned_docs/version-2.10.x/administration-upgrade.md
+++ b/versioned_docs/version-2.10.x/administration-upgrade.md
@@ -12,41 +12,41 @@ Apache Pulsar is comprised of multiple components, ZooKeeper, bookies, and broke
The following are some guidelines on upgrading a Pulsar cluster. Read the guidelines before upgrading.
- Backup all your configuration files before upgrading.
-- Read guide entirely, make a plan, and then execute the plan. When you make upgrade plan, you need to take your specific requirements and environment into consideration.
-- Pay attention to the upgrading order of components. In general, you do not need to upgrade your ZooKeeper or configuration store cluster (the global ZooKeeper cluster). You need to upgrade bookies first, and then upgrade brokers, proxies, and your clients.
+- Read guide entirely, make a plan, and then execute the plan. When you make upgrade plan, you need to take your specific requirements and environment into consideration.
+- Pay attention to the upgrading order of components. In general, you do not need to upgrade your ZooKeeper or configuration store cluster (the global ZooKeeper cluster). You need to upgrade bookies first, and then upgrade brokers, proxies, and your clients.
- If `autorecovery` is enabled, you need to disable `autorecovery` in the upgrade process, and re-enable it after completing the process.
- Read the release notes carefully for each release. Release notes contain features, configuration changes that might impact your upgrade.
- Upgrade a small subset of nodes of each type to canary test the new version before upgrading all nodes of that type in the cluster. When you have upgraded the canary nodes, run for a while to ensure that they work correctly.
- Upgrade one data center to verify new version before upgrading all data centers if your cluster runs in multi-cluster replicated mode.
-> Note: Currently, Apache Pulsar is compatible between versions.
+> Note: Currently, Apache Pulsar is compatible between versions.
## Upgrade sequence
To upgrade an Apache Pulsar cluster, follow the upgrade sequence.
-1. Upgrade ZooKeeper (optional)
-- Canary test: test an upgraded version in one or a small set of ZooKeeper nodes.
+1. Upgrade ZooKeeper (optional)
+- Canary test: test an upgraded version in one or a small set of ZooKeeper nodes.
- Rolling upgrade: rollout the upgraded version to all ZooKeeper servers incrementally, one at a time. Monitor your dashboard during the whole rolling upgrade process.
-2. Upgrade bookies
+2. Upgrade bookies
- Canary test: test an upgraded version in one or a small set of bookies.
-- Rolling upgrade:
+- Rolling upgrade:
- a. Disable `autorecovery` with the following command.
```shell
-
+
bin/bookkeeper shell autorecovery -disable
-
+
```
-
- - b. Rollout the upgraded version to all bookies in the cluster after you determine that a version is safe after canary.
+
+ - b. Rollout the upgraded version to all bookies in the cluster after you determine that a version is safe after canary.
- c. After you upgrade all bookies, re-enable `autorecovery` with the following command.
```shell
-
+
bin/bookkeeper shell autorecovery -enable
-
+
```
3. Upgrade brokers
@@ -77,7 +77,7 @@ If issues occur during canary test, you can shut down the problematic ZooKeeper
### Upgrade all ZooKeeper servers
-After canary test to upgrade one ZooKeeper in your cluster, you can upgrade all ZooKeeper servers in your cluster.
+After canary test to upgrade one ZooKeeper in your cluster, you can upgrade all ZooKeeper servers in your cluster.
You can upgrade all ZooKeeper servers one by one by following steps in canary test.
@@ -97,28 +97,28 @@ To upgrade bookie to a new version, complete the following steps:
3. Start the bookie in `ReadOnly` mode to verify if the bookie of this new version runs well for read workload.
```shell
-
+
bin/pulsar bookie --readOnly
-
+
```
4. When the bookie runs successfully in `ReadOnly` mode, stop the bookie and restart it in `Write/Read` mode.
```shell
-
+
bin/pulsar bookie
-
+
```
5. Observe and make sure the cluster serves both write and read traffic.
#### Canary rollback
-If issues occur during the canary test, you can shut down the problematic bookie node. Other bookies in the cluster replaces this problematic bookie node with autorecovery.
+If issues occur during the canary test, you can shut down the problematic bookie node. Other bookies in the cluster replaces this problematic bookie node with autorecovery.
### Upgrade all bookies
-After canary test to upgrade some bookies in your cluster, you can upgrade all bookies in your cluster.
+After canary test to upgrade some bookies in your cluster, you can upgrade all bookies in your cluster.
Before upgrading, you have to decide whether to upgrade the whole cluster at once, including downtime and rolling upgrade scenarios.
@@ -126,11 +126,11 @@ In a rolling upgrade scenario, upgrade one bookie at a time. In a downtime upgra
While you upgrade in both scenarios, the procedure is the same for each bookie.
-1. Stop the bookie.
+1. Stop the bookie.
2. Upgrade the software (either new binary or new configuration files).
2. Start the bookie.
-> **Advanced operations**
+> **Advanced operations**
> When you upgrade a large BookKeeper cluster in a rolling upgrade scenario, upgrading one bookie at a time is slow. If you configure rack-aware or region-aware placement policy, you can upgrade bookies rack by rack or region by region, which speeds up the whole upgrade process.
## Upgrade brokers and proxies
@@ -153,7 +153,7 @@ If issues occur during canary test, you can shut down the problematic broker (or
### Upgrade all brokers or proxies
-After canary test to upgrade some brokers or proxies in your cluster, you can upgrade all brokers or proxies in your cluster.
+After canary test to upgrade some brokers or proxies in your cluster, you can upgrade all brokers or proxies in your cluster.
Before upgrading, you have to decide whether to upgrade the whole cluster at once, including downtime and rolling upgrade scenarios.
@@ -163,6 +163,6 @@ In a downtime upgrade scenario, shut down the entire cluster, upgrade each broke
While you upgrade in both scenarios, the procedure is the same for each broker or proxy.
-1. Stop the broker or proxy.
+1. Stop the broker or proxy.
2. Upgrade the software (either new binary or new configuration files).
3. Start the broker or proxy.
diff --git a/versioned_docs/version-2.10.x/administration-zk-bk.md b/versioned_docs/version-2.10.x/administration-zk-bk.md
index 4dcef9d3d0a..5fac18999b1 100644
--- a/versioned_docs/version-2.10.x/administration-zk-bk.md
+++ b/versioned_docs/version-2.10.x/administration-zk-bk.md
@@ -20,7 +20,7 @@ ZooKeeper and BookKeeper are both open-source [Apache](https://www.apache.org/)
Each Pulsar instance relies on two separate ZooKeeper quorums.
* [Local ZooKeeper](#deploy-local-zookeeper) operates at the cluster level and provides cluster-specific configuration management and coordination. Each Pulsar cluster needs to have a dedicated ZooKeeper cluster.
-* [Configuration Store](#deploy-configuration-store) operates at the instance level and provides configuration management for the entire system (and thus across clusters). An independent cluster of machines or the same machines that local ZooKeeper uses can provide the configuration store quorum.
+* [Configuration Store](#deploy-configuration-store) operates at the instance level and provides configuration management for the entire system (and thus across clusters). An independent cluster of machines or the same machines that local ZooKeeper uses can provide the configuration store quorum.
### Deploy local ZooKeeper
@@ -271,7 +271,7 @@ And then you can decommission bookies safely. To decommission bookies, complete
or
`$ bin/bookkeeper shell decommissionbookie -bookieid <target bookieid>`
-4. Validate that no ledgers are on the decommissioned bookie.
+4. Validate that no ledgers are on the decommissioned bookie.
`$ bin/bookkeeper shell listledgers -bookieid <target bookieid>`
You can run the following command to check if the bookie you have decommissioned is listed in the bookies list:
diff --git a/versioned_docs/version-2.10.x/client-libraries-cgo.md b/versioned_docs/version-2.10.x/client-libraries-cgo.md
index feee2cac3ba..133e72aad86 100644
--- a/versioned_docs/version-2.10.x/client-libraries-cgo.md
+++ b/versioned_docs/version-2.10.x/client-libraries-cgo.md
@@ -18,7 +18,7 @@ Currently, the following Go clients are maintained in two repositories.
| CGo | [pulsar-client-go](https://github.com/apache/pulsar/tree/master/pulsar-client-go) | [Apache Pulsar](https://github.com/apache/pulsar) | [](https://opensource.org/licenses/Apache-2.0) | CGo client that depends on C++ client library |
| Go | [pulsar-client-go](https://github.com/apache/pulsar-client-go) | [Apache Pulsar](https://github.com/apache/pulsar) | [](https://opensource.org/licenses/Apache-2.0) | A native golang client |
-> **API docs available as well**
+> **API docs available as well**
> For standard API docs, consult the [Godoc](https://godoc.org/github.com/apache/pulsar/pulsar-client-go/pulsar).
## Installation
@@ -30,7 +30,7 @@ the instructions for [C++ library](client-libraries-cpp.md) for installing the b
### Install go package
-> **Compatibility Warning**
+> **Compatibility Warning**
> The version number of the Go client **must match** the version number of the Pulsar C++ client library.
You can install the `pulsar` library locally using `go get`. Note that `go get` doesn't support fetching a specific tag - it will always pull in master's version of the Go client. You'll need a C++ client library that matches master.
@@ -153,7 +153,7 @@ if err := producer.Send(context.Background(), msg); err != nil {
```
-> **Blocking operation**
+> **Blocking operation**
> When you create a new Pulsar producer, the operation will block (waiting on a go channel) until either a producer is successfully created or an error is thrown.
@@ -168,7 +168,7 @@ Method | Description | Return type
`Send(context.Context, ProducerMessage)` | Publishes a [message](#messages) to the producer's topic. This call will block until the message is successfully acknowledged by the Pulsar broker, or an error will be thrown if the timeout set using the `SendTimeout` in the producer's [configuration](#producer-configuration) is exceeded. | `error`
`SendAndGetMsgID(context.Context, ProducerMessage)`| Send a message, this call will be blocking until is successfully acknowledged by the Pulsar broker. | (MessageID, error)
`SendAsync(context.Context, ProducerMessage, func(ProducerMessage, error))` | Publishes a [message](#messages) to the producer's topic asynchronously. The third argument is a callback function that specifies what happens either when the message is acknowledged or an error is thrown. |
-`SendAndGetMsgIDAsync(context.Context, ProducerMessage, func(MessageID, error))`| Send a message in asynchronous mode. The callback will report back the message being published and the eventual error in publishing |
+`SendAndGetMsgIDAsync(context.Context, ProducerMessage, func(MessageID, error))`| Send a message in asynchronous mode. The callback will report back the message being published and the eventual error in publishing |
`LastSequenceID()` | Get the last sequence id that was published by this producer. his represent either the automatically assigned or custom sequence id (set on the ProducerMessage) that was published and acknowledged by the broker. | int64
`Flush()`| Flush all the messages buffered in the client and wait until all messages have been successfully persisted. | error
`Close()` | Closes the producer and releases all resources allocated to it. If `Close()` is called then no more messages will be accepted from the publisher. This method will block until all pending publish requests have been persisted by Pulsar. If an error is thrown, no pending writes will be retried. | `error`
@@ -237,7 +237,7 @@ Parameter | Description | Default
:---------|:------------|:-------
`Topic` | The Pulsar [topic](reference-terminology.md#topic) to which the producer will publish messages |
`Name` | A name for the producer. If you don't explicitly assign a name, Pulsar will automatically generate a globally unique name that you can access later using the `Name()` method. If you choose to explicitly assign a name, it will need to be unique across *all* Pulsar clusters, otherwise the creation operation will throw an error. |
-`Properties`| Attach a set of application defined properties to the producer. This properties will be visible in the topic stats |
+`Properties`| Attach a set of application defined properties to the producer. This properties will be visible in the topic stats |
`SendTimeout` | When publishing a message to a topic, the producer will wait for an acknowledgment from the responsible Pulsar [broker](reference-terminology.md#broker). If a message is not acknowledged within the threshold set by this parameter, an error will be thrown. If you set `SendTimeout` to -1, the timeout will be set to infinity (and thus removed). Removing the send timeout is recommended when using Pulsar's [message de-duplication](cookbooks-deduplication.md) feature. | 30 seconds
`MaxPendingMessages` | The maximum size of the queue holding pending messages (i.e. messages waiting to receive an acknowledgment from the [broker](reference-terminology.md#broker)). By default, when the queue is full all calls to the `Send` and `SendAsync` methods will fail *unless* `BlockIfQueueFull` is set to `true`. |
`MaxPendingMessagesAcrossPartitions` | Set the number of max pending messages across all the partitions. This setting will be used to lower the max pending messages for each partition `MaxPendingMessages(int)`, if the total exceeds the configured value.|
@@ -284,7 +284,7 @@ for cm := range msgChannel {
```
-> **Blocking operation**
+> **Blocking operation**
> When you create a new Pulsar consumer, the operation will block (on a go channel) until either a producer is successfully created or an error is thrown.
@@ -394,7 +394,7 @@ reader, err := client.CreateReader(pulsar.ReaderOptions{
```
-> **Blocking operation**
+> **Blocking operation**
> When you create a new Pulsar reader, the operation will block (on a go channel) until either a reader is successfully created or an error is thrown.
@@ -470,8 +470,8 @@ reader, err := client.CreateReader(pulsar.ReaderOptions{
Parameter | Description | Default
:---------|:------------|:-------
-`Topic` | The Pulsar [topic](reference-terminology.md#topic) on which the reader will establish a subscription and listen for messages
-`Name` | The name of the reader
+`Topic` | The Pulsar [topic](reference-terminology.md#topic) on which the reader will establish a subscription and listen for messages
+`Name` | The name of the reader
`StartMessageID` | The initial reader position, i.e. the message at which the reader begins processing messages. The options are `pulsar.EarliestMessage` (the earliest available message on the topic), `pulsar.LatestMessage` (the latest available message on the topic), or a `MessageID` object for a position that isn't earliest or latest. |
`MessageChannel` | The Go channel used by the reader. Messages that arrive from the Pulsar topic(s) will be passed to this channel. |
`ReceiverQueueSize` | Sets the size of the reader's receiver queue, i.e. the number of messages that can be accumulated by the reader before the application calls `Next`. A value higher than the default of 1000 could increase reader throughput, though at the expense of more memory utilization. | 1000
diff --git a/versioned_docs/version-2.10.x/client-libraries-dotnet.md b/versioned_docs/version-2.10.x/client-libraries-dotnet.md
index e2525ce5aa1..45b85258b86 100644
--- a/versioned_docs/version-2.10.x/client-libraries-dotnet.md
+++ b/versioned_docs/version-2.10.x/client-libraries-dotnet.md
@@ -28,9 +28,9 @@ To install the Pulsar C# client library, follow these steps:
3. Create the project using the following command.
```
-
+
dotnet new console
-
+
```
4. Use `dotnet run` to test that the app has been created properly.
@@ -40,19 +40,19 @@ To install the Pulsar C# client library, follow these steps:
1. Use the following command to install the `DotPulsar` package.
```
-
+
dotnet add package DotPulsar
-
+
```
2. After the command completes, open the `.csproj` file to see the added reference.
```xml
-
+
<ItemGroup>
<PackageReference Include="DotPulsar" Version="2.0.1" />
</ItemGroup>
-
+
```
## Client
@@ -85,25 +85,25 @@ This section describes how to create a producer.
- Create a producer by using the builder.
```c#
-
+
using DotPulsar;
using DotPulsar.Extensions;
var producer = client.NewProducer())
.Topic("persistent://public/default/mytopic")
.Create();
-
+
```
- Create a producer without using the builder.
```c#
-
+
using DotPulsar;
var options = new ProducerOptions<byte[]>("persistent://public/default/mytopic", Schema.ByteArray);
var producer = client.CreateProducer(options);
-
+
```
### Create consumer
@@ -113,7 +113,7 @@ This section describes how to create a consumer.
- Create a consumer by using the builder.
```c#
-
+
using DotPulsar;
using DotPulsar.Extensions;
@@ -121,18 +121,18 @@ This section describes how to create a consumer.
.SubscriptionName("MySubscription")
.Topic("persistent://public/default/mytopic")
.Create();
-
+
```
- Create a consumer without using the builder.
```c#
-
+
using DotPulsar;
var options = new ConsumerOptions<byte[]>("MySubscription", "persistent://public/default/mytopic", Schema.ByteArray);
var consumer = client.CreateConsumer(options);
-
+
```
### Create reader
@@ -142,7 +142,7 @@ This section describes how to create a reader.
- Create a reader by using the builder.
```c#
-
+
using DotPulsar;
using DotPulsar.Extensions;
@@ -150,18 +150,18 @@ This section describes how to create a reader.
.StartMessageId(MessageId.Earliest)
.Topic("persistent://public/default/mytopic")
.Create();
-
+
```
- Create a reader without using the builder.
```c#
-
+
using DotPulsar;
var options = new ReaderOptions<byte[]>(MessageId.Earliest, "persistent://public/default/mytopic", Schema.ByteArray);
var reader = client.CreateReader(options);
-
+
```
### Configure encryption policies
@@ -194,15 +194,15 @@ If you have followed [Authentication using TLS](security-tls-authentication.md),
1. Create an unencrypted and password-less pfx file.
```c#
-
+
openssl pkcs12 -export -keypbe NONE -certpbe NONE -out admin.pfx -inkey admin.key.pem -in admin.cert.pem -passout pass:
-
+
```
2. Use the admin.pfx file to create an X509Certificate2 and pass it to the Pulsar C# client.
```c#
-
+
using System.Security.Cryptography.X509Certificates;
using DotPulsar;
@@ -210,7 +210,7 @@ If you have followed [Authentication using TLS](security-tls-authentication.md),
var client = PulsarClient.Builder()
.AuthenticateUsingClientCertificate(clientCertificate)
.Build();
-
+
```
## Producer
@@ -233,22 +233,22 @@ await producer.Send(data);
- Send messages with customized metadata by using the builder.
```c#
-
+
var messageId = await producer.NewMessage()
.Property("SomeKey", "SomeValue")
.Send(data);
-
+
```
- Send messages with customized metadata without using the builder.
```c#
-
+
var data = Encoding.UTF8.GetBytes("Hello World");
var metadata = new MessageMetadata();
metadata["SomeKey"] = "SomeValue";
var messageId = await producer.Send(metadata, data));
-
+
```
## Consumer
@@ -275,17 +275,17 @@ Messages can be acknowledged individually or cumulatively. For details about mes
- Acknowledge messages individually.
```c#
-
+
await consumer.Acknowledge(message);
-
+
```
- Acknowledge messages cumulatively.
```c#
-
+
await consumer.AcknowledgeCumulative(message);
-
+
```
### Unsubscribe from topics
diff --git a/versioned_docs/version-2.10.x/client-libraries-go.md b/versioned_docs/version-2.10.x/client-libraries-go.md
index aa36fa786ac..23c45080c3b 100644
--- a/versioned_docs/version-2.10.x/client-libraries-go.md
+++ b/versioned_docs/version-2.10.x/client-libraries-go.md
@@ -9,7 +9,7 @@ original_id: client-libraries-go
You can use Pulsar [Go client](https://github.com/apache/pulsar-client-go) to create Pulsar [producers](#producers), [consumers](#consumers), and [readers](#readers) in Go (aka Golang).
-> **API docs available as well**
+> **API docs available as well**
> For standard API docs, consult the [Godoc](https://godoc.org/github.com/apache/pulsar-client-go/pulsar).
@@ -17,7 +17,7 @@ You can use Pulsar [Go client](https://github.com/apache/pulsar-client-go) to cr
### Install go package
-You can get the `pulsar` library by using `go get` or use it with `go module`.
+You can get the `pulsar` library by using `go get` or use it with `go module`.
Download the library of Go client to local environment:
@@ -47,7 +47,7 @@ Write a sample script in the `test_dir` directory (such as `test_example.go`) an
```bash
-$ go mod init test_dir
+$ go mod init test_dir
$ go mod tidy && go mod download
$ go build test_example.go
$ ./test_example
@@ -195,10 +195,10 @@ Method | Description | Return type
`Topic()` | Fetches the producer's [topic](reference-terminology.md#topic)| `string`
`Name()` | Fetches the producer's name | `string`
`Send(context.Context, *ProducerMessage)` | Publishes a [message](#messages) to the producer's topic. This call will block until the message is successfully acknowledged by the Pulsar broker, or an error will be thrown if the timeout set using the `SendTimeout` in the producer's [configuration](#producer-configuration) is exceeded. | (MessageID, error)
-`SendAsync(context.Context, *ProducerMessage, func(MessageID, *ProducerMessage, error))`| Send a message, this call will be blocking until is successfully acknowledged by the Pulsar broker. |
+`SendAsync(context.Context, *ProducerMessage, func(MessageID, *ProducerMessage, error))`| Send a message, this call will be blocking until is successfully acknowledged by the Pulsar broker. |
`LastSequenceID()` | Get the last sequence id that was published by this producer. his represent either the automatically assigned or custom sequence id (set on the ProducerMessage) that was published and acknowledged by the broker. | int64
`Flush()`| Flush all the messages buffered in the client and wait until all messages have been successfully persisted. | error
-`Close()` | Closes the producer and releases all resources allocated to it. If `Close()` is called then no more messages will be accepted from the publisher. This method will block until all pending publish requests have been persisted by Pulsar. If an error is thrown, no pending writes will be retried. |
+`Close()` | Closes the producer and releases all resources allocated to it. If `Close()` is called then no more messages will be accepted from the publisher. This method will block until all pending publish requests have been persisted by Pulsar. If an error is thrown, no pending writes will be retried. |
### Producer Example
@@ -436,23 +436,23 @@ Now you can query Pulsar client metrics on Prometheus.
Name | Description | Default
| :-------- | :---------- |:---------- |
| Topic | Topic specify the topic this consumer will subscribe to. This argument is required when constructing the reader. | |
-| Name | Name specify a name for the producer. If not assigned, the system will generate a globally unique name which can be access with Producer.ProducerName(). | |
+| Name | Name specify a name for the producer. If not assigned, the system will generate a globally unique name which can be access with Producer.ProducerName(). | |
| Properties | Properties attach a set of application defined properties to the producer This properties will be visible in the topic stats | |
| SendTimeout | SendTimeout set the timeout for a message that is not acknowledged by the server | 30s |
| DisableBlockIfQueueFull | DisableBlockIfQueueFull control whether Send and SendAsync block if producer's message queue is full | false |
| MaxPendingMessages| MaxPendingMessages set the max size of the queue holding the messages pending to receive an acknowledgment from the broker. | |
| HashingScheme | HashingScheme change the `HashingScheme` used to chose the partition on where to publish a particular message. | JavaStringHash |
-| CompressionType | CompressionType set the compression type for the producer. | not compressed |
-| CompressionLevel | Define the desired compression level. Options: Default, Faster and Better | Default |
+| CompressionType | CompressionType set the compression type for the producer. | not compressed |
+| CompressionLevel | Define the desired compression level. Options: Default, Faster and Better | Default |
| MessageRouter | MessageRouter set a custom message routing policy by passing an implementation of MessageRouter | |
| DisableBatching | DisableBatching control whether automatic batching of messages is enabled for the producer. | false |
| BatchingMaxPublishDelay | BatchingMaxPublishDelay set the time period within which the messages sent will be batched | 1ms |
-| BatchingMaxMessages | BatchingMaxMessages set the maximum number of messages permitted in a batch. | 1000 |
-| BatchingMaxSize | BatchingMaxSize sets the maximum number of bytes permitted in a batch. | 128KB |
-| Schema | Schema set a custom schema type by passing an implementation of `Schema` | bytes[] |
-| Interceptors | A chain of interceptors. These interceptors are called at some points defined in the `ProducerInterceptor` interface. | None |
-| MaxReconnectToBroker | MaxReconnectToBroker set the maximum retry number of reconnectToBroker | ultimate |
-| BatcherBuilderType | BatcherBuilderType sets the batch builder type. This is used to create a batch container when batching is enabled. Options: DefaultBatchBuilder and KeyBasedBatchBuilder | DefaultBatchBuilder |
+| BatchingMaxMessages | BatchingMaxMessages set the maximum number of messages permitted in a batch. | 1000 |
+| BatchingMaxSize | BatchingMaxSize sets the maximum number of bytes permitted in a batch. | 128KB |
+| Schema | Schema set a custom schema type by passing an implementation of `Schema` | bytes[] |
+| Interceptors | A chain of interceptors. These interceptors are called at some points defined in the `ProducerInterceptor` interface. | None |
+| MaxReconnectToBroker | MaxReconnectToBroker set the maximum retry number of reconnectToBroker | ultimate |
+| BatcherBuilderType | BatcherBuilderType sets the batch builder type. This is used to create a batch container when batching is enabled. Options: DefaultBatchBuilder and KeyBasedBatchBuilder | DefaultBatchBuilder |
## Consumers
@@ -498,14 +498,14 @@ Method | Description | Return type
`Unsubcribe()` | Unsubscribes the consumer from the assigned topic. Throws an error if the unsubscribe operation is somehow unsuccessful. | `error`
`Receive(context.Context)` | Receives a single message from the topic. This method blocks until a message is available. | `(Message, error)`
`Chan()` | Chan returns a channel from which to consume messages. | `<-chan ConsumerMessage`
-`Ack(Message)` | [Acknowledges](reference-terminology.md#acknowledgment-ack) a message to the Pulsar [broker](reference-terminology.md#broker) |
-`AckID(MessageID)` | [Acknowledges](reference-terminology.md#acknowledgment-ack) a message to the Pulsar [broker](reference-terminology.md#broker) by message ID |
-`ReconsumeLater(msg Message, delay time.Duration)` | ReconsumeLater mark a message for redelivery after custom delay |
-`Nack(Message)` | Acknowledge the failure to process a single message. |
-`NackID(MessageID)` | Acknowledge the failure to process a single message. |
+`Ack(Message)` | [Acknowledges](reference-terminology.md#acknowledgment-ack) a message to the Pulsar [broker](reference-terminology.md#broker) |
+`AckID(MessageID)` | [Acknowledges](reference-terminology.md#acknowledgment-ack) a message to the Pulsar [broker](reference-terminology.md#broker) by message ID |
+`ReconsumeLater(msg Message, delay time.Duration)` | ReconsumeLater mark a message for redelivery after custom delay |
+`Nack(Message)` | Acknowledge the failure to process a single message. |
+`NackID(MessageID)` | Acknowledge the failure to process a single message. |
`Seek(msgID MessageID)` | Reset the subscription associated with this consumer to a specific message id. The message id can either be a specific message or represent the first or last messages in the topic. | `error`
`SeekByTime(time time.Time)` | Reset the subscription associated with this consumer to a specific message publish time. | `error`
-`Close()` | Closes the consumer, disabling its ability to receive messages from the broker |
+`Close()` | Closes the consumer, disabling its ability to receive messages from the broker |
`Name()` | Name returns the name of consumer | `string`
### Receive example
@@ -796,13 +796,13 @@ Now you can query Pulsar client metrics on Prometheus.
| TopicsPattern | Specify a regular expression to subscribe to multiple topics under the same namespace. Either a topic, a list of topics or a topics pattern are required when subscribing | |
| AutoDiscoveryPeriod | Specify the interval in which to poll for new partitions or new topics if using a TopicsPattern. | |
| SubscriptionName | Specify the subscription name for this consumer. This argument is required when subscribing | |
-| Name | Set the consumer name | |
+| Name | Set the consumer name | |
| Properties | Properties attach a set of application defined properties to the producer This properties will be visible in the topic stats | |
| Type | Select the subscription type to be used when subscribing to the topic. | Exclusive |
| SubscriptionInitialPosition | InitialPosition at which the cursor will be set when subscribe | Latest |
-| DLQ | Configuration for Dead Letter Queue consumer policy. | no DLQ |
-| MessageChannel | Sets a `MessageChannel` for the consumer. When a message is received, it will be pushed to the channel for consumption | |
-| ReceiverQueueSize | Sets the size of the consumer receive queue. | 1000|
+| DLQ | Configuration for Dead Letter Queue consumer policy. | no DLQ |
+| MessageChannel | Sets a `MessageChannel` for the consumer. When a message is received, it will be pushed to the channel for consumption | |
+| ReceiverQueueSize | Sets the size of the consumer receive queue. | 1000|
| NackRedeliveryDelay | The delay after which to redeliver the messages that failed to be processed | 1min |
| ReadCompacted | If enabled, the consumer will read messages from the compacted topic rather than reading the full message backlog of the topic | false |
| ReplicateSubscriptionState | Mark the subscription as replicated to keep it in sync across clusters | false |
@@ -975,13 +975,13 @@ defer readerInclusive.Close()
Name | Description | Default
| :-------- | :---------- |:---------- |
| Topic | Topic specify the topic this consumer will subscribe to. This argument is required when constructing the reader. | |
-| Name | Name set the reader name. | |
+| Name | Name set the reader name. | |
| Properties | Attach a set of application defined properties to the reader. This properties will be visible in the topic stats | |
| StartMessageID | StartMessageID initial reader positioning is done by specifying a message id. | |
| StartMessageIDInclusive | If true, the reader will start at the `StartMessageID`, included. Default is `false` and the reader will start from the "next" message | false |
| MessageChannel | MessageChannel sets a `MessageChannel` for the consumer When a message is received, it will be pushed to the channel for consumption| |
| ReceiverQueueSize | ReceiverQueueSize sets the size of the consumer receive queue. | 1000 |
-| SubscriptionRolePrefix| SubscriptionRolePrefix set the subscription role prefix. | "reader" |
+| SubscriptionRolePrefix| SubscriptionRolePrefix set the subscription role prefix. | "reader" |
| ReadCompacted | If enabled, the reader will read messages from the compacted topic rather than reading the full message backlog of the topic. ReadCompacted can only be enabled when reading from a persistent topic. | false|
## Messages
diff --git a/versioned_docs/version-2.10.x/client-libraries-java.md b/versioned_docs/version-2.10.x/client-libraries-java.md
index 9684fa04ea9..b19dc269ed0 100644
--- a/versioned_docs/version-2.10.x/client-libraries-java.md
+++ b/versioned_docs/version-2.10.x/client-libraries-java.md
@@ -96,7 +96,7 @@ pulsar://pulsar.us-west.example.com:6650
```
-If you use [TLS](security-tls-authentication.md) authentication, the URL is as follows.
+If you use [TLS](security-tls-authentication.md) authentication, the URL is as follows.
```http
@@ -104,7 +104,7 @@ pulsar+ssl://pulsar.us-west.example.com:6651
```
-## Client
+## Client
You can instantiate a {@inject: javadoc:PulsarClient:/client/org/apache/pulsar/client/api/PulsarClient} object using just a URL for the target Pulsar [cluster](reference-terminology.md#cluster) like this:
@@ -138,8 +138,8 @@ If you create a client, you can use the `loadConf` configuration. The following
`authParams` | String | Parameters for the authentication plugin <br /><br />**Example**<br /> key1:val1,key2:val2|None
`operationTimeoutMs`|long|`operationTimeoutMs`|Operation timeout |30000
`statsIntervalSeconds`|long|Interval between each stats information<br /><br />Stats is activated with positive `statsInterval`<br /><br />Set `statsIntervalSeconds` to 1 second at least. |60
-`numIoThreads`| int| The number of threads used for handling connections to brokers | 1
-`numListenerThreads`|int|The number of threads used for handling message listeners. The listener thread pool is shared across all the consumers and readers using the "listener" model to get messages. For a given consumer, the listener is always invoked from the same thread to ensure ordering. If you want multiple threads to process a single topic, you need to create a [`shared`](concepts-messaging.md#shared) subscription and multiple consumers for this subscription. This does not ensure [...]
+`numIoThreads`| int| The number of threads used for handling connections to brokers | 1
+`numListenerThreads`|int|The number of threads used for handling message listeners. The listener thread pool is shared across all the consumers and readers using the "listener" model to get messages. For a given consumer, the listener is always invoked from the same thread to ensure ordering. If you want multiple threads to process a single topic, you need to create a [`shared`](concepts-messaging.md#shared) subscription and multiple consumers for this subscription. This does not ensure [...]
`useTcpNoDelay`| boolean| Whether to use TCP no-delay flag on the connection to disable Nagle algorithm |true
`enableTls` |boolean | Whether to use TLS encryption on the connection. Note that this parameter is **deprecated**. If you want to enable TLS, use `pulsar+ssl://` in `serviceUrl` instead. | false
`tlsTrustCertsFilePath` |string |Path to the trusted TLS certificate file|None
@@ -166,7 +166,7 @@ You can set the client memory allocator configurations through Java properties.<
| Property | Type | <div>Description</div> | Default | Available values
|---|---|---|---|---
-`pulsar.allocator.pooled` | String | If set to `true`, the client uses a direct memory pool. <br /> If set to `false`, the client uses a heap memory without pool | true | <li> true </li> <li> false </li>
+`pulsar.allocator.pooled` | String | If set to `true`, the client uses a direct memory pool. <br /> If set to `false`, the client uses a heap memory without pool | true | <li> true </li> <li> false </li>
`pulsar.allocator.exit_on_oom` | String | Whether to exit the JVM when OOM happens | false | <li> true </li> <li> false </li>
`pulsar.allocator.leak_detection` | String | The leak detection policy for Pulsar bytebuf allocator. <li> **Disabled**: No leak detection and no overhead. </li> <li> **Simple**: Instruments 1% of the allocated buffer to track for leaks. </li> <li> **Advanced**: Instruments 1% of the allocated buffer to track for leaks, reporting stack traces of places where the buffer is used. </li> <li> **Paranoid**: Instruments 100% of the allocated buffer to track for leaks, reporting stack traces of [...]
`pulsar.allocator.out_of_memory_policy` | String | When an OOM occurs, the client throws an exception or fallbacks to heap | FallbackToHeap | <li> ThrowException </li> <li> FallbackToHeap </li>
@@ -189,7 +189,7 @@ This chapter describes the concept, benefits, use cases, constraints, usage, wor
- [What is cluster-level failover?](#what-is-cluster-level-failover)
* [Concept of cluster-level failover](#concept-of-cluster-level-failover)
-
+
* [Why use cluster-level failover?](#why-use-cluster-level-failover)
* [When to use cluster-level failover?](#when-to-use-cluster-level-failover)
@@ -201,23 +201,23 @@ This chapter describes the concept, benefits, use cases, constraints, usage, wor
* [What are the limitations of cluster-level failover?](#what-are-the-limitations-of-cluster-level-failover)
* [What are the relationships between cluster-level failover and geo-replication?](#what-are-the-relationships-between-cluster-level-failover-and-geo-replication)
-
+
- [How to use cluster-level failover?](#how-to-use-cluster-level-failover)
- [How does cluster-level failover work?](#how-does-cluster-level-failover-work)
-
+
> #### What is cluster-level failover
This chapter helps you better understand the concept of cluster-level failover.
> ##### Concept of cluster-level failover
````mdx-code-block
-<Tabs
+<Tabs
defaultValue="Automatic cluster-level failover"
values={[{"label":"Automatic cluster-level failover","value":"Automatic cluster-level failover"},{"label":"Controlled cluster-level failover","value":"Controlled cluster-level failover"}]}>
<TabItem value="Automatic cluster-level failover">
-Automatic cluster-level failover supports Pulsar clients switching from a primary cluster to one or several backup clusters automatically and seamlessly when it detects a failover event based on the configured detecting policy set by **users**.
+Automatic cluster-level failover supports Pulsar clients switching from a primary cluster to one or several backup clusters automatically and seamlessly when it detects a failover event based on the configured detecting policy set by **users**.

@@ -243,7 +243,7 @@ The cluster-level failover provides fault tolerance, continuous availability, an
* Simplified management: businesses can operate on an "always-on" basis since no immediate user intervention is required.
-* Improved stability and robustness: it ensures continuous performance and minimizes service downtime.
+* Improved stability and robustness: it ensures continuous performance and minimizes service downtime.
> ##### When to use cluster-level failover?
@@ -256,12 +256,12 @@ The cluster-level failover protects your environment in a number of ways, includ
> ##### When cluster-level failover is triggered?
````mdx-code-block
-<Tabs
+<Tabs
defaultValue="Automatic cluster-level failover"
values={[{"label":"Automatic cluster-level failover","value":"Automatic cluster-level failover"},{"label":"Controlled cluster-level failover","value":"Controlled cluster-level failover"}]}>
<TabItem value="Automatic cluster-level failover">
-Automatic cluster-level failover is triggered when Pulsar clients cannot connect to the primary cluster for a prolonged period of time. This can be caused by any number of reasons including, but not limited to:
+Automatic cluster-level failover is triggered when Pulsar clients cannot connect to the primary cluster for a prolonged period of time. This can be caused by any number of reasons including, but not limited to:
* Network failure: internet connection is lost.
@@ -285,9 +285,9 @@ Controlled cluster-level failover is triggered when administrators set the switc
Obviously, the cluster-level failover does not succeed if the backup cluster is unreachable by active Pulsar clients. This can happen for many reasons, including but not limited to:
-* Power failure: the backup cluster is shut down or does not function normally.
+* Power failure: the backup cluster is shut down or does not function normally.
-* Crashed storage space: primary and backup clusters do not have enough storage space.
+* Crashed storage space: primary and backup clusters do not have enough storage space.
* If the failover is initiated, but no cluster can assume the role of an available cluster due to errors, and the primary cluster is not able to provide service normally.
@@ -334,7 +334,7 @@ This section guides you through every step on how to configure cluster-level fai
* Set `replicateSubscriptionState` to `true` when creating consumers.
````mdx-code-block
-<Tabs
+<Tabs
defaultValue="Automatic cluster-level failover"
values={[{"label":"Automatic cluster-level failover","value":"Automatic cluster-level failover"},{"label":"Controlled cluster-level failover","value":"Controlled cluster-level failover"}]}>
<TabItem value="Automatic cluster-level failover">
@@ -383,7 +383,7 @@ Parameter|Default value|Required?|Description
|---|---|---|---
`primary`|N/A|Yes|Service URL of the primary cluster.
`secondary`|N/A|Yes|Service URL(s) of one or several backup clusters.<br /><br />You can specify several backup clusters using a comma-separated list.<br /><br /> Note that:<br />- The backup cluster is chosen in the sequence shown in the list. <br />- If all backup clusters are available, the Pulsar client chooses the first backup cluster.
-`failoverDelay`|N/A|Yes|The delay before the Pulsar client switches from the primary cluster to the backup cluster.<br /><br />Automatic failover is controlled by a probe task: <br />1) The probe task first checks the health status of the primary cluster. <br /> 2) If the probe task finds the continuous failure time of the primary cluster exceeds `failoverDelayMs`, it switches the Pulsar client to the backup cluster.
+`failoverDelay`|N/A|Yes|The delay before the Pulsar client switches from the primary cluster to the backup cluster.<br /><br />Automatic failover is controlled by a probe task: <br />1) The probe task first checks the health status of the primary cluster. <br /> 2) If the probe task finds the continuous failure time of the primary cluster exceeds `failoverDelayMs`, it switches the Pulsar client to the backup cluster.
`switchBackDelay`|N/A|Yes|The delay before the Pulsar client switches from the backup cluster to the primary cluster.<br /><br />Automatic failover switchover is controlled by a probe task: <br /> 1) After the Pulsar client switches from the primary cluster to the backup cluster, the probe task continues to check the status of the primary cluster. <br /> 2) If the primary cluster functions well and continuously remains active longer than `switchBackDelay`, the Pulsar client switches back [...]
`checkInterval`|30s|No|Frequency of performing a probe task (in seconds).
`secondaryTlsTrustCertsFilePath`|N/A|No|A map of certificate file. Keys are service urls of backup cluster. Values are paths to the trusted TLS certificate file of the backup cluster.
@@ -434,17 +434,17 @@ Assume that you want to connect Pulsar client 1 to cluster A.
1. Pulsar client 1 sends the token *t1* to the URL provider service.
2. The URL provider service returns the credential *c1* and the cluster A URL to the Pulsar client.
-
+
The URL provider service manages all tokens and credentials. It returns different credentials based on different tokens and different target cluster URLs to different Pulsar clients.
**Note**: **the credential must be in a JSON file and contain parameters as shown**.
```java
{
- "serviceUrl": "pulsar+ssl://target:6651",
+ "serviceUrl": "pulsar+ssl://target:6651",
"tlsTrustCertsFilePath": "/security/ca.cert.pem",
"authPluginClassName":"org.apache.pulsar.client.impl.auth.AuthenticationTls",
- "authParamsString": " \"tlsCertFile\": \"/security/client.cert.pem\"
+ "authParamsString": " \"tlsCertFile\": \"/security/client.cert.pem\"
\"tlsKeyFile\": \"/security/client-pk8.pem\" "
}
```
@@ -461,7 +461,7 @@ Assume that you want to connect Pulsar client 1 to cluster A.
This chapter explains the working process of cluster-level failover. For more implementation details, see [PIP-121](https://github.com/apache/pulsar/issues/13315).
````mdx-code-block
-<Tabs
+<Tabs
defaultValue="Automatic cluster-level failover"
values={[{"label":"Automatic cluster-level failover","value":"Automatic cluster-level failover"},{"label":"Controlled cluster-level failover","value":"Controlled cluster-level failover"}]}>
<TabItem value="Automatic cluster-level failover">
@@ -469,18 +469,18 @@ This chapter explains the working process of cluster-level failover. For more im
In automatic failover cluster, the primary cluster and backup cluster are aware of each other's availability. The automatic failover cluster performs the following actions without administrator intervention:
1. The Pulsar client runs a probe task at intervals defined in `checkInterval`.
-
+
2. If the probe task finds the failure time of the primary cluster exceeds the time set in the `failoverDelay` parameter, it searches backup clusters for an available healthy cluster.
2a) If there are healthy backup clusters, the Pulsar client switches to a backup cluster in the order defined in `secondary`.
2b) If there is no healthy backup cluster, the Pulsar client does not perform the switchover, and the probe task continues to look for an available backup cluster.
-3. The probe task checks whether the primary cluster functions well or not.
+3. The probe task checks whether the primary cluster functions well or not.
3a) If the primary cluster comes back and the continuous healthy time exceeds the time set in `switchBackDelay`, the Pulsar client switches back to the primary cluster.
- 3b) If the primary cluster does not come back, the Pulsar client does not perform the switchover.
+ 3b) If the primary cluster does not come back, the Pulsar client does not perform the switchover.

@@ -495,7 +495,7 @@ In automatic failover cluster, the primary cluster and backup cluster are aware
2b) If the service URL configuration is not changed, the Pulsar client does not perform the switchover.
-3. If the Pulsar client switches to the target cluster, the probe task continues to fetch service URL configuration from the URL provider service at intervals defined in `checkInterval`.
+3. If the Pulsar client switches to the target cluster, the probe task continues to fetch service URL configuration from the URL provider service at intervals defined in `checkInterval`.
3a) If the service URL configuration is changed, the probe task switches to the target cluster without checking the health status of the target cluster.
@@ -537,19 +537,19 @@ stringProducer.send("My message");
> Make sure that you close your producers, consumers, and clients when you do not need them.
> ```java
->
+>
> producer.close();
> consumer.close();
> client.close();
>
->
+>
> ```
>
> Close operations can also be asynchronous:
> ```java
->
+>
> producer.closeAsync()
> .thenRun(() -> System.out.println("Producer closed"))
> .exceptionally((ex) -> {
@@ -557,7 +557,7 @@ stringProducer.send("My message");
> return null;
> });
>
->
+>
> ```
@@ -639,7 +639,7 @@ You can terminate the builder chain with `sendAsync()` and get a future return.
### Enable chunking
-Message [chunking](concepts-messaging.md#chunking) enables Pulsar to process large payload messages by splitting the message into chunks at the producer side and aggregating chunked messages at the consumer side.
+Message [chunking](concepts-messaging.md#chunking) enables Pulsar to process large payload messages by splitting the message into chunks at the producer side and aggregating chunked messages at the consumer side.
The message chunking feature is OFF by default. The following is an example about how to enable message chunking when creating a producer.
@@ -757,7 +757,7 @@ Consumer consumer = client.newConsumer()
### Configure consumer
-If you instantiate a `Consumer` object by specifying only a topic and subscription name as in the example above, the consumer uses the default configuration.
+If you instantiate a `Consumer` object by specifying only a topic and subscription name as in the example above, the consumer uses the default configuration.
When you create a consumer, you can use the `loadConf` configuration. The following parameters are available in `loadConf`.
@@ -790,7 +790,7 @@ When you create a consumer, you can use the `loadConf` configuration. The follow
`maxPendingChunkedMessage`|int| The maximum size of a queue holding pending chunked messages. When the threshold is reached, the consumer drops pending messages to optimize memory utilization.|10
`expireTimeOfIncompleteChunkedMessageMillis`|long|The time interval to expire incomplete chunks if a consumer fails to receive all the chunks in the specified time period. The default value is 1 minute. | 60000
-You can configure parameters if you do not want to use the default configuration. For a full list, see the Javadoc for the {@inject: javadoc:ConsumerBuilder:/client/org/apache/pulsar/client/api/ConsumerBuilder} class.
+You can configure parameters if you do not want to use the default configuration. For a full list, see the Javadoc for the {@inject: javadoc:ConsumerBuilder:/client/org/apache/pulsar/client/api/ConsumerBuilder} class.
The following is an example.
@@ -821,7 +821,7 @@ Async receive operations return a {@inject: javadoc:Message:/client/org/apache/p
### Batch receive
-Use `batchReceive` to receive multiple messages for each call.
+Use `batchReceive` to receive multiple messages for each call.
The following is an example.
@@ -888,7 +888,7 @@ Consumer<byte[]> consumer = client.newConsumer()
### Negative acknowledgment redelivery backoff
-The `RedeliveryBackoff` introduces a redelivery backoff mechanism. You can achieve redelivery with different delays by setting `redeliveryCount ` of messages.
+The `RedeliveryBackoff` introduces a redelivery backoff mechanism. You can achieve redelivery with different delays by setting `redeliveryCount ` of messages.
```java
@@ -1086,7 +1086,7 @@ Only the first consumer is allowed to the subscription, other consumers receive
:::note
-If topic is a partitioned topic, the first consumer subscribes to all partitioned topics, other consumers are not assigned with partitions and receive an error.
+If topic is a partitioned topic, the first consumer subscribes to all partitioned topics, other consumers are not assigned with partitions and receive an error.
:::
@@ -1111,7 +1111,7 @@ Consumer consumer2 = client.newConsumer()
```
-Multiple consumers can attach to the same subscription, yet only the first consumer is active, and others are standby. When the active consumer is disconnected, messages will be dispatched to one of standby consumers, and the standby consumer then becomes active consumer.
+Multiple consumers can attach to the same subscription, yet only the first consumer is active, and others are standby. When the active consumer is disconnected, messages will be dispatched to one of standby consumers, and the standby consumer then becomes active consumer.
If the first active consumer is disconnected after receiving 5 messages, the standby consumer becomes active consumer. Consumer1 will receive:
@@ -1139,7 +1139,7 @@ consumer2 will receive:
:::note
-If a topic is a partitioned topic, each partition has only one active consumer, messages of one partition are distributed to only one consumer, and messages of multiple partitions are distributed to multiple consumers.
+If a topic is a partitioned topic, each partition has only one active consumer, messages of one partition are distributed to only one consumer, and messages of multiple partitions are distributed to multiple consumers.
:::
@@ -1154,7 +1154,7 @@ Consumer consumer1 = client.newConsumer()
.subscriptionName("my-subscription")
.subscriptionType(SubscriptionType.Shared)
.subscribe()
-
+
Consumer consumer2 = client.newConsumer()
.topic("my-topic")
.subscriptionName("my-subscription")
@@ -1203,7 +1203,7 @@ Consumer consumer1 = client.newConsumer()
.subscriptionName("my-subscription")
.subscriptionType(SubscriptionType.Key_Shared)
.subscribe()
-
+
Consumer consumer2 = client.newConsumer()
.topic("my-topic")
.subscriptionName("my-subscription")
@@ -1327,7 +1327,7 @@ If you are using multiple interceptors, they apply in the order they are passed
:::
-## Reader
+## Reader
With the [reader interface](concepts-clients.md#reader-interface), Pulsar clients can "manually position" themselves within a topic and read all messages from a specified message onward. The Pulsar API for Java enables you to create {@inject: javadoc:Reader:/client/org/apache/pulsar/client/api/Reader} objects by specifying a topic and a {@inject: javadoc:MessageId:/client/org/apache/pulsar/client/api/MessageId}.
@@ -1404,7 +1404,7 @@ The following figure illustrates the dynamic construction of a TableView updated

### Configure TableView
-
+
The following is an example of how to configure a TableView.
```java
@@ -1423,7 +1423,7 @@ You can use the available parameters in the `loadConf` configuration or related
| `autoUpdatePartitionInterval` | int | no | The interval to check for newly added partitions. | 60 (seconds)
### Register listeners
-
+
You can register listeners for both existing messages on a topic and new messages coming into the topic by using `forEachAndListen`, and specify to perform operations for all existing messages by using `forEach`.
The following is an example of how to register listeners with TableView.
@@ -1495,61 +1495,61 @@ The following schema formats are currently available for Java:
* No schema or the byte array schema (which can be applied using `Schema.BYTES`):
```java
-
+
Producer<byte[]> bytesProducer = client.newProducer(Schema.BYTES)
.topic("some-raw-bytes-topic")
.create();
-
+
```
Or, equivalently:
```java
-
+
Producer<byte[]> bytesProducer = client.newProducer()
.topic("some-raw-bytes-topic")
.create();
-
+
```
* `String` for normal UTF-8-encoded string data. Apply the schema using `Schema.STRING`:
```java
-
+
Producer<String> stringProducer = client.newProducer(Schema.STRING)
.topic("some-string-topic")
.create();
-
+
```
* Create JSON schemas for POJOs using `Schema.JSON`. The following is an example.
```java
-
+
Producer<MyPojo> pojoProducer = client.newProducer(Schema.JSON(MyPojo.class))
.topic("some-pojo-topic")
.create();
-
+
```
* Generate Protobuf schemas using `Schema.PROTOBUF`. The following example shows how to create the Protobuf schema and use it to instantiate a new producer:
```java
-
+
Producer<MyProtobuf> protobufProducer = client.newProducer(Schema.PROTOBUF(MyProtobuf.class))
.topic("some-protobuf-topic")
.create();
-
+
```
* Define Avro schemas with `Schema.AVRO`. The following code snippet demonstrates how to create and use Avro schema.
```java
-
+
Producer<MyAvro> avroProducer = client.newProducer(Schema.AVRO(MyAvro.class))
.topic("some-avro-topic")
.create();
-
+
```
### ProtobufNativeSchema example
diff --git a/versioned_docs/version-2.10.x/client-libraries-node.md b/versioned_docs/version-2.10.x/client-libraries-node.md
index d888c237340..fd4c81c86be 100644
--- a/versioned_docs/version-2.10.x/client-libraries-node.md
+++ b/versioned_docs/version-2.10.x/client-libraries-node.md
@@ -88,7 +88,7 @@ const Pulsar = require('pulsar-client');
const client = new Pulsar.Client({
serviceUrl: 'pulsar://localhost:6650',
});
-
+
await client.close();
})();
@@ -121,7 +121,7 @@ Here is an example:
```JavaScript
const producer = await client.createProducer({
- topic: 'my-topic', // or 'my-tenant/my-namespace/my-topic' to specify topic's tenant and namespace
+ topic: 'my-topic', // or 'my-tenant/my-namespace/my-topic' to specify topic's tenant and namespace
});
await producer.send({
@@ -133,7 +133,7 @@ await producer.close();
```
> #### Promise operation
-> When you create a new Pulsar producer, the operation returns `Promise` object and get producer instance or an error through executor function.
+> When you create a new Pulsar producer, the operation returns `Promise` object and get producer instance or an error through executor function.
> In this example, use await operator instead of executor function.
### Producer operations
@@ -224,7 +224,7 @@ await consumer.close();
```
> #### Promise operation
-> When you create a new Pulsar consumer, the operation returns `Promise` object and get consumer instance or an error through executor function.
+> When you create a new Pulsar consumer, the operation returns `Promise` object and get consumer instance or an error through executor function.
> In this example, use await operator instead of executor function.
### Consumer operations
@@ -496,7 +496,7 @@ This section provides step-by-step instructions on how to use the end-to-end enc
**Prerequisite**
-- Pulsar C++ client 2.7.1 or later
+- Pulsar C++ client 2.7.1 or later
**Step**
@@ -505,10 +505,10 @@ This section provides step-by-step instructions on how to use the end-to-end enc
**Input**
```shell
-
+
openssl genrsa -out private.pem 2048
openssl rsa -in private.pem -pubout -out public.pem
-
+
```
2. Create a producer to send encrypted messages.
@@ -516,7 +516,7 @@ This section provides step-by-step instructions on how to use the end-to-end enc
**Input**
```nodejs
-
+
const Pulsar = require('pulsar-client');
(async () => {
@@ -550,7 +550,7 @@ This section provides step-by-step instructions on how to use the end-to-end enc
await producer.close();
await client.close();
})();
-
+
```
3. Create a consumer to receive encrypted messages.
@@ -558,7 +558,7 @@ This section provides step-by-step instructions on how to use the end-to-end enc
**Input**
```nodejs
-
+
const Pulsar = require('pulsar-client');
(async () => {
@@ -589,7 +589,7 @@ This section provides step-by-step instructions on how to use the end-to-end enc
await consumer.close();
await client.close();
})();
-
+
```
4. Run the consumer to receive encrypted messages.
@@ -597,9 +597,9 @@ This section provides step-by-step instructions on how to use the end-to-end enc
**Input**
```shell
-
+
node consumer.js
-
+
```
5. In a new terminal tab, run the producer to produce encrypted messages.
@@ -607,9 +607,9 @@ This section provides step-by-step instructions on how to use the end-to-end enc
**Input**
```shell
-
+
node producer.js
-
+
```
Now you can see the producer sends messages and the consumer receives messages successfully.
@@ -619,7 +619,7 @@ This section provides step-by-step instructions on how to use the end-to-end enc
This is from the producer side.
```
-
+
Sent message: my-message-0
Sent message: my-message-1
Sent message: my-message-2
@@ -630,13 +630,13 @@ This section provides step-by-step instructions on how to use the end-to-end enc
Sent message: my-message-7
Sent message: my-message-8
Sent message: my-message-9
-
+
```
This is from the consumer side.
```
-
+
my-message-0
my-message-1
my-message-2
@@ -647,6 +647,6 @@ This section provides step-by-step instructions on how to use the end-to-end enc
my-message-7
my-message-8
my-message-9
-
+
```
diff --git a/versioned_docs/version-2.10.x/client-libraries-rest.md b/versioned_docs/version-2.10.x/client-libraries-rest.md
index 1b26eedc018..7dc194fcc26 100644
--- a/versioned_docs/version-2.10.x/client-libraries-rest.md
+++ b/versioned_docs/version-2.10.x/client-libraries-rest.md
@@ -5,7 +5,7 @@ sidebar_label: "REST"
original_id: client-libraries-rest
---
-Pulsar not only provides REST endpoints to manage resources in Pulsar clusters, but also provides methods to query the state for those resources. In addition, Pulsar REST provides a simple way to interact with Pulsar **without using client libraries**, which is convenient for applications to use HTTP to interact with Pulsar.
+Pulsar not only provides REST endpoints to manage resources in Pulsar clusters, but also provides methods to query the state for those resources. In addition, Pulsar REST provides a simple way to interact with Pulsar **without using client libraries**, which is convenient for applications to use HTTP to interact with Pulsar.
## Connection
@@ -14,22 +14,22 @@ To connect to Pulsar, you need to specify a URL.
- Produce messages to non-partitioned or partitioned topics
```
-
+
brokerUrl:{8080/8081}/topics/{persistent/non-persistent}/{my-tenant}/{my-namespace}/{my-topic}
-
+
```
- Produce messages to specific partitions of partitioned topics
```
-
+
brokerUrl:{8080/8081}/topics/{persistent/non-persistent}/{my-tenant}/{my-namespace}/{my-topic}/partitions/{partition-number}
-
+
```
## Producer
-Currently, you can produce messages to the following destinations with tools like cURL or Postman via REST.
+Currently, you can produce messages to the following destinations with tools like cURL or Postman via REST.
- Non-partitioned or partitioned topics
@@ -54,13 +54,13 @@ Consuming and reading messages via REST will be supported in the future.
`producerName`|No|Producer name
`Messages[] SingleMessage`|Yes|Messages to be sent
-- Below is the structure of a message.
+- Below is the structure of a message.
Parameter|Required?|Type|Description
|---|---|---|---
`payload`|Yes|`String`|Actual message payload <br /><br />Messages are sent in strings and encoded with given schemas on the server side
`properties`|No|`Map<String, String>`|Custom properties
- `key`|No|`String`|Partition key
+ `key`|No|`String`|Partition key
`replicationClusters`|No|`List<String>`|Clusters to which messages replicate
`eventTime`|No|`String`|Message event time
`sequenceId`|No|`long`|Message sequence ID
@@ -72,7 +72,7 @@ Consuming and reading messages via REST will be supported in the future.
- Currently, Primitive, Avro, JSON, and KeyValue schemas are supported.
-- For Primitive, Avro and JSON schemas, schemas should be provided as the full schema encoded as a string.
+- For Primitive, Avro and JSON schemas, schemas should be provided as the full schema encoded as a string.
- If the schema is not set, messages are encoded with string schema.
@@ -127,7 +127,7 @@ curl --location --request POST 'brokerUrl:{8080/8081}/topics/{persistent/non-per
}
]
}
-`
+`
// Sample message
```
diff --git a/versioned_docs/version-2.10.x/client-libraries.md b/versioned_docs/version-2.10.x/client-libraries.md
index c89802ee01e..9666c44f33d 100644
--- a/versioned_docs/version-2.10.x/client-libraries.md
+++ b/versioned_docs/version-2.10.x/client-libraries.md
@@ -40,8 +40,8 @@ Want your repository listed here? Click the "Edit this page" button at the botto
| Language | Project | Maintainer | License | Description |
|----------|-------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------|
| Go | [pulsar-client-go](https://github.com/Comcast/pulsar-client-go) | [Comcast](https://github.com/Comcast) | [](https://opensource.org/licenses/Apache-2.0) | A native golang client |
-| Go | [go-pulsar](https://github.com/t2y/go-pulsar) | [t2y](https://github.com/t2y) | [](https://opensource.org/licenses/Apache-2.0) |
-| Haskell | [supernova](https://github.com/cr-org/supernova) | [Chatroulette](https://github.com/cr-org) | [](https://opensource.org/licenses/Apache-2.0) | Native Pulsar client for Haskell |
+| Go | [go-pulsar](https://github.com/t2y/go-pulsar) | [t2y](https://github.com/t2y) | [](https://opensource.org/licenses/Apache-2.0) |
+| Haskell | [supernova](https://github.com/cr-org/supernova) | [Chatroulette](https://github.com/cr-org) | [](https://opensource.org/licenses/Apache-2.0) | Native Pulsar client for Haskell |
| Scala | [neutron](https://github.com/cr-org/neutron) | [Chatroulette](https://github.com/cr-org) | [](https://opensource.org/licenses/Apache-2.0) | Purely functional Apache Pulsar client for Scala built on top of Fs2 |
| Scala | [neutron (profunktor's fork)](https://neutron.profunktor.dev) | [ProfunKtor](https://profunktor.dev) | [](https://opensource.org/licenses/Apache-2.0) | Fs2-powered Apache Pulsar client with support for Scala 2 and 3 |
| Scala | [pulsar4s](https://github.com/sksamuel/pulsar4s) | [sksamuel](https://github.com/sksamuel) | [](https://opensource.org/licenses/Apache-2.0) | Idomatic, typesafe, and reactive Scala client for Apache Pulsar |
diff --git a/versioned_docs/version-2.10.x/concepts-architecture-overview.md b/versioned_docs/version-2.10.x/concepts-architecture-overview.md
index 758d1efe382..8444c1e9657 100644
--- a/versioned_docs/version-2.10.x/concepts-architecture-overview.md
+++ b/versioned_docs/version-2.10.x/concepts-architecture-overview.md
@@ -48,7 +48,7 @@ Clusters can replicate among themselves using [geo-replication](concepts-replica
The Pulsar metadata store maintains all the metadata of a Pulsar cluster, such as topic metadata, schema, broker load data, and so on. Pulsar uses [Apache ZooKeeper](https://zookeeper.apache.org/) for metadata storage, cluster configuration, and coordination. The Pulsar metadata store can be deployed on a separate ZooKeeper cluster or deployed on an existing ZooKeeper cluster. You can use one ZooKeeper cluster for both Pulsar metadata store and BookKeeper metadata store. If you want to d [...]
-> Pulsar also supports more metadata backend services, including [etcd](https://etcd.io/) and [RocksDB](http://rocksdb.org/) (for standalone Pulsar only).
+> Pulsar also supports more metadata backend services, including [etcd](https://etcd.io/) and [RocksDB](http://rocksdb.org/) (for standalone Pulsar only).
In a Pulsar instance:
diff --git a/versioned_docs/version-2.10.x/concepts-clients.md b/versioned_docs/version-2.10.x/concepts-clients.md
index 9f631f11dd5..a428261485f 100644
--- a/versioned_docs/version-2.10.x/concepts-clients.md
+++ b/versioned_docs/version-2.10.x/concepts-clients.md
@@ -40,7 +40,7 @@ Internally, the reader interface is implemented as a consumer using an exclusive
Unlike subscription/consumer, readers are non-durable in nature and do not prevent data in a topic from being deleted, thus it is ***strongly*** advised that [data retention](cookbooks-retention-expiry.md) be configured. If data retention for a topic is not configured for an adequate amount of time, messages that the reader has not yet read might be deleted. This causes the readers to essentially skip messages. Configuring the data retention for a topic guarantees the reader with a cert [...]
-Please also note that a reader can have a "backlog", but the metric is only used for users to know how behind the reader is. The metric is not considered for any backlog quota calculations.
+Please also note that a reader can have a "backlog", but the metric is only used for users to know how behind the reader is. The metric is not considered for any backlog quota calculations.

diff --git a/versioned_docs/version-2.10.x/concepts-proxy-sni-routing.md b/versioned_docs/version-2.10.x/concepts-proxy-sni-routing.md
index 50356126a09..5c1077b69a2 100644
--- a/versioned_docs/version-2.10.x/concepts-proxy-sni-routing.md
+++ b/versioned_docs/version-2.10.x/concepts-proxy-sni-routing.md
@@ -22,7 +22,7 @@ To support [layer-4 SNI routing](https://docs.trafficserver.apache.org/en/latest
Pulsar supports SNI routing for geo-replication, so brokers can connect to brokers in other clusters through the ATS proxy.
-This section explains how to set up and use ATS as a reverse proxy, so Pulsar clients can connect to brokers through the ATS proxy using the SNI routing protocol on TLS connection.
+This section explains how to set up and use ATS as a reverse proxy, so Pulsar clients can connect to brokers through the ATS proxy using the SNI routing protocol on TLS connection.
### Set up ATS Proxy for layer-4 SNI routing
To support layer 4 SNI routing, you need to configure the `records.conf` and `ssl_server_name.conf` files.
@@ -32,7 +32,7 @@ To support layer 4 SNI routing, you need to configure the `records.conf` and `ss
The [records.config](https://docs.trafficserver.apache.org/en/latest/admin-guide/files/records.config.en.html) file is located in the `/usr/local/etc/trafficserver/` directory by default. The file lists configurable variables used by the ATS.
To configure the `records.config` files, complete the following steps.
-1. Update TLS port (`http.server_ports`) on which proxy listens, and update proxy certs (`ssl.client.cert.path` and `ssl.client.cert.filename`) to secure TLS tunneling.
+1. Update TLS port (`http.server_ports`) on which proxy listens, and update proxy certs (`ssl.client.cert.path` and `ssl.client.cert.filename`) to secure TLS tunneling.
2. Configure server ports (`http.connect_ports`) used for tunneling to the broker. If Pulsar brokers are listening on `4443` and `6651` ports, add the brokers service port in the `http.connect_ports` configuration.
The following is an example.
@@ -52,7 +52,7 @@ CONFIG proxy.config.http.connect_ports STRING 4443 6651
```
-The `ssl_server_name` file is used to configure TLS connection handling for inbound and outbound connections. The configuration is determined by the SNI values provided by the inbound connection. The file consists of a set of configuration items, and each is identified by an SNI value (`fqdn`). When an inbound TLS connection is made, the SNI value from the TLS negotiation is matched with the items specified in this file. If the values match, the values specified in that item override the [...]
+The `ssl_server_name` file is used to configure TLS connection handling for inbound and outbound connections. The configuration is determined by the SNI values provided by the inbound connection. The file consists of a set of configuration items, and each is identified by an SNI value (`fqdn`). When an inbound TLS connection is made, the SNI value from the TLS negotiation is matched with the items specified in this file. If the values match, the values specified in that item override the [...]
The following example shows the mapping of the inbound SNI hostname coming from the client, and the actual broker service URL where requests should be redirected. For example, if the client sends the SNI header `pulsar-broker1`, the proxy creates a TLS tunnel by redirecting the request to the `pulsar-broker1:6651` service URL.
@@ -84,7 +84,7 @@ After you configure the `ssl_server_name.config` and `records.config` files, the
ATS SNI-routing works only with TLS. You need to enable TLS for the ATS proxy and brokers first, configure the SNI routing protocol, and then connect Pulsar clients to brokers through ATS proxy. Pulsar clients support SNI routing by connecting to the proxy, and sending the target broker URL to the SNI header. This process is processed internally. You only need to configure the following proxy configuration initially when you create a Pulsar client to use the SNI routing protocol.
````mdx-code-block
-<Tabs
+<Tabs
defaultValue="Java"
values={[{"label":"Java","value":"Java"},{"label":"C++","value":"C++"},{"label":"Python","value":"Python"}]}>
diff --git a/versioned_docs/version-2.10.x/concepts-replication.md b/versioned_docs/version-2.10.x/concepts-replication.md
index 9ec6affb341..a158504980b 100644
--- a/versioned_docs/version-2.10.x/concepts-replication.md
+++ b/versioned_docs/version-2.10.x/concepts-replication.md
@@ -7,7 +7,7 @@ original_id: concepts-replication
Regardless of industries, when an unforeseen event occurs and brings day-to-day operations to a halt, an organization needs a well-prepared disaster recovery plan to quickly restore service to clients. However, a disaster recovery plan usually requires a multi-datacenter deployment with geographically dispersed data centers. Such a multi-datacenter deployment requires a geo-replication mechanism to provide additional redundancy in case a data center fails.
-Pulsar's geo-replication mechanism is typically used for disaster recovery, enabling the replication of persistently stored message data across multiple data centers. For instance, your application is publishing data in one region and you would like to process it for consumption in other regions. With Pulsar’s geo-replication mechanism, messages can be produced and consumed in different geo-locations.
+Pulsar's geo-replication mechanism is typically used for disaster recovery, enabling the replication of persistently stored message data across multiple data centers. For instance, your application is publishing data in one region and you would like to process it for consumption in other regions. With Pulsar’s geo-replication mechanism, messages can be produced and consumed in different geo-locations.
The diagram below illustrates the process of [geo-replication](administration-geo.md). Whenever three producers (P1, P2 and P3) respectively publish messages to the T1 topic in three clusters, those messages are instantly replicated across clusters. Once the messages are replicated, two consumers (C1 and C2) can consume those messages from their clusters.
@@ -19,17 +19,17 @@ The geo-replication mechanism can be categorized into synchronous geo-replicatio
### Asynchronous geo-replication in Pulsar
-An asynchronous geo-replicated cluster is composed of multiple physical clusters set up in different datacenters. Messages produced on a Pulsar topic are first persisted to the local cluster and then replicated asynchronously to the remote clusters by brokers.
+An asynchronous geo-replicated cluster is composed of multiple physical clusters set up in different datacenters. Messages produced on a Pulsar topic are first persisted to the local cluster and then replicated asynchronously to the remote clusters by brokers.

In normal cases, when there are no connectivity issues, messages are replicated immediately, at the same time as they are dispatched to local consumers. Typically, end-to-end delivery latency is defined by the network round-trip time (RTT) between the data centers. Applications can create producers and consumers in any of the clusters, even when the remote clusters are not reachable (for example, during a network partition).
-Asynchronous geo-replication provides lower latency but may result in weaker consistency guarantees due to the potential replication lag that some data hasn’t been replicated.
+Asynchronous geo-replication provides lower latency but may result in weaker consistency guarantees due to the potential replication lag that some data hasn’t been replicated.
### Synchronous geo-replication via BookKeeper
-In synchronous geo-replication, data is synchronously replicated to multiple data centers and the client has to wait for an acknowledgment from the other data centers. As illustrated below, when the client issues a write request to one cluster, the written data will be replicated to the other two data centers. The write request is only acknowledged to the client when the majority of data centers (in this example, at least 2 data centers) have acknowledged that the write has been persisted.
+In synchronous geo-replication, data is synchronously replicated to multiple data centers and the client has to wait for an acknowledgment from the other data centers. As illustrated below, when the client issues a write request to one cluster, the written data will be replicated to the other two data centers. The write request is only acknowledged to the client when the majority of data centers (in this example, at least 2 data centers) have acknowledged that the write has been persisted.

diff --git a/versioned_docs/version-2.10.x/concepts-throttling.md b/versioned_docs/version-2.10.x/concepts-throttling.md
... 259806 lines suppressed ...