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

[消息队列 Kafka] Kafka 架构组件及其特性(一)

工作中的消息队列用的是Kafka,一直没有系统的了解,这边集中整理一下。

目录

Kafka主要组件有十个部分。

1.Broker(服务器)

2.Record(消息)

3.Producer(生产者)

4.Consumer(消费者)

5.Topic(主题)

6.Partition(分区)

7.Replica(副本机制)(和分区结合起来是Kafka实现高可用和负载均衡的原理)

8.Segment(段)

9.Consumer Group(消费者组)

10.Consumer Offset(偏移量)(Kafka,单分区消息顺序消费的原因)

Kafka的整体架构

Kafka特性

1)磁盘顺序I/O(速度不亚于内存I/O)

2)索引

3)批量处理和压缩传递(海量吞吐的基础)

4)零拷贝


Kafka作为消息队列(当然它不仅仅只有消息队列这一个应用场景。)

Kafka主要组件有十个部分。

1.Broker(服务器)

a)Broker就是Kafka的服务器,用于存储和管理消息,默认是9092端口

b)生产者和Broker建立连接,将消息发送到服务器上存储起来

c)消费者跟Broker建立连接,订阅和消费服务器上存储的消息。

2.Record(消息)

a)客户端传输的数据叫做消息,在Kafka中也叫Record.

b)Record在客户端是一个KV键值对(ProducerRecord, ConsumerRecord)

c)Record在服务端是一个KV键值对(RecordBatch(批量发送) 或 Record).

3.Producer(生产者)

发送消息的一方称为生产者,

Kafka为了提升消息发送速率,生产者默认采用批量发送的方式发送消息至Broker,

一条发送多少条由参数batch.size决定(默认16K)


4.Consumer(消费者)

a)订阅,接收消息的一方叫消费者

b)消费者获取消息有两种模式:Pull模式(拉)(消费者主动从消息队列中获取消息),Push模式(推)(Broker把消息推送给消费者)

Kafka采用的是Pull模式,因为Kafka是支持大数据的,如果采用Push模式的话,海量数据可能把下游消费端给打爆,所以Kafka采用Pull模式推送消息

c)Pull模式,消费者可以控制一次到底获取多少条消息(max.pull.records 默认是500)

5.Topic(主题)


a)topic(主题)一个逻辑概念,可以理解为一组消息的集合

b)生产者和消费者通过topic进行消息的写入和读取

c)生产者发送消息时候,若topic不存在,是否自动创建:auto.create.topics.enable(建议关闭)

6.Partition(分区)


a)分区(Partition)就是把一个topic分成几个不同的部分

b)一个topic在创建时候可以划分多个分区,若没有指定,默认分区数为1,可通过参数修改(num.partitions)

c)Kafka中修改分区规则:可加,不可减

7.Replica(副本机制)(和分区结合起来是Kafka实现高可用和负载均衡的原理


a)Replica(副本)是Partition(分区)的副本,每个分区可以有若干个副本(但是不能超过集群数量)

b)副本必须在不同的Broker上,副本包括了主从节点(Leader(图片中蓝色部分),Foller(图片中灰色部分))

c)服务端可以通过参数控制默认副本数(offsets.topic.repilication.factor)(一般不这样用,一般直接通过命令设置副本数)

生产者只会往leader节点发送消息,消费者也只会从leader节点读取消息,Kafka通过将各消息的leader节点放在不同的Broker(也就是服务器)上,实现了负载均衡,然后个分区follower节点实现了高可用

8.Segment(段)

Kafka的数据文件是写在.log文件里面的,另外一起还对生成对应的索引.index文件和对应的时间.timeIndex文件。

但是很容易的可以理解,如果一直往一个log文件里面追加数据,那么长时间使用之后log文件的的查找会随着数据量变大而变慢,所以在这种情况下就引入了Segement段的概念。

a)Segement(端)的目的是:建一个分区的数据划分、存储到不同的文件中

b)每个Segment至少由一个数据文件和2个索引文件构成,3个文件是成套出现的。

c)引入段的意义:

加快查询效率

删除数据时减少逐条IO

d)Segement大小控制:

按时间周期生成 log.roll.hours(默认一周)

按文件大小生产 log.segment.bytes(默认1G)

9.Consumer Group(消费者组)

​​​​​​​

由于生产者可能短时间内生产大量消息,为了提升消息的消费速率,就增加了消费者组的概念(group id)

a)使用消费者组,提升消费效率和吞吐量

b) 同一个Group中的消费者,不能消费相同的分区(group id相同,在一个组内)

10.Consumer Offset(偏移量)(Kafka,单分区消息顺序消费的原因)

Kakfa在单分区里面的消息是顺序存储的。

a)Offset(偏移量)的目的在于:记录消费者的消费位置

b)Kafka现行版本将Offset保存在服务器(__consumer_offsets_)主题中(0.9版本以前是在zooKeeper中)

Kafka的整体架构

上图所示:

集群中有三个Broker,有两个topic,都有三个副本,topic0有两个分区,分区1(图中左上角的Partition(0))的leader在Broker0中,分区2leader在Broker1中,topic1的分区leader在broker2中。

