深入理解kafka-1

news2024/11/23 14:51:14

kafka快速入门

  • 1、kafka简介
    • 1.1 kafka是什么
    • 1.2 kafka基础架构
    • 1.3 kafka模块概述
  • 2、kafkka结构剖析
    • 2.1 kafka工作流程
    • 2.2 kafka文件存储
      • 2.2.1 顺序写
      • 2.2.2 分片,索引
      • 2.2.3 页缓存
      • 2.2.4 零拷贝
    • 2.3 broker集群
      • 2.3.1 Controller控制器及选举机制
    • 2.4 生产者
      • 2.4.1 生产者分区策略
      • 2.4.2 ACK机制
    • 2.5 消费者
      • 2.5.1 消费者分区策略
      • 2.5.2 offset
      • 2.5.3 消费者组
    • 3、kafka总结

1、kafka简介

1.1 kafka是什么

分布式的发布订阅模式的消息队列

1.2 kafka基础架构

在这里插入图片描述

1.3 kafka模块概述

broker: 一台Kafka服务器就是一个Broker,一个集群由多个Broker组成,一个Broker可以容纳多个Topic
topic: kafka的消息主题,逻辑上的概念,用来进行消息分类(生产者和消费者对指定topic的逻辑)
partition: 分区,物理上的概念,一个topic有多个分区,用来进行横向拓展和提高并发
producer: 生产者,向Kafka中发布消息
consumer: 消费者,从Kafka中拉取消息消费的客户端
consumer group: 消费者组,一个消费者组被视为一个消费者,一条消息只能被一个消费者组中的某一个消费。
leader: 每个分区集的leader,负责生产者消息的存储,及消费者消息的消费
follower: 每个分区集的follower,实时的从Leader中同步数据,保持和Leader数据的同步,Leader发生故障的时候,某个Follower会成为新的Leader。
ISR: 有效的副本集(leader+follower),当某个副本长时间不与leader保持同步时,将会被剔除ISR;当leader发生故障时,从ISR中选举leader。

2、kafkka结构剖析

2.1 kafka工作流程

2.2 kafka文件存储

在这里插入图片描述

2.2.1 顺序写

kafka只能在日志文件的尾部追加新的消息,并且也不允许修改已写入的消息。
结果: 写入速度可以达到600MB/s,而随机写入速度只有100KB/s。

2.2.2 分片,索引

每个分区副本,实际对应一个存储的log文件;而为了防止log文件过大导致定位效率低下,log文件以1G为一个分界点,当.log文件大小超过1G的时候,此时会创建一个新的.log文件,同时为了快速定位大文件中消息位置,Kafka采取了分片和索引的机制来加速定位。

最后一个log文件为activeSegment,只对activeSegment进行追加写;当activeSegment大小满足条件时,则创建新的activeSegment。
在这里插入图片描述

此时快速定位数据步骤:

  • 首先通过二分查找.index文件到查找到当前消息具体的偏移,如上图所示,查找为2,发现第二个文件为6,则定位到一个文件中。
  • 然后通过第一个.index文件通过seek定位元素的位置3,定位到之后获取起始偏移量+当前文件大小=总的偏移量。
  • 获取到总的偏移量之后,直接定位到.log文件即可快速获得当前消息大小。

2.2.3 页缓存

操作系统的页缓存,将磁盘数据按页大小缓存到内存空间

2.2.4 零拷贝

在这里插入图片描述
正常过程:
1、磁盘读取到内核态缓存空间
2、内核态缓存读取到用户态缓存
3、用户态缓存读取到socket缓存
4、socket缓存复制到网卡中传输
在这里插入图片描述

零拷贝过程:
1、磁盘读取到内核态缓存空间
2、内核态复制到网卡中

2.3 broker集群

2.3.1 Controller控制器及选举机制

控制器: 本质上是一台broker,管理集群的分区副本状态;进行leader的选举;ISR发生变化时,通知broker更新元数据
初始过程: 每一台broker在启动过程中,会独取zookeeper的/controller的brokerId值,若存在则说明有了controller,缓存此时的brokerId;若不存在,或为-1,则尝试创建这个节点,若创建成功则成为controller。
leader选举策略: 在创建分区或分区上线时,从AR中取第一个副本,并且副本存在于ISR中。

2.4 生产者

2.4.1 生产者分区策略

  • 指定了partition,直接将指定的值作为partition的值
  • 指定了key,将key的hash值与topic的partition数进行取余得到partition值
  • 生成一个随机数,对随机数与分区数取余;之后将随机数递增,与分区数取余。

