手绘模型图带你认识Kafka服务端网络模型华为云开发者联盟

这个类是网络通信的核心类,它持有这Acceptor和Processor对象。

这个是控制连接数配额的类,

涉及到的Broker配置有:

AbstractServerThread类:这是Acceptor线程和Processor线程的抽象基类,它定义了一个抽象方法wakeup(),主要是用来唤醒Acceptor线程和Processor对应的Selector的,当然还有一些共用方法

Acceptor线程类:继承自AbstractServerThread,这是接收和创建外部TCP连接的线程。每个SocketServer实例一般会创建一个Acceptor线程(如果listeners配置了多个就会创建多个Acceptor)。它的唯一目的就是创建连接,并将接收到的SocketChannel(SocketChannel通道用于传输数据)传递给下游的Processor线程处理,Processor主要是处理连接之后的事情,例如读写I/O。

Processor线程类:这是处理单个TCP连接上所有请求的处理线程。每个Acceptor实例创建若干个(num.network.threads)Processor线程。Processor线程负责将接收到的SocketChannel(SocketChannel通道用于传输数据。),注册读写事件,当数据传送过来的时候,会立即读取Request数据,通过解析之后,然后将其添加到RequestChannel的requestQueue队列上,同时还负责将Response返还给Request发送方。

简单画了一张两个类之间的关系图

既然两个都是可执行线程,那我们看看两个线程的run方法都做了哪些事情

//阻塞查询Selector是否有监听到新的事件valready=nioSelector.select(500)//如果有事件,则查询具体的事件和通道if(ready>0>{//获取所有就绪事件准备处理valkeys=nioSelector.selectedKeys()}3、遍历刚刚监听到的事件,如果该SelectionKey不包含OP_ACCEPT(建立连接)事件,则抛出异常,通常不会出现这个异常。

Unrecognizedkeystateforacceptorthread4、如果SelectionKey包含OP_ACCEPT(建立连接)事件,则可以通过这个SelectionKey拿到serverSocketChannel,通过serverSocketChannel拿到socketChannel,并且将SocketChannel设置为非阻塞模式。

valserverSocketChannel=key.channel().asInstanceOf[ServerSocketChannel]//调用accept方法就可以拿到ScoketChannel了。valsocketChannel=serverSocketChannel.accept()//设置为非阻塞模式就可以在异步模式下调用connect(),read()和write()了。socketChannel.configureBlocking(false)5、接下来,把上面拿到的SocketChannel以遍历的形式给Acceptor下面的Procesor,让Processor来执行后面的处理。分配的体现形式是,将拿到的SocketChannel保存在Processor中的newConnections阻塞队列中,这个newConnections上限是20,在代码里面写死了的,也就是说一个Processor同时最多只能处理20个连接,那么所有的Processor能处理的最大连接就是Processor数量*20;如果你的连接请求并发度很高,可以尝试调大num.network.threads

6、最后,如果newConnections队列放入了一个新的SocketChannel,则会调用一下对应Processor实例的wakeup()方法。

具体Request的处理类,所有的请求方法处理逻辑都放在这个里面。

KafkaRequestHandler的线程池,KafkaRequestHandler线程的数量由配置num.io.threads决定。

请求处理类,每个Handler都会去requestChannel的requestQueue队列里面poll请求,然后去处理,最终调用的处理方法是KafkaApis.handle()

这几个类之间的关系如下

数据面板是用来处理Broker与Broker/Client之间的网络模型模块,与之相对的是控制器面板。

控制器面板是专门用于Controller与Broker之间的网络通信模块。

其实本质上他们都是一模一样的,但是为了将Controller的通信和普通通信隔离,才有这么两个概念。

上面的网络通信模型就是以数据面板来分析的,因为本质是一样的,只是有一些配置不一样。

那么,数据面板就不详细讲了,我们主要讲下控制器面板的不一样的地方。

首先,要启用控制器面板,必须配置control.plane.listener.name.并且这个监听器名称必须在listeners里面有配置

否则的话,是不会专用的控制器链接的EndPoint的。

例如:

##所有的监听器isteners=INTERNAL://192.1.1.8:9092,EXTERNAL://10.1.1.5:9093,CONTROLLER://192.1.1.8:9094##监听器对应的安全协议listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:SSL,CONTROLLER:SSL##控制器control.plane.listener.name=CONTROLLER在启动时,代理将开始使用安全协议“SSL”监听“192.1.1.8:9094”。

