kafka源码解析之八:Broker分析

举报
步步清风 发表于 2017/12/26 16:03:47 2017/12/26
【摘要】 对于kafka,我们不仅在单机、集群、参数调优等方面,对kakfa全方位研究,更要在代码层解读,从原理到代码细节一一打开看看。(声明:所有这系列代码分析章节,有些图片/资料整理来自网络公开资料,站在巨人肩膀上二次仔细解读代码总结分享给大家)

1      Broker分析

1.1        Broker internals视图

image.png

1.2        Network Layer

Kafka使用NIO自己实现了网络层的代码, 而不是采用netty, mina等第三方的网络框架。从性能上来讲,这一块的代码不是性能的瓶颈。

它采用IO多路复用和多线程下的Reactor模式,主要实现类包括SocketServer, Acceptor, ProcessorRequestChannel

 

Kafka的服务器由SocketServer实现,它是一个NIO的服务器,线程模型如下:

 

l  1Acceptor线程负责处理新连接

l  NProcessor线程, 每个processor都有自己的selector,负责从socket中读取请求和发送response

l  MHandler线程处理请求,并产生responseprocessor线程

可以从上面的图形中看到Acceptor, ProcessorHandler的功能

 

1.     Boker在启动的时候会调用SocketServerstartup方法如下。它为每个Processor生成一个线程并启动,然后启动一个Acceptor线程

image.png

2.     Acceptor是一个典型NIO 处理新连接的方法类

image.png

3.     将新的连接均匀地分配给一个Processor。通过accept方法配置网络参数,并交给processor读写数据

image.png

4.     Processoraccept方法将新连接加入它的新连接待处理队列中

image.png

5.     Processor线程的主处理逻辑如下, 这是一个死循环,会一直处理这些连接的读写,这也是一个标准的NIO的处理代码

image.png

2.1        API Layer

API层的主要功能是由KafkaApis类实现的。
根据配置Kafka生成了一组KafkaRequestHandler线程,叫做KafkaRequestHandlerPool:

image.png

遗留问题: 多个线程并发处理请求,如何保证message的读写的顺序性。

KafkaRequestHandler不断的从requestChannel队列里面取出request交给apis处理

image.png

apis根据不同的请求类型调用不同的方法进行处理。

image.png

image.png

显然,此处处理的速度影响Kafka整体的消息处理的速度。
这里我们分析一个处理方法handleProducerRequest

image.png

image.png


这里会调用replicaManager.appendMessages处理Kafka message的保存和备份,也就是leader和备份节点上。

这里会调用replicaManager.appendMessages处理Kafka message的保存和备份,也就是leader和备份节点上。

3.1        Replication Subsystem

顺藤摸瓜,我们进入replicaManager.appendMessages的代码。
这个方法会将消息放到leader分区上,并复制到备份分区上。在超时或者根据required acks的值及时返回response

image.png

image.png

遗留问题: 对于同步Producer的写,是否阻塞 API 层的处理线程 ?

4.1        Log Subsystem

LogManager负责管理KafkaLog(Kafka消息) 包括log/Log文件夹的创建,获取和清理。它也会通过定时器检查内存中的log是否要缓存到磁盘中。重要的类包括LogManagerLog

5.1        OffsetManager

负责管理offset,提供offset的读写。

6.1        TopicConfigManager

它负责动态改变Topic的配置属性。
如果某个topic的配置属性改变了,Kafka会在ZooKeeper上创建一个类似/brokers/config_changes/config_change_13321的节点, topicConfigManager会监控这些节点, 获得属性改变的topics并处理,实际上以新的LogConfig替换老的:

image.png


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。