blob: b48db433c69cf3a1af64fe6cb073d2695dae8212 [file] [log] [blame]
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Set up a standalone Pulsar in Docker · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="For local development and testing, you can run Pulsar in standalone mode on your own machine within a Docker container. "/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Set up a standalone Pulsar in Docker · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.apache.org/"/><meta property="og:description" content="For local development and testing, you can run Pulsar in standalone mode on your own machine within a Docker container. "/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.apache.org/blog/atom.xml" title="Apache Pulsar Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://pulsar.apache.org/blog/feed.xml" title="Apache Pulsar Blog RSS Feed"/><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/en"><img class="logo" src="/img/pulsar.svg" alt="Apache Pulsar"/></a><a href="/en/versions"><h3>next</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/en/next/getting-started-standalone" target="_self">Docs</a></li><li class=""><a href="/en/download" target="_self">Download</a></li><li class="siteNavGroupActive"><a href="/docs/en/next/client-libraries" target="_self">Clients</a></li><li class=""><a href="#restapis" target="_self">REST APIs</a></li><li class=""><a href="#cli" target="_self">Cli</a></li><li class=""><a href="/blog/" target="_self">Blog</a></li><li class=""><a href="#community" target="_self">Community</a></li><li class=""><a href="#apache" target="_self">Apache</a></li><li class=""><a href="https://pulsar-next.staged.apache.org/" target="_self">New Website (Beta)</a></li><span><li><a id="languages-menu" href="#"><img class="languages-icon" src="/img/language.svg" alt="Languages icon"/>English</a><div id="languages-dropdown" class="hide"><ul id="languages-dropdown-items"><li><a href="/docs/ja/next/getting-started-docker">日本語</a></li><li><a href="/docs/fr/next/getting-started-docker">Français</a></li><li><a href="/docs/ko/next/getting-started-docker">한국어</a></li><li><a href="/docs/zh-CN/next/getting-started-docker">中文</a></li><li><a href="/docs/zh-TW/next/getting-started-docker">繁體中文</a></li><li><a href="https://crowdin.com/project/apache-pulsar" target="_blank" rel="noreferrer noopener">Help Translate</a></li></ul></div></li><script>
const languagesMenuItem = document.getElementById("languages-menu");
const languagesDropDown = document.getElementById("languages-dropdown");
languagesMenuItem.addEventListener("click", function(event) {
event.preventDefault();
if (languagesDropDown.className == "hide") {
languagesDropDown.className = "visible";
} else {
languagesDropDown.className = "hide";
}
});
</script></span></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i></i><span>Get Started</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle">Get Started</h3><ul class=""><li class="navListItem"><a class="navItem" href="/docs/en/next/getting-started-standalone">Run Pulsar locally</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/en/next/getting-started-docker">Run Pulsar in Docker</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/getting-started-helm">Run Pulsar in Kubernetes</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle">Concepts and Architecture</h3><ul class=""><li class="navListItem"><a class="navItem" href="/docs/en/next/concepts-overview">Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/concepts-messaging">Messaging</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/concepts-architecture-overview">Architecture</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/concepts-clients">Clients</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/concepts-replication">Geo Replication</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/concepts-multi-tenancy">Multi Tenancy</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/concepts-authentication">Authentication and Authorization</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/concepts-topic-compaction">Topic Compaction</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/concepts-proxy-sni-routing">Proxy support with SNI routing</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/concepts-multiple-advertised-listeners">Multiple advertised listeners</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle">Pulsar Schema</h3><ul class=""><li class="navListItem"><a class="navItem" href="/docs/en/next/schema-get-started">Get started</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/schema-understand">Understand schema</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/schema-evolution-compatibility">Schema evolution and compatibility</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/schema-manage">Manage schema</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle">Pulsar Functions</h3><ul class=""><li class="navListItem"><a class="navItem" href="/docs/en/next/functions-overview">Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/functions-runtime">Setup: Configure Functions runtime</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/functions-worker">Setup: Pulsar Functions Worker</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/functions-develop">How-to: Develop</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/functions-package">How-to: Package</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/functions-debug">How-to: Debug</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/functions-deploy">How-to: Deploy</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/functions-cli">Reference: CLI</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/window-functions-context">Window Functions: Context</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle">Pulsar IO</h3><ul class=""><li class="navListItem"><a class="navItem" href="/docs/en/next/io-overview">Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/io-quickstart">Get started</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/io-use">Use</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/io-debug">Debug</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/io-connectors">Built-in connector</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/io-cdc">CDC connector</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/io-develop">Develop</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/io-cli">CLI</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle">Pulsar SQL</h3><ul class=""><li class="navListItem"><a class="navItem" href="/docs/en/next/sql-overview">Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/sql-getting-started">Query data</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/sql-deployment-configurations">Configuration and deployment</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/sql-rest-api">REST APIs</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle">Tiered Storage</h3><ul class=""><li class="navListItem"><a class="navItem" href="/docs/en/next/tiered-storage-overview">Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/tiered-storage-aws">AWS S3 offloader</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/tiered-storage-gcs">GCS offloader</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/tiered-storage-filesystem">Filesystem offloader</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/tiered-storage-azure">Azure BlobStore offloader</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/tiered-storage-aliyun">Aliyun OSS offloader</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle">Transactions</h3><ul class=""><li class="navListItem"><a class="navItem" href="/docs/en/next/txn-why">Why transactions?</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/txn-what">What are transactions?</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/txn-how">How transactions work?</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/txn-use">How to use transactions?</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/txn-monitor">How to monitor transactions?</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle">Kubernetes (Helm)</h3><ul class=""><li class="navListItem"><a class="navItem" href="/docs/en/next/helm-overview">Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/helm-prepare">Prepare</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/helm-install">Install</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/helm-deploy">Deployment</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/helm-upgrade">Upgrade</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/helm-tools">Required Tools</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle">Deployment</h3><ul class=""><li class="navListItem"><a class="navItem" href="/docs/en/next/deploy-aws">Amazon Web Services</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/deploy-kubernetes">Kubernetes</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/deploy-bare-metal">Bare metal</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/deploy-bare-metal-multi-cluster">Bare metal multi-cluster</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/deploy-docker">Docker</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/deploy-monitoring">Monitor</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle">Administration</h3><ul class=""><li class="navListItem"><a class="navItem" href="/docs/en/next/administration-zk-bk">ZooKeeper and BookKeeper</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/administration-geo">Geo-replication</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/administration-pulsar-manager">Pulsar Manager</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/administration-stats">Pulsar statistics</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/administration-load-balance">Load balance</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/administration-proxy">Pulsar proxy</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/administration-upgrade">Upgrade</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/administration-isolation">Pulsar isolation</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle">Security</h3><ul class=""><li class="navListItem"><a class="navItem" href="/docs/en/next/security-overview">Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/security-policy-and-supported-versions">Security Policy and Supported Versions</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/security-tls-transport">Transport Encryption using TLS</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/security-tls-authentication">Authentication using TLS</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/security-tls-keystore">Using TLS with KeyStore configure</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/security-jwt">Authentication using JWT</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/security-athenz">Authentication using Athenz</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/security-kerberos">Authentication using Kerberos</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/security-oauth2">Authentication using OAuth 2.0 access tokens</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/security-authorization">Authorization and ACLs</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/security-encryption">End-to-End Encryption</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/security-extending">Extend Authentication and Authorization</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/security-bouncy-castle">Bouncy Castle Providers</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle">Performance</h3><ul class=""><li class="navListItem"><a class="navItem" href="/docs/en/next/performance-pulsar-perf">Pulsar Perf</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle">Client Libraries</h3><ul class=""><li class="navListItem"><a class="navItem" href="/docs/en/next/client-libraries">Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/client-libraries-java">Java</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/client-libraries-go">Go</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/client-libraries-python">Python</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/client-libraries-cpp">C++</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/client-libraries-node">Node.js</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/client-libraries-websocket">WebSocket</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/client-libraries-dotnet">C#</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/client-libraries-rest">REST</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle">Admin API</h3><ul class=""><li class="navListItem"><a class="navItem" href="/docs/en/next/admin-api-overview">Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/admin-api-clusters">Clusters</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/admin-api-tenants">Tenants</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/admin-api-brokers">Brokers</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/admin-api-namespaces">Namespaces</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/admin-api-permissions">Permissions</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/admin-api-topics">Topics</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/admin-api-functions">Functions</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/admin-api-packages">Packages</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle">Adaptors</h3><ul class=""><li class="navListItem"><a class="navItem" href="/docs/en/next/adaptors-kafka">Kafka client wrapper</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/adaptors-spark">Apache Spark</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/adaptors-storm">Apache Storm</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle">Cookbooks</h3><ul class=""><li class="navListItem"><a class="navItem" href="/docs/en/next/cookbooks-compaction">Topic compaction</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/cookbooks-deduplication">Message deduplication</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/cookbooks-non-persistent">Non-persistent messaging</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/cookbooks-retention-expiry">Message retention and expiry</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/cookbooks-encryption">Encryption</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/cookbooks-message-queue">Message queue</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/cookbooks-bookkeepermetadata">BookKeeper Ledger Metadata</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle">Development</h3><ul class=""><li class="navListItem"><a class="navItem" href="/docs/en/next/develop-tools">Simulation tools</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/developing-binary-protocol">Binary protocol</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/develop-load-manager">Modular load manager</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/develop-plugin">Plugin</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle">Reference</h3><ul class=""><li class="navListItem"><a class="navItem" href="/docs/en/next/reference-terminology">Terminology</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/reference-cli-tools">Pulsar CLI tools</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/reference-configuration">Pulsar configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/en/next/reference-metrics">Pulsar Metrics</a></li></ul></div></div></section></div><script>
var coll = document.getElementsByClassName('collapsible');
var checkActiveCategory = true;
for (var i = 0; i < coll.length; i++) {
var links = coll[i].nextElementSibling.getElementsByTagName('*');
if (checkActiveCategory){
for (var j = 0; j < links.length; j++) {
if (links[j].classList.contains('navListItemActive')){
coll[i].nextElementSibling.classList.toggle('hide');
coll[i].childNodes[1].classList.toggle('rotate');
checkActiveCategory = false;
break;
}
}
}
coll[i].addEventListener('click', function() {
var arrow = this.childNodes[1];
arrow.classList.toggle('rotate');
var content = this.nextElementSibling;
content.classList.toggle('hide');
});
}
document.addEventListener('DOMContentLoaded', function() {
createToggler('#navToggler', '#docsNav', 'docsSliderActive');
createToggler('#tocToggler', 'body', 'tocActive');
var headings = document.querySelector('.toc-headings');
headings && headings.addEventListener('click', function(event) {
var el = event.target;
while(el !== headings){
if (el.tagName === 'A') {
document.body.classList.remove('tocActive');
break;
} else{
el = el.parentNode;
}
}
}, false);
function createToggler(togglerSelector, targetSelector, className) {
var toggler = document.querySelector(togglerSelector);
var target = document.querySelector(targetSelector);
if (!toggler) {
return;
}
toggler.onclick = function(event) {
event.preventDefault();
target.classList.toggle(className);
};
}
});
</script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/pulsar/edit/master/site2/docs/getting-started-docker.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">Set up a standalone Pulsar in Docker</h1></header><article><div><span><p>For local development and testing, you can run Pulsar in standalone mode on your own machine within a Docker container.</p>
<p>If you have not installed Docker, download the <a href="https://www.docker.com/community-edition">Community edition</a> and follow the instructions for your OS.</p>
<h2><a class="anchor" aria-hidden="true" id="start-pulsar-in-docker"></a><a href="#start-pulsar-in-docker" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Start Pulsar in Docker</h2>
<ul>
<li><p>For MacOS, Linux, and Windows:</p>
<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> docker run -it -p 6650:6650 -p 8080:8080 --mount <span class="hljs-built_in">source</span>=pulsardata,target=/pulsar/data --mount <span class="hljs-built_in">source</span>=pulsarconf,target=/pulsar/conf apachepulsar/pulsar:2.10.0 bin/pulsar standalone</span>
</code></pre></li>
</ul>
<p>A few things to note about this command:</p>
<ul>
<li>The data, metadata, and configuration are persisted on Docker volumes in order to not start &quot;fresh&quot; every
time the container is restarted. For details on the volumes you can use <code>docker volume inspect &lt;sourcename&gt;</code></li>
<li>For Docker on Windows make sure to configure it to use Linux containers</li>
<li>The docker container will run as UID 10000 and GID 0, by default. You'll need to ensure the mounted volumes give write permission to either UID 10000 or GID 0. Note that UID 10000 is arbitrary, so it is recommended to make these mounts writable for the root group (GID 0).</li>
</ul>
<p>If you start Pulsar successfully, you will see <code>INFO</code>-level log messages like this:</p>
<pre><code class="hljs"><span class="hljs-number">08</span>:<span class="hljs-number">18</span>:<span class="hljs-number">30.970</span> [main] INFO org<span class="hljs-selector-class">.apache</span><span class="hljs-selector-class">.pulsar</span><span class="hljs-selector-class">.broker</span><span class="hljs-selector-class">.web</span><span class="hljs-selector-class">.WebService</span> - HTTP Service started at http:<span class="hljs-comment">//0.0.0.0:8080</span>
...
<span class="hljs-number">07</span>:<span class="hljs-number">53</span>:<span class="hljs-number">37.322</span> [main] INFO org<span class="hljs-selector-class">.apache</span><span class="hljs-selector-class">.pulsar</span><span class="hljs-selector-class">.broker</span><span class="hljs-selector-class">.PulsarService</span> - messaging service is ready, bootstrap service port = <span class="hljs-number">8080</span>, broker url= pulsar:<span class="hljs-comment">//localhost:6650, cluster=standalone, configs=org.apache.pulsar.broker.ServiceConfiguration@98b63c1</span>
...
</code></pre>
<blockquote>
<p><strong>Tip</strong> <br>
When you start a local standalone cluster, a <code>public/default</code> namespace is created automatically. The namespace is used for development purposes. All Pulsar topics are managed within namespaces. For more information, see <a href="/docs/en/next/concepts-messaging#topics">Topics</a>.</p>
</blockquote>
<h2><a class="anchor" aria-hidden="true" id="use-pulsar-in-docker"></a><a href="#use-pulsar-in-docker" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Use Pulsar in Docker</h2>
<p>Pulsar offers client libraries for <a href="/docs/en/next/client-libraries-java">Java</a>, <a href="/docs/en/next/client-libraries-go">Go</a>, <a href="/docs/en/next/client-libraries-python">Python</a>
and <a href="/docs/en/next/client-libraries-cpp">C++</a>. If you're running a local standalone cluster, you can
use one of these root URLs to interact with your cluster:</p>
<ul>
<li><code>pulsar://localhost:6650</code></li>
<li><code>http://localhost:8080</code></li>
</ul>
<p>The following example will guide you get started with Pulsar quickly by using the <a href="/docs/en/next/client-libraries-python">Python client API</a>
client API.</p>
<p>Install the Pulsar Python client library directly from <a href="https://pypi.org/project/pulsar-client/">PyPI</a>:</p>
<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pip install pulsar-client</span>
</code></pre>
<h3><a class="anchor" aria-hidden="true" id="consume-a-message"></a><a href="#consume-a-message" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Consume a message</h3>
<p>Create a consumer and subscribe to the topic:</p>
<pre><code class="hljs css language-python"><span class="hljs-keyword">import</span> pulsar
client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span>)
consumer = client.subscribe(<span class="hljs-string">'my-topic'</span>,
subscription_name=<span class="hljs-string">'my-sub'</span>)
<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
msg = consumer.receive()
print(<span class="hljs-string">"Received message: '%s'"</span> % msg.data())
consumer.acknowledge(msg)
client.close()
</code></pre>
<h3><a class="anchor" aria-hidden="true" id="produce-a-message"></a><a href="#produce-a-message" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Produce a message</h3>
<p>Now start a producer to send some test messages:</p>
<pre><code class="hljs css language-python"><span class="hljs-keyword">import</span> pulsar
client = pulsar.Client(<span class="hljs-string">'pulsar://localhost:6650'</span>)
producer = client.create_producer(<span class="hljs-string">'my-topic'</span>)
<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(<span class="hljs-number">10</span>):
producer.send((<span class="hljs-string">'hello-pulsar-%d'</span> % i).encode(<span class="hljs-string">'utf-8'</span>))
client.close()
</code></pre>
<h2><a class="anchor" aria-hidden="true" id="get-the-topic-statistics"></a><a href="#get-the-topic-statistics" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Get the topic statistics</h2>
<p>In Pulsar, you can use REST, Java, or command-line tools to control every aspect of the system.
For details on APIs, refer to <a href="/docs/en/next/admin-api-overview">Admin API Overview</a>.</p>
<p>In the simplest example, you can use curl to probe the stats for a particular topic:</p>
<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> curl http://localhost:8080/admin/v2/persistent/public/default/my-topic/stats | python -m json.tool</span>
</code></pre>
<p>The output is something like this:</p>
<pre><code class="hljs css language-json">{
<span class="hljs-attr">"msgRateIn"</span>: <span class="hljs-number">0.0</span>,
<span class="hljs-attr">"msgThroughputIn"</span>: <span class="hljs-number">0.0</span>,
<span class="hljs-attr">"msgRateOut"</span>: <span class="hljs-number">1.8332950480217471</span>,
<span class="hljs-attr">"msgThroughputOut"</span>: <span class="hljs-number">91.33142602871978</span>,
<span class="hljs-attr">"bytesInCounter"</span>: <span class="hljs-number">7097</span>,
<span class="hljs-attr">"msgInCounter"</span>: <span class="hljs-number">143</span>,
<span class="hljs-attr">"bytesOutCounter"</span>: <span class="hljs-number">6607</span>,
<span class="hljs-attr">"msgOutCounter"</span>: <span class="hljs-number">133</span>,
<span class="hljs-attr">"averageMsgSize"</span>: <span class="hljs-number">0.0</span>,
<span class="hljs-attr">"msgChunkPublished"</span>: <span class="hljs-literal">false</span>,
<span class="hljs-attr">"storageSize"</span>: <span class="hljs-number">7097</span>,
<span class="hljs-attr">"backlogSize"</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">"offloadedStorageSize"</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">"publishers"</span>: [
{
<span class="hljs-attr">"accessMode"</span>: <span class="hljs-string">"Shared"</span>,
<span class="hljs-attr">"msgRateIn"</span>: <span class="hljs-number">0.0</span>,
<span class="hljs-attr">"msgThroughputIn"</span>: <span class="hljs-number">0.0</span>,
<span class="hljs-attr">"averageMsgSize"</span>: <span class="hljs-number">0.0</span>,
<span class="hljs-attr">"chunkedMessageRate"</span>: <span class="hljs-number">0.0</span>,
<span class="hljs-attr">"producerId"</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">"metadata"</span>: {},
<span class="hljs-attr">"address"</span>: <span class="hljs-string">"/127.0.0.1:35604"</span>,
<span class="hljs-attr">"connectedSince"</span>: <span class="hljs-string">"2021-07-04T09:05:43.04788Z"</span>,
<span class="hljs-attr">"clientVersion"</span>: <span class="hljs-string">"2.8.0"</span>,
<span class="hljs-attr">"producerName"</span>: <span class="hljs-string">"standalone-2-5"</span>
}
],
<span class="hljs-attr">"waitingPublishers"</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">"subscriptions"</span>: {
<span class="hljs-attr">"my-sub"</span>: {
<span class="hljs-attr">"msgRateOut"</span>: <span class="hljs-number">1.8332950480217471</span>,
<span class="hljs-attr">"msgThroughputOut"</span>: <span class="hljs-number">91.33142602871978</span>,
<span class="hljs-attr">"bytesOutCounter"</span>: <span class="hljs-number">6607</span>,
<span class="hljs-attr">"msgOutCounter"</span>: <span class="hljs-number">133</span>,
<span class="hljs-attr">"msgRateRedeliver"</span>: <span class="hljs-number">0.0</span>,
<span class="hljs-attr">"chunkedMessageRate"</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">"msgBacklog"</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">"backlogSize"</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">"msgBacklogNoDelayed"</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">"blockedSubscriptionOnUnackedMsgs"</span>: <span class="hljs-literal">false</span>,
<span class="hljs-attr">"msgDelayed"</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">"unackedMessages"</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">"type"</span>: <span class="hljs-string">"Exclusive"</span>,
<span class="hljs-attr">"activeConsumerName"</span>: <span class="hljs-string">"3c544f1daa"</span>,
<span class="hljs-attr">"msgRateExpired"</span>: <span class="hljs-number">0.0</span>,
<span class="hljs-attr">"totalMsgExpired"</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">"lastExpireTimestamp"</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">"lastConsumedFlowTimestamp"</span>: <span class="hljs-number">1625389101290</span>,
<span class="hljs-attr">"lastConsumedTimestamp"</span>: <span class="hljs-number">1625389546070</span>,
<span class="hljs-attr">"lastAckedTimestamp"</span>: <span class="hljs-number">1625389546162</span>,
<span class="hljs-attr">"lastMarkDeleteAdvancedTimestamp"</span>: <span class="hljs-number">1625389546163</span>,
<span class="hljs-attr">"consumers"</span>: [
{
<span class="hljs-attr">"msgRateOut"</span>: <span class="hljs-number">1.8332950480217471</span>,
<span class="hljs-attr">"msgThroughputOut"</span>: <span class="hljs-number">91.33142602871978</span>,
<span class="hljs-attr">"bytesOutCounter"</span>: <span class="hljs-number">6607</span>,
<span class="hljs-attr">"msgOutCounter"</span>: <span class="hljs-number">133</span>,
<span class="hljs-attr">"msgRateRedeliver"</span>: <span class="hljs-number">0.0</span>,
<span class="hljs-attr">"chunkedMessageRate"</span>: <span class="hljs-number">0.0</span>,
<span class="hljs-attr">"consumerName"</span>: <span class="hljs-string">"3c544f1daa"</span>,
<span class="hljs-attr">"availablePermits"</span>: <span class="hljs-number">867</span>,
<span class="hljs-attr">"unackedMessages"</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">"avgMessagesPerEntry"</span>: <span class="hljs-number">6</span>,
<span class="hljs-attr">"blockedConsumerOnUnackedMsgs"</span>: <span class="hljs-literal">false</span>,
<span class="hljs-attr">"lastAckedTimestamp"</span>: <span class="hljs-number">1625389546162</span>,
<span class="hljs-attr">"lastConsumedTimestamp"</span>: <span class="hljs-number">1625389546070</span>,
<span class="hljs-attr">"metadata"</span>: {},
<span class="hljs-attr">"address"</span>: <span class="hljs-string">"/127.0.0.1:35472"</span>,
<span class="hljs-attr">"connectedSince"</span>: <span class="hljs-string">"2021-07-04T08:58:21.287682Z"</span>,
<span class="hljs-attr">"clientVersion"</span>: <span class="hljs-string">"2.8.0"</span>
}
],
<span class="hljs-attr">"isDurable"</span>: <span class="hljs-literal">true</span>,
<span class="hljs-attr">"isReplicated"</span>: <span class="hljs-literal">false</span>,
<span class="hljs-attr">"allowOutOfOrderDelivery"</span>: <span class="hljs-literal">false</span>,
<span class="hljs-attr">"consumersAfterMarkDeletePosition"</span>: {},
<span class="hljs-attr">"nonContiguousDeletedMessagesRanges"</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">"nonContiguousDeletedMessagesRangesSerializedSize"</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">"durable"</span>: <span class="hljs-literal">true</span>,
<span class="hljs-attr">"replicated"</span>: <span class="hljs-literal">false</span>
}
},
<span class="hljs-attr">"replication"</span>: {},
<span class="hljs-attr">"deduplicationStatus"</span>: <span class="hljs-string">"Disabled"</span>,
<span class="hljs-attr">"nonContiguousDeletedMessagesRanges"</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">"nonContiguousDeletedMessagesRangesSerializedSize"</span>: <span class="hljs-number">0</span>
}
</code></pre>
</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/getting-started-standalone"><span class="arrow-prev"></span><span>Run Pulsar locally</span></a><a class="docs-next button" href="/docs/en/next/getting-started-helm"><span>Run Pulsar in Kubernetes</span><span class="arrow-next"></span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#start-pulsar-in-docker">Start Pulsar in Docker</a></li><li><a href="#use-pulsar-in-docker">Use Pulsar in Docker</a><ul class="toc-headings"><li><a href="#consume-a-message">Consume a message</a></li><li><a href="#produce-a-message">Produce a message</a></li></ul></li><li><a href="#get-the-topic-statistics">Get the topic statistics</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2022 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are trademarks of The Apache Software Foundation.</section><span><script>
const community = document.querySelector("a[href='#community']").parentNode;
const communityMenu =
'<li>' +
'<a id="community-menu" href="#">Community <span style="font-size: 0.75em">&nbsp;▼</span></a>' +
'<div id="community-dropdown" class="hide">' +
'<ul id="community-dropdown-items">' +
'<li><a href="/en/contact">Contact</a></li>' +
'<li><a href="/en/contributing">Contributing</a></li>' +
'<li><a href="/en/coding-guide">Coding guide</a></li>' +
'<li><a href="/en/events">Events</a></li>' +
'<li><a href="https://twitter.com/Apache_Pulsar" target="_blank">Twitter &#x2750</a></li>' +
'<li><a href="https://github.com/apache/pulsar/wiki" target="_blank">Wiki &#x2750</a></li>' +
'<li><a href="https://github.com/apache/pulsar/issues" target="_blank">Issue tracking &#x2750</a></li>' +
'<li><a href="https://pulsar-summit.org/" target="_blank">Pulsar Summit &#x2750</a></li>' +
'<li>&nbsp;</li>' +
'<li><a href="/en/resources">Resources</a></li>' +
'<li><a href="/en/team">Team</a></li>' +
'<li><a href="/en/powered-by">Powered By</a></li>' +
'</ul>' +
'</div>' +
'</li>';
community.innerHTML = communityMenu;
const communityMenuItem = document.getElementById("community-menu");
const communityDropDown = document.getElementById("community-dropdown");
communityMenuItem.addEventListener("click", function(event) {
event.preventDefault();
if (communityDropDown.className == 'hide') {
communityDropDown.className = 'visible';
} else {
communityDropDown.className = 'hide';
}
});
</script></span></footer></div><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</script></body></html>