Kafka架构

news2024/11/17 11:46:32

5.kafka系统的架构

5.1主题topic和分区partition

  • topic

Kafka中存储数据的逻辑分类;你可以理解为数据库中的概念;

比如,将app端日志、微信小程序端日志、业务库订单表数据分别放入不同的topic

  • partition分区(提升kafka吞吐量)

topic中数据的具体管理单元;(你可以理解为hbase中表的“region"概念)

- 每个partition由一个kafka broker服务器管理;

- 每个topic 可以划分为多个partition,分布到多个broker上管理;

- 每个partition都可以有多个副本;保证数据安全

分区对于 kafka 集群的好处是:实现topic数据的负载均衡。提高写入、读出的并发度,提高吞吐量。

  • 分区副本replica

每个topic的每个partition都可以配置多个副本(replica),以提高数据的可靠性

每个partition的所有副本中,必有一个leader副本,其他的就是follower副本(observer副本);follower定期找leader同步最新的数据;对外提供服务只有leader

  • 分区follower 

partition replica中的一个角色,它通过心跳通信不断从leader中拉取、复制数据(只负责备份)。

如果leader所在节点宕机,follower中会选举出新的leader;

  • 消息偏移量offset

partition内部每条消息都会被分配一个递增id(offset);通过offset可以快速定位到消息的存储位置;

kafka 只保证按一个partition中的消息的顺序,不保证一个 topic的整体(多个partition 间)的顺序。

我们在说到偏移量的时候,是哪一个topic的哪一个分区的哪一个,偏移量他的数据只能追加,不能被修改

自我推导设计:

  • kafka是用来存数据的;
  • 现实世界数据有分类,所以存储系统也应有数据分类管理功能,如mysql的表;kafka有topic;
  • 如一个topic的数据全部交给一台server存储和管理,则读写吞吐量有限;
  • 所以,一个topic的数据应该可以分成多个部分(partition)分别交给多台server存储和管理;
  • 如一台server宕机,这台server负责的partition将不可用,所以,一个partition应有多个副本;
  • 一个partition有多个副本,则副本间的数据一致性难以保证,因此要有一个leader统领读写;
  • 一个leader万一挂掉,则该partition又不可用,因此还要有leader的动态选举机制;
  • 集群有哪些topic,topic有哪几个分区,server在线情况,等等元信息和状态信息需要在集群内部及客户端之间共享,则引入了zookeeper;
  • 客户端在读取数据时,往往需要知道自己所读取到的位置,因而要引入消息偏移量维护机制;

broker服务器:一台 kafka服务器就是一个broker。一个kafka集群由多个 broker 组成。

生产者producer:消息生产者,就是向kafka broker发消息的客户端。

消费者consumer

  • consumer :消费者,从kafka broker 取消息的客户端。
  • consumer group:消费组,单个或多个consumer可以组成一个消费组;

消费组是用来实现消息的广播(发给所有的 consumer)和单播(发给任意一个 consumer)的手段;

消费者可以对消费到的消息位置(消息偏移量)进行记录;

老版本是记录在zookeeper中;新版本是记录在kafka中一个内置的topic中(__consumer_offsets)

5.2kafka的数据存储结构    kafka的数据存在哪?

5.2.1kafka的整体存储结构

物理存储目录结构         __consumer_offset  

存储目录 名称规范:  topic名称-分区号

注:“t1"即为一个topic的名称;

“t1-0 / t1-1"则表明这个目录是t1这个topic的哪个partition

  • 数据文件 名称规范:

生产者生产的消息会不断追加到log文件末尾,为防止log文件过大导致数据定位效率低下,Kafka采取了分片和索引机制

  1. 每个partition的数据将分为多个segment存储
  1. 每个segment对应两个文件:“.index"文件和“.log"文件。

index和log文件以当前segment的第一条消息的offset命名。

index索引文件中的数据为:  消息offset -> log文件中该消息的物理偏移量位置;

Kafka 中的索引文件以稀疏索引( sparse index )的方式构造消息的索引,它并不保证每个消息在索引文件中都有对应的索引;每当写入一定量(由 broker 端参数 log.index.interval.bytes 指定,默认值为 4096 ,即 4KB )的消息时,偏移量索引文件和时间戳索引文件分别增加一个偏移量索引项和时间戳索引项,增大或减小 log.index.interval.bytes的值,对应地可以缩小或增加索引项的密度;

查询指定偏移量时,使用二分查找法来快速定位偏移量的位置。

 5.2.2消息message存储结构

在客户端编程代码中,消息的封装类有两种:ProducerRecord、ConsumerRecord;

简单来说,kafka中的每个massage由一对key-value构成;

Kafka中的message格式经历了3个版本的变化了:v0 、 v1 、 v2  

各个字段的含义介绍如下:

  • crc:占用4个字节,主要用于校验消息的内容;
  • magic:这个占用1个字节,主要用于标识日志格式版本号,此版本的magic值为1
  • attributes:占用1个字节,这里面存储了消息压缩使用的编码以及Timestamp类型。目前Kafka 支持 gzip、snappy 以及 lz4(0.8.2引入) 三种压缩格式;[0,1,2]三位bit表示压缩类型。[3]位表示时间戳类型(0,create time;1,append time),[4,5,6,7]位保留;
  • key length:占用4个字节。主要标识 Key的内容的长度;
  • key:占用 N个字节,存储的是 key 的具体内容;
  • value length:占用4个字节。主要标识 value 的内容的长度;
  • value:value即是消息的真实内容,在 Kafka 中这个也叫做payload。

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

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

相关文章

【Proteus仿真】常用器件名称

前言 我常用的仿真器件加上收集的,基于Proteus8.13版本。以下分为两部分,内容都一样,一部分是纯文字,一部分是文字图片,方便快速获取和定位。等积累了更多的器件后会在更新的。搜索时可以用CtrlF快速查找。 命名的规则…

管理类联考——英语二——技巧篇——写作——B节——议论文——必备替换句型

议论文必备替换句型 (一)表示很明显/众所周知的句型 It is obvious thatIt is clear thatIt is apparent thatIt is evident thatlt is self-evident thatIt is manifest thatIt is well-knownIt is known to all thatIt is widely-accepted thatIt is crystal-cl…

三层交换机互联互通配置 华为交换机

#三层交换机互联互通 交换机配置 命令 #进入系统视图 <Huawei>system-view #关闭系统提示信息 [Huawei]undo info-center enable #创建三个Vlan10 [Huawei]vlan 10 [Huawei-vlan10]quit [Huawei]vlan 20 [Huawei-vlan20]quit [Huawei]vlan 30 [Huawei-vlan30]quit #接…

2023六月第二周(juc知识点记录)

1、多线程资源竞争 先创建资源类&#xff0c;并给线程加锁&#xff0c;推荐使用reatrantlock&#xff0c;然后写业务&#xff0c; 加锁了说明肯定要有执行条件&#xff0c;例如抢到锁还要判断库存必须大于0&#xff0c; 否则线程等待await,然后执行业务&#xff0c;最后创建多个…

一分钟图情论文:《运用服务场景模型理解挪威学术图书馆中的学生体验》

一分钟图情论文&#xff1a;《Applying the servicescape model to understand student experiences of a Norwegian academic library》 1981年&#xff0c;Booms, B. H.和Bitner, M. J.1在一篇市场营销学科的论文中引入了Servicescape模型&#xff0c;用于描述和分析服务场所…

无线供电原理、种类及应用方案介绍

目录 一、无线供电种类 二、无线供电的原理 磁共振技术的电路组成 微波能量传输 三、无线供电的优势 四、市场应用 五、市场趋势 参考文献 一、无线供电种类 包含电磁场耦合能量传输&#xff08;电磁磁感应&#xff08;近场供电&#xff09;、磁共振&#xff08;远场供…

easyX库颜色模型和颜色及样式设置相关函数(注释版)

0.颜色模型和颜色及样式设置相关函数概览 本次我给你带了easyX库系列的颜色模型和样式设置的相关函数&#xff0c;希望您能看得开心。 函数或数据类型描述LINESTYLE画线样式对象。FILLSTYLE填充样式对象。setbkcolor设置当前设备绘图背景色。setlinecolor设置当前设备画线颜色…

[易语言][原创]使用易语言部署yolov8的onnx模型

易语言部署yolo系列模型&#xff0c;现在网上有很多但是他们不够简洁也不够专业&#xff0c;有人专门把opencv封装成易语言支持库然后用opencv在易语言端写&#xff0c;其实这种效率没有在C直接推理效率高&#xff0c;因为易语言往C传递图像数据集是需要转换图像数据集格式才能…

十一、docker学习-docker核心之docker网络(1)

docker网络 当开始大规模使用docker时&#xff0c;你会发现需要了解很多关于网络的知识。docker作为目前最火的轻量级容器技术&#xff0c;有很多令人称道的功能&#xff0c;如docker的镜像管理。然而&#xff0c;docker同样有着很多不完善的地方&#xff0c;网络方面就是Dock…

Nexus搭建Maven私有库介绍

为什么需要Maven私有库&#xff1f; 使用Maven获取Java依赖包的时候&#xff0c; 默认是从Maven的中央库下载 jar文件&#xff0c; 中央库的地址是&#xff1a; https://repo.maven.apache.org/maven2 。 如果下载速度慢&#xff0c; 可以使用阿里的镜像&#xff0c; 地址如下…

[元带你学: eMMC协议详解 16] eMMC 安全方案 之 设备锁定(Lock) / 解锁(Unlock) 详解

依JEDEC eMMC 5.1及经验辛苦整理&#xff0c;付费内容&#xff0c;禁止转载。 所在专栏 《元带你学: eMMC协议详解》 内容摘要 全文 4100 字&#xff0c; 内容摘要 1. 锁定与解锁的概念&#xff1f; 2. 设置密码的方法和注意点&#xff1f; 3. 重置密码的方法和注意点&…

(Linux) WSL 适用于Linux的Windows子系统

文章目录 前言环境设置开发者选项启用或关闭Windows功能进入Microsoft应用商场下载下载完成开启PS: 查看运行效果 Linux基础配置环境缺失注册账号设置root账户密码常用环境的安装 VS Code 连接插件连接的快捷方式 END 前言 学习Linux的阻碍&#xff0c;往往第一步就是没有Linu…

Java实现图片的上传和显示

⭐简单说两句⭐ 作者&#xff1a;后端小知识 CSDN个人主页&#xff1a;后端小知识 &#x1f50e;GZH&#xff1a;后端小知识 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; 文章目录 &#x1f388;前言&#x1f384;前端&#xff1a;&#x1…

ESP32网络应用 -- ESP32-S3使用HTTP协议获取城市天气数据

超文本传输协议(Hypertext Transfer Protocol,HTTP),是一种建立在TCP协议之上,应用非常广泛的请求-响应协议,关于HTTP协议的详细描述,网上已经不乏文章,此处不再详细论述。 作为一款网络功能强大Wi-Fi SOC芯片,ESP32-S3可以通过ESP-IDF编程框架提供的应用程序接口,方…

腾讯云3年轻量应用服务器入口(不要一年的坑)

腾讯云轻量应用服务器2核2G4M和2核4G5M可以一次性选三年&#xff0c;3年轻量2核2G4M带宽396元三年、3年轻量2核4G5M服务器628元三年&#xff0c;轻量应用服务器第二年xufei贵&#xff0c;大家都知道&#xff0c;所以一次性选三年&#xff0c;毕竟限制条件是腾讯云新用户&#x…

8年测试超强整理,性能测试-压力测试-负载测试,卷起来...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 软件测试包括不同…

软件测试第一次做项目之银行项目【操作细节总结】

在我们的日常在金融或银行软件测试工作中都有哪些内容需要测试&#xff1f;在这些测试的内容中如何去更好的掌握测试技能保证测试质量&#xff0c;一起来学习探讨交流。 下面为银行测试点的概括&#xff1a; 根据上图&#xff0c;我们可以从以下几个方面重点关注&#xff1a; …

跨国能源公司如何成功地完成SAP S/4HANA迁移

哪种升级转换方法更适合跨国集团的S/4HANA 实施&#xff0c;如果数据需要选择性迁移&#xff0c;并且ERP系统的停机时间要降至最低&#xff1f;与 IBM 和 SNP 合作的客户Arauco Group&#xff0c;该企业的成功案例提供了一些启示。 ARAUCO是世界领先的可再生能源生产商之一&am…

Security 详解—原理(1)

1.简介&#xff1a; Spring 是非常流行和成功的 Java 应用开发框架&#xff0c;Spring Security 正是 Spring 家族中的成员。Spring Security 基于 Spring 框架&#xff0c;提供了一套 Web 应用安全性的完整解决方案。 1.1 特性&#xff1a; 支持对身份认证和访问鉴权的自定义…

不可盲目优化,否则不是缘木求鱼就是南辕北辙

作为在编码这块自留地里深耕多年的码农&#xff0c;凭借着自认为丰富的经验加上专业领域的博览群书&#xff0c;自觉对程序优化还是有点感觉、有点心得的。但最近的经历让我不得不感慨&#xff0c;“不听老人言&#xff0c;吃亏在眼前“还是很有道理的。 软件优化这件事&#x…