kafka面试题

kafka基本概念

  • Producer 生产者:负责将消息发送到 Broker
  • Consumer 消费者:从 Broker 接收消息
  • Consumer Group 消费者组:由多个 Consumer 组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费,消费者组之间互不影响
  • Broker:可以看做一个独立的 Kafka 服务节点或 Kafka 服务实例
  • Topic:一个逻辑上的概念,包含很多 partition,同一个 topic 下的 partition 的消息内容是不相同的
  • Partition:为了实现扩展性,一个非常大的 topic 可以分布到多个 broker 上,一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列
  • Replica 副本:同一分区的不同副本保存的是相同的消息。为保证集群中的某个节点发生故障时,该节点上的 partition 数据不丢失,且 Kafka 仍然能够继续工作,Kafka 提供了副本机制,一个 topic 的每个分区都有若干个副本,一个 leader 和若干个 follower

kafka架构图

在这里插入图片描述

如何确定当前能读到哪一条消息?

在这里插入图片描述

分区相当于一个日志文件,我们需要知道几个概念

  • offset (消息偏移量)分别是 0~6
  • 0 代表这个日志文件的开始
  • HW(High Watermark)为 4。0~3 代表这个日志文件可以消费的区间,消费者只能消费到这 4 条消息
  • LEO 代表即将要写入消息的偏移量 offset

分区 ISR 集合中的每个副本都会维护自己的 LEO,而 ISR 集合中最小的 LEO 即为分区的 HW
在这里插入图片描述
如上图所示,3 个分区副本都是 ISR 集合当中的。最小的 LEO 为 3,就代表分区的 HW 为3,所以,当前分区只能消费到 0~2 之间的 3 条数据

生产者发送消息有哪些模式?

  • 发后即忘
  • 同步
  • 异步

发送消息的分区策略有哪些?

  • 轮询
  • key指定
  • 自定义策略
  • 指定 Partiton 发送

Kafka 支持读写分离吗,为什么?

读写分离有两个缺点

  • 数据不一致的问题
  • 延时问题
    kafka不支持读写分离

Kafka 如何实现负载均衡?

  • kafka 独特的架构方式可以通过主写主读来实现负载均衡

Kafka 的可靠性是怎么保证的?

  • acks
    • acks = 1,默认为1。生产者发送消息,只要 leader 副本成功写入消息,就代表成功
    • acks = 0。生产者发送消息后直接算写入成功,不需要等待响应
    • acks = -1 或 acks = all。生产者发送消息后,需要等待 ISR 中的所有副本都成功写入消息后才能收到服务端的响应
  • 我们可以通过同步或者异步获取响应结果,失败做重试来保证消息的可靠性.
  • 手动提交位移
  • 通过副本LEO来确定分区HW

kafka为什么会重复消费消息?

  • 在kafka提交offset的时候,可能由网络延迟或者某些原因导致offset没有同步,导致其他consumer消费了已经消费的消息.

如何保证kafka消息被顺序消费

  • 如果消息需要被顺序消费,就需要将这类消息指定发送到一个partition中.

副本 leader 是怎么选举的

  • 优先副本选举:优先副本就是说在 AR 集合中的第一个副本

如何增强消费者的消费能力?

  • 可以考虑增加 topic 的分区数,并且同时提升消费组的消费者数量,消费者数=分区数
  • 如果是消费者消费不及时,可以采用多线程的方式进行消费,并且优化业务方法流程

Kafka 控制器是什么,有什么作用?

> 在 Kafka 集群中会有一个或多个 broker,其中有一个 broker 会被选举为控制器,它负责管理整个集群中所有分区和副本的状态,Kafka 集群中只能有一个控制器

  • 当某个分区的 leader 副本出现故障时,由控制器负责为该分区选举新的 leader 副本;
  • 当检测到某个分区的 ISR 集合发生变化时,由控制器负责通知所有 broker 更新其元数据信息
  • 当为某个 topic 增加分区数量时,由控制器负责分区的重新分配。

Kafka 为什么这么快?

  • 顺序读写
  • Page Cache
  • 零拷贝
  • 分区分段+索引
  • 批量读写
  • 批量压缩

什么情况下 kafka 会丢失消息?

