kafka 的一些问题,夺命15连问后续

16、kafka是如何做到高效读写

因为kafka本身就是分布式集群,可以采用分区技术,并行度高

读取数据可以采用稀疏索引,可以快速定位要消费的数据(mysql中索引多了以后,写入速度就慢了)

可以顺序写磁盘:

Kafka的producer生产数据,要写到log文件中,写的过程是文件一直追加到文件末端,为书写顺序

缓存页+零拷贝技术:

零拷贝:kafka的数据加工处理操作交由生产者和消费者处理,border应用层不关心储存的数据,所以就不用走应用层,传输速率高

pangCache页缓存:kafka高度依赖层操作系统,当上层有写操作时,操作系统只是将数据写入pageCache 当读写操作发生时,先从PageCahe中查找,如果找不到,再去磁盘中读取,实际是吧尽可能多的空闲内存都用来当作磁盘使用

生产者将数据发送给kafka,kafka将数据交给Linux内核,Linux内核将数据放入自身操作系统的页缓存中,然后到一定值写入磁盘,假如消费者过来消费,直接从页缓存中,通过网卡发送给消费者,根本就没有去kafka的业务系统中获取数据,所以速度比较快

17、Kafka集群中数据的存储是按照什么方式存储的?

topic数据的存储机制:

一个主题下的分为多个分区partation,每个partation下对应的有一个log文件,log文件中存储的就是producer生产的数据,分区产生的数据会不断的追加到log文件的末端,为了防止log文件过大导致数据定位效率低下,kafka采取了分片和索引机制,将每一个分区分为多个segment,每个segment文件包括:索引(index)、log文件、timeidex文件,这些文件位于一个文件夹下该文件的命名规则为:topic名称+分区序号。

topic储存到:hadoop11(或者 hadoop12、hadoop13)的/opt/installs/kafka3/datas/first-1 (first-0、first-2)路径上的文件

ompact 日志压缩(合并的意思,不是真的压缩)

compact日志压缩:对于相同key的不同value值,只保留最后一个版本。

log.cleanup.policy = compact 所有数据启用压缩策略

压缩后的offset可能是不连续的,比如上图中没有6,当从这些offset消费消息时,将会拿到比这个offset大的offset对应的消息,实际上会拿到offset为7的消息,并从这个位置开始消费。

这种策略只适合特殊场景,比如消息的key是用户ID,value是用户的资料,通过这种压缩策略,整个消息集里就保存了所有用户最新的资料。

比如:张三 去年18岁,今年19岁,这种场景下可以进行压缩。

18、kafka中是如何快速定位到一个offset的。

从0.9版本开始,consumer默认将offset保存在kafka一个内置的topic中(——consumer——offsets)

(topic 其实就是数据,就是位置 topic—log——segent的一个个文件)

0.9之前 consumer默认将offer保存在zookeeper中

0.11版本高于kafka.,想要重置 kafka要 kafka logs datas zk中的kafka文件删除掉

1、根据目标offset定位Segment文件

2、找到小于等于目标offset的最大offset对应的索引项

3、定位到log文件

4、向下遍历找到目标Record

19、简述kafka中的数据清理策略。

但是文件过大也不能使用,需要清理,数据的清理策略:

Kafka 中默认的日志(这个地方是数据的意思,就是Segment)保存时间为 7 天,可以通过调整如下参数修改保存时间

log.retention.hours,最低优先级小时,默认 7 天。

log.retention.minutes,分钟。 --如果设置了该值,小时的设置不起作用。

log.retention.ms,最高优先级毫秒。 --如果设置了该值,分钟的设置不起作用。

log.retention.check.interval.ms,负责设置检查周期,默认 5 分钟

清理方法:

1、delete删除日志:将过期的数据删除

  1):基于时间,默认打开的,以segment中所有记录中的最大时间戳作为文件的时间戳(时间到期的数据会被删除,但是当一个文件中有老数据和新数据的时候,时间戳会变成最新的数据,那个数据的文件夹就不会被删除)

  2):基于大小,默认关闭的超过设置的所有文件日志大小删除最早的segment

  log.retention.bytes,默认等于-1,表示无穷大。

如果一个 segment 中有一部分数据过期,一部分没有过期,怎么处理?

删除没有含有新数据的文件,含有新数据的文件不会删除

20、消费者组和分区数之间的关系是怎样的?

一个消费者组由多个消费者组成,一个topic由多个生产者组成

