Kafka面试题解答(二)

1.怎么尽可能保证 Kafka 的可靠性

kafka是可能会出现数据丢失问题的,Leader维护了一个动态的in-sync replica set(ISR),意为和 Leader保持同步的Follower+Leader集合(leader:0,isr:0,1,2)。如果Follower长时间未向Leader发送通信请求或同步数据,则该Follower将被踢出ISR。该时间阈值由replica.lag.time.max.ms参数设定,默认30s。例如2超时,(leader:0, isr:0,1)。 这样就不用等长期联系不上或者已经故障的节点。

ISR: 可用的,存活的,Leader+Follower

如果分区副本设置为1个(只有一个leader),或者ISR里应答的最小副本数量 min.insync.replicas 默认为1 设置为1,和ack=1的效果是一样的,仍然有丢数的风险(leader:0,isr:0)。

综述, 数据完全可靠条件 = ACK级别设置为-1 + 分区副本大于等于2 + ISR里应答的最小副本数量大于等于2。副本数是2,但是ISR中不一定有两个,因为会挂掉。

2.Kafka中如何做到数据唯一,即数据去重

至少一次(At Least Once)= ACK级别设置为-1 + 分区副本大于等于2 + ISR里应答的最小副本数量大于等于2 可以保障数据可靠

最多一次(At Most Once= ACK级别设置为0

结论:

At Least Once可以保证数据不丢失,但是不能保证数据不重复;

At Most Once可以保证数据不重复,但是不能保证数据不丢失。

 精确一次(Exactly Once):对于一些非常重要的信息,比如和钱相关的数据,要求数据既不能重复也不丢失。 --幂等性和事务可以保障数据精确一次,Kafka 0.11版本以后,引入了一项重大特性:幂等性和事务。

幂等性

幂等性就是指Producer不论向Broker发送多少次重复数据,Broker端都只会持久化一条,保证了不重复。

精确一次(Exactly Once) = 幂等性 + 事务+至少一次( ack=-1 + 分区副本数>=2 + ISR最小副本数量>=2) 。

幂等性有点类似于sql语句中的 distinct

重复数据的判断标准:具有 <PID, Partition, SeqNumber>相同主键的消息提交时,Broker只会持久化一条。其 中PID是Kafka每次重启都会分配一个新的;Partition 表示分区号;Sequence Number是单调自增的。

所以幂等性只能保证的是在单分区单会话(重启会话就是下一次了)内不重复。

如果kafka集群挂了,重启了,此时以前的数据还会发送一回,数据又重复了。

如何使用幂等性

开启参数 enable.idempotence 默认为 true,false 关闭。

幂等性只能保障服务器不挂掉的情况下,发送数据是唯一的,假如发送者服务器挂掉了,那么重启之后还是会发送重复的数据,所以需要使用事务。kafka事务原理如下图:

每一个broker都有一个事务协调器,如何知道本次事务是哪个broker对应的事务协调器呢,有一个算法,如上图所示。

3.生产者如何提高吞吐量

1、batch.size:批次大小,默认16k

2、linger.ms:等待时间,修改为5-100ms

3、compression.type:压缩snappy

4、 RecordAccumulator:缓冲区大小,修改为64m

4.zk在kafka集群中有何作用

zk中有一个节点 consumers 这个里面,老版本0.9版本之前,存放的是消费者的偏移量(offset,这次消费者消费到哪个地方了,下次从这个地方继续消费),新版本的根本没放在zk中,直接放在集群中了。

5.简述kafka集群中的Leader选举机制

1)每一个broker上线时,会在zk中进行注册

2)每个broker中都有一个controller,controller会争先抢占zk中 controller节点的注册权,谁先抢到,谁选举时说了算。假如broker0中的controller中抢到了,那它就是说了算的人。该controller一直监听ids节点是否有挂掉的节点。

3)选举规则是:在ISR中存活为前提,按照AR中排在前面的优先,例如 ar[1,0,2] ,isr[1,0,2],那么Leader会按照1,0,2 进行顺序的轮询。

4)选举出来的新节点,注册到zk中,将信息记录在zk中。

5)其他contorller将zk中的信息同步下来。

6)假定broker中的leader挂掉了,会进行重新的选举。

7)客户端发送消息给Leader,Leader记录数据,落盘,形成Log,Log底层使用的是Segment,Segment底层每一个G,是一个单独的文件,1G内的数据要想查找迅速又分成了两个文件 log和index

6.kafka是如何处理数据乱序问题的

  1. 分区保证顺序:Kafka 将消息按 分区 存储,每个分区内部的消息顺序是严格保证的。当消费者从一个分区消费消息时,消息的消费顺序与其写入顺序一致。

  2. 分区策略:生产者可以根据消息的 key 将消息发送到特定分区,确保同一个 key 的消息始终发送到同一个分区,从而保持顺序。

  3. 消费者组管理:每个消费者组内部的每个消费者处理不同的分区。Kafka 确保每个分区只会有一个消费者来消费,从而避免了同一个分区的消息乱序。

  4. 幂等性和重试机制:为了避免消息丢失和乱序,Kafka 允许生产者启用幂等性,确保重复消息不会影响顺序,并且支持重试机制来保证消息成功传输。

