add broker-list to help build metadata.broker.list strings; change clj-kafka.zk/brokers to return an empty list if zookeeper is available but no kafka brokers are registered.

This commit is contained in:
Paul Ingles 2014-04-15 13:54:29 +01:00
parent 157ca25220
commit 8acfb69df6
3 changed files with 21 additions and 8 deletions

View file

@ -1,4 +1,4 @@
(defproject clj-kafka/clj-kafka "0.2.0-0.8"
(defproject clj-kafka/clj-kafka "0.2.1-0.8"
:min-lein-version "2.0.0"
:dependencies [[org.clojure/clojure "1.5.1"]
[zookeeper-clj "0.9.3"]

View file

@ -1,19 +1,29 @@
(ns clj-kafka.zk
(:use [clojure.data.json :only (read-str)]
[clj-kafka.core :only (with-resource)])
(:require [zookeeper :as zk]))
(:require [zookeeper :as zk]
[clojure.string :as s]))
(defn brokers
"Get brokers from zookeeper"
[m]
(with-resource [z (zk/connect (get m "zookeeper.connect"))]
zk/close
(doall (map (comp #(read-str % :key-fn keyword)
#(String. ^bytes %)
:data
#(zk/data z (str "/brokers/ids/" %)))
(zk/children z "/brokers/ids")))))
(if-let [broker-ids (zk/children z "/brokers/ids")]
(doall (map (comp #(read-str % :key-fn keyword)
#(String. ^bytes %)
:data
#(zk/data z (str "/brokers/ids/" %)))
broker-ids))
'())))
(defn broker-list
"Returns a comma separated list of Kafka brokers, as returned from clj-kafka.zk/brokers.
e.g.: (broker-list (brokers {\"zookeeper.connect\" \"127.0.0.1:2181\"})) "
[brokers]
(when (seq brokers)
(s/join "," (map (fn [{:keys [host port]}] (str host ":" port)) brokers))))
(defn- controller-broker-id
[^String zk-data]
(get (read-str zk-data) "brokerid"))

View file

@ -12,6 +12,9 @@
(brokers zk-connect))
(expect count 1))
(expect nil (broker-list []))
(expect "localhost:2181" (broker-list [{:host "localhost" :port "2181"}]))
(given (with-test-broker config
(first (brokers zk-connect)))
(expect :host "localhost"