kafka由四种主流的分区分配策略:Range,oundRobin(轮询)、Sticky(粘性)、CooperativeSticky(配合的粘性)。 可以通过调参数来修改分区策略,partition.assignment.strategy,修改分区的分配策略。默认策略是Range + CooperativeSticky。

消费者组是由多个consumer组成的。

首先,消费者组内每个消费者负责消费不同分区的数据,一个分区只能由组内一个消费者消费。

其次,消费者组之间互不影响。所有的消费者都属于某个消费者组。

21、kafka如何知道哪个消费者消费哪个分区?

生产者把数据发送给各个分区,每个broker节点都有一个coordinator(协调器)。

消费者组对分区进行消费,消费规则是:

1、首先groupId对50取模,看最后的结果是哪个分区节点,假如是1分区,那么1分区的协调器就是本次消费者组的老大

2、其次每个消费者会向该协调器进行注册,协调器会从中随机选择一个消费者作为本次消费的Leader,然后把本次消费的具体情况发送给Leader,让其制定一个消费计划(就是哪个消费者消费哪个分区)

3、最后Leader发送给协调器,协调器再进行群发,将计划公布,各个消费者按照这个计划进行消费。

22、kafka消费者的消费分区策略有哪些,默认是个?

默认:默认策略是Range + CooperativeSticky。

Range分区策略原理:

把分区对消费者取模,多的按第一个消费到最后一个消费者顺序依次分配,但是topic越多,c0消费者的分区会比其他消费者明显多消费n个分区,容易产生数据倾斜

RoundRobin(轮询) 以及再平衡:

采用轮询分区策略,把所有的分区和所有的消费者列出来,然后按照hashcode进行排序,最后经过轮询的方法进行分配,按照顺序每个消费者依次分一个,直到分完。

Sticky 以及再平衡 :

粘性分区定义:可以理解为分配的结果带有“粘性的”。即在执行一次新的分配之前, 考虑上一次分配的结果,尽量少的调整分配的变动,可以节省大量的开销。 粘性分区是 Kafka 从 0.11.x 版本开始引入这种分配策略,首先会尽量均衡的放置分区 到消费者上面,在出现同一消费者组内消费者出现问题的时候,会尽量保持原有分配的分区不变化。

CooperativeSticky 的解释【新的kafka中刚添加的策略】:

在消费过程中,会根据消费的偏移量情况进行重新再平衡,也就是粘性分区,运行过程中还会根据消费的实际情况重新分配消费者,直到平衡为止。

好处是:负载均衡,不好的地方是:多次平衡浪费性能。

动态平衡,在消费过程中,实施再平衡,而不是定下来,等某个消费者退出再平衡。

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

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

相关文章

Vue Cli 脚手架目录文件介绍

小试牛刀 //vetur高亮; vuetab 快速生成 <template><div class"box">我是个盒子<button click"fn">按钮</button></div> </template><script> export default {methods:{fn(){alert("Hello Vue")}} …

基于springboot的家装平台设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

Docker平台搭建方法

Docker平台搭建方法 1.1在VMware中创建两个虚拟机&#xff0c;只需要1个网卡&#xff0c;连接192.168.200.0网络。 虚拟机分配2个CPU,2G内存&#xff0c;60G硬盘&#xff0c;主机名分别为server和client,IP地址分别为192.168.200.137和192.168.200.138。server节点还兼做regis…

cache(二)直接缓存映射

在知乎发现一份不错得学习资料 请教CPU的cache中关于line,block,index等的理解&#xff1f; PPT 地址 https%3A//cs.slu.edu/%7Efritts/CSCI224_S15/schedule/chap6-cache-memory.pptx 课程主页 https://cs.slu.edu/~fritts/CSCI224_S15/schedule/ 0. 缓存定义 这张图展示了缓…

Zookeeper的安装与使用

一、简介 1.1、概念 ZooKeeper 是一个开源的分布式协调服务&#xff0c;主要用于解决分布式系统中的数据一致性问题。它提供了一种可靠的机制来管理和协调分布式系统的各个节点。ZooKeeper 的设计目标是简化分布式应用的开发&#xff0c;提供简单易用的接口和高性能、高稳定性…

SQLI LABS | Less-41 GET-BLIND Based-Intiger-Stacked

关注这个靶场的其它相关笔记&#xff1a;SQLI LABS —— 靶场笔记合集-CSDN博客 0x01&#xff1a;过关流程 输入下面的链接进入靶场&#xff08;如果你的地址和我不一样&#xff0c;按照你本地的环境来&#xff09;&#xff1a; http://localhost/sqli-labs/Less-41/ 本关是堆…

