

{"id":15582,"date":"2018-05-31T06:00:19","date_gmt":"2018-05-31T06:00:19","guid":{"rendered":"https:\/\/data-flair.training\/blogs\/?p=15582"},"modified":"2018-05-31T06:00:19","modified_gmt":"2018-05-31T06:00:19","slug":"kafka-docker","status":"publish","type":"post","link":"https:\/\/data-flair.training\/blogs\/kafka-docker\/","title":{"rendered":"Kafka-Docker: Steps To Run Apache Kafka Using Docker"},"content":{"rendered":"<p><span style=\"font-weight: 400\">In this Kafka tutorial, we will learn the concept of Kafka-Docker. Moreover, we will see the uninstallation process of Docker in Kafka. This includes all the steps to run\u00a0<strong>Apache Kafka<\/strong> using Docker.<\/span><\/p>\n<p><span style=\"font-weight: 400\"> Along with this, to run Kafka using Docker we are going to learn its usage, broker ids, Advertised hostname, Advertised port etc.<\/span><\/p>\n<p>So, let&#8217;s begin Kafka-docker tutorial.<\/p>\n<h2>What is Kafka-docker?<\/h2>\n<p><span style=\"font-weight: 400\">Here come the steps to run Apache Kafka using Docker i.e. Kafka-docker.<\/span><\/p>\n<h3>i. Pre-Requisites for using Docker<\/h3>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">At very first, install docker-compose<\/span><\/li>\n<\/ul>\n<p><strong>a. Install Docker Compose<\/strong><br \/>\n<span style=\"font-weight: 400\">We can run compose on macOS, Windows, as well as 64-bit <strong>Linux.<\/strong><\/span><br \/>\n<span style=\"font-weight: 400\">Now, to install Kafka-Docker, steps are:<\/span><br \/>\n<span style=\"font-weight: 400\">1. For any meaningful work, Docker compose relies on Docker Engine. Hence, we have to ensure that we have Docker Engine installed either locally or remote, depending on our setup.<\/span><br \/>\n<span style=\"font-weight: 400\">Basically, on desktop systems like Docker for Mac and Windows, Docker compose is included as part of those desktop installs.<\/span><\/p>\n<p><span style=\"font-weight: 400\">2. Then, Install Compose on macOS<\/span><br \/>\n<span style=\"font-weight: 400\">Docker for Mac and Docker Toolbox already include Compose along with other Docker apps, so Mac users do not need to install Compose separately. Docker install instructions for these are here:<\/span><\/p>\n<p><span style=\"font-weight: 400\">3. Uninstallation of Kafka-docker<\/span><\/p>\n<ul>\n<li><span style=\"font-weight: 400\">If\u00a0we installed it using curl, then to uninstall Docker Compose:<\/span><\/li>\n<\/ul>\n<p><strong>sudo rm \/usr\/local\/bin\/docker-compose<\/strong><\/p>\n<ul>\n<li><span style=\"font-weight: 400\">If\u00a0we\u00a0 installed using pip, then to uninstall Docker Compose:<\/span><\/li>\n<\/ul>\n<p><strong>pip uninstall docker-compose<\/strong><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">After installing compose, modify the KAFKA_ADVERTISED_HOST_NAME in docker-compose.yml to match our docker host IP <\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\"><strong>Note:<\/strong> Do not use localhost or 127.0.0.1 as the host IP to run multiple brokers.<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">If we want to customize\u00a0any Kafka parameters, we need to add them as environment variables in docker-compose.yml.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">By adding environment variables prefixed with LOG4J_, Kafka&#8217;s log4j usage can be customized. These will be mapped to log4j.properties. For example LOG4J_LOGGER_KAFKA_AUTHORIZER_LOGGER=DEBUG, authorizerAppender<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\"><strong>NOTE:<\/strong> There are various &#8216;gotchas&#8217; with configuring networking.\u00a0<\/span><\/p>\n<h3>ii. Usage<\/h3>\n<p><span style=\"font-weight: 400\">Start a Kafka cluster:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">docker-compose up -d<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">To add more <strong>Kafka brokers<\/strong>:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">docker-compose scale kafka=3<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">To destroy a cluster:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">docker-compose stop<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\"><strong>Note:<\/strong> The default docker-compose.yml should be seen as a starting point. Each Kafka Broker will get a new port number and broker id on a restart, by default. It depends on our use case this might not be desirable. <\/span><\/p>\n<p><span style=\"font-weight: 400\">A<\/span><span style=\"font-weight: 400\">lso, we can modify the docker-compose configuration accordingly,\u00a0 to use specific ports and broker ids, e.g. docker-compose-single-broker.yml:<\/span><br \/>\n<span style=\"font-weight: 400\">docker-compose -f docker-compose-single-broker.yml up<\/span><\/p>\n<h3>iii. Broker IDs<\/h3>\n<p><span style=\"font-weight: 400\">It is possible to configure the broker id in different ways<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">explicitly, using KAFKA_BROKER_ID<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">via a command, using BROKER_ID_COMMAND, e.g. BROKER_ID_COMMAND: &#8220;hostname | awk -F&#8217;-&#8216; &#8216;{print $2}'&#8221;<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">However, if somehow we don&#8217;t specify a broker id in our docker-compose file, that means it will automatically be generated.\u00a0It\u00a0permits scaling up and down. Also, to ensure that containers are not re-created, do not use &#8211;no-recreate option of docker-compose and thus keep their names and ids.<\/span><\/p>\n<h3>iv. Automatically create topics<\/h3>\n<p><span style=\"font-weight: 400\">If\u00a0we want to have Kafka-docker automatically create topics in Kafka during\u00a0<\/span><span style=\"font-weight: 400\">creation, a KAFKA_CREATE_TOPICS environment variable can be\u00a0<\/span><span style=\"font-weight: 400\">added in docker-compose.yml.<\/span><br \/>\n<span style=\"font-weight: 400\">Here is an example snippet from docker-compose.yml:<\/span><br \/>\n<span style=\"font-weight: 400\"> \u00a0\u00a0environment:<\/span><br \/>\n<span style=\"font-weight: 400\"> \u00a0\u00a0\u00a0\u00a0KAFKA_CREATE_TOPICS: &#8220;Topic1:1:3,Topic2:1:1:compact&#8221;<\/span><br \/>\n<span style=\"font-weight: 400\">Here, we can see Topic 1\u00a0is having 1 partition as well as 3 replicas, whereas Topic 2\u00a0is having 1 partition, 1 replica, and also a cleanup.policy which is set to compact.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Moreover, override the default, separator, by specifying the KAFKA_CREATE_TOPICS_SEPARATOR environment variable, in order to use multi-line YAML or some other delimiter between our topic definitions.<\/span><\/p>\n<p><span style=\"font-weight: 400\">For example, to split the topic definitions KAFKA_CREATE_TOPICS_SEPARATOR: &#8220;$$&#8217;\\n&#8221;&#8216; would use a newline. Make sure Syntax has to follow docker-compose escaping rules, and ANSI-C quoting.<\/span><\/p>\n<h3>v. Advertised Hostname<\/h3>\n<p><span style=\"font-weight: 400\">We can configure the advertised hostname in different ways<\/span><\/p>\n<ul>\n<li><span style=\"font-weight: 400\">explicitly, using KAFKA_ADVERTISED_HOST_NAME<\/span><\/li>\n<li><span style=\"font-weight: 400\">By a command, using HOSTNAME_COMMAND, e.g. HOSTNAME_COMMAND: &#8220;route -n | awk &#8216;\/UG[ \\t]\/{print $$2}'&#8221;<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">However, if KAFKA_ADVERTISED_HOST_NAME is already specified, it takes priority over HOSTNAME_COMMAND<\/span><br \/>\n<span style=\"font-weight: 400\">In order to get the container host&#8217;s IP, we can use the Metadata service, for AWS deployment:<\/span><br \/>\n<strong>HOSTNAME_COMMAND=wget -t3 -T2 -qO- \u00a0http:\/\/169.254.169.254\/latest\/meta-data\/local-ipv4<\/strong><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Injecting HOSTNAME_COMMAND into the configuration<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">Use the _{HOSTNAME_COMMAND} string in our variable value, if we require the value of HOSTNAME_COMMAND in any of our other KAFKA_XXX variables, i.e.<\/span><br \/>\n<span style=\"font-weight: 400\">KAFKA_ADVERTISED_LISTENERS=SSL:\/\/_{HOSTNAME_COMMAND}:9093,PLAINTEXT:\/\/9092<\/span><\/p>\n<h3>vi. Advertised Port<\/h3>\n<p><span style=\"font-weight: 400\">It is very important to determine if the required advertised port is not static. It is possible with the PORT_COMMAND environment variable.<\/span><br \/>\n<span style=\"font-weight: 400\">PORT_COMMAND: <strong>&#8220;docker port $$(hostname) 9092\/tcp | cut -d: -f2<\/strong><\/span><br \/>\n<span style=\"font-weight: 400\">By using the _{PORT_COMMAND} string, we can interpolat it in any other KAFKA_XXX config, i.e.<\/span><br \/>\n<span style=\"font-weight: 400\">KAFKA_ADVERTISED_LISTENERS: PLAINTEXT:\/\/1.2.3.4:_{PORT_COMMAND}<\/span><\/p>\n<h3>vii. Listener Configuration<\/h3>\n<p><span style=\"font-weight: 400\">If the Kafka documentation is open, it is very useful, in order to understand the various broker listener configuration options easily.<\/span><br \/>\n<span style=\"font-weight: 400\">For the time of version 0.9.0, there are multiple listener configurations,\u00a0Kafka supports for brokers to help support different protocols as well as discriminate between internal and external traffic.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\"><strong>NOTE:<\/strong> advertised.host.name and advertised.port still work as expected, but should not be used if configuring the listeners.<\/span><\/p>\n<h3>viii. Example<\/h3>\n<p><span style=\"font-weight: 400\">The example environment below:<\/span><br \/>\n<span style=\"font-weight: 400\">HOSTNAME_COMMAND:<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">curl http:\/\/169.254.169.254\/latest\/meta-data\/public-hostname<\/pre>\n<p><span style=\"font-weight: 400\">KAFKA_ADVERTISED_LISTENERS:<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">INSIDE:\/\/:9092,OUTSIDE:\/\/_{HOSTNAME_COMMAND}:9094<\/pre>\n<p><span style=\"font-weight: 400\">KAFKA_LISTENERS:<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">INSIDE:\/\/:9092,OUTSIDE:\/\/:9094KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT<\/pre>\n<p><span style=\"font-family: Verdana, Geneva, sans-serif\">KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE<\/span><\/p>\n<p><span style=\"font-weight: 400\">Will result in the following broker config:<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">advertised.listeners = OUTSIDE:\/\/ec2-xx-xx-xxx-xx.us-west-2.compute.amazonaws.com:9094,INSIDE:\/\/:9092\nlisteners = OUTSIDE:\/\/:9094,INSIDE:\/\/:9092\ninter.broker.listener.name = INSIDE<\/pre>\n<h3><span style=\"font-family: Georgia, Georgia, serif;font-weight: inherit\">ix. Rules<\/span><\/h3>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">No listeners may share a port number.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">The second rule is, an advertised.listener\u00a0is must be present by protocol name and port number in listener&#8217;s list.<\/span><\/li>\n<\/ul>\n<h3>x. Broker Rack<\/h3>\n<p><span style=\"font-weight: 400\">We can configure the broker rack affinity in different ways<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">explicitly, using KAFKA_BROKER_RACK<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Via a command, using RACK_COMMAND, e.g. RACK_COMMAND: &#8220;curl http:\/\/169.254.169.254\/latest\/meta-data\/placement\/availability-zone&#8221;<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">In the above example, the AWS metadata service is used to put the instance&#8217;s availability zone in the broker.rack property.<\/span><\/p>\n<h3>xi. JMX<\/h3>\n<p><span style=\"font-weight: 400\">We may need to configure JMX, for monitoring purposes. In addition, to the standard JMX parameters, problems\u00a0may occur from the underlying RMI protocol used to connect<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">java.rmi.server.hostname - interface in order to bind listening port\ncom.sun.management.jmxremote.rmi.port<\/pre>\n<p><span style=\"font-weight: 400\">For example, <\/span><br \/>\n<span style=\"font-weight: 400\">if we want to connect to a Kafka running locally (suppose exposing port 1099)<\/span><br \/>\n<span style=\"font-weight: 400\"> KAFKA_JMX_OPTS: &#8220;-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote.rmi.port=1099&#8221;<\/span><br \/>\n<span style=\"font-weight: 400\"> JMX_PORT: 1099<\/span><br \/>\n<span style=\"font-weight: 400\">Jconsole can now connect at jconsole 192.168.99.100:1099<\/span><\/p>\n<h3>xii. Docker Swarm Mode<\/h3>\n<p><span style=\"font-weight: 400\">While deploying Kafka in a Docker Swarm using an overlay network, the above listener configuration is necessary.\u00a0On separating both OUTSIDE as well as INSIDE listeners, a host can communicate with clients outside the overlay network at the time of benefiting from it within the swarm.<\/span><br \/>\n<span style=\"font-weight: 400\">More good practices for operating Kafka in a Docker Swarm include<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">To launch one and only one Kafka broker per swarm node, use &#8220;deploy: global&#8221; in a compose file.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Rather than default &#8220;ingress&#8221; load-balanced port binding, make usage of composing file version &#8216;3.2&#8217;\u00a0 as well as the &#8220;long&#8221; port definition along with the port in &#8220;host&#8221; mode. For example:<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">ports:<\/span><br \/>\n<span style=\"font-weight: 400\"> \u00a0&#8211; target: 9094<\/span><br \/>\n<span style=\"font-weight: 400\"> \u00a0\u00a0\u00a0published: 9094<\/span><br \/>\n<span style=\"font-weight: 400\"> \u00a0\u00a0\u00a0protocol: tcp<\/span><br \/>\n<span style=\"font-weight: 400\"> \u00a0\u00a0\u00a0mode: host<\/span><br \/>\nSo, this was all about Kafka-docker. Hope you like our explanation of Kafka Docker.<\/p>\n<h2>Conclusion<\/h2>\n<p>Hence, we have seen the whole Kafka-docker tutorial. Moreover, we saw how to uninstall Docker in Kafka. However, if you have any doubt regarding,\u00a0Kafka-docker, feel free to ask through the comment section.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this Kafka tutorial, we will learn the concept of Kafka-Docker. Moreover, we will see the uninstallation process of Docker in Kafka. This includes all the steps to run\u00a0Apache Kafka using Docker. Along with&#46;&#46;&#46;<\/p>\n","protected":false},"author":5,"featured_media":16008,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[6759,6809,7840,7968,7982,15146,15705,15706,15801],"class_list":["post-15582","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kafka","tag-install-docker-compose","tag-installation-of-docker","tag-kafak-docker-tutorial","tag-kafka-tutorial","tag-kafka-docker","tag-uninstallation-of-docker","tag-what-is-docker","tag-what-is-docker-in-kafka","tag-what-is-kafka-docker"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Kafka-Docker: Steps To Run Apache Kafka Using Docker - DataFlair<\/title>\n<meta name=\"description\" content=\"Kafka-docker, steps to run Apache Kafka using Docker, installation of Docker, uninstallation of docker,Docker example,what is Docker in Kafka,Kafka Tutorial\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/data-flair.training\/blogs\/kafka-docker\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kafka-Docker: Steps To Run Apache Kafka Using Docker - DataFlair\" \/>\n<meta property=\"og:description\" content=\"Kafka-docker, steps to run Apache Kafka using Docker, installation of Docker, uninstallation of docker,Docker example,what is Docker in Kafka,Kafka Tutorial\" \/>\n<meta property=\"og:url\" content=\"https:\/\/data-flair.training\/blogs\/kafka-docker\/\" \/>\n<meta property=\"og:site_name\" content=\"DataFlair\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/DataFlairWS\/\" \/>\n<meta property=\"article:published_time\" content=\"2018-05-31T06:00:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Kafka-docker-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"DataFlair Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@DataFlairWS\" \/>\n<meta name=\"twitter:site\" content=\"@DataFlairWS\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"DataFlair Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Kafka-Docker: Steps To Run Apache Kafka Using Docker - DataFlair","description":"Kafka-docker, steps to run Apache Kafka using Docker, installation of Docker, uninstallation of docker,Docker example,what is Docker in Kafka,Kafka Tutorial","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/data-flair.training\/blogs\/kafka-docker\/","og_locale":"en_US","og_type":"article","og_title":"Kafka-Docker: Steps To Run Apache Kafka Using Docker - DataFlair","og_description":"Kafka-docker, steps to run Apache Kafka using Docker, installation of Docker, uninstallation of docker,Docker example,what is Docker in Kafka,Kafka Tutorial","og_url":"https:\/\/data-flair.training\/blogs\/kafka-docker\/","og_site_name":"DataFlair","article_publisher":"https:\/\/www.facebook.com\/DataFlairWS\/","article_published_time":"2018-05-31T06:00:19+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Kafka-docker-1.jpg","type":"image\/jpeg"}],"author":"DataFlair Team","twitter_card":"summary_large_image","twitter_creator":"@DataFlairWS","twitter_site":"@DataFlairWS","twitter_misc":{"Written by":"DataFlair Team","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/data-flair.training\/blogs\/kafka-docker\/#article","isPartOf":{"@id":"https:\/\/data-flair.training\/blogs\/kafka-docker\/"},"author":{"name":"DataFlair Team","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/person\/7f83c342f5d1632d6f7b4b0b0f447823"},"headline":"Kafka-Docker: Steps To Run Apache Kafka Using Docker","datePublished":"2018-05-31T06:00:19+00:00","mainEntityOfPage":{"@id":"https:\/\/data-flair.training\/blogs\/kafka-docker\/"},"wordCount":1234,"commentCount":4,"publisher":{"@id":"https:\/\/data-flair.training\/blogs\/#organization"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/kafka-docker\/#primaryimage"},"thumbnailUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Kafka-docker-1.jpg","keywords":["Install Docker Compose","Installation of Docker","Kafak-docker tutorial","Kafka tutorial","Kafka-docker","Uninstallation of Docker","what is Docker","what is Docker in Kafka","what is kafka Docker"],"articleSection":["Apache Kafka Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/data-flair.training\/blogs\/kafka-docker\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/data-flair.training\/blogs\/kafka-docker\/","url":"https:\/\/data-flair.training\/blogs\/kafka-docker\/","name":"Kafka-Docker: Steps To Run Apache Kafka Using Docker - DataFlair","isPartOf":{"@id":"https:\/\/data-flair.training\/blogs\/#website"},"primaryImageOfPage":{"@id":"https:\/\/data-flair.training\/blogs\/kafka-docker\/#primaryimage"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/kafka-docker\/#primaryimage"},"thumbnailUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Kafka-docker-1.jpg","datePublished":"2018-05-31T06:00:19+00:00","description":"Kafka-docker, steps to run Apache Kafka using Docker, installation of Docker, uninstallation of docker,Docker example,what is Docker in Kafka,Kafka Tutorial","breadcrumb":{"@id":"https:\/\/data-flair.training\/blogs\/kafka-docker\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/data-flair.training\/blogs\/kafka-docker\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/data-flair.training\/blogs\/kafka-docker\/#primaryimage","url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Kafka-docker-1.jpg","contentUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Kafka-docker-1.jpg","width":1200,"height":628,"caption":"What is Kafka-docker"},{"@type":"BreadcrumbList","@id":"https:\/\/data-flair.training\/blogs\/kafka-docker\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Blog Home","item":"https:\/\/data-flair.training\/blogs\/"},{"@type":"ListItem","position":2,"name":"Apache Kafka Tutorials","item":"https:\/\/data-flair.training\/blogs\/category\/kafka\/"},{"@type":"ListItem","position":3,"name":"Kafka-Docker: Steps To Run Apache Kafka Using Docker"}]},{"@type":"WebSite","@id":"https:\/\/data-flair.training\/blogs\/#website","url":"https:\/\/data-flair.training\/blogs\/","name":"DataFlair","description":"Learn Today. Lead Tomorrow.","publisher":{"@id":"https:\/\/data-flair.training\/blogs\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/data-flair.training\/blogs\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/data-flair.training\/blogs\/#organization","name":"DataFlair","url":"https:\/\/data-flair.training\/blogs\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/logo\/image\/","url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2016\/07\/Data-Flair.png","contentUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2016\/07\/Data-Flair.png","width":106,"height":48,"caption":"DataFlair"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/DataFlairWS\/","https:\/\/x.com\/DataFlairWS","https:\/\/www.linkedin.com\/company\/dataflair-web-services-pvt-ltd\/","https:\/\/www.youtube.com\/user\/DataFlairWS"]},{"@type":"Person","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/person\/7f83c342f5d1632d6f7b4b0b0f447823","name":"DataFlair Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/4cf3a74600d131330b8c481d519afd1574093ed89f6d3396a95393ad223eb7cd?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/4cf3a74600d131330b8c481d519afd1574093ed89f6d3396a95393ad223eb7cd?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4cf3a74600d131330b8c481d519afd1574093ed89f6d3396a95393ad223eb7cd?s=96&d=mm&r=g","caption":"DataFlair Team"},"description":"DataFlair Team creates expert-level guides on programming, Java, Python, C++, DSA, AI, ML, data Science, Android, Flutter, MERN, Web Development, and technology. Our goal is to empower learners with easy-to-understand content. Explore our resources for career growth and practical learning.","url":"https:\/\/data-flair.training\/blogs\/author\/dfteam1\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/15582","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/comments?post=15582"}],"version-history":[{"count":0,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/15582\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/media\/16008"}],"wp:attachment":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/media?parent=15582"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/categories?post=15582"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/tags?post=15582"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}