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列表

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

30分钟学习如何搭建扩散模型的运行环境【pytorch版】【B站免费视频教程!】【解决环境搭建问题】

30分钟学习如何搭建扩散模型的运行环境【B站免费视频教程&#xff01;】【解决环境搭建问题】 动手学习扩散模型 点击以下链接即可进入学习&#xff1a; B站免费视频教程环境配置安装&#xff08;配套讲解文档&#xff09; 视频 讲解主要内容 一、环境设置 1.本地安装&…

用Python设置Excel工作表网格线的隐藏与显示

Excel表格界面的直观性很大程度上得益于表格中的网格线设计&#xff0c;这些线条帮助用户精确对齐数据&#xff0c;清晰划分单元格。网格线是Excel界面中默认显示的辅助线&#xff0c;用于辅助定位&#xff0c;与单元格边框不痛&#xff0c;不影响打印输出。然而&#xff0c;在…

fyne的对话框

对话框 import "fyne.io/fyne/v2/dialog"dialog包 定义了应用程序GUI的标准对话框窗口。 NewError NewError()为应用程序错误在指定的窗口上创建一个对话框。该消息是从提供的错误中提取的&#xff08;不应为nil&#xff09;。创建后&#xff0c;您应该调用Show()…

gpu测试渲染网站有哪些?免费GPU渲染平台介绍

GPU作为渲染领域的核心硬件&#xff0c;对于提高渲染速度和质量起着决定性作用。尽管购买高性能GPU的成本相对较高&#xff0c;但是通过GPU云渲染平台&#xff0c;用户可以以较低的成本享受到高效渲染服务的便利。现在&#xff0c;探索一些提供免费试用的GPU云渲染服务网站&…

怎么查找企业的经营动态信息?

很多人都会查询企业的经营动态&#xff0c;比如很多投资者会关注企业的财务状况&#xff0c;市场战略&#xff0c;经营决策等信息&#xff1b;职场上也需要了解竞争对手和合作伙伴的相关经营动态&#xff0c;新品发布&#xff0c;技术专利申请等等。还有一些行业研究人员需要了…

Qt源码阅读笔记:初步了解QtCore模块目录结构

Qt框架是一个跨平台的C应用程序框架&#xff0c;广泛用于开发图形用户界面程序以及用于无界面后台操作的工具和服务器。它由多个模块组成&#xff0c;其中QtCore模块提供了核心的非GUI功能。 QtCore 提供了元对象系统&#xff0c;扩展了c 在元对象系统的基础上&#xff0c;qt又…

14、电科院FTU检测标准学习笔记-录波功能2

作者简介&#xff1a; 本人从事电力系统多年&#xff0c;岗位包含研发&#xff0c;测试&#xff0c;工程等&#xff0c;具有丰富的经验 在配电自动化验收测试以及电科院测试中&#xff0c;本人全程参与&#xff0c;积累了不少现场的经验 ———————————————————…

光猫BOB 功率调测误差分析与校验指南

DDM&#xff08;Digital Diagnostic Monitoring&#xff09;数字诊断监控技术&#xff0c;是光模块中使用的技术&#xff0c;以便用户能够监控光模块的实时参数。这些参数包括工作温度、工作电压、工作电流、发射和接收光功率等&#xff0c;还可以显示模块的常规波长、速率、传…

工控机和电脑一直ping不通

问题 工控机和电脑通过网线直连&#xff0c;电脑端是USB-网口转换器&#xff0c;一直互相ping不通&#xff0c;反复确认两端的IP地址、子网掩码及路由配置是对的。 原因 具体原因不明。 解决办法 但是通过将电脑端网卡的速度和模式属性由原来的“自动检测”修改为“100 Mb…

持续增强国产适配 | 宁盾身份域管与南大通用、飞腾完成产品兼容性认证

随着党政、央国企、金融信创国产化改造日益深入&#xff0c;企业对国产 IT 基础设施生态兼容适配的需求日益迫切。为践行给企业提供“开箱即用”的交付体验承诺&#xff0c;宁盾身份域管持续增强多元异构产品的兼容适配。近日&#xff0c;宁盾身份域管与天津南大通用数据技术股…

电子设备抗震等级与电子设备震动实验

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/139923445 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…

solidworks安装教程 - 解决安装后服务不能自动启动问题

Solidworks安装教程&#xff0c;有些同学的电脑过于复杂&#xff0c;产生了正常的服务不能启动。 前面的有个重要的操作操作界面有&#xff0c;大家应该是执行了&#xff1a; 那么我们有变通的方法可以让这个服务启动&#xff1a; 1. cmd用管理员启动 2. 测试下如下命令是否…

electron-builder创建桌面应用

一、利用vue-cli创建vue项目 二、添加淘宝 electron 源&#xff0c;防止超时 //npm设置淘宝镜像 npm config set registry https://registry.npm.taobao.org/ //electron添加淘宝镜像 npm config set ELECTRON_MIRROR http://npm.taobao.org/mirrors/electron/三、 保存之后&…

web应用-Nginx学习笔记01-应用的组成结构,配置项的分类和理解

参考来源&#xff1a; 在线文档&#xff1a;Nginx开发从入门到精通&#xff0c;https://docs.pythontab.com/nginx/nginx-book/ 极客专栏&#xff1a;nginx核心100讲&#xff0c;作者:陶辉 书籍&#xff1a;《深入理解Nginx&#xff1a;模块开发与架构解析》第二章 参考来源&a…

HTML5休闲小游戏《猫猫超市》源码,引流、刷广告利器

HTML5休闲小游戏《猫猫超市》源码&#xff0c;直接把源码上传到服务器就能使用了&#xff01; 下载链接&#xff1a;https://www.huzhan.com/code/goods467910.html

「邀请函」相约广州!科东软件诚邀您参加2024亚洲电力展&亚洲新型电力及储能论坛

能源电力行业盛会-2024亚洲新型电力系统及储能展览会将于6月26日在广州广交会展馆B区一楼盛大开幕&#xff01;展会同期&#xff0c;由南方电网主办&#xff0c;科东软件协办的2024亚洲新型电力及储能论坛也将同步召开&#xff0c;高峰论坛将为能源领域提供领先的前瞻资讯、技术…

基于Java网上跳蚤市场系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f;感兴趣的可以先收藏起来&#xff0c;还…

【工具类的编写】

编写工具类 最近在写一个C的项目&#xff0c;发现编写项目的过程真是曲折&#xff0c;所以写通过博客方式来对本项目进行一个重新的梳理。以便于自己来更好的了解这个项目。 1. 时间类的编写 我们都知道在C中获取时间戳很简单&#xff0c;但是怎么把一个时间戳转换为我们平时…

精密机械中的滚珠螺杆与螺杆支撑座的完美配合!

螺杆支撑座和滚珠螺杆是机械设备中的重要部件。滚珠螺杆通常运用在自动化设备中&#xff0c;需高速运动、高精度定位均依靠它的优良性能&#xff0c;如机床&#xff0c;数控、工业机器人等机械设备。螺杆支撑座装在螺杆的两端&#xff0c;支撑座有两端&#xff0c;固定端和支撑…

线性代数|机器学习-P18快速下降奇异值

文章目录 1. 为什么要低秩矩阵 1. 为什么要低秩矩阵 我们的世界里面有很多数据&#xff0c;如果我们原封不动的发送数据&#xff0c;那么会导致数据量的增大&#xff0c;我们希望对数据进行压缩后再打包压缩&#xff0c;这样的话我们能够在带宽一定的情况下发送更多的数据&…