Kafka的broker核心代码设计

主要的核心类如下:

KafkaServer:

根据相关的上下文,创建KafkaServer对象,负责启动broker对象

启动过程

zkClient 初始化=>logManager  start()=> socketServer
start()=>requestHandlerPool 初始化=>replicaManager start() =>
kafkaController start() =>topicConfigManager start() =>
kafkaHealthcheck start()

Broker的核心IO处理在requestHandlerPool  这里面

zkClient初始化

利用第三方的zkclient初始与zk之间的链接,zkclient负责与zk的connection,session的维护。

logManager 初始化

所有的读写请求都将实例化各自的log实例对象。同时,后台的log线程将负责维护partitions与log segment。

socketServer初始化

NIO socket server

*   1 Acceptor thread 负责接收请求,并转给Processor threads 进行处理

*   N Processor threads 负责每个socket请求的实际处理

M Handler threads 负责事件机制催每个Processor 的请求与product请求的消息回复。

replicaManager初始化

负责该broker的partition副本的管理工作

kafkaController初始化

负责该broker的Controller状态的管理工作

topicConfigManager初始化

负责该broker的topic的状态管理工作

kafkaHealthcheck初始化

负责该broker的状态在zk的维护工作

requestHandlerPool初始化

核心IO处理中心,通过事件驱动模式进行处理

维护2个队列,

一个是request队列

一个是response队列

通过,KafkaApis类匹配handler的事件类型,进行相关的事件的处理。请求的事件类型共有ProduceKey, FetchKey,
OffsetsKey, MetadataKey, LeaderAndIsrKey, StopReplicaKey,
UpdateMetadataKey, ControlledShutdownKey, OffsetCommitKey,
OffsetFetchKey

时间: 2024-10-19 14:22:53

Kafka的broker核心代码设计的相关文章

Kafka在controller的代码设计

主要的核心类如下: controller : 根据相关的上下文,创建KafkaController对象,引入多个监听器监听broker,topic,partition以及副本的状态变化. ZookeeperLeaderElector: 主要负责选举当前broker为lead的过程,同时,如果出现异常情况转移lead选举权. ReplicaStateMachine: 主要负责broker的副本状态变化跟踪与重新分配的工作 PartitionStateMachine: 主要负责topic与parti

深度揭密轮播插件核心代码的实现过程

轮播效果在网页中用的很多,swiper是其中最有代表性的作品,它支持水平和竖直滑动,还有反弹效果,兼容移动端和pc端.当然代码量也是相当大的,单是js就有5300行(3.4.0的未缩版本),若不考虑代码利用率和加载速度直接就用了,在移动端比较慎重,比如京东(m.jd.com)的轮播就没有用它,而是自己实现了类似的功能,代码量很少的样子(格式化之后看起来二三百行左右的样子).那么这个功能如果自己来实现,要怎么做呢? 准备工作 1. 准备几张图片(我这里放了四张) 2. 搭建目录结构(html+cs

WPF换肤之四:界面设计和代码设计分离

原文:WPF换肤之四:界面设计和代码设计分离 说起WPF来,除了总所周知的图形处理核心的变化外,和Winform比起来,还有一个巨大的变革,那就是真正意义上做到了界面设计和代码设计的分离.这样可以让美工和程序分开进行,而不是糅合在一块,这样做的好处当然也是显而易见的:提高了开发效率. 原先的设计方式 在我们之前设计的代码中,每当添加一个新的窗体的时候,我总是会在这个新的窗体的XAML文件中加入如下的代码,以便使样式能够应用上去: <Window x:Class="WpfApplicatio

【转】Java数字抽奖游戏核心代码

1. [代码][Java]代码    package com.luiszhang.test; import java.util.Arrays; /** * NumberLotteryGame * 一个简单的数字彩票游戏类 * @author LuisZhang * 参考了core java 8th中的例3-7的设计思想 */public class NumberLotteryGame {    private int gamesNumber;    // 生成游戏的数量,为以后多线程扩展做考虑 

在线捉鬼游戏开发之三 - 业务对象核心代码编写与单元测试(游戏开始:抽题、分角色、开启鬼讨论模式)

-----------回顾分割线----------- 系列之一讲述了游戏规则,系列之二讲述了旧版的前台效果.代码中不好的地方.以及新版的改进核心,此篇开始就是新版代码编写全过程.此系列旨在开发类似“谁是卧底+杀人游戏”的捉鬼游戏在线版,记录从分析游戏开始的开发全过程,通过此项目让自己熟悉面向对象的SOLID原则,提高对设计模式.重构的理解. 索引目录: 0. 索引(持续更新中) 1. 游戏流程介绍与技术选用 2. 设计业务对象与对象职责划分(1)(图解旧版本) 3. 设计业务对象与对象职责划分

Feedforward Neural Network Language Model(NNLM)c++核心代码实现

本文来自CSDN博客,转载请注明出处:http://blog.csdn.net/a635661820/article/details/44730507 参考文献: A Neural Probabilistic Language Model 参照我另一篇NNLM学习介绍的博客, 这一篇是对NNLM的简要实现, 自己简化了一些,输入层到输出层没有连接(加上直连边的真在原论文中没有明显的提高),并且没有并行算法.下面贴上自己的一些核心代码.总体来说,我用了c++面向对象来设计该算法,大概分为6个类,如

易于跨引擎和测试的游戏客户端代码设计方法

一.前言 本文讲的设计方法,不涉及算法.优化.接口讲解等技术介绍. 该设计方法基于MVC设计模式(主要是抽出控制类),而且本文主要面向游戏开发的一些问题. 该设计方法样例由python编写,但是实际上都是伪代码,有一点代码基础的问基本看得懂. 该设计方法由师兄教授,在项目使用过之后,感觉确实不错,特地提取一个方法论出来以记录. 二.MVC简介 在游戏开发中,目前用到架构主要分为MVC和ESC架构(这部分如有异议欢迎指正,有其他架构也希望能提出,博主也可以学习). 在一个功能复杂的模块中,通常会有

高稳定、低延时、高并发RTMP播放器流媒体音视频播放器EasyPlayer-RTMP-iOS器如何将核心代码打包成静态库

背景分析 RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写.该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种.RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信.支持该协议的软件包括Adobe Media Server/Ultrant Media Server/red5等. EasyPlayer-RTMP

Libgdx: android单机斗地主支持局域网wifi联网的网络模块核心代码

这个作品是我最近写的,结合我的毕业设计的通信模块和之前的单机版斗地主.我已经上架到豌豆荚了,贴了点广告,看看能不能赚点茶钱.可是一点也不乐观.因此我想分享给大家源码.只要不用于商业. 下面先贴网络模块的核心代码,第一次写这种逻辑用的udp, 经验不够,没有写的那么好看. 这里是我上架的apk,大家下载来试试也无妨: 地址 http://www.wandoujia.com/apps/com.hj.joker package com.hj.net; import java.io.ByteArrayI