

{"id":22043,"date":"2018-07-21T04:00:21","date_gmt":"2018-07-21T04:00:21","guid":{"rendered":"https:\/\/data-flair.training\/blogs\/?p=22043"},"modified":"2021-05-19T18:24:08","modified_gmt":"2021-05-19T12:54:08","slug":"zookeeper-architecture","status":"publish","type":"post","link":"https:\/\/data-flair.training\/blogs\/zookeeper-architecture\/","title":{"rendered":"Apache Zookeeper Architecture &#8211; Diagrams &amp; Examples"},"content":{"rendered":"<p><span style=\"font-weight: 400\">Today, in this <strong>Apache Zookeeper tutorial<\/strong>, we will discuss <em>ZooKeeper architecture<\/em>. This architecture of ZooKeeper includes working of ZooKeeper with diagram and different data models. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Moreover, we will learn the design goals of ZooKeeper Architecture, modes and versions in ZooKeeper. We will also saw ZooKeeper Watches and ZooKeeper Quorums.\u00a0<\/span><\/p>\n<p>So, let&#8217;s start Apache ZooKeeper Architecture.<\/p>\n<h2><span style=\"font-weight: 400\">What is the Architecture of ZooKeeper?<\/span><\/h2>\n<ul>\n<li><span style=\"font-weight: 400\">ZooKeeper is a distributed application on its own while being a coordination service for distributed systems. <\/span><\/li>\n<li><span style=\"font-weight: 400\">It has a simple client-server model in which clients are nodes (i.e. machines) and servers are nodes. <\/span><\/li>\n<li><span style=\"font-weight: 400\">As a function, ZooKeper Clients make use of the services and servers provides the services.<\/span><\/li>\n<li><span style=\"font-weight: 400\"> Applications make calls to ZooKeeper through a client library. <\/span><\/li>\n<li><span style=\"font-weight: 400\">The client library handles the interaction with ZooKeeper servers here. <\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">Now, the following figure shows the relationship between clients and servers. Here you can see each client imports the client library then further communicate with any ZooKeeper node.<\/span><\/p>\n<div id=\"attachment_22076\" style=\"width: 1210px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/Architecture-of-Zookeeper-3.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-22076\" class=\"wp-image-22076 size-full\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/Architecture-of-Zookeeper-3.png\" alt=\"Zookeeper Architecture\" width=\"1200\" height=\"628\" srcset=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/Architecture-of-Zookeeper-3.png 1200w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/Architecture-of-Zookeeper-3-150x79.png 150w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/Architecture-of-Zookeeper-3-300x157.png 300w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/Architecture-of-Zookeeper-3-768x402.png 768w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/Architecture-of-Zookeeper-3-1024x536.png 1024w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/a><p id=\"caption-attachment-22076\" class=\"wp-caption-text\">The Architecture of ZooKeeper &#8211; ZooKeeper Working<\/p><\/div>\n<p><span style=\"font-weight: 400\">In addition, there are two modes in which Zookeeper runs: standalone and quorum. On defining Standalone mode, it has a single server, and ZooKeeper state is not replicated here. <\/span><\/p>\n<p><span style=\"font-weight: 400\">And, on defining quorum mode, in this mode there is a group of ZooKeeper servers, also what we call it ZooKeeper ensemble, which replicates the state, further, they serve client requests, together.<\/span><br \/>\n<span style=\"font-weight: 400\">However, one <em>ZooKeeper client<\/em> is connected to one <em>ZooKeeper server<\/em>, at any given time. <\/span><\/p>\n<p><span style=\"font-weight: 400\">As the best<em> feature<\/em>, each server handles a large number of client connections simultaneously. And, in a periodic manner, each client sends pings to the ZooKeeper server it is connected in order to make sure that it is alive and connected to the server. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Further, with an acknowledgment of the ping, indicating the server is alive as well, the ZooKeeper server responds. <\/span><\/p>\n<p><span style=\"font-weight: 400\">However, the client connects to another server in the ensemble, when the client doesn&#8217;t receive an acknowledgment from the server within the specified time. As a result, the client session is transparently transferred over to the new ZooKeeper server.<\/span><\/p>\n<h2><span style=\"font-weight: 400\">Design Goals of Zookeeper Architecture<\/span><\/h2>\n<p><span style=\"font-weight: 400\">There were some motives behind the design of Zookeeper Architecture:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">ZooKeeper architecture must be able to tolerate failures.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Also, it must be in the position to recover from correlated recoverable failures (power outages).<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Most importantly it must be correct or easy to implement correctly.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Additionally, it must be fast along with high throughput and low latency.<\/span><\/li>\n<\/ul>\n<h2><span style=\"font-weight: 400\">Data Model in ZooKeeper<\/span><\/h2>\n<p><span style=\"font-weight: 400\">As same as a <em>standard file system<\/em>, the <em>namespace<\/em> provided by ZooKeeper. Basically, a sequence of path elements which separates by a slash (\/) is what we call a name. In ZooKeeper&#8217;s namespace, a path identifies every node. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Moreover, in a ZooKeeper namespace, each node can have data associated with it and its children. As same as a file-system which permits a file to also be a directory.<\/span><\/p>\n<div id=\"attachment_22079\" style=\"width: 1210px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/Data-Model-and-The-Hierarchical-Namespace-of-Zookeeper.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-22079\" class=\"wp-image-22079 size-full\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/Data-Model-and-The-Hierarchical-Namespace-of-Zookeeper.png\" alt=\"Zookeeper Architecture\" width=\"1200\" height=\"628\" srcset=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/Data-Model-and-The-Hierarchical-Namespace-of-Zookeeper.png 1200w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/Data-Model-and-The-Hierarchical-Namespace-of-Zookeeper-150x79.png 150w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/Data-Model-and-The-Hierarchical-Namespace-of-Zookeeper-300x157.png 300w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/Data-Model-and-The-Hierarchical-Namespace-of-Zookeeper-768x402.png 768w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/Data-Model-and-The-Hierarchical-Namespace-of-Zookeeper-1024x536.png 1024w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/a><p id=\"caption-attachment-22079\" class=\"wp-caption-text\">ZooKeeper Data Model<\/p><\/div>\n<p><span style=\"font-weight: 400\">At each ZNode in a namespace, read and write of data is automatically. That says, here Reads get all the data bytes which\u00a0correspond with a ZNode whereas write replaces all the data. In addition, there is an <em>Access Control List (ACL)<\/em> with each node that restricts everybody&#8217;s work.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Additionally, within each of the ZooKeeper servers, the ZNode hierarchy is stored in memory. Basically, that helps for quick responses to reads from the clients. <\/span><\/p>\n<p><span style=\"font-weight: 400\">This hierarchy can offer reliability, availability, and coordination to our application that\u2019s why\u00a0we must use it as a storage mechanism for the small amount of data.<\/span><\/p>\n<h4>a. Information conveyed in ZooKeeper Architecture<\/h4>\n<p><span style=\"font-weight: 400\">The absence of data often conveys important information about a ZNode in ZooKeeper Architecture.<\/span><\/p>\n<ol>\n<li><span style=\"font-weight: 400\"> To all ZNodes representing a worker available in the system, the \/workers ZNode is the parent ZNode. So, its ZNode should be removed from \/workers, if a worker becomes unavailable.<\/span><\/li>\n<li><span style=\"font-weight: 400\"> Since waiting for workers to execute tasks, the \/tasks ZNode is the parent of all the tasks created. In order to represent new tasks and wait for ZNodes representing the status of the task, clients of the master-worker application add new ZNodes as children of \/tasks.<\/span><\/li>\n<li><span style=\"font-weight: 400\">By representing an assignment of a task to a worker, the \/assign ZNode is the parent of all ZNodes. Also, it adds a child ZNode to \/ assigns, when a master assigns a task to a worker.<\/span><\/li>\n<\/ol>\n<h2><span style=\"font-weight: 400\">ZooKeeper Architecture &#8211; Modes for ZNodes<\/span><\/h2>\n<p><span style=\"font-weight: 400\">We also need to specify a mode, when creating a new ZNode in ZooKeeper architecture. Because different modes explain the behavior of the ZNode:<\/span><\/p>\n<h3><span style=\"font-weight: 400\">a. Persistent and Ephemeral znodes<\/span><\/h3>\n<p><span style=\"font-weight: 400\"><strong>A ZNode can be of any type:<\/strong> either a <em>persistent ZNode<\/em> or an <em>ephemeral ZNode<\/em>. Basically, only through a call to delete, we can delete a persistent ZNode\/path. And, in contrast, if the client that created it crashes or simply closes its connection to ZooKeeper, an ephemeral ZNode deletes.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Generally, the ZNode stores some data on behalf of an application. Even after its creator is no longer part of the system, and it is a need to preserve its data, in that case, Persistent ZNodes are useful. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Whereas, when some aspect of the application that must exist only while the session of its creator is valid, Ephemeral ZNodes convey information about that.<\/span><\/p>\n<h3><span style=\"font-weight: 400\">b. Sequential ZNodes<\/span><\/h3>\n<p><span style=\"font-weight: 400\">These ZNodes have a unique, monotonically increasing integer which we further use to create the ZNode. In other words, these offer an easy way to create ZNodes with unique names. Also, offer a way to easily see the creation order of ZNodes.<\/span><\/p>\n<h2><span style=\"font-weight: 400\">ZooKeeper Architecture &#8211; Versions<\/span><\/h2>\n<p><span style=\"font-weight: 400\">There is a version number\u00a0that associates with every ZNode. Further, that number\u00a0increases every time its data changes. Especially, at the time when multiple ZooKeeper clients might be trying to perform operations over the same ZNode, the use of versions is important.<\/span><\/p>\n<h2><span style=\"font-weight: 400\">ZooKeeper Watches<\/span><\/h2>\n<p><span style=\"font-weight: 400\">In order to get notifications about the changes in the ZooKeeper ensemble, <strong>ZooKeeper Watches<\/strong> are a simple mechanism for the client. Also, we can say a watch is a one-shot operation, means it triggers one notification. <\/span><\/p>\n<p><span style=\"font-weight: 400\">However, a client can set a new watch upon receiving each notification just to receive multiple notifications over time.<\/span><\/p>\n<h2><span style=\"font-weight: 400\">ZooKeeper Quorums<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Basically, a ZooKeeper replicates its data a tree across all servers in the ensemble, in quorum mode. Yet, the delays might be unacceptable, if a client had to wait for every server to store its data before continuing.<\/span><\/p>\n<p><span style=\"font-weight: 400\"> Generally, a quorum is the minimum number of legislators needs to be present for a vote, <\/span><span style=\"font-weight: 400\">in public administration<\/span><span style=\"font-weight: 400\">. In Zookeeper also, \u00a0it is the minimum number of servers that have to be running and available in order, to make Zookeeper work. <\/span><\/p>\n<h3><span style=\"font-weight: 400\">a. How to choose an adequate size for the ZooKeeper Quorum<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Choosing the adequate size for the quorum in ZooKeeper is a very important step. We must deploy ZooKeeper in a ZooKeeper cluster known as an <em>ensemble for reliable ZooKeeper service<\/em>.<\/span><\/p>\n<p><span style=\"font-weight: 400\"> Although, the service will be available, as long as a majority of the ensemble are up. So, it is best to use an odd number of machines, since Zookeeper requires a majority.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Now, let\u2019s see an example IN ZooKeeper Architecture to understand it well, this example explains, if the quorum is too small, how things can go wrong. Let\u2019s suppose there are five servers and also a quorum which is set of two servers. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Further, assume such servers s1 and s2 both acknowledge that they both have replicated a request in order to create a ZNode \/z. Then in order to say that the Znode\u00a0is created, the service returns to the client.<\/span><\/p>\n<p><span style=\"font-weight: 400\"> Further, let\u2019s say for an arbitrarily long time both the servers s1 and s2 have partitioned away from the other servers and also from clients. Even before they have a chance to replicate the new ZNode to the other servers. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Since there are three servers available and it really needs only two according to our assumptions, the service in this state is able to make progress. However, these three servers are new to the new ZNode \/z. Accordingly, the request to create \/z is nondurable.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Hence, the size of the quorum must be at least three, which is a majority of the five servers in the ensemble, in order to solve this issue. Also, the ensemble needs at least three servers available just to make progress. <\/span><\/p>\n<p><span style=\"font-weight: 400\">So, we are able to tolerate the crash of servers by using such a majority scheme, make sure here f is less than half of the servers in the ensemble. For example, \u00a0we can tolerate up to f = 2 crashes, if we have five servers. <\/span><\/p>\n<p><span style=\"font-weight: 400\">However, the number of servers in even number actually makes the system more fragile, so the number of servers in the ensemble is not mandatorily odd. So, assume, we have four servers for an ensemble. And, a majority of servers is\u00a0consists of three servers.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Since a double crash makes the system lose the majority, this system will only tolerate a single crash. Hence, it is the must that we should always shoot for an odd number of servers.<\/span><br \/>\nSo, this was all in ZooKeeper Architecture. Hope you like our explanation.<\/p>\n<h2>Conclusion: Zookeeper Architecture<\/h2>\n<p>Hence, in this ZooKeeper Architecture tutorial, we have seen the whole about Architecture of ZooKeeper in detail. Moreover, we discussed the working of ZooKeeper Architecture and different model and nodes in ZooKeeper.<\/p>\n<p>Along with this, we saw ZooKeeper Architecture versions and design goals. Still, if any doubt occurs regarding ZooKeeper Architecture, feel free to ask in the comment section.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Today, in this Apache Zookeeper tutorial, we will discuss ZooKeeper architecture. This architecture of ZooKeeper includes working of ZooKeeper with diagram and different data models. Moreover, we will learn the design goals of ZooKeeper&#46;&#46;&#46;<\/p>\n","protected":false},"author":7,"featured_media":22154,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[77],"tags":[1093,3385,4178,6409,8778,9478,12734,16355,16366,16413,16422,16423,16425],"class_list":["post-22043","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-zookeeper","tag-architecture-of-zookeeper","tag-data-model-in-zookeeper","tag-ephemeral-znode","tag-how-zookeeper-works","tag-modes-for-znodes","tag-persistent-znodes","tag-sequential-znodes","tag-znode","tag-zookeeper-architecture","tag-zookeeper-quorums","tag-zookeeper-tutorial","tag-zookeeper-use-cases","tag-zookeeper-watches"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Apache Zookeeper Architecture - Diagrams &amp; Examples - DataFlair<\/title>\n<meta name=\"description\" content=\"ZooKeeper Architecture,working of ZooKeeper, Zookeeper Architecture diagram,ZooKeeper use cases,Nodes in Architecture of ZooKeeper,ZooKeeper Versions,Znodes\" \/>\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\/zookeeper-architecture\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Apache Zookeeper Architecture - Diagrams &amp; Examples - DataFlair\" \/>\n<meta property=\"og:description\" content=\"ZooKeeper Architecture,working of ZooKeeper, Zookeeper Architecture diagram,ZooKeeper use cases,Nodes in Architecture of ZooKeeper,ZooKeeper Versions,Znodes\" \/>\n<meta property=\"og:url\" content=\"https:\/\/data-flair.training\/blogs\/zookeeper-architecture\/\" \/>\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-07-21T04:00:21+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-05-19T12:54:08+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/Apache-Zookeeper-Architecture-01.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=\"8 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Apache Zookeeper Architecture - Diagrams &amp; Examples - DataFlair","description":"ZooKeeper Architecture,working of ZooKeeper, Zookeeper Architecture diagram,ZooKeeper use cases,Nodes in Architecture of ZooKeeper,ZooKeeper Versions,Znodes","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\/zookeeper-architecture\/","og_locale":"en_US","og_type":"article","og_title":"Apache Zookeeper Architecture - Diagrams &amp; Examples - DataFlair","og_description":"ZooKeeper Architecture,working of ZooKeeper, Zookeeper Architecture diagram,ZooKeeper use cases,Nodes in Architecture of ZooKeeper,ZooKeeper Versions,Znodes","og_url":"https:\/\/data-flair.training\/blogs\/zookeeper-architecture\/","og_site_name":"DataFlair","article_publisher":"https:\/\/www.facebook.com\/DataFlairWS\/","article_published_time":"2018-07-21T04:00:21+00:00","article_modified_time":"2021-05-19T12:54:08+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/Apache-Zookeeper-Architecture-01.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":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/data-flair.training\/blogs\/zookeeper-architecture\/#article","isPartOf":{"@id":"https:\/\/data-flair.training\/blogs\/zookeeper-architecture\/"},"author":{"name":"DataFlair Team","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/person\/beb0cab24b7aa54423a3b50e669a9dcd"},"headline":"Apache Zookeeper Architecture &#8211; Diagrams &amp; Examples","datePublished":"2018-07-21T04:00:21+00:00","dateModified":"2021-05-19T12:54:08+00:00","mainEntityOfPage":{"@id":"https:\/\/data-flair.training\/blogs\/zookeeper-architecture\/"},"wordCount":1593,"commentCount":1,"publisher":{"@id":"https:\/\/data-flair.training\/blogs\/#organization"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/zookeeper-architecture\/#primaryimage"},"thumbnailUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/Apache-Zookeeper-Architecture-01.jpg","keywords":["Architecture of ZooKeeper","Data Model in ZooKeeper","ephemeral ZNode","how ZooKeeper works","Modes for ZNodes","Persistent ZNodes","Sequential ZNodes","ZNode","ZooKeeper Architecture","ZooKeeper Quorums","zookeeper tutorial","ZooKeeper Use Cases","Zookeeper watches"],"articleSection":["Zookeeper Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/data-flair.training\/blogs\/zookeeper-architecture\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/data-flair.training\/blogs\/zookeeper-architecture\/","url":"https:\/\/data-flair.training\/blogs\/zookeeper-architecture\/","name":"Apache Zookeeper Architecture - Diagrams &amp; Examples - DataFlair","isPartOf":{"@id":"https:\/\/data-flair.training\/blogs\/#website"},"primaryImageOfPage":{"@id":"https:\/\/data-flair.training\/blogs\/zookeeper-architecture\/#primaryimage"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/zookeeper-architecture\/#primaryimage"},"thumbnailUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/Apache-Zookeeper-Architecture-01.jpg","datePublished":"2018-07-21T04:00:21+00:00","dateModified":"2021-05-19T12:54:08+00:00","description":"ZooKeeper Architecture,working of ZooKeeper, Zookeeper Architecture diagram,ZooKeeper use cases,Nodes in Architecture of ZooKeeper,ZooKeeper Versions,Znodes","breadcrumb":{"@id":"https:\/\/data-flair.training\/blogs\/zookeeper-architecture\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/data-flair.training\/blogs\/zookeeper-architecture\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/data-flair.training\/blogs\/zookeeper-architecture\/#primaryimage","url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/Apache-Zookeeper-Architecture-01.jpg","contentUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/Apache-Zookeeper-Architecture-01.jpg","width":1200,"height":628,"caption":"Apache Zookeeper Architecture - Diagrams &amp; Examples"},{"@type":"BreadcrumbList","@id":"https:\/\/data-flair.training\/blogs\/zookeeper-architecture\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Blog Home","item":"https:\/\/data-flair.training\/blogs\/"},{"@type":"ListItem","position":2,"name":"Zookeeper Tutorials","item":"https:\/\/data-flair.training\/blogs\/category\/zookeeper\/"},{"@type":"ListItem","position":3,"name":"Apache Zookeeper Architecture &#8211; Diagrams &amp; Examples"}]},{"@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\/beb0cab24b7aa54423a3b50e669a9dcd","name":"DataFlair Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/c322416204232f4dd97ef3901b0a499a5d34d7ba7fe333f4bfe53a907873d293?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c322416204232f4dd97ef3901b0a499a5d34d7ba7fe333f4bfe53a907873d293?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c322416204232f4dd97ef3901b0a499a5d34d7ba7fe333f4bfe53a907873d293?s=96&d=mm&r=g","caption":"DataFlair Team"},"description":"DataFlair Team specializes in creating clear, actionable content on programming, Java, Python, C++, DSA, AI, ML, data Science, Android, Flutter, MERN, Web Development, and technology. Backed by industry expertise, we make learning easy and career-oriented for beginners and pros alike.","url":"https:\/\/data-flair.training\/blogs\/author\/dfteam3\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/22043","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\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/comments?post=22043"}],"version-history":[{"count":7,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/22043\/revisions"}],"predecessor-version":[{"id":94232,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/22043\/revisions\/94232"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/media\/22154"}],"wp:attachment":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/media?parent=22043"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/categories?post=22043"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/tags?post=22043"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}