kafka基础概念

目录

1、kafka简介

2、kafka使用场景

3、kafka基础概念

3.1、消息

3.1.1、消息构成详解

3.1.2、消息存储设计

3.2、topic

3.3、partition

3.4、offset

3.5、replication

3.5.1、replication简介

3.5.2、副本角色

3.5.3、副本类型

3.5.3.1、副本类型简介

3.5.3.2、ISR简介

3.5.3.3、ISR伸缩维护机制

3.5.3.4、ISR伸缩判定条件


1、kafka简介

        kafka是基于scala语言开发的分布式消息队列,具备高吞吐,高性能,高可靠的特点,同时可持久化,可水平扩展、支持流数据处理;同时kafka在系统架构层面能够将业务消息生产系统与业务消息消费系统进行解耦合处理,降低消息消费系统对上游系统的数据读取影响。

2、kafka使用场景

  • 消息传输
  • 网站行为日志追踪
  • 审计数据收集
  • 日志收集
  • event sourcing
  • 流式处理

3、kafka基础概念

3.1、消息

3.1.1、消息构成详解

        kafka的消息是kafka存储数据的具体载体,kafka的消息格式由很多字段构成,其中很多字段用于管理消息的元数据字段,对用户是完全透明的。kakfa消息格式经过3次变迁,分别被称为V0、V1、V2版本,目前大部分用户使用的应该还是V1版本的消息格式。V1版本的消息格式如下图所示:

消息 = 消息头部 + key + value

【消息头部】:包含消息的CRC码、消息版本号、消息属性、消息时间戳、键长度、消息体长度

【CRC码】:循环冗余校验码,是一种错误检测编码,用于检测数据传输或存储过程是否发生错误

【消息版本号】:V0、V1、V2,代表不同的消息体组织形式

【属性】:占位1字节,使用低3位保存消息的压缩类型,其余5位尚未使用。当前只支持4种压缩类型:0(无压缩)、1(GZIP)、2(Snappy)、3(LZ4)

【时间戳】:保存消息的发送时间戳,用于流式处理以及其他依赖时间的处理语音,如果不指定则取当前时间

【key】:消息键,对消息做partition使用,即决定消息被保存在某topic下的哪个partition

【value】:消息体,保存实际的消息数据

3.1.2、消息存储设计

        kafka采用紧凑的二进制字节数组来保存上面这些字段,也就是说没有任何多于的byte位浪费。kafka做所以没有使用java对象保存上面的消息格式是因为:

        java内存模型(java memory model,即JMM)中,对象保存开销相当巨大,对于小对象而言,通常要花费2倍的空间来保存数据(甚至更糟)。另外随着堆上的数据量越来越大,GC的性能会下降很多,从而整体上拖慢系统的吞吐量。尽管JMM会对java类进行优化,比如重排各个字段的内存布局以及减少内存使用量,但是对于kafka的消息实例依然需要消耗40个字节左右,而且其中有7个字节只是为了补齐。同时由于java的操作系统通常默认开启了页缓存机制,也就是说堆上保存的对象很有可能在页缓存中还保留有一份,造成了极大的资源浪费。所以kakfa在消息设计的时候避开了繁重的java堆上内存分配,直接使用紧凑二进制字节数组bytebuffer而不是独立对象。因此至少能够访问多一倍的可用内存。同时大量使用页缓存而非堆内存还有一个好处:当出现kafka broker崩溃时,堆内存上的数据也一并小时,但页缓存的数据依然存在。broker重启后可以继续提供服务,不需要再单独热缓存。

3.2、topic

        topic是kafka中的主题,是一个逻辑概念,代表了某一类消息,也有人把topic理解为某类文本形式存储的业务数据表。

3.3、partition

        kafka中的topic通常会被多个消费者订阅,因此出于性能的考量,kafka并不是topic-message的两级结构,而是采用了topic-partition-message的三级结构来分散负载,从本质上说每一个topic都有若干个partition构成。即topic由parition构成,partition由不能被修改的有序消息序列构成,所以parition可以说是有序的消息日志。

        kafka的partition没有实际业务含义,partition的引入纯粹是为了提升系统的吞吐量,因此在创建topic时可以根据集群实际配置设置具体的partition数,实现整体性能的最大化。

3.4、offset

        topic partition中的每一条消息记录都被分配一个位移值,该位移值是从0开始顺序递增的整数,位移信息可以唯一定位到paritition下的一条消息。  通过<topic,partiton,offset>可以唯一的定位一条消息

3.5、replication

3.5.1、replication简介

        为了保证高可靠性,kafka采用了副本备份存储消息机制,副本存在的唯一目的就是放置数据丢失。副本面向的对象是partition,而不是面向具体的消息。在kafka中,replication分为两类:leader replication和follower replication。