7.kafka中节点如何服役和退役

服役:

创建一个新节点然后执行负载均衡流程。

负载均衡流程:

首先创建一个有kafka集群的新节点,创建一个要均衡的主题,即在kafka集群下创建一个json文件,里面记录着主题名字及版本信息。在一个新节点上生成一个负载均衡计划,生成的计划是一个json格式的文本,创建副本存储计划即将该文本复制到自己目录的一个json文件下,执行该计划并验证。

退役:

先按照退役一台节点,生成执行计划,然后按照服役时操作流程执行负载均衡。

8.Kafka中Leader挂了,Follower挂了,然后再启动,数据如何同步

Follower:由于数据同步的时候先进入Leader,随后同步给Follower,假如Follower挂掉了,Leader和其他的Follower 继续往前存储数据,挂掉的节点从ISR集合中剔除,此时挂掉的Follower又重启了,它会先从上一次挂掉的节点的HW开始同步数据,直到追上最后一个Follower为止,此时会重新回归ISR。

Leader:

9.kafka中初始化的时候Leader选举有一定的规律,如何打破这个规律呢

在生产环境中,每台服务器的配置和性能不一致,但是Kafka只会根据自己的代码规则创建对应的分区副本,就会导致个别服务器存储压力较大。所有需要手动调整分区副本的存储。

例如需求:创建一个新的topic,4个分区,两个副本,名称为three。将 该topic的所有副本都存储到broker0和broker1两台服务器上。

可以这样做:

创建一个新的 topic,名称为 three,查看分区副本存储情况,创建副本存储计划(所有副本都指定存储在 broker0、broker1 中),执行副本存储计划,验证副本存储计划

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

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

相关文章

如何在算家云搭建Aatrox-Bert-VITS2(音频生成)

一、模型介绍 ‌ Aatrox - Bert -VITS2 模型是一种基于深度学习的语音合成系统&#xff0c;结合了 BERT 的预训练能力和 VITS2 的微调技术&#xff0c;旨在实现高质量的个性化语音合成。 二、模型搭建流程 1. 创建容器实例 进入算家云的“应用社区”&#xff0c;点击搜索找到…

PDF编辑工具Adobe Acrobat DC 2023安装教程(附安装包)

Adobe Acrobat DC 2023 是 Adobe 公司推出的一款功能强大的 PDF 文档处理软件。它不仅支持创建、编辑和签署 PDF 文件&#xff0c;还提供了丰富的工具来管理和优化这些文件。以下是 Acrobat DC 2023 的一些主要特点&#xff1a; 1.PDF 创建与编辑&#xff1a;用户可以直接从多…

【李白打酒加强版——DP】

题目 思路 三个注意点&#xff1a;k是偶数的状态才能是遇到店之后的状态、f[n-1][m][k]状态非法、不要越界 代码 #include <bits/stdc.h> using namespace std; const int N 110, mod 1e97; int f[N][N][N]; int main() {int n, m;cin >> n >> m;f[0][0]…

HarmonyOS ArkTS 下拉列表组件

