如何判断kafka集群是否可用

如何判断kafka集群是否可用

和判断zookeeper集群是否可用一样,也没有更好的把办法,下面的办法也是由client发起一个基本的kafka命令,看看命令的执行结果是否正常。
这个例子采用的命令是list所有的topic,看看命令能否执行成功。

下面是golang的客户端使用github.com/Shopify/sarama库的例子。

package main

import (
    "fmt"
    "log"
    "time"
    "flag"
    "strings"

    "github.com/Shopify/sarama"
)

var (
    kafka       string    // "kafka1.example.com:9092,kafka2.example.com:9092,kafka3.example.com:9092
)

func main() {
    flag.StringVar(&kafka,      "kafka",        "localhost:9092",   "kafka endpoints")
    flag.Parse()

    if checkKafka(kafka) {
        log.Printf("Check kafka status success\n")
    } else {
        log.Printf("Check kafka status failure\n")
    }
}

func checkKafka(string endpoints) bool {
    config := sarama.NewConfig()
    
    client, err := sarama.NewClient(strings.Split(endpoints, ","), config)
    if err != nil {
        log.Printf("ERROR: Unable to create kafka client, err=[%v]", err)
        return false
    }
    defer client.Close()

    topics, err := client.Topics()
    if err != nil {
        log.Printf("ERROR: Unable to list kafka topics, err=[%v]", err)
        return false
    }
    
    log.Printf("Get total topics count=[%d]\n", len(topics))
    for i, topic := range topics {
        lastoffset, err := client.GetOffset(topic, 0, sarama.OffsetNewest)
        if err != nil {
            log.Printf("\tTopic[%d]: [%s] offset error: %v\n", i, topic, err)
            continue
        }

        log.Printf("\tTopic[%d]: [%s] offset: %v\n", i, topic, lastoffset)
    }

    return true
}

你可能感兴趣的:(如何判断kafka集群是否可用)