admin包定义了命令行的一些实现

一、AdminOperationException.scala
一个异常类,表示执行admin命令时候抛出的异常
二、AdminUtils.scala
admin一些常用工具方法:
1. assignReplicasToBrokers:负责分配副本到不同的broker上。主要有两个目标:① 尽可能均匀地在不同的broker上分配副本;② 对于被分配到同一个broker上的分区而言,它们的其他副本会尽可能地分配到不同的broker上。如果要达到这些目标,需要①分配每个分区的I一个副本时从broker列表中的一个随机位置开始按照round-bin方式分配;②使用一个递增位移来分配剩下的replica分配。需要注意的是,replica的factor不能大于broker个数
2. addPartitions:用于为一个已有的topic增加分区
3. deleteTopic:删除topic,就是在zookeeper上创建一个/admin/delete_topics节点下创建一个子节点
4. topicExists:判断一个topic是否存在
5. createTopic:先分配副本,然后在zookeeper上对应的路径上创建topic
6. changeTopicConfig:更新一个已有topic配置信息并创建一个变更消息通知,这样这个变更可以传给其他broker
7. fetchTopicConfig:从zookeeper中读取topic的配置信息,具体路径为/config/topics/[topic]
三、PreferredReplicaLeaderElectionCommand.scala
    该类将每个分区的leader移动到preferred replica上,主要用于在各个broker上重新再平衡leadership之用。既可以作为命令直接使用,也可以在指定属性auto.leader.rebalance.enable=true时由Kafka自动调用。默认是300秒自动检查一次。PreferredReplicaLeaderElectionCommand object的parsePreferredReplicaElectionData和writePreferredReplicaElectionData方法分别解析和构造zookeeper路径下/admin/preferred_replica_election节点的json数据串。
    PreferredReplicaLeaderElectionCommaind class定义了两个方法:
1. validatePartition:验证分区合法性,主要检查分区是否存在。
2. moveLeaderToPreferredReplica:将领导权转到preferred副本上。具体逻辑如下:
  • 过滤掉那些不存在的分区
  • 构造特定的JSON串更新到zookeeper的/admin/preferred_replica_election节点中
  • 如果启用了自动balance,会有一个后台线程定期地监听该节点数据的变化
四、ReassignPartitionsCommand.scala
    向Kafka集群中添加新的服务器很容易,指定好唯一的broker id并启动起来就好了,但这些新加的服务器并不会被自动地分配新的数据分区,因此需要手动地将一部分数据搬到新加的服务器上。该类就是为实现这一目的。核心方法是reassignPartitions,逻辑就是在zookeeper的/admin_reassign_partitions下创建对应的数据记录,controller会注册一个zookeeper监听器监听该节点的数据变化。
五、TopicCommand.scala
一个可运行object,用于创建、删除、描述或变更topic:
1. createTopic:创建topic,值得注意的是,通过配置replica-assignment可以手动地分配哪些分区落在哪些broker上。如果不指定的话,Kafka自动帮你做分配的事情,然后创建topic
2. alterTopic: 修改topic
3. listTopic:列出当前集群中所有topic
4. deleteTopic:删除一个topic。其实就是标记该topic已经可以被删除
5. describeTopic:主要是获取该topic的分区信息、副本信息、leader 副本以及ISR