在控制器端,当它通过zookeeper发现代理发布的端点时,它将使用control.plane.listener.name找到端点,它将用于建立与代理的连接。

上面我们主要分析了一下,Kafka中的网络通信模型,那么聪明的你应该肯定能够看的出来,它是使用线程模型中的Reactor模式来实现的。

Reactor模式,是指通过一个或多个输入同时传递给服务处理器的服务请求的事件驱动处理模式。

服务端程序处理传入多路请求,并将它们同步分派给请求对应的处理线程,Reactor模式也叫Dispatcher模式。即I/O多路复用统一监听事件,收到事件后分发(Dispatch给某进程),是编写高性能网络服务器的必备技术之一。

根据Reactor的数量和处理资源池线程的数量不同,有3种典型的实现:

我们主要了解一下主从Reactor多线程

针对单Reactor多线程模型中,Reactor在单线程中运行,高并发场景下容易成为性能瓶颈,可以让Reactor在多线程中运行。

方案说明:

(1)Kafka的网络模型使用了Reactor模式的哪种实现方式?

答案:3。使用了主从Reactor多线程的实现方式.

MainReactor(Acceptor)只负责监听OP_ACCEPT事件,监听到之后把SocketChannel传递给SubReactor(Processor),每个Processor都有自己的Selector。SubReactor会监听并处理其他的事件,并最终把具体的请求传递给KafkaRequestHandlerPool。

很典型的主从Reactor多线程模式。

(2)什么是ControllerPlane(控制器面板),什么是DataPlane(数据面板)

控制器面板:主要处理控制器类的的请求数据面板:主要处理数据类的请求。