SpringCloud 微服务消息队列灰度方案 (RocketMQ 4.x)

目录 背景遇到的问题 RocketMQ 基础基础消息模型扩展后的消息模型部署模型相关概念点 方案对比影子Topic的方案Tag的方案UserProperty的方案影子Group的方案灰度分区的方案方案对比 灰度分区方案设计适配只有部分灰度的情况所做的功能扩展消费者&#xff08;无灰度&#xff09;…

Simulink对仿真数据进行FFT频谱分析

1 问题引入 在仿真阶段&#xff0c;经常会遇到有些仿真结果的数据需要进行频谱分析&#xff0c;如何快速便捷地操作&#xff0c;这里介绍其中一种简单的方法。主要利用 Simulink 中 Scope 显示的数据进行保存并进行 FFT 频谱分析&#xff0c;按下文操作即可。 2 实战 2.1 将…

Vue前端开发:gsap动画库

gsap它的全称是GreenSock Animation Platform&#xff0c;它是一个功能非常强大的动画平台&#xff0c;它可以对JavaScript操作的所有内容实现动画效果&#xff0c;同时&#xff0c;还解决了不同浏览器中存在的兼容性问题&#xff0c;而且速度和效率都非常快&#xff0c;全球超…

【layui】echart的简单使用

图表类型切换&#xff08;柱形图和折线图相互切换&#xff09; <title>会员数据</title><div class"layui-card layadmin-header"><div class"layui-breadcrumb" lay-filter"breadcrumb"><a lay-href""&g…

[Redis] Redis缓存机制

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

绘制3D图

一个 3D 函数的表面图&#xff0c;其中包含向量场。 Python 代码示例&#xff0c;使用 matplotlib 和 numpy 库来绘制类似的图。 python 复制代码 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D# 生成网格 x np.linspace(-…

【开源免费】基于SpringBoot+Vue.JS课程答疑系统(JAVA毕业设计)

博主说明&#xff1a;本文项目编号 T 070 &#xff0c;文末自助获取源码 \color{red}{T070&#xff0c;文末自助获取源码} T070&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…

C#开发流程

注&#xff1a;检查数据库链接 设置搜索 1.新建模块文件夹 对应应用 右键-添加-新建文件夹 2.新建类 在新建模块下右键 新建-类&#xff0c;修改类名称 修改internal为public 新建所需字段&#xff0c;注意类型声明及必填设置 [SugarColumn(IsNullable false)]public strin…

【Transformer】模型输出模块处理

目录 输出处理模块步骤1. 交叉注意力后的输出向量2. 线性变换&#xff08;投影&#xff09;3. Softmax 操作4. 选择最大概率的单词5. 输出词并进入下一轮预测总结&#xff1a; 线性变换详解1. 交叉注意力后的输出向量2. 线性层的参数3. 线性变换的计算4. Softmax 转换为概率示例…

对话流式数据加载

需求&#xff1a;根据接口返回的数据进行类似打字机渲染的效果 使用的fetch 流式处理 fetch(BASE_URL/api/apps/ this.app_Id /chat-messages, {signal: this.controller.signal,method: POST,headers: {Authorization: Bearer localStorage.getItem(token),Content-Type: …

关于git使用的图文教程(包括基本使用,处理冲突问题等等)超详细

目录 用户签名,初始化git git提交流程图 提交到本地库 版本穿梭 分支操作 分支合并冲突 团队协作 github的使用 推送代码 克隆 拉取代码 团队协作冲突 团队协作之分支管理 推送分支到分支&#xff1a; 拉去远程库分支到本地库&#xff1a; 本地删除远程分支&am…

6、If、While、For、Switch

6、If、While、For、Switch 一、If 1、if-else if (boolean) {代码块 } else if (boolean) {代码块 } else if (boolean) {代码块 } else { // 默认情况代码块 }关于IDEA单元测试控制台不能输入数据的问题&#xff1a; https://blog.csdn.net/m0_72900498/article/details/…

【智谱开放平台-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

贪心算法day05(k次取反后最大数组和 田径赛马)

目录 1.k次取反后最大化的数组和 2.按身高排序 3.优势洗牌 1.k次取反后最大化的数组和 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 代码&#xff1a; class Solution {public int largestSumAfterKNegations(int[] nums, int k) {//如…