Djurskötare är en distribuerad, öppen källkodskoordineringstjänst för distribuerade applikationer. Den avslöjar en enkel uppsättning primitiver för att implementera tjänster på högre nivå för synkronisering, konfigurationsunderhåll och grupp- och namngivning.
I ett distribuerat system finns det flera noder eller maskiner som behöver kommunicera med varandra och koordinera sina handlingar. ZooKeeper tillhandahåller ett sätt att säkerställa att dessa noder är medvetna om varandra och kan samordna sina handlingar. Den gör detta genom att upprätthålla ett hierarkiskt träd av datanoder som kallas Znoder , som kan användas för att lagra och hämta data och underhålla tillståndsinformation. ZooKeeper tillhandahåller en uppsättning primitiver, såsom lås, barriärer och köer, som kan användas för att koordinera nodernas åtgärder i ett distribuerat system. Den tillhandahåller också funktioner som ledareval, failover och återställning, som kan hjälpa till att säkerställa att systemet är motståndskraftigt mot fel. ZooKeeper används ofta i distribuerade system som Hadoop, Kafka och HBase, och det har blivit en viktig komponent i många distribuerade applikationer.
Varför behöver vi det?
- Samordningstjänster : Integrering/kommunikation av tjänster i en distribuerad miljö.
- Samordningstjänster är komplicerade att få rätt. De är särskilt utsatta för fel som tävlingsförhållanden och dödläge.
- Race skick -Två eller flera system försöker utföra någon uppgift.
- dödlägen – Två eller flera operationer väntar på varandra.
- För att göra koordineringen mellan distribuerade miljöer lätt kom utvecklare på en idé som kallas zookeeper så att de inte behöver befria distribuerade applikationer från ansvaret för att implementera samordningstjänster från grunden.
Vad är ett distribuerat system?
- Flera datorsystem som arbetar med ett enda problem.
- Det är ett nätverk som består av autonoma datorer som är anslutna med hjälp av distribuerad mellanprogramvara.
- Nyckelfunktioner : Samtidigt, resursdelning, oberoende, globalt, större feltolerans och pris/prestanda-förhållande är mycket bättre.
- Nyckelmål s: Transparens, Pålitlighet, Prestanda, Skalbarhet.
- Utmaningar : Säkerhet, Fel, Samordning och resursdelning.
Koordinationsutmaning
- Varför är koordination i ett distribuerat system det svåra problemet?
- Koordinerings- eller konfigurationshantering för en distribuerad applikation som har många system.
- Master Node där klusterdata lagras.
- Arbetarnoder eller slavnoder hämtar data från denna masternod.
- enda punkt av misslyckande.
- synkronisering är inte lätt.
- Noggrann design och implementering krävs.
Apache djurskötare
Apache Zookeeper är en distribuerad koordineringstjänst med öppen källkod för distribuerade system. Det ger en central plats för distribuerade applikationer att lagra data, kommunicera med varandra och koordinera aktiviteter. Zookeeper används i distribuerade system för att koordinera distribuerade processer och tjänster. Den tillhandahåller en enkel, trädstrukturerad datamodell, ett enkelt API och ett distribuerat protokoll för att säkerställa datakonsistens och tillgänglighet. Zookeeper är designad för att vara mycket pålitlig och feltolerant, och den kan hantera höga nivåer av läs- och skrivgenomströmning.
Zookeeper är implementerat i Java och används ofta i distribuerade system, särskilt i Hadoop-ekosystemet. Det är ett Apache Software Foundation-projekt och släpps under Apache License 2.0.
Arkitektur av Zookeeper

Zookeeper Services
ZooKeeper-arkitekturen består av en hierarki av noder som kallas znoder, organiserade i en trädliknande struktur. Varje znod kan lagra data och har en uppsättning behörigheter som styr åtkomsten till znoden. Znoderna är organiserade i en hierarkisk namnrymd, liknande ett filsystem. I roten av hierarkin finns rot-znoden, och alla andra znoder är barn till rot-znoden. Hierarkin liknar en filsystemhierarki, där varje znod kan ha barn och barnbarn, och så vidare.
Viktiga komponenter i Zookeeper

ZooKeeper tjänster
- Ledare & Följare
- Begäran processor – Aktiv i Leader Node och ansvarar för att behandla skrivförfrågningar. Efter bearbetning skickar den ändringar till följarnoderna
- Atomic Broadcast – Finns i både Leader Node och Follower Nodes. Det är ansvarigt för att skicka ändringarna till andra noder.
- In-memory Databaser (Replicated Databases)-Det är ansvarigt för att lagra data i djurskötaren. Varje nod innehåller sina egna databaser. Data skrivs också till filsystemet, vilket ger återställning vid eventuella problem med klustret.
Andra komponenter
- Klient – En av noderna i vårt distribuerade applikationskluster. Få åtkomst till information från servern. Varje klient skickar ett meddelande till servern för att låta servern veta att klienten är vid liv.
- Server – Tillhandahåller alla tjänster till kunden. Ger bekräftelse till klienten.
- Ensemble – Grupp av Zookeeper-servrar. Det minsta antalet noder som krävs för att bilda en ensemble är 3.
Zookeeper Data Model

