【2023最全kafka面试和答案】

news2025/6/20 8:35:37

2023最全kafka面试和答案

1.Kafka中的ISR(InSyncReplicate)、OSR(OutSyncReplicate)、AR(AllReplicate)代表什么?

  • ISR : 速率和leader相差低于10秒的follower的集合
  • OSR : 速率和leader相差大于10秒的follower
  • AR : 所有分区的follower
  • AR=ISR+OSR

2.Kafka中的HW、LEO、LSO、LW等分别代表什么

  • HW:High Watermark 高水位,取一个partition对应的ISR中最小的LEO作为HW,consumer最多只能消费到HW所在的位置上一条信息。
  • LEO:LogEndOffset 当前日志文件中下一条待写信息的offset
  • HW/LEO这两个都是指最后一条的下一条的位置而不是指最后一条的位置。
  • LSO:Last Stable Offset 对未完成的事务而言,LSO 的值等于事务中第一条消息的位置(firstUnstableOffset),对已完成的事务而言,它的值同 HW 相同
  • LW:Low Watermark 低水位, 代表 AR 集合中最小的 logStartOffset 值

3.Kafka中是怎么体现消息顺序性的?
每个分区内,每条消息都有offset,所以只能在同一分区内有序,但不同的分区无法做到消息顺序性;如果实在想顺序消费的话,可以要将消费组只弄一个消费者
4.“消费组中的消费者个数如果超过topic的分区,那么就会有消费者消费不到数据”这句话是否正确?
对的,超过分区数的消费者就不会再接收数据
5.有哪些情形会造成重复消费?或丢失信息?

  • 先处理后提交offset,会造成重读消费
  • 先提交offset后处理,会造成数据丢失
    6.Kafka 分区的目的?
  • 对于kafka集群来说,分区可以做到负载均衡,对于消费者来说,可以提高并发度,提高读取效率。

7.Kafka 的高可靠性是怎么实现的?

  • 7.1 消息生成端可靠性保证(设置ack参数):
    当ack=0时,producer不等待broker的ack,不管数据有没有写入成功,都不再重复发该数据
    ​ 当ack=1时,broker会等到leader写完数据后,就会向producer发送ack,但不会等follower同步数据,如果这时leader挂掉,producer会对新的leader发送新的数据,在old的leader中不同步的数据就会丢失
    当ack=-1或者all时,broker会等到leader和isr中的所有follower都同步完数据,再向producer发送ack,有可能造成数据重复
  • 7.2 消息消费端可靠性保证(设置ack参数)
  1. topic的分区数可不可以增加?如果可以怎么增加?如果不可以,那又是为什么?
    可以增加
bin/kafka-topics.sh --zookeeper localhost:2181/kafka --alter --topic topic-config --partitions 3

9.topic的分区数可不可以减少?如果可以怎么减少?如果不可以,那又是为什么?

  • 不可以,先有的分区数据难以处理
    10.简述Kafka的日志目录结构?
  • 每一个分区对应一个文件夹,命名为topic-0,topic-1,每个文件夹内有.index和.log文件
    11.如何解决消费者速率低的问题?
  • 增加分区数和消费者数
  1. Kafka的那些设计让它有如此高的性能??
    kafka是分布式的消息队列,对log文件进行了segment,并对segment建立了索引,(对于单节点)使用了顺序读写,速度可以达到600M/s,引用了zero拷贝,在os系统就完成了读写操作
    13.kafka启动不起来的原因?
  • 在关闭kafka时,先关了zookeeper,就会导致kafka下一次启动时,会报节点已存在的错误
  • 只要把zookeeper中的zkdata/version-2的文件夹删除即可

14.聊一聊Kafka Controller的作用?
负责kafka集群的上下线工作,所有topic的副本分区分配和选举leader工作
15. Kafka中有那些地方需要选举?这些地方的选举策略又有哪些?
在ISR中需要选择,选择策略为先到先得
16.失效副本是指什么?有那些应对措施?

  • 失效副本为速率比leader相差大于10秒的follower
  • 将失效的follower先提出ISR
  • 等速率接近leader10秒内,再加进ISR

17.Kafka消息是采用Pull模式,还是Push模式?

  • 在producer阶段,是向broker用Push模式
  • 在consumer阶段,是向broker用Pull模式
    *在Pull模式下,consumer可以根据自身速率选择如何拉取数据,避免了低速率的consumer发生崩溃的问题 但缺点是,consumer要时不时的去询问broker是否有新数据,容易发生死循环,内存溢出。
  1. Kafka创建Topic时如何将分区放置到不同的Broker中?
  • 首先副本数不能超过broker数
  • 第一分区是随机从Broker中选择一个,然后其他分区相对于0号分区依次向后移
  • 第一个分区是从nextReplicaShift决定的,而这个数也是随机产生的

