<!DOCTYPE html><html lang="ko-KR"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Versions · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content=""/><meta name="docsearch:language" content="ko-KR"/><meta property="og:title" content="Versions · Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/"/><meta property="og:description" content=""/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://pulsar.incubator.apache.org/img/pulsar.svg"/><link rel="shortcut icon" href="/img/pulsar.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://pulsar.incubator.apache.org/blog/atom.xml" title="Apache Pulsar Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://pulsar.incubator.apache.org/blog/feed.xml" title="Apache Pulsar Blog RSS Feed"/><script>
              (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
              (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
              m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
              })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

              ga('create', 'UA-102219959-1', 'auto');
              ga('send', 'pageview');
            </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/ko-KR"><img class="logo" src="/img/pulsar.svg" alt="Apache Pulsar"/></a><a href="/ko-KR/versions"><h3>2.5.0</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class=""><a href="/docs/ko-KR/standalone" target="_self">Docs</a></li><li class=""><a href="/ko-KR/download" target="_self">Download</a></li><li class=""><a href="/docs/ko-KR/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><span><li><a id="languages-menu" href="#"><img class="languages-icon" src="/img/language.svg" alt="Languages icon"/>한국어</a><div id="languages-dropdown" class="hide"><ul id="languages-dropdown-items"><li><a href="/en/versions">English</a></li><li><a href="/ja/versions">日本語</a></li><li><a href="/fr/versions">Français</a></li><li><a href="/zh-CN/versions">中文</a></li><li><a href="/zh-TW/versions">繁體中文</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><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="pageContainer"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Apache Pulsar Versions</h1></header><h3 id="latest">Latest Stable Version</h3><p>Latest stable release of Apache Pulsar.</p><table class="versions"><tbody><tr><th>2.5.0</th><td><a href="/docs/ko-KR/standalone">Documentation</a></td><td><a href="/release-notes#2.5.0">Release Notes</a></td></tr></tbody></table><h3 id="rc">Latest Version</h3>Here you can find the latest documentation and unreleased code.<table class="versions"><tbody><tr><th>master</th><td><a href="/docs/ko-KR/next/standalone">Documentation</a></td><td><a href="https://github.com/apache/pulsar">Source Code</a></td></tr></tbody></table><h3 id="archive">Past Versions</h3><p>Here you can find documentation for previous versions of Apache Pulsar.</p><table class="versions"><tbody><tr><th>2.4.2</th><td><a href="/docs/ko-KR/2.4.2/standalone">Documentation</a></td><td><a href="/release-notes#2.4.2">Release Notes</a></td></tr><tr><th>2.4.1</th><td><a href="/docs/ko-KR/2.4.1/standalone">Documentation</a></td><td><a href="/release-notes#2.4.1">Release Notes</a></td></tr><tr><th>2.4.0</th><td><a href="/docs/ko-KR/2.4.0/standalone">Documentation</a></td><td><a href="/release-notes#2.4.0">Release Notes</a></td></tr><tr><th>2.3.2</th><td><a href="/docs/ko-KR/2.3.2/standalone">Documentation</a></td><td><a href="/release-notes#2.3.2">Release Notes</a></td></tr><tr><th>2.3.1</th><td><a href="/docs/ko-KR/2.3.1/standalone">Documentation</a></td><td><a href="/release-notes#2.3.1">Release Notes</a></td></tr><tr><th>2.3.0</th><td><a href="/docs/ko-KR/2.3.0/standalone">Documentation</a></td><td><a href="/release-notes#2.3.0">Release Notes</a></td></tr><tr><th>2.2.1</th><td><a href="/docs/ko-KR/2.2.1/standalone">Documentation</a></td><td><a href="/release-notes#2.2.1">Release Notes</a></td></tr><tr><th>2.2.0</th><td><a href="/docs/ko-KR/2.2.0/standalone">Documentation</a></td><td><a href="/release-notes#2.2.0">Release Notes</a></td></tr><tr><th>2.1.1-incubating</th><td><a href="/docs/ko-KR/2.1.1-incubating/standalone">Documentation</a></td><td><a href="/release-notes#2.1.1-incubating">Release Notes</a></td></tr><tr><th>2.1.0-incubating</th><td><a href="/docs/ko-KR/2.1.0-incubating/standalone">Documentation</a></td><td><a href="/release-notes#2.1.0-incubating">Release Notes</a></td></tr><tr><th>2.0.1-incubating</th><td><a href="/docs/v2.0.1-incubating/getting-started/LocalCluster/">Documentation</a></td><td><a href="/release-notes#2.0.1-incubating">Release Notes</a></td></tr><tr><th>2.0.0-rc1-incubating</th><td><a href="/docs/v2.0.0-rc1-incubating/getting-started/LocalCluster/">Documentation</a></td><td><a href="/release-notes#2.0.0-rc1-incubating">Release Notes</a></td></tr><tr><th>1.22.0-incubating</th><td><a href="/docs/v1.22.0-incubating/getting-started/LocalCluster/">Documentation</a></td><td><a href="/release-notes#1.22.0-incubating">Release Notes</a></td></tr><tr><th>1.21.0-incubating</th><td><a href="/docs/v1.21.0-incubating/getting-started/LocalCluster/">Documentation</a></td><td><a href="/release-notes#1.21.0-incubating">Release Notes</a></td></tr><tr><th>1.20.0-incubating</th><td><a href="/docs/v1.20.0-incubating/getting-started/LocalCluster/">Documentation</a></td><td><a href="/release-notes#1.20.0-incubating">Release Notes</a></td></tr><tr><th>1.19.0-incubating</th><td><a href="/docs/v1.19.0-incubating/getting-started/LocalCluster/">Documentation</a></td><td><a href="/release-notes#1.19.0-incubating">Release Notes</a></td></tr></tbody></table></div></div></div></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2020 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="/ko-KR/contact">Contact</a></li>' +
            '<li><a href="/ko-KR/contributing">Contributing</a></li>' +
            '<li><a href="/ko-KR/coding-guide">Coding guide</a></li>' +
            '<li><a href="/ko-KR/events">Events</a></li>' +
            '<li><a href="https://twitter.com/Apache_Pulsar" target="_blank">Twitter &#x2750</a></li>' +
            '<li><a href="https://github.com/apache/pulsar/wiki" target="_blank">Wiki &#x2750</a></li>' +
            '<li><a href="https://github.com/apache/pulsar/issues" target="_blank">Issue tracking &#x2750</a></li>' +
            '<li>&nbsp;</li>' +
            '<li><a href="/ko-KR/resources">Resources</a></li>' +
            '<li><a href="/ko-KR/team">Team</a></li>' +
            '<li><a href="/ko-KR/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 type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</script><script>
                document.addEventListener('keyup', function(e) {
                  if (e.target !== document.body) {
                    return;
                  }
                  // keyCode for '/' (slash)
                  if (e.keyCode === 191) {
                    const search = document.getElementById('search_input_react');
                    search && search.focus();
                  }
                });
              </script><script>
              var search = docsearch({
                
                apiKey: 'd226a455cecdd4bc18a554c1b47e5b52',
                indexName: 'apache_pulsar',
                inputSelector: '#search_input_react',
                algoliaOptions: {"facetFilters":["language:ko-KR","version:2.5.0"]}
              });
            </script></body></html>