Kafka 有三次消息传递的过程:生产者发消息给 Broker,Broker 同步消息和持久化消息,Broker 将消息传递给消费者。
这其中每一步都有可能丢失消息

  • 生产者发送数据

    • 当 acks 为 0,只要服务端写消息时出现任何问题,都会导致消息丢失
    • 当 acks 配置为 1 时,生产者发送消息,只要 leader 副本成功写入消息,就代表成功。这种方案的问题在于,当返回成功后,如果 leader 副本和 follower 副本还没有来得及同步,leader 就崩溃了,那么在选举后新的 leader 就没有这条消息,也就丢失了
  • Broker 存储数据

    • kafka 通过 Page Cache 将数据写入磁盘,Page Cache 就是当往磁盘文件写入的时候,系统会先将数据流写入缓存中,但是什么时候将缓存的数据写入文件中是由操作系统自行决定。所以如果此时机器突然挂了,也是会丢失消息的
  • 消费者消费数据

    • 在开启自动提交 offset 时,只要消费者消费到消息,那么就会自动提交偏移量,如果业务还没有来得及处理,那么消息就会丢失。

Kafka的哪些场景中使用了零拷贝

  • 基于mmap的索引
  • 日志文件读写所用的TransportLayer

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

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

相关文章

Vue中TodoList案例_动画

MyItem.vue : 主要是引入了import animate.css样式库,animate.css样式库配置见上一篇文章animate.css样式库,然后再li标签外套了transition标签,引用了name里面的名称是animate.css拿过来的,绑定了enter-active-class和leave-act…

电脑硬盘指的是什么?电脑硬盘长什么样子呢

在很早之前就听说过电脑里面有硬盘,但是不知道电脑硬盘是什么样子,本章文章结合硬盘的接口类型,以及应用技术,说说与硬盘样式有关的知识 一。机械硬盘 如果从硬盘的应用技术来区分硬盘,一般分为两种,早些年…

2023年第三届能源、电力与电气工程国际会议 (CoEEPE 2023)

会议简介 Brief Introduction 2023年第三届能源、电力与电气工程国际会议(CoEEPE 2023) 会议时间:2023年11月22日-24日 召开地点:澳大利亚墨尔本 大会官网:www.coeepe.org 2023年第三届能源、电力与电气工程国际会议(CoEEPE 2023)由安徽大学、…

【大数据运维-ambari】自定义fair-scheduler.xml配置文件导致ambari-server启动失败

将自定义fair-scheduler.xml放到 /var/lib/ambari-server/resources/stacks/HDP/3.0/services/YARN/configuration目录下,重启ambari-server失败: 日志显示: 进ambari数据库查看发现数据应该是对的。 删掉之前自定义的文件fair-scheduler.x…

JavaScript function默认参数赋值前后顺序差异

1、(num1,num2num1) 当传值仅传一个参数时,先给到第一个参数即num1,num1再赋值给num2, function sum(num1, num2 num1) {console.log(num1 num2) } sum(10)//20 sum(10,3)//13 2、(t2t1,t1) 当传值仅有一个参数时,先给到第一个…

Qt 第一讲

登录框设置 #include "zuoye.h" #include "ui_zuoye.h"Zuoye::Zuoye(QWidget *parent): QWidget(parent), ui(new Ui::Zuoye) {ui->setupUi(this);//界面this->resize(540,420); //设置尺寸this->setFixedSize(540,420);//固定尺寸this->setS…

FPGA设计时序分析二、建立/恢复时间

目录 一、背景知识 1.1 理想时序模型 1.2 实际时序模型 1.2.1 时钟不确定性 1.2.2 触发器特性 二、时序分析 2.1 时序模型图 ​2.2 时序定性分析 一、背景知识 之前的章节提到,时钟对于FPGA的重要性不亚于心脏对于人的重要性,所有的逻辑运算都离开…

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照)

简介 本文将会通过一个简单的场景搭建,介绍如何使用烘焙光照以及相关的注意事项。另外还介绍了Unity内全局光照(GI)的知识和GI实际在游戏内的表现效果。 Unity关于光照相关的参考文档地址:https://docs.unity.cn/cn/current/Man…

JAVA基础-集合(List与Map)