生产者往leader分区(蓝色部分)发送消息时候,leader节点会向follower节点同步备份消息(绿色线条部分)。然后每个消费者组对消息进行消费(红色箭头部分)(想通消费者组的消费者不能消费同一个分区的消息)

Kafka特性

1)磁盘顺序I/O(速度不亚于内存I/O)

Kafka采用的是磁盘顺序I/O

磁盘顺序I/O相对于随机I/O不同点在于:

随机I/O,数据存储在磁盘的位置是分散的,所以需要多次磁盘寻址来读取和写入数据。

但是顺序I/O只需要一次磁盘寻址。去除了重复寻址的过程。Kafka的记录是不断追加到本地磁盘的末尾的,所以是顺序I/O。

2)索引

Kafka在Broker端提供了offset索引和timeIndex(时间戳)索引,两种索引采用了稀疏索引的方案

3)批量处理和压缩传递(海量吞吐的基础)

在收发消息的时候批量处理。

压缩算法进行压缩后传递(gzip等)

4)零拷贝

传统的I/O拷贝如上图:

数据文件从磁盘到网卡,会经过四次从用户态到内核态切换。比较耗时

但是Kafka采用的是linux中的sendfile()函数,采用的是零拷贝的技术,使得读写有比较高的提升

对应的java源码中使用的是transferTo函数

以上就是Kafka整体架构,主要组件和对应的特性。后续还会记录几个主要组件的原理帮助理解。

相关文章:

[消息队列 Kafka] Kafka 架构组件及其特性(一)

工作中的消息队列用的是Kafka,一直没有系统的了解,这边集中整理一下。 目录 Kafka主要组件有十个部分。 1.Broker(服务器) 2.Record(消息) 3.Producer(生产者) 4.Consumer&…...

【Flutter 面试题】 JIT 与 AOT分别是什么?

