kafka源码解析之十三KafkaHealthcheck
2016-04-11 13:41
330 查看
主要是在zk的/brokers/[0...N] 路径上建立该Broker的信息,并且该节点是ZK中的Ephemeral Node,当此Broker离线的时候,zk上对应的节点也就消失了,那么其它Broker可以及时发现该Broker的异常。class KafkaHealthcheck(private val brokerId: Int, private val advertisedHost: String, private val advertisedPort: Int, private val zkSessionTimeoutMs: Int, private val zkClient: ZkClient) extends Logging { val brokerIdPath = ZkUtils.BrokerIdsPath + "/" + brokerId val sessionExpireListener = new SessionExpireListener def startup() { zkClient.subscribeStateChanges(sessionExpireListener) register() } def shutdown() { zkClient.unsubscribeStateChanges(sessionExpireListener) ZkUtils.deregisterBrokerInZk(zkClient, brokerId) } def register() { val advertisedHostName = if(advertisedHost == null || advertisedHost.trim.isEmpty) InetAddress.getLocalHost.getCanonicalHostName else advertisedHost val jmxPort = System.getProperty("com.sun.management.jmxremote.port", "-1").toInt //在/brokers/ids/路径下存储broker的基本消息,例如端口号,ip地址,时间戳等,以上内容均在Ephemeral Node上,只要该broker和zk失去链接,则zk对应目录的内容被清空 ZkUtils.registerBrokerInZk(zkClient, brokerId, advertisedHostName, advertisedPort, zkSessionTimeoutMs, jmxPort) } //该SessionExpireListener的作用就是重建broker的节点,防止短暂的和zk失去链接之后,该broker对应的节点也全部丢失了 class SessionExpireListener() extends IZkStateListener { @throws(classOf[Exception]) def handleStateChanged(state: KeeperState) { // do nothing, since zkclient will do reconnect for us. } 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)) } } }
相关文章推荐
- 控制符号的可见性
- 求集合的全排列
- 少女花海自拍撞亡:自拍PK火车速度,没有赢家
- UVM:8.4.3 用factory 机制创建实例的接口
- 前端学习笔录--1--HTML篇
- java project获取项目配置文件内容
- 使用apktool工具遇到could not decode arsc file的解决办法
- RelativeLayout各个属性
- @import导入外部样式表与link链入外部样式表的区别
- C# 类型实例化的语法糖--unity下诡异结果
- C语言实现队循FIFO缓冲区-《30天自制操作系统》
- 《java编程思想》14章类型信息 读书笔记
- tableView中deselectRowAtIndexPath的作用 TableView didSelectRowAtIndexPath 不执行
- php安装了扩展提示undefined
- String的总结和应用
- 第三章:WORKING WITH TEXT DATA
- iOS项目结构目录参考图示
- 一个后台开发人员的应额外具备的能力
- 第七周项目三 用多文件组织多个类的程序
- 最全的android模拟器使用--ADB命令的介绍和解析