目录 引言 一,Collection集合 1.1,List接口 1.1.1,ArrayList 1.1.1.1,ArrayList的add()添加方法 1.1.1.2,ArrayList的remove()删除方法 1.1.1.3,ArrayList的contai…

web前端tips:js继承——借用构造函数继承

上篇文章给大家分享了 js继承中的原型链继承 web前端tips:js继承——原型链继承 在文章末尾,我提到了 原型链的继承,子类需要传递参数给父类的构造函数,就无法通过直接调用父类的构造函数来实现,需要通过中间的过程来…

Protobuf数据交互实战

"no one gonna make me down" 在之前呢,我们介绍了什么protobuf以及它的语法、数据类型。 一句老话说得好,"多说不练,假把式!"。因此,本篇会选择以protobuf的语法,完成一个简易的通讯…

Godot 4 源码分析 - 获取脚本

获取属性列表 今天搂草打兔&#xff0c;取得了脚本内容 因为已能取得属性值&#xff0c;那就再进一步&#xff0c;取得属性名列表 if (SameText(drGet.propertyName, "propertyNames", DRGRAPH_FLAG_CASESENSITIVE)) {List<PropertyInfo> *p_list new List…

工信部、国家标准委联合印发《国家车联网产业指南(2023 版)》

国家工信部和标委发布了最新的《国家车联网产业标准体系建设指南&#xff08;智能网联汽车&#xff09;&#xff08;2023 版&#xff09;》&#xff0c;了解这篇文章&#xff0c;不论您是智能网联汽车的追随者&#xff0c;还是对智能网联汽车产业前景感兴趣的人&#xff0c;都非…

性能测试请求重试实现思路

文章目录 一、背景二、尝试的解决方案三、解决方案1&#xff1a;jmeter retrier插件&#xff01;有点用但是不是特别有用-_-||四&#xff0c;最终解决方案&#xff1a;lucust! 一、背景 最近系统需要压测一些活动&#xff0c;场景是新建抽奖活动之后&#xff0c;每隔2s查询1次…

Spring6——入门

文章目录 入门环境要求构建模块程序开发引入依赖创建java类创建配置文件创建测试类运行测试程序 程序分析启用Log4j2日志框架Log4j2日志概述引入Log4j2依赖加入日志配置文件测试使用日志 入门 环境要求 JDK&#xff1a;Java17&#xff08;Spring6要求JDK最低版本是Java17&…

1-Linux的目录结构

Linux的目录结构是规定好的&#xff0c;不可以随意进行更改&#xff01; Linux的文件系统是采用级层式的树状目录结构&#xff0c;最上层是根目录–/&#xff0c;然后再在根目录下创建其它的目录。 各个目录中主要负责的功能和作用如下&#xff1a;&#xff08;主体的结构一定…

引入第三方字体库 第三方字体库Google Fonts

googlefonts官方网站 googlefonts中国网站 本人是在微信小程序中引入 在static中建一个文件夹font-family 例如字体链接&#xff1a;https://fonts.font.im/css?familyKirangHaerang 将该链接的返回的资源的复制到css文件中 font-family.css /* [0] */ font-face {font-fam…

使用JMeter进行接口测试教程

安装 使用JMeter的前提需要安装JDK&#xff0c;需要JDK1.7以上版本目前在用的是JMeter5.2版本&#xff0c;大家可自行下载解压使用 运行 进入解压路径如E: \apache-jmeter-5.2\bin&#xff0c;双击jmeter.bat启动运行 启动后默认为英文版本&#xff0c;可通过Options – Ch…

使用node内置test runner,和 Jest say 拜拜

参考 https://nodejs.org/dist/latest-v20.x/docs/api/test.html#test-runner 在之前&#xff0c;我们写单元测试&#xff0c;必须安装第三方依赖包&#xff0c;而从node 20.0.0 版本之后&#xff0c;可以告别繁琐的第三方依赖包啦&#xff0c;可直接使用node的内置test runner…

centos中修改防火墙端口开放配置

1、直接进入文件修改 vim /etc/sysconfig/iptables 2、添加需要开放的端口 &#xff08;1&#xff09;添加需要开放的单个端口 4001 -A INPUT -m state --state NEW -m tcp -p tcp --dport 4001 -j ACCEPT &#xff08;2&#xff09;添加需要开放的某个网段端口 4001:4020 …