kafka源码分析之kafkaserver的健康状态管理

KafkaHealthcheck

这个组件主要用于处理kafka server启动后与zk的通信,kafka启动后,会向zk注册一个短命的节点,kafkaController会接收到这个kafka broker的信息,并监听broker的加入与销毁。

kafkaHealthcheck new KafkaHealthcheck(config.brokerIdlistenerszkUtils)
kafkaHealthcheck.startup()

 

实例生成时:

这个组件主要用于在/brokers/ids/brokerid下注册短命节点。

val brokerIdPath ZkUtils.BrokerIdsPath + "/" + brokerId

用于监听节点过期。
val sessionExpireListener new SessionExpireListener

 

执行startup操作的流程:

def startup() {

向zk中注册监听器,用于监听session过期。
  zkUtils.zkClient.subscribeStateChanges(sessionExpireListener)
  register()
}

 

/**
 * Register this broker as "alive" in zookeeper
 */
def register() {
  val jmxPort = System.getProperty("com.sun.management.jmxremote.port"

         "-1").toInt
  val updatedEndpoints = advertisedEndpoints.mapValues(endpoint =>
    if (endpoint.host == null || endpoint.host.trim.isEmpty)
      EndPoint(InetAddress.getLocalHost.getCanonicalHostNameendpoint.port

            endpoint.protocolType)
    else
      
endpoint
  )

 

 

向zk中注册这个broker的连接信息,包含节点的ip,协议,端口,jmx端口。

在kafkaController中,通过BrokerChangeListener监听来对broker的下线与下线进行处理。
  
val plaintextEndpoint = updatedEndpoints.getOrElse(SecurityProtocol.PLAINTEXT

       new EndPoint(null,-1,null))
  zkUtils.registerBrokerInZk(brokerIdplaintextEndpoint.host

      plaintextEndpoint.portupdatedEndpointsjmxPort)
}

 

关于session的监听实例SessionExpireListener

zksession被创建成功时,通过registerbroker对应的zk节点中注册这个节点的连接信息。

def handleNewSession() {
  info("re-registering broker info in ZK for broker " + brokerId)
  register()
  info("done re-registering broker")
  info("Subscribing to %s path to watch for new topics"

      .format(ZkUtils.BrokerTopicsPath))
}

你可能感兴趣的:(kafka0.9.0源码分析)