2.4.2 ACK机制

在这里插入图片描述

  • 0:producer不等待broker的ack,这一操作提供了最低的延迟,但broker接收到还没有写入磁盘就已经返回,当broker故障时有可能丢失数据。

  • 1:producer等待broker的ack,partition的leader落盘成功后返回ack,如果在follower同步成功之前leader故障,那么将丢失数据。(只是leader落盘)
    kafka默认的ACK,在吞吐量与可靠性之间做的取设。

  • -1(all):producer等待broker的ack,partition的leader和ISR的follower全部落盘成功才返回ack,但是如果在follower同步完成后,broker发送ack之前,如果leader发生故障,会造成数据重复。(这里的数据重复是因为没有收到,所以继续重发导致的数据重复)
    极端情况也可能数据丢失(ISR只有leader,发送完ack后leader故障)

2.5 消费者

2.5.1 消费者分区策略

  • round-robin循环: 将所有待分配的分区和消费者集合起来,按照hashcode排序,再进行轮询分配。
  • range: 以topic的纬度进行分区分配,列出topic的所有分区,轮询分配给订阅的消费者。

2.5.2 offset

消费者需要offset记录消费的位置,以在发生故障、重新分区分配后,能续着上一次消费的位置继续消费而不重复消费或发生消息丢失。
offset存储位置: kafka的内部topic,__consumer_offsets中。也可存储在其它位置(如db中),根据seek()方法重新指定消费位置。
offset commit问题:

  • 默认自动提交,当前批次的最大offset,可能导致消息丢失
  • 手动同步提交,降低吞吐量,可能导致重复消费
  • 手动异步提交,可能导致消息丢失

2.5.3 消费者组

消费者需指定一个消费者组,一个分区只能被同一个消费者组中的一个消费者消费。

3、kafka总结

在这里插入图片描述

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

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

相关文章

MCU-51:定时器

目录一、定时器介绍1.1 定时器的功能1.2 定时器的结构1.3 定时器框图二、定时器控制2.1 工作模式寄存器TMOD2.2 控制寄存器TCON三、中断系统3.1 中断系统介绍3.2 中断程序流程3.3 STC89C52中断资源四、应用4.1 定时器控制LED闪烁4.2 基于定时器按键控制LED流水灯4.3 定时器时钟…

C进阶 :征服指针之指针与数组强化笔试题练习(1)

目录 😼😸一.彻底明白 sizeof 操作符 ,数组名,strlen 函数 🐅1.数组名的意义 🐆2. sizeof 详解 🐋3.strlen详解 🦖3.数组名意义详细图解演示 🐱🙀二.关于…

使用JDBC+javafx写一个简单功能齐全的图书管理系统

目录 1、JDBC的使用 2、对应包和Java文件的层级关系及对应的含义 3、数据库 4、相关代码 1)、bookmanager包 Ⅰ、main函数 Ⅱ、utils包 Ⅲ、bean包 Ⅳ、controller包 2)resources(为资源文件包,可以看链接文章了解) Ⅰ、book包 Ⅱ、 login包…

嘘!P站数据分析年报;各省市疫情感染进度条;爱奇艺推出元宇宙App;You推出AI聊天机器人;GitHub今日热榜 | ShowMeAI资讯日报

👀日报合辑 | 🎡AI应用与工具大全 | 🔔公众号资料下载 | 🍩韩信子 📢 『The 2022 Year in Review』P站2022年度报告 Pornhub 发布了第 9 次年度报告,数据科学家们绘制了多张彩色可视化图表,回顾…

Spring注册Bean系列--方法3:@Import+@Bean

原文网址:Spring注册Bean系列--方法3:ImportBean_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Spring注册Bean的方法:ImportBean。 注册Bean的方法我写了一个系列,见:Spring注册Bean(提供Bean)系列--方法大全_IT利刃出鞘…

Redis-SDS

