kafka基础概念

news2024/10/24 22:19:30

目录

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.coloradmin.cn/o/1842721.html

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

相关文章

【前端开发工具】VS Code安装和使用

文章目录 一、前言二、下载三、安装四、配置五、使用5.1 导入项目5.2 本地运行项目5.3 修改界面文案&#xff0c;验证效果5.4 添加日志打印5.5 代码调试5.6 代码提交到Git仓库 六、总结 一、前言 本文介绍一下在前端vue项目中&#xff0c;VS Code的安装和配置。 什么是VS Code…

最新版本的MathType软件2024最新和谐绿色版下载

&#x1f31f; 数学公式的美学&#xff0c;MathType全新升级&#xff01; 亲爱的笔记本小达人&#xff0c;你是否曾为在文档中插入美观又准确的数学公式而头疼&#xff1f;今天&#xff0c;我就来给你种草一个神奇的工具 —— 最新版本的MathType软件&#xff01;&#x1f389…

React Native性能优化红宝书

一、React Native介绍 React Native 是Facebook在React.js Conf2015 推出的开源框架&#xff0c;使用React和应用平台的原生功能来构建 Android 和 iOS 应用。通过 React Native&#xff0c;可以使用 JavaScript 来访问移动平台的 API&#xff0c;使用 React 组件来描述 UI 的…

PhotoShop自动生成号码牌文件

1、说明 设计卡牌的时候&#xff0c;遇到自动生成编号&#xff0c;从01500到-02500&#xff0c;一个一个的手写&#xff0c;在存储保存成psd格式的文件&#xff0c;会很耗时。 下面将介绍如何使用ps自动生成psd格式的文件 2、使用excle生成数字 从01500到-02500 第一步&…

华为---VLAN-配置Eth-Trunk链路聚合(三)

6.3 配置Eth-Trunk链路聚合 6.3.1 原理概述 在没有使用Eth-Trunk前&#xff0c;百兆以太网的双绞线在两个互连的网络设备间的带宽仅为100Mbit/s。若想达到更高的数据传输速率&#xff0c;则需要更换传输媒介&#xff0c;使用千兆光纤或升级成为千兆以太网。这样的解决方案成本…

浙江农林大学2024年成人高等继续教育招生简章

浙江农林大学&#xff0c;作为浙江省内享有盛誉的高等学府&#xff0c;一直以其深厚的学术底蕴和严谨的教学态度为广大学子所赞誉。近年来&#xff0c;随着社会对高素质、专业化人才的需求日益增长&#xff0c;成人高等继续教育逐渐成为越来越多人提升自身综合素质、拓宽职业发…

Mybatis save、saveOrUpdate、update的区别

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 1. save方法 Mybatis的save方法用于插入一条新的记录。当数据库中不存在相同的记录时&#xff0c;会执行插入操作&#xff1b;如果已经存在相同的记录&#xff0c;则会抛出异常。 int result sqlSession.insert(&…

SAP 接口-联行号主数据维护接口【MDM->SAP】开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

接口映射字段 开发通用说明 根据接口传输字段【MDMWHLX 维护类型】=0则调用联行号创建【BAPI_BANK_CREATE】【前台事务码FI01】对联行号进行创建; 根据接口传输字段【MDMWHLX 维护类型】=1时则调用联行号修改【BAPI_BANK_CREATE】【前台事务码FI02】对联行号进行修改; 开发…

易优CMS网站如何打包备份(搬家教程)

易优CMS网站如何打包备份(搬家教程) 1. 搬家前备份数据库 2.删除install_********目录下的install.lock文件 3.再改名install_1540256968 为install 4.删除data untime所有文件夹 5.打包根目录下所有文件&#xff0c;上传空间解压即可安装 注&#xff1a;安装后直接进入后台…

视频二维码怎么设置全屏播放?默认全屏效果的添加技巧

