Guide to Check if Apache Kafka Server Is Running – 检查Apache Kafka服务器是否正在运行的指南

最后修改: 2022年 8月 18日

1. Overview


Client applications that use Apache Kafka would usually fall into either of the two categories, namely producers and consumers. Both producers and consumers require that the underlying Kafka server is up and running before they can start their job of producing and consuming, respectively.

使用Apache Kafka的客户端应用程序通常属于两类中的任何一类,即生产者和消费者。生产者和消费者都需要底层的Kafka服务器启动并运行,然后才能分别开始生产和消费的工作

In this article, we’ll learn a few strategies to determine if the Kafka server is running.


2. Using Zookeeper Commands


One of the quickest ways to find out if there are active brokers is by using Zookeeper’s dump command. The dump command is one of the 4LW commands available to administer a Zookeeper server.


Let’s go ahead and use the nc command to send the dump command over the Zookeeper server that’s listening at the 2181 port:


$ echo dump | nc localhost 2181 | grep -i broker | xargs

On executing the command, we see a list of ephemeral broker ids registered with the Zookeeper server. If no ephemeral ids exist, then none of the broker nodes is running.


Further, it’s important to note that the dump command needs to be explicitly allowed in the configuration usually available within either or zoo.cfg configuration file:



Alternatively, we can also use Zookeeper APIs to find the list of active brokers.

另外,我们也可以使用Zookeeper APIs来查找活动经纪人的列表

3. Using Apache Kafka’s AdminClient

3.使用Apache Kafka的AdminClient

If our producers or consumers are Java applications, then we can use Apache Kafka’s AdminClient class to find out if the Kafka server is up or not.

如果我们的生产者或消费者是Java应用程序,那么我们可以使用Apache Kafka的AdminClient类来了解Kafka服务器是否已经启动

Let’s define the KafkaAdminClient class to wrap an instance of the AdminClient class so that we can quickly test our code:


public class KafkaAdminClient {
    private final AdminClient client;

    public KafkaAdminClient(String bootstrap) {
        Properties props = new Properties();
        props.put("bootstrap.servers", bootstrap);
        props.put("", 3000);
        props.put("", 5000);

        this.client = AdminClient.create(props);

Next, let’s define the verifyConnection() method in the KafkaAdminClient class to verify if the client can connect with running broker servers:


public boolean verifyConnection() throws ExecutionException, InterruptedException {
    Collection<Node> nodes = this.client.describeCluster()
    return nodes != null && nodes.size() > 0;

Finally, let’s put our code to test by connecting to a running Kafka cluster:


void givenKafkaIsRunning_whenCheckedForConnection_thenConnectionIsVerified() throws Exception {
    boolean alive = kafkaAdminClient.verifyConnection();

4. Using the kcat Utility


We can use the kcat (formerly kafkacat) command to find out if there are running Kafka broker nodes. To do so, let’s use the -L option to show the metadata of an existing topic:


$ kcat -b localhost:9092 -t demo-topic -L
Metadata for demo-topic (from broker -1: localhost:9092/bootstrap):
 1 brokers:
  broker 0 at (controller)
 1 topics:
  topic "demo-topic" with 1 partitions:
    partition 0, leader 0, replicas: 0, isrs: 0

Next, let’s execute the same command when the broker nodes are down:


$ kcat -b localhost:9092 -t demo-topic -L -m 1
%3|1660579562.937|FAIL|rdkafka#producer-1| [thrd:localhost:9092/bootstrap]: localhost:9092/bootstrap: Connect to ipv4# failed: Connection refused (after 1ms in state CONNECT)
% ERROR: Failed to acquire metadata: Local: Broker transport failure (Are the brokers reachable? Also try increasing the metadata timeout with -m <timeout>?)

For this case, we get the “Connection refused” error as there are no running broker nodes. Additionally, we must note that we were able to fail fast by restricting the request timeout to 1 second with the -m option.

在这种情况下,我们得到了 “连接拒绝 “的错误,因为没有正在运行的代理节点。此外,我们必须注意到,通过使用-m选项将请求超时限制为1秒,我们能够快速失败。

5. Using UI Tools


We can rely on UI tools such as Offset Explorer for experimental POC projects that don’t require automated checks. However, this approach is not recommended if we want to verify the state of broker nodes for enterprise-grade Kafka clients.

对于不需要自动检查的实验性POC项目,我们可以依靠诸如Offset Explorer等UI工具。但是,如果我们想为企业级Kafka客户端验证代理节点的状态,则不建议使用这种方法。

Let’s use the Offset Explorer to connect to the Kafka cluster using the Zookeeper host and port details:Check Connection Using Offset Explorer

让我们使用偏移量资源管理器,使用Zookeeper主机和端口详细信息连接到Kafka集群:Check Connection Using Offset Explorer

We can see the list of running brokers on the left side pane. That’s it. We got it at a click of a button.


6. Conclusion


In this tutorial, we explored a few command-line approaches using Zookeeper commands, Apache’s AdminClient, and the kcat utility, followed by a UI-based approach to determine whether the Kafka server is up or not.


As always, the complete source code for the tutorial is available over on GitHub.