19.Kafka中的事务是怎么实现的?

  • producer事务是为了解决kafka跨分区跨会话问题,kafka不能跨分区跨会话的主要问题是每次启动的producer的PID都是系统随机给的
    所以为了解决这个问题,我们就要手动给producer一个全局唯一的id,也就是transaction id 简称TID
    我们将TID和PID进行绑定,在producer带着TID和PID第一次向broker注册时,broker就会记录TID,并生成一个新的组件transaction_state用来保存TID的事务状态信息。当producer重启后,就会带着TID和新的PID向broker发起请求,当发现TID一致时,producer就会获取之前的PID,将覆盖掉新的PID,并获取上一次的事务状态信息,从而继续上次工作
  • consumer事务相对于producer事务就弱一点,需要先确保consumer的消费和提交位置为一致且具有事务功能,才能保证数据的完整,不然会造成数据的丢失或重复
  1. Kafka中的分区器、序列化器、拦截器是否了解?它们之间的处理顺序是什么?
    拦截器>序列化器>分区器

  2. Kafka生产者客户端的整体结构是什么样子的?使用了几个线程来处理?分别是什么?
    在这里插入图片描述
    使用两个线程: main线程和sender线程
    main线程会依次经过拦截器,序列化器,分区器将数据发送到RecourdAccumlator(线程共享变量)。再由sender线程从RecourdAccumlator中拉取数据发送到kafka broker
    相关参数:

  • batch.size:只有数据积累到batch.size之后,sender才会发送数据。
  • linger.ms:如果数据迟迟未达到batch.size,sender等待linger.time之后就会发送数据。
  1. 消费者提交消费位移时提交的是当前消费到的最新消息的offset还是offset+1?
  • offset + 1

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

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

相关文章

Flink 学习3 - 流处理API的基本转换算子 + 多流转换算子

流处理API-Transform 1、基本转换算子 map、flatMap、filter通常被统一称为基本转换算子(简单转换算子) DataStream 里没有 reduce 和 sum 这类聚合操作的方法,因为 Flink 设计中,所有数据必须先分组才能做聚合操作。 先 keyB…

Java设计模式:建造者模式之经典与流式的三种实现(四)

本文将深入探讨Java中建造者模式的两种实现方式:经典建造者与流式建造者。建造者模式是一种创建型设计模式,它允许你构建复杂对象的步骤分解,使得对象的创建过程更加清晰和灵活。我们将通过示例代码详细解释这两种实现方式,并分析…

图分割 Graph Partition 学习笔记1

文章目录 前言一、graph-partition是什么?二、具体分类三、graph-partition的意义参考链接 前言 最近在学习图论划分的方法,碰巧搜索到了这个算是对我而言全新的一个体系,在这里将逐步记载自己的学习资料和进度,希望和大家一起探讨…

《汇编语言》第3版(王爽)实验9

第9章 实验9 编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串 ‘welcome to masm!’ assume cs:code,ds:datadata segmentdb welcome to masm!,0 data endscode segmentstart:mov ax,data mov ds,ax ;ds指向data段mov ax,0B800H ;显存空间从B800H…

波奇学Linux: 信号捕捉

sigaction:修改信号对应的handler方法 act输入型参数&#xff0c;oldact输出型参数 void (*sa_handler) (int) //修改的自定义函数 sigset_t sa_mask // void handler(int signo) {cout<<"catch a signal, signal number: "<<signo<<endl; } int …

C#实现快速排序算法

C#实现快速排序算法 以下是C#中的快速排序算法实现示例&#xff1a; using System;class QuickSort {// 快速排序入口函数public static void Sort(int[] array){QuickSortRecursive(array, 0, array.Length - 1);}// 递归函数实现快速排序private static void QuickSortRecu…

记录一次排查负载均衡不能创建的排查过程

故障现象&#xff0c;某云上&#xff0c;运维同事在创建负载均衡的时候&#xff0c;发现可以创建资源&#xff0c;但是创建完之后&#xff0c;不显示对应的负载均衡。 创建负载均衡时候&#xff0c;按f12发现console有如下报错 后来请后端网络同事排查日志发现&#xff0c;是后…

机器学习--循环神经网络(RNN)3

本篇文章结合具体的例子来介绍一下LSTM运算方式以及原理。请结合上篇文章的介绍食用。 一、具体例子 如上图所示&#xff0c;网络里面只有一个 LSTM 的单元&#xff0c;输入都是三维的向量&#xff0c;输出都是一维的输出。 这三维的向量跟输出还有记忆元的关系是这样的。 假设…

