Hi,
Using the golang library for zookeeper from here you can get very easily the nodes that are registered in the cluster controller node.
In order to install this module, beside needing to setup the GOPATH you will have also to install packages from linux distro repo called:
bzr, gcc, libzookeeper-mt-dev
Once all of this is install just go get launchpad.net/gozk 🙂
And here is the small example:
package main
import (
"launchpad.net/gozk"
"fmt"
"strings"
)
func main() {
GetResource()
}
func GetResource() {
zk, session, err := zookeeper.Dial("localhost:2181", 5e9)
if err != nil {
fmt. Println("Couldn't connect")
}
defer zk.Close()
event := <-session
if event.State != zookeeper.STATE_CONNECTED {
fmt.Println("Couldn't connect")
}
GetBrokers(zk)
GetController(zk)
}
func GetController(connection *zookeeper.Conn) {
rs ,_ , err := connection.Get("/controller")
if err != nil {
fmt. Println("Couldn't get the resource")
}
controller := strings. Split(rs,",")
// fmt.Println(controller[1])
id := strings.Split(controller[1],":")
fmt. Printf("\nCluster controller is: %s\n",id[1])
}
func GetBrokers(connection *zookeeper.Conn) {
trs ,_, err := connection.Children("/brokers/ids")
if err != nil {
fmt. Println("Couldn't get the resource")
}
fmt.Printf("List of brokers: ")
for _, value := range trs {
fmt.Printf(" %s",value)
}
}
Yeah, i know it's not the most elegant but it works:
go run zootest.go List of brokers: 1011 1009 1001 Cluster controller is: 1011
That would be all.
Tnx and cheers!