3.5.2、副本角色

        副本角色可以分为:leader和follower

        leader副本面向客户端请求,为客户端提供消息读取以及消息写入服务;

        follower副本不对客户端开放,仅被动的从leader副本中获取数据,follower的唯一价值就是充当leader的候补。一旦leader副本宕机,kafka便会从剩余副本中选举新的leader提供服务。kafka保证同一个partition的多个replication一定不会分布在同一个broker上,保证某个broker节点宕机,一定可以从其他broker中获取服务。

3.5.3、副本类型

3.5.3.1、副本类型简介

根据follower与leader副本的消息同步状态可以将副本分为:ISR与OSR

        【AR】:所有副本

        【ISR】:副本同步队列

        【OSR]:副本掉队队列

           AR = ISR + OSR

3.5.3.2、ISR简介

        ISR的全称是in-sync replication,即与leader replication保持同步的replication集合,kafka为partition动态维护一个replication集合。该集合中的所有replication保存的消息日志都与leader replication保持同步状态,只有这个集合中的replcaition才能被选举为leader,也只有该集合中的所有replication都接收到同一条消息,kafka才会将该消息置为已提交状态,即认为消息发送成功。kafka承诺只要这个集合中至少存在一个replication,那些“已提交”状态的消息就不会丢失。

3.5.3.3、ISR伸缩维护机制

        正常情况下,partition的所有replication都应该与leader replication保持同步,即所有replication都在ISR中,因为各种各样的原因,一小部分replication开始落后于leader replication的进度。当滞后到一定程度,kafka会将这些replication剔出ISR列表,被踢出的副本会被放入OSR队列中,当被踢出的replication重新追上leader replication进度时,kafka会将他们从OSR中加回到ISR中。这一切都是自动维护的,不需要用户进行人工干预。

3.5.3.4、ISR伸缩判定条件

        kafka采用replica.lag.time.max.ms和replica.lag.max.messages两项配置监控时延;时延大于配置即会把broker剔除ISR列表,放入OSR列表中;时延小于配置即会把broker加入ISR列表

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/728542.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

低代码平台实践:打造高效动态表单解决方案的探索与思考

&#x1f525;需求背景 我司业务同事在抓取到候选人的简历之后&#xff0c;经常会出现&#xff0c;很多意向候选人简历信息不完整&#xff0c;一个个打电话确认的情况&#xff0c;严重影响了HR的工作效率&#xff0c;于是提出我们可以通过发送邮件、短信、H5链接的方式来提醒候…

【Linux】使用ntpdate同步

ntpdate 是一个在 Linux 系统中用于同步系统时间的命令行工具&#xff0c;它通过与 NTP 服务器通信来调整本地系统时钟。然而&#xff0c;需要注意的是&#xff0c;ntpdate 已经被许多现代 Linux 发行版弃用。 安装 yum install -y ntpdate 查看时间 date同步时间 ntpdate ntp…

端口已被占用 1080

http://www.nirsoft.net/utils/cports.html#DownloadLinks 下载后解压&#xff0c;直接运行cports.exe. 这里写图片描述 找到被占用的端口&#xff0c;右键选择 “Close Selected TCP Connections”

python使用pyautogui自动化模拟鼠标、键盘操作、截屏、识别图片位置

&#x1f308;所属专栏&#xff1a;【python】✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您的…

Spring Boot集成tensorflow实现图片检测服务

1.什么是tensorflow&#xff1f; TensorFlow名字的由来就是张量(Tensor)在计算图(Computational Graph)里的流动(Flow)&#xff0c;如图。它的基础就是前面介绍的基于计算图的自动微分&#xff0c;除了自动帮你求梯度之外&#xff0c;它也提供了各种常见的操作(op&#xff0c;…

Redis通用命令详解

文章目录 一、Redis概述1.1 KEYS&#xff1a;查看符合模板的所有 key1.2 DEL&#xff1a;删除一个指定的 key1.3 EXISTS&#xff1a;判断 key 是否存在1.4 EXPIRE&#xff1a;给一个 key 设置有效期&#xff0c;有效期到期时该 key 会被自动删除1.5 TTL&#xff1a;查看一个 ke…

《梦醒蝶飞:释放Excel函数与公式的力量》4.1if函数

第4章&#xff1a;逻辑与条件函数 第一节4.1 if函数 在Excel中&#xff0c;逻辑函数用于处理基于特定条件的真假判断&#xff0c;它们是构建复杂公式和进行高级数据分析的基础。本章将深入探讨逻辑函数的使用方法&#xff0c;特别是IF函数&#xff0c;这是Excel中最为常用的条…

Spring Boot程序打包docker镜像

1.将springboot程序使用maven package打包出jar。 2.创建dockerfile。 FROM openjdk:8 VOLUME /tmp EXPOSE 8601 #ADD 后面的参数是项目名字 / 后面的参数是自定义的别名 ADD webflux-hello-0.0.1-SNAPSHOT.jar /webflux-hello.jar #这里的最后一个变量需要和前面起的别名相同…

构建智慧高速公路:软件管理平台业务架构解析

