当前位置: 首页 > backend >正文

kafka服务端架构总览

Kafka系列文章

基于Kafka2.1解读Producer原理
基于Kafka2.1解读Consumer原理
Kafka服务端NIO操作原理解析(一)
Kafka服务端NIO操作原理解析(二)


文章目录

  • Kafka系列文章
  • 前言
  • 一、kafka服务端的架构
    • 1.1 基本概念介绍
    • 1.2 kafka的特性
  • 二、kafkaServer
    • 2.1 服务端IO
    • 2.服务端计算
    • 2.3 计算和IO分离
  • 总结


前言

kafka服务端,咱们前两篇文章都是围绕kafka的IO进行分析的,读者很难有全貌的理解,也就是整个服务端有哪些功能,以及这些功能之间是如何协作。


一、kafka服务端的架构

1.1 基本概念介绍

其实任何一个系统,总结起来无非都是『计算』+『IO』。只不过针对咱们的平时的业务系统,“计算”比较多,也就是主要是业务逻辑;IO一般涉及到的是RPC服务框架的调用,当然不管是调用其他业务服务、中间件、数据源其实都是RPC,只不过可能是不同的“网络模型+自定义协议”。

1.2 kafka的特性

kafka作为一个开源的MQ框架,当然也是『计算』+『IO』,但是最为人称道的其实就是他的“IO”模型:网络IO+文件IO。
不过kafka还有个厉害的地方,他使用了计算和IO分离的模式。想想咱们自己的业务系统,是不是会写一段IO,写一段业务逻辑,来回穿插?而再回顾下Kafka服务端NIO操作原理解析(一)和
Kafka服务端NIO操作原理解析(二),想想kafka服务端是怎么做的?几乎这两段全是数据的IO逻辑,也就是读取request,写入response的过程。根本不依赖于所谓的逻辑计算,也就是咱们kafka对producer和consumer的请求逻辑实际处理逻辑。
其实想想producer是不是也是这么干的?accumulator不停把数据组装成batches,Sender线程不停遍历batches,然后进行消息发送。producer通过batches,将accumulator和Sender解耦了。

二、kafkaServer

跟kafkaProducer一样,server端也有个主要的类,kafkaServer,不管是IO还是计算的动作都是它的属性的功能
kafkaServer的基本架构

2.1 服务端IO

服务端IO,其实处理的就是两件事:

  1. producer、consumer、follower replica发过来的request,进行封装,放到RequestChannel里,
  2. Processor从自己的responseQueue中获取response,然后通过网络IO写出去
    具体见Kafka服务端NIO操作原理解析(一)和
    Kafka服务端NIO操作原理解析(二)

2.服务端计算

通过阅读服务端IO就会发现,貌似缺失了一环。

  1. 放到RequestChannel里的request被谁处理了?
  2. Processor的responseQueue里的response哪来的?

其实我们可以发现KafkaServer上还有个重要的属性,dataPlaneRequestHandlerPool,顾名思义,requestHandlerPool,那就是个运行池,该运行池的作用其实就是 handle request的。
requestHandlerPool示意图

2.3 计算和IO分离

其实分离、或者说解耦是咱们软件行业特别重要的一个特性以及思想。
服务端通过RequestChannel和Processor的responseQueue,将计算和IO进行了接口;producer呢?通过accumulator的topicInfoMap(其实就是batches)进行解耦

总结

着重介绍了下计算和IO分离思想在kafka设计中的实践,准备下一篇文章带出计算的具体逻辑

http://www.xdnf.cn/news/19351.html

相关文章:

  • 【C++】显示与隐式加载dll的使用与区别
  • 技术框架之RPC
  • 【系统分析师】高分论文:论信息系统的安全与保密设计
  • c++ 线程局部存储(Thread-Local Storage,TLS)
  • 当服务器报警响起:CPU、内存、磁盘使用率飙升的诊断与处置
  • 基于单片机智能鞋柜/智能鞋橱/智能鞋盒
  • C++项目的Makefile案例解析
  • Python基础之元组列表集合字典
  • Python与Rust语法对比详解:从入门到精通
  • C++顺序嵌套回调函数
  • 飞牛NAS上部署Markdown文稿编辑器,阅读.md文件同时还可以跨平台访问!
  • Qt精华版打包教程,支持windows和Linux,每种平台支持2种方案
  • 电感值过大过小会影响什么
  • AI基础学习周报十一
  • 艾体宝案例 | 数据驱动破局:DOMO 如何重塑宠物零售门店的生存法则
  • HarmonyOS 应用开发:基于API 12+的现代化实践
  • C++从入门到实战(二十)详细讲解C++List的使用及模拟实现
  • Ubuntu安装NVIDIA显卡驱动
  • #Datawhale 组队学习#8月-工作流自动化n8n入门-3
  • LabVIEW 瀑布图与游标操作
  • 分布式事务相关
  • [软考中级]嵌入式系统设计师—核心知识点速记
  • 分布式相关
  • 【iOS】MVC架构
  • 自制扫地机器人(一)20 元级机械自动避障扫地机器人——东方仙盟
  • 晶晨线刷工具下载及易错点说明:生成工作流程XML失败
  • Trie树(静态数组实现)
  • 人工智能加速漏洞利用,15分钟即可完成概念验证?
  • 神州数码VRRP 原理与配置篇
  • 应用开发使用缓存