THE END
1.processV3.0插件各模型使用图,92个模型process V3.0插件各模型使用图,92个模型 人大经济论坛-经管之家:分享大学、考研、论文、会计、留学、数据、经济学、金融学、管理学、统计学、博弈论、统计年鉴、行业分析包括等相关资源。 经管之家是国内活跃的在线教育咨询平台! 经管之家新媒体交易平台 https://bbs.pinggu.org/jg/huiji_huijiku_6606700_1.html
2.技术架构图2流程图模板技术架构图2 媒体出版 后端开发 作者其他创作 大纲/内容 查缉布控 人员基本信息 ... 警务协作机制协议 家庭成员及社会关系 应用层 考核评委 绩效考核 测评分发 消息队列 独立门户 安全与运维保障服务体系 考核任务 责任书填报 考核对象 政治面貌 服务层 办案协作...https://www.processon.com/view/6729bcc7b61b2f442a7f7a34
3.基于空间转录组技术的芪珀生脉组合物改善房颤心肌纤维化的分析...31.采用r语言clusterprofiler包分别对正常组、模型组、芪珀生脉给药组样本的每个聚类的聚类差异基因集进行生物学过程富集分析(即go注释系统的生物学过程分析biological process(bp分析)),并将正常组与模型组、芪珀生脉组的富集分析结果分别进行比较,筛选获得模型组、芪珀生脉组的主要差异类群(cluster)。 http://xjishu.com/zhuanli/27/202210106899.html
4.《计算机科学导论》课后练习(翻译)图灵模型假设各种各样的运算都能够通过一种特殊的机器来完成,图灵机的模型是基于各种运算过程的。图灵模型把运算的过程从计算机器中分离开来,这确实改变了整个世界。 2.定义一个基于冯·诺伊曼模型的计算机。 答:The von Neumann Model defines the components of a computer, which are memory, the arithmetic logic...http://www.360doc.com/content/22/1209/20/79779524_1059639414.shtml
5.学习敏捷:构建高效团队图2-1:瀑布式模型 在他们聊天的过程中,Bruce 和 Dan 又聊到了一些事情,进一步验证了 Joanna 的观点。 Joanna 怀疑公司里有无数说明文档藏在文件夹里蒙尘已久。从某种程度上看,所有人都期望一组用户、经理和主管给出一个完美的需求说明文档。实际上,需求说明书经常变化。到达开发团队手中的那一刻,需求说明书可...https://www.ituring.com.cn/book/tupubarticle/12920
1.专题分纲目录模型4e模型本专题为模型的总纲。各类模型汇聚于此,源于生活,用于生活。 专题分纲目录 均为索引,本纲为:模型总纲 1 模型基础 1.1 核心模型表 1.2 应用级模型表 2 模型 应用 2.1 导图解房 导图解房(01)黄金圈法则解读 买房这件事儿 导图解房(02)购房资格与首付贷款解读-模板 ...https://blog.csdn.net/vviccc/article/details/112230734
2.process模型9251CTO博客已为您找到关于process模型92的相关内容,包含IT学习相关文档代码介绍、相关教程视频课程,以及process模型92问答内容。更多process模型92相关解答可以来51CTO博客参与分享和学习,帮助广大IT技术人实现成长和进步。https://blog.51cto.com/topic/c3ba6e7615da2f4.html
3.SPSSPROCESS宏模型图在该包中,Keon-Woong Moon等公布了所有的模型,这些模型与SPSS PROCESS宏的模型基本一致,可以供大家参考使用。以下为来自processR的模型图: 多的模型:23 24 30 31 35 36 40 41 45 49 50 缺的模型:68 69 70 71 72 73 80 81 82 83 84 85 86 87 88 89 90 91 92 目录 [隐藏] 1 模型1 2 ...http://www.obhrm.net/index.php/SPSS_PROCESS%E5%AE%8F%E6%A8%A1%E5%9E%8B%E5%9B%BE
4.构建DeblurGAN模型,将模糊相片变清晰腾讯云开发者社区在拍照时,常常因为手抖或补光不足,导致拍出的照片很模糊。可以用DeblurGAN模型将模糊的照片变清晰,留住精彩瞬间。 DeblurGAN模型是一个对抗神经网络模型,由生成器模型和判别器模型组成。 生成器模型,根据输入的模糊图片模拟生成清晰的图片。 判别器模型,用在训练过程中,帮助生成器模型达到更好的效果。具体可以参考论文:...https://cloud.tencent.com/developer/article/1498384
5.图情领域LDA主题模型应用研究进展述评图情领域LDA 主题模型 应用研究进展述评 A Review on Application Studies of LDA Topic Models in Library and Information Science Field 张东鑫 1 ZHANG Dongxin 张敏 2 ZHANG Min (1. 西南大学计算机与信息科学学院,重庆,400715;2. 华中师范大学信息管理学院,武汉,430079) 摘要:[ 目的 / 意义 ] 系统归纳...http://dik.whu.edu.cn/jwk3/tsqbzs/CN/article/downloadArticleFile.do?attachType=PDF&id=5977
6.基于Maxent模型的未来气候变化情景下胡杨在中国的潜在地理分布经Maxent模型运算模拟出胡杨在现代气候条件下的潜在地理分布区(图5), 在92个胡杨有效分布记录的存在概率逻辑值中, 最高逻辑值为新疆吐鲁番市托克逊县(0.90), 最低逻辑值为新疆且末县(0.05), 平均逻辑值为0.55。胡杨在现代气候下的潜在分布区主要位于中国的北部地区和西北部地区, 北部地区主要分布在内蒙古中西部地区...https://www.ecologica.cn/stxb/ch/html/2020/18/stxb201906111232.htm
7.UnityAssetPostprocessor模型函数Model实用案例深入解析C#教程在Unity中,AssetPostprocessor是一个非常有用的工具,它可以在导入资源时自动执行一些操作。在本文中,我们将重点介绍AssetPostprocessor中与模型相关的函数,并提供多个使用例子。 OnPostprocessModel OnPostprocessModel是AssetPostprocessor中与模型相关的主要函数。它在导入模型时自动调用,并允许我们对模型进行一些自定义操...https://www.jb51.net/program/28591620d.htm
8.基于系统溯源图的威胁发现与取证分析综述Li 等[6]侧重讨论利用系统级溯源图构建攻击模型,进行威胁检测和调查。潘亚峰等[7]重点综述了APT 攻击场景重构方法。本文重点综述了基于溯源图的数据采集、数据管理(图构建、图缩减、图存储和图查询)、数据分析(威胁检测、威胁狩猎、取证分析)等工作。 本文贡献可概括为:...https://www.fx361.com/page/2022/0804/15181865.shtml
9.图深度学习攻击模型综述本文对现有基于图深度学习攻击工作进行系统分析和总结, 提出了一种分析图深度学习攻击模型 的通用框架, 旨在帮助研究者快速梳理领域内现有的方法, 进而设计新的攻击模型.该框架将攻击的过程分为预备阶段,攻击 算法设计以及攻击实施三大阶段, 其中预备阶段包含目标模型评估和攻击者自身评估两个步骤; 攻击算法设计包含攻击...https://jcs.iie.ac.cn/xxaqxb/ch/reader/create_pdf.aspx?file_no=20220105