【蓝桥杯】k倍区间

一.题目描述 二.问题分析 对于该问题&#xff0c;标签上写的是暴力&#xff0c;但是如果使用暴力的话&#xff0c;会超时。 首先&#xff0c;对于两个数a&#xff0c;b&#xff08;假设a小于b&#xff09;&#xff0c;若a与b对k取余后结果相同&#xff0c;则b-a可以整除k。 …

Edu 18 Colored balls -- 题解

目录 Colored Balls&#xff1a; 题目大意: 思路解析&#xff1a; 代码实现&#xff1a; Colored Balls&#xff1a; 题目大意: 思路解析&#xff1a; 我们对于一个数n&#xff0c;如果分组大小超过了 根号n&#xff0c;那么便不可能将n 分为多个组&#xff0c;并且组间差距…

苍穹外卖学习-----2024/03/09

1.菜品分页查询 代码在这里 分页查询菜品 2.删除菜品 [链接]param 1、概览 本文将带你了解 Spring 中 RequestParam 注解的用法。 简单地说&#xff0c;可以使用 RequestParam 从请求中提取查询参数、表单参数甚至是多个参数。 2、示例端点 假设我们有一个端点 /api/foos&a…

qt一个项目只能有一个QMainWindow,其他小窗口只能继承QWidget

我继承QMainWindow&#xff0c;结果就出现奇奇怪怪的现象&#xff0c;我人都疯了 这些接口全他妈不能用 删了换成QWidget就可以用了

重建大师下图界面上的颜色区域分别代表着什么?

分别代表相对精度、绝对精度。 重建大师是一款专为超大规模实景三维数据生产而设计的集群并行处理软件&#xff0c;输入倾斜照片&#xff0c;激光点云&#xff0c;POS信息及像控点&#xff0c;输出高精度彩色网格模型&#xff0c;可一键完成空三、自动建模和LOD构建。 下载地…

idea连接远程服务器

1. 双击shift&#xff0c;出现如下界面 2. 远程连接 原文来自这个up主的&#xff0c;点击蓝色字体就可以跳转啦&#xff01; 输入主机ip、用户名、密码&#xff0c;点击Test Connection验证&#xff0c;最后点击ok添加成功 有用的话记得给俺点个赞&#xff0c;靴靴~

赶紧来学Python回调函数

在Python中&#xff0c;回调函数是一种非常重要的编程概念&#xff0c;它允许我们将一个函数作为参数传递给另一个函数&#xff0c;并在需要时由另一个函数调用。回调函数的使用可以使代码更加灵活和可重用&#xff0c;尤其在异步编程、事件驱动编程中非常常用。 1.普通函数调…

波动数列 刷题笔记

思路分析 dp 找出状态转移方程 设d为a或者-b 代码 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N1010,MOD100000007; int get_mod(int a,int b){ return (a%bb)%b; …

悲观锁和乐观锁

悲观锁&#xff1a;比较悲观&#xff0c;认为线程安全问题一定会发生&#xff0c;因此在操作数据之前先获取锁&#xff0c;确保线程串行执行。-例如Synchronized、Lock都属于悲观锁。 乐观锁&#xff1a;比较乐观&#xff0c;认为线程安全问题不一定会发生&#xff0c;因此不加…

数论<1>——数论基础

这期博客是一个数论入门介绍&#xff0c;dalao们可以自动忽略。 Part 1:素数(质数) 说到数论&#xff0c;小学奥数里也有。我最先想到的就是质数了。素数就是一个只能被1和它自己整除的数。判断的方法也很简单&#xff0c;可以扫一遍就结束了&#xff0c;但是没必要。由于一个…

使用yarn创建vite+vue3electron多端运行

文章目录 第一步 使用yarn创建vite+vue3项目遇到创建报错看第二步 引入electron第三步 创建main.js在electron下面的main.js写入下面代码第四步 安装同时运行多条命令npm包&&修改package.json文件npm包增加一条electron运行脚本命令效果图第一步 使用yarn创建vite+vue3…

[Electron]中IPC进程间通信

Electron中IPC 进程间通信 (IPC) 是在 Electron 中构建功能丰富的桌面应用程序的关键部分之一。在 Electron 中&#xff0c;进程使用 ipcMain 和 ipcRenderer 模块&#xff0c;通过开发人员定义的“通道”传递消息来进行通信。 本文介绍以下几个方面&#xff1a; 1-渲染进程到…