随着交通网络的不断完善和技术的快速发展&#xff0c;智慧高速公路正成为交通领域的重要发展方向。在智慧高速公路系统中&#xff0c;软件管理平台扮演着关键的角色&#xff0c;它不仅是管理各种设备和系统的核心&#xff0c;还承担着数据监控、故障诊断、维护管理等重要任务。…

探索序列到序列模型:了解编码器和解码器架构的强大功能

目录 一、说明 二、什么是顺序数据&#xff1f; 三、编码器解码器架构的高级概述&#xff1a; 3.1 编码器和解码器架构的简要概述&#xff1a; 3.2 训练机制&#xff1a;编码器和解码器架构中的前向和后向传播&#xff1a; 四、编码器解码器架构的改进&#xff1a; 4.1.…

1.3自然语言的分布式表示-word2vec

文章目录 0基于计数的方法的问题1什么是基于推理的方法2神经网络中单词的表示2.1 MatMul 层的实现 3简单word2vec的实现3.1 CBOW模型的结构3.1.1神经元视角3.1.2层的视角3.1.3多层共享权重时存在的问题 3.2 CBOW模型的学习3.3单词的分布式表示 代码都位于&#xff1a;nlp&#…

Unity 工具 之 Azure 微软 【GPT4o】HttpClient 异步流式请求的简单封装

Unity 工具 之 Azure 微软 【GPT4o】HttpClient 异步流式请求的简单封装 目录 Unity 工具 之 Azure 微软 【GPT4o】HttpClient 异步流式请求的简单封装 一、简单介绍 二、实现原理 三、注意实现 四、简单效果预览 五、案例简单实现步骤 六、关键代码 一、简单介绍 Unit…

推荐5个AI辅助生成论文、降低查重率的网站【2024最新】

一、引言 对于忙碌的学生来说&#xff0c;毕业论文通常是一项艰巨的任务。幸运的是&#xff0c;随着人工智能技术的发展&#xff0c;现在有一些工具可以帮助学生轻松完成论文。本文将介绍五个免费的AI工具&#xff0c;它们能够一键帮助你生成毕业论文&#xff0c;让你的学术生…

Minecraft服务端配置教程

一、下载服务端核心文件 下载 | FastMirror 无极镜像 | 我的世界核心下载 Downloads for Minecraft Forge for MinecraftForge服务端下载 MCVersions.net - Minecraft Versions Download List原版 注意&#xff0c;这个网站可以下载Forge水桶等插件和模组端&#xff0c;如果…

华为---静态路由-浮动静态路由及负载均衡(二)

7.2 浮动静态路由及负载均衡 7.2.1 原理概述 浮动静态路由(Floating Static Route)是一种特殊的静态路由&#xff0c;通过配置去往相同的目的网段&#xff0c;但优先级不同的静态路由&#xff0c;以保证在网络中优先级较高的路由&#xff0c;即主路由失效的情况下&#xff0c…

AI界的“视频滤镜”(Stable Diffusion进阶篇-TemporalKit视频风格转化),手把手教你制作原创AI视频

大家好&#xff0c;我是向阳 在之前的文章中我也分享过如何进行AI视频的制作&#xff0c;说是AI视频其实也就是通过Stable Diffusion进行视频重绘&#xff0c;也就是将一个视频一帧一帧重绘为自己想要的画面&#xff0c;然后再连贯起来成为视频。 这个东西其实比较耗费时间和…

Linux中如何通过脚本文件实现对外流量的实时监测

while true #无限循环 doclear #清除屏幕flow$( cat /proc/net/dev | awk /ens160/{print $2} ) #查看receive流量trantsmit_flow$( cat /proc/net/dev | awk /ens160/{print $10} ) #查看transimit流量external_traffic$(( flow - trantsmit_flow )) #输入流量减去输…

贾英才主任受聘担任“两个中心”专家委员会委员

近日&#xff0c;第二届海峡两岸中西医结合肾脏病学术大会授牌仪式在北京隆重举行。 这一盛会吸引了众多医学领域的专家学者&#xff0c;共同探讨中西医结合治疗肾脏病的最新进展和未来发展方向。 在此次大会上&#xff0c;崇文门中医医院的贾英才主任凭借其在肾脏病领域的卓…

计算机网络知识点汇总(二)

计算机网络知识点汇总 第1章计算机网络体系结构 1.1 计算机网络概述 1.1.1 计算机网络的概念 ​ 计算机网络是由若干个结点(node)和连接这些结点的链路(link)组成。网络中的结点可以是就三级、集线器、交换机、或者路由器等&#xff0c;网络之间通过路由器进行互联&#xf…

SFF1006A-ASEMI无人机专用SFF1006A

编辑&#xff1a;ll SFF1006A-ASEMI无人机专用SFF1006A 型号&#xff1a;SFF1006A 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220F 最大平均正向电流&#xff08;IF&#xff09;&#xff1a;10A 最大循环峰值反向电压&#xff08;VRRM&#xff09;&#xff1a;600V 最大…