Kafka架构

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。

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

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

相关文章

springboot基于keytool实现https的双向认证

一、环境准备 服务器信息如下: 操作系统说明server-one服务器1server-two服务器2 二、keytool命令解释 -genkey 表示要创建一个新的密钥。 -alias 表示 keystore 的别名。 -keyalg 表示使用的加密算法是 RSA ,一种非对称加密算法。 -keysize 表示密…

计算机网络 - 第一章(下)

1.2_1 分层结构、协议、接口、服务_哔哩哔哩_bilibili1.2_1 分层结构、协议、接口、服务是王道计算机考研 计算机网络的第7集视频,该合集共计76集,视频收藏或关注UP主,及时了解更多相关视频内容。https://www.bilibili.com/video/BV19E411D78…

【vue】vue高性能虚拟滚动列表【vue2和vue3版组件封装】

项目场景: 当前页显示100w多条数据,不做分页的情况进行渲染。加载和渲染页面会非常慢,滚动也非常卡顿 解决方案: 1.渲染可视窗口的列表,其他列表不进行渲染。通过修改偏移量高度进行滚动列表。 2.分段插入&#xff0…

MySQL—SQL优化详解(上)

♥️作者:小刘在C站 ♥️个人主页: 小刘主页 ♥️努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏&#xf…

Flink入门学习(一)

Flink 1. 概述 分布式、高性能、随时可用以及准确的流处理应用程序打造的开源流处理框架,用于对无界和有界数据流进行有状态计算。Flink 被设计在所有常见的集群环境中运行,以内存执行速度和任意规模来执行计算。 有界流:有定义流的开始&am…

Springboot 集成Prometheus 数据采集 使用grafana 监控报告告警 邮件配置

目录 Springboot 相关 Pom 重点包 如果有需要可以增加安全包-一般内部机房没啥事-(非必选) Application.yml配置文件-(非必选) Application.properties management.endpoints.web.exposure.include介绍 启动类 查看监控信…

用于语义图像分割的弱监督和半监督学习:弱监督期望最大化方法

这时一篇2015年的论文,但是他却是最早提出在语义分割中使用弱监督和半监督的方法,SAM的火爆证明了弱监督和半监督的学习方法也可以用在分割上。 这篇论文只有图像级标签或边界框标签作为弱/半监督学习的输入。使用期望最大化(EM)方法,用于弱…

【Solr】中文分词配置

提示:在设置中文分词前需确保已经生成过core,未生成core的可以使用:solr create -c "自定义名称"进行定义。 未分词前的效果预览: 下载分词器: 下载地址: https://mvnrepository.com/artifact/com.github.m…

Spring Cloud 之注册中心 Eureka 精讲

🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…

nginx配置开机启动(Windows环境)

文章目录 1、下载nginx,并解压2、配置nginx.conf,并启动Nginx3、开机自启动 1、下载nginx,并解压 2、配置nginx.conf,并启动Nginx 两种方法: 方法一:直接双击nginx.exe,双击后一个黑色弹窗一闪…

ELK日志收集系统集群实验

ELK日志收集系统集群实验 目录 一、实验拓扑 二、环境配置 三、 安装node1与node2节点的elasticsearch 1. 安装 2.配置 3.启动elasticsearch服务 4.查看节点信息 四、在node1安装elasticsearch-head插件 1.安装node 2.拷贝命令 3.安装elasticsearch-head 4.修改el…

【机器学习】十大算法之一 “PCA”

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

【夜深人静学数据结构与算法 | 第十一篇】枚举算法

目录 前言: 枚举算法: 优点: 枚举算法的种类: 枚举算法案例: 343. 整数拆分 - 力扣(LeetCode) 12. 整数转罗马数字 - 力扣(LeetCode) 总结: 前言&…

【手撕算法|动态规划系列No.1】leetcode1137. 第 N 个泰波那契数

个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

exe的python文件打包

【步骤01】 【在命令行中用pip工具安装Pyinstaller模块】 pip install Pyinstaller 步骤02】 【切换命令行的路径到你要打包的Python源文件的文件夹路径下】 【下面是我要打包的Python源文件(散点坐标图.py)及其文件夹路径】 【步骤03】 【执行Pyi…

使用SSH远程直连Docker容器

文章目录 1. 下载docker镜像2. 安装ssh服务3. 本地局域网测试4. 安装cpolar5. 配置公网访问地址6. SSH公网远程连接测试7.固定连接公网地址8. SSH固定地址连接测试 转载自cpolar极点云文章:SSH远程直连Docker容器 在某些特殊需求下,我们想ssh直接远程连接docker 容器…

SpringBoot 实现 elasticsearch 查询操作(RestHighLevelClient 的案例实战)

文章目录 1. 环境准备1. 查询全部2. 根据 name 查询 match 分词查询3. 根据 name 和 品牌查询 multiMatch 分词查询4. 根据 brand 查询 match 分词查询5. 按照价格 范围查询6. 精确查询7. boolQuery8. 分页9. 高亮查询9. 公共解析 上一节讲述了 SpringBoot 实现 elasticsearch …

【图像处理OpenCV(C++版)】——5.3 图像平滑之均值平滑(滤波)

前言: 😊😊😊欢迎来到本博客😊😊😊 🌟🌟🌟 本专栏主要结合OpenCV和C来实现一些基本的图像处理算法并详细解释各参数含义,适用于平时学习、工作快…

Linux终端与进程的关系 ( 1 ) -【Linux通信架构系列】

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 期待你的关注哦!!! 现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everything is for the…

C高级重点

1、请简要描述一下Linux文件系统的层级结构,包括不同目录的作用和功能。 Linux的文件系统结构是一个倒插树结构,所有的文件都从根目录出发。 2、find指令的用途 find 查找的路径 -name 文件名 ----->在指定路径下,以文件名为条件查找文…