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. Android动画

    [浅谈Android动画] 总共四种:Tween Animation变换动画.Frame Animation帧动画 Layout Animation布局动画.Property Animation 属性 ...

  2. 基于Deep Learning 的视频识别方法概览

    深度学习在最近十来年特别火,几乎是带动AI浪潮的最大贡献者.互联网视频在最近几年也特别火,短视频.视频直播等各种新型UGC模式牢牢抓住了用户的消费心里,成为互联网吸金的又一利器.当这两个火碰在一起,会 ...

  3. .Net组件程序设计之序列化

     .Net组件程序设计之序列化 自动序列化 本篇给大家讲解一下在.NET中的序列化,它的用处非常之多,特别是对于某种环境下保存某种状态是很好的方法,接下来就来看一下吧. Serializable属性 ...

  4. [ASP.NET MVC 大牛之路]02 - C#高级知识点概要(1) - 委托和事件

    在ASP.NET MVC 小牛之路系列中,前面用了一篇文章提了一下C#的一些知识点.照此,ASP.NET MVC 大牛之路系列也先给大家普及一下C#.NET中的高级知识点.每个知识点不太会过于详细,但 ...

  5. CI框架搭建

    CI 框架等移植到不同等环境十分方便,只要改很少等配置: 1.修改config.php 文件(修改这一个文件就可以跑通了): $config['base_url'] = 'http://127.0.0 ...

  6. 自动化安装SQL Server+SP就那么简单

    随着业务.企业规模的日益壮大,DB的数量也在不断增多,配置一台新增DB,从服务器的参数配置,磁盘阵列规划,DB安装部署,DB参数调优等等一列步骤下来,手工操作的效率变得越来越低,因为我负责的数据库近些 ...

  7. 使用sklearn做单机特征工程

    目录 1 特征工程是什么?2 数据预处理 2.1 无量纲化 2.1.1 标准化 2.1.2 区间缩放法 2.1.3 标准化与归一化的区别 2.2 对定量特征二值化 2.3 对定性特征哑编码 2.4 缺 ...

  8. IDE:IDEA Commit Changes Dialog local changes refresh

    IDEA提交代码,一直卡着不动,显示:Commit Changes Dialog local changes refresh 修改方法为: go to settings - version contr ...

  9. SQL注入

    @org.junit.Test public void testLogin() { CardDAO cd=new CardDAO(); if(cd.dengru("' or 1 = 1--& ...

  10. Android实现不重复启动APP的方法

    转载博客:http://blog.sina.cn/dpool/blog/s/blog_5de73d0b0102vpai.html?utm_source=bshare&utm_campaign= ...