ZooKeeper datamodell
I Zookeeper lagras data i ett hierarkiskt namnutrymme, liknande ett filsystem. Varje nod i namnområdet kallas en Znode, och den kan lagra data och ha barn. Znoder liknar filer och kataloger i ett filsystem. Zookeeper tillhandahåller ett enkelt API för att skapa, läsa, skriva och ta bort Znodes. Den tillhandahåller också mekanismer för att upptäcka ändringar av data som lagras i Znodes, såsom klockor och triggers. Znoder upprätthåller en statistisk struktur som inkluderar: versionsnummer, ACL, tidsstämpel, datalängd
Typer av Znoder :
- Uthållighet : Vid liv tills de explicit raderas.
- Kortlivad : Aktiv tills klientanslutningen är aktiv.
- Sekventiell : Antingen ihållande eller tillfällig.
Varför behöver vi ZooKeeper i Hadoop?
Zookeeper används för att hantera och koordinera noderna i ett Hadoop-kluster, inklusive NameNode, DataNode och ResourceManager. I ett Hadoop-kluster hjälper Zookeeper till att:
- Underhåll konfigurationsinformation: Zookeeper lagrar konfigurationsinformationen för Hadoop-klustret, inklusive platsen för NameNode, DataNode och ResourceManager.
- Hantera tillståndet för klustret: Zookeeper spårar tillståndet för noderna i Hadoop-klustret och kan användas för att upptäcka när en nod har misslyckats eller blivit otillgänglig.
- Koordinera distribuerade processer: Zookeeper kan användas för att koordinera distribuerade processer, såsom jobbschemaläggning och resursallokering, över noderna i ett Hadoop-kluster.
Zookeeper hjälper till att säkerställa tillgängligheten och tillförlitligheten för ett Hadoop-kluster genom att tillhandahålla en central samordningstjänst för noderna i klustret.
Hur fungerar ZooKeeper i Hadoop?
ZooKeeper fungerar som ett distribuerat filsystem och exponerar en enkel uppsättning API:er som gör det möjligt för klienter att läsa och skriva data till filsystemet. Den lagrar sina data i en trädliknande struktur som kallas en znode, som kan ses som en fil eller en katalog i ett traditionellt filsystem. ZooKeeper använder en konsensusalgoritm för att säkerställa att alla dess servrar har en konsekvent bild av data som lagras i Znoderna. Detta innebär att om en klient skriver data till en znod, kommer denna data att replikeras till alla andra servrar i ZooKeeper-ensemblen.
En viktig egenskap hos ZooKeeper är dess förmåga att stödja begreppet en klocka. En klocka låter en klient registrera sig för aviseringar när data som lagras i en znod ändras. Detta kan vara användbart för att övervaka ändringar av data som lagras i ZooKeeper och reagera på dessa ändringar i ett distribuerat system.
I Hadoop används ZooKeeper för en mängd olika ändamål, inklusive:
- Lagra konfigurationsinformation: ZooKeeper används för att lagra konfigurationsinformation som delas av flera Hadoop-komponenter. Till exempel kan den användas för att lagra platserna för NameNodes i ett Hadoop-kluster eller adresserna för JobTracker-noder.
- Tillhandahåller distribuerad synkronisering: ZooKeeper används för att koordinera aktiviteterna för olika Hadoop-komponenter och säkerställa att de fungerar tillsammans på ett konsekvent sätt. Till exempel kan den användas för att säkerställa att endast en NameNode är aktiv åt gången i ett Hadoop-kluster.
- Underhålla namngivning: ZooKeeper används för att upprätthålla en centraliserad namntjänst för Hadoop-komponenter. Detta kan vara användbart för att identifiera och lokalisera resurser i ett distribuerat system.
ZooKeeper är en viktig komponent i Hadoop och spelar en avgörande roll för att samordna aktiviteten för dess olika delkomponenter.
Läsa och skriva i Apache Zookeeper
ZooKeeper tillhandahåller ett enkelt och pålitligt gränssnitt för att läsa och skriva data. Data lagras i ett hierarkiskt namnutrymme, liknande ett filsystem, med noder som kallas znodes. Varje znod kan lagra data och ha barn-znoder. ZooKeeper-klienter kan läsa och skriva data till dessa znoder genom att använda metoderna getData() respektive setData(). Här är ett exempel på att läsa och skriva data med ZooKeeper Java API:
Java
// Connect to the ZooKeeper ensemble> ZooKeeper zk =>new> ZooKeeper(>'localhost:2181'>,>3000>,>null>);> // Write data to the znode '/myZnode'> String path =>'/myZnode'>;> String data =>'hello world'>;> zk.create(path, data.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);> // Read data from the znode '/myZnode'> byte>[] bytes = zk.getData(path,>false>,>null>);> String readData =>new> String(bytes);> // Prints 'hello world'> System.out.println(readData);> // Closing the connection> // to the ZooKeeper ensemble> zk.close();> |
>
>
Python3
from> kazoo.client>import> KazooClient> # Connect to ZooKeeper> zk>=> KazooClient(hosts>=>'localhost:2181'>)> zk.start()> # Create a node with some data> zk.ensure_path(>'/gfg_node'>)> zk.>set>(>'/gfg_node'>, b>'some_data'>)> # Read the data from the node> data, stat>=> zk.get(>'/gfg_node'>)> print>(data)> # Stop the connection to ZooKeeper> zk.stop()> |
>
linux $home
>
Session och klockor
Session
- Förfrågningar i en session utförs i FIFO-ordning.
- När sessionen är etablerad då sessions-id tilldelas kunden.
- Kunden skickar hjärtslag för att hålla sessionen giltig
- session timeout representeras vanligtvis i millisekunder
Klockor
- Klockor är mekanismer för klienter att få meddelanden om förändringar i djurskötaren
- Klienten kan titta medan han läser en viss znod.
- Znodändringar är modifieringar av data associerade med znoderna eller ändringar i znodens barn.
- Klockor utlöses endast en gång.
- Om sessionen har löpt ut tas även klockor bort.