视频做成二维码如何全屏展示呢&#xff1f;现在很多人都会将视频生成二维码后&#xff0c;分享二维码给其他人来扫码查看视频内容&#xff0c;设置视频默认全屏播放可以带来展示更好的效果&#xff0c;那么横版和竖版视频扫码自动全屏播放是如何生成的呢&#xff1f; 视频二维…

嵌入式开发者转战AI大模型,是机遇还是挑战?

前言 在当今日新月异的科技浪潮中&#xff0c;人工智能&#xff08;AI&#xff09;大模型无疑是技术前沿的明星领域&#xff0c;它们以其卓越的性能和广泛的应用前景&#xff0c;吸引了全球范围内的关注。对于嵌入式开发者而言&#xff0c;从熟悉的硬件嵌入式领域转战AI大模型…

【专利】一种光伏加工产品缺陷检测方法

申请号CN202410053862.4公开号&#xff08;公开&#xff09;CN118037635A申请日2024.01.12申请人&#xff08;公开&#xff09;超音速人工智能科技股份有限公司发明人&#xff08;公开&#xff09;张俊峰(总); 叶长春(总); 许春夏 摘要 本发明公开一种光伏加工产品缺陷检测方…

今天碰到一个gitee的严重问题

今天碰到一个gitee的严重问题 今天访问gitee的官网&#xff0c;无法访问… 代码无法提交 接下来 接下来 gitee的客服给我说 不知道哪天会不会代码直接没了 不知道哪天会不会代码直接没了

高效电商数据分析:电商爬虫API与大数据技术的融合应用

一、引言 随着电子商务的迅猛发展和数据量的爆炸式增长&#xff0c;电商数据分析已成为企业决策的关键依据。在竞争激烈的电商市场中&#xff0c;如何高效、准确地获取并分析数据&#xff0c;以洞察市场趋势、优化运营策略、提升用户体验&#xff0c;成为电商企业面临的重要挑…

【机器学习】Transformer框架理论详解和代码实现

1. 引言 1.1.讨论背景 在本文中&#xff0c;我们将深入探讨近两年最具影响力的架构之一&#xff1a;Transformer模型。自从2017年Vaswani等人发表划时代论文《Attention Is All You Need》以来&#xff0c;Transformer架构便在众多领域&#xff0c;尤其是自然语言处理&#x…

中欧科学家论坛暨第六届人工智能与先进制造国际会议(AIAM2024)

会议日期&#xff1a;2024年10月20-21日 会议地点&#xff1a;德国-法兰克福 会议官网&#xff1a;https://www.iaast.cn/meet/home/Bx130JiM 出版检索&#xff1a;EI、Scopus等数据库收录 【会议简介】 “中欧科学家论坛”由德国、法国、荷兰、瑞士、丹麦、意大利、西班牙…

golang去掉前后空格

str : " ce s "str strings.TrimSpace(str)fmt.Printf("--%v--", str)

新起之星——零信任沙箱

零信任沙箱作为一种新兴的安全防护技术&#xff0c;近年来在多个领域得到了广泛应用。特别是在网络安全、数据安全以及企业数字化转型等领域&#xff0c;零信任沙箱以其独特的优势和特点&#xff0c;受到了众多企业和机构的青睐。 在网络安全领域&#xff0c;零信任沙箱的应用尤…

深入浅出Git原理与Gitflow流程

1 Git原理 版本控制系统在软件开发和团队协作中扮演着至关重要的角色。它们帮助开发人员跟踪和管理代码的变化&#xff0c;协调多人同时编辑同一代码库&#xff0c;回溯历史版本&#xff0c;并解决代码冲突等问题。Git作为当今最流行的分布式版本控制系统&#xff0c;为开发人…

10W+人都在看的年度技术精选、游戏行业安全、私域、AI实践指南报告整合,码住!

在网易工作了十多年&#xff0c;不说别的&#xff0c;小智在这里光学习就学习到很多干货&#xff0c;今天将这些干货内容统一分享给同仁&#xff01;真的是集齐精华&#xff0c;大家先点赞收藏关注&#x1f44d; 往年&#xff0c;基于网易数智在娱乐社交、游戏、泛零售、政务、…