【原创】kafka admin源代码分析的更多相关文章

  1. 【原创】kafka controller源代码分析(一)

    Kafka集群中的一个broker会被作为controller负责管理分区和副本的状态以及执行类似于重分配分区之类的管理任务.如果当前的controller失败了,会从剩下的broker中选出新的co ...

  2. 【原创】kafka consumer源代码分析

    顾名思义,就是kafka的consumer api包. 一.ConsumerConfig.scala Kafka consumer的配置类,除了一些默认值常量及验证参数的方法之外,就是consumer ...

  3. 【原创】kafka server源代码分析(一)

    这个是Kafka server的核心包,里面的类也很多,我们还是一个一个分析 一.BrokerStates.scala 定义了目前一个kafka broker的7中状态 ——  1. NotRunni ...

  4. 【原创】kafka controller源代码分析(二)

    四.TopicDeletionManager.scala 管理topic删除的状态机,具体逻辑如下: TopicCommand发送topic删除命令,在zk的/admin/delete_topics目 ...

  5. 【原创】kafka producer源代码分析

        Kafka 0.8.2引入了一个用Java写的producer.下一个版本还会引入一个对等的Java版本的consumer.新的API旨在取代老的使用Scala编写的客户端API,但为了兼容性 ...

  6. 【原创】kafka client源代码分析

    该包下只有一个文件:ClientUtils.scala.它是一个object,里面封装了各种client(包括producer,consumer或admin)可能会用到的方法: 1. fetchTop ...

  7. 【原创】kafka server源代码分析(二)

    十四.AbstractFetcherManager.scala 该scala定义了两个case类和一个抽象类.两个case类很简单: 1. BrokerAndFectherId:封装了一个broker ...

  8. 【原创】k8s源代码分析-----kubelet(1)主要流程

    本人空间链接http://user.qzone.qq.com/29185807/blog/1460015727 源代码为k8s v1.1.1稳定版本号 kubelet代码比較复杂.主要是由于其担负的任 ...

  9. 【原创】k8s源代码分析-----kubelet(8)pod管理

    本文QQ空间链接:http://user.qzone.qq.com/29185807/blog/1460540474 本文csdn博客链接:http://blog.csdn.net/screscent ...

随机推荐

  1. iOS开发中手机号码和价格金额有效性判断及特殊字符的限制

    在实际开发过程中,经常会遇到些不能让用户随便地输入手机号码,对输入的手机号码的正确判断:有些输入框只能输入数字,不能输入字母或特殊字符:还有些如价格金额之类的就只能输入数字和小数点且小数点后面保留两位 ...

  2. Logging with NLog

    相比较log4net, 我更喜欢NLog, 因为NLog 更简单, 而且配置选项也更加的清楚,可能是因为log4net 是从log4j 移植过来的一个原因吧,总感觉有很多的java 成分在. 要使用N ...

  3. Python黑帽编程2.2 数值类型

    Python黑帽编程2.2  数值类型 数值类型,说白了就是处理各种各样的数字,Python中的数值类型包括整型.长整型.布尔.双精度浮点.十进制浮点和复数,这些类型在很多方面与传统的C类型有很大的区 ...

  4. HaProxy+Keepalived+Mycat高可用群集配置

    概述 本章节主要介绍配置HaProxy+Keepalived高可用群集,Mycat的配置就不在这里做介绍,可以参考我前面写的几篇关于Mycat的文章. 部署图: 配置  HaProxy安装 181和1 ...

  5. IE浏览器打开chorme浏览器,如何打开其他浏览器

    看到这个标题是否感觉奇怪,为什么要用IE浏览器打开chorme或者火狐浏览器等,这个功能从开发者来说不是一个好的需求,但确实是真实存在的,有用公司的背景历史比较复杂,而且公司有过长期的开发历史,这导致 ...

  6. Underscore.js使用

    Underscore 是一个 JavaScript 工具库,它提供了一整套函数式编程的实用功能,但是没有扩展任何 JavaScript 内置对象. 他解决了这个问题:"如果我面对一个空白的 ...

  7. Android-找到包下面所有的类

    Android 利用反射找到包下面所有的类 Android下其实有一个DexFile的东西,利用它我们可以很好的找到包下面所有的类 什么是DexFile? 官方的说明是这样的: Manipulates ...

  8. Base64编码原理分析

    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,在了解Base64编码之前,先了解几个基本概念:位.字节. 位:"位(bit)"是计算机中最小的数据单位.每一位 ...

  9. mybatis的一些小总结

    好长时间没用mybatis了,现在项目忽然用mybatis,用的过程中出现了些问题,虽然解决了,不过这花的时间有些长了.总结用的过程中出现的一些问题 1.mapper.xml 之前一直用的自动生成,现 ...

  10. struts.xml的编辑

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "- ...