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

该包下只有一个文件:ClientUtils.scala.它是一个object,里面封装了各种client(包括producer,consumer或admin)可能会用到的方法: 1. fetchTopicMetadata(producer版本): producer client会调用该方法来发送一个TopicMetadata请求,最后返回该请求对应的response.具体逻辑如下: 构造一个TopicMetadataRequest请求 将给定的broker列表按照随机顺序打散以防止大量的请求被路…
顾名思义,就是kafka的consumer api包. 一.ConsumerConfig.scala Kafka consumer的配置类,除了一些默认值常量及验证参数的方法之外,就是consumer的配置参数了,比如group.id, consumer.id等,详细列表见官网. 二.ConsumerIterator.scala     KafkaStream的迭代器类,当stream底层的阻塞队列为空时该iterator会置于阻塞状态.这个迭代器还提供了一个shutdownCommand对象可…
    Kafka 0.8.2引入了一个用Java写的producer.下一个版本还会引入一个对等的Java版本的consumer.新的API旨在取代老的使用Scala编写的客户端API,但为了兼容性的考虑两版API还要同时存在一段时间.另外,新版的API可以打成独立的jar包,而Scala版本的不行.     Kafka官网是鼓励用户使用java版的producer的,而kafka.core.producer包实际上是老版的实现.这个包中还包括一个async包,应该是实现异步发送的,与之平行的…
十四.AbstractFetcherManager.scala 该scala定义了两个case类和一个抽象类.两个case类很简单: 1. BrokerAndFectherId:封装了一个broker和一个fetcher的数据结构 2. BrokerAndInitialOffset:封装了broker和初始位移的一个数据结构 该scala中最核心的还是那个抽象类:AbstractFetcherManager.它维护了一个获取线程的map,主要保存broker id + fetcher id对应的…
这个是Kafka server的核心包,里面的类也很多,我们还是一个一个分析 一.BrokerStates.scala 定义了目前一个kafka broker的7中状态 ——  1. NotRunning:未运行 2. Starting:启动中 3. RecoveringFromUncleanShutdown:从上次异常恢复中 4. RunningAsBroker:已启动 5. RunningAsController:作为Controller运行 6. PendingControlledShut…
Kafka集群中的一个broker会被作为controller负责管理分区和副本的状态以及执行类似于重分配分区之类的管理任务.如果当前的controller失败了,会从剩下的broker中选出新的controller. 一.PartitionLeaderSelector.scala 顾名思义就是为分区选举出leader broker,该trait只定义了一个方法selectLeader,接收一个TopicAndPartition对象和一个LeaderAndIsr对象.TopicAndPartit…
admin包定义了命令行的一些实现 一.AdminOperationException.scala 一个异常类,表示执行admin命令时候抛出的异常 二.AdminUtils.scala admin一些常用工具方法: 1. assignReplicasToBrokers:负责分配副本到不同的broker上.主要有两个目标:① 尽可能均匀地在不同的broker上分配副本:② 对于被分配到同一个broker上的分区而言,它们的其他副本会尽可能地分配到不同的broker上.如果要达到这些目标,需要①分…
四.TopicDeletionManager.scala 管理topic删除的状态机,具体逻辑如下: TopicCommand发送topic删除命令,在zk的/admin/delete_topics目录下创建topic节点 controller会监听该zk目录下任何节点的变更并为对应的topic开启删除操作 controller开启一个后台线程处理topic的删除.使用该线程主要为了以后能够增加TTL(time to live)的特性.无论何时开启或重启topic删除操作时都会通知该线程.当前,…
本文QQ空间链接:http://user.qzone.qq.com/29185807/blog/1460540474 本文csdn博客链接:http://blog.csdn.net/screscent/article/details/51145382 源代码为k8s v1.1.1稳定版本号 3.Pod管理 前面的7篇文章都是为这篇文章做准备的.最终要进入到正题中,pod的管理 3.1 pod清单 1.參数 代码在k8s.io\kubernetes\cmd\kubelet\app中 结构体变量 t…
本人空间链接http://user.qzone.qq.com/29185807/blog/1460015727 源代码为k8s v1.1.1稳定版本号 kubelet代码比較复杂.主要是由于其担负的任务比較多.以下我们将慢慢的分析 一.主要流程 1.main入口 k8s.io\kubernetes\cmd\kubelet\kubelet.go 依然是这样的风格的main 继续看app NewKubeletServer 主要是一些參数的初始化 然后在后面也有一些flag參数的获取,就不贴图了. 2…