本文你能得到: 1 SDS基本介绍 。 2 SDS与 C语言传统字符串的区别,为什么使用SDS。 3 SDS的结构和策略详解。 1 SDS 是什么?用来做什么? 1.1 ​ Redis没有直接使用C语言传统的字符串表示(以空字符结尾的字符数组&a…

[网络工程师]-STP

生成树协议(Spanning Tree Protocol,STP)是一种链路管理协议,为网络提供路径冗余,同时防止产生环路。交换机之间使用网桥协议数据单元(Bridge Protocol Data Unit,BPDU)来交换STP信息…

C语言中单井号(#)和双井号(##)在宏语句中的应用

在阅读Linux内核代码过程中,特别是一些预处理指令宏的时候,会看到宏语句里会包含一些# 或者是连着的## 符号,刚接触的时候觉得很一头雾水,但这些宏语句有时候绕不开,所以为了更好地读懂这些代码,很有必要仔…

头豹研究院发布《2022年腾讯安全威胁情报能力中心分析报告》:助力企业掌握安全防御主动权

12月23日,头豹研究院发布了《2022年腾讯安全威胁情报能力中心分析报告》(以下简称《报告》),深度研究了腾讯安全威胁情报能力建设、威胁情报能力应用、威胁情报价值实践方面的现状及成果,从专业视角分析腾讯安全威胁情…

全网首发!华为云UCS正式商用

日前,华为云UCS正式商用。华为云UCS是业界首个分布式云原生服务,支持对华为云集群、伙伴云集群、多云集群、本地集群和附着集群的统一管理,覆盖中心Region、专有Region、边缘云、客户数据中心和第三方云场景,提供无处不在的云原生…

深度学习02:损失函数总结

目录 nn.L1Loss: nn.NLLLoss: nn.MSELoss: nn.CrossEntropyLoss: 损失函数是用来估量模型的预测值与真实值的不一致程度,它是一个非负实值函数。我们训练模型的过程,就是通过不断的迭代计算,使用梯度下降的优化算法,使得损失函…

Day 05- Vue3 Vue2响应式原理

Vue2的响应式 核心:通过 Object.defineProtytype() 对对象的已有属性值的读取和修改进行劫持; 数据劫持 --> 给对象扩展属性 --> 属性设置 实现原理: 对象类型:通过Object.defineProperty()对属性的读取、修改进行拦截…

风控黑名单库的使用与判断指南

反欺诈策略中有一类策略是专门针对黑名单用户的,我们称之为黑名单命中策略。 一、黑名单定义 黑名单是对严重逾期、骗贷、失联、诈骗等系列高风险客群构建的名单,即为明确非意向客群的名单。黑名单也是反欺诈的第一道防线,可以有效识别黑产客…

近些年大火的零信任,落地情况怎么样?

疫情以来      居家办公、远程工作需求激增      企业IT环境变得更加复杂      在此背景下      以“持续验证,永不信任”为核心的      零信任火爆出圈      引得国内外企业机构纷纷布局      然而根据戴尔2022全球数据保护指数(GDPI),尽管91%的组…

使用FFmpeg+go搭建m3u8点播服务器

一. 前言 HLS(HTTP Live Streaming) 是苹果公司提出的基于 HTTP 的流媒体传输协议,它的工作原理是将整个文件切分成一个个小的文件(通常是 TS 格式文件),客户端通过 HTTP 下载播放。在准备播放某个 m3u8 媒…

Linux系统运行时参数命令--Linux基础命令和工具

目录 1 Linux基础命令和工具 1.1 grep搜索字符 1.2 find查找文件 1.3 ls显示文件 1.4 wc命令 1.5 ulimit用户资源 1.6 scp远程拷贝 1.7 dos2unix和unix2dos 1.8 sed 行处理 简单模式 替换模式 1.9 awk 列处理 C/CLinux服务器开发/后台架构师【零声教育】-学习视频…

车载软件架构—CP和AP相同与不同

文章目录 前言一、两者不同之处二、两者架构设计原则总结前言 AUTOSAR(AUTmotive Open System ARchitecture) 是汽车电子E/E系统发展的一个重要的节点。该标准是由包括BMW、DAIMLER、GM、TOYOTA、福特等主机厂和包括博世、大陆等供应商牵头成立的一个标准发展组织定义的一个开…

45页智慧交通数字化解决方案2022

【版权声明】本资料来源网络,仅用于行业知识分享,供个人学习参考,请勿商用。【侵删致歉】如有侵权请联系小编,将在收到信息后第一时间进行删除! 完整资料领取见文末,部分资料内容: 项目建设目标…

RabbitMQ简单模式

🍁博客主页:👉不会压弯的小飞侠 ✨欢迎关注:👉点赞👍收藏⭐留言✒ ✨系列专栏:👉Linux专栏 🔥欢迎大佬指正,一起学习!一起加油! 目录&…

20 个常用的 pandas 使用技巧

大家好,我是小寒。 今天来分享 20 个常用的 pandas 使用技巧。如果觉得不错,点赞、转发安排起来。 1、以 Markdown 格式输出 DataFrame import pandas as pddf pd.DataFrame({a: [1, 2, 3, 4],b: [5, 6, 7, 8]})# You can control the printing of th…