【Flutter 面试题】 JIT 与 AOT分别是什么? 文章目录 写在前面口述回答写在前面 🙋 关于我 ,小雨青年 👉 CSDN博客专家,GitChat专栏作者,阿里云社区专家博主,51CTO专家博主。2023博客之星TOP153。 👏🏻 正在学 Flutter 的同学,你好! 😊 Flutter 面试宝典(…...

QT获取最小化,最大化,关闭窗口事件

QT获取最小化,最大化,关闭窗口事件 主程序头文件: 实现: changeEvent,状态改变事件 closeEvent触发点击窗口关闭按钮事件 其代码它参考: /*重写该函数*/ void MainWindow::changeEvent(QEvent *event) {…...

Oracle作业调度器Job Scheduler

Oracle数据库调度器 (Oracle Database Scheduler) 在数据库管理系统中,数据库调度器负责调度和执行数据库中的存储过程、触发器、事件等。它可以确保这些操作在正确的时间和条件下得到执行,以满足业务需求。 1、授权用户权限 -- 创建目录对象 tmp_dir…...

Vue 组件之间的通信

在 Vue.js 中,组件是构建应用程序的基本单位。然而,当你的应用程序变得复杂时,组件之间的通信变得至关重要。本文将介绍几种 Vue 组件之间通信的方式,帮助你更好地管理和组织代码。 父子组件通信 父组件可以通过 props 向子组件传…...

Elementary OS 7.1简单桌面调整

Elementary OS的Pantheon桌面环境提供了一种非常独特和直观的用户体验。默认情况下,Pantheon桌面并没有提供传统的窗口最小化、最大化按钮。但是可以通过安装和使用特定的工具来调整和自定义这些设置。 可以通过以下步骤来启用窗口的最小化和最大化按钮&#xff1a…...

【C++ | 析构函数】类的析构函数详解

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 ⏰发布时间⏰:2024-06-06 1…...

ceph radosgw 原有zone placement信息丢失数据恢复

概述 近期遇到一个故障环境,因为某些原因,导致集群原有zone、zonegroup等信息丢失(osd,pool等状态均健康)。原有桶和数据无法访问,经过一些列fix后修复, 记录过程 恢复realm和pool相关信息 重…...

​​​​【动手学深度学习】残差网络(ResNet)的研究详情

目录 🌊1. 研究目的 🌊2. 研究准备 🌊3. 研究内容 🌍3.1 残差网络 🌍3.2 练习 🌊4. 研究体会 🌊1. 研究目的 了解残差网络(ResNet)的原理和架构;探究残…...

freertos初体验 - 在stm32上移植

1. 说明 freertos内核 非常精简,代码量也很少,官方也针对主流的编译器和内核准备好了移植文件,所以 freertos 的移植是非常简单的,很多工具(例如CubeMX)点点鼠标就可以生成一个 freertos 的工程&#xff0…...

ubuntu使用 .deb 文件安装VScode

使用 .deb 文件安装 下载 VSCode 的 .deb 文件: wget -q https://go.microsoft.com/fwlink/?LinkID760868 -O vscode.deb使用 dpkg 安装: sudo dpkg -i vscode.deb如果有依赖项问题,使用以下命令修复: sudo apt-get install -f...

9.1.1 简述目标检测领域中的单阶段模型和两阶段模型的性能差异及其原因

9.1目标检测 场景描述 目标检测(Object Detection)任务是计算机视觉中极为重要的基础问题,也是解决实例分割(Instance Segmentation)、场景理解(Scene Understanding)、目标跟踪(Ob…...

系统化自学Python的实用指南

目录 一、理解Python与设定目标 二、搭建学习环境与基础准备 三、入门学习阶段 四、中级进阶阶段 五、项目实践与持续深化 六、持续学习与拓展 一、理解Python与设定目标 Python概述:详细介绍Python的历史沿革、设计理念、主要特点(如易读、易维护…...

加密货币初创企业指南:如何寻找代币与市场的契合点

撰文:Mark Beylin,Boost VC 编译:Yangz,Techub News 原文来源:香港Web3媒体Techub News 在 Y Combinator 创始人 Paul Graham 《Be Good》一文中概述了初创企业如何找到产品与市场契合点的方法,即制造人…...

【十二】图解mybatis日志模块之设计模式

图解mybatis日志模块之设计模式 概述 最近经常在思考研发工程师初、中、高级工程师以及系统架构师各个级别的工程师有什么区别,随着年龄增加我们的技术级别也在提升,但是很多人到了高级别反而更加忧虑,因为it行业35岁年龄是个坎这是行业里的共…...

RainBond 制作应用并上架【以ElasticSearch为例】

文章目录 安装 ElasticSearch 集群第 1 步:添加组件第 2 步:查看组件第 3 步:访问组件制作 ElasticSearch 组件准备工作ElasticSearch 集群原理尝试 Helm 安装 ES 集群RainBond 制作 ES 思路源代码Dockerfiledocker-entrypoint.shelasticsearch.yml制作组件第 1 步:添加组件…...

JVM相关:Java内存区域

Java 虚拟机(JVM)在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域。 Java运行时数据区域是指Java虚拟机(JVM)在执行Java程序时,为了管理内存而划分的几个不同作用域。这些区域各自承担特定的任务&#xff0c…...

【C++】─篇文章带你熟练掌握 map 与 set 的使用

目录 一、关联式容器二、键值对三、pair3.1 pair的常用接口说明3.1.1 [无参构造函数](https://legacy.cplusplus.com/reference/utility/pair/pair/)3.1.2 [有参构造函数 / 拷贝构造函数](https://legacy.cplusplus.com/reference/utility/pair/pair/)3.1.3 [有参构造函数](htt…...

Mintegral数据洞察:全球中轻度游戏市场与创意更新频率

基于2024年3月大盘数据,汇量科技数据研究中心发现,超休闲品类仍是投流中轻度手游的中流砥柱。而投流力度较大的其他细分品类里,可以看到棋牌、模拟经营、非4X策略以及合成X游戏的身影,这些品类是近年来经常出现融合玩法的新兴赛道…...

贝锐蒲公英异地组网:降低建筑工地远程视频监控成本、简化运维

中联建设集团股份有限公司是一家建筑行业的施工单位,专注于建筑施工,业务涉及市政公用工程施工总承包、水利水电工程施工总承包、公路工程施工总承包、城市园林绿化专业承包等,在全国各地开展有多个建筑项目,并且项目时间周期可能…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

ios苹果系统,js 滑动屏幕、锚定无效

现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

MySQL的pymysql操作

本章是MySQL的最后一章&#xff0c;MySQL到此完结&#xff0c;下一站Hadoop&#xff01;&#xff01;&#xff01; 这章很简单&#xff0c;完整代码在最后&#xff0c;详细讲解之前python课程里面也有&#xff0c;感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...

【大厂机试题解法笔记】矩阵匹配

题目 从一个 N * M&#xff08;N ≤ M&#xff09;的矩阵中选出 N 个数&#xff0c;任意两个数字不能在同一行或同一列&#xff0c;求选出来的 N 个数中第 K 大的数字的最小值是多少。 输入描述 输入矩阵要求&#xff1a;1 ≤ K ≤ N ≤ M ≤ 150 输入格式 N M K N*M矩阵 输…...

宠物车载安全座椅市场报告:解读行业趋势与投资前景

一、什么是宠物车载安全座椅&#xff1f; 宠物车载安全座椅是一种专为宠物设计的车内固定装置&#xff0c;旨在保障宠物在乘车过程中的安全性与舒适性。它通常由高强度材料制成&#xff0c;具备良好的缓冲性能&#xff0c;并可通过安全带或ISOFIX接口固定于车内。 近年来&…...

使用homeassistant 插件将tasmota 接入到米家

我写一个一个 将本地tasmoat的的设备同通过ha集成到小爱同学的功能&#xff0c;利用了巴法接入小爱的功能&#xff0c;将本地mqtt转发给巴法以实现小爱控制的功能&#xff0c;前提条件。1需要tasmota 设备&#xff0c; 2.在本地搭建了mqtt服务可&#xff0c; 3.搭建了ha 4.在h…...