Entry Component struct Index {defaultValue: string 下拉列表;// 定义选项数组&#xff0c;包含 value 和可选的 labeloptions: Array<SelectOption> [{ value: aaa },{ value: bbb },{ value: ccc },{ value: ddd },{ value: eee },{ value: fff },{ value: ggg },{…

云上盛宴-腾讯云双11活动玩法攻略

大家好呀&#xff01;我是reload。今天来给大家分享一下腾讯云双十一活动玩法攻略。一年一度的双十一购物盛宴又要来了&#xff0c;为了应对各种秒杀抢购而导致的用户访问量激增&#xff0c;平台可以通过云计算技术的弹性伸缩能力&#xff0c;迅速增加服务器资源&#xff0c;确…

【ubuntu18.04】使用U盘制作ubuntu18.04启动盘操作说明

打开show application 打开Startup Disk 选择镜像 双击选择ubuntu的iso镜像 镜像下载地址 Ubuntu 18.04.6 LTS (Bionic Beaver) 制作镜像 注意&#xff1a; 制作镜像会格式化U盘&#xff0c;记得备份资料 点击Make Startup Disk,弹出如下对话框 点击Yes 输入管理员密码&a…

html+js+css实现拖拽式便签留言

前些日子在网上冲浪时&#xff0c;看到一个便签式留言墙&#xff0c;让人耳目一新。心想这个看着不错&#xff0c;额想要。于是便开始搜寻是否有相应开源插件&#xff0c;想将其引入自己的博客中。但是搜寻了一圈&#xff0c;都没有符合预期的,要么功能不符合。有的功能符合&am…

前端 call、bind、apply的实际使用

目录 一、call 1、继承的子类可以使用父类的方法 2、可以接收任意参数 二、call、apply、bind比较 1、案例一 2、案例二 三、总结 这个三个方法都是改变函数的this指向的方法。 一、call 1、继承的子类可以使用父类的方法 function Animal(){//this 指向小catthis.eat…

【C++笔记】C++三大特性之继承

【C笔记】C三大特性之继承 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C笔记 文章目录 【C笔记】C三大特性之继承前言一.继承的概念及定义1.1 继承的概念1.2继承的定义1.3继承基类成员访问方式的变化1.4继承类模板 二.基类和派生类间的转…

点击文本将内容填入tinymce-vue 富文本编辑器的光标处

富文本编辑器组件 <template><div ref"tinymceBox" class"tinymce-box"><Editor id"myEditor" v-model"contentValue" :init"init" :disabled"disabled" blur"inputBlur" click"o…

智能家居的未来:AI让生活更智能还是更复杂?

内容概要 智能家居的概念源于将各种家居设备连接到互联网&#xff0c;并通过智能技术进行控制和管理。随着人工智能的迅速发展&#xff0c;这一领域也迎来了前所未有的机遇。从早期简单的遥控器到如今可以通过手机应用、语音助手甚至是环境感应进行操作的设备&#xff0c;智能…

Meta AI 新技术,赋予机器人 “触觉” 的革命

Meta AI 新技术&#xff0c;赋予机器人 “触觉” 的革命 简介 传统机器人的局限 Meta AI 的新技术突破 技术应用前景 未来展望 简介 在科技飞速发展的今天&#xff0c;人工智能领域不断取得令人惊叹的突破。11月4日&#xff0c;Meta公司宣布其基础人工智能研究团队(FAIR)在…

微信小程序配置

1.进入微信小程序公众平台&#xff0c;进入后注册域名 2.项目接口代理 UniApp H5 跨域代理配置并使用&#xff08;配置manifest.json、vue.config.js&#xff09;_uniapp 代理-CSDN博客 我用了方法一 3.测试接口

IEEE JSSC更新|Tiny Tapeout:让每个人都能设计定制芯片

简介 由于成本高昂且需要专业技术&#xff0c;设计和制造定制集成电路的传统上仅限于大型公司和机构。然而&#xff0c;名为Tiny Tapeout的创新项目正在改变这一现状&#xff0c;让业余爱好者、学生和小型团队也能设计定制芯片。本文将探讨Tiny Tapeout的工作原理&#xff0c;以…

ubuntu 22.04 server 安装 anaconda3

ubuntu 22.04 server 安装 anaconda3 https://www.anaconda.com/download/success Anaconda Installers wget https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh 其他的是 默认 Executing transaction: done installation finished. Do you wish to…

【SpringMVC】基础入门(1)

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;什么是Spring Web MVC 1&#xff1a;Servlet 2&#xff1a;总结 二&#xff1a;MVC …

【linux】网络基础 ---- 应用层

1. 再谈 "协议" 协议是一种 "约定"&#xff0c;在读写数据时, 都是按 "字符串" 的方式来发送接收的. 但是这里我们会遇到一些问题&#xff1a; 如何确保从网上读取的数据是否是完整的&#xff0c;区分缓冲区中的由不同客户端发来的数据 2. 网…

Zookeeper运维秘籍:四字命令基础、详解及业务应用全解析

文章目录 一、四字命令基础二、四字命令详解三、四字命令的开启与配置四、结合业务解读四字命令confconsenvi命令Stat命令MNTR命令ruok命令dump命令wchswchp ZooKeeper&#xff0c;作为一款分布式协调服务&#xff0c;提供了丰富的四字命令&#xff08;也称为四字短语&#xff…

MinGW-w64_10.0.0 + GCC12_x86_64-12.2.0-release-posix-seh-msvcrt-rt_v10-rev2.zip

主题&#xff1a;mingw-w64安装 以及 matlab适配mingw-w64&#xff0c;g&#xff0c;gcc 无套路直接下载mingw-w64 for matlab 通过百度网盘分享的文件&#xff1a; MinGW-w64_10.0.0 GCC12_x86_64-12.2.0-release-posix-seh-msvcrt-rt_v10-rev2.zip 链接&#xff1a;https…

SpringCloudalibaba 集成 Knife4j 的时候出现多余的 前缀

这里是在网关 GateWay 中集成的 Knife4j&#xff0c;并且使用的是 Knife4j 服务发现模式 问题 用户服务 接口地址&#xff1a;/api/user/login GateWay 服务 现像 打开 Knife4j 文档中接口地址前缀多了一个 /api/user 解决 参考链接 2.1 Spring Cloud Gateway集成Knife4j …