【2023最全kafka面试和答案】

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

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

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

相关文章

防爆气象传感器的技术原理

TH-WFB5在科技日新月异的今天,防爆气象传感器以其独特的魅力和广泛的应用前景,正逐渐走进人们的视野。这种高科技产品不仅为工业安全、环境保护等领域提供了有力保障,更在预测未来气象变化、防范自然灾害等方面发挥着不可替代的作用。 一、防…

ON1 Portrait AI 2023:智能美颜,打造完美人像 mac版

在数字化时代,人像摄影的需求和追求愈发高涨。为了满足摄影师对于完美人像的追求,ON1推出了全新的ON1 Portrait AI 2023。这款软件结合了先进的人工智能技术与人像处理的专业知识,为人像摄影带来了前所未有的智能体验。 ON1 Portrait AI 202…

104. Go单测系列4---编写可测试的代码

文章目录 一、剔除干扰因素二、接口抽象进行解耦三、依赖注入代替隐式依赖四、SOLID原则 本文是Go单测系列的最后一篇,在这一篇中我们不再介绍编写单元测试的工具而是专注于如何编写可测试的代码。 编写可测试的代码可能比编写单元测试本身更加重要,可测…

03-自媒体文章发布

自媒体文章发布 1)自媒体前后端搭建 1.1)后台搭建 ①:资料中找到heima-leadnews-wemedia.zip解压 拷贝到heima-leadnews-service工程下,并指定子模块 执行leadnews-wemedia.sql脚本 添加对应的nacos配置 spring:datasource:driver-class-name: com…

五、OpenAI实战之Assistants API

在8线小城的革委会办公室里,黑8和革委会主任的对话再次展开。 黑8:主任,您知道吗?除了OpenAI API,现在还有一项新的技术叫做Assistants API,它可以帮助我们更好地进行对话和沟通。 主任:Assis…

如何保证消息的可靠传输

数据的丢失问题,可能出现在生产者、MQ、消费者中 生产者丢失: 生产者将数据发送到 RabbitMQ 的时候,可能数据就在半路给搞丢了,因为网络问题啥的,都有可能。此时可以选择用 RabbitMQ 提供的事务功能,就是生…

从0到1快速搭建一个jeecg 企业级应用管理后台

一. 基本介绍 官网地址:https://jeecg.com/ JeecgBoot 是一款企业级的低代码平台!前后端分离架构 SpringBoot2.x,SpringCloud,Ant Design&Vue3,Mybatis-plus,Shiro,JWT 支持微服务。强大的…

shell详解

系列文章目录 shell脚本基础知识3 shell脚本基础知识3 系列文章目录一、什么是shell二、shell脚本意义三、如何创建shell脚本(幻数)四、自动生成脚本头信息五、shell脚本运行方式5.1手动在环境中开启指定解释器,不会开启脚本指定的幻数5.2不…

基于 Win Server 2008 复现 IPC$ 漏洞

写在前面 本篇博客演示了使用 winXP(配合部分 win10 的命令)对 win server 2008 的 IPC$ 漏洞进行内网渗透,原本的实验是要求使用 win server 2003,使用 win server 2003 可以规避掉很多下面存在的问题,建议大家使用 …

【论文阅读】Generative Pretraining from Pixels

Generative Pretraining From Pixels 引用: Chen M, Radford A, Child R, et al. Generative pretraining from pixels[C]//International conference on machine learning. PMLR, 2020: 1691-1703. 论文链接: http://proceedings.mlr.press/v119/chen…

仿牛客网项目---消息队列的实现

本篇文章讲一讲我们的项目中用到的消息队列。 1.阻塞队列 2.kafka 我的项目为什么要用消息队列? 如果采用消息队列,那么评论、点赞、关注三类不同的事,可以定义三类不同的主题(评论、点赞、关注),发生相应…

Makedown语法

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

考研C语言复习初阶(5)

目录 一.表达式求值 1.1隐式类型转换 1.2 算术转换 12.3 操作符的属性 二. 指针是什么? 三 指针和指针类型 3.1 指针-整数 3.2 指针的解引用 3.3 野指针 四.指针运算 4.1 指针-整数 4.2 指针-指针 4.3 指针的关系运算 5. 指针和数组 6. 二级指针 …

【学习笔记】VMware vSphere 6.7虚拟化入门

VMware vSphere 6.7虚拟化入门课程介绍 课程内容 1、VMware vSphere 6.7虚拟化入门课程介绍 2、ESXi6.7控制台设置 3、使用vSpkere Host client管理虚拟机 4、VMware EsXi基础操作 5、VMware Esxi存储管理 6、管理ESXi主机网络与虚拟机网络 7、安装配置vCenter Server Applia…

哈希表|1.两数之和

力扣题目链接 /*** Note: The returned array must be malloced, assume caller calls free().*/// leetcode 支持 ut_hash 函式庫typedef struct {int key;int value;UT_hash_handle hh; // make this structure hashable} map;map* hashMap NULL;void hashMapAdd(int key, i…

【JAVA类】利用接口的多继承实现———图书管理系统【附源码】

引言 在我们学习了一些java的基础语法之后,需要把这些知识点可以串起来,这里使用一个简单的小项目可以很好的帮助我们牢记这些知识点,今天就带大家学习一个有关java的小项目,很多学校也经常把这个项目作为他们的课程设计——经典的…

HTML5+CSS3小实例:按钮边框动效

实例:按钮边框动效 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.…

git入门到精通

第3章 Git常用命令 3.1 设置用户签名 3.2 初始化本地库 3.3 查看本地 状态 3.3.1 首次查看&#xff08;工作区没有任何文件&#xff09; 3.3.2 新增文件&#xff08;hello.txt&#xff09; 3.3.3 再次查者&#xff08;检測到末追踪的文件&#xff09; 3.4添加暫存区 3…

System Verilog学习笔记(二十)——TCL基础

TCL简介 TCL&#xff08;Tool Command Language&#xff09;是一种解释执行的脚本语言。它提供了通用的编程能力&#xff1a;支持变量、过程和控制结构&#xff1b;同时TCL还拥有功能强大的固有的核心命令集 由于TCL的解释器是用C/C语言的过程库实现的&#xff0c;因此可以把T…

Unity笔记:C#基础(1)

杂项 虚函数 CSDN - C虚函数详解 cnblog - C#中的虚函数virtual 常量池与new 在C#中&#xff0c;string是不可变的&#xff0c;这意味着对string对象的操作通常会返回一个新的string对象&#xff0c;而不会修改原始的string对象。因此&#xff0c;几乎所有涉及更改string内…