Kafka检察Broker 的状态

打印 上一主题 下一主题

主题 820|帖子 820|积分 2460

要检察 Kafka 集群中 Broker 的数量,可以使用以下几种方法:


方法 1:通过 Kafka 自带命令检察

运行以下命令可以列出 Kafka 集群中的全部 Broker:
  1. kafka-broker-api-versions.sh --bootstrap-server <broker_address>
复制代码
输出示例
  1. 1, brokerId=0, host=broker0.example.com, port=9092
  2. 2, brokerId=1, host=broker1.example.com, port=9092
  3. 3, brokerId=2, host=broker2.example.com, port=9092
复制代码
根据列出的 Broker ID,计算 Broker 的总数量。

方法 2:通过 Zookeeper 检察(假如使用 Zookeeper)

假如 Kafka 使用 Zookeeper,可以直接查询 Zookeeper 获取 Broker 列表:

  • 登录到 Zookeeper CLI:
    1. zookeeper-shell.sh <zookeeper_address>
    复制代码
  • 查询 Broker 节点:
    1. ls /brokers/ids
    复制代码
    输出示例
    1. [0, 1, 2]
    复制代码
    结果表现有 3 个 Broker。

方法 3:通过 Kafka Admin API 检察

使用 Kafka Admin API 列出全部 Broker:
示例代码(Java 或 Python)

Java 示例
  1. import org.apache.kafka.clients.admin.AdminClient;
  2. import org.apache.kafka.clients.admin.AdminClientConfig;
  3. import java.util.Properties;
  4. public class KafkaBrokers {
  5.     public static void main(String[] args) {
  6.         Properties props = new Properties();
  7.         props.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "broker_address:9092");
  8.         try (AdminClient adminClient = AdminClient.create(props)) {
  9.             System.out.println("Brokers: " + adminClient.describeCluster().nodes().get().size());
  10.         } catch (Exception e) {
  11.             e.printStackTrace();
  12.         }
  13.     }
  14. }
复制代码
Python 示例
  1. from kafka.admin import KafkaAdminClient
  2. admin_client = KafkaAdminClient(bootstrap_servers="broker_address:9092")
  3. brokers = admin_client.describe_cluster().nodes
  4. print("Number of Brokers:", len(brokers))
复制代码

方法 4:通过监控工具(如 Kafka Manager 或 Prometheus)


  • 假如使用 Kafka Manager、Prometheus 或类似工具,可以直接检察 Broker 数量。
  • 例如,在 Prometheus 中,查询指标 kafka_server_kafkaserver_brokerstate 来检察各个 Broker 的状态。


方法 5:通过 Kafka Topic 命令查抄 Broker 信息

运行以下命令可以间接获取 Broker 信息:
  1. kafka-topics.sh --bootstrap-server <broker_address> --list
复制代码
通过列出的 Topic 形貌可以确认 Broker 数量。

以上方法中,使用 Kafka CLI 或 Zookeeper 是最快捷的方法。假如有其他需求或环境限定,请告知,我可以提供更适配的解决方案。
kafka_server_kafkaserver_brokerstate

kafka_server_kafkaserver_brokerstate 是 Kafka 集群中每个 Broker 状态的指标。通过此指标可以监控 Kafka Broker 的运行状态,通常用于 Prometheus 或其他监控工具中。

指标寄义



  • kafka_server_kafkaserver_brokerstate 用于标识 Kafka Broker 的当前状态,其值通常是一个数字。
  • 每个 Broker 的状态由数字表现,寄义如下:
状态名称说明0NotRunningBroker 未运行或已制止。1StartingBroker 正在启动,但尚未完全启动完成。2RecoveringFromUncleanShutdownBroker 正在从非正常关闭状态中恢复。3RunningAsBrokerBroker 正常运行,且已加入集群并提供服务。4PendingControlledShutdownBroker 正在等待受控关闭(大概因集群重平衡或手动制止)。
使用场景


  • 检测 Broker 状态:

    • 值为 3 表现正常状态。假如某个 Broker 的状态值不是 3,大概需要进行排查。

  • 监控集群康健:

    • 通过连续监控此指标,可以快速检测集群中是否有 Broker 处于异常状态,例如未运行、正在恢复等。

  • 触发告警:

    • 设置告警规则,如:

      • kafka_server_kafkaserver_brokerstate != 3
        时触发告警。
      • 统计状态为 3 的 Broker 数量,假如少于预期的 Broker 数量,则触发集群康健告警。



Prometheus 示例查询


  • 单个 Broker 状态:
    1. kafka_server_kafkaserver_brokerstate{instance="broker1:9092"}
    复制代码
  • 集群中非正常状态的 Broker:
    1. kafka_server_kafkaserver_brokerstate != 3
    复制代码
  • 正常运行的 Broker 数量:
    1. count(kafka_server_kafkaserver_brokerstate == 3)
    复制代码

问题排查



  • 状态值为 0(NotRunning):

    • 确认 Broker 进程是否已启动。
    • 查抄 Kafka 日志文件(server.log)是否存在异常。
    • 查抄服务器的资源(CPU、内存、磁盘)是否不敷。

  • 状态值为 2(RecoveringFromUncleanShutdown):

    • 说明 Broker 之前大概因为非正常关闭(例如断电或强制杀掉进程)而进入恢复状态。
    • 查抄 recovery.dirty.log.start.offset 和相关日志恢复进度。

  • 状态值为 4(PendingControlledShutdown):

    • 说明 Broker 正在执行受控关闭操纵,大概是因为手动制止 Broker 或触发了重平衡。
    • 确认是否是预期的关闭操纵。


假如你在具体使用中遇到问题,可以提供更多上下文,我可以资助分析具体场景!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

农民

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表